@voltro/plugin-auth 0.71.1 → 0.73.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.
@@ -2,89 +2,89 @@ import { hashPassword as e, verifyPassword as t, verifyPasswordWithRehash as n }
2
2
  import { SESSION_COOKIE_NAME as r, clearSessionCookie as i, issueSession as a, readSessionKeyed as o, resolveSessionSecret as s, resolveSessionSecrets as c, sessionSecretsOf as l } from "./session.js";
3
3
  import { a as u, l as d, o as f, s as p, t as m } from "./strategy-MP_KxNuA.js";
4
4
  import { hashToken as h, mintSecret as g, mintToken as _ } from "./tokens.js";
5
- import { CSRF_COOKIE_NAME as v, CSRF_HEADER_NAME as y, issueCsrfToken as b, verifyCsrf as ee } from "./csrf.js";
6
- import { generateChallenge as x, verifyAssertion as te, verifyRegistration as ne } from "./webauthn.js";
7
- import { createHmac as S, randomBytes as re, timingSafeEqual as ie } from "node:crypto";
5
+ import { CSRF_COOKIE_NAME as v, CSRF_HEADER_NAME as ee, issueCsrfToken as y, verifyCsrf as te } from "./csrf.js";
6
+ import { generateChallenge as b, verifyAssertion as x, verifyRegistration as ne } from "./webauthn.js";
7
+ import { createHmac as re, randomBytes as S, timingSafeEqual as ie } from "node:crypto";
8
8
  import { Data as ae, Effect as C } from "effect";
9
9
  import { buildSetCookie as oe, readCookie as se } from "@voltro/protocol/session";
10
- import { registerRetention as ce, retentionTtlMsFromEnv as le } from "@voltro/database";
11
- import { IMPERSONATION_METADATA_KEY as w, definePlugin as ue, rawImpersonationMark as de } from "@voltro/protocol";
10
+ import { registerRetention as ce, retentionTtlMsFromEnv as le, writeTenantSelection as ue } from "@voltro/database";
11
+ import { IMPERSONATION_METADATA_KEY as w, definePlugin as de, rawImpersonationMark as fe, selectSubjectTenant as pe } from "@voltro/protocol";
12
12
  //#region src/subjectGuard.ts
13
- var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
13
+ var me = { ok: !0 }, he = (e, t) => C.gen(function* () {
14
14
  for (let n of e) {
15
15
  let e = yield* n(t);
16
16
  if (!e.ok) return e;
17
17
  }
18
- return fe;
19
- }), T = 30, E = 6, me = 20, he = "sha1", ge = 1, D = class extends ae.TaggedError("TotpVerifyError") {}, O = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", _e = (e) => {
18
+ return me;
19
+ }), T = 30, ge = 6, _e = 20, ve = "sha1", ye = 1, E = class extends ae.TaggedError("TotpVerifyError") {}, be = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567", xe = (e) => {
20
20
  let t = 0, n = 0, r = "";
21
- for (let i of e) for (n = n << 8 | i, t += 8; t >= 5;) r += O[n >>> t - 5 & 31], t -= 5;
22
- return t > 0 && (r += O[n << 5 - t & 31]), r;
23
- }, ve = (e) => {
21
+ for (let i of e) for (n = n << 8 | i, t += 8; t >= 5;) r += be[n >>> t - 5 & 31], t -= 5;
22
+ return t > 0 && (r += be[n << 5 - t & 31]), r;
23
+ }, Se = (e) => {
24
24
  let t = e.toUpperCase().replace(/[\s=]+/g, "");
25
25
  if (!/^[A-Z2-7]+$/.test(t)) return null;
26
26
  let n = new Uint8Array(Math.floor(t.length * 5 / 8)), r = 0, i = 0, a = 0;
27
27
  for (let e of t) {
28
- let t = O.indexOf(e);
28
+ let t = be.indexOf(e);
29
29
  if (t === -1) return null;
30
30
  i = i << 5 | t, r += 5, r >= 8 && (n[a++] = i >>> r - 8 & 255, r -= 8);
31
31
  }
32
32
  return n.subarray(0, a);
33
- }, ye = (e) => {
33
+ }, Ce = (e) => {
34
34
  let t = Buffer.alloc(8);
35
35
  return t.writeBigUInt64BE(BigInt(e), 0), t;
36
- }, be = (e, t) => {
37
- let n = S(he, Buffer.from(e));
38
- n.update(ye(t));
36
+ }, we = (e, t) => {
37
+ let n = re(ve, Buffer.from(e));
38
+ n.update(Ce(t));
39
39
  let r = n.digest(), i = r[r.length - 1] & 15, a = (r[i] & 127) << 24 | (r[i + 1] & 255) << 16 | (r[i + 2] & 255) << 8 | r[i + 3] & 255;
40
- return String(a % 10 ** E).padStart(E, "0");
41
- }, xe = () => _e(re(me)), Se = (e) => `otpauth://totp/${encodeURIComponent(`${e.issuer}:${e.accountName}`)}?${new URLSearchParams({
40
+ return String(a % 10 ** ge).padStart(ge, "0");
41
+ }, Te = () => xe(S(_e)), Ee = (e) => `otpauth://totp/${encodeURIComponent(`${e.issuer}:${e.accountName}`)}?${new URLSearchParams({
42
42
  secret: e.secret,
43
43
  issuer: e.issuer,
44
44
  algorithm: "SHA1",
45
- digits: String(E),
45
+ digits: String(ge),
46
46
  period: String(T)
47
- }).toString()}`, Ce = (e, t = Date.now()) => {
48
- let n = ve(e);
49
- return n ? be(n, Math.floor(t / 1e3 / T)) : "000000";
50
- }, we = (e, t, n = Date.now()) => C.gen(function* () {
51
- let r = ve(e);
52
- if (!r) return yield* C.fail(new D({ reason: "malformedSecret" }));
47
+ }).toString()}`, De = (e, t = Date.now()) => {
48
+ let n = Se(e);
49
+ return n ? we(n, Math.floor(t / 1e3 / T)) : "000000";
50
+ }, D = (e, t, n = Date.now()) => C.gen(function* () {
51
+ let r = Se(e);
52
+ if (!r) return yield* C.fail(new E({ reason: "malformedSecret" }));
53
53
  let i = t.replace(/\s+/g, "");
54
- if (!/^[0-9]{6}$/.test(i)) return yield* C.fail(new D({ reason: "invalidCode" }));
54
+ if (!/^[0-9]{6}$/.test(i)) return yield* C.fail(new E({ reason: "invalidCode" }));
55
55
  let a = Math.floor(n / 1e3 / T), o = Buffer.from(i);
56
- for (let e = -1; e <= ge; e++) {
57
- let t = be(r, a + e), n = Buffer.from(t);
56
+ for (let e = -1; e <= ye; e++) {
57
+ let t = we(r, a + e), n = Buffer.from(t);
58
58
  if (n.length === o.length && ie(n, o)) return !0;
59
59
  }
60
- return yield* C.fail(new D({ reason: "invalidCode" }));
61
- }), Te = (e = 10) => {
60
+ return yield* C.fail(new E({ reason: "invalidCode" }));
61
+ }), O = (e = 10) => {
62
62
  let t = [];
63
63
  for (let n = 0; n < e; n++) {
64
- let e = _e(re(16)).slice(0, 25).match(/.{1,5}/g) ?? [];
64
+ let e = xe(S(16)).slice(0, 25).match(/.{1,5}/g) ?? [];
65
65
  t.push(e.join("-"));
66
66
  }
67
67
  return t;
68
- }, Ee = 60, De = "email_not_verified", k = "emailVerified", Oe = (e) => e?.policy ?? "off", A = (e) => Oe(e) !== "off", j = (e, t) => {
68
+ }, Oe = 60, ke = "email_not_verified", k = "emailVerified", Ae = (e) => e?.policy ?? "off", A = (e) => Ae(e) !== "off", j = (e, t) => {
69
69
  if (e.emailVerifiedAt != null) return !0;
70
70
  let n = t?.exemptAccountsCreatedBefore;
71
71
  return n !== void 0 && e.createdAt.getTime() < n.getTime();
72
- }, ke = (e) => {
72
+ }, je = (e) => {
73
73
  if (e.type !== "user") return null;
74
74
  let t = e.metadata?.[k];
75
75
  return typeof t == "boolean" ? t : null;
76
- }, Ae = (e) => {
77
- let t = Oe(e) === "strict";
76
+ }, Me = (e) => {
77
+ let t = Ae(e) === "strict";
78
78
  return (n) => C.succeed(!t || j(n, e) ? { ok: !0 } : {
79
79
  ok: !1,
80
- code: De,
80
+ code: ke,
81
81
  message: "This account's email address has not been confirmed yet. Request a new confirmation link and follow it, then sign in again."
82
82
  });
83
83
  }, M = (e, t) => ({
84
84
  status: e,
85
85
  body: JSON.stringify(t),
86
86
  contentType: "application/json; charset=utf-8"
87
- }), je = (e, t, n) => `${e}${t}${t.includes("?") ? "&" : "?"}token=${encodeURIComponent(n)}`, N = (e, t, n) => C.gen(function* () {
87
+ }), Ne = (e, t, n) => `${e}${t}${t.includes("?") ? "&" : "?"}token=${encodeURIComponent(n)}`, N = (e, t, n) => C.gen(function* () {
88
88
  let r = n.emailVerification, i = (n.now ?? Date.now)(), a = (r?.resendCooldownSeconds ?? 60) * 1e3;
89
89
  if (a > 0) {
90
90
  let n = yield* t.latestToken(e.id, "email-verify");
@@ -98,7 +98,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
98
98
  purpose: "email-verify",
99
99
  expiresAt: o.expiresAt
100
100
  }).pipe(C.ignore), !n.sendEmail) return !1;
