tempest-react-sdk 0.82.0 → 0.83.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 (41) hide show
  1. package/README.md +6 -6
  2. package/bin/lib/openapi/generate.hostile.test.mjs +91 -0
  3. package/bin/lib/openapi/generate.mjs +42 -3
  4. package/dist/auth/create-tempest-auth.cjs +1 -1
  5. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  6. package/dist/auth/create-tempest-auth.js +135 -132
  7. package/dist/auth/create-tempest-auth.js.map +1 -1
  8. package/dist/http/resumable-upload.cjs +1 -1
  9. package/dist/http/resumable-upload.cjs.map +1 -1
  10. package/dist/http/resumable-upload.js +124 -75
  11. package/dist/http/resumable-upload.js.map +1 -1
  12. package/dist/http/upload-with-progress.cjs +1 -1
  13. package/dist/http/upload-with-progress.cjs.map +1 -1
  14. package/dist/http/upload-with-progress.js +100 -44
  15. package/dist/http/upload-with-progress.js.map +1 -1
  16. package/dist/query/offline-persistence.cjs +1 -1
  17. package/dist/query/offline-persistence.cjs.map +1 -1
  18. package/dist/query/offline-persistence.js +57 -44
  19. package/dist/query/offline-persistence.js.map +1 -1
  20. package/dist/sw/cache.cjs +1 -1
  21. package/dist/sw/cache.cjs.map +1 -1
  22. package/dist/sw/cache.js +82 -32
  23. package/dist/sw/cache.js.map +1 -1
  24. package/dist/sw.d.ts +21 -1
  25. package/dist/tempest-react-sdk.d.ts +90 -6
  26. package/dist/vite/base-url.cjs +1 -1
  27. package/dist/vite/base-url.cjs.map +1 -1
  28. package/dist/vite/base-url.js +5 -1
  29. package/dist/vite/base-url.js.map +1 -1
  30. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  31. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  32. package/dist/vite/tempest-pwa-dev-sw.js +96 -31
  33. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  34. package/dist/vite/tempest-pwa-manifest.cjs +2 -2
  35. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  36. package/dist/vite/tempest-pwa-manifest.js +32 -16
  37. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  38. package/dist/vite.cjs +1 -1
  39. package/dist/vite.d.ts +63 -12
  40. package/dist/vite.js +4 -4
  41. package/package.json +1 -1
@@ -14,67 +14,67 @@ function c(e, t) {
14
14
  });
15
15
  });
16
16
  }
