@neetru/sdk 3.6.0 → 3.8.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.
Files changed (117) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +66 -1
  3. package/dist/ai.cjs +298 -391
  4. package/dist/ai.d.cts +1 -1
  5. package/dist/ai.d.ts +1 -1
  6. package/dist/ai.mjs +298 -391
  7. package/dist/auth.cjs +3717 -5005
  8. package/dist/auth.d.cts +1 -1
  9. package/dist/auth.d.ts +1 -1
  10. package/dist/auth.mjs +3714 -5002
  11. package/dist/build-guard.cjs +101 -119
  12. package/dist/build-guard.mjs +91 -109
  13. package/dist/catalog.cjs +220 -225
  14. package/dist/catalog.d.cts +1 -1
  15. package/dist/catalog.d.ts +1 -1
  16. package/dist/catalog.mjs +220 -225
  17. package/dist/checkout.cjs +307 -323
  18. package/dist/checkout.d.cts +1 -1
  19. package/dist/checkout.d.ts +1 -1
  20. package/dist/checkout.mjs +306 -322
  21. package/dist/db-react.cjs +59 -87
  22. package/dist/db-react.d.cts +1 -1
  23. package/dist/db-react.d.ts +1 -1
  24. package/dist/db-react.mjs +56 -84
  25. package/dist/db.cjs +2128 -3014
  26. package/dist/db.d.cts +1 -1
  27. package/dist/db.d.ts +1 -1
  28. package/dist/db.mjs +2141 -3027
  29. package/dist/entitlements.cjs +19 -20
  30. package/dist/entitlements.d.cts +1 -1
  31. package/dist/entitlements.d.ts +1 -1
  32. package/dist/entitlements.mjs +19 -20
  33. package/dist/errors.cjs +16 -12
  34. package/dist/errors.d.cts +59 -3
  35. package/dist/errors.d.ts +59 -3
  36. package/dist/errors.mjs +15 -12
  37. package/dist/firestore-compat.cjs +241 -297
  38. package/dist/firestore-compat.d.cts +1 -1
  39. package/dist/firestore-compat.d.ts +1 -1
  40. package/dist/firestore-compat.mjs +215 -271
  41. package/dist/index.cjs +3942 -5134
  42. package/dist/index.d.cts +181 -5
  43. package/dist/index.d.ts +181 -5
  44. package/dist/index.mjs +4040 -5239
  45. package/dist/mobile.cjs +459 -344
  46. package/dist/mobile.d.cts +59 -4
  47. package/dist/mobile.d.ts +59 -4
  48. package/dist/mobile.mjs +459 -344
  49. package/dist/mocks.cjs +319 -447
  50. package/dist/mocks.d.cts +1 -1
  51. package/dist/mocks.d.ts +1 -1
  52. package/dist/mocks.mjs +313 -441
  53. package/dist/notifications.cjs +296 -317
  54. package/dist/notifications.d.cts +1 -1
  55. package/dist/notifications.d.ts +1 -1
  56. package/dist/notifications.mjs +295 -316
  57. package/dist/react.cjs +557 -707
  58. package/dist/react.d.cts +1 -1
  59. package/dist/react.d.ts +1 -1
  60. package/dist/react.mjs +547 -697
  61. package/dist/support.cjs +402 -328
  62. package/dist/support.d.cts +29 -3
  63. package/dist/support.d.ts +29 -3
  64. package/dist/support.mjs +401 -328
  65. package/dist/telemetry.cjs +267 -304
  66. package/dist/telemetry.d.cts +1 -1
  67. package/dist/telemetry.d.ts +1 -1
  68. package/dist/telemetry.mjs +267 -304
  69. package/dist/{types-Du_iioJ7.d.cts → types-D-9bjlM0.d.cts} +74 -1
  70. package/dist/{types-BPATkXYu.d.ts → types-bVztFQTI.d.ts} +74 -1
  71. package/dist/usage.cjs +233 -230
  72. package/dist/usage.d.cts +1 -1
  73. package/dist/usage.d.ts +1 -1
  74. package/dist/usage.mjs +233 -230
  75. package/dist/webhooks.cjs +328 -362
  76. package/dist/webhooks.d.cts +1 -1
  77. package/dist/webhooks.d.ts +1 -1
  78. package/dist/webhooks.mjs +325 -359
  79. package/package.json +5 -3
  80. package/dist/ai.cjs.map +0 -1
  81. package/dist/ai.mjs.map +0 -1
  82. package/dist/auth.cjs.map +0 -1
  83. package/dist/auth.mjs.map +0 -1
  84. package/dist/build-guard.cjs.map +0 -1
  85. package/dist/build-guard.mjs.map +0 -1
  86. package/dist/catalog.cjs.map +0 -1
  87. package/dist/catalog.mjs.map +0 -1
  88. package/dist/checkout.cjs.map +0 -1
  89. package/dist/checkout.mjs.map +0 -1
  90. package/dist/db-react.cjs.map +0 -1
  91. package/dist/db-react.mjs.map +0 -1
  92. package/dist/db.cjs.map +0 -1
  93. package/dist/db.mjs.map +0 -1
  94. package/dist/entitlements.cjs.map +0 -1
  95. package/dist/entitlements.mjs.map +0 -1
  96. package/dist/errors.cjs.map +0 -1
  97. package/dist/errors.mjs.map +0 -1
  98. package/dist/firestore-compat.cjs.map +0 -1
  99. package/dist/firestore-compat.mjs.map +0 -1
  100. package/dist/index.cjs.map +0 -1
  101. package/dist/index.mjs.map +0 -1
  102. package/dist/mobile.cjs.map +0 -1
  103. package/dist/mobile.mjs.map +0 -1
  104. package/dist/mocks.cjs.map +0 -1
  105. package/dist/mocks.mjs.map +0 -1
  106. package/dist/notifications.cjs.map +0 -1
  107. package/dist/notifications.mjs.map +0 -1
  108. package/dist/react.cjs.map +0 -1
  109. package/dist/react.mjs.map +0 -1
  110. package/dist/support.cjs.map +0 -1
  111. package/dist/support.mjs.map +0 -1
  112. package/dist/telemetry.cjs.map +0 -1
  113. package/dist/telemetry.mjs.map +0 -1
  114. package/dist/usage.cjs.map +0 -1
  115. package/dist/usage.mjs.map +0 -1
  116. package/dist/webhooks.cjs.map +0 -1
  117. package/dist/webhooks.mjs.map +0 -1