101
- let s = je(n.appBaseUrl ?? "", r?.callbackPath ?? "/auth/verify-email/callback", o.token);
101
+ let s = Ne(n.appBaseUrl ?? "", r?.callbackPath ?? "/auth/verify-email/callback", o.token);
102
102
  return yield* C.tryPromise(() => n.sendEmail({
103
103
  to: e.email,
104
104
  kind: "email-verify",
@@ -111,7 +111,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
111
111
  if (!e.email && !e.userId) return M(400, { error: "email or userId required" });
112
112
  let r = e.userId ? yield* t.findById(e.userId) : yield* t.findByEmail(e.email);
113
113
  return r && !j(r, n.emailVerification) && (yield* N(r, t, n)), M(202, { ok: !0 });
114
- }), Me = (e, t) => C.gen(function* () {
114
+ }), Pe = (e, t) => C.gen(function* () {
115
115
  if (!e.token) return M(400, { error: "token required" });
116
116
  let n = yield* t.consumeToken(h(e.token), "email-verify");
117
117
  if (!n) return M(401, { error: "invalid or expired token" });
@@ -120,11 +120,11 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
120
120
  ok: !0,
121
121
  verified: !0
122
122
  })) : M(401, { error: "invalid or expired token" });
123
- }), Ne = 5, Pe = 900, Fe = 900, Ie = (e) => ({
124
- maxAttempts: e.lockout?.maxAttempts ?? Ne,
125
- windowMs: (e.lockout?.windowSeconds ?? Pe) * 1e3,
126
- lockMs: (e.lockout?.lockSeconds ?? Fe) * 1e3
127
- }), F = (e) => e.secrets ?? (e.secret === void 0 ? c() : l(e.secret)), Le = (e) => e.secret ?? s(), I = (e, t, n = {}) => ({
123
+ }), Fe = 5, Ie = 900, Le = 900, Re = (e) => ({
124
+ maxAttempts: e.lockout?.maxAttempts ?? Fe,
125
+ windowMs: (e.lockout?.windowSeconds ?? Ie) * 1e3,
126
+ lockMs: (e.lockout?.lockSeconds ?? Le) * 1e3
127
+ }), F = (e) => e.secrets ?? (e.secret === void 0 ? c() : l(e.secret)), ze = (e) => e.secret ?? s(), I = (e, t, n = {}) => ({
128
128
  status: e,
129
129
  body: JSON.stringify(t),
130
130
  contentType: "application/json; charset=utf-8",
@@ -135,7 +135,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
135
135
  contentType: "text/plain",
136
136
  location: e,
137
137
  ...t
138
- }), Re = 604800, ze = (e, t) => e.type === "user" ? {
138
+ }), Be = 604800, Ve = (e, t) => e.type === "user" ? {
139
139
  ...e,
140
140
  metadata: {
141
141
  ...e.metadata ?? {},
@@ -143,7 +143,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
143
143
  }
144
144
  } : e, R = (e, t, n, r = {}) => C.gen(function* () {
145
145
  r.clearLoginFailures !== !1 && (yield* t.clearLoginFailures(e.email));
146
- let i = yield* t.listMemberships(e.id), o = r.sessionId ?? u("sess"), s = r.ttlSeconds ?? Re;
146
+ let i = yield* t.listMemberships(e.id), o = r.sessionId ?? u("sess"), s = r.ttlSeconds ?? Be;
147
147
  r.sessionRow !== "existing" && (yield* t.insertSession({
148
148
  id: o,
149
149
  userId: e.id,
@@ -154,7 +154,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
154
154
  }).pipe(C.ignore));
155
155
  let c = { ...r.metadata };
156
156
  A(n.emailVerification) && (c[k] = j(e, n.emailVerification));
157
- let l = ze(p(e, {
157
+ let l = Ve(p(e, {
158
158
  memberships: i,
159
159
  ...Object.keys(c).length > 0 ? { metadata: c } : {}
160
160
  }), o);
@@ -169,12 +169,12 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
169
169
  }), z = (e, t) => C.gen(function* () {
170
170
  let n = t.subjectGuards ?? [];
171
171
  if (n.length === 0) return null;
172
- let r = yield* pe(n, e);
172
+ let r = yield* he(n, e);
173
173
  return r.ok ? null : I(403, {
174
174
  error: r.code,
175
175
  message: r.message
176
176
  });
177
- }), Be = (r, i, a) => C.gen(function* () {
177
+ }), He = (r, i, a) => C.gen(function* () {
178
178
  if (!r.email || !r.password) return I(400, { error: "email and password required" });
179
179
  let o = yield* i.findByEmail(r.email), s = (a.now ?? Date.now)(), c = yield* i.isLockedOut(r.email, s);
180
180
  if (c.locked) return I(429, {
@@ -185,7 +185,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
185
185
  let n = yield* e("decoy-not-a-real-password").pipe(C.orElseSucceed(() => ""));
186
186
  return yield* t(r.password, n), { valid: !1 };
187
187
  });
188
- if (!o || !d.valid) return yield* i.recordLoginFailure(r.email, s, Ie(a)), I(401, { error: "invalid credentials" });
188
+ if (!o || !d.valid) return yield* i.recordLoginFailure(r.email, s, Re(a)), I(401, { error: "invalid credentials" });
189
189
  let f = yield* z(o, a);
190
190
  if (f) return f;
191
191
  if (d.rehash && (yield* i.updatePassword(o.id, d.rehash).pipe(C.ignore)), o.mfaEnrolledAt) {
@@ -211,7 +211,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
211
211
  ok: !0,
212
212
  subject: m
213
213
  }, { setCookie: p });
214
- }), Ve = (e, t, n) => C.gen(function* () {
214
+ }), Ue = (e, t, n) => C.gen(function* () {
215
215
  if (!e.pendingToken) return I(400, { error: "pending token required" });
216
216
  if (!e.code && !e.recoveryCode) return I(400, { error: "code or recoveryCode required" });
217
217
  let r = yield* t.consumeToken(h(e.pendingToken), "mfa-pending");
@@ -225,7 +225,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
225
225
  });
226
226
  let s = yield* z(i, n);
227
227
  if (s) return s;
228
- if (!(e.recoveryCode ? yield* t.consumeRecoveryCode(i.id, h(e.recoveryCode.trim())) : yield* we(i.mfaSecret, e.code ?? "").pipe(C.map(() => !0), C.catchTag("TotpVerifyError", () => C.succeed(!1))))) return yield* t.recordLoginFailure(i.email, a, Ie(n)), I(401, { error: "invalid_code" });
228
+ if (!(e.recoveryCode ? yield* t.consumeRecoveryCode(i.id, h(e.recoveryCode.trim())) : yield* D(i.mfaSecret, e.code ?? "").pipe(C.map(() => !0), C.catchTag("TotpVerifyError", () => C.succeed(!1))))) return yield* t.recordLoginFailure(i.email, a, Re(n)), I(401, { error: "invalid_code" });
229
229
  let { setCookie: c, subject: l } = yield* R(i, t, n, {
230
230
  ipAddress: e.ipAddress ?? null,
231
231
  userAgent: e.userAgent ?? null
@@ -234,7 +234,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
234
234
  ok: !0,
235
235
  subject: l
236
236
  }, { setCookie: c });
237
- }), He = (t, n, r) => C.gen(function* () {
237
+ }), We = (t, n, r) => C.gen(function* () {
238
238
  if (!t.email || !t.password) return I(400, { error: "email and password required" });
239
239
  if (t.password.length < 8) return I(400, { error: "password must be at least 8 characters" });
240
240
  if (yield* n.findByEmail(t.email)) return I(409, { error: "email already registered" });
@@ -257,7 +257,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
257
257
  }).pipe(C.catchAll((e) => C.succeed(I(500, {
258
258
  error: "signup_failed",
259
259
  cause: String(e)
260
- })))), Ue = (e) => ({
260
+ })))), Ge = (e) => ({
261
261
  status: 302,
262
262
  body: "",
263
263
  location: e.successRedirect ?? "/",
@@ -265,49 +265,49 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
265
265
  ...e.cookieDomain ? { domain: e.cookieDomain } : {},
266
266
  secure: e.cookieSecure ?? !0
267
267
  })
