@neetru/sdk 3.8.0 → 3.8.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/CHANGELOG.md +20 -0
- package/dist/ai.cjs +1 -1
- package/dist/ai.d.cts +1 -1
- package/dist/ai.d.ts +1 -1
- package/dist/ai.mjs +1 -1
- package/dist/auth.cjs +708 -688
- package/dist/auth.d.cts +1 -1
- package/dist/auth.d.ts +1 -1
- package/dist/auth.mjs +705 -685
- package/dist/catalog.cjs +1 -1
- package/dist/catalog.d.cts +1 -1
- package/dist/catalog.d.ts +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/checkout.cjs +1 -1
- package/dist/checkout.d.cts +1 -1
- package/dist/checkout.d.ts +1 -1
- package/dist/checkout.mjs +1 -1
- package/dist/db-react.d.cts +1 -1
- package/dist/db-react.d.ts +1 -1
- package/dist/db.cjs +242 -222
- package/dist/db.d.cts +1 -1
- package/dist/db.d.ts +1 -1
- package/dist/db.mjs +263 -243
- package/dist/entitlements.d.cts +1 -1
- package/dist/entitlements.d.ts +1 -1
- package/dist/firestore-compat.d.cts +1 -1
- package/dist/firestore-compat.d.ts +1 -1
- package/dist/index.cjs +730 -710
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +874 -854
- package/dist/mobile.d.cts +1 -1
- package/dist/mobile.d.ts +1 -1
- package/dist/mocks.d.cts +1 -1
- package/dist/mocks.d.ts +1 -1
- package/dist/notifications.cjs +1 -1
- package/dist/notifications.d.cts +1 -1
- package/dist/notifications.d.ts +1 -1
- package/dist/notifications.mjs +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/support.cjs +1 -1
- package/dist/support.d.cts +1 -1
- package/dist/support.d.ts +1 -1
- package/dist/support.mjs +1 -1
- package/dist/telemetry.cjs +1 -1
- package/dist/telemetry.d.cts +1 -1
- package/dist/telemetry.d.ts +1 -1
- package/dist/telemetry.mjs +1 -1
- package/dist/{types-bVztFQTI.d.ts → types-BYPk_3HR.d.ts} +56 -16
- package/dist/{types-D-9bjlM0.d.cts → types-yv3EDKg2.d.cts} +56 -16
- package/dist/usage.cjs +1 -1
- package/dist/usage.d.cts +1 -1
- package/dist/usage.d.ts +1 -1
- package/dist/usage.mjs +1 -1
- package/dist/webhooks.cjs +1 -1
- package/dist/webhooks.d.cts +1 -1
- package/dist/webhooks.d.ts +1 -1
- package/dist/webhooks.mjs +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [3.8.1] — 2026-10-11 (re-lease em falha de autenticação + doc de mTLS)
|
|
11
|
+
|
|
12
|
+
### Corrigido
|
|
13
|
+
|
|
14
|
+
- **`client.db.sql()` não se recuperava sozinho depois de um `rotate-credentials`** (bug_b7f5f2cff6d14a2aaa5d5c2068dc9dfd). A rotação (ALTER ROLE + userlist do PgBouncer) mantém vivas as conexões já abertas, mas toda conexão **nova** do pool, ainda com a senha do lease antigo, era recusada na autenticação até o próximo renew (~3 min). O re-lease reativo só cobria erro de rede/TLS, então os produtos recriavam o client na mão e vazavam pools. Agora falha de autenticação também dispara o re-lease: lease novo → pool novo → pool velho drenado com `end()` → a operação é repetida **uma vez**. Se a credencial nova também for recusada, o erro propaga (sem laço).
|
|
15
|
+
- Critério pelo SQLSTATE em `err.code`: `28P01` (senha inválida) e `28000` (autorização inválida). O PgBouncer devolve falha de SCRAM com o código genérico `08P01`; esse caso só conta com a mensagem `SASL authentication failed` / `password authentication failed` (`08P01` sozinho, como `query_wait_timeout`, **não** dispara).
|
|
16
|
+
- **Transações:** o `connect()` que abre a transação também ganha o re-lease + 1 nova tentativa, **só** em falha de autenticação (acontece no startup da conexão, antes do `BEGIN`; o corpo da transação nunca é repetido). Erro de rede/TLS no `connect()` segue sem retry, como antes.
|
|
17
|
+
- Só Postgres: o pool do `client.db.sql()` é `pg.Pool`; não há driver MySQL no SDK, então `ER_ACCESS_DENIED_ERROR` (1045) não se aplica.
|
|
18
|
+
- Sem API pública nova ou removida (`isAuthenticationError` é interno do módulo SQL).
|
|
19
|
+
|
|
20
|
+
### Documentação
|
|
21
|
+
|
|
22
|
+
- **A doc de `DbSqlLease` dizia que o mTLS de cliente "não está implementado no Core" e que `clientCert`/`clientKey` são "SEMPRE `null`". Isso é falso** (bug_e6e3af03f19c406994fe9d05a5f2617a). O texto veio do S2 de 2026-09-20 (`8d39b32`), baseado numa auditoria que já não batia com o código.
|
|
23
|
+
- O Core emite `sslca` + `clientCert` + `clientKey` em **todo** lease SQL (emissão e renovação), sem flag. O cert de cliente tem CN = `leaseId`, EKU `clientAuth` e 15 min de validade; a chave é EC P-256 efêmera. Se a CA não existir, o Core falha com 500 em vez de mandar `null`.
|
|
24
|
+
- O SDK já repassava os três ao `pg.Pool` (`ssl = { ca, cert, key, rejectUnauthorized: true }`). Agora há teste fixando isso nos dois factories.
|
|
25
|
+
- O PgBouncer da VM exige o cert de cliente (`client_tls_sslmode = verify-full` + `client_tls_ca_file` = CA do Core) **e** a senha SCRAM.
|
|
26
|
+
- Resultado: o mTLS está ativo de ponta a ponta. O `certificate expired` (alerta TLS 45) que a renovação e o re-lease curam é do cert de **cliente**, que expira com o lease. Não é o cert do servidor, que vale 365 dias. Comentários de `lease.ts`/`resilient-pool.ts`/`sql-client.ts` e o texto do `console.warn` de renovação falha foram corrigidos.
|
|
27
|
+
- `credentialVersion`: documentado que hoje é o placeholder fixo `1` do Core. A rotação é detectada pela troca de `password`, não por ele.
|
|
28
|
+
- Sem mudança de comportamento nem de tipos públicos (`clientCert`/`clientKey`/`sslca` seguem `string | null`, por tolerância a resposta sem o campo).
|
|
29
|
+
|
|
10
30
|
## [3.8.0] - 2026-10-03 — **feat(apps): chave `nrt_` só de servidor, `verifyAccessToken`, mobile integrado, correlation id**
|
|
11
31
|
|
|
12
32
|
Release **minor**. Nenhuma API pública removida; produtos que ainda usam a chave no navegador **continuam funcionando** (só ganham um aviso). Base para produtos com app móvel (primeiro: PDV em React Native/Expo).
|
package/dist/ai.cjs
CHANGED
package/dist/ai.d.cts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { A as AiChatChoice, a as AiChatMessage, b as AiChatOptions, c as AiChatResult, d as AiChatUsage, e as AiContentPart, f as AiImageUrlPart, g as AiNamespace, h as AiResponseFormat, i as AiStreamHandle, j as AiStreamMeta, k as AiTextPart, aK as createAiNamespace } from './types-
|
|
1
|
+
export { A as AiChatChoice, a as AiChatMessage, b as AiChatOptions, c as AiChatResult, d as AiChatUsage, e as AiContentPart, f as AiImageUrlPart, g as AiNamespace, h as AiResponseFormat, i as AiStreamHandle, j as AiStreamMeta, k as AiTextPart, aK as createAiNamespace } from './types-yv3EDKg2.cjs';
|
|
2
2
|
import 'drizzle-orm/node-postgres';
|
|
3
3
|
import './errors.cjs';
|
package/dist/ai.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { A as AiChatChoice, a as AiChatMessage, b as AiChatOptions, c as AiChatResult, d as AiChatUsage, e as AiContentPart, f as AiImageUrlPart, g as AiNamespace, h as AiResponseFormat, i as AiStreamHandle, j as AiStreamMeta, k as AiTextPart, aK as createAiNamespace } from './types-
|
|
1
|
+
export { A as AiChatChoice, a as AiChatMessage, b as AiChatOptions, c as AiChatResult, d as AiChatUsage, e as AiContentPart, f as AiImageUrlPart, g as AiNamespace, h as AiResponseFormat, i as AiStreamHandle, j as AiStreamMeta, k as AiTextPart, aK as createAiNamespace } from './types-BYPk_3HR.js';
|
|
2
2
|
import 'drizzle-orm/node-postgres';
|
|
3
3
|
import './errors.js';
|