@arch-cadre/core 0.0.23 → 0.0.26
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.
- package/dist/_virtual/_rolldown/runtime.cjs +1 -29
- package/dist/_virtual/_rolldown/runtime.mjs +1 -18
- package/dist/core/auth/augment.cjs +1 -71
- package/dist/core/auth/augment.d.cts.map +1 -1
- package/dist/core/auth/augment.d.mts.map +1 -1
- package/dist/core/auth/augment.mjs +1 -65
- package/dist/core/auth/augment.mjs.map +1 -1
- package/dist/core/auth/email-verification.cjs +1 -99
- package/dist/core/auth/email-verification.d.cts +1 -1
- package/dist/core/auth/email-verification.d.mts +1 -1
- package/dist/core/auth/email-verification.mjs +1 -91
- package/dist/core/auth/email-verification.mjs.map +1 -1
- package/dist/core/auth/logic.cjs +1 -224
- package/dist/core/auth/logic.d.cts +6 -6
- package/dist/core/auth/logic.d.mts +6 -6
- package/dist/core/auth/logic.mjs +1 -212
- package/dist/core/auth/logic.mjs.map +1 -1
- package/dist/core/auth/password-reset.cjs +1 -118
- package/dist/core/auth/password-reset.mjs +1 -110
- package/dist/core/auth/password-reset.mjs.map +1 -1
- package/dist/core/auth/rbac.cjs +1 -118
- package/dist/core/auth/rbac.d.cts +2 -2
- package/dist/core/auth/rbac.d.mts +2 -2
- package/dist/core/auth/rbac.mjs +1 -103
- package/dist/core/auth/rbac.mjs.map +1 -1
- package/dist/core/auth/session.cjs +1 -154
- package/dist/core/auth/session.mjs +1 -142
- package/dist/core/auth/session.mjs.map +1 -1
- package/dist/core/auth/types.d.cts.map +1 -1
- package/dist/core/auth/types.d.mts.map +1 -1
- package/dist/core/auth/utils/encode.cjs +1 -27
- package/dist/core/auth/utils/encode.mjs +1 -25
- package/dist/core/auth/utils/encode.mjs.map +1 -1
- package/dist/core/auth/utils/encryption.cjs +1 -67
- package/dist/core/auth/utils/encryption.mjs +1 -63
- package/dist/core/auth/utils/encryption.mjs.map +1 -1
- package/dist/core/auth/validation.cjs +1 -39
- package/dist/core/auth/validation.mjs +1 -30
- package/dist/core/auth/validation.mjs.map +1 -1
- package/dist/core/bootstrap.cjs +1 -39
- package/dist/core/bootstrap.mjs +1 -39
- package/dist/core/bootstrap.mjs.map +1 -1
- package/dist/core/config.cjs +1 -6
- package/dist/core/config.mjs +1 -5
- package/dist/core/config.mjs.map +1 -1
- package/dist/core/config.server.cjs +1 -60
- package/dist/core/config.server.mjs +1 -56
- package/dist/core/config.server.mjs.map +1 -1
- package/dist/core/event-bus.cjs +1 -48
- package/dist/core/event-bus.d.cts.map +1 -1
- package/dist/core/event-bus.d.mts.map +1 -1
- package/dist/core/event-bus.mjs +1 -47
- package/dist/core/event-bus.mjs.map +1 -1
- package/dist/core/filesystem/index.cjs +1 -11
- package/dist/core/filesystem/index.mjs +1 -12
- package/dist/core/filesystem/index.mjs.map +1 -1
- package/dist/core/filesystem/providers/local.cjs +1 -43
- package/dist/core/filesystem/providers/local.mjs +1 -40
- package/dist/core/filesystem/providers/local.mjs.map +1 -1
- package/dist/core/filesystem/service.cjs +1 -43
- package/dist/core/filesystem/service.mjs +1 -42
- package/dist/core/filesystem/service.mjs.map +1 -1
- package/dist/core/notifications/actions.cjs +1 -36
- package/dist/core/notifications/actions.d.cts +1 -1
- package/dist/core/notifications/actions.d.mts +1 -1
- package/dist/core/notifications/actions.mjs +1 -32
- package/dist/core/notifications/actions.mjs.map +1 -1
- package/dist/core/notifications/index.cjs +1 -2
- package/dist/core/notifications/index.mjs +1 -4
- package/dist/core/notifications/service.cjs +1 -30
- package/dist/core/notifications/service.mjs +1 -30
- package/dist/core/notifications/service.mjs.map +1 -1
- package/dist/core/setup.cjs +1 -25
- package/dist/core/setup.mjs +1 -24
- package/dist/core/setup.mjs.map +1 -1
- package/dist/index.cjs +1 -30
- package/dist/index.mjs +1 -6
- package/dist/server/auth/email.cjs +1 -24
- package/dist/server/auth/email.mjs +1 -22
- package/dist/server/auth/email.mjs.map +1 -1
- package/dist/server/auth/password.cjs +1 -37
- package/dist/server/auth/password.mjs +1 -33
- package/dist/server/auth/password.mjs.map +1 -1
- package/dist/server/auth/user.cjs +1 -165
- package/dist/server/auth/user.mjs +1 -152
- package/dist/server/auth/user.mjs.map +1 -1
- package/dist/server/database/inject.cjs +1 -24
- package/dist/server/database/inject.mjs +1 -22
- package/dist/server/database/inject.mjs.map +1 -1
- package/dist/server/database/schema.cjs +1 -163
- package/dist/server/database/schema.mjs +1 -150
- package/dist/server/database/schema.mjs.map +1 -1
- package/dist/server/emails/index.cjs +1 -32
- package/dist/server/emails/index.mjs +1 -28
- package/dist/server/emails/index.mjs.map +1 -1
- package/dist/server.cjs +1 -145
- package/dist/server.mjs +1 -23
- package/package.json +1 -1
|
@@ -1,154 +1 @@
|
|
|
1
|
-
"use server";
|
|
2
|
-
|
|
3
|
-
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
4
|
-
const require_inject = require('../../server/database/inject.cjs');
|
|
5
|
-
const require_schema = require('../../server/database/schema.cjs');
|
|
6
|
-
const require_augment = require('./augment.cjs');
|
|
7
|
-
const require_logic = require('./logic.cjs');
|
|
8
|
-
let drizzle_orm = require("drizzle-orm");
|
|
9
|
-
let _oslojs_crypto_sha2 = require("@oslojs/crypto/sha2");
|
|
10
|
-
let _oslojs_encoding = require("@oslojs/encoding");
|
|
11
|
-
let date_fns = require("date-fns");
|
|
12
|
-
let next_headers = require("next/headers");
|
|
13
|
-
let next_navigation = require("next/navigation");
|
|
14
|
-
|
|
15
|
-
//#region src/core/auth/session.ts
|
|
16
|
-
/**
|
|
17
|
-
* Returns the user's IP address.
|
|
18
|
-
*/
|
|
19
|
-
async function getIPAddress() {
|
|
20
|
-
return (await (0, next_headers.headers)()).get("x-forwarded-for");
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Validates the session token.
|
|
24
|
-
*/
|
|
25
|
-
async function validateSessionToken(token) {
|
|
26
|
-
const sessionId = (0, _oslojs_encoding.encodeHexLowerCase)((0, _oslojs_crypto_sha2.sha256)(new TextEncoder().encode(token)));
|
|
27
|
-
const [row] = await require_inject.db.select({
|
|
28
|
-
session: require_schema.sessionTable,
|
|
29
|
-
user: require_schema.userTable
|
|
30
|
-
}).from(require_schema.sessionTable).innerJoin(require_schema.userTable, (0, drizzle_orm.eq)(require_schema.sessionTable.userId, require_schema.userTable.id)).where((0, drizzle_orm.eq)(require_schema.sessionTable.id, sessionId));
|
|
31
|
-
if (!row || !row.user) return {
|
|
32
|
-
session: null,
|
|
33
|
-
user: null
|
|
34
|
-
};
|
|
35
|
-
const { session: baseSession, user: baseUser } = row;
|
|
36
|
-
const { password, recovery_code, ...safeUser } = baseUser;
|
|
37
|
-
if (/* @__PURE__ */ new Date() > baseSession.expiresAt) {
|
|
38
|
-
await require_inject.db.delete(require_schema.sessionTable).where((0, drizzle_orm.eq)(require_schema.sessionTable.id, baseSession.id));
|
|
39
|
-
return {
|
|
40
|
-
session: null,
|
|
41
|
-
user: null
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
const augmentedUser = await require_logic.performFullUserAugmentation(safeUser);
|
|
45
|
-
const augmentedSession = await require_augment.augmentSession(baseSession);
|
|
46
|
-
return {
|
|
47
|
-
session: augmentedSession ? { ...augmentedSession } : null,
|
|
48
|
-
user: augmentedUser ? { ...augmentedUser } : null
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Returns the current user session from cookies.
|
|
53
|
-
*/
|
|
54
|
-
const getCurrentSession = async () => {
|
|
55
|
-
const token = (await (0, next_headers.cookies)()).get("session")?.value ?? null;
|
|
56
|
-
if (token === null) return {
|
|
57
|
-
session: null,
|
|
58
|
-
user: null
|
|
59
|
-
};
|
|
60
|
-
return await validateSessionToken(token);
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Invalidates a single session.
|
|
64
|
-
*/
|
|
65
|
-
async function invalidateSession(sessionId) {
|
|
66
|
-
await require_inject.db.delete(require_schema.sessionTable).where((0, drizzle_orm.eq)(require_schema.sessionTable.id, sessionId));
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Invalidates all user sessions.
|
|
70
|
-
*/
|
|
71
|
-
async function invalidateUserSessions(userId) {
|
|
72
|
-
await require_inject.db.delete(require_schema.sessionTable).where((0, drizzle_orm.eq)(require_schema.sessionTable.userId, userId));
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Sets the session token in a cookie.
|
|
76
|
-
*/
|
|
77
|
-
async function setSessionTokenCookie(token, expiresAt) {
|
|
78
|
-
(await (0, next_headers.cookies)()).set("session", token, {
|
|
79
|
-
httpOnly: true,
|
|
80
|
-
path: "/",
|
|
81
|
-
secure: process.env.NODE_ENV === "production",
|
|
82
|
-
sameSite: "lax",
|
|
83
|
-
expires: expiresAt
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Removes the session token cookie.
|
|
88
|
-
*/
|
|
89
|
-
async function deleteSessionTokenCookie() {
|
|
90
|
-
(await (0, next_headers.cookies)()).delete("session");
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Generates a new random session token.
|
|
94
|
-
*/
|
|
95
|
-
async function generateSessionToken() {
|
|
96
|
-
const tokenBytes = new Uint8Array(20);
|
|
97
|
-
crypto.getRandomValues(tokenBytes);
|
|
98
|
-
return (0, _oslojs_encoding.encodeBase32LowerCaseNoPadding)(tokenBytes).toLowerCase();
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Creates a new session in the database.
|
|
102
|
-
*/
|
|
103
|
-
async function createSession(token, userId, flags) {
|
|
104
|
-
const sessionId = (0, _oslojs_encoding.encodeHexLowerCase)((0, _oslojs_crypto_sha2.sha256)(new TextEncoder().encode(token)));
|
|
105
|
-
const [session] = await require_inject.db.insert(require_schema.sessionTable).values({
|
|
106
|
-
id: sessionId,
|
|
107
|
-
expiresAt: new Date((0, date_fns.addDays)(/* @__PURE__ */ new Date(), 7)),
|
|
108
|
-
active_organization_id: flags.activeOrganizationId,
|
|
109
|
-
userId
|
|
110
|
-
}).returning();
|
|
111
|
-
return session;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Signs the user out and redirects to the sign-in page.
|
|
115
|
-
*/
|
|
116
|
-
async function sessionSignOut() {
|
|
117
|
-
const { session } = await getCurrentSession();
|
|
118
|
-
if (session) {
|
|
119
|
-
await invalidateSession(session.id);
|
|
120
|
-
await deleteSessionTokenCookie();
|
|
121
|
-
}
|
|
122
|
-
(0, next_navigation.redirect)("/signin");
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Get all active sessions for a user.
|
|
126
|
-
*/
|
|
127
|
-
async function getUserSessions(userId, currentSessionId) {
|
|
128
|
-
return (await require_inject.db.select().from(require_schema.sessionTable).where((0, drizzle_orm.eq)(require_schema.sessionTable.userId, userId))).map((session) => ({
|
|
129
|
-
id: session.id,
|
|
130
|
-
createdAt: session.createdAt,
|
|
131
|
-
expiresAt: session.expiresAt,
|
|
132
|
-
isCurrent: session.id === currentSessionId
|
|
133
|
-
}));
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Invalidate all sessions for a user except the specified current one.
|
|
137
|
-
*/
|
|
138
|
-
async function invalidateOtherSessions(userId, currentSessionId) {
|
|
139
|
-
await require_inject.db.delete(require_schema.sessionTable).where((0, drizzle_orm.and)((0, drizzle_orm.eq)(require_schema.sessionTable.userId, userId), (0, drizzle_orm.ne)(require_schema.sessionTable.id, currentSessionId)));
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
//#endregion
|
|
143
|
-
exports.createSession = createSession;
|
|
144
|
-
exports.deleteSessionTokenCookie = deleteSessionTokenCookie;
|
|
145
|
-
exports.generateSessionToken = generateSessionToken;
|
|
146
|
-
exports.getCurrentSession = getCurrentSession;
|
|
147
|
-
exports.getIPAddress = getIPAddress;
|
|
148
|
-
exports.getUserSessions = getUserSessions;
|
|
149
|
-
exports.invalidateOtherSessions = invalidateOtherSessions;
|
|
150
|
-
exports.invalidateSession = invalidateSession;
|
|
151
|
-
exports.invalidateUserSessions = invalidateUserSessions;
|
|
152
|
-
exports.sessionSignOut = sessionSignOut;
|
|
153
|
-
exports.setSessionTokenCookie = setSessionTokenCookie;
|
|
154
|
-
exports.validateSessionToken = validateSessionToken;
|
|
1
|
+
"use server";require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../server/database/inject.cjs`),t=require(`../../server/database/schema.cjs`),n=require(`./augment.cjs`),r=require(`./logic.cjs`);let i=require(`drizzle-orm`),a=require(`@oslojs/crypto/sha2`),o=require(`@oslojs/encoding`),s=require(`date-fns`),c=require(`next/headers`),l=require(`next/navigation`);async function u(){return(await(0,c.headers)()).get(`x-forwarded-for`)}async function d(s){let c=(0,o.encodeHexLowerCase)((0,a.sha256)(new TextEncoder().encode(s))),[l]=await e.db.select({session:t.sessionTable,user:t.userTable}).from(t.sessionTable).innerJoin(t.userTable,(0,i.eq)(t.sessionTable.userId,t.userTable.id)).where((0,i.eq)(t.sessionTable.id,c));if(!l||!l.user)return{session:null,user:null};let{session:u,user:d}=l,{password:f,recovery_code:p,...m}=d;if(new Date>u.expiresAt)return await e.db.delete(t.sessionTable).where((0,i.eq)(t.sessionTable.id,u.id)),{session:null,user:null};let h=await r.performFullUserAugmentation(m),g=await n.augmentSession(u);return{session:g?{...g}:null,user:h?{...h}:null}}const f=async()=>{let e=(await(0,c.cookies)()).get(`session`)?.value??null;return e===null?{session:null,user:null}:await d(e)};async function p(n){await e.db.delete(t.sessionTable).where((0,i.eq)(t.sessionTable.id,n))}async function m(n){await e.db.delete(t.sessionTable).where((0,i.eq)(t.sessionTable.userId,n))}async function h(e,t){(await(0,c.cookies)()).set(`session`,e,{httpOnly:!0,path:`/`,secure:process.env.NODE_ENV===`production`,sameSite:`lax`,expires:t})}async function g(){(await(0,c.cookies)()).delete(`session`)}async function _(){let e=new Uint8Array(20);return crypto.getRandomValues(e),(0,o.encodeBase32LowerCaseNoPadding)(e).toLowerCase()}async function v(n,r,i){let c=(0,o.encodeHexLowerCase)((0,a.sha256)(new TextEncoder().encode(n))),[l]=await e.db.insert(t.sessionTable).values({id:c,expiresAt:new Date((0,s.addDays)(new Date,7)),active_organization_id:i.activeOrganizationId,userId:r}).returning();return l}async function y(){let{session:e}=await f();e&&(await p(e.id),await g()),(0,l.redirect)(`/signin`)}async function b(n,r){return(await e.db.select().from(t.sessionTable).where((0,i.eq)(t.sessionTable.userId,n))).map(e=>({id:e.id,createdAt:e.createdAt,expiresAt:e.expiresAt,isCurrent:e.id===r}))}async function x(n,r){await e.db.delete(t.sessionTable).where((0,i.and)((0,i.eq)(t.sessionTable.userId,n),(0,i.ne)(t.sessionTable.id,r)))}exports.createSession=v,exports.deleteSessionTokenCookie=g,exports.generateSessionToken=_,exports.getCurrentSession=f,exports.getIPAddress=u,exports.getUserSessions=b,exports.invalidateOtherSessions=x,exports.invalidateSession=p,exports.invalidateUserSessions=m,exports.sessionSignOut=y,exports.setSessionTokenCookie=h,exports.validateSessionToken=d;
|
|
@@ -1,143 +1,2 @@
|
|
|
1
|
-
"use server";
|
|
2
|
-
|
|
3
|
-
import { db } from "../../server/database/inject.mjs";
|
|
4
|
-
import { sessionTable, userTable } from "../../server/database/schema.mjs";
|
|
5
|
-
import { augmentSession } from "./augment.mjs";
|
|
6
|
-
import { performFullUserAugmentation } from "./logic.mjs";
|
|
7
|
-
import { and, eq, ne } from "drizzle-orm";
|
|
8
|
-
import { sha256 } from "@oslojs/crypto/sha2";
|
|
9
|
-
import { encodeBase32LowerCaseNoPadding, encodeHexLowerCase } from "@oslojs/encoding";
|
|
10
|
-
import { addDays } from "date-fns";
|
|
11
|
-
import { cookies, headers } from "next/headers";
|
|
12
|
-
import { redirect } from "next/navigation";
|
|
13
|
-
|
|
14
|
-
//#region src/core/auth/session.ts
|
|
15
|
-
/**
|
|
16
|
-
* Returns the user's IP address.
|
|
17
|
-
*/
|
|
18
|
-
async function getIPAddress() {
|
|
19
|
-
return (await headers()).get("x-forwarded-for");
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Validates the session token.
|
|
23
|
-
*/
|
|
24
|
-
async function validateSessionToken(token) {
|
|
25
|
-
const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));
|
|
26
|
-
const [row] = await db.select({
|
|
27
|
-
session: sessionTable,
|
|
28
|
-
user: userTable
|
|
29
|
-
}).from(sessionTable).innerJoin(userTable, eq(sessionTable.userId, userTable.id)).where(eq(sessionTable.id, sessionId));
|
|
30
|
-
if (!row || !row.user) return {
|
|
31
|
-
session: null,
|
|
32
|
-
user: null
|
|
33
|
-
};
|
|
34
|
-
const { session: baseSession, user: baseUser } = row;
|
|
35
|
-
const { password, recovery_code, ...safeUser } = baseUser;
|
|
36
|
-
if (/* @__PURE__ */ new Date() > baseSession.expiresAt) {
|
|
37
|
-
await db.delete(sessionTable).where(eq(sessionTable.id, baseSession.id));
|
|
38
|
-
return {
|
|
39
|
-
session: null,
|
|
40
|
-
user: null
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
const augmentedUser = await performFullUserAugmentation(safeUser);
|
|
44
|
-
const augmentedSession = await augmentSession(baseSession);
|
|
45
|
-
return {
|
|
46
|
-
session: augmentedSession ? { ...augmentedSession } : null,
|
|
47
|
-
user: augmentedUser ? { ...augmentedUser } : null
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Returns the current user session from cookies.
|
|
52
|
-
*/
|
|
53
|
-
const getCurrentSession = async () => {
|
|
54
|
-
const token = (await cookies()).get("session")?.value ?? null;
|
|
55
|
-
if (token === null) return {
|
|
56
|
-
session: null,
|
|
57
|
-
user: null
|
|
58
|
-
};
|
|
59
|
-
return await validateSessionToken(token);
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* Invalidates a single session.
|
|
63
|
-
*/
|
|
64
|
-
async function invalidateSession(sessionId) {
|
|
65
|
-
await db.delete(sessionTable).where(eq(sessionTable.id, sessionId));
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Invalidates all user sessions.
|
|
69
|
-
*/
|
|
70
|
-
async function invalidateUserSessions(userId) {
|
|
71
|
-
await db.delete(sessionTable).where(eq(sessionTable.userId, userId));
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Sets the session token in a cookie.
|
|
75
|
-
*/
|
|
76
|
-
async function setSessionTokenCookie(token, expiresAt) {
|
|
77
|
-
(await cookies()).set("session", token, {
|
|
78
|
-
httpOnly: true,
|
|
79
|
-
path: "/",
|
|
80
|
-
secure: process.env.NODE_ENV === "production",
|
|
81
|
-
sameSite: "lax",
|
|
82
|
-
expires: expiresAt
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Removes the session token cookie.
|
|
87
|
-
*/
|
|
88
|
-
async function deleteSessionTokenCookie() {
|
|
89
|
-
(await cookies()).delete("session");
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Generates a new random session token.
|
|
93
|
-
*/
|
|
94
|
-
async function generateSessionToken() {
|
|
95
|
-
const tokenBytes = new Uint8Array(20);
|
|
96
|
-
crypto.getRandomValues(tokenBytes);
|
|
97
|
-
return encodeBase32LowerCaseNoPadding(tokenBytes).toLowerCase();
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Creates a new session in the database.
|
|
101
|
-
*/
|
|
102
|
-
async function createSession(token, userId, flags) {
|
|
103
|
-
const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));
|
|
104
|
-
const [session] = await db.insert(sessionTable).values({
|
|
105
|
-
id: sessionId,
|
|
106
|
-
expiresAt: new Date(addDays(/* @__PURE__ */ new Date(), 7)),
|
|
107
|
-
active_organization_id: flags.activeOrganizationId,
|
|
108
|
-
userId
|
|
109
|
-
}).returning();
|
|
110
|
-
return session;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Signs the user out and redirects to the sign-in page.
|
|
114
|
-
*/
|
|
115
|
-
async function sessionSignOut() {
|
|
116
|
-
const { session } = await getCurrentSession();
|
|
117
|
-
if (session) {
|
|
118
|
-
await invalidateSession(session.id);
|
|
119
|
-
await deleteSessionTokenCookie();
|
|
120
|
-
}
|
|
121
|
-
redirect("/signin");
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Get all active sessions for a user.
|
|
125
|
-
*/
|
|
126
|
-
async function getUserSessions(userId, currentSessionId) {
|
|
127
|
-
return (await db.select().from(sessionTable).where(eq(sessionTable.userId, userId))).map((session) => ({
|
|
128
|
-
id: session.id,
|
|
129
|
-
createdAt: session.createdAt,
|
|
130
|
-
expiresAt: session.expiresAt,
|
|
131
|
-
isCurrent: session.id === currentSessionId
|
|
132
|
-
}));
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Invalidate all sessions for a user except the specified current one.
|
|
136
|
-
*/
|
|
137
|
-
async function invalidateOtherSessions(userId, currentSessionId) {
|
|
138
|
-
await db.delete(sessionTable).where(and(eq(sessionTable.userId, userId), ne(sessionTable.id, currentSessionId)));
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
//#endregion
|
|
142
|
-
export { createSession, deleteSessionTokenCookie, generateSessionToken, getCurrentSession, getIPAddress, getUserSessions, invalidateOtherSessions, invalidateSession, invalidateUserSessions, sessionSignOut, setSessionTokenCookie, validateSessionToken };
|
|
1
|
+
"use server";import{db as e}from"../../server/database/inject.mjs";import{sessionTable as t,userTable as n}from"../../server/database/schema.mjs";import{augmentSession as r}from"./augment.mjs";import{performFullUserAugmentation as i}from"./logic.mjs";import{and as a,eq as o,ne as s}from"drizzle-orm";import{sha256 as c}from"@oslojs/crypto/sha2";import{encodeBase32LowerCaseNoPadding as l,encodeHexLowerCase as u}from"@oslojs/encoding";import{addDays as d}from"date-fns";import{cookies as f,headers as p}from"next/headers";import{redirect as m}from"next/navigation";async function h(){return(await p()).get(`x-forwarded-for`)}async function g(a){let s=u(c(new TextEncoder().encode(a))),[l]=await e.select({session:t,user:n}).from(t).innerJoin(n,o(t.userId,n.id)).where(o(t.id,s));if(!l||!l.user)return{session:null,user:null};let{session:d,user:f}=l,{password:p,recovery_code:m,...h}=f;if(new Date>d.expiresAt)return await e.delete(t).where(o(t.id,d.id)),{session:null,user:null};let g=await i(h),_=await r(d);return{session:_?{..._}:null,user:g?{...g}:null}}const _=async()=>{let e=(await f()).get(`session`)?.value??null;return e===null?{session:null,user:null}:await g(e)};async function v(n){await e.delete(t).where(o(t.id,n))}async function y(n){await e.delete(t).where(o(t.userId,n))}async function b(e,t){(await f()).set(`session`,e,{httpOnly:!0,path:`/`,secure:process.env.NODE_ENV===`production`,sameSite:`lax`,expires:t})}async function x(){(await f()).delete(`session`)}async function S(){let e=new Uint8Array(20);return crypto.getRandomValues(e),l(e).toLowerCase()}async function C(n,r,i){let a=u(c(new TextEncoder().encode(n))),[o]=await e.insert(t).values({id:a,expiresAt:new Date(d(new Date,7)),active_organization_id:i.activeOrganizationId,userId:r}).returning();return o}async function w(){let{session:e}=await _();e&&(await v(e.id),await x()),m(`/signin`)}async function T(n,r){return(await e.select().from(t).where(o(t.userId,n))).map(e=>({id:e.id,createdAt:e.createdAt,expiresAt:e.expiresAt,isCurrent:e.id===r}))}async function E(n,r){await e.delete(t).where(a(o(t.userId,n),s(t.id,r)))}export{C as createSession,x as deleteSessionTokenCookie,S as generateSessionToken,_ as getCurrentSession,h as getIPAddress,T as getUserSessions,E as invalidateOtherSessions,v as invalidateSession,y as invalidateUserSessions,w as sessionSignOut,b as setSessionTokenCookie,g as validateSessionToken};
|
|
143
2
|
//# sourceMappingURL=session.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.mjs","names":[],"sources":["../../../src/core/auth/session.ts"],"sourcesContent":["\"use server\";\n\nimport { sha256 } from \"@oslojs/crypto/sha2\";\nimport {\n encodeBase32LowerCaseNoPadding,\n encodeHexLowerCase,\n} from \"@oslojs/encoding\";\nimport { addDays } from \"date-fns\";\nimport { and, eq, ne } from \"drizzle-orm\";\nimport { cookies, headers } from \"next/headers\";\nimport { redirect } from \"next/navigation\";\nimport { db } from \"../../server/database/inject\";\nimport { sessionTable, userTable } from \"../../server/database/schema\";\nimport { augmentSession } from \"./augment\";\nimport { performFullUserAugmentation } from \"./logic\";\n\nimport type {\n AuthSession,\n Session,\n SessionFlags,\n User,\n UserSession,\n} from \"./types\";\n\n/**\n * Returns the user's IP address.\n */\nexport async function getIPAddress(): Promise<string | null> {\n return (await headers()).get(\"x-forwarded-for\");\n}\n\n/**\n * Validates the session token.\n */\nexport async function validateSessionToken(\n token: string,\n): Promise<AuthSession> {\n const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));\n\n const [row] = await db\n .select({\n session: sessionTable,\n user: userTable,\n })\n .from(sessionTable)\n .innerJoin(userTable, eq(sessionTable.userId, userTable.id))\n .where(eq(sessionTable.id, sessionId));\n\n if (!row || !row.user) {\n return { session: null, user: null };\n }\n\n const { session: baseSession, user: baseUser } = row;\n\n // STRICTLY remove non-serializable and sensitive fields\n const { password, recovery_code, ...safeUser } = baseUser;\n\n // Check if session is expired\n if (new Date() > baseSession.expiresAt) {\n await db.delete(sessionTable).where(eq(sessionTable.id, baseSession.id));\n return { session: null, user: null };\n }\n\n // AUGMENT (EXTENSIBILITY POINTS)\n const augmentedUser = await performFullUserAugmentation(safeUser as User);\n const augmentedSession = await augmentSession(baseSession as Session);\n\n // ENSURE PLAIN OBJECTS for Client Components\n return {\n session: augmentedSession ? { ...augmentedSession } : null,\n user: augmentedUser ? { ...augmentedUser } : null,\n };\n}\n\n/**\n * Returns the current user session from cookies.\n */\nexport const getCurrentSession = async (): Promise<AuthSession> => {\n const cookieStore = await cookies();\n const token = cookieStore.get(\"session\")?.value ?? null;\n\n if (token === null) {\n return { session: null, user: null };\n }\n\n return await validateSessionToken(token);\n};\n\n/**\n * Invalidates a single session.\n */\nexport async function invalidateSession(sessionId: string): Promise<void> {\n await db.delete(sessionTable).where(eq(sessionTable.id, sessionId));\n}\n\n/**\n * Invalidates all user sessions.\n */\nexport async function invalidateUserSessions(userId: string): Promise<void> {\n await db.delete(sessionTable).where(eq(sessionTable.userId, userId));\n}\n\n/**\n * Sets the session token in a cookie.\n */\nexport async function setSessionTokenCookie(\n token: string,\n expiresAt: Date,\n): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(\"session\", token, {\n httpOnly: true,\n path: \"/\",\n secure: process.env.NODE_ENV === \"production\",\n sameSite: \"lax\",\n expires: expiresAt,\n });\n}\n\n/**\n * Removes the session token cookie.\n */\nexport async function deleteSessionTokenCookie(): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.delete(\"session\");\n}\n\n/**\n * Generates a new random session token.\n */\nexport async function generateSessionToken(): Promise<string> {\n const tokenBytes = new Uint8Array(20);\n crypto.getRandomValues(tokenBytes);\n return encodeBase32LowerCaseNoPadding(tokenBytes).toLowerCase();\n}\n\n/**\n * Creates a new session in the database.\n */\nexport async function createSession(\n token: string,\n userId: string,\n flags: SessionFlags,\n): Promise<Session> {\n const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));\n\n const [session] = await db\n .insert(sessionTable)\n .values({\n id: sessionId,\n expiresAt: new Date(addDays(new Date(), 7)),\n active_organization_id: flags.activeOrganizationId,\n userId: userId,\n })\n .returning();\n\n return session;\n}\n\n/**\n * Signs the user out and redirects to the sign-in page.\n */\nexport async function sessionSignOut() {\n const { session } = await getCurrentSession();\n\n if (session) {\n await invalidateSession(session.id);\n await deleteSessionTokenCookie();\n }\n\n redirect(\"/signin\");\n}\n\n/**\n * Get all active sessions for a user.\n */\nexport async function getUserSessions(\n userId: string,\n currentSessionId: string,\n): Promise<UserSession[]> {\n const sessions = await db\n .select()\n .from(sessionTable)\n .where(eq(sessionTable.userId, userId));\n\n return sessions.map((session) => ({\n id: session.id,\n createdAt: session.createdAt,\n expiresAt: session.expiresAt,\n isCurrent: session.id === currentSessionId,\n }));\n}\n\n/**\n * Invalidate all sessions for a user except the specified current one.\n */\nexport async function invalidateOtherSessions(\n userId: string,\n currentSessionId: string,\n): Promise<void> {\n await db\n .delete(sessionTable)\n .where(\n and(\n eq(sessionTable.userId, userId),\n ne(sessionTable.id, currentSessionId),\n ),\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.mjs","names":[],"sources":["../../../src/core/auth/session.ts"],"sourcesContent":["\"use server\";\n\nimport { sha256 } from \"@oslojs/crypto/sha2\";\nimport {\n encodeBase32LowerCaseNoPadding,\n encodeHexLowerCase,\n} from \"@oslojs/encoding\";\nimport { addDays } from \"date-fns\";\nimport { and, eq, ne } from \"drizzle-orm\";\nimport { cookies, headers } from \"next/headers\";\nimport { redirect } from \"next/navigation\";\nimport { db } from \"../../server/database/inject.js\";\nimport { sessionTable, userTable } from \"../../server/database/schema.js\";\nimport { augmentSession } from \"./augment.js\";\nimport { performFullUserAugmentation } from \"./logic.js\";\n\nimport type {\n AuthSession,\n Session,\n SessionFlags,\n User,\n UserSession,\n} from \"./types.js\";\n\n/**\n * Returns the user's IP address.\n */\nexport async function getIPAddress(): Promise<string | null> {\n return (await headers()).get(\"x-forwarded-for\");\n}\n\n/**\n * Validates the session token.\n */\nexport async function validateSessionToken(\n token: string,\n): Promise<AuthSession> {\n const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));\n\n const [row] = await db\n .select({\n session: sessionTable,\n user: userTable,\n })\n .from(sessionTable)\n .innerJoin(userTable, eq(sessionTable.userId, userTable.id))\n .where(eq(sessionTable.id, sessionId));\n\n if (!row || !row.user) {\n return { session: null, user: null };\n }\n\n const { session: baseSession, user: baseUser } = row;\n\n // STRICTLY remove non-serializable and sensitive fields\n const { password, recovery_code, ...safeUser } = baseUser;\n\n // Check if session is expired\n if (new Date() > baseSession.expiresAt) {\n await db.delete(sessionTable).where(eq(sessionTable.id, baseSession.id));\n return { session: null, user: null };\n }\n\n // AUGMENT (EXTENSIBILITY POINTS)\n const augmentedUser = await performFullUserAugmentation(safeUser as User);\n const augmentedSession = await augmentSession(baseSession as Session);\n\n // ENSURE PLAIN OBJECTS for Client Components\n return {\n session: augmentedSession ? { ...augmentedSession } : null,\n user: augmentedUser ? { ...augmentedUser } : null,\n };\n}\n\n/**\n * Returns the current user session from cookies.\n */\nexport const getCurrentSession = async (): Promise<AuthSession> => {\n const cookieStore = await cookies();\n const token = cookieStore.get(\"session\")?.value ?? null;\n\n if (token === null) {\n return { session: null, user: null };\n }\n\n return await validateSessionToken(token);\n};\n\n/**\n * Invalidates a single session.\n */\nexport async function invalidateSession(sessionId: string): Promise<void> {\n await db.delete(sessionTable).where(eq(sessionTable.id, sessionId));\n}\n\n/**\n * Invalidates all user sessions.\n */\nexport async function invalidateUserSessions(userId: string): Promise<void> {\n await db.delete(sessionTable).where(eq(sessionTable.userId, userId));\n}\n\n/**\n * Sets the session token in a cookie.\n */\nexport async function setSessionTokenCookie(\n token: string,\n expiresAt: Date,\n): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.set(\"session\", token, {\n httpOnly: true,\n path: \"/\",\n secure: process.env.NODE_ENV === \"production\",\n sameSite: \"lax\",\n expires: expiresAt,\n });\n}\n\n/**\n * Removes the session token cookie.\n */\nexport async function deleteSessionTokenCookie(): Promise<void> {\n const cookieStore = await cookies();\n cookieStore.delete(\"session\");\n}\n\n/**\n * Generates a new random session token.\n */\nexport async function generateSessionToken(): Promise<string> {\n const tokenBytes = new Uint8Array(20);\n crypto.getRandomValues(tokenBytes);\n return encodeBase32LowerCaseNoPadding(tokenBytes).toLowerCase();\n}\n\n/**\n * Creates a new session in the database.\n */\nexport async function createSession(\n token: string,\n userId: string,\n flags: SessionFlags,\n): Promise<Session> {\n const sessionId = encodeHexLowerCase(sha256(new TextEncoder().encode(token)));\n\n const [session] = await db\n .insert(sessionTable)\n .values({\n id: sessionId,\n expiresAt: new Date(addDays(new Date(), 7)),\n active_organization_id: flags.activeOrganizationId,\n userId: userId,\n })\n .returning();\n\n return session;\n}\n\n/**\n * Signs the user out and redirects to the sign-in page.\n */\nexport async function sessionSignOut() {\n const { session } = await getCurrentSession();\n\n if (session) {\n await invalidateSession(session.id);\n await deleteSessionTokenCookie();\n }\n\n redirect(\"/signin\");\n}\n\n/**\n * Get all active sessions for a user.\n */\nexport async function getUserSessions(\n userId: string,\n currentSessionId: string,\n): Promise<UserSession[]> {\n const sessions = await db\n .select()\n .from(sessionTable)\n .where(eq(sessionTable.userId, userId));\n\n return sessions.map((session) => ({\n id: session.id,\n createdAt: session.createdAt,\n expiresAt: session.expiresAt,\n isCurrent: session.id === currentSessionId,\n }));\n}\n\n/**\n * Invalidate all sessions for a user except the specified current one.\n */\nexport async function invalidateOtherSessions(\n userId: string,\n currentSessionId: string,\n): Promise<void> {\n await db\n .delete(sessionTable)\n .where(\n and(\n eq(sessionTable.userId, userId),\n ne(sessionTable.id, currentSessionId),\n ),\n );\n}\n"],"mappings":"sjBA2BA,eAAsB,GAAuC,CAC3D,OAAQ,MAAM,GAAS,EAAE,IAAI,kBAAkB,CAMjD,eAAsB,EACpB,EACsB,CACtB,IAAM,EAAY,EAAmB,EAAO,IAAI,aAAa,CAAC,OAAO,EAAM,CAAC,CAAC,CAEvE,CAAC,GAAO,MAAM,EACjB,OAAO,CACN,QAAS,EACT,KAAM,EACP,CAAC,CACD,KAAK,EAAa,CAClB,UAAU,EAAW,EAAG,EAAa,OAAQ,EAAU,GAAG,CAAC,CAC3D,MAAM,EAAG,EAAa,GAAI,EAAU,CAAC,CAExC,GAAI,CAAC,GAAO,CAAC,EAAI,KACf,MAAO,CAAE,QAAS,KAAM,KAAM,KAAM,CAGtC,GAAM,CAAE,QAAS,EAAa,KAAM,GAAa,EAG3C,CAAE,WAAU,gBAAe,GAAG,GAAa,EAGjD,GAAI,IAAI,KAAS,EAAY,UAE3B,OADA,MAAM,EAAG,OAAO,EAAa,CAAC,MAAM,EAAG,EAAa,GAAI,EAAY,GAAG,CAAC,CACjE,CAAE,QAAS,KAAM,KAAM,KAAM,CAItC,IAAM,EAAgB,MAAM,EAA4B,EAAiB,CACnE,EAAmB,MAAM,EAAe,EAAuB,CAGrE,MAAO,CACL,QAAS,EAAmB,CAAE,GAAG,EAAkB,CAAG,KACtD,KAAM,EAAgB,CAAE,GAAG,EAAe,CAAG,KAC9C,CAMH,MAAa,EAAoB,SAAkC,CAEjE,IAAM,GADc,MAAM,GAAS,EACT,IAAI,UAAU,EAAE,OAAS,KAMnD,OAJI,IAAU,KACL,CAAE,QAAS,KAAM,KAAM,KAAM,CAG/B,MAAM,EAAqB,EAAM,EAM1C,eAAsB,EAAkB,EAAkC,CACxE,MAAM,EAAG,OAAO,EAAa,CAAC,MAAM,EAAG,EAAa,GAAI,EAAU,CAAC,CAMrE,eAAsB,EAAuB,EAA+B,CAC1E,MAAM,EAAG,OAAO,EAAa,CAAC,MAAM,EAAG,EAAa,OAAQ,EAAO,CAAC,CAMtE,eAAsB,EACpB,EACA,EACe,EACK,MAAM,GAAS,EACvB,IAAI,UAAW,EAAO,CAChC,SAAU,GACV,KAAM,IACN,OAAQ,QAAQ,IAAI,WAAa,aACjC,SAAU,MACV,QAAS,EACV,CAAC,CAMJ,eAAsB,GAA0C,EAC1C,MAAM,GAAS,EACvB,OAAO,UAAU,CAM/B,eAAsB,GAAwC,CAC5D,IAAM,EAAa,IAAI,WAAW,GAAG,CAErC,OADA,OAAO,gBAAgB,EAAW,CAC3B,EAA+B,EAAW,CAAC,aAAa,CAMjE,eAAsB,EACpB,EACA,EACA,EACkB,CAClB,IAAM,EAAY,EAAmB,EAAO,IAAI,aAAa,CAAC,OAAO,EAAM,CAAC,CAAC,CAEvE,CAAC,GAAW,MAAM,EACrB,OAAO,EAAa,CACpB,OAAO,CACN,GAAI,EACJ,UAAW,IAAI,KAAK,EAAQ,IAAI,KAAQ,EAAE,CAAC,CAC3C,uBAAwB,EAAM,qBACtB,SACT,CAAC,CACD,WAAW,CAEd,OAAO,EAMT,eAAsB,GAAiB,CACrC,GAAM,CAAE,WAAY,MAAM,GAAmB,CAEzC,IACF,MAAM,EAAkB,EAAQ,GAAG,CACnC,MAAM,GAA0B,EAGlC,EAAS,UAAU,CAMrB,eAAsB,EACpB,EACA,EACwB,CAMxB,OALiB,MAAM,EACpB,QAAQ,CACR,KAAK,EAAa,CAClB,MAAM,EAAG,EAAa,OAAQ,EAAO,CAAC,EAEzB,IAAK,IAAa,CAChC,GAAI,EAAQ,GACZ,UAAW,EAAQ,UACnB,UAAW,EAAQ,UACnB,UAAW,EAAQ,KAAO,EAC3B,EAAE,CAML,eAAsB,EACpB,EACA,EACe,CACf,MAAM,EACH,OAAO,EAAa,CACpB,MACC,EACE,EAAG,EAAa,OAAQ,EAAO,CAC/B,EAAG,EAAa,GAAI,EAAiB,CACtC,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/core/auth/types.ts"],"mappings":";;;;KASY,IAAA,UAAc,SAAA,CAAU,YAAA;AAAA,KACxB,OAAA,UAAiB,YAAA,CAAa,YAAA,GAAe,MAAA;AAAA,KAC7C,oBAAA,UACH,yBAAA,CAA0B,YAAA,GAAe,MAAA;;;;AAFlD;KAQY,QAAA,GAAW,IAAA,GACrB,MAAA;EACE,KAAA,EAAO,QAAA;EACP,WAAA,EAAa,cAAA;AAAA;;;;UAMA,WAAA;EACf,OAAA,EAAS,OAAA;EACT,IAAA,EAAM,QAAA;AAAA;AAAA,UAGS,YAAA;EAAA,CACd,GAAA;AAAA;AAAA,KAGS,WAAA;EACV,EAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;EACX,SAAA;EAAA,CACC,GAAA;AAAA;AAAA,KAGS,YAAA;EACN,MAAA;EAAmB,OAAA,EAAS,OAAA;EAAS,IAAA,EAAM,QAAA;EAAU,QAAA;AAAA;
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/core/auth/types.ts"],"mappings":";;;;KASY,IAAA,UAAc,SAAA,CAAU,YAAA;AAAA,KACxB,OAAA,UAAiB,YAAA,CAAa,YAAA,GAAe,MAAA;AAAA,KAC7C,oBAAA,UACH,yBAAA,CAA0B,YAAA,GAAe,MAAA;;;;AAFlD;KAQY,QAAA,GAAW,IAAA,GACrB,MAAA;EACE,KAAA,EAAO,QAAA;EACP,WAAA,EAAa,cAAA;AAAA;;;;UAMA,WAAA;EACf,OAAA,EAAS,OAAA;EACT,IAAA,EAAM,QAAA;AAAA;AAAA,UAGS,YAAA;EAAA,CACd,GAAA;AAAA;AAAA,KAGS,WAAA;EACV,EAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;EACX,SAAA;EAAA,CACC,GAAA;AAAA;AAAA,KAGS,YAAA;EACN,MAAA;EAAmB,OAAA,EAAS,OAAA;EAAS,IAAA,EAAM,QAAA;EAAU,QAAA;AAAA;EAEvD,MAAA;EACA,IAAA;EACA,MAAA;EACA,SAAA;EACA,QAAA;AAAA;EAEE,MAAA;EAAiB,OAAA;EAAiB,QAAA;AAAA;AAAA,UAEvB,wBAAA;EACf,OAAA,EAAS,oBAAA;EACT,IAAA,EAAM,QAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/core/auth/types.ts"],"mappings":";;;;KASY,IAAA,UAAc,SAAA,CAAU,YAAA;AAAA,KACxB,OAAA,UAAiB,YAAA,CAAa,YAAA,GAAe,MAAA;AAAA,KAC7C,oBAAA,UACH,yBAAA,CAA0B,YAAA,GAAe,MAAA;;;;AAFlD;KAQY,QAAA,GAAW,IAAA,GACrB,MAAA;EACE,KAAA,EAAO,QAAA;EACP,WAAA,EAAa,cAAA;AAAA;;;;UAMA,WAAA;EACf,OAAA,EAAS,OAAA;EACT,IAAA,EAAM,QAAA;AAAA;AAAA,UAGS,YAAA;EAAA,CACd,GAAA;AAAA;AAAA,KAGS,WAAA;EACV,EAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;EACX,SAAA;EAAA,CACC,GAAA;AAAA;AAAA,KAGS,YAAA;EACN,MAAA;EAAmB,OAAA,EAAS,OAAA;EAAS,IAAA,EAAM,QAAA;EAAU,QAAA;AAAA;
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/core/auth/types.ts"],"mappings":";;;;KASY,IAAA,UAAc,SAAA,CAAU,YAAA;AAAA,KACxB,OAAA,UAAiB,YAAA,CAAa,YAAA,GAAe,MAAA;AAAA,KAC7C,oBAAA,UACH,yBAAA,CAA0B,YAAA,GAAe,MAAA;;;;AAFlD;KAQY,QAAA,GAAW,IAAA,GACrB,MAAA;EACE,KAAA,EAAO,QAAA;EACP,WAAA,EAAa,cAAA;AAAA;;;;UAMA,WAAA;EACf,OAAA,EAAS,OAAA;EACT,IAAA,EAAM,QAAA;AAAA;AAAA,UAGS,YAAA;EAAA,CACd,GAAA;AAAA;AAAA,KAGS,WAAA;EACV,EAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;EACX,SAAA;EAAA,CACC,GAAA;AAAA;AAAA,KAGS,YAAA;EACN,MAAA;EAAmB,OAAA,EAAS,OAAA;EAAS,IAAA,EAAM,QAAA;EAAU,QAAA;AAAA;EAEvD,MAAA;EACA,IAAA;EACA,MAAA;EACA,SAAA;EACA,QAAA;AAAA;EAEE,MAAA;EAAiB,OAAA;EAAiB,QAAA;AAAA;AAAA,UAEvB,wBAAA;EACf,OAAA,EAAS,oBAAA;EACT,IAAA,EAAM,QAAA;AAAA"}
|
|
@@ -1,27 +1 @@
|
|
|
1
|
-
|
|
2
|
-
let _oslojs_encoding = require("@oslojs/encoding");
|
|
3
|
-
|
|
4
|
-
//#region src/core/auth/utils/encode.ts
|
|
5
|
-
/**
|
|
6
|
-
* Generates a random one-time code (OTP).
|
|
7
|
-
* @param length Length of the generated code (default 6).
|
|
8
|
-
* @returns A random uppercase base32 string.
|
|
9
|
-
*/
|
|
10
|
-
function generateRandomOTP(length = 6) {
|
|
11
|
-
const bytes = new Uint8Array(5);
|
|
12
|
-
crypto.getRandomValues(bytes);
|
|
13
|
-
return (0, _oslojs_encoding.encodeBase32UpperCaseNoPadding)(bytes).substring(0, length);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Generates a random recovery code.
|
|
17
|
-
* @returns A random uppercase base32 string.
|
|
18
|
-
*/
|
|
19
|
-
function generateRandomRecoveryCode() {
|
|
20
|
-
const recoveryCodeBytes = new Uint8Array(10);
|
|
21
|
-
crypto.getRandomValues(recoveryCodeBytes);
|
|
22
|
-
return (0, _oslojs_encoding.encodeBase32UpperCaseNoPadding)(recoveryCodeBytes);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
//#endregion
|
|
26
|
-
exports.generateRandomOTP = generateRandomOTP;
|
|
27
|
-
exports.generateRandomRecoveryCode = generateRandomRecoveryCode;
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);let e=require(`@oslojs/encoding`);function t(t=6){let n=new Uint8Array(5);return crypto.getRandomValues(n),(0,e.encodeBase32UpperCaseNoPadding)(n).substring(0,t)}function n(){let t=new Uint8Array(10);return crypto.getRandomValues(t),(0,e.encodeBase32UpperCaseNoPadding)(t)}exports.generateRandomOTP=t,exports.generateRandomRecoveryCode=n;
|
|
@@ -1,26 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
//#region src/core/auth/utils/encode.ts
|
|
4
|
-
/**
|
|
5
|
-
* Generates a random one-time code (OTP).
|
|
6
|
-
* @param length Length of the generated code (default 6).
|
|
7
|
-
* @returns A random uppercase base32 string.
|
|
8
|
-
*/
|
|
9
|
-
function generateRandomOTP(length = 6) {
|
|
10
|
-
const bytes = new Uint8Array(5);
|
|
11
|
-
crypto.getRandomValues(bytes);
|
|
12
|
-
return encodeBase32UpperCaseNoPadding(bytes).substring(0, length);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Generates a random recovery code.
|
|
16
|
-
* @returns A random uppercase base32 string.
|
|
17
|
-
*/
|
|
18
|
-
function generateRandomRecoveryCode() {
|
|
19
|
-
const recoveryCodeBytes = new Uint8Array(10);
|
|
20
|
-
crypto.getRandomValues(recoveryCodeBytes);
|
|
21
|
-
return encodeBase32UpperCaseNoPadding(recoveryCodeBytes);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
//#endregion
|
|
25
|
-
export { generateRandomOTP, generateRandomRecoveryCode };
|
|
1
|
+
import{encodeBase32UpperCaseNoPadding as e}from"@oslojs/encoding";function t(t=6){let n=new Uint8Array(5);return crypto.getRandomValues(n),e(n).substring(0,t)}function n(){let t=new Uint8Array(10);return crypto.getRandomValues(t),e(t)}export{t as generateRandomOTP,n as generateRandomRecoveryCode};
|
|
26
2
|
//# sourceMappingURL=encode.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.mjs","names":[],"sources":["../../../../src/core/auth/utils/encode.ts"],"sourcesContent":["import { encodeBase32UpperCaseNoPadding } from \"@oslojs/encoding\";\n\n/**\n * Generates a random one-time code (OTP).\n * @param length Length of the generated code (default 6).\n * @returns A random uppercase base32 string.\n */\nexport function generateRandomOTP(length = 6): string {\n const bytes = new Uint8Array(5);\n crypto.getRandomValues(bytes);\n return encodeBase32UpperCaseNoPadding(bytes).substring(0, length);\n}\n\n/**\n * Generates a random recovery code.\n * @returns A random uppercase base32 string.\n */\nexport function generateRandomRecoveryCode(): string {\n const recoveryCodeBytes = new Uint8Array(10);\n crypto.getRandomValues(recoveryCodeBytes);\n return encodeBase32UpperCaseNoPadding(recoveryCodeBytes);\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"encode.mjs","names":[],"sources":["../../../../src/core/auth/utils/encode.ts"],"sourcesContent":["import { encodeBase32UpperCaseNoPadding } from \"@oslojs/encoding\";\n\n/**\n * Generates a random one-time code (OTP).\n * @param length Length of the generated code (default 6).\n * @returns A random uppercase base32 string.\n */\nexport function generateRandomOTP(length = 6): string {\n const bytes = new Uint8Array(5);\n crypto.getRandomValues(bytes);\n return encodeBase32UpperCaseNoPadding(bytes).substring(0, length);\n}\n\n/**\n * Generates a random recovery code.\n * @returns A random uppercase base32 string.\n */\nexport function generateRandomRecoveryCode(): string {\n const recoveryCodeBytes = new Uint8Array(10);\n crypto.getRandomValues(recoveryCodeBytes);\n return encodeBase32UpperCaseNoPadding(recoveryCodeBytes);\n}\n"],"mappings":"kEAOA,SAAgB,EAAkB,EAAS,EAAW,CACpD,IAAM,EAAQ,IAAI,WAAW,EAAE,CAE/B,OADA,OAAO,gBAAgB,EAAM,CACtB,EAA+B,EAAM,CAAC,UAAU,EAAG,EAAO,CAOnE,SAAgB,GAAqC,CACnD,IAAM,EAAoB,IAAI,WAAW,GAAG,CAE5C,OADA,OAAO,gBAAgB,EAAkB,CAClC,EAA+B,EAAkB"}
|
|
@@ -1,67 +1 @@
|
|
|
1
|
-
|
|
2
|
-
let _oslojs_encoding = require("@oslojs/encoding");
|
|
3
|
-
let node_crypto = require("node:crypto");
|
|
4
|
-
let _oslojs_binary = require("@oslojs/binary");
|
|
5
|
-
|
|
6
|
-
//#region src/core/auth/utils/encryption.ts
|
|
7
|
-
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY;
|
|
8
|
-
if (!ENCRYPTION_KEY) throw new Error("ENCRYPTION_KEY environment variable is not set");
|
|
9
|
-
/**
|
|
10
|
-
* The encryption key decoded from base64.
|
|
11
|
-
*/
|
|
12
|
-
const key = (0, _oslojs_encoding.decodeBase64)(ENCRYPTION_KEY);
|
|
13
|
-
/**
|
|
14
|
-
* Encrypts data using AES-128-GCM.
|
|
15
|
-
* @param data Data to be encrypted.
|
|
16
|
-
* @returns Encrypted data including IV and auth tag.
|
|
17
|
-
*/
|
|
18
|
-
function encrypt(data) {
|
|
19
|
-
const iv = new Uint8Array(16);
|
|
20
|
-
crypto.getRandomValues(iv);
|
|
21
|
-
const cipher = (0, node_crypto.createCipheriv)("aes-128-gcm", key, iv);
|
|
22
|
-
const encrypted = new _oslojs_binary.DynamicBuffer(0);
|
|
23
|
-
encrypted.write(iv);
|
|
24
|
-
encrypted.write(cipher.update(data));
|
|
25
|
-
encrypted.write(cipher.final());
|
|
26
|
-
encrypted.write(cipher.getAuthTag());
|
|
27
|
-
return encrypted.bytes();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Encrypts a string.
|
|
31
|
-
* @param data String to be encrypted.
|
|
32
|
-
* @returns Encrypted data as Uint8Array.
|
|
33
|
-
*/
|
|
34
|
-
function encryptString(data) {
|
|
35
|
-
return encrypt(new TextEncoder().encode(data));
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Decrypts data using AES-128-GCM.
|
|
39
|
-
* @param encrypted Encrypted data (IV + content + auth tag).
|
|
40
|
-
* @returns Decrypted data.
|
|
41
|
-
*/
|
|
42
|
-
function decrypt(encrypted) {
|
|
43
|
-
if (encrypted.byteLength < 33) throw new Error("Invalid encrypted data length");
|
|
44
|
-
const iv = encrypted.slice(0, 16);
|
|
45
|
-
const authTag = encrypted.slice(encrypted.byteLength - 16);
|
|
46
|
-
const content = encrypted.slice(16, encrypted.byteLength - 16);
|
|
47
|
-
const decipher = (0, node_crypto.createDecipheriv)("aes-128-gcm", key, iv);
|
|
48
|
-
decipher.setAuthTag(authTag);
|
|
49
|
-
const decrypted = new _oslojs_binary.DynamicBuffer(0);
|
|
50
|
-
decrypted.write(decipher.update(content));
|
|
51
|
-
decrypted.write(decipher.final());
|
|
52
|
-
return decrypted.bytes();
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Decrypts data to a string.
|
|
56
|
-
* @param data Encrypted data.
|
|
57
|
-
* @returns Odszyfrowany ciąg znaków.
|
|
58
|
-
*/
|
|
59
|
-
function decryptToString(data) {
|
|
60
|
-
return new TextDecoder().decode(decrypt(data));
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
//#endregion
|
|
64
|
-
exports.decrypt = decrypt;
|
|
65
|
-
exports.decryptToString = decryptToString;
|
|
66
|
-
exports.encrypt = encrypt;
|
|
67
|
-
exports.encryptString = encryptString;
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);let e=require(`@oslojs/encoding`),t=require(`node:crypto`),n=require(`@oslojs/binary`);const r=process.env.ENCRYPTION_KEY;if(!r)throw Error(`ENCRYPTION_KEY environment variable is not set`);const i=(0,e.decodeBase64)(r);function a(e){let r=new Uint8Array(16);crypto.getRandomValues(r);let a=(0,t.createCipheriv)(`aes-128-gcm`,i,r),o=new n.DynamicBuffer(0);return o.write(r),o.write(a.update(e)),o.write(a.final()),o.write(a.getAuthTag()),o.bytes()}function o(e){return a(new TextEncoder().encode(e))}function s(e){if(e.byteLength<33)throw Error(`Invalid encrypted data length`);let r=e.slice(0,16),a=e.slice(e.byteLength-16),o=e.slice(16,e.byteLength-16),s=(0,t.createDecipheriv)(`aes-128-gcm`,i,r);s.setAuthTag(a);let c=new n.DynamicBuffer(0);return c.write(s.update(o)),c.write(s.final()),c.bytes()}function c(e){return new TextDecoder().decode(s(e))}exports.decrypt=s,exports.decryptToString=c,exports.encrypt=a,exports.encryptString=o;
|
|
@@ -1,64 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createCipheriv, createDecipheriv } from "node:crypto";
|
|
3
|
-
import { DynamicBuffer } from "@oslojs/binary";
|
|
4
|
-
|
|
5
|
-
//#region src/core/auth/utils/encryption.ts
|
|
6
|
-
const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY;
|
|
7
|
-
if (!ENCRYPTION_KEY) throw new Error("ENCRYPTION_KEY environment variable is not set");
|
|
8
|
-
/**
|
|
9
|
-
* The encryption key decoded from base64.
|
|
10
|
-
*/
|
|
11
|
-
const key = decodeBase64(ENCRYPTION_KEY);
|
|
12
|
-
/**
|
|
13
|
-
* Encrypts data using AES-128-GCM.
|
|
14
|
-
* @param data Data to be encrypted.
|
|
15
|
-
* @returns Encrypted data including IV and auth tag.
|
|
16
|
-
*/
|
|
17
|
-
function encrypt(data) {
|
|
18
|
-
const iv = new Uint8Array(16);
|
|
19
|
-
crypto.getRandomValues(iv);
|
|
20
|
-
const cipher = createCipheriv("aes-128-gcm", key, iv);
|
|
21
|
-
const encrypted = new DynamicBuffer(0);
|
|
22
|
-
encrypted.write(iv);
|
|
23
|
-
encrypted.write(cipher.update(data));
|
|
24
|
-
encrypted.write(cipher.final());
|
|
25
|
-
encrypted.write(cipher.getAuthTag());
|
|
26
|
-
return encrypted.bytes();
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Encrypts a string.
|
|
30
|
-
* @param data String to be encrypted.
|
|
31
|
-
* @returns Encrypted data as Uint8Array.
|
|
32
|
-
*/
|
|
33
|
-
function encryptString(data) {
|
|
34
|
-
return encrypt(new TextEncoder().encode(data));
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Decrypts data using AES-128-GCM.
|
|
38
|
-
* @param encrypted Encrypted data (IV + content + auth tag).
|
|
39
|
-
* @returns Decrypted data.
|
|
40
|
-
*/
|
|
41
|
-
function decrypt(encrypted) {
|
|
42
|
-
if (encrypted.byteLength < 33) throw new Error("Invalid encrypted data length");
|
|
43
|
-
const iv = encrypted.slice(0, 16);
|
|
44
|
-
const authTag = encrypted.slice(encrypted.byteLength - 16);
|
|
45
|
-
const content = encrypted.slice(16, encrypted.byteLength - 16);
|
|
46
|
-
const decipher = createDecipheriv("aes-128-gcm", key, iv);
|
|
47
|
-
decipher.setAuthTag(authTag);
|
|
48
|
-
const decrypted = new DynamicBuffer(0);
|
|
49
|
-
decrypted.write(decipher.update(content));
|
|
50
|
-
decrypted.write(decipher.final());
|
|
51
|
-
return decrypted.bytes();
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Decrypts data to a string.
|
|
55
|
-
* @param data Encrypted data.
|
|
56
|
-
* @returns Odszyfrowany ciąg znaków.
|
|
57
|
-
*/
|
|
58
|
-
function decryptToString(data) {
|
|
59
|
-
return new TextDecoder().decode(decrypt(data));
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
//#endregion
|
|
63
|
-
export { decrypt, decryptToString, encrypt, encryptString };
|
|
1
|
+
import{decodeBase64 as e}from"@oslojs/encoding";import{createCipheriv as t,createDecipheriv as n}from"node:crypto";import{DynamicBuffer as r}from"@oslojs/binary";const i=process.env.ENCRYPTION_KEY;if(!i)throw Error(`ENCRYPTION_KEY environment variable is not set`);const a=e(i);function o(e){let n=new Uint8Array(16);crypto.getRandomValues(n);let i=t(`aes-128-gcm`,a,n),o=new r(0);return o.write(n),o.write(i.update(e)),o.write(i.final()),o.write(i.getAuthTag()),o.bytes()}function s(e){return o(new TextEncoder().encode(e))}function c(e){if(e.byteLength<33)throw Error(`Invalid encrypted data length`);let t=e.slice(0,16),i=e.slice(e.byteLength-16),o=e.slice(16,e.byteLength-16),s=n(`aes-128-gcm`,a,t);s.setAuthTag(i);let c=new r(0);return c.write(s.update(o)),c.write(s.final()),c.bytes()}function l(e){return new TextDecoder().decode(c(e))}export{c as decrypt,l as decryptToString,o as encrypt,s as encryptString};
|
|
64
2
|
//# sourceMappingURL=encryption.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.mjs","names":[],"sources":["../../../../src/core/auth/utils/encryption.ts"],"sourcesContent":["import { createCipheriv, createDecipheriv } from \"node:crypto\";\nimport { DynamicBuffer } from \"@oslojs/binary\";\nimport { decodeBase64 } from \"@oslojs/encoding\";\n\nconst ENCRYPTION_KEY = process.env.ENCRYPTION_KEY;\n\nif (!ENCRYPTION_KEY) {\n throw new Error(\"ENCRYPTION_KEY environment variable is not set\");\n}\n\n/**\n * The encryption key decoded from base64.\n */\nconst key = decodeBase64(ENCRYPTION_KEY);\n\n/**\n * Encrypts data using AES-128-GCM.\n * @param data Data to be encrypted.\n * @returns Encrypted data including IV and auth tag.\n */\nexport function encrypt(data: Uint8Array): Uint8Array {\n const iv = new Uint8Array(16);\n crypto.getRandomValues(iv);\n const cipher = createCipheriv(\"aes-128-gcm\", key, iv);\n const encrypted = new DynamicBuffer(0);\n encrypted.write(iv);\n encrypted.write(cipher.update(data));\n encrypted.write(cipher.final());\n encrypted.write(cipher.getAuthTag());\n return encrypted.bytes();\n}\n\n/**\n * Encrypts a string.\n * @param data String to be encrypted.\n * @returns Encrypted data as Uint8Array.\n */\nexport function encryptString(data: string): Uint8Array {\n return encrypt(new TextEncoder().encode(data));\n}\n\n/**\n * Decrypts data using AES-128-GCM.\n * @param encrypted Encrypted data (IV + content + auth tag).\n * @returns Decrypted data.\n */\nexport function decrypt(encrypted: Uint8Array): Uint8Array {\n if (encrypted.byteLength < 33) {\n throw new Error(\"Invalid encrypted data length\");\n }\n const iv = encrypted.slice(0, 16);\n const authTag = encrypted.slice(encrypted.byteLength - 16);\n const content = encrypted.slice(16, encrypted.byteLength - 16);\n\n const decipher = createDecipheriv(\"aes-128-gcm\", key, iv);\n decipher.setAuthTag(authTag);\n\n const decrypted = new DynamicBuffer(0);\n decrypted.write(decipher.update(content));\n decrypted.write(decipher.final());\n return decrypted.bytes();\n}\n\n/**\n * Decrypts data to a string.\n * @param data Encrypted data.\n * @returns Odszyfrowany ciąg znaków.\n */\nexport function decryptToString(data: Uint8Array): string {\n return new TextDecoder().decode(decrypt(data));\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"encryption.mjs","names":[],"sources":["../../../../src/core/auth/utils/encryption.ts"],"sourcesContent":["import { createCipheriv, createDecipheriv } from \"node:crypto\";\nimport { DynamicBuffer } from \"@oslojs/binary\";\nimport { decodeBase64 } from \"@oslojs/encoding\";\n\nconst ENCRYPTION_KEY = process.env.ENCRYPTION_KEY;\n\nif (!ENCRYPTION_KEY) {\n throw new Error(\"ENCRYPTION_KEY environment variable is not set\");\n}\n\n/**\n * The encryption key decoded from base64.\n */\nconst key = decodeBase64(ENCRYPTION_KEY);\n\n/**\n * Encrypts data using AES-128-GCM.\n * @param data Data to be encrypted.\n * @returns Encrypted data including IV and auth tag.\n */\nexport function encrypt(data: Uint8Array): Uint8Array {\n const iv = new Uint8Array(16);\n crypto.getRandomValues(iv);\n const cipher = createCipheriv(\"aes-128-gcm\", key, iv);\n const encrypted = new DynamicBuffer(0);\n encrypted.write(iv);\n encrypted.write(cipher.update(data));\n encrypted.write(cipher.final());\n encrypted.write(cipher.getAuthTag());\n return encrypted.bytes();\n}\n\n/**\n * Encrypts a string.\n * @param data String to be encrypted.\n * @returns Encrypted data as Uint8Array.\n */\nexport function encryptString(data: string): Uint8Array {\n return encrypt(new TextEncoder().encode(data));\n}\n\n/**\n * Decrypts data using AES-128-GCM.\n * @param encrypted Encrypted data (IV + content + auth tag).\n * @returns Decrypted data.\n */\nexport function decrypt(encrypted: Uint8Array): Uint8Array {\n if (encrypted.byteLength < 33) {\n throw new Error(\"Invalid encrypted data length\");\n }\n const iv = encrypted.slice(0, 16);\n const authTag = encrypted.slice(encrypted.byteLength - 16);\n const content = encrypted.slice(16, encrypted.byteLength - 16);\n\n const decipher = createDecipheriv(\"aes-128-gcm\", key, iv);\n decipher.setAuthTag(authTag);\n\n const decrypted = new DynamicBuffer(0);\n decrypted.write(decipher.update(content));\n decrypted.write(decipher.final());\n return decrypted.bytes();\n}\n\n/**\n * Decrypts data to a string.\n * @param data Encrypted data.\n * @returns Odszyfrowany ciąg znaków.\n */\nexport function decryptToString(data: Uint8Array): string {\n return new TextDecoder().decode(decrypt(data));\n}\n"],"mappings":"kKAIA,MAAM,EAAiB,QAAQ,IAAI,eAEnC,GAAI,CAAC,EACH,MAAU,MAAM,iDAAiD,CAMnE,MAAM,EAAM,EAAa,EAAe,CAOxC,SAAgB,EAAQ,EAA8B,CACpD,IAAM,EAAK,IAAI,WAAW,GAAG,CAC7B,OAAO,gBAAgB,EAAG,CAC1B,IAAM,EAAS,EAAe,cAAe,EAAK,EAAG,CAC/C,EAAY,IAAI,EAAc,EAAE,CAKtC,OAJA,EAAU,MAAM,EAAG,CACnB,EAAU,MAAM,EAAO,OAAO,EAAK,CAAC,CACpC,EAAU,MAAM,EAAO,OAAO,CAAC,CAC/B,EAAU,MAAM,EAAO,YAAY,CAAC,CAC7B,EAAU,OAAO,CAQ1B,SAAgB,EAAc,EAA0B,CACtD,OAAO,EAAQ,IAAI,aAAa,CAAC,OAAO,EAAK,CAAC,CAQhD,SAAgB,EAAQ,EAAmC,CACzD,GAAI,EAAU,WAAa,GACzB,MAAU,MAAM,gCAAgC,CAElD,IAAM,EAAK,EAAU,MAAM,EAAG,GAAG,CAC3B,EAAU,EAAU,MAAM,EAAU,WAAa,GAAG,CACpD,EAAU,EAAU,MAAM,GAAI,EAAU,WAAa,GAAG,CAExD,EAAW,EAAiB,cAAe,EAAK,EAAG,CACzD,EAAS,WAAW,EAAQ,CAE5B,IAAM,EAAY,IAAI,EAAc,EAAE,CAGtC,OAFA,EAAU,MAAM,EAAS,OAAO,EAAQ,CAAC,CACzC,EAAU,MAAM,EAAS,OAAO,CAAC,CAC1B,EAAU,OAAO,CAQ1B,SAAgB,EAAgB,EAA0B,CACxD,OAAO,IAAI,aAAa,CAAC,OAAO,EAAQ,EAAK,CAAC"}
|
|
@@ -1,39 +1 @@
|
|
|
1
|
-
|
|
2
|
-
let zod = require("zod");
|
|
3
|
-
|
|
4
|
-
//#region src/core/auth/validation.ts
|
|
5
|
-
const loginSchema = zod.z.object({
|
|
6
|
-
email: zod.z.string().email("Invalid email address"),
|
|
7
|
-
password: zod.z.string().min(8),
|
|
8
|
-
remember: zod.z.boolean().optional()
|
|
9
|
-
});
|
|
10
|
-
const registerSchema = zod.z.object({
|
|
11
|
-
username: zod.z.string().min(2, "Name must be at least 2 characters"),
|
|
12
|
-
email: zod.z.string().email("Invalid email address"),
|
|
13
|
-
password: zod.z.string().min(8, "Password must be at least 8 characters"),
|
|
14
|
-
terms: zod.z.boolean().refine((val) => val === true, "You must accept the terms")
|
|
15
|
-
});
|
|
16
|
-
const forgotPasswordSchema = zod.z.object({ email: zod.z.string().email("Invalid email address") });
|
|
17
|
-
const resetPasswordSchema = zod.z.object({
|
|
18
|
-
password: zod.z.string().min(8, "Password must be at least 8 characters"),
|
|
19
|
-
confirm: zod.z.string()
|
|
20
|
-
}).refine((data) => data.password === data.confirm, {
|
|
21
|
-
message: "Passwords do not match",
|
|
22
|
-
path: ["confirm"]
|
|
23
|
-
});
|
|
24
|
-
const verifyEmailSchema = zod.z.object({ code: zod.z.string().min(6).max(6) });
|
|
25
|
-
const totpSetupSchema = zod.z.object({ code: zod.z.string().regex(/^\d{6}$/, "Code must be 6 digits") });
|
|
26
|
-
const totpVerifySchema = zod.z.object({ code: zod.z.string().regex(/^\d{6}$/, "Code must be 6 digits") });
|
|
27
|
-
const passkeysSetupSchema = zod.z.object({ name: zod.z.string().min(1, "Passkey name is required") });
|
|
28
|
-
const recoveryCodeVerifySchema = zod.z.object({ code: zod.z.string().min(16, "Recovery code is required").max(16) });
|
|
29
|
-
|
|
30
|
-
//#endregion
|
|
31
|
-
exports.forgotPasswordSchema = forgotPasswordSchema;
|
|
32
|
-
exports.loginSchema = loginSchema;
|
|
33
|
-
exports.passkeysSetupSchema = passkeysSetupSchema;
|
|
34
|
-
exports.recoveryCodeVerifySchema = recoveryCodeVerifySchema;
|
|
35
|
-
exports.registerSchema = registerSchema;
|
|
36
|
-
exports.resetPasswordSchema = resetPasswordSchema;
|
|
37
|
-
exports.totpSetupSchema = totpSetupSchema;
|
|
38
|
-
exports.totpVerifySchema = totpVerifySchema;
|
|
39
|
-
exports.verifyEmailSchema = verifyEmailSchema;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);let e=require(`zod`);const t=e.z.object({email:e.z.string().email(`Invalid email address`),password:e.z.string().min(8),remember:e.z.boolean().optional()}),n=e.z.object({username:e.z.string().min(2,`Name must be at least 2 characters`),email:e.z.string().email(`Invalid email address`),password:e.z.string().min(8,`Password must be at least 8 characters`),terms:e.z.boolean().refine(e=>e===!0,`You must accept the terms`)}),r=e.z.object({email:e.z.string().email(`Invalid email address`)}),i=e.z.object({password:e.z.string().min(8,`Password must be at least 8 characters`),confirm:e.z.string()}).refine(e=>e.password===e.confirm,{message:`Passwords do not match`,path:[`confirm`]}),a=e.z.object({code:e.z.string().min(6).max(6)}),o=e.z.object({code:e.z.string().regex(/^\d{6}$/,`Code must be 6 digits`)}),s=e.z.object({code:e.z.string().regex(/^\d{6}$/,`Code must be 6 digits`)}),c=e.z.object({name:e.z.string().min(1,`Passkey name is required`)}),l=e.z.object({code:e.z.string().min(16,`Recovery code is required`).max(16)});exports.forgotPasswordSchema=r,exports.loginSchema=t,exports.passkeysSetupSchema=c,exports.recoveryCodeVerifySchema=l,exports.registerSchema=n,exports.resetPasswordSchema=i,exports.totpSetupSchema=o,exports.totpVerifySchema=s,exports.verifyEmailSchema=a;
|