268
- }), We = (e, t) => C.gen(function* () {
268
+ }), Ke = (e, t) => C.gen(function* () {
269
269
  let n = yield* t.findById(e.userId);
270
270
  if (!n) return I(404, { error: "user_not_found" });
271
- let r = xe();
271
+ let r = Te();
272
272
  return yield* t.setMfaSecret(n.id, r).pipe(C.catchAll(() => C.succeed(n))), I(200, {
273
273
  ok: !0,
274
274
  secret: r,
275
- otpauthUrl: Se({
275
+ otpauthUrl: Ee({
276
276
  issuer: e.issuer,
277
277
  accountName: e.accountName,
278
278
  secret: r
279
279
  })
280
280
  });
281
- }), Ge = (e, t) => C.gen(function* () {
281
+ }), qe = (e, t) => C.gen(function* () {
282
282
  let n = yield* t.findById(e.userId);
283
283
  if (!n) return I(404, { error: "user_not_found" });
284
284
  if (!n.mfaSecret) return I(400, { error: "no_enrollment_in_progress" });
285
285
  if (n.mfaEnrolledAt) return I(409, { error: "already_enrolled" });
286
- if (!(yield* we(n.mfaSecret, e.code).pipe(C.map(() => !0), C.catchTag("TotpVerifyError", () => C.succeed(!1))))) return I(401, { error: "invalid_code" });
286
+ if (!(yield* D(n.mfaSecret, e.code).pipe(C.map(() => !0), C.catchTag("TotpVerifyError", () => C.succeed(!1))))) return I(401, { error: "invalid_code" });
287
287
  yield* t.markMfaEnrolled(n.id).pipe(C.catchAll(() => C.succeed(n)));
288
- let r = Te();
288
+ let r = O();
289
289
  return yield* t.replaceRecoveryCodes(n.id, r.map((e) => h(e))).pipe(C.ignore), I(200, {
290
290
  ok: !0,
291
291
  enrolled: !0,
292
292
  recoveryCodes: r
293
293
  });
294
- }), Ke = (e, t) => C.gen(function* () {
294
+ }), Je = (e, t) => C.gen(function* () {
295
295
  let n = yield* t.findById(e.userId);
296
296
  if (!n) return I(404, { error: "user_not_found" });
297
297
  if (!n.mfaEnrolledAt) return I(400, { error: "mfa_not_enrolled" });
298
- let r = Te();
298
+ let r = O();
299
299
  return yield* t.replaceRecoveryCodes(n.id, r.map((e) => h(e))).pipe(C.ignore), I(200, {
300
300
  ok: !0,
301
301
  recoveryCodes: r
302
302
  });
303
- }), qe = (e, t) => C.gen(function* () {
303
+ }), Ye = (e, t) => C.gen(function* () {
304
304
  let n = yield* t.findById(e.userId);
305
305
  return n ? (yield* t.clearMfa(n.id).pipe(C.catchAll(() => C.succeed(n))), yield* t.replaceRecoveryCodes(n.id, []).pipe(C.ignore), I(200, {
306
306
  ok: !0,
307
307
  enrolled: !1
308
308
  })) : I(404, { error: "user_not_found" });
309
- }), Je = (e) => {
310
- let t = b(Le(e)), n = oe(v, t, {
309
+ }), Xe = (e) => {
310
+ let t = y(ze(e)), n = oe(v, t, {
311
311
  httpOnly: !1,
312
312
  sameSite: "lax",
313
313
  secure: e.cookieSecure ?? !0,
@@ -315,7 +315,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
315
315
  path: "/"
316
316
  });
317
317
  return I(200, { csrfToken: t }, { setCookie: n });
318
- }, Ye = (e, t, n) => `${e}${t}${t.includes("?") ? "&" : "?"}token=${encodeURIComponent(n)}`, Xe = (e, t, n) => C.gen(function* () {
318
+ }, Ze = (e, t, n) => `${e}${t}${t.includes("?") ? "&" : "?"}token=${encodeURIComponent(n)}`, Qe = (e, t, n) => C.gen(function* () {
319
319
  if (!e.email) return I(400, { error: "email required" });
320
320
  let r = yield* t.findByEmail(e.email);
321
321
  if (r) {
@@ -327,7 +327,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
327
327
  purpose: "magic-link",
328
328
  expiresAt: i.expiresAt
329
329
  }).pipe(C.ignore);
330
- let a = Ye(n.appBaseUrl ?? "", e.callbackPath ?? "/auth/magic-link/callback", i.token);
330
+ let a = Ze(n.appBaseUrl ?? "", e.callbackPath ?? "/auth/magic-link/callback", i.token);
331
331
  n.sendEmail && (yield* C.tryPromise(() => n.sendEmail({
332
332
  to: r.email,
333
333
  kind: "magic-link",
@@ -338,7 +338,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
338
338
  })).pipe(C.ignore));
339
339
  }
340
340
  return I(202, { ok: !0 });
341
- }), Ze = (e, t, n) => C.gen(function* () {
341
+ }), $e = (e, t, n) => C.gen(function* () {
342
342
  if (!e.token) return I(400, { error: "token required" });
343
343
  let r = yield* t.consumeToken(h(e.token), "magic-link");
344
344
  if (!r) return I(401, { error: "invalid or expired token" });
@@ -351,7 +351,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
351
351
  ok: !0,
352
352
  subject: c
353
353
  }, { setCookie: s });
354
- }), Qe = (e, t, n) => C.gen(function* () {
354
+ }), et = (e, t, n) => C.gen(function* () {
355
355
  if (!e.email) return I(400, { error: "email required" });
356
356
  let r = yield* t.findByEmail(e.email);
357
357
  if (r) {
@@ -363,7 +363,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
363
363
  purpose: "password-reset",
364
364
  expiresAt: i.expiresAt
365
365
  }).pipe(C.ignore);
366
- let a = Ye(n.appBaseUrl ?? "", e.callbackPath ?? "/auth/password-reset/callback", i.token);
366
+ let a = Ze(n.appBaseUrl ?? "", e.callbackPath ?? "/auth/password-reset/callback", i.token);
367
367
  n.sendEmail && (yield* C.tryPromise(() => n.sendEmail({
368
368
  to: r.email,
369
369
  kind: "password-reset",
@@ -374,14 +374,14 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
374
374
  })).pipe(C.ignore));
375
375
  }
376
376
  return I(202, { ok: !0 });
