@arch-cadre/core 0.0.6
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 +29 -0
- package/dist/_virtual/_rolldown/runtime.mjs +18 -0
- package/dist/core/auth/augment.cjs +71 -0
- package/dist/core/auth/augment.d.cts +20 -0
- package/dist/core/auth/augment.d.cts.map +1 -0
- package/dist/core/auth/augment.d.mts +20 -0
- package/dist/core/auth/augment.d.mts.map +1 -0
- package/dist/core/auth/augment.mjs +66 -0
- package/dist/core/auth/augment.mjs.map +1 -0
- package/dist/core/auth/email-verification.cjs +99 -0
- package/dist/core/auth/email-verification.d.cts +62 -0
- package/dist/core/auth/email-verification.d.cts.map +1 -0
- package/dist/core/auth/email-verification.d.mts +62 -0
- package/dist/core/auth/email-verification.d.mts.map +1 -0
- package/dist/core/auth/email-verification.mjs +92 -0
- package/dist/core/auth/email-verification.mjs.map +1 -0
- package/dist/core/auth/logic.cjs +224 -0
- package/dist/core/auth/logic.d.cts +110 -0
- package/dist/core/auth/logic.d.cts.map +1 -0
- package/dist/core/auth/logic.d.mts +110 -0
- package/dist/core/auth/logic.d.mts.map +1 -0
- package/dist/core/auth/logic.mjs +213 -0
- package/dist/core/auth/logic.mjs.map +1 -0
- package/dist/core/auth/password-reset.cjs +118 -0
- package/dist/core/auth/password-reset.d.cts +39 -0
- package/dist/core/auth/password-reset.d.cts.map +1 -0
- package/dist/core/auth/password-reset.d.mts +39 -0
- package/dist/core/auth/password-reset.d.mts.map +1 -0
- package/dist/core/auth/password-reset.mjs +111 -0
- package/dist/core/auth/password-reset.mjs.map +1 -0
- package/dist/core/auth/rbac.cjs +118 -0
- package/dist/core/auth/rbac.d.cts +61 -0
- package/dist/core/auth/rbac.d.cts.map +1 -0
- package/dist/core/auth/rbac.d.mts +61 -0
- package/dist/core/auth/rbac.d.mts.map +1 -0
- package/dist/core/auth/rbac.mjs +104 -0
- package/dist/core/auth/rbac.mjs.map +1 -0
- package/dist/core/auth/session.cjs +161 -0
- package/dist/core/auth/session.d.cts +54 -0
- package/dist/core/auth/session.d.cts.map +1 -0
- package/dist/core/auth/session.d.mts +54 -0
- package/dist/core/auth/session.d.mts.map +1 -0
- package/dist/core/auth/session.mjs +150 -0
- package/dist/core/auth/session.mjs.map +1 -0
- package/dist/core/auth/types.d.cts +55 -0
- package/dist/core/auth/types.d.cts.map +1 -0
- package/dist/core/auth/types.d.mts +55 -0
- package/dist/core/auth/types.d.mts.map +1 -0
- package/dist/core/auth/utils/encode.cjs +27 -0
- package/dist/core/auth/utils/encode.d.cts +15 -0
- package/dist/core/auth/utils/encode.d.cts.map +1 -0
- package/dist/core/auth/utils/encode.d.mts +15 -0
- package/dist/core/auth/utils/encode.d.mts.map +1 -0
- package/dist/core/auth/utils/encode.mjs +26 -0
- package/dist/core/auth/utils/encode.mjs.map +1 -0
- package/dist/core/auth/utils/encryption.cjs +67 -0
- package/dist/core/auth/utils/encryption.d.cts +28 -0
- package/dist/core/auth/utils/encryption.d.cts.map +1 -0
- package/dist/core/auth/utils/encryption.d.mts +28 -0
- package/dist/core/auth/utils/encryption.d.mts.map +1 -0
- package/dist/core/auth/utils/encryption.mjs +64 -0
- package/dist/core/auth/utils/encryption.mjs.map +1 -0
- package/dist/core/auth/validation.cjs +39 -0
- package/dist/core/auth/validation.d.cts +48 -0
- package/dist/core/auth/validation.d.cts.map +1 -0
- package/dist/core/auth/validation.d.mts +48 -0
- package/dist/core/auth/validation.d.mts.map +1 -0
- package/dist/core/auth/validation.mjs +31 -0
- package/dist/core/auth/validation.mjs.map +1 -0
- package/dist/core/bootstrap.cjs +32 -0
- package/dist/core/bootstrap.d.cts +5 -0
- package/dist/core/bootstrap.d.cts.map +1 -0
- package/dist/core/bootstrap.d.mts +5 -0
- package/dist/core/bootstrap.d.mts.map +1 -0
- package/dist/core/bootstrap.mjs +33 -0
- package/dist/core/bootstrap.mjs.map +1 -0
- package/dist/core/config.cjs +6 -0
- package/dist/core/config.d.cts +11 -0
- package/dist/core/config.d.cts.map +1 -0
- package/dist/core/config.d.mts +11 -0
- package/dist/core/config.d.mts.map +1 -0
- package/dist/core/config.mjs +6 -0
- package/dist/core/config.mjs.map +1 -0
- package/dist/core/config.server.cjs +60 -0
- package/dist/core/config.server.d.cts +16 -0
- package/dist/core/config.server.d.cts.map +1 -0
- package/dist/core/config.server.d.mts +16 -0
- package/dist/core/config.server.d.mts.map +1 -0
- package/dist/core/config.server.mjs +57 -0
- package/dist/core/config.server.mjs.map +1 -0
- package/dist/core/event-bus.cjs +48 -0
- package/dist/core/event-bus.d.cts +17 -0
- package/dist/core/event-bus.d.cts.map +1 -0
- package/dist/core/event-bus.d.mts +17 -0
- package/dist/core/event-bus.d.mts.map +1 -0
- package/dist/core/event-bus.mjs +48 -0
- package/dist/core/event-bus.mjs.map +1 -0
- package/dist/core/filesystem/service.cjs +43 -0
- package/dist/core/filesystem/service.d.cts +19 -0
- package/dist/core/filesystem/service.d.cts.map +1 -0
- package/dist/core/filesystem/service.d.mts +19 -0
- package/dist/core/filesystem/service.d.mts.map +1 -0
- package/dist/core/filesystem/service.mjs +43 -0
- package/dist/core/filesystem/service.mjs.map +1 -0
- package/dist/core/filesystem/types.d.cts +22 -0
- package/dist/core/filesystem/types.d.cts.map +1 -0
- package/dist/core/filesystem/types.d.mts +22 -0
- package/dist/core/filesystem/types.d.mts.map +1 -0
- package/dist/core/notifications/actions.cjs +36 -0
- package/dist/core/notifications/actions.d.cts +58 -0
- package/dist/core/notifications/actions.d.cts.map +1 -0
- package/dist/core/notifications/actions.d.mts +58 -0
- package/dist/core/notifications/actions.d.mts.map +1 -0
- package/dist/core/notifications/actions.mjs +33 -0
- package/dist/core/notifications/actions.mjs.map +1 -0
- package/dist/core/notifications/index.cjs +2 -0
- package/dist/core/notifications/index.mjs +4 -0
- package/dist/core/notifications/service.cjs +30 -0
- package/dist/core/notifications/service.d.cts +9 -0
- package/dist/core/notifications/service.d.cts.map +1 -0
- package/dist/core/notifications/service.d.mts +9 -0
- package/dist/core/notifications/service.d.mts.map +1 -0
- package/dist/core/notifications/service.mjs +31 -0
- package/dist/core/notifications/service.mjs.map +1 -0
- package/dist/core/notifications/types.d.cts +21 -0
- package/dist/core/notifications/types.d.cts.map +1 -0
- package/dist/core/notifications/types.d.mts +21 -0
- package/dist/core/notifications/types.d.mts.map +1 -0
- package/dist/core/setup.cjs +25 -0
- package/dist/core/setup.d.cts +9 -0
- package/dist/core/setup.d.cts.map +1 -0
- package/dist/core/setup.d.mts +9 -0
- package/dist/core/setup.d.mts.map +1 -0
- package/dist/core/setup.mjs +25 -0
- package/dist/core/setup.mjs.map +1 -0
- package/dist/core/types.d.cts +13 -0
- package/dist/core/types.d.cts.map +1 -0
- package/dist/core/types.d.mts +13 -0
- package/dist/core/types.d.mts.map +1 -0
- package/dist/index.cjs +30 -0
- package/dist/index.d.cts +8 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.mjs +6 -0
- package/dist/server/auth/email.cjs +24 -0
- package/dist/server/auth/email.d.cts +13 -0
- package/dist/server/auth/email.d.cts.map +1 -0
- package/dist/server/auth/email.d.mts +13 -0
- package/dist/server/auth/email.d.mts.map +1 -0
- package/dist/server/auth/email.mjs +23 -0
- package/dist/server/auth/email.mjs.map +1 -0
- package/dist/server/auth/password.cjs +37 -0
- package/dist/server/auth/password.d.cts +23 -0
- package/dist/server/auth/password.d.cts.map +1 -0
- package/dist/server/auth/password.d.mts +23 -0
- package/dist/server/auth/password.d.mts.map +1 -0
- package/dist/server/auth/password.mjs +34 -0
- package/dist/server/auth/password.mjs.map +1 -0
- package/dist/server/auth/user.cjs +165 -0
- package/dist/server/auth/user.d.cts +58 -0
- package/dist/server/auth/user.d.cts.map +1 -0
- package/dist/server/auth/user.d.mts +58 -0
- package/dist/server/auth/user.d.mts.map +1 -0
- package/dist/server/auth/user.mjs +153 -0
- package/dist/server/auth/user.mjs.map +1 -0
- package/dist/server/database/inject.cjs +24 -0
- package/dist/server/database/inject.d.cts +15 -0
- package/dist/server/database/inject.d.cts.map +1 -0
- package/dist/server/database/inject.d.mts +15 -0
- package/dist/server/database/inject.d.mts.map +1 -0
- package/dist/server/database/inject.mjs +23 -0
- package/dist/server/database/inject.mjs.map +1 -0
- package/dist/server/database/schema.cjs +163 -0
- package/dist/server/database/schema.d.cts +2962 -0
- package/dist/server/database/schema.d.cts.map +1 -0
- package/dist/server/database/schema.d.mts +2962 -0
- package/dist/server/database/schema.d.mts.map +1 -0
- package/dist/server/database/schema.mjs +151 -0
- package/dist/server/database/schema.mjs.map +1 -0
- package/dist/server/emails/index.cjs +32 -0
- package/dist/server/emails/index.d.cts +26 -0
- package/dist/server/emails/index.d.cts.map +1 -0
- package/dist/server/emails/index.d.mts +26 -0
- package/dist/server/emails/index.d.mts.map +1 -0
- package/dist/server/emails/index.mjs +29 -0
- package/dist/server/emails/index.mjs.map +1 -0
- package/dist/server.cjs +145 -0
- package/dist/server.d.cts +26 -0
- package/dist/server.d.mts +26 -0
- package/dist/server.mjs +23 -0
- package/package.json +60 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { passwordResetSessionTable, sessionTable, userTable } from "../../server/database/schema.mjs";
|
|
2
|
+
import { UserPermission, UserRole } from "../types.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/core/auth/types.d.ts
|
|
5
|
+
type User = typeof userTable.$inferSelect;
|
|
6
|
+
type Session = typeof sessionTable.$inferSelect & Record<string, any>;
|
|
7
|
+
type PasswordResetSession = typeof passwordResetSessionTable.$inferSelect & Record<string, any>;
|
|
8
|
+
/**
|
|
9
|
+
* Represents a user with all potential extensions.
|
|
10
|
+
* Use this type in UI components that require data added by modules.
|
|
11
|
+
*/
|
|
12
|
+
type FullUser = User & Record<string, any> & {
|
|
13
|
+
roles: UserRole[];
|
|
14
|
+
permissions: UserPermission[];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Basic session context.
|
|
18
|
+
*/
|
|
19
|
+
interface AuthSession {
|
|
20
|
+
session: Session | null;
|
|
21
|
+
user: FullUser | null;
|
|
22
|
+
}
|
|
23
|
+
interface SessionFlags {
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
}
|
|
26
|
+
type UserSession = {
|
|
27
|
+
id: string;
|
|
28
|
+
createdAt: Date;
|
|
29
|
+
expiresAt: Date;
|
|
30
|
+
isCurrent: boolean;
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
};
|
|
33
|
+
type AuthResponse = {
|
|
34
|
+
status: "SUCCESS";
|
|
35
|
+
session: Session;
|
|
36
|
+
user: FullUser;
|
|
37
|
+
redirect?: string;
|
|
38
|
+
} | {
|
|
39
|
+
status: "CHALLENGE_REQUIRED";
|
|
40
|
+
type: string;
|
|
41
|
+
userId: string;
|
|
42
|
+
tempToken?: string;
|
|
43
|
+
redirect?: string;
|
|
44
|
+
} | {
|
|
45
|
+
status: "ERROR";
|
|
46
|
+
message: string;
|
|
47
|
+
redirect?: string;
|
|
48
|
+
};
|
|
49
|
+
interface PasswordResetAuthSession {
|
|
50
|
+
session: PasswordResetSession | null;
|
|
51
|
+
user: FullUser | null;
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { AuthResponse, AuthSession, FullUser, PasswordResetAuthSession, PasswordResetSession, Session, SessionFlags, User, UserSession };
|
|
55
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +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;EAErD,MAAA;EACA,IAAA;EACA,MAAA;EACA,SAAA;EACA,QAAA;AAAA;EAEA,MAAA;EAAiB,OAAA;EAAiB,QAAA;AAAA;AAAA,UAEvB,wBAAA;EACf,OAAA,EAAS,oBAAA;EACT,IAAA,EAAM,QAAA;AAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
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;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/core/auth/utils/encode.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates a random one-time code (OTP).
|
|
4
|
+
* @param length Length of the generated code (default 6).
|
|
5
|
+
* @returns A random uppercase base32 string.
|
|
6
|
+
*/
|
|
7
|
+
declare function generateRandomOTP(length?: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* Generates a random recovery code.
|
|
10
|
+
* @returns A random uppercase base32 string.
|
|
11
|
+
*/
|
|
12
|
+
declare function generateRandomRecoveryCode(): string;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { generateRandomOTP, generateRandomRecoveryCode };
|
|
15
|
+
//# sourceMappingURL=encode.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode.d.cts","names":[],"sources":["../../../../src/core/auth/utils/encode.ts"],"mappings":";;AAOA;;;;iBAAgB,iBAAA,CAAkB,MAAA;AAUlC;;;;AAAA,iBAAgB,0BAAA,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/core/auth/utils/encode.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Generates a random one-time code (OTP).
|
|
4
|
+
* @param length Length of the generated code (default 6).
|
|
5
|
+
* @returns A random uppercase base32 string.
|
|
6
|
+
*/
|
|
7
|
+
declare function generateRandomOTP(length?: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* Generates a random recovery code.
|
|
10
|
+
* @returns A random uppercase base32 string.
|
|
11
|
+
*/
|
|
12
|
+
declare function generateRandomRecoveryCode(): string;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { generateRandomOTP, generateRandomRecoveryCode };
|
|
15
|
+
//# sourceMappingURL=encode.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode.d.mts","names":[],"sources":["../../../../src/core/auth/utils/encode.ts"],"mappings":";;AAOA;;;;iBAAgB,iBAAA,CAAkB,MAAA;AAUlC;;;;AAAA,iBAAgB,0BAAA,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { encodeBase32UpperCaseNoPadding } from "@oslojs/encoding";
|
|
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 };
|
|
26
|
+
//# sourceMappingURL=encode.mjs.map
|
|
@@ -0,0 +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":";;;;;;;;AAOA,SAAgB,kBAAkB,SAAS,GAAW;CACpD,MAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,QAAO,gBAAgB,MAAM;AAC7B,QAAO,+BAA+B,MAAM,CAAC,UAAU,GAAG,OAAO;;;;;;AAOnE,SAAgB,6BAAqC;CACnD,MAAM,oBAAoB,IAAI,WAAW,GAAG;AAC5C,QAAO,gBAAgB,kBAAkB;AACzC,QAAO,+BAA+B,kBAAkB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
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;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/core/auth/utils/encryption.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Encrypts data using AES-128-GCM.
|
|
4
|
+
* @param data Data to be encrypted.
|
|
5
|
+
* @returns Encrypted data including IV and auth tag.
|
|
6
|
+
*/
|
|
7
|
+
declare function encrypt(data: Uint8Array): Uint8Array;
|
|
8
|
+
/**
|
|
9
|
+
* Encrypts a string.
|
|
10
|
+
* @param data String to be encrypted.
|
|
11
|
+
* @returns Encrypted data as Uint8Array.
|
|
12
|
+
*/
|
|
13
|
+
declare function encryptString(data: string): Uint8Array;
|
|
14
|
+
/**
|
|
15
|
+
* Decrypts data using AES-128-GCM.
|
|
16
|
+
* @param encrypted Encrypted data (IV + content + auth tag).
|
|
17
|
+
* @returns Decrypted data.
|
|
18
|
+
*/
|
|
19
|
+
declare function decrypt(encrypted: Uint8Array): Uint8Array;
|
|
20
|
+
/**
|
|
21
|
+
* Decrypts data to a string.
|
|
22
|
+
* @param data Encrypted data.
|
|
23
|
+
* @returns Odszyfrowany ciąg znaków.
|
|
24
|
+
*/
|
|
25
|
+
declare function decryptToString(data: Uint8Array): string;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { decrypt, decryptToString, encrypt, encryptString };
|
|
28
|
+
//# sourceMappingURL=encryption.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.d.cts","names":[],"sources":["../../../../src/core/auth/utils/encryption.ts"],"mappings":";;AAoBA;;;;iBAAgB,OAAA,CAAQ,IAAA,EAAM,UAAA,GAAa,UAAA;;;;;AAiB3C;iBAAgB,aAAA,CAAc,IAAA,WAAe,UAAA;;;;AAS7C;;iBAAgB,OAAA,CAAQ,SAAA,EAAW,UAAA,GAAa,UAAA;;;;;;iBAsBhC,eAAA,CAAgB,IAAA,EAAM,UAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/core/auth/utils/encryption.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Encrypts data using AES-128-GCM.
|
|
4
|
+
* @param data Data to be encrypted.
|
|
5
|
+
* @returns Encrypted data including IV and auth tag.
|
|
6
|
+
*/
|
|
7
|
+
declare function encrypt(data: Uint8Array): Uint8Array;
|
|
8
|
+
/**
|
|
9
|
+
* Encrypts a string.
|
|
10
|
+
* @param data String to be encrypted.
|
|
11
|
+
* @returns Encrypted data as Uint8Array.
|
|
12
|
+
*/
|
|
13
|
+
declare function encryptString(data: string): Uint8Array;
|
|
14
|
+
/**
|
|
15
|
+
* Decrypts data using AES-128-GCM.
|
|
16
|
+
* @param encrypted Encrypted data (IV + content + auth tag).
|
|
17
|
+
* @returns Decrypted data.
|
|
18
|
+
*/
|
|
19
|
+
declare function decrypt(encrypted: Uint8Array): Uint8Array;
|
|
20
|
+
/**
|
|
21
|
+
* Decrypts data to a string.
|
|
22
|
+
* @param data Encrypted data.
|
|
23
|
+
* @returns Odszyfrowany ciąg znaków.
|
|
24
|
+
*/
|
|
25
|
+
declare function decryptToString(data: Uint8Array): string;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { decrypt, decryptToString, encrypt, encryptString };
|
|
28
|
+
//# sourceMappingURL=encryption.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.d.mts","names":[],"sources":["../../../../src/core/auth/utils/encryption.ts"],"mappings":";;AAoBA;;;;iBAAgB,OAAA,CAAQ,IAAA,EAAM,UAAA,GAAa,UAAA;;;;;AAiB3C;iBAAgB,aAAA,CAAc,IAAA,WAAe,UAAA;;;;AAS7C;;iBAAgB,OAAA,CAAQ,SAAA,EAAW,UAAA,GAAa,UAAA;;;;;;iBAsBhC,eAAA,CAAgB,IAAA,EAAM,UAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { decodeBase64 } from "@oslojs/encoding";
|
|
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 };
|
|
64
|
+
//# sourceMappingURL=encryption.mjs.map
|
|
@@ -0,0 +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":";;;;;AAIA,MAAM,iBAAiB,QAAQ,IAAI;AAEnC,IAAI,CAAC,eACH,OAAM,IAAI,MAAM,iDAAiD;;;;AAMnE,MAAM,MAAM,aAAa,eAAe;;;;;;AAOxC,SAAgB,QAAQ,MAA8B;CACpD,MAAM,KAAK,IAAI,WAAW,GAAG;AAC7B,QAAO,gBAAgB,GAAG;CAC1B,MAAM,SAAS,eAAe,eAAe,KAAK,GAAG;CACrD,MAAM,YAAY,IAAI,cAAc,EAAE;AACtC,WAAU,MAAM,GAAG;AACnB,WAAU,MAAM,OAAO,OAAO,KAAK,CAAC;AACpC,WAAU,MAAM,OAAO,OAAO,CAAC;AAC/B,WAAU,MAAM,OAAO,YAAY,CAAC;AACpC,QAAO,UAAU,OAAO;;;;;;;AAQ1B,SAAgB,cAAc,MAA0B;AACtD,QAAO,QAAQ,IAAI,aAAa,CAAC,OAAO,KAAK,CAAC;;;;;;;AAQhD,SAAgB,QAAQ,WAAmC;AACzD,KAAI,UAAU,aAAa,GACzB,OAAM,IAAI,MAAM,gCAAgC;CAElD,MAAM,KAAK,UAAU,MAAM,GAAG,GAAG;CACjC,MAAM,UAAU,UAAU,MAAM,UAAU,aAAa,GAAG;CAC1D,MAAM,UAAU,UAAU,MAAM,IAAI,UAAU,aAAa,GAAG;CAE9D,MAAM,WAAW,iBAAiB,eAAe,KAAK,GAAG;AACzD,UAAS,WAAW,QAAQ;CAE5B,MAAM,YAAY,IAAI,cAAc,EAAE;AACtC,WAAU,MAAM,SAAS,OAAO,QAAQ,CAAC;AACzC,WAAU,MAAM,SAAS,OAAO,CAAC;AACjC,QAAO,UAAU,OAAO;;;;;;;AAQ1B,SAAgB,gBAAgB,MAA0B;AACxD,QAAO,IAAI,aAAa,CAAC,OAAO,QAAQ,KAAK,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
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;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/core/auth/validation.d.ts
|
|
4
|
+
declare const loginSchema: z.ZodObject<{
|
|
5
|
+
email: z.ZodString;
|
|
6
|
+
password: z.ZodString;
|
|
7
|
+
remember: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
declare const registerSchema: z.ZodObject<{
|
|
10
|
+
username: z.ZodString;
|
|
11
|
+
email: z.ZodString;
|
|
12
|
+
password: z.ZodString;
|
|
13
|
+
terms: z.ZodBoolean;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
declare const forgotPasswordSchema: z.ZodObject<{
|
|
16
|
+
email: z.ZodString;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
declare const resetPasswordSchema: z.ZodObject<{
|
|
19
|
+
password: z.ZodString;
|
|
20
|
+
confirm: z.ZodString;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
declare const verifyEmailSchema: z.ZodObject<{
|
|
23
|
+
code: z.ZodString;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
declare const totpSetupSchema: z.ZodObject<{
|
|
26
|
+
code: z.ZodString;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
declare const totpVerifySchema: z.ZodObject<{
|
|
29
|
+
code: z.ZodString;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
declare const passkeysSetupSchema: z.ZodObject<{
|
|
32
|
+
name: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
declare const recoveryCodeVerifySchema: z.ZodObject<{
|
|
35
|
+
code: z.ZodString;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
type LoginInput = z.infer<typeof loginSchema>;
|
|
38
|
+
type RegisterInput = z.infer<typeof registerSchema>;
|
|
39
|
+
type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>;
|
|
40
|
+
type ResetPasswordInput = z.infer<typeof resetPasswordSchema>;
|
|
41
|
+
type TOTPSetupInput = z.infer<typeof totpSetupSchema>;
|
|
42
|
+
type TOTPVerifyInput = z.infer<typeof totpVerifySchema>;
|
|
43
|
+
type PasskeysSetupInput = z.infer<typeof passkeysSetupSchema>;
|
|
44
|
+
type VerifyEmailInput = z.infer<typeof verifyEmailSchema>;
|
|
45
|
+
type RecoveryVerifyInput = z.infer<typeof recoveryCodeVerifySchema>;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ForgotPasswordInput, LoginInput, PasskeysSetupInput, RecoveryVerifyInput, RegisterInput, ResetPasswordInput, TOTPSetupInput, TOTPVerifyInput, VerifyEmailInput, forgotPasswordSchema, loginSchema, passkeysSetupSchema, recoveryCodeVerifySchema, registerSchema, resetPasswordSchema, totpSetupSchema, totpVerifySchema, verifyEmailSchema };
|
|
48
|
+
//# sourceMappingURL=validation.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.cts","names":[],"sources":["../../../src/core/auth/validation.ts"],"mappings":";;;cAGa,WAAA,EAAW,CAAA,CAAA,SAAA;;;;;cAMX,cAAA,EAAc,CAAA,CAAA,SAAA;;;;;;cAOd,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;cAIpB,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;;cAUnB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;cAKjB,eAAA,EAAe,CAAA,CAAA,SAAA;;;cAIf,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;cAIhB,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;cAInB,wBAAA,EAAwB,CAAA,CAAA,SAAA;;;KAKzB,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,WAAA;AAAA,KAC5B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC/B,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KACrC,kBAAA,GAAqB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KACpC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAChC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,KACjC,kBAAA,GAAqB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KACpC,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAClC,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,wBAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/core/auth/validation.d.ts
|
|
4
|
+
declare const loginSchema: z.ZodObject<{
|
|
5
|
+
email: z.ZodString;
|
|
6
|
+
password: z.ZodString;
|
|
7
|
+
remember: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
declare const registerSchema: z.ZodObject<{
|
|
10
|
+
username: z.ZodString;
|
|
11
|
+
email: z.ZodString;
|
|
12
|
+
password: z.ZodString;
|
|
13
|
+
terms: z.ZodBoolean;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
declare const forgotPasswordSchema: z.ZodObject<{
|
|
16
|
+
email: z.ZodString;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
declare const resetPasswordSchema: z.ZodObject<{
|
|
19
|
+
password: z.ZodString;
|
|
20
|
+
confirm: z.ZodString;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
declare const verifyEmailSchema: z.ZodObject<{
|
|
23
|
+
code: z.ZodString;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
declare const totpSetupSchema: z.ZodObject<{
|
|
26
|
+
code: z.ZodString;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
declare const totpVerifySchema: z.ZodObject<{
|
|
29
|
+
code: z.ZodString;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
declare const passkeysSetupSchema: z.ZodObject<{
|
|
32
|
+
name: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
declare const recoveryCodeVerifySchema: z.ZodObject<{
|
|
35
|
+
code: z.ZodString;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
type LoginInput = z.infer<typeof loginSchema>;
|
|
38
|
+
type RegisterInput = z.infer<typeof registerSchema>;
|
|
39
|
+
type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>;
|
|
40
|
+
type ResetPasswordInput = z.infer<typeof resetPasswordSchema>;
|
|
41
|
+
type TOTPSetupInput = z.infer<typeof totpSetupSchema>;
|
|
42
|
+
type TOTPVerifyInput = z.infer<typeof totpVerifySchema>;
|
|
43
|
+
type PasskeysSetupInput = z.infer<typeof passkeysSetupSchema>;
|
|
44
|
+
type VerifyEmailInput = z.infer<typeof verifyEmailSchema>;
|
|
45
|
+
type RecoveryVerifyInput = z.infer<typeof recoveryCodeVerifySchema>;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ForgotPasswordInput, LoginInput, PasskeysSetupInput, RecoveryVerifyInput, RegisterInput, ResetPasswordInput, TOTPSetupInput, TOTPVerifyInput, VerifyEmailInput, forgotPasswordSchema, loginSchema, passkeysSetupSchema, recoveryCodeVerifySchema, registerSchema, resetPasswordSchema, totpSetupSchema, totpVerifySchema, verifyEmailSchema };
|
|
48
|
+
//# sourceMappingURL=validation.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.mts","names":[],"sources":["../../../src/core/auth/validation.ts"],"mappings":";;;cAGa,WAAA,EAAW,CAAA,CAAA,SAAA;;;;;cAMX,cAAA,EAAc,CAAA,CAAA,SAAA;;;;;;cAOd,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;cAIpB,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;;cAUnB,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;cAKjB,eAAA,EAAe,CAAA,CAAA,SAAA;;;cAIf,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;cAIhB,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;cAInB,wBAAA,EAAwB,CAAA,CAAA,SAAA;;;KAKzB,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,WAAA;AAAA,KAC5B,aAAA,GAAgB,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,KAC/B,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,KACrC,kBAAA,GAAqB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KACpC,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,eAAA;AAAA,KAChC,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,KACjC,kBAAA,GAAqB,CAAA,CAAE,KAAA,QAAa,mBAAA;AAAA,KACpC,gBAAA,GAAmB,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,KAClC,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,wBAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/core/auth/validation.ts
|
|
4
|
+
const loginSchema = z.object({
|
|
5
|
+
email: z.string().email("Invalid email address"),
|
|
6
|
+
password: z.string().min(8),
|
|
7
|
+
remember: z.boolean().optional()
|
|
8
|
+
});
|
|
9
|
+
const registerSchema = z.object({
|
|
10
|
+
username: z.string().min(2, "Name must be at least 2 characters"),
|
|
11
|
+
email: z.string().email("Invalid email address"),
|
|
12
|
+
password: z.string().min(8, "Password must be at least 8 characters"),
|
|
13
|
+
terms: z.boolean().refine((val) => val === true, "You must accept the terms")
|
|
14
|
+
});
|
|
15
|
+
const forgotPasswordSchema = z.object({ email: z.string().email("Invalid email address") });
|
|
16
|
+
const resetPasswordSchema = z.object({
|
|
17
|
+
password: z.string().min(8, "Password must be at least 8 characters"),
|
|
18
|
+
confirm: z.string()
|
|
19
|
+
}).refine((data) => data.password === data.confirm, {
|
|
20
|
+
message: "Passwords do not match",
|
|
21
|
+
path: ["confirm"]
|
|
22
|
+
});
|
|
23
|
+
const verifyEmailSchema = z.object({ code: z.string().min(6).max(6) });
|
|
24
|
+
const totpSetupSchema = z.object({ code: z.string().regex(/^\d{6}$/, "Code must be 6 digits") });
|
|
25
|
+
const totpVerifySchema = z.object({ code: z.string().regex(/^\d{6}$/, "Code must be 6 digits") });
|
|
26
|
+
const passkeysSetupSchema = z.object({ name: z.string().min(1, "Passkey name is required") });
|
|
27
|
+
const recoveryCodeVerifySchema = z.object({ code: z.string().min(16, "Recovery code is required").max(16) });
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { forgotPasswordSchema, loginSchema, passkeysSetupSchema, recoveryCodeVerifySchema, registerSchema, resetPasswordSchema, totpSetupSchema, totpVerifySchema, verifyEmailSchema };
|
|
31
|
+
//# sourceMappingURL=validation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.mjs","names":[],"sources":["../../../src/core/auth/validation.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// Auth validation schemas - CLEAN (No DB dependencies for client-side)\nexport const loginSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n password: z.string().min(8),\n remember: z.boolean().optional(),\n});\n\nexport const registerSchema = z.object({\n username: z.string().min(2, \"Name must be at least 2 characters\"),\n email: z.string().email(\"Invalid email address\"),\n password: z.string().min(8, \"Password must be at least 8 characters\"),\n terms: z.boolean().refine((val) => val === true, \"You must accept the terms\"),\n});\n\nexport const forgotPasswordSchema = z.object({\n email: z.string().email(\"Invalid email address\"),\n});\n\nexport const resetPasswordSchema = z\n .object({\n password: z.string().min(8, \"Password must be at least 8 characters\"),\n confirm: z.string(),\n })\n .refine((data) => data.password === data.confirm, {\n message: \"Passwords do not match\",\n path: [\"confirm\"],\n });\n\nexport const verifyEmailSchema = z.object({\n code: z.string().min(6).max(6),\n});\n\n// mfa validation schemas\nexport const totpSetupSchema = z.object({\n code: z.string().regex(/^\\d{6}$/, \"Code must be 6 digits\"),\n});\n\nexport const totpVerifySchema = z.object({\n code: z.string().regex(/^\\d{6}$/, \"Code must be 6 digits\"),\n});\n\nexport const passkeysSetupSchema = z.object({\n name: z.string().min(1, \"Passkey name is required\"),\n});\n\nexport const recoveryCodeVerifySchema = z.object({\n code: z.string().min(16, \"Recovery code is required\").max(16),\n});\n\n// Type exports for use in components\nexport type LoginInput = z.infer<typeof loginSchema>;\nexport type RegisterInput = z.infer<typeof registerSchema>;\nexport type ForgotPasswordInput = z.infer<typeof forgotPasswordSchema>;\nexport type ResetPasswordInput = z.infer<typeof resetPasswordSchema>;\nexport type TOTPSetupInput = z.infer<typeof totpSetupSchema>;\nexport type TOTPVerifyInput = z.infer<typeof totpVerifySchema>;\nexport type PasskeysSetupInput = z.infer<typeof passkeysSetupSchema>;\nexport type VerifyEmailInput = z.infer<typeof verifyEmailSchema>;\nexport type RecoveryVerifyInput = z.infer<typeof recoveryCodeVerifySchema>;\n"],"mappings":";;;AAGA,MAAa,cAAc,EAAE,OAAO;CAClC,OAAO,EAAE,QAAQ,CAAC,MAAM,wBAAwB;CAChD,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC3B,UAAU,EAAE,SAAS,CAAC,UAAU;CACjC,CAAC;AAEF,MAAa,iBAAiB,EAAE,OAAO;CACrC,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,qCAAqC;CACjE,OAAO,EAAE,QAAQ,CAAC,MAAM,wBAAwB;CAChD,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,yCAAyC;CACrE,OAAO,EAAE,SAAS,CAAC,QAAQ,QAAQ,QAAQ,MAAM,4BAA4B;CAC9E,CAAC;AAEF,MAAa,uBAAuB,EAAE,OAAO,EAC3C,OAAO,EAAE,QAAQ,CAAC,MAAM,wBAAwB,EACjD,CAAC;AAEF,MAAa,sBAAsB,EAChC,OAAO;CACN,UAAU,EAAE,QAAQ,CAAC,IAAI,GAAG,yCAAyC;CACrE,SAAS,EAAE,QAAQ;CACpB,CAAC,CACD,QAAQ,SAAS,KAAK,aAAa,KAAK,SAAS;CAChD,SAAS;CACT,MAAM,CAAC,UAAU;CAClB,CAAC;AAEJ,MAAa,oBAAoB,EAAE,OAAO,EACxC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAC/B,CAAC;AAGF,MAAa,kBAAkB,EAAE,OAAO,EACtC,MAAM,EAAE,QAAQ,CAAC,MAAM,WAAW,wBAAwB,EAC3D,CAAC;AAEF,MAAa,mBAAmB,EAAE,OAAO,EACvC,MAAM,EAAE,QAAQ,CAAC,MAAM,WAAW,wBAAwB,EAC3D,CAAC;AAEF,MAAa,sBAAsB,EAAE,OAAO,EAC1C,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,2BAA2B,EACpD,CAAC;AAEF,MAAa,2BAA2B,EAAE,OAAO,EAC/C,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,4BAA4B,CAAC,IAAI,GAAG,EAC9D,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const require_event_bus = require('./event-bus.cjs');
|
|
2
|
+
const require_inject = require('../server/database/inject.cjs');
|
|
3
|
+
const require_email_verification = require('./auth/email-verification.cjs');
|
|
4
|
+
const require_setup = require('./setup.cjs');
|
|
5
|
+
const require_service = require('./notifications/service.cjs');
|
|
6
|
+
|
|
7
|
+
//#region src/core/bootstrap.ts
|
|
8
|
+
async function ensureSystemInitialized(providedDb) {
|
|
9
|
+
if (typeof window !== "undefined") return;
|
|
10
|
+
const g = globalThis;
|
|
11
|
+
if (providedDb) require_inject.injectDb(providedDb);
|
|
12
|
+
if (g.__KRYO_INITIALIZED__) return;
|
|
13
|
+
if (g.__KRYO_INITIALIZING__) return;
|
|
14
|
+
g.__KRYO_INITIALIZING__ = true;
|
|
15
|
+
try {
|
|
16
|
+
console.log("[Kryo:Bootstrap] Starting system initialization...");
|
|
17
|
+
if (!g.__KRYO_DB__) console.warn("[Kryo:Bootstrap] DB not detected during bootstrap start. Trying to continue...");
|
|
18
|
+
require_service.notificationService.init();
|
|
19
|
+
await require_email_verification.initEmailVerification();
|
|
20
|
+
if (await require_setup.isSystemInstalled()) {} else console.log("[Kryo:Bootstrap] System not installed. Skipping module initialization.");
|
|
21
|
+
await require_event_bus.eventBus.publish("system:start", { runtime: "nodejs" });
|
|
22
|
+
console.log("[Kryo:Bootstrap] System initialized successfully.");
|
|
23
|
+
g.__KRYO_INITIALIZED__ = true;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error("[Kryo:Bootstrap] Initialization failed:", error);
|
|
26
|
+
} finally {
|
|
27
|
+
g.__KRYO_INITIALIZING__ = false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
exports.ensureSystemInitialized = ensureSystemInitialized;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.cts","names":[],"sources":["../../src/core/bootstrap.ts"],"mappings":";iBAMsB,uBAAA,CAAwB,UAAA,SAAgB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.mts","names":[],"sources":["../../src/core/bootstrap.ts"],"mappings":";iBAMsB,uBAAA,CAAwB,UAAA,SAAgB,OAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { eventBus } from "./event-bus.mjs";
|
|
2
|
+
import { injectDb } from "../server/database/inject.mjs";
|
|
3
|
+
import { initEmailVerification } from "./auth/email-verification.mjs";
|
|
4
|
+
import { isSystemInstalled } from "./setup.mjs";
|
|
5
|
+
import { notificationService } from "./notifications/service.mjs";
|
|
6
|
+
|
|
7
|
+
//#region src/core/bootstrap.ts
|
|
8
|
+
async function ensureSystemInitialized(providedDb) {
|
|
9
|
+
if (typeof window !== "undefined") return;
|
|
10
|
+
const g = globalThis;
|
|
11
|
+
if (providedDb) injectDb(providedDb);
|
|
12
|
+
if (g.__KRYO_INITIALIZED__) return;
|
|
13
|
+
if (g.__KRYO_INITIALIZING__) return;
|
|
14
|
+
g.__KRYO_INITIALIZING__ = true;
|
|
15
|
+
try {
|
|
16
|
+
console.log("[Kryo:Bootstrap] Starting system initialization...");
|
|
17
|
+
if (!g.__KRYO_DB__) console.warn("[Kryo:Bootstrap] DB not detected during bootstrap start. Trying to continue...");
|
|
18
|
+
notificationService.init();
|
|
19
|
+
await initEmailVerification();
|
|
20
|
+
if (await isSystemInstalled()) {} else console.log("[Kryo:Bootstrap] System not installed. Skipping module initialization.");
|
|
21
|
+
await eventBus.publish("system:start", { runtime: "nodejs" });
|
|
22
|
+
console.log("[Kryo:Bootstrap] System initialized successfully.");
|
|
23
|
+
g.__KRYO_INITIALIZED__ = true;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error("[Kryo:Bootstrap] Initialization failed:", error);
|
|
26
|
+
} finally {
|
|
27
|
+
g.__KRYO_INITIALIZING__ = false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { ensureSystemInitialized };
|
|
33
|
+
//# sourceMappingURL=bootstrap.mjs.map
|