@lexnode/legal-data-sdk 1.30.0 → 1.32.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.
@@ -1,10 +1,6 @@
1
1
  /**
2
- * Verificação e tipagem das entregas assinadas do motor.
3
- *
4
- * O motor assina cada entrega como `x-lexnode-signature: t=<unix>,v1=<hex>`,
5
- * onde o HMAC-SHA256 cobre `${t}.${corpoCru}` com o segredo do endpoint. A
6
- * conferência é sobre os BYTES CRUS recebidos: reserializar o JSON muda a
7
- * ordem das chaves e o digest deixa de bater.
2
+ * Os cabeçalhos de uma entrega de webhook: o tipo do evento, o instante, a
3
+ * assinatura e o número da tentativa.
8
4
  */
9
5
  export declare const LEXNODE_WEBHOOK_HEADERS: {
10
6
  readonly event: "x-lexnode-event";
@@ -12,14 +8,20 @@ export declare const LEXNODE_WEBHOOK_HEADERS: {
12
8
  readonly signature: "x-lexnode-signature";
13
9
  readonly deliveryAttempt: "x-lexnode-delivery-attempt";
14
10
  };
15
- /** Janela de replay do motor. */
11
+ /**
12
+ * A tolerância padrão, em segundos, entre o instante da assinatura e o seu
13
+ * relógio. Entrega fora dela é recusada como `TIMESTAMP_OUT_OF_TOLERANCE`.
14
+ */
16
15
  export declare const DEFAULT_WEBHOOK_TOLERANCE_SECONDS = 300;
17
16
  /**
18
- * Os BYTES como chegaram. Reserializar o JSON reordena as chaves e o digest
19
- * deixa de bater, então um corpo já parseado é recusado em vez de conferido.
17
+ * O corpo da entrega como chegou, em texto ou bytes. Um objeto já convertido
18
+ * de JSON é recusado como `RAW_BODY_REQUIRED`: a assinatura vale para os bytes
19
+ * originais.
20
20
  */
21
21
  export type WebhookRawBody = string | Uint8Array;
22
+ /** Por que `verifyWebhookSignature` recusou a entrega. */
22
23
  export type WebhookRejection = "MISSING_SECRET" | "RAW_BODY_REQUIRED" | "MISSING_SIGNATURE" | "MALFORMED_SIGNATURE" | "TIMESTAMP_MISMATCH" | "TIMESTAMP_OUT_OF_TOLERANCE" | "SIGNATURE_MISMATCH";
24
+ /** O resultado de `verifyWebhookSignature`. */
23
25
  export type WebhookVerification = {
24
26
  ok: true;
25
27
  timestamp: number;
@@ -27,14 +29,17 @@ export type WebhookVerification = {
27
29
  ok: false;
28
30
  reason: WebhookRejection;
29
31
  };
32
+ /**
33
+ * Por que `parseWebhookEvent` recusou a entrega: a assinatura, o JSON ou o
34
+ * formato do evento.
35
+ */
30
36
  export type WebhookParseRejection = WebhookRejection | "INVALID_JSON" | "INVALID_ENVELOPE";
31
37
  /**
32
- * O desfecho de `parseWebhookEvent`.
33
- *
34
- * `known` é o discriminador que separa o catálogo conhecido do resto. Ele mora
35
- * no RESULTADO, e não no evento, por uma razão de tipo: um ramo `type: string`
36
- * dentro da própria união apagaria o estreitamento por `type` de todos os
37
- * outros — `payload` viraria `unknown` mesmo no caso reconhecido.
38
+ * O resultado de `parseWebhookEvent`. Com `ok: true`, `known` diz se o tipo do
39
+ * evento está no catálogo deste pacote: com `known: true`, `event.type`
40
+ * estreita o `payload`; com `known: false`, o evento é um
41
+ * `UnknownWebhookEvent`. Com `ok: false`, `reason` diz por que a entrega foi
42
+ * recusada.
38
43
  */
39
44
  export type WebhookParseResult = {
40
45
  ok: true;
@@ -48,42 +53,68 @@ export type WebhookParseResult = {
48
53
  ok: false;
49
54
  reason: WebhookParseRejection;
50
55
  };
51
- /** Cabeçalhos como um `Headers` do fetch ou como o objeto cru de um framework. */
56
+ /**
57
+ * Os cabeçalhos da entrega, como `Headers` do `fetch` ou como o objeto de
58
+ * cabeçalhos de um framework.
59
+ */
52
60
  export type WebhookHeaders = Headers | Record<string, string | string[] | undefined>;
61
+ /** As opções de `verifyWebhookSignature` e de `parseWebhookEvent`. */
53
62
  export interface VerifyWebhookOptions {
54
- /** Janela de replay, em segundos. Padrão: 300, como o motor. */
63
+ /** A tolerância do instante da entrega, em segundos. Padrão: 300. */
55
64
  toleranceSeconds?: number;
56
- /** Relógio, em SEGUNDOS da época Unix — o mesmo eixo do `t` do cabeçalho. */
65
+ /**
66
+ * O instante atual, em segundos da época Unix — a mesma unidade do `t` da
67
+ * assinatura. Útil em testes.
68
+ */
57
69
  now?: number;
58
70
  }
59
71
  /**
60
- * Confere a assinatura de uma entrega e diz POR QUE recusou.
72
+ * Confere a assinatura de uma entrega de webhook e diz por que recusou.
61
73
  *
62
- * O veredito é motivado de propósito: um `false` nu manda o receptor devolver
63
- * o mesmo erro para segredo trocado, relógio fora de hora e corpo adulterado —
64
- * três incidentes com conduta diferente.
74
+ * Recebe o corpo como chegou, os cabeçalhos e o segredo do endpoint. A
75
+ * assinatura, no cabeçalho `x-lexnode-signature: t=<unix>,v1=<hex>`, é um
76
+ * HMAC-SHA256 de `${t}.${corpo}` com o segredo. Devolve `{ ok: true,
77
+ * timestamp }` ou `{ ok: false, reason }`, sem lançar; responda à recusa com
78
+ * `webhookRejectionStatus(reason)`.
79
+ *
80
+ * Passe o corpo como chegou, nunca um JSON convertido e serializado de novo: a
81
+ * ordem das chaves muda e a assinatura deixa de conferir. O cabeçalho
82
+ * `x-lexnode-timestamp`, quando vem, precisa repetir o `t` da assinatura.
65
83
  */
66
84
  export declare function verifyWebhookSignature(rawBody: WebhookRawBody, headers: WebhookHeaders, secret: string, options?: VerifyWebhookOptions): WebhookVerification;
67
- /** O envelope comum a toda entrega. */
85
+ /** Os campos comuns a toda entrega. */
68
86
  export interface WebhookEventEnvelope {
87
+ /**
88
+ * O id do evento. A mesma entrega pode chegar mais de uma vez: use o id para
89
+ * descartar a repetida.
90
+ */
69
91
  id: string;
92
+ /** Quando o evento ocorreu (ISO 8601). */
70
93
  occurredAt: string;
94
+ /** O projeto da conta a que o evento pertence, quando houver. */
71
95
  projectId: string | null;
96
+ /** O monitor que produziu o evento, quando houver. */
72
97
  monitorId: string | null;
73
98
  }
74
- /** Sinal compacto de suspensão de prazo — nível, termos e trecho. */
99
+ /**
100
+ * O indício de suspensão de prazo no teor da publicação: o nível de
101
+ * confiança, os termos encontrados e o trecho.
102
+ */
75
103
  export interface SuspensionSignal {
76
104
  confidence: "HIGH" | "MEDIUM" | "LOW";
77
105
  keywords: string[];
78
106
  excerpt: string;
79
107
  }
80
- /** A data-limite do índice da fonte que qualifica um `total: 0`. */
108
+ /**
109
+ * Até quando o índice da fonte processual foi lido no tribunal: a data com
110
+ * que um `total: 0` se distingue de um atraso.
111
+ */
81
112
  export interface ProcessSourceIndex {
82
113
  tribunalAlias: string;
83
114
  updatedThrough: string | null;
84
115
  checkedAt: string;
85
116
  }
86
- /** Quantos movimentos novos de um grau a captura anunciou. */
117
+ /** Quantos movimentos novos de um grau chegaram na atualização. */
87
118
  export interface ProcessMovementInstanceCount {
88
119
  /** A sigla do grau (G1, G2, JE, TR…); nula quando a fonte não a declara. */
89
120
  degree: string | null;
@@ -92,23 +123,22 @@ export interface ProcessMovementInstanceCount {
92
123
  latestMovementKey: string;
93
124
  }
94
125
  /**
95
- * Um aviso por assinante e por captura do processo, descrito pelo movimento
96
- * novo mais recente: o topo do payload é dele, e a chave dele é
97
- * `latestMovementKey`.
126
+ * O aviso de movimentação nova num processo assinado: um por assinatura e por
127
+ * atualização do processo, descrito pelo movimento novo mais recente, cuja
128
+ * chave é `latestMovementKey`.
98
129
  */
99
130
  export interface ProcessMovementCreatedPayload {
100
131
  canonicalProcessId: string;
101
132
  tribunalAlias: string;
102
133
  processNumber: string;
103
- /** O ponteiro que o consumidor informou ao assinar o processo. */
134
+ /** A referência que você informou ao assinar o processo. */
104
135
  externalRef: string | null;
105
136
  newMovementCount: number;
106
137
  latestMovementKey: string;
107
138
  /**
108
- * O que a movimentação mais recente É: o código da Tabela Processual
109
- * Unificada e o nome do ato como a fonte o escreve. Nulos quando a fonte não
110
- * os declara. É por eles que um aviso diz o que aconteceu sem reler a
111
- * listagem de movimentações a cada evento.
139
+ * O código da movimentação mais recente na Tabela Processual Unificada e o
140
+ * nome do ato como a fonte o escreve; `null` quando a fonte não os declara.
141
+ * Com eles, o aviso diz o que aconteceu sem reler a lista de movimentações.
112
142
  */
113
143
  latestMovementCode?: number | null;
114
144
  latestMovementLabel?: string | null;
@@ -125,31 +155,32 @@ export interface ProcessMovementCreatedPayload {
125
155
  */
126
156
  instances?: ProcessMovementInstanceCount[];
127
157
  /**
128
- * Presente quando o processo não é compartilhável: o aviso diz que ele andou
129
- * e não diz o quê nem em que grau, porque ali o nome do ato é teor.
158
+ * Presente quando o processo não é compartilhável: o aviso diz que ele andou,
159
+ * sem dizer o quê nem em que grau, porque o nome do ato faz parte do teor.
130
160
  */
131
161
  contentWithheld?: true;
132
162
  }
133
163
  /**
134
164
  * Outro grau de um processo assinado apareceu na fonte (1º grau, 2º grau,
135
- * turma recursal…). O histórico dele entrou no acervo sem virar
136
- * `PROCESS_MOVEMENT_CREATED` movimento a movimento: este aviso é o que diz que
137
- * ele chegou, e os movimentos estão no retrato do processo, em `instances`.
165
+ * turma recursal…). O histórico desse grau não sai movimento a movimento em
166
+ * `PROCESS_MOVEMENT_CREATED`: este aviso diz que ele chegou, e os movimentos
167
+ * estão no retrato do processo, em `instances`.
138
168
  */
139
169
  export interface ProcessInstanceDiscoveredPayload {
140
170
  canonicalProcessId: string;
141
171
  tribunalAlias: string;
142
172
  processNumber: string;
143
- /** O ponteiro que o consumidor informou ao assinar o processo. */
173
+ /** A referência que você informou ao assinar o processo. */
144
174
  externalRef: string | null;
145
175
  /** A sigla do grau novo; nula quando a fonte não a declara. */
146
176
  degree: string | null;
147
177
  /** O documento da fonte deste grau — o `sourceId` dele em `instances`. */
148
178
  instanceSourceId: string;
179
+ /** O órgão julgador do grau novo. */
149
180
  courtBody: string | null;
150
- /** Quantos movimentos o grau trouxe na captura que o descobriu. */
181
+ /** Quantos movimentos o grau trouxe quando apareceu. */
151
182
  movementCount: number;
152
- /** Quantos deles entraram no acervo sem aviso próprio. */
183
+ /** Quantos deles não saíram em aviso próprio. */
153
184
  historyMovementCount: number;
154
185
  /**
155
186
  * Quantos deles saíram também em `PROCESS_MOVEMENT_CREATED`: os datados
@@ -173,7 +204,7 @@ export interface ProcessInstanceDiscoveredWithheldPayload {
173
204
  externalRef: string | null;
174
205
  contentWithheld: true;
175
206
  }
176
- /** Um grau do número como a varredura da vigília de processo o deixou. */
207
+ /** Um grau do processo como a última varredura do monitor o encontrou. */
177
208
  export interface MonitorSyncInstance {
178
209
  degree: string | null;
179
210
  /** O documento da fonte deste grau — o `sourceId` dele em `instances`. */
@@ -183,24 +214,25 @@ export interface MonitorSyncInstance {
183
214
  courtBody: string | null;
184
215
  sourceUpdatedAt: string | null;
185
216
  latestMovementAt: string | null;
186
- /** Nulo quando os movimentos deste grau nunca foram capturados. */
217
+ /** `null` quando os movimentos deste grau nunca foram capturados. */
187
218
  movementCount: number | null;
188
219
  /** Desde quando a resposta completa da fonte vem sem este documento. */
189
220
  absentSince: string | null;
190
221
  }
222
+ /** Uma publicação nova achada por um monitor de OAB, termo, parte ou CNPJ. */
191
223
  export interface PublicationCreatedPayload {
192
224
  monitorId: string;
193
225
  officeId: string | null;
194
226
  publicationKey: string;
195
227
  processNumber: string;
196
228
  formattedProcessNumber: string;
197
- /** `null` quando o diário devolveu sigla que o catálogo do CNJ não cobre. */
229
+ /** `null` quando o diário devolveu sigla que o catálogo de tribunais não cobre. */
198
230
  tribunalAlias: string | null;
199
231
  tribunalCode: string | null;
200
232
  availableAt: string | null;
201
233
  sourceUrl: string | null;
202
234
  type: string;
203
- /** Prévia do teor; `null` quando o gate reteve. */
235
+ /** Prévia do teor; `null` quando o controle de confidencialidade o reteve. */
204
236
  excerpt: string | null;
205
237
  suspensionSignal: SuspensionSignal | null;
206
238
  /** Presente só quando o teor foi retido no instante do envio. */
@@ -210,14 +242,23 @@ export interface PublicationCreatedPayload {
210
242
  /** Só na vigília por nome de parte. */
211
243
  partyName?: string;
212
244
  partyRole?: string | null;
213
- /** Só na vigília por CNPJ: o literal vigiado — o documento pontuado
214
- * inteiro, ou a raiz `NN.NNN.NNN` quando `includeBranches`. */
245
+ /**
246
+ * Só na vigília por CNPJ: o que é vigiado — o CNPJ pontuado inteiro, ou a
247
+ * raiz `NN.NNN.NNN` com `includeBranches`.
248
+ */
215
249
  partyDocument?: string;
250
+ /** Só na vigília por CNPJ: se a vigília alcança matriz e filiais. */
216
251
  includeBranches?: boolean;
217
- /** `document`: o CNPJ consta no teor — a empresa foi citada no ato, seja
218
- * ou não parte. */
252
+ /**
253
+ * `document`: o CNPJ consta no teor — a empresa foi citada no ato, sendo
254
+ * parte ou não.
255
+ */
219
256
  matchedBy?: "document";
220
257
  }
258
+ /**
259
+ * O resultado de uma varredura do monitor. O monitor de processo emite um a
260
+ * cada varredura, com ou sem novidade (`changed`).
261
+ */
221
262
  export interface MonitorSyncSucceededPayload {
222
263
  monitorId: string;
223
264
  officeId: string | null;
@@ -249,16 +290,15 @@ export interface MonitorSyncSucceededPayload {
249
290
  * datas, e sem `instances`.
250
291
  */
251
292
  contentWithheld?: true;
252
- /** O alvo que a fonte não indexava passou a existir nesta passada. */
293
+ /** O processo que a fonte ainda não mostrava apareceu nesta varredura. */
253
294
  firstAppearance?: true;
254
- /** A vigília de aparição segue esperando o alvo entrar no índice. */
295
+ /** O monitor segue esperando o processo aparecer no índice da fonte. */
255
296
  awaitingAppearance?: true;
256
297
  indexUpdatedThrough?: string | null;
257
298
  expectedFrom?: string | null;
258
299
  /**
259
- * Varredura de diário: os EXTREMOS do que a passada abriu de fato. `null`
260
- * quando o ciclo não abriu fatia nenhuma — anunciar uma janela nesse caso
261
- * seria dizer que leu o que não leu.
300
+ * Varredura de diário: a primeira e a última data que a varredura leu de
301
+ * fato; `null` quando ela não leu nenhuma.
262
302
  */
263
303
  availableFrom?: string | null;
264
304
  availableTo?: string | null;
@@ -266,17 +306,17 @@ export interface MonitorSyncSucceededPayload {
266
306
  pagesFetched?: number;
267
307
  publicationsSeen?: number;
268
308
  coveredThrough?: string;
269
- /** Onde a próxima passada retoma: o dia e a página. `null` quando fechou. */
309
+ /** Onde a próxima varredura retoma, o dia e a página; `null` ao terminar. */
270
310
  resumesAt?: {
271
311
  day: string;
272
312
  page: number;
273
313
  } | null;
274
314
  pendingDays?: number;
275
315
  /**
276
- * Fatias encerradas sem leitura completa, como chaves `AAAA-MM-DD#SIGLA`
277
- * (sem a sigla no dia não dividido). `volumeCapped` é o dia grande demais,
278
- * com cauda por ler; `refusedDays` é o que a fonte recusa em definitivo.
279
- * Separá-los do dia lido por inteiro é a razão de os campos existirem.
316
+ * Os dias encerrados sem leitura completa, como `AAAA-MM-DD#SIGLA` (sem a
317
+ * sigla quando o dia não foi dividido por tribunal). `volumeCapped` traz os
318
+ * dias grandes demais, com parte por ler; `refusedDays`, os que a fonte
319
+ * recusa em definitivo.
280
320
  */
281
321
  volumeCapped?: string[];
282
322
  refusedDays?: string[];
@@ -286,16 +326,19 @@ export interface MonitorSyncSucceededPayload {
286
326
  includeBranches?: boolean;
287
327
  publicationsMatched?: number;
288
328
  }
329
+ /** A falha de uma varredura do monitor. */
289
330
  export interface MonitorSyncFailedPayload {
290
331
  monitorId: string;
291
332
  officeId: string | null;
333
+ /** A descrição da falha. */
292
334
  error: string;
293
335
  code: string;
294
336
  class: "RETRYABLE" | "TERMINAL";
295
337
  retryable: boolean;
296
- /** O que o ciclo alcançou antes da recusa, quando houve ciclo. */
338
+ /** O que a varredura alcançou antes da falha, quando chegou a ler algo. */
297
339
  coverage?: Record<string, unknown>;
298
340
  }
341
+ /** O fim de uma busca enfileirada que concluiu. */
299
342
  export interface SearchJobSucceededPayload {
300
343
  jobId: string;
301
344
  status: "SUCCEEDED";
@@ -308,6 +351,7 @@ export interface SearchJobSucceededPayload {
308
351
  processNumbers: string[];
309
352
  pollUrl: string;
310
353
  }
354
+ /** O fim de uma busca enfileirada que falhou. */
311
355
  export interface SearchJobFailedPayload {
312
356
  jobId: string;
313
357
  status: "FAILED";
@@ -324,11 +368,10 @@ export interface SearchJobFailedPayload {
324
368
  pollUrl: string;
325
369
  }
326
370
  /**
327
- * O fim de uma consulta de processo em segundo plano
328
- * (`POST /v1/processes/lookups`). É um ponteiro: o processo nunca viaja no
329
- * evento — lê-se em `pollUrl`, sem nova cobrança, pelo controle de
330
- * confidencialidade de quem lê. O movimento novo que a entrega trouxer chega no
331
- * `PROCESS_MOVEMENT_CREATED` de sempre.
371
+ * O fim de uma consulta em segundo plano (`POST /v1/processes/lookups`). O
372
+ * evento aponta a consulta e nunca traz o processo: leia-o em `pollUrl`, sem
373
+ * nova cobrança e pelo controle de confidencialidade de quem lê. A
374
+ * movimentação nova que a entrega trouxer chega em `PROCESS_MOVEMENT_CREATED`.
332
375
  */
333
376
  interface ProcessLookupCompletedBase {
334
377
  lookupId: string;
@@ -338,19 +381,26 @@ interface ProcessLookupCompletedBase {
338
381
  processNumber: string;
339
382
  officeId: string | null;
340
383
  traceId: string | null;
341
- /** Idas à fonte, a leitura que abriu a consulta incluída. */
384
+ /**
385
+ * Quantas vezes a fonte foi consultada, contando a leitura que abriu a
386
+ * consulta.
387
+ */
342
388
  attempts: number;
343
389
  pollUrl: string;
344
390
  }
391
+ /** O fim de uma consulta em segundo plano que entregou o processo. */
345
392
  export interface ProcessLookupSucceededPayload extends ProcessLookupCompletedBase {
346
393
  status: "SUCCEEDED";
347
394
  /**
348
- * Quem entregou: a fonte, o acervo que outra leitura atualizou, ou uma
349
- * leitura direta da mesma conta, que já tinha cobrado — então esta não cobra.
395
+ * Quem entregou: `SOURCE`, a fonte; `LAKE`, a cópia guardada que outra
396
+ * leitura atualizou; ou `DIRECT_READ`, uma leitura direta sua, que já cobrou
397
+ * — então esta não cobra.
350
398
  */
351
399
  satisfiedBy: "SOURCE" | "LAKE" | "DIRECT_READ";
400
+ /** Os créditos cobrados pela entrega. */
352
401
  creditsCharged: number;
353
402
  }
403
+ /** O fim de uma consulta em segundo plano que terminou sem o processo. */
354
404
  export interface ProcessLookupFailedPayload extends ProcessLookupCompletedBase {
355
405
  status: "FAILED";
356
406
  satisfiedBy: null;
@@ -359,12 +409,13 @@ export interface ProcessLookupFailedPayload extends ProcessLookupCompletedBase {
359
409
  error: {
360
410
  class: "RETRYABLE" | "TERMINAL";
361
411
  code: string;
362
- /** O texto público fixo do código. */
412
+ /** A mensagem fixa do código. */
363
413
  message: string;
364
414
  retryable: boolean;
365
415
  upstreamStatus?: number;
366
416
  };
367
417
  }
418
+ /** Uma publicação nova que casou com a vigília de texto. */
368
419
  export interface PublicationTextAlertMatch {
369
420
  source: string;
370
421
  publicationKey: string;
@@ -374,6 +425,7 @@ export interface PublicationTextAlertMatch {
374
425
  /** Presente só quando o teor deste item foi retido no envio. */
375
426
  contentWithheld?: true;
376
427
  }
428
+ /** As publicações novas que casaram com uma vigília de texto. */
377
429
  export interface PublicationTextAlertMatchedPayload {
378
430
  alertId: string;
379
431
  externalRef: string | null;
@@ -382,6 +434,10 @@ export interface PublicationTextAlertMatchedPayload {
382
434
  totalNew: number;
383
435
  matches: PublicationTextAlertMatch[];
384
436
  }
437
+ /**
438
+ * O fim de uma colheita pedida em
439
+ * `POST /v1/publications/corpus/harvest-requests`.
440
+ */
385
441
  export interface PublicationHarvestCompletedPayload {
386
442
  sliceId: string;
387
443
  tribunalSigla: string;
@@ -389,6 +445,7 @@ export interface PublicationHarvestCompletedPayload {
389
445
  seedTerm: string | null;
390
446
  itemsIndexable: number;
391
447
  }
448
+ /** O aviso de saldo de créditos baixo no período. */
392
449
  export interface QuotaLowPayload {
393
450
  usedCredits: number;
394
451
  limitCredits: number;
@@ -399,19 +456,21 @@ export interface QuotaLowPayload {
399
456
  periodStart: string;
400
457
  periodEnd: string;
401
458
  }
459
+ /** O aviso de fim próximo do período do plano. */
402
460
  export interface PeriodEndingPayload {
403
461
  planCode: string;
404
462
  periodEnd: string;
405
463
  daysRemaining: number;
406
464
  }
465
+ /** O aviso de pagamento da assinatura do plano em atraso. */
407
466
  export interface SubscriptionPastDuePayload {
408
467
  status: string;
409
468
  planCode: string;
410
469
  currentPeriodEnd: string | null;
411
470
  }
412
471
  /**
413
- * A entrega sintética do teste de conectividade do endpoint. O motor a manda a
414
- * pedido, com a mesma assinatura de um evento real.
472
+ * A entrega de teste do endpoint, enviada a pedido e assinada como um evento
473
+ * real.
415
474
  */
416
475
  export interface WebhookTestPayload {
417
476
  message: string;
@@ -420,51 +479,83 @@ type Typed<T extends string, P> = WebhookEventEnvelope & {
420
479
  type: T;
421
480
  payload: P;
422
481
  };
423
- /** Os tipos do catálogo e a entrega de teste, discriminados por `type`. */
482
+ /**
483
+ * Os eventos do catálogo deste pacote e a entrega de teste, discriminados por
484
+ * `type`.
485
+ */
424
486
  export type WebhookEvent = Typed<"PROCESS_MOVEMENT_CREATED", ProcessMovementCreatedPayload> | Typed<"PROCESS_INSTANCE_DISCOVERED", ProcessInstanceDiscoveredPayload | ProcessInstanceDiscoveredWithheldPayload> | Typed<"PUBLICATION_CREATED", PublicationCreatedPayload> | Typed<"MONITOR_SYNC_SUCCEEDED", MonitorSyncSucceededPayload> | Typed<"MONITOR_SYNC_FAILED", MonitorSyncFailedPayload> | Typed<"SEARCH_JOB_COMPLETED", SearchJobSucceededPayload | SearchJobFailedPayload> | Typed<"PUBLICATION_TEXT_ALERT_MATCHED", PublicationTextAlertMatchedPayload> | Typed<"PUBLICATION_HARVEST_COMPLETED", PublicationHarvestCompletedPayload> | Typed<"PROCESS_LOOKUP_COMPLETED", ProcessLookupSucceededPayload | ProcessLookupFailedPayload> | Typed<"QUOTA_LOW", QuotaLowPayload> | Typed<"PERIOD_ENDING", PeriodEndingPayload> | Typed<"SUBSCRIPTION_PAST_DUE", SubscriptionPastDuePayload> | Typed<"WEBHOOK_TEST", WebhookTestPayload>;
425
487
  /**
426
- * O evento que o catálogo ainda não descreve.
427
- *
428
- * Tipo novo é coisa a ignorar, nunca exceção: o receptor precisa responder 2xx
429
- * para o motor não entrar na curva de reentrega por uma novidade inofensiva.
488
+ * Um evento de tipo que este pacote ainda não descreve. Responda 2xx e
489
+ * ignore-o: sem o 2xx, a entrega é repetida.
430
490
  */
431
491
  export type UnknownWebhookEvent = WebhookEventEnvelope & {
432
492
  type: string;
433
493
  payload: unknown;
434
494
  };
495
+ /** Os tipos de `WebhookEvent`, inclusive a entrega de teste. */
435
496
  export type WebhookEventType = WebhookEvent["type"];
436
497
  /**
437
- * A entrega de teste, que o endpoint recebe sem assinar.
498
+ * O tipo da entrega de teste, `WEBHOOK_TEST`.
438
499
  *
439
- * Ela é o PRIMEIRO corpo que um receptor novo vê — o botão de testar
440
- * conectividade existe para ser apertado antes do primeiro evento real. Por
441
- * isso está na união (quem faz `switch (event.type)` precisa enxergá-la) e
442
- * fora do catálogo assinável (não se pede, não se recusa, chega a qualquer
443
- * endpoint).
500
+ * Ela chega a qualquer endpoint sem constar de `eventTypes` — o tipo nem
501
+ * entra nessa lista ao cadastrar um endpoint — e costuma ser o primeiro corpo
502
+ * que um receptor novo recebe: trate-a no seu `switch (event.type)`.
444
503
  */
445
504
  export declare const WEBHOOK_TEST_EVENT_TYPE: "WEBHOOK_TEST";
446
- /** Os tipos que se pode ASSINAR ao cadastrar um endpoint. */
505
+ /** Os tipos de evento que um endpoint pode assinar em `eventTypes`. */
447
506
  export declare const WEBHOOK_EVENT_TYPES: readonly ["PROCESS_MOVEMENT_CREATED", "PROCESS_INSTANCE_DISCOVERED", "PUBLICATION_CREATED", "MONITOR_SYNC_SUCCEEDED", "MONITOR_SYNC_FAILED", "SEARCH_JOB_COMPLETED", "PUBLICATION_TEXT_ALERT_MATCHED", "PUBLICATION_HARVEST_COMPLETED", "PROCESS_LOOKUP_COMPLETED", "QUOTA_LOW", "PERIOD_ENDING", "SUBSCRIPTION_PAST_DUE"];
448
507
  /**
449
- * O que entra em `eventTypes` ao cadastrar um endpoint. É subconjunto próprio
450
- * de `WebhookEventType`: mandar a entrega de teste nessa lista é recusa.
508
+ * Um tipo de evento que se pode assinar em `eventTypes`. A entrega de teste
509
+ * fica de fora: mandá-la nessa lista é recusado.
451
510
  */
452
511
  export type SubscribableWebhookEventType = (typeof WEBHOOK_EVENT_TYPES)[number];
453
- /** Se o tipo está no catálogo que este pacote descreve. */
512
+ /** Diz se o tipo está no catálogo de eventos que este pacote descreve. */
454
513
  export declare function isKnownWebhookEventType(type: string): type is WebhookEventType;
455
- /** Se este evento é a entrega de teste, e não um fato do acervo. */
514
+ /** Diz se o evento é a entrega de teste. */
456
515
  export declare function isWebhookTest(event: WebhookEvent): event is Extract<WebhookEvent, {
457
516
  type: "WEBHOOK_TEST";
458
517
  }>;
518
+ /**
519
+ * O status HTTP com que o seu receptor responde a uma entrega recusada.
520
+ *
521
+ * 401 para a assinatura ausente, malformada, fora da tolerância ou que não
522
+ * confere; 400 para JSON ou formato de evento inválido; 503 para o segredo
523
+ * não configurado no receptor; 500 para o corpo já convertido de JSON. Os dois
524
+ * últimos são defeitos do receptor (`isReceiverFault`): corrigido o defeito,
525
+ * as entregas repetidas passam a ser aceitas.
526
+ *
527
+ * @example
528
+ * ```ts
529
+ * if (!resultado.ok) {
530
+ * return reply.status(webhookRejectionStatus(resultado.reason)).send();
531
+ * }
532
+ * ```
533
+ */
459
534
  export declare function webhookRejectionStatus(reason: WebhookParseRejection): number;
460
- /** Se a recusa é de responsabilidade do receptor, e o remetente deve voltar. */
535
+ /**
536
+ * Diz se a recusa vem do próprio receptor — segredo não configurado ou corpo
537
+ * já convertido de JSON — e não da entrega. Nesses casos o status é 5xx.
538
+ */
461
539
  export declare function isReceiverFault(reason: WebhookParseRejection): boolean;
462
540
  /**
463
- * Confere a assinatura e devolve o evento tipado.
541
+ * Confere a assinatura de uma entrega e devolve o evento tipado.
542
+ *
543
+ * Depois da assinatura, confere que o corpo é um evento: JSON com `id`,
544
+ * `type`, `occurredAt` e `payload`. Devolve `{ ok: true, known, event }` — com
545
+ * `known: false` para um tipo fora do catálogo deste pacote, que você deve
546
+ * aceitar com 2xx e ignorar — ou `{ ok: false, reason }`, sem lançar.
464
547
  *
465
- * A assinatura prova a ORIGEM; a conferência de forma que vem depois prova que
466
- * o corpo é um envelope de evento — sem ela, um corpo assinado mas malformado
467
- * viraria um `as` silencioso dentro do consumidor.
548
+ * @example
549
+ * ```ts
550
+ * const resultado = parseWebhookEvent(rawBody, request.headers, segredo);
551
+ * if (!resultado.ok) {
552
+ * return reply.status(webhookRejectionStatus(resultado.reason)).send();
553
+ * }
554
+ * if (!resultado.known) return reply.status(200).send();
555
+ * if (resultado.event.type === "PUBLICATION_CREATED") {
556
+ * resultado.event.payload.publicationKey;
557
+ * }
558
+ * ```
468
559
  */
469
560
  export declare function parseWebhookEvent(rawBody: WebhookRawBody, headers: WebhookHeaders, secret: string, options?: VerifyWebhookOptions): WebhookParseResult;
470
561
  export {};