tempest-react-sdk 0.81.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 (194) hide show
  1. package/README.md +9 -10
  2. package/bin/create-tempest-app.e2e.test.mjs +31 -0
  3. package/bin/create-tempest-app.mjs +11 -1
  4. package/bin/lib/doctor/doctor.e2e.test.mjs +29 -0
  5. package/bin/lib/doctor/vitest.mjs +120 -0
  6. package/bin/lib/doctor/vitest.test.mjs +139 -0
  7. package/bin/lib/fs/contain.mjs +7 -0
  8. package/bin/lib/openapi/escape.mjs +68 -4
  9. package/bin/lib/openapi/generate.hostile.test.mjs +228 -0
  10. package/bin/lib/openapi/generate.mjs +119 -15
  11. package/bin/lib/openapi/pattern-risk.mjs +134 -0
  12. package/bin/lib/openapi/pattern-risk.test.mjs +45 -0
  13. package/bin/tempest-gen.test.mjs +100 -0
  14. package/bin/tempest.mjs +24 -8
  15. package/dist/access/use-can.cjs +1 -1
  16. package/dist/access/use-can.cjs.map +1 -1
  17. package/dist/access/use-can.js +25 -28
  18. package/dist/access/use-can.js.map +1 -1
  19. package/dist/auth/create-tempest-auth.cjs +1 -1
  20. package/dist/auth/create-tempest-auth.cjs.map +1 -1
  21. package/dist/auth/create-tempest-auth.js +189 -143
  22. package/dist/auth/create-tempest-auth.js.map +1 -1
  23. package/dist/auth/session-identity.cjs +2 -0
  24. package/dist/auth/session-identity.cjs.map +1 -0
  25. package/dist/auth/session-identity.js +12 -0
  26. package/dist/auth/session-identity.js.map +1 -0
  27. package/dist/br/boleto.cjs.map +1 -1
  28. package/dist/br/boleto.js.map +1 -1
  29. package/dist/components/AuthForm/AuthLinks.cjs +1 -1
  30. package/dist/components/AuthForm/AuthLinks.cjs.map +1 -1
  31. package/dist/components/AuthForm/AuthLinks.js +18 -15
  32. package/dist/components/AuthForm/AuthLinks.js.map +1 -1
  33. package/dist/components/AuthPage/AuthPage.cjs +1 -1
  34. package/dist/components/AuthPage/AuthPage.cjs.map +1 -1
  35. package/dist/components/AuthPage/AuthPage.js +58 -52
  36. package/dist/components/AuthPage/AuthPage.js.map +1 -1
  37. package/dist/components/Breadcrumbs/Breadcrumbs.cjs +1 -1
  38. package/dist/components/Breadcrumbs/Breadcrumbs.cjs.map +1 -1
  39. package/dist/components/Breadcrumbs/Breadcrumbs.js +22 -21
  40. package/dist/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  41. package/dist/components/Button/Button.cjs +1 -1
  42. package/dist/components/Button/Button.cjs.map +1 -1
  43. package/dist/components/Button/Button.js +41 -40
  44. package/dist/components/Button/Button.js.map +1 -1
  45. package/dist/components/Chat/ChatAttachments.cjs +1 -1
  46. package/dist/components/Chat/ChatAttachments.cjs.map +1 -1
  47. package/dist/components/Chat/ChatAttachments.js +38 -38
  48. package/dist/components/Form/Form.cjs +1 -1
  49. package/dist/components/Form/Form.cjs.map +1 -1
  50. package/dist/components/Form/Form.js +30 -32
  51. package/dist/components/Form/Form.js.map +1 -1
  52. package/dist/components/Layout/Layout.cjs +1 -1
  53. package/dist/components/Layout/Layout.cjs.map +1 -1
  54. package/dist/components/Layout/Layout.js +25 -24
  55. package/dist/components/Layout/Layout.js.map +1 -1
  56. package/dist/components/Layout/gap.cjs +2 -0
  57. package/dist/components/Layout/gap.cjs.map +1 -0
  58. package/dist/components/Layout/gap.js +15 -0
  59. package/dist/components/Layout/gap.js.map +1 -0
  60. package/dist/components/NavigationMenu/NavigationMenu.cjs +1 -1
  61. package/dist/components/NavigationMenu/NavigationMenu.cjs.map +1 -1
  62. package/dist/components/NavigationMenu/NavigationMenu.js +71 -70
  63. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -1
  64. package/dist/components/Sidebar/Sidebar.cjs.map +1 -1
  65. package/dist/components/Sidebar/Sidebar.js.map +1 -1
  66. package/dist/components/Sidebar/SidebarEntry.cjs +1 -1
  67. package/dist/components/Sidebar/SidebarEntry.cjs.map +1 -1
  68. package/dist/components/Sidebar/SidebarEntry.js +30 -29
  69. package/dist/components/Sidebar/SidebarEntry.js.map +1 -1
  70. package/dist/data/create-data-provider.cjs +1 -1
  71. package/dist/data/create-data-provider.cjs.map +1 -1
  72. package/dist/data/create-data-provider.js +1 -2
  73. package/dist/data/create-data-provider.js.map +1 -1
  74. package/dist/forms/validate-form.cjs +1 -1
  75. package/dist/forms/validate-form.cjs.map +1 -1
  76. package/dist/forms/validate-form.js +6 -1
  77. package/dist/forms/validate-form.js.map +1 -1
  78. package/dist/forms/zod-resolver.cjs +1 -1
  79. package/dist/forms/zod-resolver.cjs.map +1 -1
  80. package/dist/forms/zod-resolver.js +8 -3
  81. package/dist/forms/zod-resolver.js.map +1 -1
  82. package/dist/http/api-client.cjs +1 -1
  83. package/dist/http/api-client.cjs.map +1 -1
  84. package/dist/http/api-client.js +90 -72
  85. package/dist/http/api-client.js.map +1 -1
  86. package/dist/http/credential-scope.cjs +1 -1
  87. package/dist/http/credential-scope.cjs.map +1 -1
  88. package/dist/http/credential-scope.js +33 -9
  89. package/dist/http/credential-scope.js.map +1 -1
  90. package/dist/http/presigned-post.cjs.map +1 -1
  91. package/dist/http/presigned-post.js.map +1 -1
  92. package/dist/http/resumable-upload.cjs +1 -1
  93. package/dist/http/resumable-upload.cjs.map +1 -1
  94. package/dist/http/resumable-upload.js +167 -112
  95. package/dist/http/resumable-upload.js.map +1 -1
  96. package/dist/http/upload-with-progress.cjs +1 -1
  97. package/dist/http/upload-with-progress.cjs.map +1 -1
  98. package/dist/http/upload-with-progress.js +100 -44
  99. package/dist/http/upload-with-progress.js.map +1 -1
  100. package/dist/oauth/GoogleSignIn.cjs +1 -1
  101. package/dist/oauth/GoogleSignIn.cjs.map +1 -1
  102. package/dist/oauth/GoogleSignIn.js +5 -4
  103. package/dist/oauth/GoogleSignIn.js.map +1 -1
  104. package/dist/offline/create-offline-sync.cjs +1 -1
  105. package/dist/offline/create-offline-sync.cjs.map +1 -1
  106. package/dist/offline/create-offline-sync.js +87 -69
  107. package/dist/offline/create-offline-sync.js.map +1 -1
  108. package/dist/query/offline-persistence.cjs +1 -1
  109. package/dist/query/offline-persistence.cjs.map +1 -1
  110. package/dist/query/offline-persistence.js +67 -44
  111. package/dist/query/offline-persistence.js.map +1 -1
  112. package/dist/sse/create-event-stream.cjs +1 -1
  113. package/dist/sse/create-event-stream.cjs.map +1 -1
  114. package/dist/sse/create-event-stream.js +48 -41
  115. package/dist/sse/create-event-stream.js.map +1 -1
  116. package/dist/sse/ticket-event-stream.cjs +1 -1
  117. package/dist/sse/ticket-event-stream.cjs.map +1 -1
  118. package/dist/sse/ticket-event-stream.js +48 -19
  119. package/dist/sse/ticket-event-stream.js.map +1 -1
  120. package/dist/sse/use-event-stream.cjs +1 -1
  121. package/dist/sse/use-event-stream.cjs.map +1 -1
  122. package/dist/sse/use-event-stream.js +19 -14
  123. package/dist/sse/use-event-stream.js.map +1 -1
  124. package/dist/sw/background-sync.cjs +1 -1
  125. package/dist/sw/background-sync.cjs.map +1 -1
  126. package/dist/sw/background-sync.js +10 -8
  127. package/dist/sw/background-sync.js.map +1 -1
  128. package/dist/sw/cache.cjs +1 -1
  129. package/dist/sw/cache.cjs.map +1 -1
  130. package/dist/sw/cache.js +111 -55
  131. package/dist/sw/cache.js.map +1 -1
  132. package/dist/sw/create-push-handler.cjs +1 -1
  133. package/dist/sw/create-push-handler.cjs.map +1 -1
  134. package/dist/sw/create-push-handler.js +20 -10
  135. package/dist/sw/create-push-handler.js.map +1 -1
  136. package/dist/sw.d.ts +65 -14
  137. package/dist/tabular/compact.cjs +1 -1
  138. package/dist/tabular/compact.cjs.map +1 -1
  139. package/dist/tabular/compact.js +35 -16
  140. package/dist/tabular/compact.js.map +1 -1
  141. package/dist/tabular/manifest.cjs +1 -1
  142. package/dist/tabular/manifest.cjs.map +1 -1
  143. package/dist/tabular/manifest.js +33 -15
  144. package/dist/tabular/manifest.js.map +1 -1
  145. package/dist/tabular.d.ts +11 -1
  146. package/dist/tempest-react-sdk.cjs +1 -1
  147. package/dist/tempest-react-sdk.d.ts +543 -70
  148. package/dist/tempest-react-sdk.js +224 -224
  149. package/dist/theme/initial-theme.cjs +4 -4
  150. package/dist/theme/initial-theme.cjs.map +1 -1
  151. package/dist/theme/initial-theme.js +8 -5
  152. package/dist/theme/initial-theme.js.map +1 -1
  153. package/dist/utils/compressed-storage.cjs +1 -1
  154. package/dist/utils/compressed-storage.cjs.map +1 -1
  155. package/dist/utils/compressed-storage.js +13 -7
  156. package/dist/utils/compressed-storage.js.map +1 -1
  157. package/dist/utils/objects.cjs +1 -1
  158. package/dist/utils/objects.cjs.map +1 -1
  159. package/dist/utils/objects.js +13 -7
  160. package/dist/utils/objects.js.map +1 -1
  161. package/dist/utils/safe-url.cjs +1 -1
  162. package/dist/utils/safe-url.cjs.map +1 -1
  163. package/dist/utils/safe-url.js +4 -1
  164. package/dist/utils/safe-url.js.map +1 -1
  165. package/dist/vite/base-url.cjs +1 -1
  166. package/dist/vite/base-url.cjs.map +1 -1
  167. package/dist/vite/base-url.js +5 -1
  168. package/dist/vite/base-url.js.map +1 -1
  169. package/dist/vite/tempest-pwa-dev-sw.cjs +1 -1
  170. package/dist/vite/tempest-pwa-dev-sw.cjs.map +1 -1
  171. package/dist/vite/tempest-pwa-dev-sw.js +96 -31
  172. package/dist/vite/tempest-pwa-dev-sw.js.map +1 -1
  173. package/dist/vite/tempest-pwa-manifest.cjs +2 -2
  174. package/dist/vite/tempest-pwa-manifest.cjs.map +1 -1
  175. package/dist/vite/tempest-pwa-manifest.js +32 -16
  176. package/dist/vite/tempest-pwa-manifest.js.map +1 -1
  177. package/dist/vite.cjs +1 -1
  178. package/dist/vite.d.ts +63 -12
  179. package/dist/vite.js +4 -4
  180. package/dist/webrtc/peer-mesh.cjs +1 -1
  181. package/dist/webrtc/peer-mesh.cjs.map +1 -1
  182. package/dist/webrtc/peer-mesh.js +7 -1
  183. package/dist/webrtc/peer-mesh.js.map +1 -1
  184. package/dist/ws/create-web-socket.cjs +1 -1
  185. package/dist/ws/create-web-socket.cjs.map +1 -1
  186. package/dist/ws/create-web-socket.js +77 -61
  187. package/dist/ws/create-web-socket.js.map +1 -1
  188. package/dist/ws/use-web-socket.cjs +1 -1
  189. package/dist/ws/use-web-socket.cjs.map +1 -1
  190. package/dist/ws/use-web-socket.js +4 -3
  191. package/dist/ws/use-web-socket.js.map +1 -1
  192. package/package.json +1 -1
  193. package/template-pwa/src/pwa.tsx +42 -0
  194. package/template-pwa/src/sw.ts +5 -4