377
- }), $e = (t, n) => C.gen(function* () {
377
+ }), tt = (t, n) => C.gen(function* () {
378
378
  if (!t.token || !t.newPassword) return I(400, { error: "token and newPassword required" });
379
379
  if (t.newPassword.length < 8) return I(400, { error: "password must be at least 8 characters" });
380
380
  let r = yield* n.consumeToken(h(t.token), "password-reset");
381
381
  if (!r) return I(401, { error: "invalid or expired token" });
382
382
  let i = yield* e(t.newPassword).pipe(C.orElseSucceed(() => ""));
383
383
  return i ? (yield* n.updatePassword(r.userId, i).pipe(C.ignore), yield* n.markEmailVerified(r.userId).pipe(C.ignore), yield* n.revokeAllOtherSessions(r.userId, "__none__").pipe(C.ignore), I(200, { ok: !0 })) : I(500, { error: "hash_failed" });
384
- }), et = (e, t) => C.gen(function* () {
384
+ }), nt = (e, t) => C.gen(function* () {
385
385
  return I(200, { sessions: (yield* t.listSessions(e.userId)).map((e) => ({
386
386
  id: e.id,
387
387
  tenantId: e.tenantId,
@@ -391,37 +391,38 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
391
391
  lastSeenAt: e.lastSeenAt.toISOString(),
392
392
  expiresAt: e.expiresAt.toISOString()
393
393
  })) });
394
- }), tt = (e, t) => C.gen(function* () {
394
+ }), rt = (e, t) => C.gen(function* () {
395
395
  return (yield* t.revokeSession(e.userId, e.sessionId)) ? I(200, {
396
396
  ok: !0,
397
397
  revoked: 1
398
398
  }) : I(404, { error: "session_not_found" });
399
- }), nt = (e, t) => C.gen(function* () {
399
+ }), it = (e, t) => C.gen(function* () {
400
400
  return I(200, {
401
401
  ok: !0,
402
402
  revoked: yield* t.revokeAllOtherSessions(e.userId, e.keepSessionId)
403
403
  });
404
- }), rt = (e, t, n, i) => C.gen(function* () {
405
- let o = yield* t.findById(e.userId);
406
- if (!o) return I(404, { error: "user_not_found" });
407
- let s = yield* t.membershipRole(e.userId, e.targetTenantId);
408
- if (s === null) return I(403, { error: "not a member of the target tenant" });
409
- let c = yield* t.listMemberships(o.id), l = e.metadata === void 0 ? void 0 : Object.fromEntries(Object.entries(e.metadata).filter(([e]) => e !== "memberships")), u = p(o, {
410
- tenantId: e.targetTenantId,
411
- memberships: c,
412
- ...l === void 0 ? {} : { metadata: l }
413
- }), d = e.sessionId ? ze(u, e.sessionId) : u, f = a(d, F(n), {
414
- ttlSeconds: Re,
404
+ }), at = (e, t, n, i, o) => C.gen(function* () {
405
+ let s = yield* t.findById(e.userId);
406
+ if (!s) return I(404, { error: "user_not_found" });
407
+ let c = yield* t.listMemberships(s.id), l = c.find((t) => t.tenantId === e.targetTenantId)?.role ?? null;
408
+ if (l === null) return I(403, { error: "not a member of the target tenant" });
409
+ let u = e.metadata === void 0 ? void 0 : Object.fromEntries(Object.entries(e.metadata).filter(([e]) => e !== "memberships")), d = pe(p(s, { ...u === void 0 ? {} : { metadata: u } }), e.targetTenantId, c);
410
+ o !== void 0 && d.type === "user" && (yield* C.promise(() => ue(o, {
411
+ type: d.type,
412
+ id: d.id
413
+ }, e.targetTenantId)));
414
+ let f = e.sessionId ? Ve(d, e.sessionId) : d, m = a(f, F(n), {
415
+ ttlSeconds: Be,
415
416
  ...n.cookieDomain ? { domain: n.cookieDomain } : {},
416
417
  secure: n.cookieSecure ?? !0
417
418
  });
418
- return e.clientId !== void 0 && i && i(e.clientId, { cookies: { [r]: f.value } }), I(200, {
419
+ return e.clientId !== void 0 && i && i(e.clientId, { cookies: { [r]: m.value } }), I(200, {
419
420
  ok: !0,
420
421
  tenantId: e.targetTenantId,
421
- role: s,
422
- subject: d
423
- }, { setCookie: f.setCookie });
424
- }), it = (e, t) => C.gen(function* () {
422
+ role: l,
423
+ subject: f
424
+ }, { setCookie: m.setCookie });
425
+ }), ot = (e, t) => C.gen(function* () {
425
426
  return I(200, { memberships: (yield* t.listMemberships(e.userId)).map((e) => ({
426
427
  tenantId: e.tenantId,
427
428
  role: e.role,
@@ -432,7 +433,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
432
433
  body: JSON.stringify(t),
433
434
  contentType: "application/json; charset=utf-8",
434
435
  ...n
435
- }), at = 604800, ot = () => {
436
+ }), st = 604800, ct = () => {
436
437
  let e = /* @__PURE__ */ new Map();
437
438
  return {
438
439
  put: (t, n, r) => C.sync(() => {
@@ -446,7 +447,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
446
447
  return e.delete(t), !n || n.expiresAt < Date.now() ? null : n.challenge;
447
448
  })
448
449
  };
449
- }, st = (e) => ({
450
+ }, lt = (e) => ({
450
451
  put: (t, n, r) => C.gen(function* () {
451
452
  let i = /* @__PURE__ */ new Date(), a = new Date(i.getTime() + r * 1e3);
452
453
  (yield* e`
@@ -466,9 +467,9 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
466
467
  `)[0];
467
468
  return n && n.expiresAt.getTime() > Date.now() ? n.challenge : null;
468
469
  }).pipe(C.orElseSucceed(() => null))
469
- }), V = 300, ct = (e, t, n, r) => C.gen(function* () {
470
+ }), V = 300, ut = (e, t, n, r) => C.gen(function* () {
470
471
  if (!(yield* t.findById(e.userId))) return B(404, { error: "user_not_found" });
471
- let i = x();
472
+ let i = b();
472
473
  yield* n.put(`${e.userId}:register`, i, V);
473
474
  let a = yield* t.listPasskeys(e.userId);
474
475
  return B(200, {
@@ -499,7 +500,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
499
500
  },
500
501
  timeout: V * 1e3
501
502
  });
502
- }), lt = (e, t, n, r) => C.gen(function* () {
503
+ }), dt = (e, t, n, r) => C.gen(function* () {
503
504
  if (!(yield* t.findById(e.userId))) return B(404, { error: "user_not_found" });
504
505
  let i = yield* n.take(`${e.userId}:register`);
505
506
  if (!i) return B(400, { error: "no_pending_challenge" });
@@ -521,8 +522,8 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
521
522
  ok: !0,
522
523
  credentialId: a.result.credentialId
523
524
  })) : B(400, { error: a.error });
524
- }), ut = (e, t, n, r) => C.gen(function* () {
525
- let i = x(), a = e.userId ? `${e.userId}:assert` : "*:assert";
525
+ }), ft = (e, t, n, r) => C.gen(function* () {
526
+ let i = b(), a = e.userId ? `${e.userId}:assert` : "*:assert";
526
527
  yield* n.put(a, i, V);
527
528
  let o = e.userId ? (yield* t.listPasskeys(e.userId)).map((e) => ({
528
529
  type: "public-key",
@@ -535,12 +536,12 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
535
536
  userVerification: "preferred",
536
537
  timeout: V * 1e3
537
538
  });
538
- }), dt = (e, t, n, r, i) => C.gen(function* () {
539
+ }), pt = (e, t, n, r, i) => C.gen(function* () {
539
540
  let o = yield* t.findPasskey(e.credentialId);
540
541
  if (!o) return B(401, { error: "unknown_credential" });
541
542
  let s = e.userId ? `${e.userId}:assert` : "*:assert", c = yield* n.take(s);
542
543
  if (!c) return B(400, { error: "no_pending_challenge" });
543
- let l = te({
544
+ let l = x({
544
545
  clientDataJSON: e.clientDataJSON,
545
546
  authenticatorData: e.authenticatorData,
546
547
  signature: e.signature,
@@ -561,7 +562,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
561
562
  id: h,
562
563
  userId: d.id,
563
564
  tenantId: d.tenantId,
564
- expiresAt: new Date(Date.now() + at * 1e3),
565
+ expiresAt: new Date(Date.now() + st * 1e3),
565
566
  ipAddress: null,
566
567
  userAgent: null
567
568
  }).pipe(C.ignore);
@@ -572,7 +573,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
572
573
  sessionId: h
573
574
  }
574
575
  } : g, v = a(_, F(i), {
575
- ttlSeconds: at,
576
+ ttlSeconds: st,
576
577
  ...i.cookieDomain ? { domain: i.cookieDomain } : {},
577
578
  secure: i.cookieSecure ?? !0
578
579
  });
@@ -580,25 +581,25 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
580
581
  ok: !0,
581
582
  subject: _
582
583
  }, { setCookie: v.setCookie });
583
- }), ft = 604800, pt = 500, H = [
584
+ }), mt = 604800, ht = 500, H = [
584
585
  "owner",
585
586
  "admin",
586
587
  "member",
587
588
  "viewer"
588
- ], mt = ["owner", "admin"], ht = (e, t) => t.indexOf(e), gt = (e, t = H) => {
589
- let n = ht(e.inviterRole, t);
589
+ ], gt = ["owner", "admin"], _t = (e, t) => t.indexOf(e), vt = (e, t = H) => {
590
+ let n = _t(e.inviterRole, t);
590
591
  if (n < 0) return !1;
591
- let r = ht(e.requestedRole, t);
592
+ let r = _t(e.requestedRole, t);
592
593
  return r < 0 ? n === 0 : r >= n;
593
- }, _t = (e) => {
594
+ }, yt = (e) => {
594
595
  let t = e?.roleRank ?? H;
595
- return e?.canGrantRole ?? ((e) => gt(e, t));
596
+ return e?.canGrantRole ?? ((e) => vt(e, t));
596
597
  }, U = (e, t, n = {}) => ({
597
598
  status: e,
598
599
  body: JSON.stringify(t),
599
600
  contentType: "application/json; charset=utf-8",
600
601
  ...n
601
- }), vt = (e, t, n) => `${e}${t}${t.includes("?") ? "&" : "?"}token=${encodeURIComponent(n)}`, yt = (e) => ({
602
+ }), bt = (e, t, n) => `${e}${t}${t.includes("?") ? "&" : "?"}token=${encodeURIComponent(n)}`, xt = (e) => ({
602
603
  id: e.id,
603
604
  email: e.email,
604
605
  tenantId: e.tenantId,
@@ -610,15 +611,15 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
610
611
  createdAt: e.createdAt.toISOString()
611
612
  }), W = (e, t, n, r) => C.gen(function* () {
612
613
  let i = yield* n.membershipRole(e, t);
613
- return i === null || !(r?.inviterRoles ?? mt).includes(i) ? U(403, { error: "not_permitted" }) : { role: i };
614
- }), G = (e) => "status" in e, bt = (e, t, n) => C.gen(function* () {
614
+ return i === null || !(r?.inviterRoles ?? gt).includes(i) ? U(403, { error: "not_permitted" }) : { role: i };
615
+ }), G = (e) => "status" in e, St = (e, t, n) => C.gen(function* () {
615
616
  let r = e.email.trim().toLowerCase();
616
617
  if (!r || !r.includes("@")) return U(400, { error: "a valid email is required" });
617
618
  if (!e.tenantId) return U(400, { error: "tenantId required" });
618
619
  if (!e.role) return U(400, { error: "role required" });
619
620
  let i = n.invitations, a = yield* W(e.inviterUserId, e.tenantId, t, i);
620
621
  if (G(a)) return a;
621
- if (!_t(i)({
622
+ if (!yt(i)({
622
623
  inviterRole: a.role,
623
624
  requestedRole: e.role,
624
625
  tenantId: e.tenantId
@@ -639,7 +640,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
639
640
  expiresAt: new Date(o.getTime() + s * 1e3)
640
641
  });
641
642
  if (n.sendEmail) {
642
- let t = vt(n.appBaseUrl ?? "", i?.callbackPath ?? "/auth/invitations/accept", c.token);
643
+ let t = bt(n.appBaseUrl ?? "", i?.callbackPath ?? "/auth/invitations/accept", c.token);
643
644
  yield* C.tryPromise(() => n.sendEmail({
644
645
  to: r,
645
646
  kind: "invitation",
@@ -651,12 +652,12 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
651
652
  }
652
653
  return U(201, {
653
654
  ok: !0,
654
- invitation: yt(l)
655
+ invitation: xt(l)
655
656
  });
656
- }), xt = (e, t, n) => C.gen(function* () {
657
+ }), Ct = (e, t, n) => C.gen(function* () {
657
658
  let r = yield* W(e.callerUserId, e.tenantId, t, n.invitations);
658
- return G(r) ? r : U(200, { invitations: (yield* t.listInvitations(e.tenantId)).map(yt) });
659
- }), St = (e, t, n) => C.gen(function* () {
659
+ return G(r) ? r : U(200, { invitations: (yield* t.listInvitations(e.tenantId)).map(xt) });
660
+ }), wt = (e, t, n) => C.gen(function* () {
660
661
  if (!e.invitationId) return U(400, { error: "invitationId required" });
661
662
  let r = yield* W(e.callerUserId, e.tenantId, t, n.invitations);
662
663
  if (G(r)) return r;
@@ -665,7 +666,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
665
666
  ok: !0,
666
667
  revoked: 1
667
668
  }) : U(404, { error: "invitation_not_found" });
668
- }), Ct = (e, t, n = {}) => C.gen(function* () {
669
+ }), Tt = (e, t, n = {}) => C.gen(function* () {
669
670
  if (!e.token) return U(400, { error: "token required" });
670
671
  let r = yield* t.findInvitationByHash(h(e.token));
671
672
  if (!r) return U(404, { error: "invalid_invitation" });
@@ -678,7 +679,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
678
679
  role: r.role,
679
680
  expiresAt: r.expiresAt.toISOString()
680
681
  });
681
- }), wt = (e, t, n = {}) => C.gen(function* () {
682
+ }), Et = (e, t, n = {}) => C.gen(function* () {
682
683
  if (!e.token) return U(400, { error: "token required" });
683
684
  let r = h(e.token), i = new Date((n.now ?? Date.now)()), a = yield* t.findInvitationByHash(r);
684
685
  if (!a) return U(401, { error: "invalid_or_expired_invitation" });
@@ -710,7 +711,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
710
711
  joinedAt: c.joinedAt.toISOString()
711
712
  }
712
713
  });
713
- }), Tt = (e, t, n) => C.gen(function* () {
714
+ }), Dt = (e, t, n) => C.gen(function* () {
714
715
  if (!e.token || !e.password) return U(400, { error: "token and password required" });
715
716
  if (e.password.length < (n.minPasswordLength ?? 8)) return U(400, { error: "password must be at least 8 characters" });
716
717
  let r = h(e.token), i = new Date((n.now ?? Date.now)()), a = yield* t.findInvitationByHash(r);
@@ -739,7 +740,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
739
740
  tenantId: c.tenantId,
740
741
  role: c.role
741
742
  })) : U(409, { error: "account_exists" });
