@mikulogin/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Meng-hash password teks polos menggunakan algoritma bcrypt.
3
+ * @param password Password teks polos yang akan di-hash.
4
+ * @returns Promise yang menghasilkan string hash bcrypt.
5
+ * @throws Error jika password kosong atau bukan string valid.
6
+ */
7
+ export declare function hashPassword(password: string): Promise<string>;
8
+ /**
9
+ * Memverifikasi apakah password teks polos sesuai dengan hash bcrypt yang tersimpan.
10
+ * Memiliki penanganan kegagalan eksplisit (Anti Happy-Path) untuk input invalid.
11
+ * @param password Password teks polos dari input pengguna.
12
+ * @param hash Hash bcrypt tersimpan yang akan dibandingkan.
13
+ * @returns Promise<boolean> true jika cocok, false jika tidak cocok atau format hash invalid.
14
+ */
15
+ export declare function verifyPassword(password: string, hash: string): Promise<boolean>;
16
+ /**
17
+ * Menghasilkan token sesi acak yang aman secara kriptografis (32 byte hex = 64 karakter).
18
+ * @returns String token sesi acak.
19
+ */
20
+ export declare function generateSessionToken(): string;
21
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOpE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAerF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
package/dist/crypto.js ADDED
@@ -0,0 +1,45 @@
1
+ import bcrypt from "bcryptjs";
2
+ import crypto from "node:crypto";
3
+ /**
4
+ * Meng-hash password teks polos menggunakan algoritma bcrypt.
5
+ * @param password Password teks polos yang akan di-hash.
6
+ * @returns Promise yang menghasilkan string hash bcrypt.
7
+ * @throws Error jika password kosong atau bukan string valid.
8
+ */
9
+ export async function hashPassword(password) {
10
+ if (!password || typeof password !== "string" || password.trim().length === 0) {
11
+ throw new Error("Password tidak boleh kosong");
12
+ }
13
+ const saltRounds = 10;
14
+ return await bcrypt.hash(password, saltRounds);
15
+ }
16
+ /**
17
+ * Memverifikasi apakah password teks polos sesuai dengan hash bcrypt yang tersimpan.
18
+ * Memiliki penanganan kegagalan eksplisit (Anti Happy-Path) untuk input invalid.
19
+ * @param password Password teks polos dari input pengguna.
20
+ * @param hash Hash bcrypt tersimpan yang akan dibandingkan.
21
+ * @returns Promise<boolean> true jika cocok, false jika tidak cocok atau format hash invalid.
22
+ */
23
+ export async function verifyPassword(password, hash) {
24
+ if (!password || typeof password !== "string" || password.trim().length === 0) {
25
+ return false;
26
+ }
27
+ if (!hash || typeof hash !== "string" || hash.trim().length === 0) {
28
+ return false;
29
+ }
30
+ try {
31
+ return await bcrypt.compare(password, hash);
32
+ }
33
+ catch (_error) {
34
+ // Menangani kasus jika format hash tidak valid (misal bukan format bcrypt)
35
+ return false;
36
+ }
37
+ }
38
+ /**
39
+ * Menghasilkan token sesi acak yang aman secara kriptografis (32 byte hex = 64 karakter).
40
+ * @returns String token sesi acak.
41
+ */
42
+ export function generateSessionToken() {
43
+ return crypto.randomBytes(32).toString("hex");
44
+ }
45
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAY;IACjE,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,2EAA2E;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./crypto.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./crypto.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Interface User merepresentasikan entitas pengguna dalam sistem mikulogin.
3
+ * Menyimpan data dasar pengguna termasuk identitas, email, hash kata sandi, dan timestamp.
4
+ */
5
+ export interface User {
6
+ id: string;
7
+ email: string;
8
+ passwordHash: string;
9
+ name: string | null;
10
+ createdAt: Date;
11
+ }
12
+ /**
13
+ * Interface Session merepresentasikan sesi aktif yang dimiliki pengguna.
14
+ * Menghubungkan token sesi dengan userId dan waktu kadaluarsa (expiresAt).
15
+ */
16
+ export interface Session {
17
+ id: string;
18
+ userId: string;
19
+ expiresAt: Date;
20
+ token: string;
21
+ }
22
+ /**
23
+ * Interface DatabaseAdapter didefinisikan sebagai kontrak abstraksi
24
+ * Bring Your Own Database (BYOD) yang harus diimplementasikan oleh adapter database.
25
+ */
26
+ export interface DatabaseAdapter {
27
+ /**
28
+ * Mengambil data pengguna berdasarkan alamat email.
29
+ * @param email Alamat email pengguna.
30
+ * @returns Pengguna jika ditemukan, atau null jika tidak ada.
31
+ */
32
+ getUserByEmail(email: string): Promise<User | null>;
33
+ /**
34
+ * Membuat pengguna baru dalam database.
35
+ * @param data Data pengguna tanpa id dan createdAt (dihasilkan otomatis oleh adapter/DB).
36
+ * @returns Pengguna yang berhasil dibuat.
37
+ */
38
+ createUser(data: Omit<User, "id" | "createdAt">): Promise<User>;
39
+ /**
40
+ * Membuat sesi pengguna baru dalam database.
41
+ * @param userId ID pengguna pemilik sesi.
42
+ * @param token Token acak unik untuk identifikasi sesi.
43
+ * @param expiresAt Waktu sesi akan kadaluarsa.
44
+ * @returns Sesi yang berhasil dibuat.
45
+ */
46
+ createSession(userId: string, token: string, expiresAt: Date): Promise<Session>;
47
+ /**
48
+ * Validasi token sesi dan ambil data sesi beserta penggunanya sekaligus.
49
+ * @param token Token sesi yang dikirim oleh klien.
50
+ * @returns Objek berisi session dan user jika token valid, atau null jika tidak ditemukan/kadaluarsa.
51
+ */
52
+ getSessionAndUser(token: string): Promise<{
53
+ session: Session;
54
+ user: User;
55
+ } | null>;
56
+ }
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEpD;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhF;;;;OAIG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACpF"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@mikulogin/core",
3
+ "version": "1.0.0",
4
+ "description": "Komponen inti autentikasi Mikulogin yang menyediakan tipe antarmuka (interface) dan fungsi kriptografi dasar.",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "type": "module",
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "publishConfig": {
13
+ "access": "public"
14
+ },
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./types": {
22
+ "types": "./dist/types.d.ts",
23
+ "import": "./dist/types.js",
24
+ "default": "./dist/types.js"
25
+ },
26
+ "./crypto": {
27
+ "types": "./dist/crypto.d.ts",
28
+ "import": "./dist/crypto.js",
29
+ "default": "./dist/crypto.js"
30
+ }
31
+ },
32
+ "scripts": {
33
+ "build": "tsc"
34
+ },
35
+ "keywords": [
36
+ "mikulogin",
37
+ "core",
38
+ "auth",
39
+ "types",
40
+ "crypto"
41
+ ],
42
+ "license": "ISC"
43
+ }