17
- function ee() {
17
+ function l() {
18
18
  let e = globalThis.crypto;
19
19
  return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
20
20
  }
21
- var te = "unlineaged", l = /* @__PURE__ */ new Set();
22
- function ne(t) {
23
- e() && !l.has(t) && (l.add(t), console.warn("[tempest-react-sdk] createTempestAuth: withCredentials is set without logoutPath. logout() cannot clear the HttpOnly refresh cookie, so the next refresh() — the boot restore — signs the same account back in. Pass logoutPath (the backend's cookie logout route) so the server revokes it."));
21
+ var u = /* @__PURE__ */ new Set();
22
+ function ee(t) {
23
+ e() && !u.has(t) && (u.add(t), console.warn("[tempest-react-sdk] createTempestAuth: withCredentials is set without logoutPath. logout() cannot clear the HttpOnly refresh cookie, so the next refresh() — the boot restore — signs the same account back in. Pass logoutPath (the backend's cookie logout route) so the server revokes it."));
24
24
  }
25
- function re(e) {
25
+ function te(e) {
26
26
  let t = e ?? {};
27
27
  return {
28
28
  token: t.access_token,
29
29
  refreshToken: t.refresh_token
30
30
  };
31
31
  }
32
- function u(l) {
33
- let { baseURL: u, prefix: d, loginPath: ie = "/api/auth/login", refreshPath: ae = "/api/auth/refresh", logoutPath: f, onLogoutError: oe, mePath: p, storeName: m = "tempest-auth", storage: h = "local", withCredentials: g = !1, csrf: _, fetcher: se, parseTokens: v = re, parseUser: ce, refreshBody: y = (e) => e ? { refresh_token: e } : void 0, retry: le, redirectTo: b, onSessionEnd: x } = l;
34
- g && !f && ne(m);
35
- let S = i({
36
- name: m,
37
- storage: h
38
- }), C = `${m}-refresh`;
39
- function w() {
40
- return typeof window > "u" ? null : h === "session" ? window.sessionStorage : window.localStorage;
41
- }
32
+ function d(u) {
33
+ let { baseURL: d, prefix: f, loginPath: ne = "/api/auth/login", refreshPath: re = "/api/auth/refresh", logoutPath: p, onLogoutError: ie, mePath: m, storeName: h = "tempest-auth", storage: g = "local", withCredentials: _ = !1, csrf: ae, fetcher: v, parseTokens: y = te, parseUser: oe, refreshBody: b = (e) => e ? { refresh_token: e } : void 0, retry: se, redirectTo: x, onSessionEnd: S } = u;
34
+ _ && !p && ee(h);
35
+ let C = i({
36
+ name: h,
37
+ storage: g
38
+ }), w = `${h}-refresh`;
42
39
  function T() {
43
- return w()?.getItem(C) ?? null;
40
+ return typeof window > "u" ? null : g === "session" ? window.sessionStorage : window.localStorage;
41
+ }
42
+ function E() {
43
+ return T()?.getItem(w) ?? null;
44
44
  }
45
- let E = T();
46
- function D(e) {
47
- E = e;
48
- let t = w();
49
- t && (e ? t.setItem(C, e) : t.removeItem(C));
45
+ let D = E();
46
+ function O(e) {
47
+ D = e;
48
+ let t = T();
49
+ t && (e ? t.setItem(w, e) : t.removeItem(w));
50
50
  }
51
- let O = `${m}-lineage`, ue = `tempest-react-sdk:${m}:refresh`, k = w()?.getItem(O) ?? null;
52
- function A(e) {
53
- k = e;
54
- let t = w();
55
- t && (e ? t.setItem(O, e) : t.removeItem(O));
51
+ let k = `${h}-lineage`, ce = `tempest-react-sdk:${h}:refresh`, A = T()?.getItem(k) ?? null;
52
+ function j(e) {
53
+ A = e;
54
+ let t = T();
55
+ t && (e ? t.setItem(k, e) : t.removeItem(k));
56
56
  }
57
- let j = () => S.getState(), M = () => j().token;
58
- async function de() {
59
- if (!p) return j().user;
60
- let e = N, n;
57
+ let M = () => C.getState(), N = () => M().token;
58
+ async function le() {
59
+ if (!m) return M().user;
60
+ let e = P, n;
61
61
  try {
62
- n = await Q.get(p, { skipAuthRetry: !0 });
62
+ n = await Q.get(m, { skipAuthRetry: !0 });
63
63
  } catch (n) {
64
- throw N === e ? n : new t();
64
+ throw P === e ? n : new t();
65
65
  }
66
- if (N !== e || !Z().continues) throw new t();
67
- return j().setUser(n), n;
66
+ if (P !== e || !Z().continues) throw new t();
67
+ return M().setUser(n), n;
68
68
  }
69
- let N = 0, P = Promise.resolve(), F = 0, I = /* @__PURE__ */ new Set(), L = /* @__PURE__ */ new Set(), R = /* @__PURE__ */ new Set(), z = /* @__PURE__ */ new Set();
69
+ let P = 0, ue = Promise.resolve(), F = 0, I = /* @__PURE__ */ new Set(), L = /* @__PURE__ */ new Set(), R = /* @__PURE__ */ new Set(), z = /* @__PURE__ */ new Set();
70
70
  function B(e) {
71
71
  let t = e.then(() => void 0, () => void 0);
72
72
  return R.add(t), t.then(() => R.delete(t)), e;
73
73
  }
74
- function fe(t) {
74
+ function de(t) {
75
75
  e() && console.warn("[tempest-react-sdk] createTempestAuth: logoutPath revocation failed", t);
76
76
  try {
77
- oe?.(t);
77
+ ie?.(t);
78
78
  } catch {
79
79
  return;
80
80
  }
@@ -84,42 +84,42 @@ function u(l) {
84
84
  try {
85
85
  await e();
86
86
  } catch (e) {
87
- fe(e);
87
+ de(e);
88
88
  }
89
89
  })();
90
90
  return L.add(t), t.then(() => L.delete(t)), t;
91
91
  }
92
92
  function H(e, t) {
93
- f && !g && t && V(() => U(e).post(f, { body: y(t) }));
93
+ p && !_ && t && V(() => U(e).post(p, { body: b(t) }));
94
94
  }
95
95
  function U(e) {
96
96
  return n({
97
- baseURL: u,
98
- prefix: d,
99
- withCredentials: g,
100
- csrf: _,
101
- fetcher: se,
97
+ baseURL: d,
98
+ prefix: f,
99
+ withCredentials: _,
100
+ csrf: ae,
101
+ fetcher: v,
102
102
  getToken: () => e
103
103
  });
104
104
  }
105
105
  function W() {
106
- N += 1, K = a(G);
106
+ P += 1, K = a(G);
107
107
  }
108
108
  async function G() {
109
- let e = M(), t = N;
109
+ let e = N(), t = P;
110
110
  z.add(t);
111
111
  try {
112
- await pe(() => me(e));
112
+ await fe(() => pe(e));
113
113
  } finally {
114
114
  z.delete(t);
115
115
  }
116
116
  }
117
- async function pe(e) {
118
- let t = h === "local" && typeof navigator < "u" ? navigator.locks : void 0;
117
+ async function fe(e) {
118
+ let t = g === "local" && typeof navigator < "u" ? navigator.locks : void 0;
119
119
  if (!t) return e();
120
120
  let n = new AbortController(), r = setTimeout(() => n.abort(), s), i = !1;
121
121
  try {
122
- await t.request(ue, { signal: n.signal }, async () => {
122
+ await t.request(ce, { signal: n.signal }, async () => {
123
123
  i = !0, clearTimeout(r), await e();
124
124
  });
125
125
  } catch (t) {
@@ -127,48 +127,48 @@ function u(l) {
127
127
  clearTimeout(r), await e();
128
128
  }
129
129
  }
130
- async function me(e) {
131
- let n = e !== null || j().user !== null || E !== null, r = Z();
132
- if (!n && M() !== null) return;
130
+ async function pe(e) {
131
+ let n = e !== null || M().user !== null || D !== null, r = Z();
132
+ if (!n && N() !== null) return;
133
133
  if (!r.continues) throw new t();
134
- if (M() !== e) return;
135
- let i = N, a;
134
+ if (N() !== e) return;
135
+ let i = P, a;
136
136
  try {
137
- a = await B(Q.post(ae, {
138
- body: y(T()),
137
+ a = await B(Q.post(re, {
138
+ body: b(E()),
139
139
  skipAuth: !0
140
140
  }));
141
141
  } catch (e) {
142
- throw N === i ? e : new t();
142
+ throw P === i ? e : new t();
143
143
  }
144
- let { token: o, refreshToken: s } = v(a);
145
- if (N !== i || !Z().continues) throw H(o ?? null, s), new t();
146
- j().setToken(o), s && D(s);
144
+ let { token: o, refreshToken: s } = y(a);
145
+ if (P !== i || !Z().continues) throw H(o ?? null, s), new t();
146
+ n || j(l()), M().setToken(o), s && O(s);
147
147
  }
148
148
  let K = a(G);
149
149
  function q(e) {
150
- let t = M();
150
+ let t = N();
151
151
  return t === null ? !1 : e.token === null || e.token !== t;
152
152
  }
153
153
  function J() {
154
- return M() === null && T() === null;
154
+ return N() === null && E() === null;
155
155
  }
156
- async function he() {
157
- if (!(I.size > 0 && F === 0 && (await Promise.allSettled([...I]), M() !== null))) throw Error("anonymous 401 with no session");
156
+ async function me() {
157
+ if (!(I.size > 0 && F === 0 && (await Promise.allSettled([...I]), N() !== null))) throw Error("anonymous 401 with no session");
158
158
  }
159
- async function ge(e) {
160
- if (e.epoch !== null && e.epoch !== N) throw new t();
159
+ async function he(e) {
160
+ if (e.epoch !== null && e.epoch !== P) throw new t();
161
161
  if (q(e)) {
162
162
  if (e.token === null) throw Error("anonymous 401 under a live session");
163
- } else return e.token === null && J() ? z.has(N) ? K() : he() : K();
163
+ } else return e.token === null && J() ? z.has(P) ? K() : me() : K();
164
164
  }
165
- async function _e(e, n) {
166
- if (n.epoch !== null && n.epoch !== N || !Z().continues) throw new t();
167
- q(n) || n.token === null && J() || await Ce();
165
+ async function ge(e, n) {
166
+ if (n.epoch !== null && n.epoch !== P || !Z().continues) throw new t();
167
+ q(n) || n.token === null && J() || await Se();
168
168
  }
169
- async function ve(e) {
169
+ async function _e(e) {
170
170
  L.size > 0 && await c([...L], o);
171
- let t = ye(e);
171
+ let t = ve(e);
172
172
  I.add(t);
173
173
  try {
174
174
  return await t;
@@ -176,22 +176,22 @@ function u(l) {
176
176
  I.delete(t);
177
177
  }
178
178
  }
179
- async function ye(e) {
180
- let n = N, r = await B(Q.post(ie, {
179
+ async function ve(e) {
180
+ let n = P, r = await B(Q.post(ne, {
181
181
  body: e,
182
182
  skipAuth: !0
183
- })), { token: i, refreshToken: a } = v(r);
184
- if (N !== n) throw H(i ?? null, a), new t();
185
- H(M(), T() ?? void 0);
186
- let { done: o } = Y("switch"), s = N;
187
- if (await o.catch(() => void 0), N !== s) throw new t();
188
- A(ee()), j().setToken(i), D(a ?? null);
189
- let c = ce?.(r);
190
- return c == null ? de() : (j().setUser(c), c);
183
+ })), { token: i, refreshToken: a } = y(r);
184
+ if (P !== n) throw H(i ?? null, a), new t();
185
+ H(N(), E() ?? void 0);
186
+ let { done: o } = Y("switch"), s = P;
187
+ if (await o.catch(() => void 0), P !== s) throw new t();
188
+ j(l()), M().setToken(i), O(a ?? null);
189
+ let c = oe?.(r);
190
+ return c == null ? le() : (M().setUser(c), c);
191
191
  }
192
192
  function Y(e) {
193
- let { user: t, token: n } = j(), r = n !== null || t !== null || T() !== null;
194
- return (r || e !== "expired") && W(), j().logout(), D(null), A(null), r ? {
193
+ let { user: t, token: n } = M(), r = n !== null || t !== null || E() !== null;
194
+ return (r || e !== "expired") && W(), M().logout(), O(null), j(null), r ? {
195
195
  live: r,
196
196
  done: X({
197
197
  reason: e,
@@ -201,16 +201,16 @@ function u(l) {
201
201
  })
202
202
  } : {
203
203
  live: r,
204
- done: e === "switch" || F === 0 ? P : Promise.resolve()
204
+ done: e === "switch" || F === 0 ? ue : Promise.resolve()
205
205
  };
206
206
  }
207
207
  function X(e) {
208
- if (!x) return Promise.resolve();
208
+ if (!S) return Promise.resolve();
209
209
  let t = U(e.token);
210
210
  F += 1;
211
211
  let n = (async () => {
212
212
  try {
213
- await x({
213
+ await S({
214
214
  ...e,
215
215
  api: t
216
216
  });
@@ -218,12 +218,12 @@ function u(l) {
218
218
  --F;
219
219
  }
220
220
  })();
221
- return P = n.then(() => void 0, () => void 0), n.then(() => void 0);
221
+ return ue = n.then(() => void 0, () => void 0), n.then(() => void 0);
222
222
  }
223
- function be() {
224
- let e = w();
223
+ function ye() {
224
+ let e = T();
225
225
  if (!e) return null;
226
- let t = e.getItem(C), n = e.getItem(O), r = e.getItem(m);
226
+ let t = e.getItem(w), n = e.getItem(k), r = e.getItem(h);
227
227
  if (!r) return {
228
228
  user: null,
229
229
  token: null,
@@ -248,18 +248,18 @@ function u(l) {
248
248
  }
249
249
  }
250
250
  function Z() {
251
- let e = be(), { user: t, token: n } = j();
251
+ let e = ye(), { user: t, token: n } = M();
252
252
  if (e === null) return {
253
253
  continues: !0,
254
254
  done: Promise.resolve()
255
255
  };
256
256
  let r = JSON.stringify(e.user) === JSON.stringify(t);
257
- if (e.token === n && e.refreshToken === E && e.lineage === k && r) return {
257
+ if (e.token === n && e.refreshToken === D && e.lineage === A && r) return {
258
258
  continues: !0,
259
259
  done: Promise.resolve()
260
260
  };
261
- let i = e.lineage !== null || k !== null ? e.lineage === k : e.token === n || n !== null && r, a = e.token !== null && i, o = n !== null || t !== null || E !== null;
262
- if (a || W(), E = e.refreshToken, k = e.lineage, S.setState({
261
+ let i = e.lineage !== null || A !== null ? e.lineage === A : e.token === n || n !== null && r, a = e.token !== null && i, o = n !== null || t !== null || D !== null;
262
+ if (a || W(), D = e.refreshToken, A = e.lineage, C.setState({
263
263
  user: e.user,
264
264
  token: e.token,
265
265
  isAuthenticated: e.token !== null
@@ -278,55 +278,58 @@ function u(l) {
278
278
  done: s
279
279
  };
280
280
  }
281
- function xe() {
282
- if (!f) return null;
283
- let e = f, { token: t, user: n } = j(), r = T();
284
- if (!g && t === null && n === null && r === null) return null;
285
- let i = g ? [...R] : [];
286
- return V(async () => (await c(i, o), U(t).post(e, { body: y(r) })));
281
+ function be() {
282
+ if (!p) return null;
283
+ let e = p, { token: t, user: n } = M(), r = E();
284
+ if (!_ && t === null && n === null && r === null) return null;
285
+ let i = _ ? [...R] : [];
286
+ return V(async () => (await c(i, o), U(t).post(e, { body: b(r) })));
287
287
  }
288
- function Se() {
288
+ function xe() {
289
289
  let e = Z();
290
290
  if (!e.continues) return e.done;
291
- let t = xe(), { done: n } = Y("logout");
291
+ let t = be(), { done: n } = Y("logout");
292
292
  return t ? Promise.all([t, n]).then(() => void 0) : n;
293
293
  }
294
- async function Ce() {
294
+ async function Se() {
295
295
  let { live: e, done: t } = Y("expired");
296
- await t.catch(() => void 0), e && b && typeof window < "u" && window.location.assign(b);
296
+ await t.catch(() => void 0), e && x && typeof window < "u" && window.location.assign(x);
297
297
  }
298
298
  let Q = n({
299
- baseURL: u,
300
- prefix: d,
301
- withCredentials: g,
302
- csrf: _,
303
- fetcher: se,
304
- getToken: M,
305
- getSessionEpoch: () => N,
306
- refresh: ge,
307
- retry: le,
308
- onUnauthorized: _e
309
- }), we = () => K(), Te = () => M() === null ? null : k ?? te, Ee = {
310
- current: Te,
311
- subscribe: (e) => S.subscribe(e)
299
+ baseURL: d,
300
+ prefix: f,
301
+ withCredentials: _,
302
+ csrf: ae,
303
+ fetcher: v,
304
+ getToken: N,
305
+ getSessionEpoch: () => P,
306
+ refresh: he,
307
+ retry: se,
308
+ onUnauthorized: ge
309
+ }), Ce = () => K(), $ = null, we = () => N() === null ? null : A === null ? ($?.epoch !== P && ($ = {
310
+ epoch: P,
311
+ key: l()
312
+ }), $.key) : A, Te = {
313
+ current: we,
314
+ subscribe: (e) => C.subscribe(e)
312
315
  };
313
- r(Q, Ee), r(M, Ee);
314
- function De(e) {
315
- e.storageArea === w() && (e.key === null || e.key === m || e.key === C || e.key === O) && Z();
316
+ r(Q, Te), r(N, Te);
317
+ function Ee(e) {
318
+ e.storageArea === T() && (e.key === null || e.key === h || e.key === w || e.key === k) && Z();
316
319
  }
317
- let $ = typeof window > "u" ? null : window;
318
- return $?.addEventListener("storage", De), {
319
- useAuthStore: S,
320
+ let De = typeof window > "u" ? null : window;
321
+ return De?.addEventListener("storage", Ee), {
322
+ useAuthStore: C,
320
323
  api: Q,
321
- login: ve,
322
- logout: Se,
323
- refresh: we,
324
- getToken: M,
325
- sessionKey: Te,
326
- dispose: () => $?.removeEventListener("storage", De)
324
+ login: _e,
325
+ logout: xe,
326
+ refresh: Ce,
327
+ getToken: N,
328
+ sessionKey: we,
329
+ dispose: () => De?.removeEventListener("storage", Ee)
327
330
  };
328
331
  }
329
332
  //#endregion
330
- export { u as createTempestAuth };
333
+ export { d as createTempestAuth };
331
334
 
332
335
  //# sourceMappingURL=create-tempest-auth.js.map