742
- }), Et = 900, Dt = [
743
+ }), Ot = 900, kt = [
743
744
  "/mfa/enroll/start",
744
745
  "/mfa/enroll/verify",
745
746
  "/mfa/unenroll",
@@ -749,7 +750,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
749
750
  "/sessions/revoke-others",
750
751
  "/switch-tenant",
751
752
  "/impersonate/start"
752
- ], Ot = (e) => {
753
+ ], At = (e) => {
753
754
  if (typeof e != "object" || !e) return null;
754
755
  let t = e;
755
756
  return typeof t.actorUserId != "string" || t.actorUserId.length === 0 || typeof t.grantId != "string" || typeof t.expiresAt != "string" || typeof t.actorSessionId != "string" || typeof t.startedAt != "string" ? null : {
@@ -760,9 +761,9 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
760
761
  expiresAt: t.expiresAt,
761
762
  ...typeof t.reason == "string" ? { reason: t.reason } : {}
762
763
  };
763
- }, K = (e) => e.type === "user" ? Ot(de(e)) : null, q = (e) => K(e) !== null, kt = () => (e) => {
764
+ }, K = (e) => e.type === "user" ? At(fe(e)) : null, q = (e) => K(e) !== null, jt = () => (e) => {
764
765
  if (e.type !== "user" || e.metadata === void 0) return e;
765
- let t = Ot(e.metadata[w]), { metadata: n, ...r } = e;
766
+ let t = At(e.metadata[w]), { metadata: n, ...r } = e;
766
767
  return {
767
768
  ...r,
768
769
  metadata: t === null ? { __redacted: "all" } : {
@@ -781,7 +782,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
781
782
  try: () => Promise.resolve(n),
782
783
  catch: (e) => e
783
784
  });
784
- }).pipe(C.catchAllCause(() => C.void)), At = (e, t, n) => C.gen(function* () {
785
+ }).pipe(C.catchAllCause(() => C.void)), Mt = (e, t, n) => C.gen(function* () {
785
786
  let r = n.impersonation, i = (n.now ?? Date.now)(), a = new Date(i), o = e.actorSubject, s = (t, n, i = {}) => Y(r, {
786
787
  kind: "refused",
787
788
  at: a,
@@ -851,7 +852,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
851
852
  startedAt: _.startedAt.toISOString(),
852
853
  expiresAt: h.toISOString(),
853
854
  ...d.length > 0 ? { reason: d } : {}
854
- }, y = yield* n.issuer.issue(l, {
855
+ }, ee = yield* n.issuer.issue(l, {
855
856
  sessionId: g,
856
857
  ttlSeconds: m,
857
858
  metadata: { [w]: v },
@@ -875,9 +876,9 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
875
876
  }), J(200, {
876
877
  ok: !0,
877
878
  impersonation: v,
878
- subject: y.subject
879
- }, { setCookie: y.setCookie });
880
- }), jt = (e, t, n) => C.gen(function* () {
879
+ subject: ee.subject
880
+ }, { setCookie: ee.setCookie });
881
+ }), Nt = (e, t, n) => C.gen(function* () {
881
882
  let r = n.impersonation, i = (n.now ?? Date.now)(), a = new Date(i), o = K(e.subject);
882
883
  if (!o || !e.sessionId) return J(400, { error: "not_impersonating" });
883
884
  let s = yield* t.findImpersonationGrantBySession(e.sessionId);
@@ -907,10 +908,10 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
907
908
  restored: !0,
908
909
  subject: d.subject
909
910
  }, { setCookie: d.setCookie });
910
- }), Mt = (e) => {
911
- for (let t of e) if (Nt(t)) return t.auth.sessionStrategy;
911
+ }), Pt = (e) => {
912
+ for (let t of e) if (Ft(t)) return t.auth.sessionStrategy;
912
913
  return null;
913
- }, Nt = (e) => typeof e.auth == "object" && e.auth !== null && typeof e.auth.sessionStrategy == "object", Pt = "/auth", Ft = (e) => {
914
+ }, Ft = (e) => typeof e.auth == "object" && e.auth !== null && typeof e.auth.sessionStrategy == "object", It = "/auth", Lt = (e) => {
914
915
  let t = Buffer.from(e.rawBody).toString("utf8");
915
916
  if (!t) return {};
916
917
  if ((e.headers["content-type"] ?? "").includes("application/x-www-form-urlencoded")) {
@@ -936,8 +937,8 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
936
937
  status: e,
937
938
  body: JSON.stringify(t),
938
939
  contentType: "application/json; charset=utf-8"
939
- }), Q = (e) => typeof e == "string" ? e : void 0, $ = (e, t) => typeof t == "string" && t.length > 0 ? { [e]: t } : {}, It = (t) => {
940
- let n = t.prefix ?? Pt, r = t.store, s = t.challengeStore ?? ot(), c = {
940
+ }), Q = (e) => typeof e == "string" ? e : void 0, $ = (e, t) => typeof t == "string" && t.length > 0 ? { [e]: t } : {}, Rt = (t) => {
941
+ let n = t.prefix ?? It, r = t.store, s = t.challengeStore ?? ct(), c = { current: void 0 }, l = {
941
942
  ...t.secret === void 0 ? {} : { secret: t.secret },
942
943
  ...t.secrets === void 0 ? {} : { secrets: t.secrets },
943
944
  defaultTenantId: t.defaultTenantId,
@@ -946,11 +947,11 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
946
947
  ...t.successRedirect === void 0 ? {} : { successRedirect: t.successRedirect },
947
948
  ...t.sendEmail === void 0 ? {} : { sendEmail: t.sendEmail },
948
949
  ...t.appBaseUrl === void 0 ? {} : { appBaseUrl: t.appBaseUrl },
949
- subjectGuards: [...t.subjectGuards ?? [], ...A(t.emailVerification) ? [Ae(t.emailVerification)] : []],
950
+ subjectGuards: [...t.subjectGuards ?? [], ...A(t.emailVerification) ? [Me(t.emailVerification)] : []],
950
951
  ...t.lockout === void 0 ? {} : { lockout: t.lockout },
951
952
  ...t.now === void 0 ? {} : { now: t.now },
952
953
  ...t.emailVerification === void 0 ? {} : { emailVerification: t.emailVerification }
953
- }, l = {
954
+ }, u = {
954
955
  ...t.appBaseUrl === void 0 ? {} : { appBaseUrl: t.appBaseUrl },
955
956
  ...t.sendEmail === void 0 ? {} : { sendEmail: t.sendEmail },
956
957
  ...t.invitations === void 0 ? {} : { invitations: t.invitations },
@@ -969,16 +970,16 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
969
970
  ttlMs: le(process.env.VOLTRO_IMPERSONATION_GRANTS_TTL_HOURS, 8760),
970
971
  envVar: "VOLTRO_IMPERSONATION_GRANTS_TTL_HOURS"
971
972
  });
