@neetru/sdk 3.8.0 → 3.9.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 (67) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +4 -1
  3. package/dist/ai.cjs +1 -1
  4. package/dist/ai.d.cts +1 -1
  5. package/dist/ai.d.ts +1 -1
  6. package/dist/ai.mjs +1 -1
  7. package/dist/auth.cjs +1171 -1110
  8. package/dist/auth.d.cts +1 -1
  9. package/dist/auth.d.ts +1 -1
  10. package/dist/auth.mjs +1168 -1107
  11. package/dist/catalog.cjs +1 -1
  12. package/dist/catalog.d.cts +1 -1
  13. package/dist/catalog.d.ts +1 -1
  14. package/dist/catalog.mjs +1 -1
  15. package/dist/checkout.cjs +62 -49
  16. package/dist/checkout.d.cts +1 -1
  17. package/dist/checkout.d.ts +1 -1
  18. package/dist/checkout.mjs +62 -49
  19. package/dist/db-react.d.cts +1 -1
  20. package/dist/db-react.d.ts +1 -1
  21. package/dist/db.cjs +303 -270
  22. package/dist/db.d.cts +1 -1
  23. package/dist/db.d.ts +1 -1
  24. package/dist/db.mjs +322 -289
  25. package/dist/entitlements.d.cts +1 -1
  26. package/dist/entitlements.d.ts +1 -1
  27. package/dist/firestore-compat.d.cts +1 -1
  28. package/dist/firestore-compat.d.ts +1 -1
  29. package/dist/index.cjs +1275 -1214
  30. package/dist/index.d.cts +2 -2
  31. package/dist/index.d.ts +2 -2
  32. package/dist/index.mjs +1390 -1329
  33. package/dist/mobile.cjs +328 -276
  34. package/dist/mobile.d.cts +12 -2
  35. package/dist/mobile.d.ts +12 -2
  36. package/dist/mobile.mjs +328 -276
  37. package/dist/mocks.cjs +5 -5
  38. package/dist/mocks.d.cts +2 -2
  39. package/dist/mocks.d.ts +2 -2
  40. package/dist/mocks.mjs +4 -4
  41. package/dist/notifications.cjs +1 -1
  42. package/dist/notifications.d.cts +1 -1
  43. package/dist/notifications.d.ts +1 -1
  44. package/dist/notifications.mjs +1 -1
  45. package/dist/react.cjs +119 -119
  46. package/dist/react.d.cts +8 -2
  47. package/dist/react.d.ts +8 -2
  48. package/dist/react.mjs +119 -119
  49. package/dist/support.cjs +1 -1
  50. package/dist/support.d.cts +1 -1
  51. package/dist/support.d.ts +1 -1
  52. package/dist/support.mjs +1 -1
  53. package/dist/telemetry.cjs +62 -49
  54. package/dist/telemetry.d.cts +1 -1
  55. package/dist/telemetry.d.ts +1 -1
  56. package/dist/telemetry.mjs +62 -49
  57. package/dist/{types-D-9bjlM0.d.cts → types-Bl_4HROd.d.cts} +118 -19
  58. package/dist/{types-bVztFQTI.d.ts → types-Bqnsqvow.d.ts} +118 -19
  59. package/dist/usage.cjs +1 -1
  60. package/dist/usage.d.cts +1 -1
  61. package/dist/usage.d.ts +1 -1
  62. package/dist/usage.mjs +1 -1
  63. package/dist/webhooks.cjs +1 -1
  64. package/dist/webhooks.d.cts +1 -1
  65. package/dist/webhooks.d.ts +1 -1
  66. package/dist/webhooks.mjs +1 -1
  67. package/package.json +9 -1
package/dist/db.cjs CHANGED
@@ -2,16 +2,16 @@
2
2
 
3
3
  var idb = require('idb');
4
4
 
5
- var Je = Object.defineProperty;
5
+ var Ze = Object.defineProperty;
6
6
  var S = (r, e) => () => (r && (e = r(r = 0)), e);
7
7
  var me = (r, e) => {
8
8
  for (var t in e)
9
- Je(r, t, { get: e[t], enumerable: true });
9
+ Ze(r, t, { get: e[t], enumerable: true });
10
10
  };
11
11
 
12
12
  // src/errors.ts
