hobots 2.0.0 → 2.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 +3 -3
- package/dist/index.cjs +27 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +27 -27
- package/dist/index.js.map +1 -1
- package/dist/protocol.cjs.map +1 -1
- package/dist/protocol.d.cts +12 -4
- package/dist/protocol.d.ts +12 -4
- package/docs/api-reference.md +7 -7
- package/docs/concepts.md +13 -11
- package/docs/tasks.md +1 -1
- package/docs/telemetry.md +3 -3
- package/package.json +1 -1
package/dist/protocol.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/protocol.ts"],"sourcesContent":["/**\n * Tipos do protocolo do Hobots (SDK → servidor).\n *\n * Este arquivo é a fonte de verdade do wire format e só pode reexportar tipos:\n * o app valida os payloads com zod e trava o drift via `satisfies z.ZodType<...>`\n * contra estes tipos (importados de `hobots/protocol`).\n */\n\n// Wire format de tasks (agente ↔ servidor) — reexportado aqui para o app\n// consumir tudo de `hobots/protocol`.\nexport type {\n RunStatus,\n RunUpdateStatus,\n RunLogLevel,\n RunLogEntry,\n InstanceInfo,\n PollRequest,\n RunDescriptor,\n PollResponse,\n RunError,\n RunUpdateRequest,\n RunUpdateResponse,\n RunItemStatus,\n RunItemInput,\n RunItemsCreateRequest,\n RunItemsCreateResponse,\n RunAttachmentContentType,\n RunAttachmentCreateRequest,\n RunAttachmentCreateResponse,\n RunAttachmentConfirmRequest,\n RunAttachmentConfirmResponse,\n} from './tasks/protocol';\n\nexport type
|
|
1
|
+
{"version":3,"sources":["../src/protocol.ts"],"sourcesContent":["/**\n * Tipos do protocolo do Hobots (SDK → servidor).\n *\n * Este arquivo é a fonte de verdade do wire format e só pode reexportar tipos:\n * o app valida os payloads com zod e trava o drift via `satisfies z.ZodType<...>`\n * contra estes tipos (importados de `hobots/protocol`).\n */\n\n// Wire format de tasks (agente ↔ servidor) — reexportado aqui para o app\n// consumir tudo de `hobots/protocol`.\nexport type {\n RunStatus,\n RunUpdateStatus,\n RunLogLevel,\n RunLogEntry,\n InstanceInfo,\n PollRequest,\n RunDescriptor,\n PollResponse,\n RunError,\n RunUpdateRequest,\n RunUpdateResponse,\n RunItemStatus,\n RunItemInput,\n RunItemsCreateRequest,\n RunItemsCreateResponse,\n RunAttachmentContentType,\n RunAttachmentCreateRequest,\n RunAttachmentCreateResponse,\n RunAttachmentConfirmRequest,\n RunAttachmentConfirmResponse,\n} from './tasks/protocol';\n\n/**\n * Tipo de um evento — o que ele é, não o quanto ele fala. Só 'fatal', 'error' e\n * 'warning' viram issue; 'success' é ingerido e nunca abre issue.\n * Ruído de log não é evento: para isso existem os logs da execução (RunLogLevel)\n * e as breadcrumbs, que têm níveis próprios com 'debug'/'info'.\n */\nexport type EventType = 'fatal' | 'error' | 'warning' | 'success';\n\n/** Nível de uma breadcrumb — trilha do que aconteceu antes, aqui log é bem-vindo. */\nexport type BreadcrumbLevel = 'debug' | 'info' | 'warning' | 'error' | 'fatal';\n\n/** Frames em ordem innermost-first (mesma ordem impressa pelo V8). */\nexport interface StackFrame {\n function?: string;\n filename?: string;\n lineno?: number;\n colno?: number;\n in_app: boolean;\n}\n\nexport interface Breadcrumb {\n /** ISO 8601 */\n timestamp: string;\n type?: string;\n category?: string;\n message?: string;\n level?: BreadcrumbLevel;\n data?: Record<string, unknown>;\n}\n\nexport interface ExceptionData {\n type: string;\n value: string;\n stacktrace?: { frames: StackFrame[] };\n}\n\nexport interface EventUser {\n id?: string;\n username?: string;\n email?: string;\n}\n\nexport interface EventPayload {\n /** uuid v4 sem hífens (32 hex), gerado pelo SDK */\n event_id: string;\n /** ISO 8601 */\n timestamp: string;\n type: EventType;\n message?: string;\n exception?: ExceptionData;\n /** Override de agrupamento; quando ausente o servidor calcula pelo stack trace */\n fingerprint?: string[];\n breadcrumbs?: Breadcrumb[];\n tags?: Record<string, string>;\n user?: EventUser;\n contexts?: Record<string, Record<string, unknown>>;\n extra?: Record<string, unknown>;\n release?: string;\n environment?: string;\n}\n\n/** Status de uma step (etapa). `warning` = terminou, mas merece atenção (não é falha). */\nexport type StepStatus = 'ok' | 'warning' | 'error' | 'cancelled';\n\nexport interface StepData {\n /** 16 hex */\n step_id: string;\n parent_step_id?: string;\n op?: string;\n description?: string;\n status?: StepStatus;\n /** ISO 8601 */\n start_timestamp: string;\n /** ISO 8601 (fim da step) */\n timestamp: string;\n data?: Record<string, unknown>;\n}\n\nexport interface TransactionPayload {\n event_id: string;\n name: string;\n op?: string;\n status: string;\n start_timestamp: string;\n timestamp: string;\n steps: StepData[];\n tags?: Record<string, string>;\n release?: string;\n environment?: string;\n /** Correlaciona esta transaction a uma execução de task (ctx.tx dentro de um task handler) */\n run_id?: string;\n}\n\nexport interface HeartbeatPayload {\n instance_id: string;\n name?: string;\n interval_ms: number;\n /** ISO 8601 */\n timestamp: string;\n metadata?: Record<string, unknown>;\n release?: string;\n}\n\nexport type EnvelopeItem =\n | { type: 'event'; payload: EventPayload }\n | { type: 'transaction'; payload: TransactionPayload }\n | { type: 'heartbeat'; payload: HeartbeatPayload };\n\nexport interface Envelope {\n sdk: { name: string; version: string };\n /** ISO 8601 */\n sent_at: string;\n items: EnvelopeItem[];\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
package/dist/protocol.d.cts
CHANGED
|
@@ -155,7 +155,15 @@ interface RunAttachmentConfirmResponse {
|
|
|
155
155
|
* contra estes tipos (importados de `hobots/protocol`).
|
|
156
156
|
*/
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
/**
|
|
159
|
+
* Tipo de um evento — o que ele é, não o quanto ele fala. Só 'fatal', 'error' e
|
|
160
|
+
* 'warning' viram issue; 'success' é ingerido e nunca abre issue.
|
|
161
|
+
* Ruído de log não é evento: para isso existem os logs da execução (RunLogLevel)
|
|
162
|
+
* e as breadcrumbs, que têm níveis próprios com 'debug'/'info'.
|
|
163
|
+
*/
|
|
164
|
+
type EventType = 'fatal' | 'error' | 'warning' | 'success';
|
|
165
|
+
/** Nível de uma breadcrumb — trilha do que aconteceu antes, aqui log é bem-vindo. */
|
|
166
|
+
type BreadcrumbLevel = 'debug' | 'info' | 'warning' | 'error' | 'fatal';
|
|
159
167
|
/** Frames em ordem innermost-first (mesma ordem impressa pelo V8). */
|
|
160
168
|
interface StackFrame {
|
|
161
169
|
function?: string;
|
|
@@ -170,7 +178,7 @@ interface Breadcrumb {
|
|
|
170
178
|
type?: string;
|
|
171
179
|
category?: string;
|
|
172
180
|
message?: string;
|
|
173
|
-
level?:
|
|
181
|
+
level?: BreadcrumbLevel;
|
|
174
182
|
data?: Record<string, unknown>;
|
|
175
183
|
}
|
|
176
184
|
interface ExceptionData {
|
|
@@ -190,7 +198,7 @@ interface EventPayload {
|
|
|
190
198
|
event_id: string;
|
|
191
199
|
/** ISO 8601 */
|
|
192
200
|
timestamp: string;
|
|
193
|
-
|
|
201
|
+
type: EventType;
|
|
194
202
|
message?: string;
|
|
195
203
|
exception?: ExceptionData;
|
|
196
204
|
/** Override de agrupamento; quando ausente o servidor calcula pelo stack trace */
|
|
@@ -261,4 +269,4 @@ interface Envelope {
|
|
|
261
269
|
items: EnvelopeItem[];
|
|
262
270
|
}
|
|
263
271
|
|
|
264
|
-
export type { Breadcrumb, Envelope, EnvelopeItem, EventPayload, EventUser, ExceptionData, HeartbeatPayload, InstanceInfo, PollRequest, PollResponse, RunAttachmentConfirmRequest, RunAttachmentConfirmResponse, RunAttachmentContentType, RunAttachmentCreateRequest, RunAttachmentCreateResponse, RunDescriptor, RunError, RunItemInput, RunItemStatus, RunItemsCreateRequest, RunItemsCreateResponse, RunLogEntry, RunLogLevel, RunStatus, RunUpdateRequest, RunUpdateResponse, RunUpdateStatus,
|
|
272
|
+
export type { Breadcrumb, BreadcrumbLevel, Envelope, EnvelopeItem, EventPayload, EventType, EventUser, ExceptionData, HeartbeatPayload, InstanceInfo, PollRequest, PollResponse, RunAttachmentConfirmRequest, RunAttachmentConfirmResponse, RunAttachmentContentType, RunAttachmentCreateRequest, RunAttachmentCreateResponse, RunDescriptor, RunError, RunItemInput, RunItemStatus, RunItemsCreateRequest, RunItemsCreateResponse, RunLogEntry, RunLogLevel, RunStatus, RunUpdateRequest, RunUpdateResponse, RunUpdateStatus, StackFrame, StepData, StepStatus, TransactionPayload };
|
package/dist/protocol.d.ts
CHANGED
|
@@ -155,7 +155,15 @@ interface RunAttachmentConfirmResponse {
|
|
|
155
155
|
* contra estes tipos (importados de `hobots/protocol`).
|
|
156
156
|
*/
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
/**
|
|
159
|
+
* Tipo de um evento — o que ele é, não o quanto ele fala. Só 'fatal', 'error' e
|
|
160
|
+
* 'warning' viram issue; 'success' é ingerido e nunca abre issue.
|
|
161
|
+
* Ruído de log não é evento: para isso existem os logs da execução (RunLogLevel)
|
|
162
|
+
* e as breadcrumbs, que têm níveis próprios com 'debug'/'info'.
|
|
163
|
+
*/
|
|
164
|
+
type EventType = 'fatal' | 'error' | 'warning' | 'success';
|
|
165
|
+
/** Nível de uma breadcrumb — trilha do que aconteceu antes, aqui log é bem-vindo. */
|
|
166
|
+
type BreadcrumbLevel = 'debug' | 'info' | 'warning' | 'error' | 'fatal';
|
|
159
167
|
/** Frames em ordem innermost-first (mesma ordem impressa pelo V8). */
|
|
160
168
|
interface StackFrame {
|
|
161
169
|
function?: string;
|
|
@@ -170,7 +178,7 @@ interface Breadcrumb {
|
|
|
170
178
|
type?: string;
|
|
171
179
|
category?: string;
|
|
172
180
|
message?: string;
|
|
173
|
-
level?:
|
|
181
|
+
level?: BreadcrumbLevel;
|
|
174
182
|
data?: Record<string, unknown>;
|
|
175
183
|
}
|
|
176
184
|
interface ExceptionData {
|
|
@@ -190,7 +198,7 @@ interface EventPayload {
|
|
|
190
198
|
event_id: string;
|
|
191
199
|
/** ISO 8601 */
|
|
192
200
|
timestamp: string;
|
|
193
|
-
|
|
201
|
+
type: EventType;
|
|
194
202
|
message?: string;
|
|
195
203
|
exception?: ExceptionData;
|
|
196
204
|
/** Override de agrupamento; quando ausente o servidor calcula pelo stack trace */
|
|
@@ -261,4 +269,4 @@ interface Envelope {
|
|
|
261
269
|
items: EnvelopeItem[];
|
|
262
270
|
}
|
|
263
271
|
|
|
264
|
-
export type { Breadcrumb, Envelope, EnvelopeItem, EventPayload, EventUser, ExceptionData, HeartbeatPayload, InstanceInfo, PollRequest, PollResponse, RunAttachmentConfirmRequest, RunAttachmentConfirmResponse, RunAttachmentContentType, RunAttachmentCreateRequest, RunAttachmentCreateResponse, RunDescriptor, RunError, RunItemInput, RunItemStatus, RunItemsCreateRequest, RunItemsCreateResponse, RunLogEntry, RunLogLevel, RunStatus, RunUpdateRequest, RunUpdateResponse, RunUpdateStatus,
|
|
272
|
+
export type { Breadcrumb, BreadcrumbLevel, Envelope, EnvelopeItem, EventPayload, EventType, EventUser, ExceptionData, HeartbeatPayload, InstanceInfo, PollRequest, PollResponse, RunAttachmentConfirmRequest, RunAttachmentConfirmResponse, RunAttachmentContentType, RunAttachmentCreateRequest, RunAttachmentCreateResponse, RunDescriptor, RunError, RunItemInput, RunItemStatus, RunItemsCreateRequest, RunItemsCreateResponse, RunLogEntry, RunLogLevel, RunStatus, RunUpdateRequest, RunUpdateResponse, RunUpdateStatus, StackFrame, StepData, StepStatus, TransactionPayload };
|
package/docs/api-reference.md
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
| `init` | `init(options: InitOptions): void` | — |
|
|
17
17
|
| `getClient` | `getClient(): Client \| undefined` | cliente atual |
|
|
18
18
|
| `captureException` | `captureException(error: unknown, hint?: CaptureHint)` | `string \| undefined` (event_id — **não** é confirmação de envio) |
|
|
19
|
-
| `captureMessage` | `captureMessage(message: string,
|
|
19
|
+
| `captureMessage` | `captureMessage(message: string, type?: EventType, hint?: CaptureHint)` | `string \| undefined` (idem) |
|
|
20
20
|
| `addBreadcrumb` | `addBreadcrumb(crumb: BreadcrumbInput): void` | — |
|
|
21
21
|
| `setTag` / `setTags` | `setTag(key, value)` · `setTags(tags)` | — |
|
|
22
22
|
| `setUser` | `setUser(user: EventUser \| null): void` | — |
|
|
@@ -33,8 +33,8 @@ Os conceitos por trás dessas chamadas estão em [Conceitos](./concepts.md); aqu
|
|
|
33
33
|
|
|
34
34
|
- **`init(options)`** — cria o cliente, instala os handlers globais de erro (a menos que `captureUnhandled: false`), inicia o heartbeat se configurado e cria o agente de tasks se `tasks` foi passado. Chamar de novo **substitui** o cliente e o agente (os handlers registrados com `register` são preservados; o [scope](./concepts.md#scope) **não** é limpo). Chame uma vez, o mais cedo possível.
|
|
35
35
|
- **`getClient()`** — devolve o cliente atual ou `undefined` se o `init()` nunca rodou. Útil para checar se o SDK está ativo. A config resolvida (URL base e endpoints) é acessível via `getClient()?.config` (veja abaixo).
|
|
36
|
-
- **`captureException(error, hint?)`** — monta um [evento](./concepts.md#evento) a partir da exceção (tipo, mensagem, stack trace), mescla o scope e enfileira. O `
|
|
37
|
-
- **`captureMessage(message,
|
|
36
|
+
- **`captureException(error, hint?)`** — monta um [evento](./concepts.md#evento) a partir da exceção (tipo, mensagem, stack trace), mescla o scope e enfileira. O `type` é `error` a menos que você passe outro no `hint`.
|
|
37
|
+
- **`captureMessage(message, type = 'warning', hint?)`** — mesma coisa, sem exceção: um evento só com texto. Bom para marcos (`'success'`) e avisos que não são erro.
|
|
38
38
|
> **Atenção:** as duas devolvem um `event_id` **mesmo quando o evento foi descartado** por [amostragem](./concepts.md#amostragem-samplerate-e-tracessamplerate) ou por [`beforeSend`](./concepts.md#beforesend). O retorno não prova que algo foi enviado — só é `undefined` quando o `init()` não foi chamado.
|
|
39
39
|
- **`addBreadcrumb(crumb)`** — adiciona uma migalha à trilha do [scope](./concepts.md#scope) global. Todos os campos são opcionais menos o `timestamp`, que o SDK preenche. A lista **não** é limpa ao enviar um evento; ela só descarta as mais antigas ao estourar `maxBreadcrumbs`. Conceito: [Breadcrumb](./concepts.md#breadcrumb).
|
|
40
40
|
- **`setTag(key, value)` / `setTags(tags)`** — grava [tags](./concepts.md#tag) no scope global; valem para todos os eventos seguintes. Só `string` → `string`. Precedência: `init.tags` → scope → evento → `hint`.
|
|
@@ -63,8 +63,8 @@ Todos encadeáveis, exceto `finish()` e `toJSON()`.
|
|
|
63
63
|
|
|
64
64
|
- **`Transaction`** — `startChild(op?, description?) → Step` abre uma [step](./concepts.md#step) direta; `setTag(k, v)` marca a transaction (tags de scope **não** são herdadas); `setStatus(s)` (default `'ok'`); `setName(n)` renomeia antes do envio; `finish()` fecha as etapas abertas, monta o payload e envia — é **idempotente** e não envia nada se a transaction não foi amostrada.
|
|
65
65
|
- **`Step`** — `startChild(op?, description?) → Step` aninha uma filha (profundidade arbitrária); `setStatus(s)` (default `'ok'`); `setData(k, v)` anexa dados só àquela step; `finish()` marca o fim — **opcional**, porque o `finish()` da transaction fecha o que ficou aberto; `toJSON()` serializa no formato do wire.
|
|
66
|
-
- **`Scope`** — `setTag`/`setTags`/`setUser`/`setContext`/`setExtra`/`setExtras`/`
|
|
67
|
-
> **Atenção:** `
|
|
66
|
+
- **`Scope`** — `setTag`/`setTags`/`setUser`/`setContext`/`setExtra`/`setExtras`/`setType`/`setFingerprint`/`addBreadcrumb`/`clearBreadcrumbs`/`clone`. Alcançável via [`withScope`](./concepts.md#withscope). `setContext(name, null)` apaga o grupo; `setUser(null)` remove o usuário.
|
|
67
|
+
> **Atenção:** `setType` **não tem efeito** em `captureException` (que já grava `error`) nem em `captureMessage` (que já grava `warning`) — os dois definem o tipo do evento antes de o scope ser consultado. Use o `hint`.
|
|
68
68
|
|
|
69
69
|
---
|
|
70
70
|
|
|
@@ -124,7 +124,7 @@ O teto da fila do transport (200 itens; ao encher, o **mais antigo** é descarta
|
|
|
124
124
|
|
|
125
125
|
| Campo | Tipo | Descrição |
|
|
126
126
|
| --- | --- | --- |
|
|
127
|
-
| `
|
|
127
|
+
| `type` | `EventType` | tipo do evento |
|
|
128
128
|
| `tags` | `Record<string,string>` | tags só deste evento |
|
|
129
129
|
| `extra` | `Record<string,unknown>` | dados extras |
|
|
130
130
|
| `fingerprint` | `string[]` | agrupamento manual |
|
|
@@ -142,7 +142,7 @@ O teto da fila do transport (200 itens; ao encher, o **mais antigo** é descarta
|
|
|
142
142
|
|
|
143
143
|
O texto da linha de log é a mensagem capturada; o nível vem do `level` da captura (`'fatal'` vira `'error'`). O upload roda em segundo plano e **nunca bloqueia nem faz a captura lançar**. Limites (todos aplicados também no servidor): PNG/JPEG/WEBP, **5 MB** por imagem, **20** anexos por execução, **4** por linha de log.
|
|
144
144
|
|
|
145
|
-
`
|
|
145
|
+
`EventType = 'fatal' | 'error' | 'warning' | 'success'`. O que cada tipo significa (e por que `'success'` existe) em [Type](./concepts.md#type-tipo-do-evento).
|
|
146
146
|
|
|
147
147
|
### TasksOptions
|
|
148
148
|
|
package/docs/concepts.md
CHANGED
|
@@ -11,7 +11,7 @@ Os defaults numéricos **não** estão aqui — eles vivem em [Tempos e interval
|
|
|
11
11
|
| Conceito | Em uma frase | Quando você usa |
|
|
12
12
|
| ------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------- |
|
|
13
13
|
| [Evento](#evento) | Uma foto de algo que aconteceu — um erro ou uma mensagem | `captureException` / `captureMessage` |
|
|
14
|
-
| [
|
|
14
|
+
| [Type](#type-tipo-do-evento) | O que o evento é | Para separar o que acorda alguém do que é só registro |
|
|
15
15
|
| [Fingerprint](#fingerprint) | A chave de agrupamento dos eventos em issues | Quando o agrupamento automático erra |
|
|
16
16
|
| [Scope](#scope) | A mochila de contexto que viaja com todo evento | Você raramente mexe direto; mexe pelos `set*` |
|
|
17
17
|
| [withScope](#withscope) | Um scope temporário e isolado | Contexto que **não** deve vazar para o resto do programa |
|
|
@@ -58,28 +58,30 @@ No servidor, eventos parecidos são agrupados numa **issue** — o que você vê
|
|
|
58
58
|
|
|
59
59
|
```js
|
|
60
60
|
Hobots.captureException(error);
|
|
61
|
-
Hobots.captureMessage('Lote processado com sucesso', '
|
|
61
|
+
Hobots.captureMessage('Lote processado com sucesso', 'success');
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
As duas devolvem o `event_id` (um uuid), útil para você logar junto e depois achar o evento no app.
|
|
65
65
|
|
|
66
66
|
> **Atenção:** o `event_id` devolvido **não é confirmação de envio**. Se o evento foi descartado por [amostragem](#amostragem-samplerate-e-tracessamplerate) ou por [`beforeSend`](#beforesend), você recebe um id normalmente e nada foi enfileirado. Elas devolvem `undefined` só quando o `init()` nunca foi chamado.
|
|
67
67
|
|
|
68
|
-
##
|
|
68
|
+
## Type (tipo do evento)
|
|
69
69
|
|
|
70
|
-
O **
|
|
70
|
+
O **type** é o que o evento é. São quatro: `fatal`, `error`, `warning` e `success`.
|
|
71
71
|
|
|
72
|
-
Serve para você separar o que precisa acordar alguém do que é só registro
|
|
72
|
+
Serve para você separar o que precisa acordar alguém do que é só registro. `error` e `fatal` são problemas (e são os únicos que disparam alerta); `warning` é algo que ainda funciona mas merece olhar — aparece nas issues, sem e-mail.
|
|
73
73
|
|
|
74
74
|
O `success` é o mais incomum e o mais útil no dia a dia de RPA: ele marca uma conclusão **bem-sucedida**. Conta como evento e aparece na timeline do robô, mas **não gera issue nem alerta** — é o jeito de registrar "as 120 notas do dia foram emitidas" sem que isso pareça um problema.
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
Não existe tipo `info` nem `debug`: narração não é problema e não abre issue. Para isso existem o [log da execução](./tasks.md#logs) (`ctx.log.debug/info/...`) e as [breadcrumbs](#breadcrumb), que têm o seu próprio nível.
|
|
77
|
+
|
|
78
|
+
A precedência é: o `type` do `hint` que você passou → o tipo que a função de captura já definiu → `error`. Na prática:
|
|
77
79
|
|
|
78
80
|
- `captureException(error)` sem `hint` é sempre `error`.
|
|
79
|
-
- `captureMessage(msg)` sem
|
|
80
|
-
- Para qualquer outra coisa, passe o
|
|
81
|
+
- `captureMessage(msg)` sem tipo explícito é sempre `warning`.
|
|
82
|
+
- Para qualquer outra coisa, passe o tipo: `captureException(error, { type: 'warning' })`.
|
|
81
83
|
|
|
82
|
-
> **Atenção:** `scope.
|
|
84
|
+
> **Atenção:** `scope.setType()` (dentro de um [`withScope`](#withscope)) **não afeta** `captureException` nem `captureMessage` — as duas já definem o tipo do evento antes de o scope ser consultado. Para mudar o tipo, use o `hint` (`{ type: … }`) ou o segundo argumento do `captureMessage`.
|
|
83
85
|
|
|
84
86
|
## Fingerprint
|
|
85
87
|
|
|
@@ -100,7 +102,7 @@ O fingerprint é um array de strings — o servidor concatena os pedaços. Prece
|
|
|
100
102
|
|
|
101
103
|
## Scope
|
|
102
104
|
|
|
103
|
-
O **scope** é a mochila de contexto do SDK: tudo que ele sabe sobre o estado atual do seu programa e que deve viajar junto do próximo evento. Dentro dela: [tags](#tag), [usuário](#scope), [contexts](#context), [extras](#extra),
|
|
105
|
+
O **scope** é a mochila de contexto do SDK: tudo que ele sabe sobre o estado atual do seu programa e que deve viajar junto do próximo evento. Dentro dela: [tags](#tag), [usuário](#scope), [contexts](#context), [extras](#extra), tipo, [fingerprint](#fingerprint) e a lista de [breadcrumbs](#breadcrumb).
|
|
104
106
|
|
|
105
107
|
Você não manipula o scope direto — você usa os `set*`, que escrevem nele:
|
|
106
108
|
|
|
@@ -203,7 +205,7 @@ O SDK mantém em memória a lista dos últimos breadcrumbs. Quando você captura
|
|
|
203
205
|
Hobots.addBreadcrumb({ category: 'nfe', message: 'Baixou XML da nota 123', level: 'info' });
|
|
204
206
|
```
|
|
205
207
|
|
|
206
|
-
Todos os campos são opcionais: `category` agrupa a origem, `message` é o texto lido por humano, `level` colore a linha na timeline, `data` carrega um objeto livre, `type` classifica a migalha. O `timestamp` é preenchido pelo SDK.
|
|
208
|
+
Todos os campos são opcionais: `category` agrupa a origem, `message` é o texto lido por humano, `level` (`debug`, `info`, `warning`, `error`, `fatal`) colore a linha na timeline, `data` carrega um objeto livre, `type` classifica a migalha. O `timestamp` é preenchido pelo SDK.
|
|
207
209
|
|
|
208
210
|
Dois pontos que costumam surpreender:
|
|
209
211
|
|
package/docs/tasks.md
CHANGED
|
@@ -171,7 +171,7 @@ O `attachment` pode ser a imagem direto, ou um objeto com metadados:
|
|
|
171
171
|
| `caption` | `string` | — | legenda curta exibida sob a imagem ampliada (máx. 200 caracteres) |
|
|
172
172
|
| `contentType` | `'image/png' \| 'image/jpeg' \| 'image/webp'` | detectado | só é usado quando os *magic bytes* não bastam |
|
|
173
173
|
|
|
174
|
-
O texto da linha de log é a própria mensagem capturada (`message` do `captureMessage`, ou `Nome: mensagem` do erro no `captureException`); o nível vem do `
|
|
174
|
+
O texto da linha de log é a própria mensagem capturada (`message` do `captureMessage`, ou `Nome: mensagem` do erro no `captureException`); o nível vem do `type` da captura (`'fatal'` vira `'error'` no log da run).
|
|
175
175
|
|
|
176
176
|
### Limites
|
|
177
177
|
|
package/docs/telemetry.md
CHANGED
|
@@ -29,7 +29,7 @@ Cria o cliente, instala handlers globais de erro (a menos que `captureUnhandled:
|
|
|
29
29
|
// exceções
|
|
30
30
|
Hobots.captureException(error, {
|
|
31
31
|
tags: { cliente: 'acme' },
|
|
32
|
-
|
|
32
|
+
type: 'error',
|
|
33
33
|
fingerprint: ['sefaz-timeout'], // agrupa manualmente; sem isso o servidor agrupa pelo stack
|
|
34
34
|
});
|
|
35
35
|
|
|
@@ -37,13 +37,13 @@ Hobots.captureException(error, {
|
|
|
37
37
|
Hobots.captureMessage('Lote processado com sucesso', 'info');
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Ambas retornam o `event_id` (ou `undefined` se não inicializado). O segundo argumento é um [`CaptureHint`](./api-reference.md#capturehint) (`
|
|
40
|
+
Ambas retornam o `event_id` (ou `undefined` se não inicializado). O segundo argumento é um [`CaptureHint`](./api-reference.md#capturehint) (`type`, `tags`, `extra`, `fingerprint`).
|
|
41
41
|
|
|
42
42
|
> **Atenção:** o `event_id` retornado **não é confirmação de envio** — se o evento foi descartado por amostragem ou por `beforeSend`, você recebe um id normalmente e nada foi enfileirado.
|
|
43
43
|
|
|
44
44
|
Erros **não tratados** (`uncaughtException` / `unhandledRejection`) são capturados e flushados automaticamente antes do processo sair — desligue com `captureUnhandled: false`.
|
|
45
45
|
|
|
46
|
-
Conceitos: [Evento](./concepts.md#evento) · [
|
|
46
|
+
Conceitos: [Evento](./concepts.md#evento) · [Type](./concepts.md#type-tipo-do-evento) · [Fingerprint](./concepts.md#fingerprint).
|
|
47
47
|
|
|
48
48
|
## Breadcrumbs
|
|
49
49
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hobots",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "SDK JavaScript da Hobots — telemetria (erros, transactions e heartbeats) e execução remota de tarefas sob demanda (tasks) para RPAs e integrações. Um único import e um único init().",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|