# WorkPulse FE — sinkron dengan BE (auth, timeout, error)

Ringkasan kontrak dan perilaku FE setelah BE menambahkan batas waktu query DB untuk auth.

## `POST …/api/v1/auth/login` (dan register / refresh, bila nanti dipakai di FE)

- BE membatasi waktu kerja DB lewat **`WORKPULSE_AUTH_DB_QUERY_TIMEOUT`** (default **20s**). Jika DB/proksi tidak selesai, BE dapat mengembalikan **HTTP 504** dengan envelope JSON: `ok: false`, `error.code` **`timeout`**, pesan seperti *request timed out*.
- **FE** (`composables/useAuth.ts` → `loginWithPassword`):
  - **`error.code === "timeout"`** → pesan **gagal server / timeout** (bukan “email atau password salah”).
  - **HTTP 504** tanpa kode `timeout` di body → pesan gateway timeout + rujukan env BE.
  - **401** + `invalid_credentials` (atau status **401** tanpa kode khusus) → tetap **kredensial salah** / pesan dari `error.message`.
- **Timeout klien (~22 detik)** tetap dipakai sebagai jaring pengaman (`AbortController`). Pesan abort diselaraskan dengan narasi timeout server. Idealnya BE sempat membalas **504** sebelum klien memutus.

## Alur proxy (tidak berubah)

Same-origin **`/workpulse-api/...`** → Nitro → **`WORKPULSE_INTERNAL_API_ORIGIN`** (default `http://127.0.0.1:3040`). Pastikan **env runtime FE** benar setelah deploy (`ecosystem.config.cjs` / PM2).

## HTTPS / redirect

- Anjurkan **`https://`** untuk `work.rycroftapparel.com`.
- Redirect **HTTP → HTTPS** harus memakai **308** (bukan **301**) untuk **`POST /workpulse-api/...`** agar body JSON tidak hilang — lihat `deploy/apache/work.rycroftapparel.com.conf` dan `plugins/00-enforce-https.client.ts`.

## Kontrak body / sukses (tidak berubah)

- Request: `email`, `password`.
- Sukses: `ok: true`, `data.accessToken`, `data.refreshToken`, `data.user` (termasuk `role`).

---

## Rujukan

- Hang / ops: [`BE_OPS_LOGIN_API_HANG.md`](BE_OPS_LOGIN_API_HANG.md)
- Proxy & checklist login: [`BE_OPS_LOGIN_DAN_PROXY.md`](BE_OPS_LOGIN_DAN_PROXY.md)
