@neetru/sdk 3.7.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 (73) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +66 -1
  3. package/dist/ai.cjs +221 -177
  4. package/dist/ai.d.cts +1 -1
  5. package/dist/ai.d.ts +1 -1
  6. package/dist/ai.mjs +221 -177
  7. package/dist/auth.cjs +1227 -1064
  8. package/dist/auth.d.cts +1 -1
  9. package/dist/auth.d.ts +1 -1
  10. package/dist/auth.mjs +1224 -1061
  11. package/dist/catalog.cjs +164 -97
  12. package/dist/catalog.d.cts +1 -1
  13. package/dist/catalog.d.ts +1 -1
  14. package/dist/catalog.mjs +164 -97
  15. package/dist/checkout.cjs +182 -115
  16. package/dist/checkout.d.cts +1 -1
  17. package/dist/checkout.d.ts +1 -1
  18. package/dist/checkout.mjs +181 -114
  19. package/dist/db-react.d.cts +1 -1
  20. package/dist/db-react.d.ts +1 -1
  21. package/dist/db.cjs +370 -298
  22. package/dist/db.d.cts +1 -1
  23. package/dist/db.d.ts +1 -1
  24. package/dist/db.mjs +362 -290
  25. package/dist/entitlements.cjs +17 -10
  26. package/dist/entitlements.d.cts +1 -1
  27. package/dist/entitlements.d.ts +1 -1
  28. package/dist/entitlements.mjs +17 -10
  29. package/dist/errors.cjs +15 -8
  30. package/dist/errors.d.cts +24 -3
  31. package/dist/errors.d.ts +24 -3
  32. package/dist/errors.mjs +14 -7
  33. package/dist/firestore-compat.d.cts +1 -1
  34. package/dist/firestore-compat.d.ts +1 -1
  35. package/dist/index.cjs +1409 -1075
  36. package/dist/index.d.cts +177 -3
  37. package/dist/index.d.ts +177 -3
  38. package/dist/index.mjs +1544 -1217
  39. package/dist/mobile.cjs +400 -181
  40. package/dist/mobile.d.cts +59 -4
  41. package/dist/mobile.d.ts +59 -4
  42. package/dist/mobile.mjs +400 -181
  43. package/dist/mocks.cjs +9 -2
  44. package/dist/mocks.d.cts +1 -1
  45. package/dist/mocks.d.ts +1 -1
  46. package/dist/mocks.mjs +9 -2
  47. package/dist/notifications.cjs +197 -130
  48. package/dist/notifications.d.cts +1 -1
  49. package/dist/notifications.d.ts +1 -1
  50. package/dist/notifications.mjs +196 -129
  51. package/dist/react.cjs +303 -282
  52. package/dist/react.d.cts +1 -1
  53. package/dist/react.d.ts +1 -1
  54. package/dist/react.mjs +295 -274
  55. package/dist/support.cjs +299 -229
  56. package/dist/support.d.cts +8 -4
  57. package/dist/support.d.ts +8 -4
  58. package/dist/support.mjs +298 -228
  59. package/dist/telemetry.cjs +234 -167
  60. package/dist/telemetry.d.cts +1 -1
  61. package/dist/telemetry.d.ts +1 -1
  62. package/dist/telemetry.mjs +234 -167
  63. package/dist/{types-Bx4kTLmk.d.cts → types-D-9bjlM0.d.cts} +48 -1
  64. package/dist/{types-Dx0IrOSF.d.ts → types-bVztFQTI.d.ts} +48 -1
  65. package/dist/usage.cjs +183 -116
  66. package/dist/usage.d.cts +1 -1
  67. package/dist/usage.d.ts +1 -1
  68. package/dist/usage.mjs +183 -116
  69. package/dist/webhooks.cjs +215 -148
  70. package/dist/webhooks.d.cts +1 -1
  71. package/dist/webhooks.d.ts +1 -1
  72. package/dist/webhooks.mjs +212 -145
  73. package/package.json +2 -1
package/dist/db.cjs CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  var idb = require('idb');
4
4
 
