Auth Structure Rules (Prompt-Ready)
Dokumen ini adalah standar struktur folder dan boundary untuk context packages/lib/src/auth.
1. Prinsip Utama
- Context auth fokus pada autentikasi token, bukan otorisasi bisnis.
- Guard hanya menangani transport concern HTTP (
Authorizationheader + injectrequest.user). - Query DB untuk verifikasi fallback token statis berada di service token.
- Error auth harus konsisten (
UnauthorizedException) agar kontrak API stabil.
2. Struktur Folder Standar
packages/lib/src/auth/
├── auth.module.ts
├── datacore-jwt/
│ ├── datacore-jwt.guard.ts
│ └── datacore-jwt.guard.spec.ts
├── datacore-token/
│ ├── datacore-token.service.ts
│ └── datacore-token.service.spec.ts
├── interfaces/
│ └── decoded-token.interface.ts
└── docs/
├── STRUCTURE-RULES.md
└── auth-system-behavior.md
3. Tanggung Jawab Tiap Layer
3.1 auth.module.ts
- Registrasi provider auth.
- Menentukan export service auth untuk module lain.
3.2 datacore-jwt/*.guard.ts
- Validasi format
Authorizationheader. - Panggil token service untuk verifikasi.
- Inject
request.usersaat valid. - Tidak boleh berisi query DB langsung.
3.3 datacore-token/*.service.ts
- Verifikasi JWT.
- Fallback token statis ke tabel user.
- Menormalisasi payload hasil verifikasi ke
DecodedToken.
3.4 interfaces/*.interface.ts
- Menyimpan kontrak data auth (
DecodedToken). - Tidak berisi logic runtime.
4. Aturan Naming
*.guard.tsuntuk auth guard NestJS.*.service.tsuntuk service autentikasi.*.interface.tsuntuk kontrak type.*.spec.tsuntuk unit test colocated.
5. Aturan Boundary (Hitam Putih)
- Guard tidak boleh query DB.
- Service tidak boleh menangani concern
ack/nakatau transport non-HTTP. - Kontrak
DecodedTokenharus jadi single source of truth untukrequest.user. - Semua perubahan behavior auth wajib update
auth-system-behavior.md.
6. Aturan Testing Minimum
- Unit test guard:
packages/lib/src/auth/datacore-jwt/datacore-jwt.guard.spec.ts
- Unit test token service:
packages/lib/src/auth/datacore-token/datacore-token.service.spec.ts
- Typecheck minimum:
pnpm exec tsc -p packages/lib/tsconfig.json --noEmit
7. Prompt Refactor (Siap Pakai)
Refactor `packages/lib/src/auth` dengan aturan:
- pertahankan kontrak autentikasi Bearer token
- guard hanya parsing header + inject user
- query fallback token statis tetap di token service
- jangan ubah error contract Unauthorized tanpa kebutuhan eksplisit
Setelah refactor:
1. jalankan unit test guard + token service
2. jalankan typecheck packages/lib
3. update docs `auth-system-behavior.md` jika behavior berubah