972
- let u = d(r, t.sessionRevocation ?? {}), p = async (e) => {
973
- let t = F(c), n = o(e.headers.cookie, t);
973
+ let p = d(r, t.sessionRevocation ?? {}), h = async (e) => {
974
+ let t = F(l), n = o(e.headers.cookie, t);
974
975
  if (!n) return null;
975
976
  let i = f(n.subject);
976
- if (i && !await C.runPromise(u.isLive(i))) return null;
977
+ if (i && !await C.runPromise(p.isLive(i))) return null;
977
978
  if (n.renew || n.kid !== t.current.kid) {
978
979
  let e = Math.max(n.exp - n.iat, 60), o = a(n.subject, t, {
979
980
  ttlSeconds: e,
980
- ...c.cookieDomain ? { domain: c.cookieDomain } : {},
981
- secure: c.cookieSecure ?? !0
981
+ ...l.cookieDomain ? { domain: l.cookieDomain } : {},
982
+ secure: l.cookieSecure ?? !0
982
983
  });
983
984
  return i && await C.runPromise(r.touchSession(i, new Date(Date.now() + e * 1e3))), {
984
985
  subject: n.subject,
@@ -990,7 +991,7 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
990
991
  subject: n.subject,
991
992
  sessionId: i
992
993
  };
993
- }, h = (e, t) => {
994
+ }, g = (e, t) => {
994
995
  if (!t) return e;
995
996
  let n = e.headers ?? {};
996
997
  return n["set-cookie"] ? e : {
@@ -1000,11 +1001,11 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
1000
1001
  "set-cookie": t
1001
1002
  }
1002
1003
  };
1003
- }, g = (e) => {
1004
- let n = e.headers[y], r = se(e.headers.cookie, v);
1005
- return ee(n, r, Le(t));
1006
- }, _ = (e, t) => e.path === `${n}${t}`, b = (e) => C.runPromise(e).then(X), x = {
1007
- issue: (e, t) => R(e, r, c, {
1004
+ }, _ = (e) => {
1005
+ let n = e.headers[ee], r = se(e.headers.cookie, v);
1006
+ return te(n, r, ze(t));
1007
+ }, y = (e, t) => e.path === `${n}${t}`, b = (e) => C.runPromise(e).then(X), x = {
1008
+ issue: (e, t) => R(e, r, l, {
1008
1009
  sessionId: t.sessionId,
1009
1010
  ttlSeconds: t.ttlSeconds,
1010
1011
  metadata: t.metadata,
@@ -1012,166 +1013,166 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
1012
1013
  userAgent: t.userAgent ?? null,
1013
1014
  clearLoginFailures: !1
1014
1015
  }),
1015
- reissue: (e, t) => R(e, r, c, {
1016
+ reissue: (e, t) => R(e, r, l, {
1016
1017
  sessionId: t.sessionId,
1017
1018
  ttlSeconds: t.ttlSeconds,
1018
1019
  sessionRow: "existing",
1019
1020
  clearLoginFailures: !1
1020
1021
  }),
1021
1022
  clear: () => i({
1022
- ...c.cookieDomain ? { domain: c.cookieDomain } : {},
1023
- secure: c.cookieSecure ?? !0
1023
+ ...l.cookieDomain ? { domain: l.cookieDomain } : {},
1024
+ secure: l.cookieSecure ?? !0
1024
1025
  })
1025
- }, te = {
1026
+ }, ne = {
1026
1027
  method: "*",
1027
1028
  path: n,
1028
1029
  handle: async (i) => {
1029
- let a = i.method === "GET" ? {} : Ft(i);
1030
- if (i.method === "GET" && _(i, "/csrf")) return X(Je(c));
1031
- if (i.method === "POST" && _(i, "/sign-in")) return b(Be({
1030
+ let a = i.method === "GET" ? {} : Lt(i);
1031
+ if (i.method === "GET" && y(i, "/csrf")) return X(Xe(l));
1032
+ if (i.method === "POST" && y(i, "/sign-in")) return b(He({
1032
1033
  email: Q(a.email) ?? "",
1033
1034
  password: Q(a.password) ?? "",
1034
1035
  ...a.redirectAfter === void 0 ? {} : { redirectAfter: !!a.redirectAfter },
1035
1036
  ...i.remoteAddr ? { ipAddress: i.remoteAddr } : {},
1036
1037
  ...i.headers["user-agent"] ? { userAgent: i.headers["user-agent"] } : {}
1037
- }, r, c));
1038
- if (i.method === "POST" && _(i, "/sign-up")) return b(He({
1038
+ }, r, l));
1039
+ if (i.method === "POST" && y(i, "/sign-up")) return b(We({
1039
1040
  email: Q(a.email) ?? "",
1040
1041
  password: Q(a.password) ?? "",
1041
1042
  ...$("tenantId", a.tenantId),
1042
1043
  ...a.redirectAfter === void 0 ? {} : { redirectAfter: !!a.redirectAfter }
1043
- }, r, c));
1044
- if (i.method === "POST" && _(i, "/sign-out")) {
1045
- let e = await p(i);
1046
- return e && e.subject.type === "user" && e.sessionId && (await C.runPromise(r.revokeSession(e.subject.id, e.sessionId)), u.invalidate(e.sessionId)), X(Ue(c));
1044
+ }, r, l));
1045
+ if (i.method === "POST" && y(i, "/sign-out")) {
1046
+ let e = await h(i);
1047
+ return e && e.subject.type === "user" && e.sessionId && (await C.runPromise(r.revokeSession(e.subject.id, e.sessionId)), p.invalidate(e.sessionId)), X(Ge(l));
1047
1048
  }
1048
- if (i.method === "POST" && _(i, "/magic-link")) return b(Xe({
1049
+ if (i.method === "POST" && y(i, "/magic-link")) return b(Qe({
1049
1050
  email: Q(a.email) ?? "",
1050
1051
  ...$("callbackPath", a.callbackPath)
1051
- }, r, c));
1052
- if (i.method === "POST" && _(i, "/magic-link/callback")) return b(Ze({
1052
+ }, r, l));
1053
+ if (i.method === "POST" && y(i, "/magic-link/callback")) return b($e({
1053
1054
  token: Q(a.token) ?? "",
1054
1055
  ...a.redirectAfter === void 0 ? {} : { redirectAfter: !!a.redirectAfter }
1055
- }, r, c));
1056
- if (i.method === "POST" && _(i, "/password-reset")) return b(Qe({
1056
+ }, r, l));
1057
+ if (i.method === "POST" && y(i, "/password-reset")) return b(et({
1057
1058
  email: Q(a.email) ?? "",
1058
1059
  ...$("callbackPath", a.callbackPath)
1059
- }, r, c));
1060
- if (i.method === "POST" && _(i, "/password-reset/confirm")) return b($e({
1060
+ }, r, l));
1061
+ if (i.method === "POST" && y(i, "/password-reset/confirm")) return b(tt({
1061
1062
  token: Q(a.token) ?? "",
1062
1063
  newPassword: Q(a.newPassword) ?? ""
1063
1064
  }, r));
1064
- if (i.method === "POST" && _(i, "/verify-email")) {
1065
+ if (i.method === "POST" && y(i, "/verify-email")) {
1065
1066
  let e = Q(a.email);
1066
- if (e) return b(P({ email: e }, r, c));
1067
- let t = await p(i);
1068
- return !t || t.subject.type !== "user" ? Z(400, { error: "email required" }) : b(P({ userId: t.subject.id }, r, c));
1067
+ if (e) return b(P({ email: e }, r, l));
1068
+ let t = await h(i);
1069
+ return !t || t.subject.type !== "user" ? Z(400, { error: "email required" }) : b(P({ userId: t.subject.id }, r, l));
1069
1070
  }
1070
- if (i.method === "POST" && _(i, "/verify-email/callback")) return b(Me({ token: Q(a.token) ?? "" }, r));
1071
- if (t.invitations && i.method === "POST" && _(i, "/invitations/preview")) return b(Ct({ token: Q(a.token) ?? "" }, r, l));
1072
- if (t.invitations && i.method === "POST" && _(i, "/invitations/sign-up")) return b(Tt({
1071
+ if (i.method === "POST" && y(i, "/verify-email/callback")) return b(Pe({ token: Q(a.token) ?? "" }, r));
1072
+ if (t.invitations && i.method === "POST" && y(i, "/invitations/preview")) return b(Tt({ token: Q(a.token) ?? "" }, r, u));
1073
+ if (t.invitations && i.method === "POST" && y(i, "/invitations/sign-up")) return b(Dt({
1073
1074
  token: Q(a.token) ?? "",
1074
1075
  password: Q(a.password) ?? ""
1075
1076
  }, r, {
1076
- ...l,
1077
+ ...u,
1077
1078
  hashPassword: e
1078
1079
  }));
1079
- if (i.method === "POST" && _(i, "/mfa/verify")) return b(Ve({
1080
+ if (i.method === "POST" && y(i, "/mfa/verify")) return b(Ue({
1080
1081
  pendingToken: Q(a.pendingToken) ?? "",
1081
1082
  ...$("code", a.code),
1082
1083
  ...$("recoveryCode", a.recoveryCode),
1083
1084
  ...a.redirectAfter === void 0 ? {} : { redirectAfter: !!a.redirectAfter },
1084
1085
  ...i.remoteAddr ? { ipAddress: i.remoteAddr } : {},
1085
1086
  ...i.headers["user-agent"] ? { userAgent: i.headers["user-agent"] } : {}
1086
- }, r, c));
1087
- if (t.passkey && i.method === "POST" && _(i, "/passkey/assert/options")) return b(ut({ ...$("userId", a.userId) }, r, s, t.passkey));
1088
- if (t.passkey && i.method === "POST" && _(i, "/passkey/assert/verify")) return b(dt({
1087
+ }, r, l));
1088
+ if (t.passkey && i.method === "POST" && y(i, "/passkey/assert/options")) return b(ft({ ...$("userId", a.userId) }, r, s, t.passkey));
1089
+ if (t.passkey && i.method === "POST" && y(i, "/passkey/assert/verify")) return b(pt({
1089
1090
  credentialId: Q(a.credentialId) ?? "",
1090
1091
  clientDataJSON: Q(a.clientDataJSON) ?? "",
1091
1092
  authenticatorData: Q(a.authenticatorData) ?? "",
1092
1093
  signature: Q(a.signature) ?? "",
1093
1094
  ...$("userId", a.userId)
1094
- }, r, s, t.passkey, c));
1095
- let o = await p(i), d = o?.subject ?? null, f = () => !d || d.type !== "user" ? Z(401, { error: "unauthenticated" }) : { userId: d.id }, m = () => g(i) ? null : Z(403, { error: "csrf" }), v = (e) => b(e).then((e) => h(e, o?.renewSetCookie));
1095
+ }, r, s, t.passkey, l));
1096
+ let o = await h(i), d = o?.subject ?? null, f = () => !d || d.type !== "user" ? Z(401, { error: "unauthenticated" }) : { userId: d.id }, m = () => _(i) ? null : Z(403, { error: "csrf" }), v = (e) => b(e).then((e) => g(e, o?.renewSetCookie));
1096
1097
  if (d && q(d)) {
1097
1098
  let e = i.path.startsWith(n) ? i.path.slice(n.length) : "";
1098
- if (Dt.includes(e)) return Z(403, {
1099
+ if (kt.includes(e)) return Z(403, {
1099
1100
  error: "forbidden_while_impersonating",
1100
1101
  message: "This action changes account credentials or session scope and is refused while impersonating. Stop the impersonation first."
1101
1102
  });
1102
1103
  }
1103
- if (i.method === "GET" && _(i, "/session")) {
1104
+ if (i.method === "GET" && y(i, "/session")) {
1104
1105
  let e = f();
1105
- return "status" in e ? e : h(Z(200, {
1106
+ return "status" in e ? e : g(Z(200, {
1106
1107
  ok: !0,
1107
1108
  subject: d,
1108
1109
  renewed: o?.renewSetCookie !== void 0
1109
1110
  }), o?.renewSetCookie);
1110
1111
  }
1111
- if (i.method === "GET" && _(i, "/sessions")) {
1112
+ if (i.method === "GET" && y(i, "/sessions")) {
1112
1113
  let e = f();
1113
- return "status" in e ? e : v(et({ userId: e.userId }, r));
1114
+ return "status" in e ? e : v(nt({ userId: e.userId }, r));
1114
1115
  }
1115
- if (i.method === "GET" && _(i, "/memberships")) {
1116
+ if (i.method === "GET" && y(i, "/memberships")) {
1116
1117
  let e = f();
1117
- return "status" in e ? e : v(it({ userId: e.userId }, r));
1118
+ return "status" in e ? e : v(ot({ userId: e.userId }, r));
1118
1119
  }
1119
- if (i.method === "POST" && _(i, "/sessions/revoke")) {
1120
+ if (i.method === "POST" && y(i, "/sessions/revoke")) {
1120
1121
  let e = f();
1121
1122
  if ("status" in e) return e;
1122
1123
  let t = m();
1123
1124
  if (t) return t;
1124
1125
  let n = Q(a.sessionId) ?? "";
1125
- return v(tt({
1126
+ return v(rt({
1126
1127
  userId: e.userId,
1127
1128
  sessionId: n
1128
- }, r)).then((e) => (n && u.invalidate(n), e));
1129
+ }, r)).then((e) => (n && p.invalidate(n), e));
1129
1130
  }
1130
- if (i.method === "POST" && _(i, "/sessions/revoke-others")) {
1131
+ if (i.method === "POST" && y(i, "/sessions/revoke-others")) {
1131
1132
  let e = f();
1132
- return "status" in e ? e : m() || v(nt({
1133
+ return "status" in e ? e : m() || v(it({
1133
1134
  userId: e.userId,
1134
1135
  keepSessionId: o?.sessionId ?? "__none__"
1135
1136
  }, r));
1136
1137
  }
1137
- if (t.invitations && i.method === "POST" && _(i, "/invitations")) {
1138
+ if (t.invitations && i.method === "POST" && y(i, "/invitations")) {
1138
1139
  let e = f();
1139
- return "status" in e ? e : m() || v(bt({
1140
+ return "status" in e ? e : m() || v(St({
1140
1141
  inviterUserId: e.userId,
1141
1142
  tenantId: Q(a.tenantId) ?? d?.tenantId ?? "",
1142
1143
  email: Q(a.email) ?? "",
1143
1144
  role: Q(a.role) ?? ""
1144
- }, r, l));
1145
+ }, r, u));
1145
1146
  }
1146
1147
  if (t.invitations && i.method === "GET" && i.path === `${n}/invitations`) {
1147
1148
  let e = f();
1148
- return "status" in e ? e : v(xt({
1149
+ return "status" in e ? e : v(Ct({
1149
1150
  callerUserId: e.userId,
1150
1151
  tenantId: d?.tenantId ?? ""
1151
- }, r, l));
1152
+ }, r, u));
1152
1153
  }
1153
- if (t.invitations && i.method === "POST" && _(i, "/invitations/revoke")) {
1154
+ if (t.invitations && i.method === "POST" && y(i, "/invitations/revoke")) {
1154
1155
  let e = f();
1155
- return "status" in e ? e : m() || v(St({
1156
+ return "status" in e ? e : m() || v(wt({
1156
1157
  callerUserId: e.userId,
1157
1158
  tenantId: Q(a.tenantId) ?? d?.tenantId ?? "",
1158
1159
  invitationId: Q(a.invitationId) ?? ""
1159
- }, r, l));
1160
+ }, r, u));
1160
1161
  }
1161
- if (t.invitations && i.method === "POST" && _(i, "/invitations/accept")) {
1162
+ if (t.invitations && i.method === "POST" && y(i, "/invitations/accept")) {
1162
1163
  let e = f();
1163
1164
  if (!("status" in e)) {
1164
1165
  let e = m();
1165
1166
  if (e) return e;
1166
1167
  }
1167
- return v(wt({
1168
+ return v(Et({
1168
1169
  token: Q(a.token) ?? "",
1169
1170
  ..."status" in e ? {} : { userId: e.userId }
1170
- }, r, l));
1171
+ }, r, u));
1171
1172
  }
1172
- if (t.impersonation && i.method === "POST" && _(i, "/impersonate/start")) {
1173
+ if (t.impersonation && i.method === "POST" && y(i, "/impersonate/start")) {
1173
1174
  let e = f();
1174
- return "status" in e ? e : m() || b(At({
1175
+ return "status" in e ? e : m() || b(Mt({
1175
1176
  actorSubject: d,
1176
1177
  actorSessionId: o?.sessionId ?? "",
1177
1178
  ...$("targetUserId", a.userId),
@@ -1184,68 +1185,68 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
1184
1185
  impersonation: t.impersonation,
1185
1186
  issuer: x,
1186
1187
  ...t.now === void 0 ? {} : { now: t.now },
1187
- invalidateSession: (e) => u.invalidate(e)
1188
+ invalidateSession: (e) => p.invalidate(e)
1188
1189
  }));
1189
1190
  }
1190
- if (t.impersonation && i.method === "POST" && _(i, "/impersonate/stop")) {
1191
+ if (t.impersonation && i.method === "POST" && y(i, "/impersonate/stop")) {
1191
1192
  let e = f();
1192
- return "status" in e ? e : m() || b(jt({
1193
+ return "status" in e ? e : m() || b(Nt({
1193
1194
  subject: d,
1194
1195
  sessionId: o?.sessionId ?? ""
1195
1196
  }, r, {
1196
1197
  impersonation: t.impersonation,
1197
1198
  issuer: x,
1198
1199
  ...t.now === void 0 ? {} : { now: t.now },
1199
- invalidateSession: (e) => u.invalidate(e)
1200
+ invalidateSession: (e) => p.invalidate(e)
1200
1201
  }));
1201
1202
  }
1202
- if (i.method === "POST" && _(i, "/switch-tenant")) {
1203
+ if (i.method === "POST" && y(i, "/switch-tenant")) {
1203
1204
  let e = f();
1204
- return "status" in e ? e : m() || b(rt({
1205
+ return "status" in e ? e : m() || b(at({
1205
1206
  userId: e.userId,
1206
1207
  targetTenantId: Q(a.targetTenantId) ?? "",
1207
1208
  ...typeof a.clientId == "number" ? { clientId: a.clientId } : {},
1208
1209
  ...o?.sessionId ? { sessionId: o.sessionId } : {},
1209
1210
  ...d?.type === "user" && d.metadata ? { metadata: d.metadata } : {}
1210
- }, r, c, t.rebind));
1211
+ }, r, l, t.rebind, c.current));
1211
1212
  }
1212
- if (t.mfa && i.method === "POST" && _(i, "/mfa/enroll/start")) {
1213
+ if (t.mfa && i.method === "POST" && y(i, "/mfa/enroll/start")) {
1213
1214
  let e = f();
1214
1215
  if ("status" in e) return e;
1215
1216
  let n = m();
1216
1217
  if (n) return n;
1217
1218
  let i = await C.runPromise(r.findById(e.userId));
1218
- return v(We({
1219
+ return v(Ke({
1219
1220
  userId: e.userId,
1220
1221
  issuer: t.mfa.issuer,
1221
1222
  accountName: i?.email ?? e.userId
1222
1223
  }, r));
1223
1224
  }
1224
- if (t.mfa && i.method === "POST" && _(i, "/mfa/enroll/verify")) {
1225
+ if (t.mfa && i.method === "POST" && y(i, "/mfa/enroll/verify")) {
1225
1226
  let e = f();
1226
- return "status" in e ? e : m() || v(Ge({
1227
+ return "status" in e ? e : m() || v(qe({
1227
1228
  userId: e.userId,
1228
1229
  code: Q(a.code) ?? ""
1229
1230
  }, r));
1230
1231
  }
1231
- if (t.mfa && i.method === "POST" && _(i, "/mfa/unenroll")) {
1232
+ if (t.mfa && i.method === "POST" && y(i, "/mfa/unenroll")) {
1232
1233
  let e = f();
1233
- return "status" in e ? e : m() || v(qe({ userId: e.userId }, r));
1234
+ return "status" in e ? e : m() || v(Ye({ userId: e.userId }, r));
1234
1235
  }
1235
- if (t.mfa && i.method === "POST" && _(i, "/mfa/recovery-codes/regenerate")) {
1236
+ if (t.mfa && i.method === "POST" && y(i, "/mfa/recovery-codes/regenerate")) {
1236
1237
  let e = f();
1237
- return "status" in e ? e : m() || v(Ke({ userId: e.userId }, r));
1238
+ return "status" in e ? e : m() || v(Je({ userId: e.userId }, r));
1238
1239
  }
1239
- if (t.passkey && i.method === "POST" && _(i, "/passkey/register/options")) {
1240
+ if (t.passkey && i.method === "POST" && y(i, "/passkey/register/options")) {
1240
1241
  let e = f();
1241
- return "status" in e ? e : m() || v(ct({
1242
+ return "status" in e ? e : m() || v(ut({
1242
1243
  userId: e.userId,
1243
1244
  userName: Q(a.userName) ?? e.userId
1244
1245
  }, r, s, t.passkey));
1245
1246
  }
1246
- if (t.passkey && i.method === "POST" && _(i, "/passkey/register/verify")) {
1247
+ if (t.passkey && i.method === "POST" && y(i, "/passkey/register/verify")) {
1247
1248
  let e = f();
1248
- return "status" in e ? e : m() || v(lt({
1249
+ return "status" in e ? e : m() || v(dt({
1249
1250
  userId: e.userId,
1250
1251
  credentialId: Q(a.credentialId) ?? "",
1251
1252
  clientDataJSON: Q(a.clientDataJSON) ?? "",
@@ -1255,18 +1256,21 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
1255
1256
  }
1256
1257
  return !t.passkey && i.path.startsWith(`${n}/passkey/`) ? Z(501, { error: "passkey_not_configured" }) : Z(404, { error: "not_found" });
1257
1258
  }
1258
- }, ne = ue({
1259
+ }, re = de({
1259
1260
  name: t.name ? `@voltro/plugin-auth#${t.name}` : "@voltro/plugin-auth",
1260
1261
  description: "Auth routes — mounts the full auth surface (password, magic-link, password-reset, CSRF, session probe/list/revoke, memberships, switch-tenant, passkey ceremonies) under /auth on the framework listener, with keyed secret rotation + request-time revocation.",
1261
1262
  permissions: [],
1262
- declaredEnv: Lt,
1263
- httpRoutes: [te],
1263
+ declaredEnv: zt,
1264
+ httpRoutes: [ne],
1265
+ bindDataStore: (e) => {
1266
+ c.current = e;
1267
+ },
1264
1268
  onActivate: (e) => C.sync(() => {
1265
1269
  e.logger.info("auth routes active", {
1266
1270
  prefix: n,
1267
1271
  passkey: t.passkey ? t.passkey.rpId : "disabled",
1268
1272
  email: t.sendEmail ? "wired" : "unwired",
1269
- revocationWindowMs: u.ttlMs,
1273
+ revocationWindowMs: p.ttlMs,
1270
1274
  emailVerification: t.emailVerification?.policy ?? "off",
1271
1275
  invitations: t.invitations ? "enabled" : "disabled",
1272
1276
  impersonation: t.impersonation ? `enabled(max ${t.impersonation.maxDurationSeconds ?? 900}s)` : "disabled"
@@ -1275,14 +1279,14 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
1275
1279
  onDeactivate: () => C.void
1276
1280
  }), S = t.secrets ?? t.secret;
1277
1281
  return {
1278
- ...ne,
1282
+ ...re,
1279
1283
  auth: { sessionStrategy: m({
1280
1284
  ...S === void 0 ? {} : { secret: S },
1281
1285
  store: r,
1282
- revocation: u
1286
+ revocation: p
1283
1287
  }) }
1284
1288
  };
1285
- }, Lt = [
1289
+ }, zt = [
1286
1290
  {
1287
1291
  name: "VOLTRO_SESSION_SECRET_PREVIOUS",
1288
1292
  required: !1,
@@ -1327,4 +1331,4 @@ var fe = { ok: !0 }, pe = (e, t) => C.gen(function* () {
1327
1331
  }
1328
1332
  ];
1329
1333
  //#endregion
1330
- export { Me as $, it as A, Qe as B, dt as C, F as D, ot as E, Ge as F, He as G, tt as H, Ke as I, De as J, rt as K, qe as L, Ze as M, Xe as N, z as O, We as P, Ae as Q, Ve as R, ut as S, lt as T, Be as U, nt as V, Ue as W, Ee as X, k as Y, A as Z, bt as _, At as a, Te as at, St as b, K as c, Se as ct, H as d, P as et, pt as f, Tt as g, wt as h, Dt as i, D as it, et as j, Je as k, q as l, we as lt, gt as m, Mt as n, N as nt, jt as o, Ce as ot, ft as p, R as q, Et as r, j as rt, kt as s, xe as st, It as t, ke as tt, mt as u, pe as ut, xt as v, ct as w, st as x, Ct as y, $e as z };
1334
+ export { Pe as $, ot as A, et as B, pt as C, F as D, ct as E, qe as F, We as G, rt as H, Je as I, ke as J, at as K, Ye as L, $e as M, Qe as N, z as O, Ke as P, Me as Q, Ue as R, ft as S, dt as T, He as U, it as V, Ge as W, Oe as X, k as Y, A as Z, St as _, Mt as a, O as at, wt as b, K as c, Ee as ct, H as d, P as et, ht as f, Dt as g, Et as h, kt as i, E as it, nt as j, Xe as k, q as l, D as lt, vt as m, Pt as n, N as nt, Nt as o, De as ot, mt as p, R as q, Ot as r, j as rt, jt as s, Te as st, Rt as t, je as tt, gt as u, he as ut, Ct as v, ut as w, lt as x, Tt as y, tt as z };