@mars-stack/core 7.0.6 → 8.0.1
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/auth/password-hash.d.ts +10 -0
- package/dist/auth/password-hash.d.ts.map +1 -0
- package/dist/auth/password-hash.js +1 -0
- package/dist/auth/password-schema.d.ts +4 -0
- package/dist/auth/password-schema.d.ts.map +1 -0
- package/dist/auth/password-schema.js +1 -0
- package/dist/auth/password.d.ts +2 -26
- package/dist/auth/password.d.ts.map +1 -1
- package/dist/auth/password.js +3 -1
- package/dist/auth/validators.js +1 -1
- package/dist/{chunk-WO6FHJHG.js → chunk-6WI62GWT.js} +2 -9
- package/dist/chunk-BJY4ZUID.js +9 -0
- package/package.json +9 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hashes a password using SHA-256 prehash followed by bcrypt (cost 12).
|
|
3
|
+
* Safe to import from Prisma seed scripts and other Node contexts outside Next.js.
|
|
4
|
+
*/
|
|
5
|
+
export declare function hashPassword(password: string): Promise<string>;
|
|
6
|
+
/**
|
|
7
|
+
* Verifies a plaintext password against a stored bcrypt hash.
|
|
8
|
+
*/
|
|
9
|
+
export declare function verifyPassword(plainPassword: string, hashedPassword: string): Promise<boolean>;
|
|
10
|
+
//# sourceMappingURL=password-hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-hash.d.ts","sourceRoot":"","sources":["../../src/auth/password-hash.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIpE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAMlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { hashPassword, verifyPassword } from '../chunk-6WI62GWT.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-schema.d.ts","sourceRoot":"","sources":["../../src/auth/password-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,sHAAsH;AACtH,eAAO,MAAM,cAAc,aAYqE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { passwordSchema } from '../chunk-BJY4ZUID.js';
|
package/dist/auth/password.d.ts
CHANGED
|
@@ -1,28 +1,4 @@
|
|
|
1
1
|
import 'server-only';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare const passwordSchema: z.ZodString;
|
|
5
|
-
/**
|
|
6
|
-
* Hashes a password using SHA-256 prehash followed by bcrypt (cost 12).
|
|
7
|
-
* The prehash step allows bcrypt to work with passwords of any length while
|
|
8
|
-
* maintaining a domain separator to prevent cross-protocol collisions.
|
|
9
|
-
*
|
|
10
|
-
* @param password - The plaintext password to hash
|
|
11
|
-
* @returns The bcrypt hash string
|
|
12
|
-
* @example
|
|
13
|
-
* const hash = await hashPassword('mySecureP@ss1');
|
|
14
|
-
*/
|
|
15
|
-
export declare function hashPassword(password: string): Promise<string>;
|
|
16
|
-
/**
|
|
17
|
-
* Verifies a plaintext password against a stored bcrypt hash.
|
|
18
|
-
* Attempts prehashed comparison first, then falls back to direct comparison
|
|
19
|
-
* for backwards compatibility with legacy hashes.
|
|
20
|
-
*
|
|
21
|
-
* @param plainPassword - The plaintext password to verify
|
|
22
|
-
* @param hashedPassword - The stored bcrypt hash
|
|
23
|
-
* @returns True if the password matches
|
|
24
|
-
* @example
|
|
25
|
-
* const valid = await verifyPassword('mySecureP@ss1', storedHash);
|
|
26
|
-
*/
|
|
27
|
-
export declare function verifyPassword(plainPassword: string, hashedPassword: string): Promise<boolean>;
|
|
2
|
+
export { passwordSchema } from './password-schema';
|
|
3
|
+
export { hashPassword, verifyPassword } from './password-hash';
|
|
28
4
|
//# sourceMappingURL=password.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/auth/password.js
CHANGED
package/dist/auth/validators.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { z } from 'zod';
|
|
3
|
-
|
|
4
|
-
// src/auth/password.ts
|
|
1
|
+
// src/auth/password-hash.ts
|
|
5
2
|
var PASSWORD_PREHASH_DOMAIN = "mars-password-v1";
|
|
6
3
|
async function sha256Prehash(password) {
|
|
7
4
|
const payload = `${PASSWORD_PREHASH_DOMAIN}:${password}`;
|
|
@@ -9,10 +6,6 @@ async function sha256Prehash(password) {
|
|
|
9
6
|
const digest = await crypto.subtle.digest("SHA-256", data);
|
|
10
7
|
return Array.from(new Uint8Array(digest)).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
11
8
|
}
|
|
12
|
-
var passwordSchema = z.string().min(8, "Password must be at least 8 characters").max(100, "Password must be less than 100 characters").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/[0-9]/, "Password must contain at least one number").regex(/[^A-Za-z0-9]/, "Password must contain at least one special character").refine(
|
|
13
|
-
(password) => !password.toLowerCase().includes("password"),
|
|
14
|
-
"Password cannot contain 'password'"
|
|
15
|
-
).refine((password) => !password.includes("123"), "Password cannot contain sequential numbers");
|
|
16
9
|
async function hashPassword(password) {
|
|
17
10
|
const { hash } = await import('bcryptjs');
|
|
18
11
|
const prehashed = await sha256Prehash(password);
|
|
@@ -26,4 +19,4 @@ async function verifyPassword(plainPassword, hashedPassword) {
|
|
|
26
19
|
return compare(plainPassword, hashedPassword);
|
|
27
20
|
}
|
|
28
21
|
|
|
29
|
-
export { hashPassword,
|
|
22
|
+
export { hashPassword, verifyPassword };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// src/auth/password-schema.ts
|
|
4
|
+
var passwordSchema = z.string().min(8, "Password must be at least 8 characters").max(100, "Password must be less than 100 characters").regex(/[A-Z]/, "Password must contain at least one uppercase letter").regex(/[a-z]/, "Password must contain at least one lowercase letter").regex(/[0-9]/, "Password must contain at least one number").regex(/[^A-Za-z0-9]/, "Password must contain at least one special character").refine(
|
|
5
|
+
(password) => !password.toLowerCase().includes("password"),
|
|
6
|
+
"Password cannot contain 'password'"
|
|
7
|
+
).refine((password) => !password.includes("123"), "Password cannot contain sequential numbers");
|
|
8
|
+
|
|
9
|
+
export { passwordSchema };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mars-stack/core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -32,6 +32,14 @@
|
|
|
32
32
|
"types": "./dist/auth/password.d.ts",
|
|
33
33
|
"import": "./dist/auth/password.js"
|
|
34
34
|
},
|
|
35
|
+
"./auth/password-schema": {
|
|
36
|
+
"types": "./dist/auth/password-schema.d.ts",
|
|
37
|
+
"import": "./dist/auth/password-schema.js"
|
|
38
|
+
},
|
|
39
|
+
"./auth/password-hash": {
|
|
40
|
+
"types": "./dist/auth/password-hash.d.ts",
|
|
41
|
+
"import": "./dist/auth/password-hash.js"
|
|
42
|
+
},
|
|
35
43
|
"./auth/verification": {
|
|
36
44
|
"types": "./dist/auth/verification.d.ts",
|
|
37
45
|
"import": "./dist/auth/verification.js"
|