13
- var g, x = S(() => {
14
- g = class r extends Error {
13
+ var b, x = S(() => {
14
+ b = class r extends Error {
15
15
  code;
16
16
  status;
17
17
  requestId;
@@ -38,13 +38,13 @@ var g, x = S(() => {
38
38
  });
39
39
 
40
40
  // src/db-errors.ts
41
- var Ye; exports.NeetruDbError = void 0; var I = S(() => {
41
+ var et; exports.NeetruDbError = void 0; var I = S(() => {
42
42
  x();
43
- Ye = /* @__PURE__ */ new Set([
43
+ et = /* @__PURE__ */ new Set([
44
44
  "db_unavailable",
45
45
  "db_conflict",
46
46
  "db_timeout"
47
- ]), exports.NeetruDbError = class r extends g {
47
+ ]), exports.NeetruDbError = class r extends b {
48
48
  /** Código de erro fechado — específico de DB. */
49
49
  code;
50
50
  /**
@@ -58,30 +58,30 @@ var Ye; exports.NeetruDbError = void 0; var I = S(() => {
58
58
  */
59
59
  dbId;
60
60
  constructor(e, t, n) {
61
- super(e, t), this.name = "NeetruDbError", this.code = e, this.retryable = Ye.has(e), this.dbId = n, Object.setPrototypeOf(this, r.prototype);
61
+ super(e, t), this.name = "NeetruDbError", this.code = e, this.retryable = et.has(e), this.dbId = n, Object.setPrototypeOf(this, r.prototype);
62
62
  }
63
63
  };
64
64
  });
65
65
 
66
66
  // src/idempotency.ts
67
- function Te() {
67
+ function Re() {
68
68
  let r = typeof globalThis < "u" && "crypto" in globalThis ? globalThis.crypto : void 0;
69
69
  if (r && typeof r.randomUUID == "function")
70
70
  return r.randomUUID();
71
- throw new g(
71
+ throw new b(
72
72
  "runtime_unsupported",
73
73
  "crypto.randomUUID not available in this runtime. SDK 3.0 requires Node \u226520 or modern browser/Edge."
74
74
  );
75
75
  }
76
- var Re = S(() => {
76
+ var De = S(() => {
77
77
  x();
78
78
  });
79
79
 
80
80
  // src/correlation.ts
81
- function ke(r) {
82
- return typeof r == "string" && r.length > 0 && r.length <= 128 && vt.test(r);
81
+ function Ce(r) {
82
+ return typeof r == "string" && r.length > 0 && r.length <= 128 && Tt.test(r);
83
83
  }
84
- function wt() {
84
+ function Rt() {
85
85
  let r = globalThis.crypto;
86
86
  try {
87
87
  if (r && typeof r.randomUUID == "function") return r.randomUUID();
@@ -99,24 +99,24 @@ function wt() {
99
99
  let n = Array.from(e, (o) => o.toString(16).padStart(2, "0")).join("");
100
100
  return `${n.slice(0, 8)}-${n.slice(8, 12)}-${n.slice(12, 16)}-${n.slice(16, 20)}-${n.slice(20)}`;
101
101
  }
102
- function Ce(r, e) {
102
+ function Ie(r, e) {
103
103
  let t, n = {};
104
104
  for (let [i, s] of Object.entries(r)) {
105
- if (i.toLowerCase() === De) {
106
- ke(s) && (t = s);
105
+ if (i.toLowerCase() === ke) {
106
+ Ce(s) && (t = s);
107
107
  continue;
108
108
  }
109
109
  n[i] = s;
110
110
  }
111
- let o = t ?? (ke(e) ? e : void 0) ?? wt();
112
- return n[De] = o, { headers: n, correlationId: o };
111
+ let o = t ?? (Ce(e) ? e : void 0) ?? Rt();
112
+ return n[ke] = o, { headers: n, correlationId: o };
113
113
  }
114
- var De, vt, Ie = S(() => {
115
- De = "x-correlation-id", vt = /^[A-Za-z0-9._:\-]+$/;
114
+ var ke, Tt, Pe = S(() => {
115
+ ke = "x-correlation-id", Tt = /^[A-Za-z0-9._:\-]+$/;
116
116
  });
117
117
 
118
118
  // src/server-only-key.ts
119
- function Pe() {
119
+ function Ee() {
120
120
  try {
121
121
  let r = globalThis.navigator;
122
122
  if (r && r.product === "ReactNative") return "react-native";
@@ -129,20 +129,20 @@ function Pe() {
129
129
  }
130
130
  return null;
131
131
  }
132
- var Ee = S(() => {
132
+ var Le = S(() => {
133
133
  });
134
134
 
135
135
  // src/http.ts
136
136
  var U = {};
137
137
  me(U, {
138
- checkCoreVersionCompat: () => qe,
139
- httpRequest: () => Mt,
140
- statusToCode: () => Fe
138
+ checkCoreVersionCompat: () => Fe,
139
+ httpRequest: () => At,
140
+ statusToCode: () => Ue
141
141
  });
142
142
  function se(r) {
143
143
  return r.split("+")[0] ?? r;
144
144
  }
145
- function Tt(r, e) {
145
+ function kt(r, e) {
146
146
  let t = se(r).split(".").map(Number), n = se(e).split(".").map(Number), o = Math.max(t.length, n.length);
147
147
  for (let i = 0; i < o; i++) {
148
148
  let s = t[i] ?? 0, a = n[i] ?? 0;
@@ -150,62 +150,62 @@ function Tt(r, e) {
150
150
  }
151
151
  return 0;
152
152
  }
153
- function Ne() {
153
+ function qe() {
154
154
  try {
155
- return "3.8.0";
155
+ return "3.9.0";
156
156
  } catch {
157
157
  return;
158
158
  }
159
159
  }
160
- function Rt() {
161
- let r = Ne();
160
+ function Ct() {
161
+ let r = qe();
162
162
  return r ? parseInt(r.split(".")[0] ?? "3", 10) : 3;
163
163
  }
164
- function qe(r) {
164
+ function Fe(r) {
165
165
  if (!r) return;
166
- let e = Rt(), t = St[e];
166
+ let e = Ct(), t = Dt[e];
167
167
  if (!t) return;
168
168
  let n = se(r);
169
- if (Tt(n, t) < 0) {
169
+ if (kt(n, t) < 0) {
170
170
  let o = `${e}:${n}`;
171
- Le.has(o) || (Le.add(o), console.warn(
171
+ Me.has(o) || (Me.add(o), console.warn(
172
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.`
173
173
  ));
174
174
  }
175
175
  }
176
- function Dt() {
176
+ function It() {
177
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;
178
+ return Ee() ? "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
179
  }
180
- function Me(r) {
180
+ function Oe(r) {
181
181
  let e = 200 * Math.pow(4, r), t = e * 0.2 * (Math.random() * 2 - 1);
182
182
  return Math.max(50, Math.round(e + t));
183
183
  }
184
- function Et(r) {
184
+ function Ot(r) {
185
185
  if (!r) return null;
186
186
  let e = Number(r);
187
- if (Number.isFinite(e) && e >= 0) return Math.min(Math.round(e * 1e3), Oe);
187
+ if (Number.isFinite(e) && e >= 0) return Math.min(Math.round(e * 1e3), xe);
188
188
  let t = Date.parse(r);
189
189
  if (Number.isFinite(t)) {
190
190
  let n = t - Date.now();
191
- if (n > 0) return Math.min(n, Oe);
191
+ if (n > 0) return Math.min(n, xe);
192
192
  }
193
193
  return null;
194
194
  }
195
- function xe(r) {
195
+ function Ae(r) {
196
196
  return new Promise((e) => setTimeout(e, r));
197
197
  }
198
- function Fe(r) {
198
+ function Ue(r) {
199
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";
200
200
  }
201
- function Lt(r, e, t) {
201
+ function xt(r, e, t) {
202
202
  let n = r.replace(/\/+$/, ""), o = e.startsWith("/") ? e : `/${e}`, i = new URL(`${n}${o}`);
203
203
  if (t)
204
204
  for (let [s, a] of Object.entries(t))
205
205
  a !== void 0 && i.searchParams.set(s, String(a));
206
206
  return i.toString();
207
207
  }
208
- async function Ae(r) {
208
+ async function Ne(r) {
209
209
  let e = await r.text();
210
210
  if (e)
211
211
  try {
@@ -214,26 +214,26 @@ async function Ae(r) {
214
214
  return;
215
215
  }
216
216
  }
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(
217
+ async function At(r, e) {
218
+ let t = e.method ?? "GET", n = xt(r.baseUrl, e.path, e.query), o = Lt.has(t) ? Pt : Et, i = e.retries ?? o, { headers: s, correlationId: a } = Ie(
219
219
  { accept: "application/json", ...e.headers },
220
220
  e.correlationId
221
- ), c = Ne();
221
+ ), c = qe();
222
222
  if (c && (s["x-neetru-sdk-version"] = c), e.requireAuth) {
223
223
  if (!r.apiKey)
224
- throw new g("missing_api_key", Dt());
224
+ throw new b("missing_api_key", It());
225
225
  s.authorization = `Bearer ${r.apiKey}`;
226
226
  }
227
227
  if (e.idempotencyKey) {
228
- let f = typeof e.idempotencyKey == "string" ? e.idempotencyKey : Te();
229
- s["idempotency-key"] = f;
228
+ let p = typeof e.idempotencyKey == "string" ? e.idempotencyKey : Re();
229
+ s["idempotency-key"] = p;
230
230
  }
231
231
  let l = e.body !== void 0 && t !== "GET" && t !== "DELETE" ? JSON.stringify(e.body) : void 0;
232
232
  l !== void 0 && (s["content-type"] = "application/json");
233
233
  let d = null, u = e.deadlineMs != null ? Date.now() + e.deadlineMs : null;
234
- for (let f = 0; f <= i; f++) {
234
+ for (let p = 0; p <= i; p++) {
235
235
  if (u != null && Date.now() >= u)
236
- throw d ?? new g(
236
+ throw d ?? new b(
237
237
  "network_error",
238
238
  "Deadline excedido antes de completar a request",
239
239
  void 0,
@@ -243,72 +243,72 @@ async function Mt(r, e) {
243
243
  );
244
244
  let h = { method: t, headers: s };
245
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 _;
246
+ let _ = u != null ? Math.max(1, Math.min(3e4, u - Date.now())) : 3e4;
247
+ h.signal = AbortSignal.timeout(_);
248
+ let y;
249
249
  try {
250
- _ = await r.fetch(n, h);
250
+ y = await r.fetch(n, h);
251
251
  } catch (m) {
252
252
  let O = m instanceof DOMException && m.name === "TimeoutError" ? "Network error: timeout after 30s" : `Network error: ${m instanceof Error ? m.message : "fetch failed"}`;
253
- if (d = new g("network_error", O, void 0, void 0, void 0, a), f < i) {
254
- let he = Me(f);
253
+ if (d = new b("network_error", O, void 0, void 0, void 0, a), p < i) {
254
+ let he = Oe(p);
255
255
  if (u == null || Date.now() + he < u) {
256
- await xe(he);
256
+ await Ae(he);
257
257
  continue;
258
258
  }
259
259
  }
260
260
  throw d;
261
261
  }
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(_);
262
+ let B = y.headers.get("x-request-id") ?? y.headers.get("x-correlation-id") ?? void 0;
263
+ if (y.ok) {
264
+ let m = y.headers.get("x-neetru-version");
265
+ return m && Fe(m), await Ne(y);
266
266
  }
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);
267
+ let g = await Ne(y), v = Ue(y.status), w = `HTTP ${y.status}`, C;
268
+ if (g && typeof g == "object") {
269
+ let m = g.error;
270
+ typeof m == "string" ? w = m : m && typeof m == "object" ? (typeof m.code == "string" && (v = m.code), typeof m.message == "string" && (w = m.message), typeof m.reason == "string" && (C = m.reason)) : (typeof g.code == "string" && (v = g.code), typeof g.message == "string" && (w = g.message)), typeof g.reason == "string" && (C = g.reason);
271
271
  }
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}.`);
272
+ if (y.status === 410) {
273
+ let m = y.headers.get("x-neetru-replacement");
274
+ w === `HTTP ${y.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}.`);
275
275
  }
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);
276
+ let fe = new b(v, w, y.status, B, C, a);
277
+ if (d = fe, Mt.has(v) && p < i) {
278
+ let O = Ot(y.headers.get("retry-after")) ?? Oe(p);
279
279
  if (u == null || Date.now() + O < u) {
280
- await xe(O);
280
+ await Ae(O);
281
281
  continue;
282
282
  }
283
283
  }
284
284
  throw fe;
285
285
  }
286
- throw d ?? new g("unknown", "unexpected httpRequest exit", void 0, void 0, void 0, a);
286
+ throw d ?? new b("unknown", "unexpected httpRequest exit", void 0, void 0, void 0, a);
287
287
  }
288
- var St, Le, kt, Ct, It, Pt, Oe, W = S(() => {
288
+ var Dt, Me, Pt, Et, Lt, Mt, xe, W = S(() => {
289
289
  x();
290
- Re();
291
- Ie();
292
- Ee();
293
- St = {
290
+ De();
291
+ Pe();
292
+ Le();
293
+ Dt = {
294
294
  // SDK major 3.x requer Core ≥ 2026.05.1 (suporte a X-Neetru-Version header,
295
295
  // runTransaction write-after-read, verifyWebhookRequest, webhooks 3.0+)
296
296
  3: "2026.05.1"
297
297
  };
298
- Le = /* @__PURE__ */ new Set();
299
- kt = 2, Ct = 0, It = /* @__PURE__ */ new Set(["GET", "HEAD"]), Pt = /* @__PURE__ */ new Set([
298
+ Me = /* @__PURE__ */ new Set();
299
+ Pt = 2, Et = 0, Lt = /* @__PURE__ */ new Set(["GET", "HEAD"]), Mt = /* @__PURE__ */ new Set([
300
300
  "rate_limited",
301
301
  "server_error",
302
302
  "network_error"
303
303
  ]);
304
- Oe = 6e4;
304
+ xe = 6e4;
305
305
  });
306
306
 
307
307
  // src/db/sql/resilient-pool.ts
308
308
  function J(r) {
309
309
  return typeof r == "object" && r !== null && r[ae] === true;
310
310
  }
311
- function Ot(r) {
311
+ function Nt(r) {
312
312
  let e = r && typeof r == "object" && "code" in r ? r.code : void 0;
313
313
  if (e === "ECONNREFUSED" || e === "ETIMEDOUT" || e === "ENOTFOUND" || e === "EHOSTUNREACH" || e === "EAI_AGAIN")
314
314
  return true;
@@ -320,56 +320,73 @@ function Ot(r) {
320
320
  let n = (r instanceof Error ? r.message : typeof r == "string" ? r : "").toLowerCase();
321
321
  return n.length === 0 ? false : !!(n.includes("certificate expired") || n.includes("certificate has expired") || n.includes("cert_has_expired") || n.includes("alert certificate expired") || n.includes("err_ssl") || n.includes("sslv3 alert") || n.includes("tlsv1 alert") || n.includes("econnrefused") || n.includes("etimedout") || n.includes("enotfound") || n.includes("ehostunreach") || n.includes("getaddrinfo"));
322
322
  }
323
+ function We(r) {
324
+ let e = r && typeof r == "object" && "code" in r ? r.code : void 0;
325
+ if (typeof e == "string" && qt.has(e.toUpperCase()))
326
+ return true;
327
+ let n = (r instanceof Error ? r.message : typeof r == "string" ? r : "").toLowerCase();
328
+ return n.length === 0 ? false : n.includes("password authentication failed") || n.includes("sasl authentication failed");
329
+ }
330
+ function Ft(r) {
331
+ return Nt(r) || We(r);
332
+ }
323
333
  function ce(r) {
324
334
  let e = { current: r }, t = null, n = {
325
- __neetruSwapInner(c) {
326
- let l = e.current;
327
- return e.current = c, l;
335
+ __neetruSwapInner(d) {
336
+ let u = e.current;
337
+ return e.current = d, u;
328
338
  },
329
339
  __neetruGetInner() {
330
340
  return e.current;
331
341
  },
332
- __neetruSetReLease(c) {
333
- t = c;
342
+ __neetruSetReLease(d) {
343
+ t = d;
334
344
  }
335
- }, o = (c, l) => c.query(...l), i = (...c) => c.length > 0 && typeof c[c.length - 1] == "function" ? o(e.current, c) : (async () => {
345
+ }, o = (d, u, p) => u[d](
346
+ ...p
347
+ ), i = (d, u) => (...p) => p.length > 0 && typeof p[p.length - 1] == "function" ? o(d, e.current, p) : (async () => {
336
348
  try {
337
- return await o(e.current, c);
338
- } catch (l) {
339
- let d = t;
340
- if (d === null || !Ot(l))
341
- throw l;
349
+ return await o(d, e.current, p);
350
+ } catch (h) {
351
+ let _ = t;
352
+ if (_ === null || !u(h))
353
+ throw h;
342
354
  try {
343
- await d();
355
+ await _();
344
356
  } catch {
345
- throw l;
357
+ throw h;
346
358
  }
347
- return await o(e.current, c);
359
+ return await o(d, e.current, p);
348
360
  }
349
- })(), s = Object.create(Object.getPrototypeOf(r));
350
- return new Proxy(s, {
351
- get(c, l) {
352
- if (l === ae) return true;
353
- if (l === "__neetruSwapInner") return n.__neetruSwapInner;
354
- if (l === "__neetruGetInner") return n.__neetruGetInner;
355
- if (l === "__neetruSetReLease") return n.__neetruSetReLease;
356
- if (l === "query") return i;
357
- if (l === "constructor")
361
+ })(), s = i("query", Ft), a = i("connect", We), c = Object.create(Object.getPrototypeOf(r));
362
+ return new Proxy(c, {
363
+ get(d, u) {
364
+ if (u === ae) return true;
365
+ if (u === "__neetruSwapInner") return n.__neetruSwapInner;
366
+ if (u === "__neetruGetInner") return n.__neetruGetInner;
367
+ if (u === "__neetruSetReLease") return n.__neetruSetReLease;
368
+ if (u === "query") return s;
369
+ if (u === "connect") {
370
+ let _ = e.current;
371
+ return typeof _.connect == "function" ? a : _.connect;
372
+ }
373
+ if (u === "constructor")
358
374
  return e.current.constructor;
359
- let d = e.current, u = Reflect.get(d, l, d);
360
- return typeof u == "function" ? u.bind(d) : u;
375
+ let p = e.current, h = Reflect.get(p, u, p);
376
+ return typeof h == "function" ? h.bind(p) : h;
361
377
  }
362
378
  });
363
379
  }
364
- var ae, le = S(() => {
380
+ var ae, qt, le = S(() => {
365
381
  ae = /* @__PURE__ */ Symbol.for("neetru.sdk.resilientPool");
382
+ qt = /* @__PURE__ */ new Set(["28P01", "28000"]);
366
383
  });
367
384
 
368
385
  // src/db/sql/lease.ts
369
- function At(r, e) {
386
+ function Wt(r, e) {
370
387
  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;
371
388
  }
372
- function Nt(r) {
389
+ function $t(r) {
373
390
  if (r instanceof exports.NeetruDbError) return r;
374
391
  let e = r instanceof Error ? r.message : String(r), t = r instanceof Error ? r.code : void 0;
375
392
  return typeof t == "string" && (t === "ECONNREFUSED" || t === "ENOTFOUND" || t === "ETIMEDOUT") ? new exports.NeetruDbError(
@@ -377,10 +394,10 @@ function Nt(r) {
377
394
  `Pool connection failed (${t}): ${e}`
378
395
  ) : 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}`);
379
396
  }
380
- var xt, M, $, Ue = S(() => {
397
+ var Ut, M, $, $e = S(() => {
381
398
  I();
382
399
  le();
383
- xt = 0.8, M = 3e4, $ = class {
400
+ Ut = 0.8, M = 3e4, $ = class {
384
401
  /**
385
402
  * Lease atual. `null` no modo LAZY antes da 1ª query (o 1º lease é adiado —
386
403
  * ver `_ensureInitialLease`). Após a 1ª aquisição, sempre não-nulo.
@@ -420,7 +437,7 @@ var xt, M, $, Ue = S(() => {
420
437
  isolationLevel: t.isolationLevel
421
438
  }) : await this._orm.transaction(e);
422
439
  } catch (n) {
423
- throw Nt(n);
440
+ throw $t(n);
424
441
  }
425
442
  }
426
443
  async close() {
@@ -443,7 +460,7 @@ var xt, M, $, Ue = S(() => {
443
460
  if (!Number.isFinite(e)) return M;
444
461
  let t = this._deps.now(), n = e - t;
445
462
  if (n <= 0) return M;
446
- let o = n * (1 - xt);
463
+ let o = n * (1 - Ut);
447
464
  return Math.max(M, Math.round(o));
448
465
  }
449
466
  _scheduleRenewal() {
@@ -472,7 +489,7 @@ var xt, M, $, Ue = S(() => {
472
489
  this._renewalTimer = setTimeout(() => {
473
490
  this._doRenew();
474
491
  }, 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):`,
492
+ `[SqlLeaseManager] renova\xE7\xE3o E emiss\xE3o de lease novo falharam; re-tentando em ${M}ms (o cert de cliente mTLS do lease expira ~15min ap\xF3s o \xFAltimo swap):`,
476
493
  t instanceof Error ? t.message : t
477
494
  );
478
495
  return;
@@ -484,10 +501,13 @@ var xt, M, $, Ue = S(() => {
484
501
  /**
485
502
  * Recuperação REATIVA: chamado pelo wrapper resiliente (`resilient-pool.ts`)
486
503
  * quando uma query plana falha num erro de ESTABELECIMENTO de conexão (cert
487
- * TLS efêmero do servidor expirado no meio de uma request, ou timer de
488
- * renovação que não disparou). Emite um lease NOVO e faz o swap do pool interno
489
- * do wrapper com
490
- * o certificado fresco; o wrapper então re-tenta a query 1x no pool novo.
504
+ * TLS de cliente mTLS do lease expirado no meio de uma request, ou timer de
505
+ * renovação que não disparou) ou de AUTENTICAÇÃO (senha rotacionada por
506
+ * `rotate-credentials` antes do próximo renew — SQLSTATE 28P01/28000, ou o
507
+ * 08P01+SASL do PgBouncer; também no `connect()` de uma transação). Emite um
508
+ * lease NOVO e faz o swap do pool interno do wrapper com a credencial e o
509
+ * certificado frescos (o pool velho é drenado com `end()`); o wrapper então
510
+ * re-tenta a operação 1x no pool novo.
491
511
  *
492
512
  * Vai DIRETO ao lease novo (sem `leaseId`) — a conexão falhou porque o
493
513
  * certificado do lease atual está ruim, então `renew` (que depende do lease
@@ -579,7 +599,7 @@ var xt, M, $, Ue = S(() => {
579
599
  * Exposto como método protegido para testes.
580
600
  */
581
601
  async _swapPool(e) {
582
- if (!At(this._lease, e)) {
602
+ if (!Wt(this._lease, e)) {
583
603
  this._lease = e;
584
604
  return;
585
605
  }
@@ -606,29 +626,29 @@ var xt, M, $, Ue = S(() => {
606
626
  });
607
627
 
608
628
  // src/db/sql/sql-client.ts
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,
629
+ var Ge = {};
630
+ me(Ge, {
631
+ DEFAULT_POOL_CONNECT_TIMEOUT_MS: () => Ke,
632
+ DEFAULT_POOL_IDLE_MS: () => ze,
633
+ DEFAULT_POOL_MAX: () => Qe,
634
+ LEASE_ENDPOINT: () => Be,
635
+ LEASE_RENEW_ENDPOINT: () => Ve,
636
+ createDrizzleHandle: () => Qt,
637
+ createHttpLeaseFetcher: () => je,
638
+ createPgPool: () => jt,
639
+ createSqlClientFromConfig: () => Kt,
640
+ createSqlClientWithDeps: () => He,
621
641
  resolvePoolTuning: () => ue
622
642
  });
623
- function qt(r) {
643
+ function Bt(r) {
624
644
  return r === "workspace" ? "staging" : r === "prod" ? "production" : "dev-local";
625
645
  }
626
- function Be(r) {
646
+ function je(r) {
627
647
  return async (e) => {
628
- let { httpRequest: t } = await Promise.resolve().then(() => (W(), U)), n = !!e?.leaseId, o = n ? $e : We, i;
648
+ let { httpRequest: t } = await Promise.resolve().then(() => (W(), U)), n = !!e?.leaseId, o = n ? Ve : Be, i;
629
649
  n ? i = { leaseId: e.leaseId } : (i = {
630
650
  productId: r.productId ?? "",
631
- environment: qt(r.env ?? "prod")
651
+ environment: Bt(r.env ?? "prod")
632
652
  }, e?.database !== void 0 && (i.database = e.database));
633
653
  let s;
634
654
  try {
@@ -641,7 +661,7 @@ function Be(r) {
641
661
  retries: 2
642
662
  });
643
663
  } catch (a) {
644
- let c = n ? "renovar" : "obter", l = a instanceof Error ? a.message : String(a), d = a instanceof g ? a.reason : void 0;
664
+ let c = n ? "renovar" : "obter", l = a instanceof Error ? a.message : String(a), d = a instanceof b ? a.reason : void 0;
645
665
  if (d === "suspended" || d === "archived" || d === "revoked") {
646
666
  let u = d === "suspended" ? "ambiente suspenso \u2014 a m\xE1quina que o servia parou; ser\xE1 religado quando o ambiente voltar" : d === "archived" ? "ambiente arquivado \u2014 este banco foi arquivado e n\xE3o aceita mais conex\xF5es" : "lease revogado \u2014 as credenciais deste ambiente foram revogadas pelo Core";
647
667
  throw new exports.NeetruDbError(
@@ -654,10 +674,10 @@ function Be(r) {
654
674
  `Falha ao ${c} lease SQL: ${l}`
655
675
  );
656
676
  }
657
- return Ft(s);
677
+ return Vt(s);
658
678
  };
659
679
  }
660
- function Ft(r) {
680
+ function Vt(r) {
661
681
  if (!r || typeof r != "object")
662
682
  throw new exports.NeetruDbError("db_unavailable", "Resposta de lease inv\xE1lida (n\xE3o \xE9 objeto).");
663
683
  let t = r.lease;
@@ -699,12 +719,12 @@ function ue() {
699
719
  return {
700
720
  // Teto 100: bem abaixo do `max_client_conn = 500` do PgBouncer, com folga
701
721
  // para múltiplas instâncias do app dividirem o mesmo front-door.
702
- max: de("NEETRU_DB_POOL_MAX", Ve, 1, 100),
722
+ max: de("NEETRU_DB_POOL_MAX", Qe, 1, 100),
703
723
  // Teto 15min = janela do cert; piso 1s.
704
- idleTimeoutMillis: de("NEETRU_DB_POOL_IDLE_MS", je, 1e3, 9e5),
724
+ idleTimeoutMillis: de("NEETRU_DB_POOL_IDLE_MS", ze, 1e3, 9e5),
705
725
  connectionTimeoutMillis: de(
706
726
  "NEETRU_DB_POOL_CONNECT_TIMEOUT_MS",
707
- Qe,
727
+ Ke,
708
728
  1e3,
709
729
  12e4
710
730
  ),
@@ -712,7 +732,7 @@ function ue() {
712
732
  keepAliveInitialDelayMillis: 1e4
713
733
  };
714
734
  }
715
- async function Ut(r) {
735
+ async function jt(r) {
716
736
  let { Pool: e } = await import(
717
737
  /* webpackIgnore: true */
718
738
  'pg'
@@ -732,14 +752,14 @@ async function Ut(r) {
732
752
  ...ue()
733
753
  });
734
754
  }
735
- async function Wt(r, e) {
755
+ async function Qt(r, e) {
736
756
  let { drizzle: t } = await import(
737
757
  /* webpackIgnore: true */
738
758
  'drizzle-orm/node-postgres'
739
759
  );
740
760
  return t(r, { schema: e });
741
761
  }
742
- function $t(r, e) {
762
+ function zt(r, e) {
743
763
  let t = null, n = null, o = () => t ? Promise.resolve(t) : (n || (n = e().then((s) => (t = s, n = null, s)).catch((s) => {
744
764
  throw n = null, s;
745
765
  })), n), i = {
@@ -755,10 +775,10 @@ function $t(r, e) {
755
775
  };
756
776
  return r && Object.setPrototypeOf(i, r), i;
757
777
  }
758
- async function ze(r, e) {
778
+ async function He(r, e) {
759
779
  let t = e?.database !== void 0 ? { ...r, database: e.database } : r;
760
780
  if (t.lazy) {
761
- let c = null, l = $t(t.poolPrototype ?? null, () => {
781
+ let c = null, l = zt(t.poolPrototype ?? null, () => {
762
782
  if (!c)
763
783
  throw new exports.NeetruDbError("db_unavailable", "SQL client n\xE3o inicializado (manager ausente).");
764
784
  return c._ensureInitialLease();
@@ -766,11 +786,11 @@ async function ze(r, e) {
766
786
  try {
767
787
  u = t.createDrizzle(d, t.schema);
768
788
  } 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}`);
789
+ let _ = h instanceof Error ? h.message : String(h);
790
+ throw new exports.NeetruDbError("db_unavailable", `Falha ao criar handle Drizzle: ${_}`);
771
791
  }
772
- let f = new $(null, d, u, t);
773
- return c = f, d.__neetruSetReLease(() => f._reactiveReLease()), f;
792
+ let p = new $(null, d, u, t);
793
+ return c = p, d.__neetruSetReLease(() => p._reactiveReLease()), p;
774
794
  }
775
795
  let n;
776
796
  try {
@@ -799,8 +819,8 @@ async function ze(r, e) {
799
819
  let a = new $(n, i, s, t);
800
820
  return i.__neetruSetReLease(() => a._reactiveReLease()), a;
801
821
  }
802
- async function Bt(r, e, t) {
803
- let n = Be(r), o, i;
822
+ async function Kt(r, e, t) {
823
+ let n = je(r), o, i;
804
824
  try {
805
825
  o = await import(
806
826
  /* webpackIgnore: true */
@@ -816,7 +836,7 @@ async function Bt(r, e, t) {
816
836
  );
817
837
  }
818
838
  let s = o.Pool ?? o.default?.Pool;
819
- return ze(
839
+ return He(
820
840
  {
821
841
  fetchLease: n,
822
842
  createPool: (l) => {
@@ -851,24 +871,37 @@ async function Bt(r, e, t) {
851
871
  t
852
872
  );
853
873
  }
854
- var We, $e, Ve, je, Qe, He = S(() => {
874
+ var Be, Ve, Qe, ze, Ke, Xe = S(() => {
855
875
  I();
856
876
  x();
857
- Ue();
877
+ $e();
858
878
  le();
859
- We = "/api/sdk/v1/db/lease", $e = "/api/sdk/v1/db/lease/renew";
860
- Ve = 10, je = 6e4, Qe = 1e4;
879
+ Be = "/api/sdk/v1/db/lease", Ve = "/api/sdk/v1/db/lease/renew";
880
+ Qe = 10, ze = 6e4, Ke = 1e4;
861
881
  });
862
882
 
863
883
  // src/db/client-db.ts
864
884
  I();
865
885
 
866
- // src/db/offline/query-engine.ts
886
+ // src/runtime-env.ts
887
+ function tt() {
888
+ try {
889
+ if (typeof process < "u" && process.env)
890
+ return process.env.NODE_ENV === "production";
891
+ } catch {
892
+ }
893
+ return false;
894
+ }
867
895
  function _e(r) {
896
+ return r === "dev" && !tt();
897
+ }
898
+
899
+ // src/db/offline/query-engine.ts
900
+ function ye(r) {
868
901
  return r == null ? 0 : typeof r == "number" ? 1 : typeof r == "string" ? 2 : typeof r == "boolean" ? 3 : 4;
869
902
  }
870
903
  function A(r, e) {
871
- let t = _e(r), n = _e(e);
904
+ let t = ye(r), n = ye(e);
872
905
  if (t !== n) return t - n;
873
906
  if (r == null) return 0;
874
907
  if (typeof r == "number" && typeof e == "number") return r - e;
@@ -886,7 +919,7 @@ function Z(r, e) {
886
919
  }
887
920
  return n;
888
921
  }
889
- function Ze(r, e) {
922
+ function nt(r, e) {
890
923
  let t = Z(r, e.field);
891
924
  if (t === void 0) return false;
892
925
  let { op: n, value: o } = e;
@@ -917,10 +950,10 @@ function Ze(r, e) {
917
950
  );
918
951
  }
919
952
  }
920
- function et(r, e) {
921
- return e.every((t) => Ze(r, t));
953
+ function rt(r, e) {
954
+ return e.every((t) => nt(r, t));
922
955
  }
923
- function tt(r) {
956
+ function ot(r) {
924
957
  return (e, t) => {
925
958
  if (r) {
926
959
  let n = Z(e.data, r.field), o = Z(t.data, r.field), i = A(n, o);
@@ -930,7 +963,7 @@ function tt(r) {
930
963
  return e.id < t.id ? -1 : e.id > t.id ? 1 : 0;
931
964
  };
932
965
  }
933
- function nt(r, e) {
966
+ function it(r, e) {
934
967
  let t = r.findIndex((n) => n.id === e.docId);
935
968
  return t === -1 ? r : e.type === "startAfter" ? r.slice(t + 1) : r.slice(0, t);
936
969
  }
@@ -948,9 +981,9 @@ var P = class r {
948
981
  evaluate(e, t) {
949
982
  let n = e.filter((d) => !d.meta.deleted), o = t.where ?? [];
950
983
  o.length > 0 && (n = n.filter(
951
- (d) => et(d.data, o)
984
+ (d) => rt(d.data, o)
952
985
  ));
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);
986
+ let i = ot(t.orderBy), s = [...n].sort(i), a = t.cursor ? it(s, t.cursor) : s, c = Math.min(t.limit ?? 20, 500);
954
987
  return {
955
988
  docs: a.slice(0, c).map((d) => ({ id: d.id, data: d.data })),
956
989
  // `incomplete` é sempre true aqui — o QueryEngine não sabe se o cache
@@ -970,7 +1003,7 @@ var P = class r {
970
1003
  };
971
1004
 
972
1005
  // src/db/offline/local-store.ts
973
- var ot = 1, T = "documents", R = "mutations", N = "query_cache", V = "sync_meta", E = "conflict_log", j = class {
1006
+ var at = 1, T = "documents", R = "mutations", N = "query_cache", V = "sync_meta", E = "conflict_log", j = class {
974
1007
  db = null;
975
1008
  dbName;
976
1009
  constructor(e) {
@@ -982,7 +1015,7 @@ var ot = 1, T = "documents", R = "mutations", N = "query_cache", V = "sync_meta"
982
1015
  * Idempotente — chamadas subsequentes são no-ops se o banco já está aberto.
983
1016
  */
984
1017
  async open() {
985
- this.db === null && (this.db = await idb.openDB(this.dbName, ot, {
1018
+ this.db === null && (this.db = await idb.openDB(this.dbName, at, {
986
1019
  upgrade(e) {
987
1020
  if (!e.objectStoreNames.contains(T)) {
988
1021
  let t = e.createObjectStore(T, {
@@ -1392,7 +1425,7 @@ var z = class {
1392
1425
  async enqueue(e) {
1393
1426
  let { collection: t, op: n, payload: o, baseVersion: i, batchId: s, upsert: a } = e, c = e.docId ?? (n === "add" ? ee() : "");
1394
1427
  await this.syncSeq();
1395
- let d = (await this.store.listMutations({ collection: t, docId: c })).filter((h) => h.status === "queued").sort((h, v) => v.seq - h.seq)[0];
1428
+ let d = (await this.store.listMutations({ collection: t, docId: c })).filter((h) => h.status === "queued").sort((h, _) => _.seq - h.seq)[0];
1396
1429
  if (d !== void 0) {
1397
1430
  let h = this.tryCoalesce(d, n, o, s, a);
1398
1431
  if (h !== null) {
@@ -1411,11 +1444,11 @@ var z = class {
1411
1444
  status: "queued",
1412
1445
  batchId: s
1413
1446
  };
1414
- let { coalesced: v } = h;
1415
- return await this.store.putMutation(v), v;
1447
+ let { coalesced: _ } = h;
1448
+ return await this.store.putMutation(_), _;
1416
1449
  }
1417
1450
  }
1418
- let f = {
1451
+ let p = {
1419
1452
  seq: this.nextSeq(),
1420
1453
  mutationId: ee(),
1421
1454
  collection: t,
@@ -1431,7 +1464,7 @@ var z = class {
1431
1464
  // bug_0273e4dd: só persiste o flag quando verdadeiro (mantém o doc limpo).
1432
1465
  ...a ? { upsert: true } : {}
1433
1466
  };
1434
- return await this.store.putMutation(f), f;
1467
+ return await this.store.putMutation(p), p;
1435
1468
  }
1436
1469
  // ─── Leitura da fila ─────────────────────────────────────────────────────────
1437
1470
  /**
@@ -1531,10 +1564,10 @@ var z = class {
1531
1564
 
1532
1565
  // src/db/field-value.ts
1533
1566
  var te = "__neetru__";
1534
- function it() {
1567
+ function ct() {
1535
1568
  return { __neetru__: "serverTimestamp" };
1536
1569
  }
1537
- function st(r) {
1570
+ function lt(r) {
1538
1571
  if (typeof r != "number" || !Number.isFinite(r))
1539
1572
  throw new TypeError(
1540
1573
  `increment(n): n deve ser um n\xFAmero finito (recebido: ${String(r)}).`
@@ -1544,19 +1577,19 @@ function st(r) {
1544
1577
  function D(r) {
1545
1578
  return typeof r == "object" && r !== null && te in r && typeof r[te] == "string";
1546
1579
  }
1547
- function ye(r) {
1580
+ function ge(r) {
1548
1581
  return D(r) && r.__neetru__ === "serverTimestamp";
1549
1582
  }
1550
- function ge(r) {
1583
+ function be(r) {
1551
1584
  return D(r) && r.__neetru__ === "increment" && typeof r.operand == "number" && Number.isFinite(r.operand);
1552
1585
  }
1553
- function at(r, e) {
1554
- return ye(r) ? Date.now() : ge(r) ? (typeof e == "number" && Number.isFinite(e) ? e : 0) + r.operand : r;
1586
+ function dt(r, e) {
1587
+ return ge(r) ? Date.now() : be(r) ? (typeof e == "number" && Number.isFinite(e) ? e : 0) + r.operand : r;
1555
1588
  }
1556
1589
  function k(r, e) {
1557
1590
  let t = false, n = {};
1558
1591
  for (let [o, i] of Object.entries(r))
1559
- D(i) ? (t = true, n[o] = at(i, e?.[o])) : n[o] = i;
1592
+ D(i) ? (t = true, n[o] = dt(i, e?.[o])) : n[o] = i;
1560
1593
  return t ? n : r;
1561
1594
  }
1562
1595
  function ne(r) {
@@ -1566,11 +1599,11 @@ function ne(r) {
1566
1599
  }
1567
1600
 
1568
1601
  // src/db/offline/sync-engine.ts
1569
- var ct = 8, lt = 1e3, dt = 300 * 1e3, re = "truncatedCollections";
1570
- function ut(r) {
1602
+ var ut = 8, pt = 1e3, ft = 300 * 1e3, re = "truncatedCollections";
1603
+ function ht(r) {
1571
1604
  return r !== null && ne(r);
1572
1605
  }
1573
- function pt(r) {
1606
+ function mt(r) {
1574
1607
  if (r === null) return null;
1575
1608
  if (!ne(r)) return r;
1576
1609
  let e = {};
@@ -1772,13 +1805,13 @@ var K = class {
1772
1805
  }), s.push({ type: "removed", collection: e, doc: { id: t, data: a.data } }));
1773
1806
  return;
1774
1807
  }
1775
- let l = pt(i.payload) ?? a?.data ?? {}, d = {
1808
+ let l = mt(i.payload) ?? a?.data ?? {}, d = {
1776
1809
  collection: e,
1777
1810
  id: t,
1778
1811
  data: i.op === "update" ? { ...a?.data ?? {}, ...l } : (
1779
1812
  // add/set: se o payload tinha sentinels, o cache otimista (existing.data)
1780
1813
  // é a fonte de verdade até o pull; senão usa o payload literal.
1781
- ut(i.payload) ? { ...a?.data ?? {}, ...l } : l
1814
+ ht(i.payload) ? { ...a?.data ?? {}, ...l } : l
1782
1815
  ),
1783
1816
  meta: {
1784
1817
  serverVersion: n,
@@ -1931,7 +1964,7 @@ var K = class {
1931
1964
  * pending do doc no cache + registra `lastError`/dispara `onError`.
1932
1965
  */
1933
1966
  async _retryOrDeadLetter(e, t, n) {
1934
- if (e.attempts + 1 < ct) {
1967
+ if (e.attempts + 1 < ut) {
1935
1968
  await this._queue.markRetry(e.mutationId, t);
1936
1969
  return;
1937
1970
  }
@@ -1972,7 +2005,7 @@ var K = class {
1972
2005
  }
1973
2006
  /** Backoff exponencial keyed em `attempts`, com teto `BACKOFF_CAP_MS`. */
1974
2007
  _backoffDelayMs(e) {
1975
- return Math.min(lt * 2 ** (e - 1), dt);
2008
+ return Math.min(pt * 2 ** (e - 1), ft);
1976
2009
  }
1977
2010
  // ─── FASE 2 — pull (reconciliar o cache) ─────────────────────────────────────
1978
2011
  /**
@@ -2224,7 +2257,7 @@ var K = class {
2224
2257
  };
2225
2258
 
2226
2259
  // src/db/offline/conflict-resolver.ts
2227
- function be(r, e) {
2260
+ function ve(r, e) {
2228
2261
  return e === null ? false : r === null ? true : e > r;
2229
2262
  }
2230
2263
  var H = class r {
@@ -2261,7 +2294,7 @@ var H = class r {
2261
2294
  resolvedData: t.data,
2262
2295
  conflictRecord: null
2263
2296
  };
2264
- if (!be(
2297
+ if (!ve(
2265
2298
  e.meta.updatedAtServer,
2266
2299
  t.meta.updatedAtServer
2267
2300
  ))
@@ -2308,7 +2341,7 @@ var H = class r {
2308
2341
  let i = t.data;
2309
2342
  if (e === null)
2310
2343
  return { outcome: "no_conflict", resolvedData: { ...i, ...n.payload ?? {} }, conflictRecord: null };
2311
- if (!be(
2344
+ if (!ve(
2312
2345
  e.meta.updatedAtServer,
2313
2346
  t.meta.updatedAtServer
2314
2347
  ))
@@ -2386,7 +2419,7 @@ var H = class r {
2386
2419
  };
2387
2420
 
2388
2421
  // src/db/offline/change-bus.ts
2389
- function ft(r) {
2422
+ function _t(r) {
2390
2423
  return `${r.collection}::${r.doc.id}`;
2391
2424
  }
2392
2425
  var G = class {
@@ -2434,7 +2467,7 @@ var G = class {
2434
2467
  if (e.length === 0) return;
2435
2468
  let t = /* @__PURE__ */ new Map();
2436
2469
  for (let i of e)
2437
- t.set(ft(i), i);
2470
+ t.set(_t(i), i);
2438
2471
  let n = Array.from(t.values()), o = /* @__PURE__ */ new Map();
2439
2472
  for (let i of n)
2440
2473
  o.has(i.collection) || o.set(i.collection, []), o.get(i.collection).push(i);
@@ -2753,15 +2786,15 @@ var q = class {
2753
2786
 
2754
2787
  // src/db/collection-ref.ts
2755
2788
  I();
2756
- function ht() {
2789
+ function yt() {
2757
2790
  return typeof indexedDB > "u" || typeof window > "u";
2758
2791
  }
2759
- var ve = /^[a-z0-9][a-z0-9_-]{0,62}$/;
2760
- function mt(r) {
2761
- if (!ve.test(r))
2792
+ var we = /^[a-z0-9][a-z0-9_-]{0,62}$/;
2793
+ function gt(r) {
2794
+ if (!we.test(r))
2762
2795
  throw new exports.NeetruDbError(
2763
2796
  "db_invalid_query",
2764
- `Nome de cole\xE7\xE3o inv\xE1lido: "${r}". Deve seguir o padr\xE3o ${ve}.`
2797
+ `Nome de cole\xE7\xE3o inv\xE1lido: "${r}". Deve seguir o padr\xE3o ${we}.`
2765
2798
  );
2766
2799
  }
2767
2800
  function L(r, e = "id") {
@@ -2771,7 +2804,7 @@ function L(r, e = "id") {
2771
2804
  `${e} \xE9 obrigat\xF3rio e deve ser uma string n\xE3o-vazia.`
2772
2805
  );
2773
2806
  }
2774
- function _t(r) {
2807
+ function bt(r) {
2775
2808
  let e = {};
2776
2809
  if (r?.where && (e.where = r.where.map((t) => ({
2777
2810
  field: t.field,
@@ -2788,7 +2821,7 @@ function _t(r) {
2788
2821
  }
2789
2822
  return e;
2790
2823
  }
2791
- function yt(r, e) {
2824
+ function vt(r, e) {
2792
2825
  if (r.length < e) return null;
2793
2826
  let t = r[r.length - 1];
2794
2827
  return t ? btoa(JSON.stringify({ type: "startAfter", docId: t.id })) : null;
@@ -2835,11 +2868,11 @@ var oe = class {
2835
2868
  }
2836
2869
  /** Constrói um DbListResult para a coleção com query opcional. */
2837
2870
  async _buildListResult(e) {
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;
2871
+ let t = bt(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 = vt(o.docs, n), l = await this._store.getMeta(re), d = Array.isArray(l) && l.includes(this._collection), u = !s || a.status === "offline" || d, p = i || a.lastSyncedAt === null || u;
2839
2872
  return {
2840
2873
  docs: o.docs.map((h) => ({ id: h.id, data: h.data })),
2841
2874
  nextCursor: c,
2842
- fromCache: f,
2875
+ fromCache: p,
2843
2876
  stale: u,
2844
2877
  hasPendingWrites: i,
2845
2878
  changes: [],
@@ -3013,7 +3046,7 @@ var oe = class {
3013
3046
  doc: { id: s, data: l }
3014
3047
  });
3015
3048
  } else if (o.kind === "update") {
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({
3049
+ 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 }, p = await this._queue.enqueue({
3017
3050
  collection: i,
3018
3051
  docId: s,
3019
3052
  op: "update",
@@ -3034,7 +3067,7 @@ var oe = class {
3034
3067
  state: "pending",
3035
3068
  pendingMutationIds: [
3036
3069
  ...c?.meta.pendingMutationIds ?? [],
3037
- f.mutationId
3070
+ p.mutationId
3038
3071
  ],
3039
3072
  deleted: false,
3040
3073
  ownerId: c?.meta.ownerId ?? null
@@ -3178,7 +3211,7 @@ var oe = class {
3178
3211
  this._store = e.store, this._queue = e.queue, this._bus = e.bus, this._engine = e.engine, this._connectivity = e.connectivity;
3179
3212
  }
3180
3213
  collection(e) {
3181
- return mt(e), new oe(
3214
+ return gt(e), new oe(
3182
3215
  e,
3183
3216
  this._store,
3184
3217
  this._queue,
@@ -3207,8 +3240,8 @@ var oe = class {
3207
3240
  return this._engine.onError(e);
3208
3241
  }
3209
3242
  };
3210
- async function we(r) {
3211
- let e = ht() ? new Q() : new j(r.dbName);
3243
+ async function Se(r) {
3244
+ let e = yt() ? new Q() : new j(r.dbName);
3212
3245
  await e.open();
3213
3246
  let t = new z(e), n = new H(), o = new G(), i = new X({
3214
3247
  // Se startOnline=false, injeta um navigator falso
@@ -3243,9 +3276,9 @@ async function we(r) {
3243
3276
  }
3244
3277
 
3245
3278
  // src/db/realtime/realtime-client.ts
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)}`;
3279
+ var wt = 0;
3280
+ function Te() {
3281
+ return typeof globalThis.crypto?.randomUUID == "function" ? globalThis.crypto.randomUUID() : `nrt-sub-${Date.now()}-${++wt}-${Math.random().toString(36).slice(2)}`;
3249
3282
  }
3250
3283
  var F = class {
3251
3284
  // ── configuração ──────────────────────────────────────────────────────────
@@ -3285,7 +3318,7 @@ var F = class {
3285
3318
  _pendingFrames = [];
3286
3319
  // ── construtor ────────────────────────────────────────────────────────────
3287
3320
  constructor(e) {
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();
3321
+ this._gatewayUrl = e.gatewayUrl, this._wsFactory = e.webSocketFactory ?? St, 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();
3289
3322
  }
3290
3323
  // ── API pública ───────────────────────────────────────────────────────────
3291
3324
  /**
@@ -3299,8 +3332,8 @@ var F = class {
3299
3332
  */
3300
3333
  subscribe(e, t, n) {
3301
3334
  if (this._closed)
3302
- return Se();
3303
- let o = Se();
3335
+ return Te();
3336
+ let o = Te();
3304
3337
  this._subscriptions.set(o, {
3305
3338
  subscriptionId: o,
3306
3339
  collection: e,
@@ -3564,7 +3597,7 @@ var F = class {
3564
3597
  _detachHandlers(e) {
3565
3598
  e.onopen = null, e.onmessage = null, e.onclose = null, e.onerror = null;
3566
3599
  }
3567
- }, bt = (r) => {
3600
+ }, St = (r) => {
3568
3601
  if (typeof WebSocket > "u")
3569
3602
  throw new Error(
3570
3603
  "[NeetruRealtimeClient] WebSocket n\xE3o dispon\xEDvel neste ambiente. Injete uma implementa\xE7\xE3o via `webSocketFactory` nas op\xE7\xF5es."
@@ -3574,11 +3607,11 @@ var F = class {
3574
3607
 
3575
3608
  // src/db/client-db.ts
3576
3609
  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);
3610
+ var Ht = (r) => `/api/sdk/v1/datastore/${encodeURIComponent(r)}`, Y = (r, e) => `/api/sdk/v1/datastore/${encodeURIComponent(r)}/${encodeURIComponent(e)}`, Je = 200;
3611
+ function Gt(r, e, t) {
3612
+ return e._transport ? e._transport : r === "firestore" && e.firestoreTransport ? e.firestoreTransport : r === "nosql-vm" && e.realtimeGatewayUrl ? Xt(e.realtimeGatewayUrl, t, e) : Ye(t);
3580
3613
  }
3581
- function Xe(r) {
3614
+ function Ye(r) {
3582
3615
  return {
3583
3616
  async pushMutations(e) {
3584
3617
  if (!r)
@@ -3628,11 +3661,11 @@ function Xe(r) {
3628
3661
  } catch (a) {
3629
3662
  let c = a instanceof Error ? a.message : String(a), l = a?.code, d = a?.status;
3630
3663
  if (l === "forbidden" || l === "unauthorized" || l === "not_found" || l === "conflict" || l === "validation_failed" || typeof d == "number" && d >= 400 && d < 500 && d !== 408 && d !== 429) {
3631
- let f = l === "forbidden" || l === "unauthorized" ? "rejected_permission" : "rejected_validation";
3664
+ let p = l === "forbidden" || l === "unauthorized" ? "rejected_permission" : "rejected_validation";
3632
3665
  n.push({
3633
3666
  mutationId: s.mutationId,
3634
3667
  outcome: "rejected",
3635
- reason: f,
3668
+ reason: p,
3636
3669
  serverVersion: null,
3637
3670
  serverData: null
3638
3671
  });
@@ -3656,7 +3689,7 @@ function Xe(r) {
3656
3689
  try {
3657
3690
  l = await t(r, {
3658
3691
  method: "GET",
3659
- path: Vt(c),
3692
+ path: Ht(c),
3660
3693
  requireAuth: !0,
3661
3694
  retries: 2,
3662
3695
  headers: o,
@@ -3664,37 +3697,37 @@ function Xe(r) {
3664
3697
  // TRUNCADAS — reportadas em `truncatedCollections` p/ o SyncEngine
3665
3698
  // (a) NÃO rodar deleção-por-ausência e (b) sinalizar
3666
3699
  // `DbListResult.truncated`. Paginação por cursor é tarefa Core (gated).
3667
- query: { limit: Ge }
3700
+ query: { limit: Je }
3668
3701
  });
3669
- } catch (f) {
3670
- let h = f instanceof Error ? f.message : String(f);
3702
+ } catch (p) {
3703
+ let h = p instanceof Error ? p.message : String(p);
3671
3704
  throw new exports.NeetruDbError(
3672
3705
  "db_unavailable",
3673
3706
  `[RestSyncTransport] fullResync falhou na cole\xE7\xE3o "${c}": ${h}`
3674
3707
  );
3675
3708
  }
3676
3709
  let d = l, u = Array.isArray(d?.items) ? d.items : [];
3677
- u.length >= Ge && a.push(c);
3678
- for (let f of u) {
3679
- if (!f || typeof f != "object") continue;
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);
3710
+ u.length >= Je && a.push(c);
3711
+ for (let p of u) {
3712
+ if (!p || typeof p != "object") continue;
3713
+ let h = p, _ = typeof h.id == "string" ? h.id : null;
3714
+ if (!_) continue;
3715
+ let { id: y, ...B } = h, g = i, v = B._updatedAt;
3716
+ if (typeof v == "number")
3717
+ g = v;
3718
+ else if (v !== null && typeof v == "object" && typeof v._seconds == "number")
3719
+ g = v._seconds * 1e3;
3720
+ else if (typeof v == "string") {
3721
+ let C = Date.parse(v);
3722
+ Number.isNaN(C) || (g = C);
3690
3723
  }
3691
- let w = `rest_${v}_${y}`;
3724
+ let w = `rest_${_}_${g}`;
3692
3725
  s.push({
3693
3726
  collection: c,
3694
- id: v,
3727
+ id: _,
3695
3728
  data: B,
3696
3729
  serverVersion: w,
3697
- serverTimestamp: y,
3730
+ serverTimestamp: g,
3698
3731
  deleted: false
3699
3732
  });
3700
3733
  }
@@ -3703,10 +3736,10 @@ function Xe(r) {
3703
3736
  }
3704
3737
  };
3705
3738
  }
3706
- function Qt(r, e, t) {
3707
- let n = Xe(e), o = new F({
3739
+ function Xt(r, e, t) {
3740
+ let n = Ye(e), o = new F({
3708
3741
  gatewayUrl: r,
3709
- ticketProvider: zt(e, t),
3742
+ ticketProvider: Jt(e, t),
3710
3743
  dbId: t.dbId,
3711
3744
  webSocketFactory: t._wsFactory
3712
3745
  });
@@ -3742,7 +3775,7 @@ function Qt(r, e, t) {
3742
3775
  }
3743
3776
  };
3744
3777
  }
3745
- function zt(r, e) {
3778
+ function Jt(r, e) {
3746
3779
  return async () => {
3747
3780
  let { httpRequest: t } = await Promise.resolve().then(() => (W(), U));
3748
3781
  return await t(r, {
@@ -3757,27 +3790,27 @@ function zt(r, e) {
3757
3790
  });
3758
3791
  };
3759
3792
  }
3760
- function zn(r, e, t, n) {
3793
+ function Zn(r, e, t, n) {
3761
3794
  return new F({ gatewayUrl: r, ticketProvider: e, dbId: t, webSocketFactory: n });
3762
3795
  }
3763
3796
  var pe = false;
3764
- function Kn() {
3797
+ function er() {
3765
3798
  pe = false;
3766
3799
  }
3767
- function Kt(r, e) {
3800
+ function Yt(r, e) {
3768
3801
  pe || e.dbId && r.env !== "prod" && (typeof window > "u" || typeof console > "u" || typeof console.warn != "function" || (pe = true, console.warn(
3769
3802
  '[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.'
3770
3803
  )));
3771
3804
  }
3772
- function Hn(r, e = {}) {
3773
- Kt(r, e);
3805
+ function tr(r, e = {}) {
3806
+ Yt(r, e);
3774
3807
  let t;
3775
3808
  e.transport !== void 0 ? t = e.transport : e.engine !== void 0 ? (console.warn(
3776
3809
  '[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).'
3777
3810
  ), t = e.engine) : t = "rest";
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;
3811
+ let n = Gt(t, e, r), o = e.dbId ?? "default", i = e.dbName ?? `neetru-db__${r.productId ?? "sdk"}__${o}__${r.env}`, s = null, a = null;
3779
3812
  function c() {
3780
- return s || (s = we({
3813
+ return s || (s = Se({
3781
3814
  dbName: i,
3782
3815
  transport: n,
3783
3816
  singleTab: e.singleTab ?? r.env !== "prod"
@@ -3785,15 +3818,15 @@ function Hn(r, e = {}) {
3785
3818
  }
3786
3819
  return {
3787
3820
  collection(l) {
3788
- return a ? a.collection(l) : Ht(l, c);
3821
+ return a ? a.collection(l) : Zt(l, c);
3789
3822
  },
3790
3823
  async sql(l, d) {
3791
- if (r.env === "dev")
3824
+ if (_e(r.env))
3792
3825
  throw new exports.NeetruDbError(
3793
3826
  "db_unavailable",
3794
3827
  "[SDK] db.sql() n\xE3o dispon\xEDvel em NEETRU_ENV=dev. Use `neetru dev` para subir o container Postgres local."
3795
3828
  );
3796
- return (await Promise.resolve().then(() => (He(), Ke))).createSqlClientFromConfig(r, l, d);
3829
+ return (await Promise.resolve().then(() => (Xe(), Ge))).createSqlClientFromConfig(r, l, d);
3797
3830
  },
3798
3831
  get syncState() {
3799
3832
  return a?.syncState ?? {
@@ -3806,8 +3839,8 @@ function Hn(r, e = {}) {
3806
3839
  onSyncStateChanged(l) {
3807
3840
  if (a) return a.onSyncStateChanged(l);
3808
3841
  let d = null, u = false;
3809
- return c().then((f) => {
3810
- u || (d = f.onSyncStateChanged(l));
3842
+ return c().then((p) => {
3843
+ u || (d = p.onSyncStateChanged(l));
3811
3844
  }), () => {
3812
3845
  u = true, d?.();
3813
3846
  };
@@ -3824,15 +3857,15 @@ function Hn(r, e = {}) {
3824
3857
  onError(l) {
3825
3858
  if (a) return a.onError(l);
3826
3859
  let d = null, u = false;
3827
- return c().then((f) => {
3828
- u || (d = f.onError(l));
3860
+ return c().then((p) => {
3861
+ u || (d = p.onError(l));
3829
3862
  }), () => {
3830
3863
  u = true, d?.();
3831
3864
  };
3832
3865
  }
3833
3866
  };
3834
3867
  }
3835
- function Ht(r, e) {
3868
+ function Zt(r, e) {
3836
3869
  async function t() {
3837
3870
  return (await e()).collection(r);
3838
3871
  }
@@ -3911,12 +3944,12 @@ function Ht(r, e) {
3911
3944
  }
3912
3945
 
3913
3946
  exports.NEETRU_SENTINEL_KEY = te;
3914
- exports.__resetDbIdWarningForTests = Kn;
3915
- exports.createNeetruDb = Hn;
3916
- exports.createRestSyncTransport = Xe;
3917
- exports.getWebSocketRealtimeClient = zn;
3918
- exports.increment = st;
3947
+ exports.__resetDbIdWarningForTests = er;
3948
+ exports.createNeetruDb = tr;
3949
+ exports.createRestSyncTransport = Ye;
3950
+ exports.getWebSocketRealtimeClient = Zn;
3951
+ exports.increment = lt;
3919
3952
  exports.isFieldSentinel = D;
3920
- exports.isIncrementSentinel = ge;
3921
- exports.isServerTimestampSentinel = ye;
3922
- exports.serverTimestamp = it;
3953
+ exports.isIncrementSentinel = be;
3954
+ exports.isServerTimestampSentinel = ge;
3955
+ exports.serverTimestamp = ct;