@@ -1,11 +1,12 @@
1
1
  import { isDevBuild as e } from "../utils/dev-mode.js";
2
2
  import { SessionSupersededError as t } from "../http/errors.js";
3
3
  import { createApiClient as n } from "../http/api-client.js";
4
- import { createAuthStore as r } from "./create-auth-store.js";
5
- import { createRefreshQueue as i } from "./refresh-queue.js";
4
+ import { bindSessionIdentity as r } from "./session-identity.js";
5
+ import { createAuthStore as i } from "./create-auth-store.js";
6
+ import { createRefreshQueue as a } from "./refresh-queue.js";
6
7
  //#region src/auth/create-tempest-auth.ts
7
- var a = 1e4;
8
- function o(e, t) {
8
+ var o = 1e4, s = 1e4;
9
+ function c(e, t) {
9
10
  return e.length === 0 ? Promise.resolve() : new Promise((n) => {
10
11
  let r = setTimeout(n, t);
11
12
  Promise.allSettled(e).then(() => {
@@ -13,20 +14,30 @@ function o(e, t) {
13
14
  });
14
15
  });
15
16
  }
16
- function s(e) {
17
+ function l() {
18
+ let e = globalThis.crypto;
19
+ return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
20
+ }
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
+ }
25
+ function te(e) {
17
26
  let t = e ?? {};
18
27
  return {
19
28
  token: t.access_token,
20
29
  refreshToken: t.refresh_token
21
30
  };
22
31
  }
23
- function c(c) {
24
- let { baseURL: l, prefix: u, loginPath: d = "/api/auth/login", refreshPath: ee = "/api/auth/refresh", logoutPath: f, onLogoutError: te, mePath: p, storeName: m = "tempest-auth", storage: h = "local", withCredentials: g = !1, csrf: _, fetcher: v, parseTokens: y = s, parseUser: ne, refreshBody: b = (e) => e ? { refresh_token: e } : void 0, retry: re, redirectTo: x, onSessionEnd: S } = c, C = r({
25
- name: m,
26
- storage: h
27
- }), w = `${m}-refresh`;
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`;
28
39
  function T() {
29
- return typeof window > "u" ? null : h === "session" ? window.sessionStorage : window.localStorage;
40
+ return typeof window > "u" ? null : g === "session" ? window.sessionStorage : window.localStorage;
30
41
  }
31
42
  function E() {
32
43
  return T()?.getItem(w) ?? null;
@@ -37,128 +48,152 @@ function c(c) {
37
48
  let t = T();
38
49
  t && (e ? t.setItem(w, e) : t.removeItem(w));
39
50
  }
40
- let k = () => C.getState(), A = () => k().token;
41
- async function ie() {
42
- if (!p) return k().user;
43
- let e = j, n;
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
+ }
57
+ let M = () => C.getState(), N = () => M().token;
58
+ async function le() {
59
+ if (!m) return M().user;
60
+ let e = P, n;
44
61
  try {
45
- n = await Z.get(p, { skipAuthRetry: !0 });
62
+ n = await Q.get(m, { skipAuthRetry: !0 });
46
63
  } catch (n) {
47
- throw j === e ? n : new t();
64
+ throw P === e ? n : new t();
48
65
  }
49
- if (j !== e) throw new t();
50
- return k().setUser(n), n;
66
+ if (P !== e || !Z().continues) throw new t();
67
+ return M().setUser(n), n;
51
68
  }
52
- let j = 0, M = Promise.resolve(), N = 0, P = /* @__PURE__ */ new Set(), F = /* @__PURE__ */ new Set(), I = /* @__PURE__ */ new Set(), L = /* @__PURE__ */ new Set();
53
- function R(e) {
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
+ function B(e) {
54
71
  let t = e.then(() => void 0, () => void 0);
55
- return I.add(t), t.then(() => I.delete(t)), e;
72
+ return R.add(t), t.then(() => R.delete(t)), e;
56
73
  }
57
- function ae(t) {
74
+ function de(t) {
58
75
  e() && console.warn("[tempest-react-sdk] createTempestAuth: logoutPath revocation failed", t);
59
76
  try {
60
- te?.(t);
77
+ ie?.(t);
61
78
  } catch {
62
79
  return;
63
80
  }
64
81
  }
65
- function z(e) {
82
+ function V(e) {
66
83
  let t = (async () => {
67
84
  try {
68
85
  await e();
69
86
  } catch (e) {
70
- ae(e);
87
+ de(e);
71
88
  }
72
89
  })();
73
- return F.add(t), t.then(() => F.delete(t)), t;
90
+ return L.add(t), t.then(() => L.delete(t)), t;
74
91
  }
75
- function B(e, t) {
76
- f && !g && t && z(() => V(e).post(f, { body: b(t) }));
92
+ function H(e, t) {
93
+ p && !_ && t && V(() => U(e).post(p, { body: b(t) }));
77
94
  }
78
- function V(e) {
95
+ function U(e) {
79
96
  return n({
80
- baseURL: l,
81
- prefix: u,
82
- withCredentials: g,
83
- csrf: _,
97
+ baseURL: d,
98
+ prefix: f,
99
+ withCredentials: _,
100
+ csrf: ae,
84
101
  fetcher: v,
85
102
  getToken: () => e
86
103
  });
87
104
  }
88
- function H() {
89
- j += 1, W = i(U);
105
+ function W() {
106
+ P += 1, K = a(G);
90
107
  }
91
- async function U() {
92
- let e = A();
93
- if (!X().continues) throw new t();
94
- if (A() !== e) return;
95
- let n = j;
96
- L.add(n);
108
+ async function G() {
109
+ let e = N(), t = P;
110
+ z.add(t);
97
111
  try {
98
- let e;
99
- try {
100
- e = await R(Z.post(ee, {
101
- body: b(E()),
102
- skipAuth: !0
103
- }));
104
- } catch (e) {
105
- throw j === n ? e : new t();
106
- }
107
- let { token: r, refreshToken: i } = y(e);
108
- if (j !== n || !X().continues) throw B(r ?? null, i), new t();
109
- k().setToken(r), i && O(i);
112
+ await fe(() => pe(e));
110
113
  } finally {
111
- L.delete(n);
114
+ z.delete(t);
112
115
  }
113
116
  }
114
- let W = i(U);
115
- function G(e) {
116
- let t = A();
117
+ async function fe(e) {
118
+ let t = g === "local" && typeof navigator < "u" ? navigator.locks : void 0;
119
+ if (!t) return e();
120
+ let n = new AbortController(), r = setTimeout(() => n.abort(), s), i = !1;
121
+ try {
122
+ await t.request(ce, { signal: n.signal }, async () => {
123
+ i = !0, clearTimeout(r), await e();
124
+ });
125
+ } catch (t) {
126
+ if (i) throw t;
127
+ clearTimeout(r), await e();
128
+ }
129
+ }
130
+ async function pe(e) {
131
+ let n = e !== null || M().user !== null || D !== null, r = Z();
132
+ if (!n && N() !== null) return;
133
+ if (!r.continues) throw new t();
134
+ if (N() !== e) return;
135
+ let i = P, a;
136
+ try {
137
+ a = await B(Q.post(re, {
138
+ body: b(E()),
139
+ skipAuth: !0
140
+ }));
141
+ } catch (e) {
142
+ throw P === i ? e : new t();
143
+ }
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
+ }
148
+ let K = a(G);
149
+ function q(e) {
150
+ let t = N();
117
151
  return t === null ? !1 : e.token === null || e.token !== t;
118
152
  }
119
- function K() {
120
- return A() === null && E() === null;
153
+ function J() {
154
+ return N() === null && E() === null;
121
155
  }
122
- async function q() {
123
- if (!(P.size > 0 && N === 0 && (await Promise.allSettled([...P]), A() !== 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");
124
158
  }
125
- async function oe(e) {
126
- if (e.epoch !== null && e.epoch !== j) throw new t();
127
- if (G(e)) {
159
+ async function he(e) {
160
+ if (e.epoch !== null && e.epoch !== P) throw new t();
161
+ if (q(e)) {
128
162
  if (e.token === null) throw Error("anonymous 401 under a live session");
129
- } else return e.token === null && K() ? L.has(j) ? W() : q() : W();
163
+ } else return e.token === null && J() ? z.has(P) ? K() : me() : K();
130
164
  }
131
- async function se(e, n) {
132
- if (n.epoch !== null && n.epoch !== j || !X().continues) throw new t();
133
- G(n) || n.token === null && K() || await pe();
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();
134
168
  }
135
- async function ce(e) {
136
- F.size > 0 && await o([...F], a);
137
- let t = le(e);
138
- P.add(t);
169
+ async function _e(e) {
170
+ L.size > 0 && await c([...L], o);
171
+ let t = ve(e);
172
+ I.add(t);
139
173
  try {
140
174
  return await t;
141
175
  } finally {
142
- P.delete(t);
176
+ I.delete(t);
143
177
  }
144
178
  }
145
- async function le(e) {
146
- let n = j, r = await R(Z.post(d, {
179
+ async function ve(e) {
180
+ let n = P, r = await B(Q.post(ne, {
147
181
  body: e,
148
182
  skipAuth: !0
149
183
  })), { token: i, refreshToken: a } = y(r);
150
- if (j !== n) throw B(i ?? null, a), new t();
151
- let { done: o } = J("switch"), s = j;
152
- if (await o.catch(() => void 0), j !== s) throw new t();
153
- k().setToken(i), O(a ?? null);
154
- let c = ne?.(r);
155
- return c == null ? ie() : (k().setUser(c), c);
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);
156
191
  }
157
- function J(e) {
158
- let { user: t, token: n } = k(), r = n !== null || t !== null || E() !== null;
159
- return (r || e !== "expired") && H(), k().logout(), O(null), r ? {
192
+ function Y(e) {
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 ? {
160
195
  live: r,
161
- done: Y({
196
+ done: X({
162
197
  reason: e,
163
198
  user: t,
164
199
  token: n,
@@ -166,13 +201,13 @@ function c(c) {
166
201
  })
167
202
  } : {
168
203
  live: r,
169
- done: e === "switch" || N === 0 ? M : Promise.resolve()
204
+ done: e === "switch" || F === 0 ? ue : Promise.resolve()
170
205
  };
171
206
  }
172
- function Y(e) {
207
+ function X(e) {
173
208
  if (!S) return Promise.resolve();
174
- let t = V(e.token);
175
- N += 1;
209
+ let t = U(e.token);
210
+ F += 1;
176
211
  let n = (async () => {
177
212
  try {
178
213
  await S({
@@ -180,110 +215,121 @@ function c(c) {
180
215
  api: t
181
216
  });
182
217
  } finally {
183
- --N;
218
+ --F;
184
219
  }
185
220
  })();
186
- return M = n.then(() => void 0, () => void 0), n.then(() => void 0);
221
+ return ue = n.then(() => void 0, () => void 0), n.then(() => void 0);
187
222
  }
188
- function ue() {
223
+ function ye() {
189
224
  let e = T();
190
225
  if (!e) return null;
191
- let t = e.getItem(w), n = e.getItem(m);
192
- if (!n) return {
226
+ let t = e.getItem(w), n = e.getItem(k), r = e.getItem(h);
227
+ if (!r) return {
193
228
  user: null,
194
229
  token: null,
195
- refreshToken: t
230
+ refreshToken: t,
231
+ lineage: n
196
232
  };
197
233
  try {
198
- let e = JSON.parse(n);
234
+ let e = JSON.parse(r);
199
235
  return {
200
236
  user: e.state?.user ?? null,
201
237
  token: e.state?.token ?? null,
202
- refreshToken: t
238
+ refreshToken: t,
239
+ lineage: n
203
240
  };
204
241
  } catch {
205
242
  return {
206
243
  user: null,
207
244
  token: null,
208
- refreshToken: t
245
+ refreshToken: t,
246
+ lineage: n
209
247
  };
210
248
  }
211
249
  }
212
- function X() {
213
- let e = ue(), { user: t, token: n } = k();
250
+ function Z() {
251
+ let e = ye(), { user: t, token: n } = M();
214
252
  if (e === null) return {
215
253
  continues: !0,
216
254
  done: Promise.resolve()
217
255
  };
218
256
  let r = JSON.stringify(e.user) === JSON.stringify(t);
219
- if (e.token === n && e.refreshToken === D && r) return {
257
+ if (e.token === n && e.refreshToken === D && e.lineage === A && r) return {
220
258
  continues: !0,
221
259
  done: Promise.resolve()
222
260
  };
223
- let i = e.token !== null && (e.token === n || n !== null && r), a = n !== null || t !== null || D !== null;
224
- if (i || H(), D = e.refreshToken, C.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({
225
263
  user: e.user,
226
264
  token: e.token,
227
265
  isAuthenticated: e.token !== null
228
- }), i || !a) return {
229
- continues: i,
266
+ }), a || !o) return {
267
+ continues: a,
230
268
  done: Promise.resolve()
231
269
  };
232
- let o = Y({
270
+ let s = X({
233
271
  reason: e.token === null ? "logout" : "switch",
234
272
  user: t,
235
273
  token: n,
236
274
  elsewhere: !0
237
275
  });
238
- return o.catch(() => void 0), {
239
- continues: i,
240
- done: o
276
+ return s.catch(() => void 0), {
277
+ continues: a,
278
+ done: s
241
279
  };
242
280
  }
243
- function de() {
244
- if (!f) return null;
245
- let e = f, { token: t, user: n } = k(), r = E();
246
- if (!g && t === null && n === null && r === null) return null;
247
- let i = g ? [...I] : [];
248
- return z(async () => (await o(i, a), V(t).post(e, { body: b(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) })));
249
287
  }
250
- function fe() {
251
- let e = X();
288
+ function xe() {
289
+ let e = Z();
252
290
  if (!e.continues) return e.done;
253
- let t = de(), { done: n } = J("logout");
291
+ let t = be(), { done: n } = Y("logout");
254
292
  return t ? Promise.all([t, n]).then(() => void 0) : n;
255
293
  }
256
- async function pe() {
257
- let { live: e, done: t } = J("expired");
294
+ async function Se() {
295
+ let { live: e, done: t } = Y("expired");
258
296
  await t.catch(() => void 0), e && x && typeof window < "u" && window.location.assign(x);
259
297
  }
260
- let Z = n({
261
- baseURL: l,
262
- prefix: u,
263
- withCredentials: g,
264
- csrf: _,
298
+ let Q = n({
299
+ baseURL: d,
300
+ prefix: f,
301
+ withCredentials: _,
302
+ csrf: ae,
265
303
  fetcher: v,
266
- getToken: A,
267
- getSessionEpoch: () => j,
268
- refresh: oe,
269
- retry: re,
270
- onUnauthorized: se
271
- }), me = () => W();
272
- function Q(e) {
273
- e.storageArea === T() && (e.key === null || e.key === m || e.key === w) && X();
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)
315
+ };
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();
274
319
  }
275
- let $ = typeof window > "u" ? null : window;
276
- return $?.addEventListener("storage", Q), {
320
+ let De = typeof window > "u" ? null : window;
321
+ return De?.addEventListener("storage", Ee), {
277
322
  useAuthStore: C,
278
- api: Z,
279
- login: ce,
280
- logout: fe,
281
- refresh: me,
282
- getToken: A,
283
- dispose: () => $?.removeEventListener("storage", Q)
323
+ api: Q,
324
+ login: _e,
325
+ logout: xe,
326
+ refresh: Ce,
327
+ getToken: N,
328
+ sessionKey: we,
329
+ dispose: () => De?.removeEventListener("storage", Ee)
284
330
  };
285
331
  }
286
332
  //#endregion
287
- export { c as createTempestAuth };
333
+ export { d as createTempestAuth };
288
334
 
289
335
  //# sourceMappingURL=create-tempest-auth.js.map