# Project và DSN

> Mỗi ứng dụng là một project có DSN riêng. Cách tạo project, tìm DSN, xoay hoặc thu hồi khoá và đặt giới hạn nhận.

Một **project** là một ứng dụng — một website, một API, một Worker. Mỗi project có DSN, issue, giới hạn và cài đặt riêng. Một **workspace** gom các project, thành viên, cảnh báo và một node mà mọi project cùng gửi về.

## Tạo project

1. Mở **Project → Tạo project**.
2. Nhập tên. Belvador gợi ý địa chỉ (slug) từ tên đó.
3. Chọn nền tảng. Nền tảng quyết định trang project hiện hướng dẫn cài nào:

| Nền tảng trong Belvador | Dùng cho | Hướng dẫn |
|---|---|---|
| JavaScript (trình duyệt) | JavaScript trên trình duyệt, không dùng React | [JavaScript trên trình duyệt](https://belvador.dev/vi/docs/sdk/browser) |
| React (Vite / SPA) | Ứng dụng React chạy trên trình duyệt | [React](https://belvador.dev/vi/docs/sdk/react) |
| TanStack Start / Lovable | Ứng dụng TanStack Start trên Cloudflare Workers, kể cả ứng dụng Lovable | [TanStack Start](https://belvador.dev/vi/docs/sdk/tanstack-start) |
| Node.js | Máy chủ Node.js | [Node.js](https://belvador.dev/vi/docs/sdk/node) |
| Python | Ứng dụng Python | [Python](https://belvador.dev/vi/docs/sdk/python) |
| Khác | Cloudflare Workers, và mọi SDK tương thích Sentry khác | [Cloudflare Workers](https://belvador.dev/vi/docs/sdk/cloudflare) |

Member, admin và owner đều tạo được project.

> [!TIP]
> Mỗi ứng dụng triển khai riêng là một project. Nếu web và API dùng chung project, issue sẽ lẫn vào nhau và dùng chung một giới hạn tốc độ. Một ứng dụng TanStack Start là một project: phần trình duyệt và phần máy chủ dùng cùng một DSN.

## DSN

DSN cho SDK biết gửi lỗi về đâu:

```text
https://<public-key>@ingest.belvador.dev/<project-id>
```

DSN chứa một khoá công khai 32 ký tự và số của project. Bạn thấy DSN trên trang project cạnh hướng dẫn cài, và code cài đặt đã điền sẵn DSN.

DSN **công khai theo thiết kế**: ai thấy cũng gửi lỗi vào project được, nên DSN được bảo vệ bằng giới hạn tốc độ và tên miền cho phép, không phải bằng việc giữ bí mật. Đặt DSN trong code trình duyệt là bình thường. DSN không bao giờ chứa mật khẩu hay bí mật — đừng thêm vào.

## Khoá DSN: tạo mới, xoay, thu hồi

**Cài đặt project → Khoá DSN** liệt kê từng khoá với nhãn, trạng thái (**Đang dùng**, **Ngừng …**, **Đã thu hồi**, **Hết hạn**), lúc tạo và lần dùng cuối.

| Thao tác | Điều gì xảy ra |
|---|---|
| **Khoá mới** | Thêm một khoá đang dùng, ví dụ mỗi môi trường một khoá. Cập nhật DSN trong ứng dụng sẽ dùng khoá này. |
| **Xoay** | Tạo khoá mới; khoá cũ còn nhận thêm **24 giờ**, để bạn kịp triển khai DSN mới mà không mất lỗi. |
| **Thu hồi** | Edge ngừng nhận khoá này **trong vòng 1 phút**. Ứng dụng còn dùng khoá sẽ ngừng gửi lỗi. Không hoàn tác được. |

Tạo và thu hồi khoá sẽ hỏi mã xác thực của bạn ([xác nhận lại](https://belvador.dev/vi/docs/account-security#xac-nhan-lai-cho-thao-tac-nhay-cam)).

## Tên miền cho phép

**Cài đặt project → Tên miền cho phép** giới hạn website nào được gửi lỗi bằng khoá của project. Mỗi dòng một địa chỉ, ví dụ `https://app.example.com`. Để trống = mọi trang.

Mục này chỉ áp dụng cho trình duyệt, vì trình duyệt gửi header `Origin`. Không ảnh hưởng SDK phía máy chủ. Chỉ owner và admin đổi được mục này.

## Giới hạn nhận

**Cài đặt project → Giới hạn nhận** giới hạn tốc độ project được gửi:

- **Event mỗi giây** và **Cụm tối đa** áp dụng cho cả project, gộp mọi khoá. Để trống để dùng mặc định của gói; được hạ xuống, không vượt quá gói.
- Workspace còn có **hạn mức tháng** tính bằng envelope (thường một envelope mang một event lỗi).

**Lượng lỗi nhận 24 giờ qua** cho biết edge đã đếm được gì, cập nhật mỗi phút: **Đã nhận**, **Bị giới hạn tốc độ**, **Vượt hạn mức tháng**, **Chưa hỗ trợ** (ví dụ dữ liệu tracing), **Quá cỡ**, **Bị chặn theo tên miền**, **Mất do hết hạn đệm** và **Bị từ chối vì không hợp lệ**. Dùng mục này để biết lỗi có đang được gửi hay không — xem [Khắc phục sự cố](https://belvador.dev/vi/docs/troubleshooting).

## Các cài đặt khác của project

- **Chung** — tên project, và **Ghim lên Fleet** để giữ project ở đầu trang [Fleet](https://belvador.dev/vi/docs/fleet).
- **Token upload** — token để tải [source map](https://belvador.dev/vi/docs/source-maps) lên từ CI.
- **Bảo vệ dữ liệu** — nhóm dữ liệu nhạy cảm nào được node che trước khi lưu. Xem [Bảo vệ dữ liệu](https://belvador.dev/vi/docs/privacy).
- **Môi trường** — mọi môi trường node đã thấy (từ tuỳ chọn `environment` của SDK). Ẩn một môi trường để bỏ nó khỏi bộ lọc mặc định.

## Xoá project

**Cài đặt project → Xoá project** yêu cầu gõ địa chỉ project và xác nhận bằng mã xác thực. Sau đó:

1. Sau 24 giờ, mọi khoá DSN và token upload của project ngừng hoạt động.
2. Node xoá toàn bộ lỗi, issue và source map của project.
3. Trước lúc đó, owner hoặc admin có thể chọn **Huỷ xoá**.

Chỉ owner và admin xoá được project.