package/dist/mobile.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { X as NeetruClientConfig, v as CompleteSignInResult, a5 as NeetruUser, m as AuthStateListener } from './types-Du_iioJ7.cjs';
1
+ import { Y as NeetruClientConfig, v as CompleteSignInResult, a6 as NeetruUser, m as AuthStateListener } from './types-D-9bjlM0.cjs';
2
2
  import 'drizzle-orm/node-postgres';
3
3
  import './errors.cjs';
4
4
 
@@ -12,7 +12,23 @@ interface MobileAuthStorage {
12
12
  setItem(key: string, value: string): Promise<void>;
13
13
  removeItem(key: string): Promise<void>;
14
14
  }
15
- interface MobileAuthConfig extends NeetruClientConfig {
15
+ interface MobileAuthConfig extends Omit<NeetruClientConfig, 'apiKey'> {
16
+ /**
17
+ * 3.8.0: PROIBIDO. A credencial `nrt_` é só de servidor — passar qualquer
18
+ * valor aqui faz `createMobileAuthNamespace` lançar `server_only_key`.
19
+ */
20
+ apiKey?: never;
21
+ /**
22
+ * `client_id` do client OIDC PÚBLICO do app (iOS/Android), registrado no Core.
23
+ * Obrigatório a partir da 3.8.0 (antes caía no keyId da apiKey).
24
+ */
25
+ oidcClientId?: string;
26
+ /**
27
+ * 3.8.0: URL base da API do SEU produto (ex.: `https://pdv.neetru.com/api/v1`).
28
+ * Usada por `auth.authFetch(...)` — o access_token SÓ é enviado para essa
29
+ * origem (nunca para outro host). Precisa ser `https://` (ou `http://localhost`).
30
+ */
31
+ productApiUrl?: string;
16
32
  /** Storage persistente (idealmente seguro) — ver requisito 4 no JSDoc do módulo. */
17
33
  storage: MobileAuthStorage;
18
34
  /**
@@ -62,6 +78,30 @@ interface MobileAuthNamespace {
62
78
  completeSignIn(callbackUrl: string): Promise<CompleteSignInResult>;
63
79
  /** `id_token` cru armazenado, ou `null` se ausente/expirado. */
64
80
  getIdToken(): Promise<string | null>;
81
+ /**
82
+ * 3.8.0: `access_token` válido para chamar a API do produto (Bearer). Se o
83
+ * armazenado venceu (ou vence em <30s) e há refresh_token, renova 1x antes.
84
+ * `null` se não há sessão.
85
+ */
86
+ getAccessToken(): Promise<string | null>;
87
+ /**
88
+ * 3.8.0: claims do usuário no `/api/v1/oauth/userinfo` do Core (fonte
89
+ * autoritativa — reflete conta suspensa/cancelada, diferente do id_token).
90
+ * Num 401 renova a sessão 1x e repete.
91
+ *
92
+ * @throws {NeetruAuthRequiredError} sem sessão ou sessão recusada pelo Core.
93
+ */
94
+ getUserInfo(): Promise<MobileUserInfo>;
95
+ /**
96
+ * 3.8.0: `fetch` autenticado para a API do PRODUTO (`config.productApiUrl`):
97
+ * injeta `Authorization: Bearer <access_token>` e `x-correlation-id`; num 401
98
+ * renova a sessão 1x e repete. Aceita path relativo (`/vendas`) ou URL
99
+ * absoluta DA MESMA origem — outra origem é recusada (o token nunca vaza).
100
+ *
101
+ * @throws {NeetruError} `invalid_config` (sem `productApiUrl` / outra origem),
102
+ * {@link NeetruAuthRequiredError} sem sessão.
103
+ */
104
+ authFetch(pathOrUrl: string, init?: RequestInit): Promise<Response>;
65
105
  /** Usuário atual (claims do `id_token` armazenado), ou `null`. */
66
106
  getUser(): Promise<NeetruUser | null>;
67
107
  /**
@@ -77,13 +117,28 @@ interface MobileAuthNamespace {
77
117
  * token, `invalid_grant`, rede) — não lança.
78
118
  */
79
119
  refreshTokens(): Promise<boolean>;
80
- /** Limpa a sessão local (storage) + melhor esforço de revoke no servidor. */
120
+ /**
121
+ * Limpa a sessão local (storage) e revoga no Core (RFC 7009, client público)
122
+ * o refresh_token e o access_token. A limpeza local acontece SEMPRE, mesmo
123
+ * se o servidor estiver fora; a revogação é melhor esforço (avisa no console).
124
+ */
81
125
  signOut(): Promise<void>;
82
126
  }
127
+ /** 3.8.0 — resposta do `/userinfo` (escopo decide quais campos vêm). */
128
+ interface MobileUserInfo {
129
+ sub: string;
130
+ email?: string;
131
+ email_verified?: boolean;
132
+ name?: string;
133
+ picture?: string;
134
+ tenant_id?: string;
135
+ entitlements?: string[];
136
+ [claim: string]: unknown;
137
+ }
83
138
  /**
84
139
  * Cria o namespace de auth mobile. Ver JSDoc do módulo pros requisitos do
85
140
  * app consumidor (polyfill WebCrypto, browser externo, storage seguro).
86
141
  */
87
142
  declare function createMobileAuthNamespace(config: MobileAuthConfig): MobileAuthNamespace;
88
143
 
89
- export { type MobileAuthConfig, type MobileAuthNamespace, type MobileAuthStorage, type MobileSignInOptions, createMobileAuthNamespace };
144
+ export { type MobileAuthConfig, type MobileAuthNamespace, type MobileAuthStorage, type MobileSignInOptions, type MobileUserInfo, createMobileAuthNamespace };
package/dist/mobile.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { X as NeetruClientConfig, v as CompleteSignInResult, a5 as NeetruUser, m as AuthStateListener } from './types-BPATkXYu.js';
1
+ import { Y as NeetruClientConfig, v as CompleteSignInResult, a6 as NeetruUser, m as AuthStateListener } from './types-bVztFQTI.js';
2
2
  import 'drizzle-orm/node-postgres';
3
3
  import './errors.js';
4
4
 
@@ -12,7 +12,23 @@ interface MobileAuthStorage {
12
12
  setItem(key: string, value: string): Promise<void>;
13
13
  removeItem(key: string): Promise<void>;
14
14
  }
15
- interface MobileAuthConfig extends NeetruClientConfig {
15
+ interface MobileAuthConfig extends Omit<NeetruClientConfig, 'apiKey'> {
16
+ /**
17
+ * 3.8.0: PROIBIDO. A credencial `nrt_` é só de servidor — passar qualquer
18
+ * valor aqui faz `createMobileAuthNamespace` lançar `server_only_key`.
19
+ */
20
+ apiKey?: never;
21
+ /**
22
+ * `client_id` do client OIDC PÚBLICO do app (iOS/Android), registrado no Core.
23
+ * Obrigatório a partir da 3.8.0 (antes caía no keyId da apiKey).
24
+ */
25
+ oidcClientId?: string;
26
+ /**
27
+ * 3.8.0: URL base da API do SEU produto (ex.: `https://pdv.neetru.com/api/v1`).
28
+ * Usada por `auth.authFetch(...)` — o access_token SÓ é enviado para essa
29
+ * origem (nunca para outro host). Precisa ser `https://` (ou `http://localhost`).
30
+ */
31
+ productApiUrl?: string;
16
32
  /** Storage persistente (idealmente seguro) — ver requisito 4 no JSDoc do módulo. */
17
33
  storage: MobileAuthStorage;
18
34
  /**
@@ -62,6 +78,30 @@ interface MobileAuthNamespace {
62
78
  completeSignIn(callbackUrl: string): Promise<CompleteSignInResult>;
63
79
  /** `id_token` cru armazenado, ou `null` se ausente/expirado. */
64
80
  getIdToken(): Promise<string | null>;
81
+ /**
82
+ * 3.8.0: `access_token` válido para chamar a API do produto (Bearer). Se o
83
+ * armazenado venceu (ou vence em <30s) e há refresh_token, renova 1x antes.
84
+ * `null` se não há sessão.
85
+ */
86
+ getAccessToken(): Promise<string | null>;
87
+ /**
88
+ * 3.8.0: claims do usuário no `/api/v1/oauth/userinfo` do Core (fonte
89
+ * autoritativa — reflete conta suspensa/cancelada, diferente do id_token).
90
+ * Num 401 renova a sessão 1x e repete.
91
+ *
92
+ * @throws {NeetruAuthRequiredError} sem sessão ou sessão recusada pelo Core.
93
+ */
94
+ getUserInfo(): Promise<MobileUserInfo>;
95
+ /**
96
+ * 3.8.0: `fetch` autenticado para a API do PRODUTO (`config.productApiUrl`):
97
+ * injeta `Authorization: Bearer <access_token>` e `x-correlation-id`; num 401
98
+ * renova a sessão 1x e repete. Aceita path relativo (`/vendas`) ou URL
99
+ * absoluta DA MESMA origem — outra origem é recusada (o token nunca vaza).
100
+ *
101
+ * @throws {NeetruError} `invalid_config` (sem `productApiUrl` / outra origem),
102
+ * {@link NeetruAuthRequiredError} sem sessão.
103
+ */
104
+ authFetch(pathOrUrl: string, init?: RequestInit): Promise<Response>;
65
105
  /** Usuário atual (claims do `id_token` armazenado), ou `null`. */
66
106
  getUser(): Promise<NeetruUser | null>;
67
107
  /**
@@ -77,13 +117,28 @@ interface MobileAuthNamespace {
77
117
  * token, `invalid_grant`, rede) — não lança.
78
118
  */
79
119
  refreshTokens(): Promise<boolean>;
80
- /** Limpa a sessão local (storage) + melhor esforço de revoke no servidor. */
120
+ /**
121
+ * Limpa a sessão local (storage) e revoga no Core (RFC 7009, client público)
122
+ * o refresh_token e o access_token. A limpeza local acontece SEMPRE, mesmo
123
+ * se o servidor estiver fora; a revogação é melhor esforço (avisa no console).
124
+ */
81
125
  signOut(): Promise<void>;
82
126
  }
127
+ /** 3.8.0 — resposta do `/userinfo` (escopo decide quais campos vêm). */
128
+ interface MobileUserInfo {
129
+ sub: string;
130
+ email?: string;
131
+ email_verified?: boolean;
132
+ name?: string;
133
+ picture?: string;
134
+ tenant_id?: string;
135
+ entitlements?: string[];
136
+ [claim: string]: unknown;
137
+ }
83
138
  /**
84
139
  * Cria o namespace de auth mobile. Ver JSDoc do módulo pros requisitos do
85
140
  * app consumidor (polyfill WebCrypto, browser externo, storage seguro).
86
141
  */
87
142
  declare function createMobileAuthNamespace(config: MobileAuthConfig): MobileAuthNamespace;
88
143
 
89
- export { type MobileAuthConfig, type MobileAuthNamespace, type MobileAuthStorage, type MobileSignInOptions, createMobileAuthNamespace };
144
+ export { type MobileAuthConfig, type MobileAuthNamespace, type MobileAuthStorage, type MobileSignInOptions, type MobileUserInfo, createMobileAuthNamespace };