@lexnode/legal-data-sdk 1.24.0 → 1.26.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 +86 -5
- package/dist/client.js +7 -3
- package/dist/freshness.d.ts +40 -1
- package/dist/freshness.js +85 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/types.d.ts +5 -1
- package/package.json +1 -1
- package/schema.d.ts +76 -3
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ Toda chamada manda `Authorization: Bearer`, `X-Request-Id`, `X-Trace-Id` e,
|
|
|
51
51
|
quando há um, `X-Office-Id`; respeita o prazo do cliente **combinado** com o
|
|
52
52
|
`signal` de quem chamou; e devolve `{ data, meta }` tipados pela rota. O `meta`
|
|
53
53
|
é o do contrato mais `status` (o código HTTP) e `rateLimit` (os cabeçalhos
|
|
54
|
-
`RateLimit
|
|
54
|
+
`RateLimit-*`, lidos **inclusive no sucesso**, e o `Retry-After` da recusa).
|
|
55
55
|
|
|
56
56
|
Em `rateLimit`, use `remaining` para desacelerar: `resetSeconds` repete o que o
|
|
57
57
|
cabeçalho `RateLimit-Reset` trouxe, e o motor lhe dá dois sentidos — segundos
|
|
@@ -259,10 +259,10 @@ if (desfecho.kind === "sync") {
|
|
|
259
259
|
## Ler um processo quando a fonte está lenta
|
|
260
260
|
|
|
261
261
|
A ficha (`processes.get`) vai à fonte processual quando o acervo não tem o
|
|
262
|
-
processo fresco; o retrato (`processes.snapshot`) vai sempre
|
|
263
|
-
acervo quando a fonte falha. A fonte às vezes leva
|
|
264
|
-
consulta. `waitSeconds` diz quanto o motor espera por
|
|
265
|
-
segundos, padrão 20 na API.
|
|
262
|
+
processo fresco; o retrato (`processes.snapshot`) vai sempre. Os dois só
|
|
263
|
+
recorrem ao acervo quando a fonte falha (seção seguinte). A fonte às vezes leva
|
|
264
|
+
perto de um minuto por consulta. `waitSeconds` diz quanto o motor espera por
|
|
265
|
+
ela: de 10 a 180 segundos, padrão 20 na API.
|
|
266
266
|
|
|
267
267
|
```ts
|
|
268
268
|
const { data, meta } = await lexnode.processes.get(numero, {
|
|
@@ -302,10 +302,91 @@ if (meta.partialIndex) {
|
|
|
302
302
|
}
|
|
303
303
|
```
|
|
304
304
|
|
|
305
|
+
Antes de recusar a resposta parcial que veio sem o processo porque partes do
|
|
306
|
+
índice ficaram fora, o motor consulta a fonte de novo — até duas vezes, com uma
|
|
307
|
+
pausa curta, enquanto a espera couber.
|
|
308
|
+
|
|
309
|
+
**`meta.otherInstances`: o número tem outro documento na fonte.** A fonte pode
|
|
310
|
+
guardar mais de um documento por número — em geral um por instância (1º grau,
|
|
311
|
+
2º grau, turma recursal…), às vezes dois no mesmo grau —, e o motor serve e
|
|
312
|
+
guarda um só: o de `data`, cujo grau está em `degree`. Quando a resposta da
|
|
313
|
+
fonte trouxe outros, `meta.otherInstances` lista cada um com o grau (`grau`), a
|
|
314
|
+
data em que a fonte o atualizou (`updatedAt`) e o órgão julgador (`courtBody`,
|
|
315
|
+
quando vem). A lista não sai para processo restrito e não inclui documento que o
|
|
316
|
+
motor classificaria como segredo de justiça.
|
|
317
|
+
|
|
318
|
+
```ts
|
|
319
|
+
for (const outra of meta.otherInstances ?? []) {
|
|
320
|
+
// Ex.: { grau: "G1", updatedAt: "2026-04-15T12:00:00.000Z" }
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
305
324
|
**Agentes têm a espera deles.** No canal para agentes (MCP), as tools
|
|
306
325
|
`ler_processo` e `consultar_processo` escolhem a espera em `maxWaitSeconds`, na
|
|
307
326
|
mesma faixa e com padrão de 120 s; esse canal não passa pelo SDK.
|
|
308
327
|
|
|
328
|
+
## Quando a fonte falha: o retrato guardado
|
|
329
|
+
|
|
330
|
+
Quando a fonte processual falha — não responde dentro de `waitSeconds`, fica
|
|
331
|
+
indisponível, responde com parte do índice sem poder servir o processo ou pede
|
|
332
|
+
para esperar por volume — e o acervo guarda uma cópia do processo, a ficha
|
|
333
|
+
(`processes.get`) e o retrato (`processes.snapshot`) respondem com essa cópia em
|
|
334
|
+
vez do erro. A resposta diz que é cópia, e de quando:
|
|
335
|
+
|
|
336
|
+
- `meta.lakeRescue.cause` diz por que a fonte não entregou: `UPSTREAM_TIMEOUT`,
|
|
337
|
+
`UPSTREAM_UNAVAILABLE` ou `UPSTREAM_RATE_LIMITED`;
|
|
338
|
+
- `meta.lakeRescue.retryAfterSeconds`, repetido no header `Retry-After`, diz na
|
|
339
|
+
recusa por volume quanto esperar antes de consultar a fonte de novo. É a
|
|
340
|
+
espera da fonte, não do teto do motor: `meta.rateLimit.retryAfterSeconds`
|
|
341
|
+
fica `null` no sucesso;
|
|
342
|
+
- `meta.sourceFetchedAt` diz quando a cópia foi buscada na fonte. Esse campo
|
|
343
|
+
acompanha toda resposta das duas leituras, socorrida ou não, menos a ficha
|
|
344
|
+
que o controle de confidencialidade entrega retida, sem o teor.
|
|
345
|
+
|
|
346
|
+
A cópia custa 1 crédito, na ficha e no retrato. O retrato confere o saldo pelo
|
|
347
|
+
preço cheio, 8, antes de ir à fonte; a ficha confere pelo preço do que
|
|
348
|
+
entregou, depois da leitura. No retrato guardado, os movimentos são os da
|
|
349
|
+
última vez que o motor buscou o processo, e `sourcePayload` é nulo: o que andou
|
|
350
|
+
depois dessa data não está na resposta. Na ficha guardada, a data vale para os
|
|
351
|
+
dados do processo, e o resumo das publicações (`djen`) é relido na hora.
|
|
352
|
+
|
|
353
|
+
**Até que idade.** Sem pedir nada, só a cópia de até 24 h socorre a leitura —
|
|
354
|
+
nessas duas rotas, uma resposta de sucesso já podia ser cópia do acervo dentro
|
|
355
|
+
desse prazo. A cópia de qualquer idade vem com `staleOnFailure: true`:
|
|
356
|
+
|
|
357
|
+
```ts
|
|
358
|
+
import { describeFreshness, lakeRescueOf } from "@lexnode/legal-data-sdk";
|
|
359
|
+
|
|
360
|
+
const retrato = await lexnode.processes.snapshot(numero, {
|
|
361
|
+
tribunalAlias: "api_publica_tjsp",
|
|
362
|
+
staleOnFailure: true,
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
const socorro = lakeRescueOf(retrato);
|
|
366
|
+
if (socorro) {
|
|
367
|
+
// A fonte falhou e isto é a cópia guardada: o que andou depois de
|
|
368
|
+
// socorro.sourceFetchedAt não está aqui.
|
|
369
|
+
mostrar(describeFreshness(retrato));
|
|
370
|
+
// "cópia guardada em 26/09/2026, servida porque a fonte não respondeu a tempo"
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
`lakeRescueOf` devolve `{ cause, sourceFetchedAt, retryAfterSeconds }` ou
|
|
375
|
+
`null` — `sourceFetchedAt` é nulo na ficha retida —, e `sourceFetchedAtOf`
|
|
376
|
+
devolve a data de qualquer resposta dessas leituras. As duas aceitam o envelope
|
|
377
|
+
inteiro e o item do lote.
|
|
378
|
+
|
|
379
|
+
**O que não é socorrido.** A resposta da fonte que não traz o processo segue
|
|
380
|
+
404 `PROCESS_NOT_FOUND`, com cópia guardada ou sem ela: é a fonte dizendo que
|
|
381
|
+
não tem o número, e não uma falha dela. A cópia passa pelo mesmo controle de
|
|
382
|
+
confidencialidade da leitura; além de 24 h, só a recebe quem já tem interesse
|
|
383
|
+
registrado no processo — de uma leitura anterior dele ou de uma assinatura
|
|
384
|
+
ativa —, e os demais recebem a falha da fonte, como se não houvesse cópia.
|
|
385
|
+
|
|
386
|
+
**No lote.** `processes.snapshotBatch` socorre só com a cópia de até 24 h. O
|
|
387
|
+
item socorrido traz `lakeRescue` com a causa e a data, e custa 1 crédito em vez
|
|
388
|
+
de 8.
|
|
389
|
+
|
|
309
390
|
## Frescor: o `total: 0` qualificado
|
|
310
391
|
|
|
311
392
|
Um resultado vazio não distingue sozinho "não existe" de "a fonte ainda não
|
package/dist/client.js
CHANGED
|
@@ -66,12 +66,16 @@ function readHeaderNumber(headers, name) {
|
|
|
66
66
|
/**
|
|
67
67
|
* O teto por minuto sai em TODA resposta autenticada, não só na recusa. Lê-lo
|
|
68
68
|
* no sucesso é o que permite ao consumidor desacelerar ANTES de bater no 429.
|
|
69
|
+
* O `Retry-After` só conta na recusa: no sucesso ele é a espera que a fonte
|
|
70
|
+
* pediu a uma leitura socorrida pelo acervo, e sai em `meta.lakeRescue`.
|
|
69
71
|
*/
|
|
70
|
-
function readRateLimit(headers) {
|
|
72
|
+
function readRateLimit(headers, succeeded) {
|
|
71
73
|
const limit = readHeaderNumber(headers, "RateLimit-Limit");
|
|
72
74
|
const remaining = readHeaderNumber(headers, "RateLimit-Remaining");
|
|
73
75
|
const resetSeconds = readHeaderNumber(headers, "RateLimit-Reset");
|
|
74
|
-
const retryAfterSeconds =
|
|
76
|
+
const retryAfterSeconds = succeeded
|
|
77
|
+
? null
|
|
78
|
+
: readHeaderNumber(headers, "Retry-After");
|
|
75
79
|
if (limit === null &&
|
|
76
80
|
remaining === null &&
|
|
77
81
|
resetSeconds === null &&
|
|
@@ -272,7 +276,7 @@ export function createLexNodeClient(options) {
|
|
|
272
276
|
// corpo de outro host como se fosse a resposta do motor.
|
|
273
277
|
redirect: "error",
|
|
274
278
|
});
|
|
275
|
-
rateLimit = readRateLimit(response.headers);
|
|
279
|
+
rateLimit = readRateLimit(response.headers, response.ok);
|
|
276
280
|
// A leitura do corpo fica DENTRO do prazo: um corpo que trava depois dos
|
|
277
281
|
// cabeçalhos pendura a chamada por tempo indefinido se o vínculo já tiver
|
|
278
282
|
// sido desfeito aqui.
|
package/dist/freshness.d.ts
CHANGED
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
* publica a data-limite do índice em dois eixos — `updatedThrough` na busca de
|
|
8
8
|
* processo, `lastEditionDate` na leitura do diário — e este módulo é a leitura
|
|
9
9
|
* dos dois pelo mesmo nome.
|
|
10
|
+
*
|
|
11
|
+
* A leitura de UM processo diz também de quando são os dados servidos
|
|
12
|
+
* (`meta.sourceFetchedAt`) e, quando a fonte falhou e o acervo socorreu, que a
|
|
13
|
+
* resposta é a cópia guardada (`meta.lakeRescue`).
|
|
10
14
|
*/
|
|
11
15
|
export type FreshnessAxis = "PROCESS" | "PUBLICATION";
|
|
12
16
|
export type FreshnessState =
|
|
@@ -44,5 +48,40 @@ export interface NotYetIndexedOptions {
|
|
|
44
48
|
* data-limite que cobre o que se perguntou: aí o vazio é resposta.
|
|
45
49
|
*/
|
|
46
50
|
export declare function isNotYetIndexed(result: unknown, options?: NotYetIndexedOptions): boolean;
|
|
47
|
-
/**
|
|
51
|
+
/** Por que a fonte não entregou o processo que o acervo socorreu. */
|
|
52
|
+
export type LakeRescueCause = "UPSTREAM_TIMEOUT" | "UPSTREAM_UNAVAILABLE" | "UPSTREAM_RATE_LIMITED";
|
|
53
|
+
/**
|
|
54
|
+
* A leitura de UM processo cuja fonte falhou e que o motor serviu com a cópia
|
|
55
|
+
* que o acervo guarda.
|
|
56
|
+
*/
|
|
57
|
+
export interface LakeRescue {
|
|
58
|
+
/**
|
|
59
|
+
* A causa, pelo código público da taxonomia. Valor novo pode entrar no
|
|
60
|
+
* contrato; trate o desconhecido como "a fonte falhou".
|
|
61
|
+
*/
|
|
62
|
+
cause: LakeRescueCause | (string & {});
|
|
63
|
+
/**
|
|
64
|
+
* Quando a cópia servida foi buscada na fonte; nulo na ficha que o controle
|
|
65
|
+
* de confidencialidade entrega retida, que sai sem a data.
|
|
66
|
+
*/
|
|
67
|
+
sourceFetchedAt: Date | null;
|
|
68
|
+
/** A espera que a fonte pediu, na recusa por volume. */
|
|
69
|
+
retryAfterSeconds: number | null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* O socorro pelo acervo, ou `null` quando a resposta veio da fonte ou do
|
|
73
|
+
* acervo em dia. Aceita o envelope inteiro (`{ data, meta }`) ou o item do
|
|
74
|
+
* lote de retratos; só o `data` não traz a marca.
|
|
75
|
+
*/
|
|
76
|
+
export declare function lakeRescueOf(result: unknown): LakeRescue | null;
|
|
77
|
+
/**
|
|
78
|
+
* Quando os dados servidos foram buscados na fonte: `meta.sourceFetchedAt` das
|
|
79
|
+
* leituras de um processo, ou a data do item socorrido do lote.
|
|
80
|
+
*/
|
|
81
|
+
export declare function sourceFetchedAtOf(result: unknown): Date | null;
|
|
82
|
+
/**
|
|
83
|
+
* Uma frase em pt-BR sobre o frescor da resposta, pronta para a tela: a cópia
|
|
84
|
+
* guardada e o porquê, quando o acervo socorreu a fonte; senão, até onde a
|
|
85
|
+
* fonte foi lida.
|
|
86
|
+
*/
|
|
48
87
|
export declare function describeFreshness(result: unknown): string;
|
package/dist/freshness.js
CHANGED
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
* publica a data-limite do índice em dois eixos — `updatedThrough` na busca de
|
|
8
8
|
* processo, `lastEditionDate` na leitura do diário — e este módulo é a leitura
|
|
9
9
|
* dos dois pelo mesmo nome.
|
|
10
|
+
*
|
|
11
|
+
* A leitura de UM processo diz também de quando são os dados servidos
|
|
12
|
+
* (`meta.sourceFetchedAt`) e, quando a fonte falhou e o acervo socorreu, que a
|
|
13
|
+
* resposta é a cópia guardada (`meta.lakeRescue`).
|
|
10
14
|
*/
|
|
11
15
|
function asRecord(value) {
|
|
12
16
|
return value && typeof value === "object" && !Array.isArray(value)
|
|
@@ -96,8 +100,88 @@ function ddmmaaaa(date) {
|
|
|
96
100
|
const mes = String(date.getUTCMonth() + 1).padStart(2, "0");
|
|
97
101
|
return `${dia}/${mes}/${date.getUTCFullYear()}`;
|
|
98
102
|
}
|
|
99
|
-
|
|
103
|
+
function toInstant(value) {
|
|
104
|
+
if (value instanceof Date) {
|
|
105
|
+
return Number.isNaN(value.getTime()) ? null : value;
|
|
106
|
+
}
|
|
107
|
+
return toDate(value);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* A marca do socorro e a data da cópia, onde quer que elas venham: no `meta`
|
|
111
|
+
* do envelope das leituras de um processo, ou no item do lote de retratos,
|
|
112
|
+
* que leva as duas em `lakeRescue`.
|
|
113
|
+
*/
|
|
114
|
+
function rescueFieldsOf(result) {
|
|
115
|
+
const record = asRecord(result);
|
|
116
|
+
const meta = asRecord(record?.meta);
|
|
117
|
+
if (meta) {
|
|
118
|
+
return {
|
|
119
|
+
rescue: asRecord(meta.lakeRescue),
|
|
120
|
+
fetchedAt: meta.sourceFetchedAt,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const itemRescue = asRecord(record?.lakeRescue);
|
|
124
|
+
return { rescue: itemRescue, fetchedAt: itemRescue?.sourceFetchedAt };
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* O socorro pelo acervo, ou `null` quando a resposta veio da fonte ou do
|
|
128
|
+
* acervo em dia. Aceita o envelope inteiro (`{ data, meta }`) ou o item do
|
|
129
|
+
* lote de retratos; só o `data` não traz a marca.
|
|
130
|
+
*/
|
|
131
|
+
export function lakeRescueOf(result) {
|
|
132
|
+
const { rescue, fetchedAt } = rescueFieldsOf(result);
|
|
133
|
+
if (!rescue || typeof rescue.cause !== "string")
|
|
134
|
+
return null;
|
|
135
|
+
return {
|
|
136
|
+
cause: rescue.cause,
|
|
137
|
+
sourceFetchedAt: toInstant(fetchedAt),
|
|
138
|
+
retryAfterSeconds: typeof rescue.retryAfterSeconds === "number"
|
|
139
|
+
? rescue.retryAfterSeconds
|
|
140
|
+
: null,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Quando os dados servidos foram buscados na fonte: `meta.sourceFetchedAt` das
|
|
145
|
+
* leituras de um processo, ou a data do item socorrido do lote.
|
|
146
|
+
*/
|
|
147
|
+
export function sourceFetchedAtOf(result) {
|
|
148
|
+
return toInstant(rescueFieldsOf(result).fetchedAt);
|
|
149
|
+
}
|
|
150
|
+
const BRASILIA_DATE = new Intl.DateTimeFormat("pt-BR", {
|
|
151
|
+
day: "2-digit",
|
|
152
|
+
month: "2-digit",
|
|
153
|
+
year: "numeric",
|
|
154
|
+
timeZone: "America/Sao_Paulo",
|
|
155
|
+
});
|
|
156
|
+
/** O dia de um instante no horário de Brasília, montado pelas partes. */
|
|
157
|
+
function ddmmaaaaBrasilia(date) {
|
|
158
|
+
const parts = Object.fromEntries(BRASILIA_DATE.formatToParts(date).map((part) => [part.type, part.value]));
|
|
159
|
+
return `${parts.day}/${parts.month}/${parts.year}`;
|
|
160
|
+
}
|
|
161
|
+
const RESCUE_REASON = {
|
|
162
|
+
UPSTREAM_TIMEOUT: "não respondeu a tempo",
|
|
163
|
+
UPSTREAM_UNAVAILABLE: "não conseguiu entregar o processo",
|
|
164
|
+
UPSTREAM_RATE_LIMITED: "pediu para esperar por volume",
|
|
165
|
+
};
|
|
166
|
+
function rescueReason(cause) {
|
|
167
|
+
return cause in RESCUE_REASON
|
|
168
|
+
? RESCUE_REASON[cause]
|
|
169
|
+
: "falhou";
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Uma frase em pt-BR sobre o frescor da resposta, pronta para a tela: a cópia
|
|
173
|
+
* guardada e o porquê, quando o acervo socorreu a fonte; senão, até onde a
|
|
174
|
+
* fonte foi lida.
|
|
175
|
+
*/
|
|
100
176
|
export function describeFreshness(result) {
|
|
177
|
+
const rescue = lakeRescueOf(result);
|
|
178
|
+
if (rescue) {
|
|
179
|
+
const date = rescue.sourceFetchedAt
|
|
180
|
+
? ` em ${ddmmaaaaBrasilia(rescue.sourceFetchedAt)}`
|
|
181
|
+
: "";
|
|
182
|
+
const reason = rescueReason(rescue.cause);
|
|
183
|
+
return `cópia guardada${date}, servida porque a fonte ${reason}`;
|
|
184
|
+
}
|
|
101
185
|
const { readThrough: limite } = freshnessOf(result);
|
|
102
186
|
return limite
|
|
103
187
|
? `fonte lida até ${ddmmaaaa(limite)}`
|
package/dist/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export { paginate } from "./paginate.js";
|
|
|
20
20
|
export type { PaginateOptions } from "./paginate.js";
|
|
21
21
|
export { searchProcesses, waitForSearchJob } from "./search.js";
|
|
22
22
|
export type { ProcessSearchOutcome, ProcessSearchResult, QueuedSearchJob, SearchJob, SearchJobState, WaitForSearchJobOptions, } from "./search.js";
|
|
23
|
-
export { describeFreshness, freshnessOf, isNotYetIndexed, readThrough, } from "./freshness.js";
|
|
24
|
-
export type { Freshness, FreshnessAxis, FreshnessState, NotYetIndexedOptions, } from "./freshness.js";
|
|
23
|
+
export { describeFreshness, freshnessOf, isNotYetIndexed, lakeRescueOf, readThrough, sourceFetchedAtOf, } from "./freshness.js";
|
|
24
|
+
export type { Freshness, FreshnessAxis, FreshnessState, LakeRescue, LakeRescueCause, NotYetIndexedOptions, } from "./freshness.js";
|
|
25
25
|
export { isFirstAppearance, resubscribeOnFirstAppearance, unwatchProcess, watchProcess, } from "./watch.js";
|
|
26
26
|
export type { FirstAppearanceEvent, ResubscribeSubscriber, UnwatchProcessInput, WatchProcessInput, WatchProcessResult, } from "./watch.js";
|
package/dist/index.js
CHANGED
|
@@ -13,5 +13,5 @@ export { LEXNODE_ERROR_CODES, LexNodeError, isLexNodeError } from "./errors.js";
|
|
|
13
13
|
export { DEFAULT_WEBHOOK_TOLERANCE_SECONDS, LEXNODE_WEBHOOK_HEADERS, WEBHOOK_EVENT_TYPES, WEBHOOK_TEST_EVENT_TYPE, isKnownWebhookEventType, isReceiverFault, isWebhookTest, parseWebhookEvent, verifyWebhookSignature, webhookRejectionStatus, } from "./webhooks.js";
|
|
14
14
|
export { paginate } from "./paginate.js";
|
|
15
15
|
export { searchProcesses, waitForSearchJob } from "./search.js";
|
|
16
|
-
export { describeFreshness, freshnessOf, isNotYetIndexed, readThrough, } from "./freshness.js";
|
|
16
|
+
export { describeFreshness, freshnessOf, isNotYetIndexed, lakeRescueOf, readThrough, sourceFetchedAtOf, } from "./freshness.js";
|
|
17
17
|
export { isFirstAppearance, resubscribeOnFirstAppearance, unwatchProcess, watchProcess, } from "./watch.js";
|
package/dist/types.d.ts
CHANGED
|
@@ -89,7 +89,11 @@ export interface RateLimitSnapshot {
|
|
|
89
89
|
* dormir a janela inteira — para desacelerar, olhe `remaining`.
|
|
90
90
|
*/
|
|
91
91
|
resetSeconds: number | null;
|
|
92
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* O `Retry-After` da recusa, quando houve; `null` em todo sucesso. A espera
|
|
94
|
+
* que a fonte pediu a uma leitura socorrida pelo acervo sai em
|
|
95
|
+
* `meta.lakeRescue.retryAfterSeconds`.
|
|
96
|
+
*/
|
|
93
97
|
retryAfterSeconds: number | null;
|
|
94
98
|
}
|
|
95
99
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lexnode/legal-data-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.26.0",
|
|
4
4
|
"description": "Cliente TypeScript do LexNode, o motor de dados jur\u00eddicos do Brasil: transporte tipado, erros classificados, verifica\u00e7\u00e3o de webhook e os tipos gerados do contrato OpenAPI.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://www.lexnode.com.br/docs",
|
package/schema.d.ts
CHANGED
|
@@ -159,7 +159,7 @@ export interface paths {
|
|
|
159
159
|
};
|
|
160
160
|
/**
|
|
161
161
|
* Obter um processo pelo número
|
|
162
|
-
* @description Retorna o registro exato do processo para o tribunal e o número informados, com resolução cache-first quando disponível. `waitSeconds` escolhe quanto esperar pela fonte processual. Quando a fonte responde com parte do índice e o processo está na parte que respondeu, ele é servido e `meta.partialIndex` diz quantas partes falharam (`shardsFailed`), de quantas (`shardsTotal`) e se o prazo interno da fonte estourou (`timedOut`): outra instância do mesmo número, se existir, pode não ter vindo. A exceção é o processo que veio de uma instância diferente da que o acervo já guarda do número: a guardada pode estar na parte que não respondeu, e a resposta parcial não é servida. Resposta parcial que não serve o processo — sem ele, ou com a outra instância — é 502 `UPSTREAM_UNAVAILABLE` retentável, nunca 404.
|
|
162
|
+
* @description Retorna o registro exato do processo para o tribunal e o número informados, com resolução cache-first quando disponível. `meta.sourceFetchedAt` diz quando os dados servidos foram buscados na fonte; a ficha retida pelo controle de confidencialidade, sem o teor, não o traz. `waitSeconds` escolhe quanto esperar pela fonte processual. Quando a fonte responde com parte do índice e o processo está na parte que respondeu, ele é servido e `meta.partialIndex` diz quantas partes falharam (`shardsFailed`), de quantas (`shardsTotal`) e se o prazo interno da fonte estourou (`timedOut`): outra instância do mesmo número, se existir, pode não ter vindo. A exceção é o processo que veio de uma instância diferente da que o acervo já guarda do número: a guardada pode estar na parte que não respondeu, e a resposta parcial não é servida. Resposta parcial que não serve o processo — sem ele, ou com a outra instância — é 502 `UPSTREAM_UNAVAILABLE` retentável, nunca 404; antes dela, o motor consulta a fonte de novo, até duas vezes, enquanto o prazo de `waitSeconds` couber. Quando a resposta traz mais de um documento do número — em geral um por instância, mas dois podem ser do mesmo grau —, o motor serve e guarda um só, o de `data` (grau em `degree`), e `meta.otherInstances` lista os outros que vieram: grau, data de atualização na fonte e órgão julgador. **Quando a fonte falha** — não responde dentro de `waitSeconds`, fica indisponível, responde com parte do índice sem poder servir o processo ou pede para esperar por volume — e o acervo guarda uma cópia do processo, a resposta é essa cópia, por 1 crédito: `meta.lakeRescue.cause` diz a causa e `meta.sourceFetchedAt` a data em que a cópia foi buscada. Movimentos posteriores a essa data podem existir e não estão na resposta. Sem `staleOnFailure=true`, só a cópia de até 24 h socorre; com ele, a de qualquer idade. Na recusa por volume, `meta.lakeRescue.retryAfterSeconds` e o header `Retry-After` dizem quanto esperar antes de consultar de novo. A resposta da fonte que não traz o processo nunca é socorrida e segue 404. A cópia passa pelo mesmo controle de confidencialidade da leitura; além de 24 h, só a recebe quem já tem interesse registrado no processo — de uma leitura anterior dele ou de uma assinatura ativa —, e os demais recebem a falha da fonte. Na ficha socorrida pelo acervo, a data vale para os dados do processo, e o resumo das publicações (`djen`) é relido na hora das publicações que o acervo guarda.
|
|
163
163
|
*
|
|
164
164
|
* **Escopo exigido na chave de API:** `PROCESSES_READ`
|
|
165
165
|
*/
|
|
@@ -203,7 +203,7 @@ export interface paths {
|
|
|
203
203
|
};
|
|
204
204
|
/**
|
|
205
205
|
* Obter um snapshot vivo do processo
|
|
206
|
-
* @description Busca o
|
|
206
|
+
* @description Busca o processo na fonte processual e retorna o registro normalizado do processo, o payload bruto da fonte e as movimentações normalizadas. `meta.sourceFetchedAt` diz quando os dados servidos foram buscados na fonte; a ficha retida pelo controle de confidencialidade, sem o teor, não o traz. `waitSeconds` escolhe quanto esperar pela fonte processual. Quando a fonte responde com parte do índice e o processo está na parte que respondeu, ele é servido e `meta.partialIndex` diz quantas partes falharam (`shardsFailed`), de quantas (`shardsTotal`) e se o prazo interno da fonte estourou (`timedOut`): outra instância do mesmo número, se existir, pode não ter vindo. A exceção é o processo que veio de uma instância diferente da que o acervo já guarda do número: a guardada pode estar na parte que não respondeu, e a resposta parcial não é servida. Resposta parcial que não serve o processo — sem ele, ou com a outra instância — é 502 `UPSTREAM_UNAVAILABLE` retentável, nunca 404; antes dela, o motor consulta a fonte de novo, até duas vezes, enquanto o prazo de `waitSeconds` couber. Quando a resposta traz mais de um documento do número — em geral um por instância, mas dois podem ser do mesmo grau —, o motor serve e guarda um só, o de `data` (grau em `degree`), e `meta.otherInstances` lista os outros que vieram: grau, data de atualização na fonte e órgão julgador. **Quando a fonte falha** — não responde dentro de `waitSeconds`, fica indisponível, responde com parte do índice sem poder servir o processo ou pede para esperar por volume — e o acervo guarda uma cópia do processo, a resposta é essa cópia, por 1 crédito: `meta.lakeRescue.cause` diz a causa e `meta.sourceFetchedAt` a data em que a cópia foi buscada. Movimentos posteriores a essa data podem existir e não estão na resposta. Sem `staleOnFailure=true`, só a cópia de até 24 h socorre; com ele, a de qualquer idade. Na recusa por volume, `meta.lakeRescue.retryAfterSeconds` e o header `Retry-After` dizem quanto esperar antes de consultar de novo. A resposta da fonte que não traz o processo nunca é socorrida e segue 404. A cópia passa pelo mesmo controle de confidencialidade da leitura; além de 24 h, só a recebe quem já tem interesse registrado no processo — de uma leitura anterior dele ou de uma assinatura ativa —, e os demais recebem a falha da fonte. No retrato socorrido pelo acervo, os movimentos e o registro do processo são os da última captura guardada, e `sourcePayload` é nulo: o documento bruto da fonte não é guardado.
|
|
207
207
|
*
|
|
208
208
|
* **Escopo exigido na chave de API:** `PROCESSES_READ`
|
|
209
209
|
*/
|
|
@@ -249,7 +249,7 @@ export interface paths {
|
|
|
249
249
|
put?: never;
|
|
250
250
|
/**
|
|
251
251
|
* Snapshot em lote
|
|
252
|
-
* @description Snapshot de até N processos em uma única ida e volta (elimina o N+1 noturno de uma chamada por processo). Sucesso parcial: item que falha é reportado individualmente e nunca derruba o lote; só os itens bem-sucedidos são cobrados. Todo snapshot obtido é gravado de volta no data lake.
|
|
252
|
+
* @description Snapshot de até N processos em uma única ida e volta (elimina o N+1 noturno de uma chamada por processo). Sucesso parcial: item que falha é reportado individualmente e nunca derruba o lote; só os itens bem-sucedidos são cobrados. Todo snapshot obtido é gravado de volta no data lake. Quando a fonte processual falha num item e o acervo guarda uma cópia dele de até 24 h, o item sai com essa cópia e com `lakeRescue` (a causa e a data da cópia), e custa 1 crédito em vez de 8; cópia mais velha não socorre o lote.
|
|
253
253
|
*
|
|
254
254
|
* **Escopo exigido na chave de API:** `PROCESSES_READ`
|
|
255
255
|
*/
|
|
@@ -2043,6 +2043,8 @@ export interface operations {
|
|
|
2043
2043
|
since?: unknown;
|
|
2044
2044
|
/** @description Quanto esperar pela fonte processual quando o processo precisa ser buscado nela, em segundos: de 10 a 180, padrão 20. É o teto da consulta à fonte: ela às vezes leva até ~60 s por consulta, cada ida a ela espera no máximo 60 s, e a segunda ida só sai depois de uma recusa por volume ou de um erro da fonte, nunca depois de tempo esgotado. Depois dela, a ficha ainda espera até 10 s pelo resumo das publicações do processo. Tempo esgotado é 504 `UPSTREAM_TIMEOUT` (lentidão, não ausência). Dê ao seu cliente HTTP um tempo limite que cubra a espera, esses segundos da ficha e a rede: no padrão, mais de 30 s. */
|
|
2045
2045
|
waitSeconds?: number;
|
|
2046
|
+
/** @description O que fazer quando a fonte processual falha — não responde dentro da espera, fica indisponível ou pede para esperar por volume — e o acervo guarda uma cópia do processo. Sem ele (`false`), a cópia só é servida se tiver até 24 h. Com `true`, ela é servida de qualquer idade. Nos dois casos a resposta custa 1 crédito, `meta.lakeRescue` diz a causa e `meta.sourceFetchedAt` diz quando a cópia foi buscada na fonte. A resposta da fonte que não traz o processo segue 404 `PROCESS_NOT_FOUND`, com cópia guardada ou sem ela. */
|
|
2047
|
+
staleOnFailure?: boolean;
|
|
2046
2048
|
};
|
|
2047
2049
|
header?: {
|
|
2048
2050
|
/** @description Identificador da requisição escolhido pelo cliente, ecoado em meta.requestId e no corpo de erro. Tem DOIS papéis: (1) rastreio, em toda rota — é por ele que o suporte encontra a chamada; (2) idempotência por conta em POST /v1/publications/text-searches e POST /v1/search-jobs, onde reenviar o mesmo valor reapresenta o resultado já produzido, sem nova cobrança. Fora dessas duas rotas o valor não deduplica nada: para repetir uma chamada de propósito, mande um valor novo. Aceita [A-Za-z0-9_.:-], até 200 caracteres; valor fora disso é ignorado e o motor cunha o próprio. */
|
|
@@ -2122,6 +2124,21 @@ export interface operations {
|
|
|
2122
2124
|
requestId: string;
|
|
2123
2125
|
credits?: number;
|
|
2124
2126
|
cacheHit?: boolean;
|
|
2127
|
+
/**
|
|
2128
|
+
* Format: date-time
|
|
2129
|
+
* @description Quando os dados servidos foram buscados na fonte: agora, se ela respondeu; antes, se vieram do acervo. No retrato socorrido pelo acervo, é a data da captura dos movimentos servidos. Ausente na ficha que o controle de confidencialidade entrega retida, sem o teor.
|
|
2130
|
+
*/
|
|
2131
|
+
sourceFetchedAt?: string;
|
|
2132
|
+
/** @description Presente só quando a fonte processual falhou e o motor serviu a cópia que o acervo guarda do processo. A data da cópia está em `meta.sourceFetchedAt`; movimentos posteriores a ela podem existir e não estão na resposta. */
|
|
2133
|
+
lakeRescue?: {
|
|
2134
|
+
/**
|
|
2135
|
+
* @description Por que a fonte não entregou: `UPSTREAM_TIMEOUT` (não respondeu dentro da espera), `UPSTREAM_UNAVAILABLE` (indisponível, ou respondeu com parte do índice sem poder servir o processo) ou `UPSTREAM_RATE_LIMITED` (pediu para esperar por volume).
|
|
2136
|
+
* @enum {string}
|
|
2137
|
+
*/
|
|
2138
|
+
cause: "UPSTREAM_TIMEOUT" | "UPSTREAM_UNAVAILABLE" | "UPSTREAM_RATE_LIMITED";
|
|
2139
|
+
/** @description A espera que a fonte pediu: não consulte a fonte de novo antes dela. */
|
|
2140
|
+
retryAfterSeconds?: number;
|
|
2141
|
+
};
|
|
2125
2142
|
/** @description Presente só quando a fonte respondeu com parte do índice e o processo estava na parte que respondeu: outra instância do mesmo número, se existir, pode não ter vindo. */
|
|
2126
2143
|
partialIndex?: {
|
|
2127
2144
|
/** @description Partes do índice da fonte que não responderam. */
|
|
@@ -2131,6 +2148,18 @@ export interface operations {
|
|
|
2131
2148
|
/** @description A fonte estourou o próprio prazo interno e devolveu só o que deu tempo de olhar. */
|
|
2132
2149
|
timedOut: boolean;
|
|
2133
2150
|
};
|
|
2151
|
+
/** @description Presente só quando a resposta da fonte trouxe mais de um documento do número — em geral de instâncias diferentes, mas dois podem ter o mesmo `grau`. O motor serve e guarda um só (o de `data`, que diz o grau em `degree`); estes são os outros que vieram na mesma resposta. Não inclui documento que o motor classificaria como segredo de justiça, e não aparece quando o processo servido é restrito. */
|
|
2152
|
+
otherInstances?: {
|
|
2153
|
+
/** @description O grau deste documento na fonte: G1, G2, JE, TR… */
|
|
2154
|
+
grau: string | null;
|
|
2155
|
+
/**
|
|
2156
|
+
* Format: date-time
|
|
2157
|
+
* @description Quando a fonte atualizou este documento pela última vez.
|
|
2158
|
+
*/
|
|
2159
|
+
updatedAt: string | null;
|
|
2160
|
+
/** @description O órgão julgador deste documento, quando a fonte o traz. */
|
|
2161
|
+
courtBody?: string;
|
|
2162
|
+
}[];
|
|
2134
2163
|
} & {
|
|
2135
2164
|
[key: string]: unknown;
|
|
2136
2165
|
};
|
|
@@ -2664,6 +2693,8 @@ export interface operations {
|
|
|
2664
2693
|
since?: unknown;
|
|
2665
2694
|
/** @description Quanto esperar pela fonte processual quando o processo precisa ser buscado nela, em segundos: de 10 a 180, padrão 20. É o teto da consulta à fonte: ela às vezes leva até ~60 s por consulta, cada ida a ela espera no máximo 60 s, e a segunda ida só sai depois de uma recusa por volume ou de um erro da fonte, nunca depois de tempo esgotado. Depois dela, a ficha ainda espera até 10 s pelo resumo das publicações do processo. Tempo esgotado é 504 `UPSTREAM_TIMEOUT` (lentidão, não ausência). Dê ao seu cliente HTTP um tempo limite que cubra a espera, esses segundos da ficha e a rede: no padrão, mais de 30 s. */
|
|
2666
2695
|
waitSeconds?: number;
|
|
2696
|
+
/** @description O que fazer quando a fonte processual falha — não responde dentro da espera, fica indisponível ou pede para esperar por volume — e o acervo guarda uma cópia do processo. Sem ele (`false`), a cópia só é servida se tiver até 24 h. Com `true`, ela é servida de qualquer idade. Nos dois casos a resposta custa 1 crédito, `meta.lakeRescue` diz a causa e `meta.sourceFetchedAt` diz quando a cópia foi buscada na fonte. A resposta da fonte que não traz o processo segue 404 `PROCESS_NOT_FOUND`, com cópia guardada ou sem ela. */
|
|
2697
|
+
staleOnFailure?: boolean;
|
|
2667
2698
|
};
|
|
2668
2699
|
header?: {
|
|
2669
2700
|
/** @description Identificador da requisição escolhido pelo cliente, ecoado em meta.requestId e no corpo de erro. Tem DOIS papéis: (1) rastreio, em toda rota — é por ele que o suporte encontra a chamada; (2) idempotência por conta em POST /v1/publications/text-searches e POST /v1/search-jobs, onde reenviar o mesmo valor reapresenta o resultado já produzido, sem nova cobrança. Fora dessas duas rotas o valor não deduplica nada: para repetir uma chamada de propósito, mande um valor novo. Aceita [A-Za-z0-9_.:-], até 200 caracteres; valor fora disso é ignorado e o motor cunha o próprio. */
|
|
@@ -2755,6 +2786,21 @@ export interface operations {
|
|
|
2755
2786
|
requestId: string;
|
|
2756
2787
|
credits?: number;
|
|
2757
2788
|
cacheHit?: boolean;
|
|
2789
|
+
/**
|
|
2790
|
+
* Format: date-time
|
|
2791
|
+
* @description Quando os dados servidos foram buscados na fonte: agora, se ela respondeu; antes, se vieram do acervo. No retrato socorrido pelo acervo, é a data da captura dos movimentos servidos. Ausente na ficha que o controle de confidencialidade entrega retida, sem o teor.
|
|
2792
|
+
*/
|
|
2793
|
+
sourceFetchedAt?: string;
|
|
2794
|
+
/** @description Presente só quando a fonte processual falhou e o motor serviu a cópia que o acervo guarda do processo. A data da cópia está em `meta.sourceFetchedAt`; movimentos posteriores a ela podem existir e não estão na resposta. */
|
|
2795
|
+
lakeRescue?: {
|
|
2796
|
+
/**
|
|
2797
|
+
* @description Por que a fonte não entregou: `UPSTREAM_TIMEOUT` (não respondeu dentro da espera), `UPSTREAM_UNAVAILABLE` (indisponível, ou respondeu com parte do índice sem poder servir o processo) ou `UPSTREAM_RATE_LIMITED` (pediu para esperar por volume).
|
|
2798
|
+
* @enum {string}
|
|
2799
|
+
*/
|
|
2800
|
+
cause: "UPSTREAM_TIMEOUT" | "UPSTREAM_UNAVAILABLE" | "UPSTREAM_RATE_LIMITED";
|
|
2801
|
+
/** @description A espera que a fonte pediu: não consulte a fonte de novo antes dela. */
|
|
2802
|
+
retryAfterSeconds?: number;
|
|
2803
|
+
};
|
|
2758
2804
|
/** @description Presente só quando a fonte respondeu com parte do índice e o processo estava na parte que respondeu: outra instância do mesmo número, se existir, pode não ter vindo. */
|
|
2759
2805
|
partialIndex?: {
|
|
2760
2806
|
/** @description Partes do índice da fonte que não responderam. */
|
|
@@ -2764,6 +2810,18 @@ export interface operations {
|
|
|
2764
2810
|
/** @description A fonte estourou o próprio prazo interno e devolveu só o que deu tempo de olhar. */
|
|
2765
2811
|
timedOut: boolean;
|
|
2766
2812
|
};
|
|
2813
|
+
/** @description Presente só quando a resposta da fonte trouxe mais de um documento do número — em geral de instâncias diferentes, mas dois podem ter o mesmo `grau`. O motor serve e guarda um só (o de `data`, que diz o grau em `degree`); estes são os outros que vieram na mesma resposta. Não inclui documento que o motor classificaria como segredo de justiça, e não aparece quando o processo servido é restrito. */
|
|
2814
|
+
otherInstances?: {
|
|
2815
|
+
/** @description O grau deste documento na fonte: G1, G2, JE, TR… */
|
|
2816
|
+
grau: string | null;
|
|
2817
|
+
/**
|
|
2818
|
+
* Format: date-time
|
|
2819
|
+
* @description Quando a fonte atualizou este documento pela última vez.
|
|
2820
|
+
*/
|
|
2821
|
+
updatedAt: string | null;
|
|
2822
|
+
/** @description O órgão julgador deste documento, quando a fonte o traz. */
|
|
2823
|
+
courtBody?: string;
|
|
2824
|
+
}[];
|
|
2767
2825
|
} & {
|
|
2768
2826
|
[key: string]: unknown;
|
|
2769
2827
|
};
|
|
@@ -3338,6 +3396,21 @@ export interface operations {
|
|
|
3338
3396
|
};
|
|
3339
3397
|
movements: unknown[];
|
|
3340
3398
|
};
|
|
3399
|
+
/** @description Presente só no item que a fonte processual não entregou e que o acervo socorreu com a cópia guardada de até 24 h: a causa, a espera que a fonte pediu, quando pediu, e quando a cópia foi buscada. O item socorrido custa 1 crédito. */
|
|
3400
|
+
lakeRescue?: {
|
|
3401
|
+
/**
|
|
3402
|
+
* @description Por que a fonte não entregou: `UPSTREAM_TIMEOUT` (não respondeu dentro da espera), `UPSTREAM_UNAVAILABLE` (indisponível, ou respondeu com parte do índice sem poder servir o processo) ou `UPSTREAM_RATE_LIMITED` (pediu para esperar por volume).
|
|
3403
|
+
* @enum {string}
|
|
3404
|
+
*/
|
|
3405
|
+
cause: "UPSTREAM_TIMEOUT" | "UPSTREAM_UNAVAILABLE" | "UPSTREAM_RATE_LIMITED";
|
|
3406
|
+
/** @description A espera que a fonte pediu: não consulte a fonte de novo antes dela. */
|
|
3407
|
+
retryAfterSeconds?: number;
|
|
3408
|
+
/**
|
|
3409
|
+
* Format: date-time
|
|
3410
|
+
* @description Quando a cópia servida foi buscada na fonte.
|
|
3411
|
+
*/
|
|
3412
|
+
sourceFetchedAt: string;
|
|
3413
|
+
};
|
|
3341
3414
|
error?: {
|
|
3342
3415
|
status?: number;
|
|
3343
3416
|
/** @description Código estável da taxonomia, quando a falha do item o carrega — é o que distingue, por exemplo, a recusa da chave de teste de um bloqueio LGPD. */
|