5
- var Ve = Object.defineProperty;
6
- var T = (r, e) => () => (r && (e = r(r = 0)), e);
7
- var he = (r, e) => {
5
+ var Je = Object.defineProperty;
6
+ var S = (r, e) => () => (r && (e = r(r = 0)), e);
7
+ var me = (r, e) => {
8
8
  for (var t in e)
9
- Ve(r, t, { get: e[t], enumerable: true });
9
+ Je(r, t, { get: e[t], enumerable: true });
10
10
  };
11
11
 
12
12
  // src/errors.ts
13
- var g, x = T(() => {
13
+ var g, x = S(() => {
14
14
  g = class r extends Error {
15
15
  code;
16
16
  status;
@@ -24,16 +24,23 @@ var g, x = T(() => {
24
24
  * para um `NeetruDbErrorCode` mais específico (recuperável vs não).
25
25
  */
26
26
  reason;
27
- constructor(e, t, n, o, i) {
28
- super(t), this.name = "NeetruError", this.code = e, this.status = n, this.requestId = o, this.reason = i, Object.setPrototypeOf(this, r.prototype);
27
+ /**
28
+ * 3.8.0: `x-correlation-id` da requisição que falhou. O SDK gera um UUID por
29
+ * chamada (ou usa o que o chamador passou) e manda no header; o Core grava o
30
+ * mesmo id nos logs/auditoria — cite-o ao abrir um ticket de suporte.
31
+ * `undefined` em erros que acontecem antes de qualquer requisição.
32
+ */
33
+ correlationId;
34
+ constructor(e, t, n, o, i, s) {
35
+ super(t), this.name = "NeetruError", this.code = e, this.status = n, this.requestId = o, this.reason = i, this.correlationId = s, Object.setPrototypeOf(this, r.prototype);
29
36
  }
30
37
  };
31
38
  });
32
39
 
33
40
  // src/db-errors.ts
34
- var Qe; exports.NeetruDbError = void 0; var k = T(() => {
41
+ var Ye; exports.NeetruDbError = void 0; var I = S(() => {
35
42
  x();
36
- Qe = /* @__PURE__ */ new Set([
43
+ Ye = /* @__PURE__ */ new Set([
37
44
  "db_unavailable",
38
45
  "db_conflict",
39
46
  "db_timeout"
@@ -51,13 +58,13 @@ var Qe; exports.NeetruDbError = void 0; var k = T(() => {
51
58
  */
52
59
  dbId;
53
60
  constructor(e, t, n) {
54
- super(e, t), this.name = "NeetruDbError", this.code = e, this.retryable = Qe.has(e), this.dbId = n, Object.setPrototypeOf(this, r.prototype);
61
+ super(e, t), this.name = "NeetruDbError", this.code = e, this.retryable = Ye.has(e), this.dbId = n, Object.setPrototypeOf(this, r.prototype);
55
62
  }
56
63
  };
57
64
  });
58
65
 
59
66
  // src/idempotency.ts
60
- function Se() {
67
+ function Te() {
61
68
  let r = typeof globalThis < "u" && "crypto" in globalThis ? globalThis.crypto : void 0;
62
69
  if (r && typeof r.randomUUID == "function")
63
70
  return r.randomUUID();
@@ -66,21 +73,76 @@ function Se() {
66
73
  "crypto.randomUUID not available in this runtime. SDK 3.0 requires Node \u226520 or modern browser/Edge."
67
74
  );
68
75
  }
69
- var Te = T(() => {
76
+ var Re = S(() => {
70
77
  x();
71
78
  });
72
79
 
80
+ // src/correlation.ts
81
+ function ke(r) {
82
+ return typeof r == "string" && r.length > 0 && r.length <= 128 && vt.test(r);
83
+ }
84
+ function wt() {
85
+ let r = globalThis.crypto;
86
+ try {
87
+ if (r && typeof r.randomUUID == "function") return r.randomUUID();
88
+ } catch {
89
+ }
90
+ let e = new Uint8Array(16), t = false;
91
+ try {
92
+ r && typeof r.getRandomValues == "function" && (r.getRandomValues(e), t = !0);
93
+ } catch {
94
+ t = false;
95
+ }
96
+ if (!t)
97
+ for (let o = 0; o < e.length; o++) e[o] = Math.floor(Math.random() * 256);
98
+ e[6] = e[6] & 15 | 64, e[8] = e[8] & 63 | 128;
99
+ let n = Array.from(e, (o) => o.toString(16).padStart(2, "0")).join("");
100
+ return `${n.slice(0, 8)}-${n.slice(8, 12)}-${n.slice(12, 16)}-${n.slice(16, 20)}-${n.slice(20)}`;
101
+ }
102
+ function Ce(r, e) {
103
+ let t, n = {};
104
+ for (let [i, s] of Object.entries(r)) {
105
+ if (i.toLowerCase() === De) {
106
+ ke(s) && (t = s);
107
+ continue;
108
+ }
109
+ n[i] = s;
110
+ }
111
+ let o = t ?? (ke(e) ? e : void 0) ?? wt();
112
+ return n[De] = o, { headers: n, correlationId: o };
113
+ }
114
+ var De, vt, Ie = S(() => {
115
+ De = "x-correlation-id", vt = /^[A-Za-z0-9._:\-]+$/;
116
+ });
117
+
118
+ // src/server-only-key.ts
119
+ function Pe() {
120
+ try {
121
+ let r = globalThis.navigator;
122
+ if (r && r.product === "ReactNative") return "react-native";
123
+ } catch {
124
+ }
125
+ try {
126
+ let r = globalThis;
127
+ if (typeof r.window < "u" && typeof r.document < "u") return "browser";
128
+ } catch {
129
+ }
130
+ return null;
131
+ }
132
+ var Ee = S(() => {
133
+ });
134
+
73
135
  // src/http.ts
74
136
  var U = {};
75
- he(U, {
76
- checkCoreVersionCompat: () => Ee,
77
- httpRequest: () => St,
78
- statusToCode: () => Le
137
+ me(U, {
138
+ checkCoreVersionCompat: () => qe,
139
+ httpRequest: () => Mt,
140
+ statusToCode: () => Fe
79
141
  });
80
142
  function se(r) {
81
143
  return r.split("+")[0] ?? r;
82
144
  }
83
- function ht(r, e) {
145
+ function Tt(r, e) {
84
146
  let t = se(r).split(".").map(Number), n = se(e).split(".").map(Number), o = Math.max(t.length, n.length);
85
147
  for (let i = 0; i < o; i++) {
86
148
  let s = t[i] ?? 0, a = n[i] ?? 0;
@@ -88,58 +150,62 @@ function ht(r, e) {
88
150
  }
89
151
  return 0;
90
152
  }
91
- function Ie() {
153
+ function Ne() {
92
154
  try {
93
- return "3.7.0";
155
+ return "3.8.0";
94
156
  } catch {
95
157
  return;
96
158
  }
97
159
  }
98
- function mt() {
99
- let r = Ie();
160
+ function Rt() {
161
+ let r = Ne();
100
162
  return r ? parseInt(r.split(".")[0] ?? "3", 10) : 3;
101
163
  }
102
- function Ee(r) {
164
+ function qe(r) {
103
165
  if (!r) return;
104
- let e = mt(), t = ft[e];
166
+ let e = Rt(), t = St[e];
105
167
  if (!t) return;
106
168
  let n = se(r);
107
- if (ht(n, t) < 0) {
169
+ if (Tt(n, t) < 0) {
108
170
  let o = `${e}:${n}`;
109
- Re.has(o) || (Re.add(o), console.warn(
171
+ Le.has(o) || (Le.add(o), console.warn(
110
172
  `[Neetru SDK] Aten\xE7\xE3o: Core vers\xE3o "${r}" \xE9 anterior ao m\xEDnimo recomendado "${t}" para SDK major ${e}. Alguns recursos podem n\xE3o funcionar corretamente. Atualize o Core para a vers\xE3o mais recente.`
111
173
  ));
112
174
  }
113
175
  }
114
- function De(r) {
176
+ function Dt() {
177
+ let r = "This operation requires an apiKey. Pass it to createNeetruClient({ apiKey }) or set NEETRU_API_KEY env var.";
178
+ return Pe() ? "Esta opera\xE7\xE3o exige a credencial nrt_ do produto, que \xE9 S\xD3 DE SERVIDOR. No navegador/app, chame a API do seu produto (ex.: https://<produto>.neetru.com/api/v1) com o token do usu\xE1rio \u2014 o backend do produto faz esta chamada com o SDK e a chave. (" + r + ")" : r;
179
+ }
180
+ function Me(r) {
115
181
  let e = 200 * Math.pow(4, r), t = e * 0.2 * (Math.random() * 2 - 1);
116
182
  return Math.max(50, Math.round(e + t));
117
183
  }
118
- function vt(r) {
184
+ function Et(r) {
119
185
  if (!r) return null;
120
186
  let e = Number(r);
121
- if (Number.isFinite(e) && e >= 0) return Math.min(Math.round(e * 1e3), ke);
187
+ if (Number.isFinite(e) && e >= 0) return Math.min(Math.round(e * 1e3), Oe);
122
188
  let t = Date.parse(r);
123
189
  if (Number.isFinite(t)) {
124
190
  let n = t - Date.now();
125
- if (n > 0) return Math.min(n, ke);
191
+ if (n > 0) return Math.min(n, Oe);
126
192
  }
127
193
  return null;
128
194
  }
129
- function Ce(r) {
195
+ function xe(r) {
130
196
  return new Promise((e) => setTimeout(e, r));
131
197
  }
132
- function Le(r) {
198
+ function Fe(r) {
133
199
  return r === 401 ? "unauthorized" : r === 403 ? "forbidden" : r === 404 ? "not_found" : r === 409 ? "conflict" : r === 410 ? "gone" : r === 422 || r === 400 ? "validation_failed" : r === 429 ? "rate_limited" : r >= 500 ? "server_error" : "unknown";
134
200
  }
135
- function wt(r, e, t) {
201
+ function Lt(r, e, t) {
136
202
  let n = r.replace(/\/+$/, ""), o = e.startsWith("/") ? e : `/${e}`, i = new URL(`${n}${o}`);
137
203
  if (t)
138
204
  for (let [s, a] of Object.entries(t))
139
205
  a !== void 0 && i.searchParams.set(s, String(a));
140
206
  return i.toString();
141
207
  }
142
- async function Pe(r) {
208
+ async function Ae(r) {
143
209
  let e = await r.text();
144
210
  if (e)
145
211
  try {
@@ -148,95 +214,101 @@ async function Pe(r) {
148
214
  return;
149
215
  }
150
216
  }
151
- async function St(r, e) {
152
- let t = e.method ?? "GET", n = wt(r.baseUrl, e.path, e.query), o = gt.has(t) ? _t : yt, i = e.retries ?? o, s = {
153
- accept: "application/json",
154
- ...e.headers
155
- }, a = Ie();
156
- if (a && (s["x-neetru-sdk-version"] = a), e.requireAuth) {
217
+ async function Mt(r, e) {
218
+ let t = e.method ?? "GET", n = Lt(r.baseUrl, e.path, e.query), o = It.has(t) ? kt : Ct, i = e.retries ?? o, { headers: s, correlationId: a } = Ce(
219
+ { accept: "application/json", ...e.headers },
220
+ e.correlationId
221
+ ), c = Ne();
222
+ if (c && (s["x-neetru-sdk-version"] = c), e.requireAuth) {
157
223
  if (!r.apiKey)
158
- throw new g(
159
- "missing_api_key",
160
- "This operation requires an apiKey. Pass it to createNeetruClient({ apiKey }) or set NEETRU_API_KEY env var."
161
- );
224
+ throw new g("missing_api_key", Dt());
162
225
  s.authorization = `Bearer ${r.apiKey}`;
163
226
  }
164
227
  if (e.idempotencyKey) {
165
- let u = typeof e.idempotencyKey == "string" ? e.idempotencyKey : Se();
166
- s["idempotency-key"] = u;
167
- }
168
- let c = e.body !== void 0 && t !== "GET" && t !== "DELETE" ? JSON.stringify(e.body) : void 0;
169
- c !== void 0 && (s["content-type"] = "application/json");
170
- let l = null, d = e.deadlineMs != null ? Date.now() + e.deadlineMs : null;
171
- for (let u = 0; u <= i; u++) {
172
- if (d != null && Date.now() >= d)
173
- throw l ?? new g("network_error", "Deadline excedido antes de completar a request");
174
- let f = { method: t, headers: s };
175
- c !== void 0 && (f.body = c);
176
- let _ = d != null ? Math.max(1, Math.min(3e4, d - Date.now())) : 3e4;
177
- f.signal = AbortSignal.timeout(_);
178
- let h;
228
+ let f = typeof e.idempotencyKey == "string" ? e.idempotencyKey : Te();
229
+ s["idempotency-key"] = f;
230
+ }
231
+ let l = e.body !== void 0 && t !== "GET" && t !== "DELETE" ? JSON.stringify(e.body) : void 0;
232
+ l !== void 0 && (s["content-type"] = "application/json");
233
+ let d = null, u = e.deadlineMs != null ? Date.now() + e.deadlineMs : null;
234
+ for (let f = 0; f <= i; f++) {
235
+ if (u != null && Date.now() >= u)
236
+ throw d ?? new g(
237
+ "network_error",
238
+ "Deadline excedido antes de completar a request",
239
+ void 0,
240
+ void 0,
241
+ void 0,
242
+ a
243
+ );
244
+ let h = { method: t, headers: s };
245
+ l !== void 0 && (h.body = l);
246
+ let v = u != null ? Math.max(1, Math.min(3e4, u - Date.now())) : 3e4;
247
+ h.signal = AbortSignal.timeout(v);
248
+ let _;
179
249
  try {
180
- h = await r.fetch(n, f);
250
+ _ = await r.fetch(n, h);
181
251
  } catch (m) {
182
252
  let O = m instanceof DOMException && m.name === "TimeoutError" ? "Network error: timeout after 30s" : `Network error: ${m instanceof Error ? m.message : "fetch failed"}`;
183
- if (l = new g("network_error", O), u < i) {
184
- let fe = De(u);
185
- if (d == null || Date.now() + fe < d) {
186
- await Ce(fe);
253
+ if (d = new g("network_error", O, void 0, void 0, void 0, a), f < i) {
254
+ let he = Me(f);
255
+ if (u == null || Date.now() + he < u) {
256
+ await xe(he);
187
257
  continue;
188
258
  }
189
259
  }
190
- throw l;
260
+ throw d;
191
261
  }
192
- let X = h.headers.get("x-request-id") ?? h.headers.get("x-correlation-id") ?? void 0;
193
- if (h.ok) {
194
- let m = h.headers.get("x-neetru-version");
195
- return m && Ee(m), await Pe(h);
262
+ let B = _.headers.get("x-request-id") ?? _.headers.get("x-correlation-id") ?? void 0;
263
+ if (_.ok) {
264
+ let m = _.headers.get("x-neetru-version");
265
+ return m && qe(m), await Ae(_);
196
266
  }
197
- let b = await Pe(h), v = Le(h.status), y = `HTTP ${h.status}`, L;
198
- if (b && typeof b == "object") {
199
- let m = b.error;
200
- typeof m == "string" ? y = m : m && typeof m == "object" ? (typeof m.code == "string" && (v = m.code), typeof m.message == "string" && (y = m.message), typeof m.reason == "string" && (L = m.reason)) : (typeof b.code == "string" && (v = b.code), typeof b.message == "string" && (y = b.message)), typeof b.reason == "string" && (L = b.reason);
267
+ let y = await Ae(_), b = Fe(_.status), w = `HTTP ${_.status}`, C;
268
+ if (y && typeof y == "object") {
269
+ let m = y.error;
270
+ typeof m == "string" ? w = m : m && typeof m == "object" ? (typeof m.code == "string" && (b = m.code), typeof m.message == "string" && (w = m.message), typeof m.reason == "string" && (C = m.reason)) : (typeof y.code == "string" && (b = y.code), typeof y.message == "string" && (w = y.message)), typeof y.reason == "string" && (C = y.reason);
201
271
  }
202
- if (h.status === 410) {
203
- let m = h.headers.get("x-neetru-replacement");
204
- y === `HTTP ${h.status}` && (y = `Endpoint ${e.path} foi removido do Core (HTTP 410 Gone) \u2014 atualize o @neetru/sdk e migre para a API substituta.`), m && !y.includes(m) && (y += ` Substituto: ${m}.`);
272
+ if (_.status === 410) {
273
+ let m = _.headers.get("x-neetru-replacement");
274
+ w === `HTTP ${_.status}` && (w = `Endpoint ${e.path} foi removido do Core (HTTP 410 Gone) \u2014 atualize o @neetru/sdk e migre para a API substituta.`), m && !w.includes(m) && (w += ` Substituto: ${m}.`);
205
275
  }
206
- let M = new g(v, y, h.status, X, L);
207
- if (l = M, bt.has(v) && u < i) {
208
- let O = vt(h.headers.get("retry-after")) ?? De(u);
209
- if (d == null || Date.now() + O < d) {
210
- await Ce(O);
276
+ let fe = new g(b, w, _.status, B, C, a);
277
+ if (d = fe, Pt.has(b) && f < i) {
278
+ let O = Et(_.headers.get("retry-after")) ?? Me(f);
279
+ if (u == null || Date.now() + O < u) {
280
+ await xe(O);
211
281
  continue;
212
282
  }
213
283
  }
214
- throw M;
284
+ throw fe;
215
285
  }
216
- throw l ?? new g("unknown", "unexpected httpRequest exit");
286
+ throw d ?? new g("unknown", "unexpected httpRequest exit", void 0, void 0, void 0, a);
217
287
  }
218
- var ft, Re, _t, yt, gt, bt, ke, W = T(() => {
288
+ var St, Le, kt, Ct, It, Pt, Oe, W = S(() => {
219
289
  x();
220
- Te();
221
- ft = {
290
+ Re();
291
+ Ie();
292
+ Ee();
293
+ St = {
222
294
  // SDK major 3.x requer Core ≥ 2026.05.1 (suporte a X-Neetru-Version header,
223
295
  // runTransaction write-after-read, verifyWebhookRequest, webhooks 3.0+)
224
296
  3: "2026.05.1"
225
297
  };
226
- Re = /* @__PURE__ */ new Set();
227
- _t = 2, yt = 0, gt = /* @__PURE__ */ new Set(["GET", "HEAD"]), bt = /* @__PURE__ */ new Set([
298
+ Le = /* @__PURE__ */ new Set();
299
+ kt = 2, Ct = 0, It = /* @__PURE__ */ new Set(["GET", "HEAD"]), Pt = /* @__PURE__ */ new Set([
228
300
  "rate_limited",
229
301
  "server_error",
230
302
  "network_error"
231
303
  ]);
232
- ke = 6e4;
304
+ Oe = 6e4;
233
305
  });
234
306
 
235
307
  // src/db/sql/resilient-pool.ts
236
308
  function J(r) {
237
309
  return typeof r == "object" && r !== null && r[ae] === true;
238
310
  }
239
- function Tt(r) {
311
+ function Ot(r) {
240
312
  let e = r && typeof r == "object" && "code" in r ? r.code : void 0;
241
313
  if (e === "ECONNREFUSED" || e === "ETIMEDOUT" || e === "ENOTFOUND" || e === "EHOSTUNREACH" || e === "EAI_AGAIN")
242
314
  return true;
@@ -265,7 +337,7 @@ function ce(r) {
265
337
  return await o(e.current, c);
266
338
  } catch (l) {
267
339
  let d = t;
268
- if (d === null || !Tt(l))
340
+ if (d === null || !Ot(l))
269
341
  throw l;
270
342
  try {
271
343
  await d();
@@ -289,15 +361,15 @@ function ce(r) {
289
361
  }
290
362
  });
291
363
  }
292
- var ae, le = T(() => {
364
+ var ae, le = S(() => {
293
365
  ae = /* @__PURE__ */ Symbol.for("neetru.sdk.resilientPool");
294
366
  });
295
367
 
296
368
  // src/db/sql/lease.ts
297
- function Dt(r, e) {
369
+ function At(r, e) {
298
370
  return r ? r.leaseId !== e.leaseId || r.credentialVersion !== e.credentialVersion || r.host !== e.host || r.port !== e.port || r.dbName !== e.dbName || r.user !== e.user || r.password !== e.password || r.sslca !== e.sslca || r.clientCert !== e.clientCert || r.clientKey !== e.clientKey : true;
299
371
  }
300
- function kt(r) {
372
+ function Nt(r) {
301
373
  if (r instanceof exports.NeetruDbError) return r;
302
374
  let e = r instanceof Error ? r.message : String(r), t = r instanceof Error ? r.code : void 0;
303
375
  return typeof t == "string" && (t === "ECONNREFUSED" || t === "ENOTFOUND" || t === "ETIMEDOUT") ? new exports.NeetruDbError(
@@ -305,10 +377,10 @@ function kt(r) {
305
377
  `Pool connection failed (${t}): ${e}`
306
378
  ) : e.includes("statement timeout") || e.includes("lock timeout") ? new exports.NeetruDbError("db_timeout", `Query timeout: ${e}`) : e.includes("40001") || e.includes("40P01") || e.includes("deadlock") ? new exports.NeetruDbError("db_conflict", `Transaction conflict: ${e}`) : e.includes("42501") || e.toLowerCase().includes("permission denied") ? new exports.NeetruDbError("db_permission_denied", `Permission denied: ${e}`) : new exports.NeetruDbError("db_unavailable", `Database error: ${e}`);
307
379
  }
308
- var Rt, E, $, Me = T(() => {
309
- k();
380
+ var xt, M, $, Ue = S(() => {
381
+ I();
310
382
  le();
311
- Rt = 0.8, E = 3e4, $ = class {
383
+ xt = 0.8, M = 3e4, $ = class {
312
384
  /**
313
385
  * Lease atual. `null` no modo LAZY antes da 1ª query (o 1º lease é adiado —
314
386
  * ver `_ensureInitialLease`). Após a 1ª aquisição, sempre não-nulo.
@@ -348,7 +420,7 @@ var Rt, E, $, Me = T(() => {
348
420
  isolationLevel: t.isolationLevel
349
421
  }) : await this._orm.transaction(e);
350
422
  } catch (n) {
351
- throw kt(n);
423
+ throw Nt(n);
352
424
  }
353
425
  }
354
426
  async close() {
@@ -366,13 +438,13 @@ var Rt, E, $, Me = T(() => {
366
438
  * usa `MIN_RENEWAL_DELAY_MS` como fallback seguro.
367
439
  */
368
440
  _calcRenewalDelayMs() {
369
- if (!this._lease) return E;
441
+ if (!this._lease) return M;
370
442
  let e = Date.parse(this._lease.expiresAt);
371
- if (!Number.isFinite(e)) return E;
443
+ if (!Number.isFinite(e)) return M;
372
444
  let t = this._deps.now(), n = e - t;
373
- if (n <= 0) return E;
374
- let o = n * (1 - Rt);
375
- return Math.max(E, Math.round(o));
445
+ if (n <= 0) return M;
446
+ let o = n * (1 - xt);
447
+ return Math.max(M, Math.round(o));
376
448
  }
377
449
  _scheduleRenewal() {
378
450
  if (this._closed) return;
@@ -399,8 +471,8 @@ var Rt, E, $, Me = T(() => {
399
471
  } catch (t) {
400
472
  this._renewalTimer = setTimeout(() => {
401
473
  this._doRenew();
402
- }, E), console.warn(
403
- `[SqlLeaseManager] renova\xE7\xE3o E emiss\xE3o de lease novo falharam; re-tentando em ${E}ms (cert TLS ef\xEAmero do servidor expira ~15min ap\xF3s o \xFAltimo swap):`,
474
+ }, M), console.warn(
475
+ `[SqlLeaseManager] renova\xE7\xE3o E emiss\xE3o de lease novo falharam; re-tentando em ${M}ms (cert TLS ef\xEAmero do servidor expira ~15min ap\xF3s o \xFAltimo swap):`,
404
476
  t instanceof Error ? t.message : t
405
477
  );
406
478
  return;
@@ -507,7 +579,7 @@ var Rt, E, $, Me = T(() => {
507
579
  * Exposto como método protegido para testes.
508
580
  */
509
581
  async _swapPool(e) {
510
- if (!Dt(this._lease, e)) {
582
+ if (!At(this._lease, e)) {
511
583
  this._lease = e;
512
584
  return;
513
585
  }
@@ -534,29 +606,29 @@ var Rt, E, $, Me = T(() => {
534
606
  });
535
607
 
536
608
  // src/db/sql/sql-client.ts
537
- var We = {};
538
- he(We, {
539
- DEFAULT_POOL_CONNECT_TIMEOUT_MS: () => Fe,
540
- DEFAULT_POOL_IDLE_MS: () => qe,
541
- DEFAULT_POOL_MAX: () => Ne,
542
- LEASE_ENDPOINT: () => Oe,
543
- LEASE_RENEW_ENDPOINT: () => xe,
544
- createDrizzleHandle: () => Et,
545
- createHttpLeaseFetcher: () => Ae,
546
- createPgPool: () => It,
547
- createSqlClientFromConfig: () => Mt,
548
- createSqlClientWithDeps: () => Ue,
609
+ var Ke = {};
610
+ me(Ke, {
611
+ DEFAULT_POOL_CONNECT_TIMEOUT_MS: () => Qe,
612
+ DEFAULT_POOL_IDLE_MS: () => je,
613
+ DEFAULT_POOL_MAX: () => Ve,
614
+ LEASE_ENDPOINT: () => We,
615
+ LEASE_RENEW_ENDPOINT: () => $e,
616
+ createDrizzleHandle: () => Wt,
617
+ createHttpLeaseFetcher: () => Be,
618
+ createPgPool: () => Ut,
619
+ createSqlClientFromConfig: () => Bt,
620
+ createSqlClientWithDeps: () => ze,
549
621
  resolvePoolTuning: () => ue
550
622
  });
551
- function Ct(r) {
623
+ function qt(r) {
552
624
  return r === "workspace" ? "staging" : r === "prod" ? "production" : "dev-local";
553
625
  }
554
- function Ae(r) {
626
+ function Be(r) {
555
627
  return async (e) => {
556
- let { httpRequest: t } = await Promise.resolve().then(() => (W(), U)), n = !!e?.leaseId, o = n ? xe : Oe, i;
628
+ let { httpRequest: t } = await Promise.resolve().then(() => (W(), U)), n = !!e?.leaseId, o = n ? $e : We, i;
557
629
  n ? i = { leaseId: e.leaseId } : (i = {
558
630
  productId: r.productId ?? "",
559
- environment: Ct(r.env ?? "prod")
631
+ environment: qt(r.env ?? "prod")
560
632
  }, e?.database !== void 0 && (i.database = e.database));
561
633
  let s;
562
634
  try {
@@ -582,10 +654,10 @@ function Ae(r) {
582
654
  `Falha ao ${c} lease SQL: ${l}`
583
655
  );
584
656
  }
585
- return Pt(s);
657
+ return Ft(s);
586
658
  };
587
659
  }
588
- function Pt(r) {
660
+ function Ft(r) {
589
661
  if (!r || typeof r != "object")
590
662
  throw new exports.NeetruDbError("db_unavailable", "Resposta de lease inv\xE1lida (n\xE3o \xE9 objeto).");
591
663
  let t = r.lease;
@@ -627,12 +699,12 @@ function ue() {
627
699
  return {
628
700
  // Teto 100: bem abaixo do `max_client_conn = 500` do PgBouncer, com folga
629
701
  // para múltiplas instâncias do app dividirem o mesmo front-door.
630
- max: de("NEETRU_DB_POOL_MAX", Ne, 1, 100),
702
+ max: de("NEETRU_DB_POOL_MAX", Ve, 1, 100),
631
703
  // Teto 15min = janela do cert; piso 1s.
632
- idleTimeoutMillis: de("NEETRU_DB_POOL_IDLE_MS", qe, 1e3, 9e5),
704
+ idleTimeoutMillis: de("NEETRU_DB_POOL_IDLE_MS", je, 1e3, 9e5),
633
705
  connectionTimeoutMillis: de(
634
706
  "NEETRU_DB_POOL_CONNECT_TIMEOUT_MS",
635
- Fe,
707
+ Qe,
636
708
  1e3,
637
709
  12e4
638
710
  ),
@@ -640,7 +712,7 @@ function ue() {
640
712
  keepAliveInitialDelayMillis: 1e4
641
713
  };
642
714
  }
643
- async function It(r) {
715
+ async function Ut(r) {
644
716
  let { Pool: e } = await import(
645
717
  /* webpackIgnore: true */
646
718
  'pg'
@@ -660,14 +732,14 @@ async function It(r) {
660
732
  ...ue()
661
733
  });
662
734
  }
663
- async function Et(r, e) {
735
+ async function Wt(r, e) {
664
736
  let { drizzle: t } = await import(
665
737
  /* webpackIgnore: true */
666
738
  'drizzle-orm/node-postgres'
667
739
  );
668
740
  return t(r, { schema: e });
669
741
  }
670
- function Lt(r, e) {
742
+ function $t(r, e) {
671
743
  let t = null, n = null, o = () => t ? Promise.resolve(t) : (n || (n = e().then((s) => (t = s, n = null, s)).catch((s) => {
672
744
  throw n = null, s;
673
745
  })), n), i = {
@@ -683,19 +755,19 @@ function Lt(r, e) {
683
755
  };
684
756
  return r && Object.setPrototypeOf(i, r), i;
685
757
  }
686
- async function Ue(r, e) {
758
+ async function ze(r, e) {
687
759
  let t = e?.database !== void 0 ? { ...r, database: e.database } : r;
688
760
  if (t.lazy) {
689
- let c = null, l = Lt(t.poolPrototype ?? null, () => {
761
+ let c = null, l = $t(t.poolPrototype ?? null, () => {
690
762
  if (!c)
691
763
  throw new exports.NeetruDbError("db_unavailable", "SQL client n\xE3o inicializado (manager ausente).");
692
764
  return c._ensureInitialLease();
693
765
  }), d = ce(l), u;
694
766
  try {
695
767
  u = t.createDrizzle(d, t.schema);
696
- } catch (_) {
697
- let h = _ instanceof Error ? _.message : String(_);
698
- throw new exports.NeetruDbError("db_unavailable", `Falha ao criar handle Drizzle: ${h}`);
768
+ } catch (h) {
769
+ let v = h instanceof Error ? h.message : String(h);
770
+ throw new exports.NeetruDbError("db_unavailable", `Falha ao criar handle Drizzle: ${v}`);
699
771
  }
700
772
  let f = new $(null, d, u, t);
701
773
  return c = f, d.__neetruSetReLease(() => f._reactiveReLease()), f;
@@ -727,8 +799,8 @@ async function Ue(r, e) {
727
799
  let a = new $(n, i, s, t);
728
800
  return i.__neetruSetReLease(() => a._reactiveReLease()), a;
729
801
  }
730
- async function Mt(r, e, t) {
731
- let n = Ae(r), o, i;
802
+ async function Bt(r, e, t) {
803
+ let n = Be(r), o, i;
732
804
  try {
733
805
  o = await import(
734
806
  /* webpackIgnore: true */
@@ -744,7 +816,7 @@ async function Mt(r, e, t) {
744
816
  );
745
817
  }
746
818
  let s = o.Pool ?? o.default?.Pool;
747
- return Ue(
819
+ return ze(
748
820
  {
749
821
  fetchLease: n,
750
822
  createPool: (l) => {
@@ -779,24 +851,24 @@ async function Mt(r, e, t) {
779
851
  t
780
852
  );
781
853
  }
782
- var Oe, xe, Ne, qe, Fe, $e = T(() => {
783
- k();
854
+ var We, $e, Ve, je, Qe, He = S(() => {
855
+ I();
784
856
  x();
785
- Me();
857
+ Ue();
786
858
  le();
787
- Oe = "/api/sdk/v1/db/lease", xe = "/api/sdk/v1/db/lease/renew";
788
- Ne = 10, qe = 6e4, Fe = 1e4;
859
+ We = "/api/sdk/v1/db/lease", $e = "/api/sdk/v1/db/lease/renew";
860
+ Ve = 10, je = 6e4, Qe = 1e4;
789
861
  });
790
862
 
791
863
  // src/db/client-db.ts
792
- k();
864
+ I();
793
865
 
794
866
  // src/db/offline/query-engine.ts
795
- function me(r) {
867
+ function _e(r) {
796
868
  return r == null ? 0 : typeof r == "number" ? 1 : typeof r == "string" ? 2 : typeof r == "boolean" ? 3 : 4;
797
869
  }
798
870
  function A(r, e) {
799
- let t = me(r), n = me(e);
871
+ let t = _e(r), n = _e(e);
800
872
  if (t !== n) return t - n;
801
873
  if (r == null) return 0;
802
874
  if (typeof r == "number" && typeof e == "number") return r - e;
@@ -814,7 +886,7 @@ function Z(r, e) {
814
886
  }
815
887
  return n;
816
888
  }
817
- function ze(r, e) {
889
+ function Ze(r, e) {
818
890
  let t = Z(r, e.field);
819
891
  if (t === void 0) return false;
820
892
  let { op: n, value: o } = e;
@@ -845,10 +917,10 @@ function ze(r, e) {
845
917
  );
846
918
  }
847
919
  }
848
- function Ke(r, e) {
849
- return e.every((t) => ze(r, t));
920
+ function et(r, e) {
921
+ return e.every((t) => Ze(r, t));
850
922
  }
851
- function He(r) {
923
+ function tt(r) {
852
924
  return (e, t) => {
853
925
  if (r) {
854
926
  let n = Z(e.data, r.field), o = Z(t.data, r.field), i = A(n, o);
@@ -858,11 +930,11 @@ function He(r) {
858
930
  return e.id < t.id ? -1 : e.id > t.id ? 1 : 0;
859
931
  };
860
932
  }
861
- function Ge(r, e) {
933
+ function nt(r, e) {
862
934
  let t = r.findIndex((n) => n.id === e.docId);
863
935
  return t === -1 ? r : e.type === "startAfter" ? r.slice(t + 1) : r.slice(0, t);
864
936
  }
865
- var C = class r {
937
+ var P = class r {
866
938
  /**
867
939
  * Avalia um `QueryDescriptor` contra um array de `OfflineDoc`.
868
940
  *
@@ -876,9 +948,9 @@ var C = class r {
876
948
  evaluate(e, t) {
877
949
  let n = e.filter((d) => !d.meta.deleted), o = t.where ?? [];
878
950
  o.length > 0 && (n = n.filter(
879
- (d) => Ke(d.data, o)
951
+ (d) => et(d.data, o)
880
952
  ));
881
- let i = He(t.orderBy), s = [...n].sort(i), a = t.cursor ? Ge(s, t.cursor) : s, c = Math.min(t.limit ?? 20, 500);
953
+ let i = tt(t.orderBy), s = [...n].sort(i), a = t.cursor ? nt(s, t.cursor) : s, c = Math.min(t.limit ?? 20, 500);
882
954
  return {
883
955
  docs: a.slice(0, c).map((d) => ({ id: d.id, data: d.data })),
884
956
  // `incomplete` é sempre true aqui — o QueryEngine não sabe se o cache
@@ -898,7 +970,7 @@ var C = class r {
898
970
  };
899
971
 
900
972
  // src/db/offline/local-store.ts
901
- var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta", P = "conflict_log", j = class {
973
+ var ot = 1, T = "documents", R = "mutations", N = "query_cache", V = "sync_meta", E = "conflict_log", j = class {
902
974
  db = null;
903
975
  dbName;
904
976
  constructor(e) {
@@ -910,22 +982,22 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
910
982
  * Idempotente — chamadas subsequentes são no-ops se o banco já está aberto.
911
983
  */
912
984
  async open() {
913
- this.db === null && (this.db = await idb.openDB(this.dbName, Ye, {
985
+ this.db === null && (this.db = await idb.openDB(this.dbName, ot, {
914
986
  upgrade(e) {
915
- if (!e.objectStoreNames.contains(w)) {
916
- let t = e.createObjectStore(w, {
987
+ if (!e.objectStoreNames.contains(T)) {
988
+ let t = e.createObjectStore(T, {
917
989
  keyPath: ["collection", "id"]
918
990
  });
919
991
  t.createIndex("by_collection", "collection"), t.createIndex("by_collection_state", ["collection", "meta.state"]), t.createIndex("by_updatedAtServer", "meta.updatedAtServer");
920
992
  }
921
- if (!e.objectStoreNames.contains(S)) {
922
- let t = e.createObjectStore(S, {
993
+ if (!e.objectStoreNames.contains(R)) {
994
+ let t = e.createObjectStore(R, {
923
995
  keyPath: "mutationId"
924
996
  });
925
997
  t.createIndex("by_seq", "seq"), t.createIndex("by_status", "status"), t.createIndex("by_doc", ["collection", "docId"]), t.createIndex("by_batch", "batchId");
926
998
  }
927
- if (e.objectStoreNames.contains(N) || e.createObjectStore(N, { keyPath: "queryHash" }), e.objectStoreNames.contains(B) || e.createObjectStore(B, { keyPath: "key" }), !e.objectStoreNames.contains(P)) {
928
- let t = e.createObjectStore(P, {
999
+ if (e.objectStoreNames.contains(N) || e.createObjectStore(N, { keyPath: "queryHash" }), e.objectStoreNames.contains(V) || e.createObjectStore(V, { keyPath: "key" }), !e.objectStoreNames.contains(E)) {
1000
+ let t = e.createObjectStore(E, {
929
1001
  keyPath: "id",
930
1002
  autoIncrement: true
931
1003
  });
@@ -967,14 +1039,14 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
967
1039
  * Retorna tombstones (deleted: true) — o chamador decide se deve mostrá-los.
968
1040
  */
969
1041
  async getDoc(e, t) {
970
- return await this.assertOpen().get(w, [e, t]) ?? null;
1042
+ return await this.assertOpen().get(T, [e, t]) ?? null;
971
1043
  }
972
1044
  /**
973
1045
  * Insere ou atualiza um documento na store `documents`.
974
1046
  * O documento é identificado pelo keyPath composto `[collection, id]`.
975
1047
  */
976
1048
  async putDoc(e) {
977
- await this.assertOpen().put(w, e);
1049
+ await this.assertOpen().put(T, e);
978
1050
  }
979
1051
  /**
980
1052
  * Marca um documento como tombstone (`deleted: true`).
@@ -982,8 +1054,8 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
982
1054
  * No-op se o documento não existir.
983
1055
  */
984
1056
  async deleteDoc(e, t) {
985
- let n = this.assertOpen(), o = await n.get(w, [e, t]);
986
- o && await n.put(w, {
1057
+ let n = this.assertOpen(), o = await n.get(T, [e, t]);
1058
+ o && await n.put(T, {
987
1059
  ...o,
988
1060
  meta: {
989
1061
  ...o.meta,
@@ -999,8 +1071,8 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
999
1071
  * e delega a filtragem/ordenação/paginação ao QueryEngine (que opera em memória).
1000
1072
  */
1001
1073
  async listDocs(e, t) {
1002
- let o = await this.assertOpen().getAllFromIndex(w, "by_collection", e);
1003
- return C.evaluate(o, t);
1074
+ let o = await this.assertOpen().getAllFromIndex(T, "by_collection", e);
1075
+ return P.evaluate(o, t);
1004
1076
  }
1005
1077
  // ─── Sync meta (key-value) ──────────────────────────────────────────────────
1006
1078
  /**
@@ -1011,14 +1083,14 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
1011
1083
  * 'lastFullResyncAt', 'leaderTabId'.
1012
1084
  */
1013
1085
  async getMeta(e) {
1014
- let n = await this.assertOpen().get(B, e);
1086
+ let n = await this.assertOpen().get(V, e);
1015
1087
  return n ? n.value : null;
1016
1088
  }
1017
1089
  /**
1018
1090
  * Armazena ou atualiza um valor na store `sync_meta`.
1019
1091
  */
1020
1092
  async setMeta(e, t) {
1021
- await this.assertOpen().put(B, { key: e, value: t });
1093
+ await this.assertOpen().put(V, { key: e, value: t });
1022
1094
  }
1023
1095
  // ─── Conflict log ───────────────────────────────────────────────────────────
1024
1096
  /**
@@ -1026,7 +1098,7 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
1026
1098
  * O `id` é autoIncrement — não deve ser fornecido pelo chamador.
1027
1099
  */
1028
1100
  async appendConflict(e) {
1029
- let n = await this.assertOpen().add(P, e);
1101
+ let n = await this.assertOpen().add(E, e);
1030
1102
  return { ...e, id: n };
1031
1103
  }
1032
1104
  /**
@@ -1034,15 +1106,15 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
1034
1106
  * Filtra por `delivered` se a opção for fornecida.
1035
1107
  */
1036
1108
  async listConflicts(e) {
1037
- let n = await this.assertOpen().getAll(P);
1109
+ let n = await this.assertOpen().getAll(E);
1038
1110
  return e?.delivered !== void 0 ? n.filter((o) => o.delivered === e.delivered) : n;
1039
1111
  }
1040
1112
  /**
1041
1113
  * Marca um registro do `conflict_log` como entregue ao produto.
1042
1114
  */
1043
1115
  async markConflictDelivered(e) {
1044
- let t = this.assertOpen(), n = await t.get(P, e);
1045
- n && await t.put(P, { ...n, delivered: true });
1116
+ let t = this.assertOpen(), n = await t.get(E, e);
1117
+ n && await t.put(E, { ...n, delivered: true });
1046
1118
  }
1047
1119
  // ─── Mutations (acessores usados pelo MutationQueue) ────────────────────────
1048
1120
  /**
@@ -1050,13 +1122,13 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
1050
1122
  * Key: `mutationId`.
1051
1123
  */
1052
1124
  async putMutation(e) {
1053
- await this.assertOpen().put(S, e);
1125
+ await this.assertOpen().put(R, e);
1054
1126
  }
1055
1127
  /**
1056
1128
  * Retorna uma mutação pelo `mutationId`, ou `null` se não existir.
1057
1129
  */
1058
1130
  async getMutation(e) {
1059
- return await this.assertOpen().get(S, e) ?? null;
1131
+ return await this.assertOpen().get(R, e) ?? null;
1060
1132
  }
1061
1133
  /**
1062
1134
  * Lista mutações com filtros opcionais.
@@ -1064,14 +1136,14 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
1064
1136
  */
1065
1137
  async listMutations(e) {
1066
1138
  let t = this.assertOpen(), n;
1067
- return e?.status !== void 0 ? n = await t.getAllFromIndex(S, "by_status", e.status) : e?.collection !== void 0 && e.docId !== void 0 ? n = await t.getAllFromIndex(S, "by_doc", [e.collection, e.docId]) : n = await t.getAllFromIndex(S, "by_seq"), n.sort((o, i) => o.seq - i.seq);
1139
+ return e?.status !== void 0 ? n = await t.getAllFromIndex(R, "by_status", e.status) : e?.collection !== void 0 && e.docId !== void 0 ? n = await t.getAllFromIndex(R, "by_doc", [e.collection, e.docId]) : n = await t.getAllFromIndex(R, "by_seq"), n.sort((o, i) => o.seq - i.seq);
1068
1140
  }
1069
1141
  /**
1070
1142
  * Remove uma mutação pelo `mutationId`.
1071
1143
  * No-op se não existir.
1072
1144
  */
1073
1145
  async deleteMutation(e) {
1074
- await this.assertOpen().delete(S, e);
1146
+ await this.assertOpen().delete(R, e);
1075
1147
  }
1076
1148
  // ─── Collection discovery ────────────────────────────────────────────────────
1077
1149
  /**
@@ -1084,7 +1156,7 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
1084
1156
  * coletar os valores únicos de forma eficiente (sem carregar os docs completos).
1085
1157
  */
1086
1158
  async listCollections() {
1087
- let t = await this.assertOpen().getAllFromIndex(w, "by_collection"), n = /* @__PURE__ */ new Set();
1159
+ let t = await this.assertOpen().getAllFromIndex(T, "by_collection"), n = /* @__PURE__ */ new Set();
1088
1160
  for (let o of t)
1089
1161
  n.add(o.collection);
1090
1162
  return Array.from(n);
@@ -1111,7 +1183,7 @@ var Ye = 1, w = "documents", S = "mutations", N = "query_cache", B = "sync_meta"
1111
1183
  };
1112
1184
 
1113
1185
  // src/db/offline/memory-store.ts
1114
- var V = class {
1186
+ var Q = class {
1115
1187
  // store `documents` — key: `${collection}\0${id}`
1116
1188
  _docs = /* @__PURE__ */ new Map();
1117
1189
  // store `mutations` — key: mutationId
@@ -1159,7 +1231,7 @@ var V = class {
1159
1231
  let n = Array.from(this._docs.values()).filter(
1160
1232
  (o) => o.collection === e
1161
1233
  );
1162
- return C.evaluate(n, t);
1234
+ return P.evaluate(n, t);
1163
1235
  }
1164
1236
  // ─── Sync meta ──────────────────────────────────────────────────────────────
1165
1237
  async getMeta(e) {
@@ -1222,7 +1294,7 @@ function ee() {
1222
1294
  return (r === "x" ? e : e & 3 | 8).toString(16);
1223
1295
  });
1224
1296
  }
1225
- var Q = class {
1297
+ var z = class {
1226
1298
  store;
1227
1299
  /**
1228
1300
  * Ponteiro de sequência local.
@@ -1320,11 +1392,11 @@ var Q = class {
1320
1392
  async enqueue(e) {
1321
1393
  let { collection: t, op: n, payload: o, baseVersion: i, batchId: s, upsert: a } = e, c = e.docId ?? (n === "add" ? ee() : "");
1322
1394
  await this.syncSeq();
1323
- let d = (await this.store.listMutations({ collection: t, docId: c })).filter((_) => _.status === "queued").sort((_, h) => h.seq - _.seq)[0];
1395
+ let d = (await this.store.listMutations({ collection: t, docId: c })).filter((h) => h.status === "queued").sort((h, v) => v.seq - h.seq)[0];
1324
1396
  if (d !== void 0) {
1325
- let _ = this.tryCoalesce(d, n, o, s, a);
1326
- if (_ !== null) {
1327
- if ("removed" in _)
1397
+ let h = this.tryCoalesce(d, n, o, s, a);
1398
+ if (h !== null) {
1399
+ if ("removed" in h)
1328
1400
  return await this.store.deleteMutation(d.mutationId), {
1329
1401
  seq: d.seq,
1330
1402
  mutationId: ee(),
@@ -1339,8 +1411,8 @@ var Q = class {
1339
1411
  status: "queued",
1340
1412
  batchId: s
1341
1413
  };
1342
- let { coalesced: h } = _;
1343
- return await this.store.putMutation(h), h;
1414
+ let { coalesced: v } = h;
1415
+ return await this.store.putMutation(v), v;
1344
1416
  }
1345
1417
  }
1346
1418
  let f = {
@@ -1459,54 +1531,54 @@ var Q = class {
1459
1531
 
1460
1532
  // src/db/field-value.ts
1461
1533
  var te = "__neetru__";
1462
- function Xe() {
1534
+ function it() {
1463
1535
  return { __neetru__: "serverTimestamp" };
1464
1536
  }
1465
- function Ze(r) {
1537
+ function st(r) {
1466
1538
  if (typeof r != "number" || !Number.isFinite(r))
1467
1539
  throw new TypeError(
1468
1540
  `increment(n): n deve ser um n\xFAmero finito (recebido: ${String(r)}).`
1469
1541
  );
1470
1542
  return { __neetru__: "increment", operand: r };
1471
1543
  }
1472
- function R(r) {
1544
+ function D(r) {
1473
1545
  return typeof r == "object" && r !== null && te in r && typeof r[te] == "string";
1474
1546
  }
1475
- function _e(r) {
1476
- return R(r) && r.__neetru__ === "serverTimestamp";
1477
- }
1478
1547
  function ye(r) {
1479
- return R(r) && r.__neetru__ === "increment" && typeof r.operand == "number" && Number.isFinite(r.operand);
1548
+ return D(r) && r.__neetru__ === "serverTimestamp";
1480
1549
  }
1481
- function et(r, e) {
1482
- return _e(r) ? Date.now() : ye(r) ? (typeof e == "number" && Number.isFinite(e) ? e : 0) + r.operand : r;
1550
+ function ge(r) {
1551
+ return D(r) && r.__neetru__ === "increment" && typeof r.operand == "number" && Number.isFinite(r.operand);
1552
+ }
1553
+ function at(r, e) {
1554
+ return ye(r) ? Date.now() : ge(r) ? (typeof e == "number" && Number.isFinite(e) ? e : 0) + r.operand : r;
1483
1555
  }
1484
- function D(r, e) {
1556
+ function k(r, e) {
1485
1557
  let t = false, n = {};
1486
1558
  for (let [o, i] of Object.entries(r))
1487
- R(i) ? (t = true, n[o] = et(i, e?.[o])) : n[o] = i;
1559
+ D(i) ? (t = true, n[o] = at(i, e?.[o])) : n[o] = i;
1488
1560
  return t ? n : r;
1489
1561
  }
1490
1562
  function ne(r) {
1491
1563
  for (let e of Object.values(r))
1492
- if (R(e)) return true;
1564
+ if (D(e)) return true;
1493
1565
  return false;
1494
1566
  }
1495
1567
 
1496
1568
  // src/db/offline/sync-engine.ts
1497
- var tt = 8, nt = 1e3, rt = 300 * 1e3, re = "truncatedCollections";
1498
- function ot(r) {
1569
+ var ct = 8, lt = 1e3, dt = 300 * 1e3, re = "truncatedCollections";
1570
+ function ut(r) {
1499
1571
  return r !== null && ne(r);
1500
1572
  }
1501
- function it(r) {
1573
+ function pt(r) {
1502
1574
  if (r === null) return null;
1503
1575
  if (!ne(r)) return r;
1504
1576
  let e = {};
1505
1577
  for (let [t, n] of Object.entries(r))
1506
- R(n) || (e[t] = n);
1578
+ D(n) || (e[t] = n);
1507
1579
  return e;
1508
1580
  }
1509
- var z = class {
1581
+ var K = class {
1510
1582
  _store;
1511
1583
  _queue;
1512
1584
  _resolver;
@@ -1700,13 +1772,13 @@ var z = class {
1700
1772
  }), s.push({ type: "removed", collection: e, doc: { id: t, data: a.data } }));
1701
1773
  return;
1702
1774
  }
1703
- let l = it(i.payload) ?? a?.data ?? {}, d = {
1775
+ let l = pt(i.payload) ?? a?.data ?? {}, d = {
1704
1776
  collection: e,
1705
1777
  id: t,
1706
1778
  data: i.op === "update" ? { ...a?.data ?? {}, ...l } : (
1707
1779
  // add/set: se o payload tinha sentinels, o cache otimista (existing.data)
1708
1780
  // é a fonte de verdade até o pull; senão usa o payload literal.
1709
- ot(i.payload) ? { ...a?.data ?? {}, ...l } : l
1781
+ ut(i.payload) ? { ...a?.data ?? {}, ...l } : l
1710
1782
  ),
1711
1783
  meta: {
1712
1784
  serverVersion: n,
@@ -1859,7 +1931,7 @@ var z = class {
1859
1931
  * pending do doc no cache + registra `lastError`/dispara `onError`.
1860
1932
  */
1861
1933
  async _retryOrDeadLetter(e, t, n) {
1862
- if (e.attempts + 1 < tt) {
1934
+ if (e.attempts + 1 < ct) {
1863
1935
  await this._queue.markRetry(e.mutationId, t);
1864
1936
  return;
1865
1937
  }
@@ -1900,7 +1972,7 @@ var z = class {
1900
1972
  }
1901
1973
  /** Backoff exponencial keyed em `attempts`, com teto `BACKOFF_CAP_MS`. */
1902
1974
  _backoffDelayMs(e) {
1903
- return Math.min(nt * 2 ** (e - 1), rt);
1975
+ return Math.min(lt * 2 ** (e - 1), dt);
1904
1976
  }
1905
1977
  // ─── FASE 2 — pull (reconciliar o cache) ─────────────────────────────────────
1906
1978
  /**
@@ -2152,10 +2224,10 @@ var z = class {
2152
2224
  };
2153
2225
 
2154
2226
  // src/db/offline/conflict-resolver.ts
2155
- function ge(r, e) {
2227
+ function be(r, e) {
2156
2228
  return e === null ? false : r === null ? true : e > r;
2157
2229
  }
2158
- var K = class r {
2230
+ var H = class r {
2159
2231
  /**
2160
2232
  * Resolve um conflito com base na operação da mutação (auto-dispatch).
2161
2233
  *
@@ -2189,7 +2261,7 @@ var K = class r {
2189
2261
  resolvedData: t.data,
2190
2262
  conflictRecord: null
2191
2263
  };
2192
- if (!ge(
2264
+ if (!be(
2193
2265
  e.meta.updatedAtServer,
2194
2266
  t.meta.updatedAtServer
2195
2267
  ))
@@ -2236,7 +2308,7 @@ var K = class r {
2236
2308
  let i = t.data;
2237
2309
  if (e === null)
2238
2310
  return { outcome: "no_conflict", resolvedData: { ...i, ...n.payload ?? {} }, conflictRecord: null };
2239
- if (!ge(
2311
+ if (!be(
2240
2312
  e.meta.updatedAtServer,
2241
2313
  t.meta.updatedAtServer
2242
2314
  ))
@@ -2314,10 +2386,10 @@ var K = class r {
2314
2386
  };
2315
2387
 
2316
2388
  // src/db/offline/change-bus.ts
2317
- function st(r) {
2389
+ function ft(r) {
2318
2390
  return `${r.collection}::${r.doc.id}`;
2319
2391
  }
2320
- var H = class {
2392
+ var G = class {
2321
2393
  /** Listeners filtrados por coleção. */
2322
2394
  _collectionListeners = /* @__PURE__ */ new Map();
2323
2395
  /** Listeners globais (todas as coleções). */
@@ -2362,7 +2434,7 @@ var H = class {
2362
2434
  if (e.length === 0) return;
2363
2435
  let t = /* @__PURE__ */ new Map();
2364
2436
  for (let i of e)
2365
- t.set(st(i), i);
2437
+ t.set(ft(i), i);
2366
2438
  let n = Array.from(t.values()), o = /* @__PURE__ */ new Map();
2367
2439
  for (let i of n)
2368
2440
  o.has(i.collection) || o.set(i.collection, []), o.get(i.collection).push(i);
@@ -2401,7 +2473,7 @@ var H = class {
2401
2473
  };
2402
2474
 
2403
2475
  // src/db/offline/connectivity-monitor.ts
2404
- var G = class {
2476
+ var X = class {
2405
2477
  _state;
2406
2478
  _listeners = /* @__PURE__ */ new Set();
2407
2479
  _nav;
@@ -2680,26 +2752,26 @@ var q = class {
2680
2752
  };
2681
2753
 
2682
2754
  // src/db/collection-ref.ts
2683
- k();
2684
- function at() {
2755
+ I();
2756
+ function ht() {
2685
2757
  return typeof indexedDB > "u" || typeof window > "u";
2686
2758
  }
2687
- var be = /^[a-z0-9][a-z0-9_-]{0,62}$/;
2688
- function ct(r) {
2689
- if (!be.test(r))
2759
+ var ve = /^[a-z0-9][a-z0-9_-]{0,62}$/;
2760
+ function mt(r) {
2761
+ if (!ve.test(r))
2690
2762
  throw new exports.NeetruDbError(
2691
2763
  "db_invalid_query",
2692
- `Nome de cole\xE7\xE3o inv\xE1lido: "${r}". Deve seguir o padr\xE3o ${be}.`
2764
+ `Nome de cole\xE7\xE3o inv\xE1lido: "${r}". Deve seguir o padr\xE3o ${ve}.`
2693
2765
  );
2694
2766
  }
2695
- function I(r, e = "id") {
2767
+ function L(r, e = "id") {
2696
2768
  if (!r || typeof r != "string" || r.trim() === "")
2697
2769
  throw new exports.NeetruDbError(
2698
2770
  "db_invalid_query",
2699
2771
  `${e} \xE9 obrigat\xF3rio e deve ser uma string n\xE3o-vazia.`
2700
2772
  );
2701
2773
  }
2702
- function lt(r) {
2774
+ function _t(r) {
2703
2775
  let e = {};
2704
2776
  if (r?.where && (e.where = r.where.map((t) => ({
2705
2777
  field: t.field,
@@ -2716,7 +2788,7 @@ function lt(r) {
2716
2788
  }
2717
2789
  return e;
2718
2790
  }
2719
- function dt(r, e) {
2791
+ function yt(r, e) {
2720
2792
  if (r.length < e) return null;
2721
2793
  let t = r[r.length - 1];
2722
2794
  return t ? btoa(JSON.stringify({ type: "startAfter", docId: t.id })) : null;
@@ -2763,9 +2835,9 @@ var oe = class {
2763
2835
  }
2764
2836
  /** Constrói um DbListResult para a coleção com query opcional. */
2765
2837
  async _buildListResult(e) {
2766
- let t = lt(e), n = t.limit ?? 20, o = await this._store.listDocs(this._collection, t), i = await this._hasPendingWrites(), s = this._isOnline(), a = this._engine.getSyncState(), c = dt(o.docs, n), l = await this._store.getMeta(re), d = Array.isArray(l) && l.includes(this._collection), u = !s || a.status === "offline" || d, f = i || a.lastSyncedAt === null || u;
2838
+ let t = _t(e), n = t.limit ?? 20, o = await this._store.listDocs(this._collection, t), i = await this._hasPendingWrites(), s = this._isOnline(), a = this._engine.getSyncState(), c = yt(o.docs, n), l = await this._store.getMeta(re), d = Array.isArray(l) && l.includes(this._collection), u = !s || a.status === "offline" || d, f = i || a.lastSyncedAt === null || u;
2767
2839
  return {
2768
- docs: o.docs.map((_) => ({ id: _.id, data: _.data })),
2840
+ docs: o.docs.map((h) => ({ id: h.id, data: h.data })),
2769
2841
  nextCursor: c,
2770
2842
  fromCache: f,
2771
2843
  stale: u,
@@ -2776,13 +2848,13 @@ var oe = class {
2776
2848
  }
2777
2849
  // ── CRUD ────────────────────────────────────────────────────────────────────
2778
2850
  async get(e) {
2779
- return I(e), this._buildGetResult(e);
2851
+ return L(e), this._buildGetResult(e);
2780
2852
  }
2781
2853
  async list(e) {
2782
2854
  return this._buildListResult(e);
2783
2855
  }
2784
2856
  async add(e) {
2785
- let t = e, n = D(t, void 0), o = await this._queue.enqueue({
2857
+ let t = e, n = k(t, void 0), o = await this._queue.enqueue({
2786
2858
  collection: this._collection,
2787
2859
  op: "add",
2788
2860
  payload: t,
@@ -2809,8 +2881,8 @@ var oe = class {
2809
2881
  }]), { ok: true, id: i };
2810
2882
  }
2811
2883
  async set(e, t) {
2812
- I(e);
2813
- let n = await this._store.getDoc(this._collection, e), o = t, i = D(o, void 0), s = await this._queue.enqueue({
2884
+ L(e);
2885
+ let n = await this._store.getDoc(this._collection, e), o = t, i = k(o, void 0), s = await this._queue.enqueue({
2814
2886
  collection: this._collection,
2815
2887
  docId: e,
2816
2888
  op: "set",
@@ -2838,8 +2910,8 @@ var oe = class {
2838
2910
  }]), { ok: true };
2839
2911
  }
2840
2912
  async update(e, t, n) {
2841
- I(e);
2842
- let o = await this._store.getDoc(this._collection, e), i = t, s = o?.meta.deleted ? void 0 : o?.data, a = D(i, s), c = o?.meta.deleted ? { ...a } : { ...o?.data ?? {}, ...a }, l = await this._queue.enqueue({
2913
+ L(e);
2914
+ let o = await this._store.getDoc(this._collection, e), i = t, s = o?.meta.deleted ? void 0 : o?.data, a = k(i, s), c = o?.meta.deleted ? { ...a } : { ...o?.data ?? {}, ...a }, l = await this._queue.enqueue({
2843
2915
  collection: this._collection,
2844
2916
  docId: e,
2845
2917
  op: "update",
@@ -2872,7 +2944,7 @@ var oe = class {
2872
2944
  }]), { ok: true };
2873
2945
  }
2874
2946
  async remove(e) {
2875
- I(e);
2947
+ L(e);
2876
2948
  let t = await this._store.getDoc(this._collection, e);
2877
2949
  return !t || t.meta.deleted, await this._queue.enqueue({
2878
2950
  collection: this._collection,
@@ -2892,7 +2964,7 @@ var oe = class {
2892
2964
  for (let o of e) {
2893
2965
  let i = this._collection;
2894
2966
  if (o.kind === "add") {
2895
- let s = o.data, a = D(s, void 0), c = await this._queue.enqueue({
2967
+ let s = o.data, a = k(s, void 0), c = await this._queue.enqueue({
2896
2968
  collection: i,
2897
2969
  op: "add",
2898
2970
  payload: s,
@@ -2914,7 +2986,7 @@ var oe = class {
2914
2986
  }
2915
2987
  }), n.push({ type: "added", collection: i, doc: { id: l, data: a } });
2916
2988
  } else if (o.kind === "set") {
2917
- let s = o.id, a = o.data, c = await this._store.getDoc(i, s), l = D(a, void 0), d = await this._queue.enqueue({
2989
+ let s = o.id, a = o.data, c = await this._store.getDoc(i, s), l = k(a, void 0), d = await this._queue.enqueue({
2918
2990
  collection: i,
2919
2991
  docId: s,
2920
2992
  op: "set",
@@ -2941,7 +3013,7 @@ var oe = class {
2941
3013
  doc: { id: s, data: l }
2942
3014
  });
2943
3015
  } else if (o.kind === "update") {
2944
- let s = o.id, a = o.data, c = await this._store.getDoc(i, s), l = c?.meta.deleted ? void 0 : c?.data, d = D(a, l), u = { ...c?.data ?? {}, ...d }, f = await this._queue.enqueue({
3016
+ let s = o.id, a = o.data, c = await this._store.getDoc(i, s), l = c?.meta.deleted ? void 0 : c?.data, d = k(a, l), u = { ...c?.data ?? {}, ...d }, f = await this._queue.enqueue({
2945
3017
  collection: i,
2946
3018
  docId: s,
2947
3019
  op: "update",
@@ -2984,7 +3056,7 @@ var oe = class {
2984
3056
  }
2985
3057
  // ── Realtime ─────────────────────────────────────────────────────────────────
2986
3058
  onDoc(e, t) {
2987
- return I(e), this._buildGetResult(e).then((n) => {
3059
+ return L(e), this._buildGetResult(e).then((n) => {
2988
3060
  t(n ? n.docs[0]?.data ?? null : null);
2989
3061
  }).catch(() => t(null)), this._bus.subscribe(this._collection, (n) => {
2990
3062
  let o = n.find((i) => i.doc.id === e);
@@ -3043,7 +3115,7 @@ var oe = class {
3043
3115
  };
3044
3116
  }
3045
3117
  doc(e) {
3046
- I(e);
3118
+ L(e);
3047
3119
  let t = this;
3048
3120
  return {
3049
3121
  get id() {
@@ -3106,7 +3178,7 @@ var oe = class {
3106
3178
  this._store = e.store, this._queue = e.queue, this._bus = e.bus, this._engine = e.engine, this._connectivity = e.connectivity;
3107
3179
  }
3108
3180
  collection(e) {
3109
- return ct(e), new oe(
3181
+ return mt(e), new oe(
3110
3182
  e,
3111
3183
  this._store,
3112
3184
  this._queue,
@@ -3135,10 +3207,10 @@ var oe = class {
3135
3207
  return this._engine.onError(e);
3136
3208
  }
3137
3209
  };
3138
- async function ve(r) {
3139
- let e = at() ? new V() : new j(r.dbName);
3210
+ async function we(r) {
3211
+ let e = ht() ? new Q() : new j(r.dbName);
3140
3212
  await e.open();
3141
- let t = new Q(e), n = new K(), o = new H(), i = new G({
3213
+ let t = new z(e), n = new H(), o = new G(), i = new X({
3142
3214
  // Se startOnline=false, injeta um navigator falso
3143
3215
  navigator: r.startOnline === false ? { onLine: false } : typeof navigator < "u" ? navigator : void 0
3144
3216
  }), s = r.singleTab ? (
@@ -3151,7 +3223,7 @@ async function ve(r) {
3151
3223
  ) : new q({
3152
3224
  lockName: `neetru-offline:${r.dbName}`,
3153
3225
  channelName: `neetru-offline:${r.dbName}`
3154
- }), a = new z({
3226
+ }), a = new K({
3155
3227
  store: e,
3156
3228
  queue: t,
3157
3229
  resolver: n,
@@ -3171,9 +3243,9 @@ async function ve(r) {
3171
3243
  }
3172
3244
 
3173
3245
  // src/db/realtime/realtime-client.ts
3174
- var ut = 0;
3175
- function we() {
3176
- return typeof globalThis.crypto?.randomUUID == "function" ? globalThis.crypto.randomUUID() : `nrt-sub-${Date.now()}-${++ut}-${Math.random().toString(36).slice(2)}`;
3246
+ var gt = 0;
3247
+ function Se() {
3248
+ return typeof globalThis.crypto?.randomUUID == "function" ? globalThis.crypto.randomUUID() : `nrt-sub-${Date.now()}-${++gt}-${Math.random().toString(36).slice(2)}`;
3177
3249
  }
3178
3250
  var F = class {
3179
3251
  // ── configuração ──────────────────────────────────────────────────────────
@@ -3213,7 +3285,7 @@ var F = class {
3213
3285
  _pendingFrames = [];
3214
3286
  // ── construtor ────────────────────────────────────────────────────────────
3215
3287
  constructor(e) {
3216
- this._gatewayUrl = e.gatewayUrl, this._wsFactory = e.webSocketFactory ?? pt, this._setTimeout = e.setTimeoutFn ?? globalThis.setTimeout.bind(globalThis), this._clearTimeout = e.clearTimeoutFn ?? globalThis.clearTimeout.bind(globalThis), this._backoffBaseMs = e.backoffBaseMs ?? 1e3, this._backoffMaxMs = e.backoffMaxMs ?? 3e4, this._heartbeatIntervalMs = e.heartbeatIntervalMs ?? 25e3, this._ticketProvider = e.ticketProvider, this._dbId = e.dbId, this._connect();
3288
+ this._gatewayUrl = e.gatewayUrl, this._wsFactory = e.webSocketFactory ?? bt, this._setTimeout = e.setTimeoutFn ?? globalThis.setTimeout.bind(globalThis), this._clearTimeout = e.clearTimeoutFn ?? globalThis.clearTimeout.bind(globalThis), this._backoffBaseMs = e.backoffBaseMs ?? 1e3, this._backoffMaxMs = e.backoffMaxMs ?? 3e4, this._heartbeatIntervalMs = e.heartbeatIntervalMs ?? 25e3, this._ticketProvider = e.ticketProvider, this._dbId = e.dbId, this._connect();
3217
3289
  }
3218
3290
  // ── API pública ───────────────────────────────────────────────────────────
3219
3291
  /**
@@ -3227,8 +3299,8 @@ var F = class {
3227
3299
  */
3228
3300
  subscribe(e, t, n) {
3229
3301
  if (this._closed)
3230
- return we();
3231
- let o = we();
3302
+ return Se();
3303
+ let o = Se();
3232
3304
  this._subscriptions.set(o, {
3233
3305
  subscriptionId: o,
3234
3306
  collection: e,
@@ -3492,7 +3564,7 @@ var F = class {
3492
3564
  _detachHandlers(e) {
3493
3565
  e.onopen = null, e.onmessage = null, e.onclose = null, e.onerror = null;
3494
3566
  }
3495
- }, pt = (r) => {
3567
+ }, bt = (r) => {
3496
3568
  if (typeof WebSocket > "u")
3497
3569
  throw new Error(
3498
3570
  "[NeetruRealtimeClient] WebSocket n\xE3o dispon\xEDvel neste ambiente. Injete uma implementa\xE7\xE3o via `webSocketFactory` nas op\xE7\xF5es."
@@ -3501,12 +3573,12 @@ var F = class {
3501
3573
  };
3502
3574
 
3503
3575
  // src/db/client-db.ts
3504
- k();
3505
- var Ot = (r) => `/api/sdk/v1/datastore/${encodeURIComponent(r)}`, Y = (r, e) => `/api/sdk/v1/datastore/${encodeURIComponent(r)}/${encodeURIComponent(e)}`, Be = 200;
3506
- function xt(r, e, t) {
3507
- return e._transport ? e._transport : r === "firestore" && e.firestoreTransport ? e.firestoreTransport : r === "nosql-vm" && e.realtimeGatewayUrl ? At(e.realtimeGatewayUrl, t, e) : je(t);
3576
+ I();
3577
+ var Vt = (r) => `/api/sdk/v1/datastore/${encodeURIComponent(r)}`, Y = (r, e) => `/api/sdk/v1/datastore/${encodeURIComponent(r)}/${encodeURIComponent(e)}`, Ge = 200;
3578
+ function jt(r, e, t) {
3579
+ return e._transport ? e._transport : r === "firestore" && e.firestoreTransport ? e.firestoreTransport : r === "nosql-vm" && e.realtimeGatewayUrl ? Qt(e.realtimeGatewayUrl, t, e) : Xe(t);
3508
3580
  }
3509
- function je(r) {
3581
+ function Xe(r) {
3510
3582
  return {
3511
3583
  async pushMutations(e) {
3512
3584
  if (!r)
@@ -3584,7 +3656,7 @@ function je(r) {
3584
3656
  try {
3585
3657
  l = await t(r, {
3586
3658
  method: "GET",
3587
- path: Ot(c),
3659
+ path: Vt(c),
3588
3660
  requireAuth: !0,
3589
3661
  retries: 2,
3590
3662
  headers: o,
@@ -3592,37 +3664,37 @@ function je(r) {
3592
3664
  // TRUNCADAS — reportadas em `truncatedCollections` p/ o SyncEngine
3593
3665
  // (a) NÃO rodar deleção-por-ausência e (b) sinalizar
3594
3666
  // `DbListResult.truncated`. Paginação por cursor é tarefa Core (gated).
3595
- query: { limit: Be }
3667
+ query: { limit: Ge }
3596
3668
  });
3597
3669
  } catch (f) {
3598
- let _ = f instanceof Error ? f.message : String(f);
3670
+ let h = f instanceof Error ? f.message : String(f);
3599
3671
  throw new exports.NeetruDbError(
3600
3672
  "db_unavailable",
3601
- `[RestSyncTransport] fullResync falhou na cole\xE7\xE3o "${c}": ${_}`
3673
+ `[RestSyncTransport] fullResync falhou na cole\xE7\xE3o "${c}": ${h}`
3602
3674
  );
3603
3675
  }
3604
3676
  let d = l, u = Array.isArray(d?.items) ? d.items : [];
3605
- u.length >= Be && a.push(c);
3677
+ u.length >= Ge && a.push(c);
3606
3678
  for (let f of u) {
3607
3679
  if (!f || typeof f != "object") continue;
3608
- let _ = f, h = typeof _.id == "string" ? _.id : null;
3609
- if (!h) continue;
3610
- let { id: X, ...b } = _, v = i, y = b._updatedAt;
3611
- if (typeof y == "number")
3612
- v = y;
3613
- else if (y !== null && typeof y == "object" && typeof y._seconds == "number")
3614
- v = y._seconds * 1e3;
3615
- else if (typeof y == "string") {
3616
- let M = Date.parse(y);
3617
- Number.isNaN(M) || (v = M);
3680
+ let h = f, v = typeof h.id == "string" ? h.id : null;
3681
+ if (!v) continue;
3682
+ let { id: _, ...B } = h, y = i, b = B._updatedAt;
3683
+ if (typeof b == "number")
3684
+ y = b;
3685
+ else if (b !== null && typeof b == "object" && typeof b._seconds == "number")
3686
+ y = b._seconds * 1e3;
3687
+ else if (typeof b == "string") {
3688
+ let C = Date.parse(b);
3689
+ Number.isNaN(C) || (y = C);
3618
3690
  }
3619
- let L = `rest_${h}_${v}`;
3691
+ let w = `rest_${v}_${y}`;
3620
3692
  s.push({
3621
3693
  collection: c,
3622
- id: h,
3623
- data: b,
3624
- serverVersion: L,
3625
- serverTimestamp: v,
3694
+ id: v,
3695
+ data: B,
3696
+ serverVersion: w,
3697
+ serverTimestamp: y,
3626
3698
  deleted: false
3627
3699
  });
3628
3700
  }
@@ -3631,10 +3703,10 @@ function je(r) {
3631
3703
  }
3632
3704
  };
3633
3705
  }
3634
- function At(r, e, t) {
3635
- let n = je(e), o = new F({
3706
+ function Qt(r, e, t) {
3707
+ let n = Xe(e), o = new F({
3636
3708
  gatewayUrl: r,
3637
- ticketProvider: Nt(e, t),
3709
+ ticketProvider: zt(e, t),
3638
3710
  dbId: t.dbId,
3639
3711
  webSocketFactory: t._wsFactory
3640
3712
  });
@@ -3670,7 +3742,7 @@ function At(r, e, t) {
3670
3742
  }
3671
3743
  };
3672
3744
  }
3673
- function Nt(r, e) {
3745
+ function zt(r, e) {
3674
3746
  return async () => {
3675
3747
  let { httpRequest: t } = await Promise.resolve().then(() => (W(), U));
3676
3748
  return await t(r, {
@@ -3685,27 +3757,27 @@ function Nt(r, e) {
3685
3757
  });
3686
3758
  };
3687
3759
  }
3688
- function Mn(r, e, t, n) {
3760
+ function zn(r, e, t, n) {
3689
3761
  return new F({ gatewayUrl: r, ticketProvider: e, dbId: t, webSocketFactory: n });
3690
3762
  }
3691
3763
  var pe = false;
3692
- function On() {
3764
+ function Kn() {
3693
3765
  pe = false;
3694
3766
  }
3695
- function qt(r, e) {
3767
+ function Kt(r, e) {
3696
3768
  pe || e.dbId && r.env !== "prod" && (typeof window > "u" || typeof console > "u" || typeof console.warn != "function" || (pe = true, console.warn(
3697
3769
  '[neetru/sdk] client.db recebeu `dbId` ("' + e.dbId + '") mas ele N\xC3O roteia nem escopa nada no servidor: as escritas do mundo Documentos (add/set/update/remove/list) SEMPRE caem no datastore gen\xE9rico do Core, escopado s\xF3 por tenant/produto (header x-neetru-tenant). `dbId` apenas nomeia o cache offline LOCAL (IndexedDB). ATEN\xC7\xC3O: usar dbIds distintos no MESMO tenant/produto N\xC3O isola os dados no servidor \u2014 eles se misturam (co-mingling). Veja o JSDoc de NeetruDbOptions.dbId.'
3698
3770
  )));
3699
3771
  }
3700
- function xn(r, e = {}) {
3701
- qt(r, e);
3772
+ function Hn(r, e = {}) {
3773
+ Kt(r, e);
3702
3774
  let t;
3703
3775
  e.transport !== void 0 ? t = e.transport : e.engine !== void 0 ? (console.warn(
3704
3776
  '[neetru/sdk] NeetruDbOptions.engine est\xE1 depreciado e ser\xE1 removido em v3.0. Use NeetruDbOptions.transport em vez de engine. Valores v\xE1lidos: "rest" | "firestore" | "nosql-vm". Nota: "engine" no SDK configura o TRANSPORTE (REST/Firestore/WebSocket), n\xE3o o storage engine do admin database (firestore-instance, cloud-sql-postgres, \u2026).'
3705
3777
  ), t = e.engine) : t = "rest";
3706
- let n = xt(t, e, r), o = e.dbId ?? "default", i = e.dbName ?? `neetru-db__${r.productId ?? "sdk"}__${o}__${r.env}`, s = null, a = null;
3778
+ let n = jt(t, e, r), o = e.dbId ?? "default", i = e.dbName ?? `neetru-db__${r.productId ?? "sdk"}__${o}__${r.env}`, s = null, a = null;
3707
3779
  function c() {
3708
- return s || (s = ve({
3780
+ return s || (s = we({
3709
3781
  dbName: i,
3710
3782
  transport: n,
3711
3783
  singleTab: e.singleTab ?? r.env !== "prod"
@@ -3713,7 +3785,7 @@ function xn(r, e = {}) {
3713
3785
  }
3714
3786
  return {
3715
3787
  collection(l) {
3716
- return a ? a.collection(l) : Ft(l, c);
3788
+ return a ? a.collection(l) : Ht(l, c);
3717
3789
  },
3718
3790
  async sql(l, d) {
3719
3791
  if (r.env === "dev")
@@ -3721,7 +3793,7 @@ function xn(r, e = {}) {
3721
3793
  "db_unavailable",
3722
3794
  "[SDK] db.sql() n\xE3o dispon\xEDvel em NEETRU_ENV=dev. Use `neetru dev` para subir o container Postgres local."
3723
3795
  );
3724
- return (await Promise.resolve().then(() => ($e(), We))).createSqlClientFromConfig(r, l, d);
3796
+ return (await Promise.resolve().then(() => (He(), Ke))).createSqlClientFromConfig(r, l, d);
3725
3797
  },
3726
3798
  get syncState() {
3727
3799
  return a?.syncState ?? {
@@ -3760,7 +3832,7 @@ function xn(r, e = {}) {
3760
3832
  }
3761
3833
  };
3762
3834
  }
3763
- function Ft(r, e) {
3835
+ function Ht(r, e) {
3764
3836
  async function t() {
3765
3837
  return (await e()).collection(r);
3766
3838
  }
@@ -3839,12 +3911,12 @@ function Ft(r, e) {
3839
3911
  }
3840
3912
 
3841
3913
  exports.NEETRU_SENTINEL_KEY = te;
3842
- exports.__resetDbIdWarningForTests = On;
3843
- exports.createNeetruDb = xn;
3844
- exports.createRestSyncTransport = je;
3845
- exports.getWebSocketRealtimeClient = Mn;
3846
- exports.increment = Ze;
3847
- exports.isFieldSentinel = R;
3848
- exports.isIncrementSentinel = ye;
3849
- exports.isServerTimestampSentinel = _e;
3850
- exports.serverTimestamp = Xe;
3914
+ exports.__resetDbIdWarningForTests = Kn;
3915
+ exports.createNeetruDb = Hn;
3916
+ exports.createRestSyncTransport = Xe;
3917
+ exports.getWebSocketRealtimeClient = zn;
3918
+ exports.increment = st;
3919
+ exports.isFieldSentinel = D;
3920
+ exports.isIncrementSentinel = ge;
3921
+ exports.isServerTimestampSentinel = ye;
3922
+ exports.serverTimestamp = it;