61 lines
2.5 KiB
Markdown
61 lines
2.5 KiB
Markdown
# `GET /events`
|
|
|
|
Protected. Requires a valid session cookie (`credentials: 'include'`).
|
|
|
|
Subscribe to update signals (SSE)
|
|
|
|
Opens a Server-Sent Events stream for the authenticated user's
|
|
**selected company**. Clients receive named signals when another
|
|
request successfully mutates shared data for that company
|
|
(including the same browser's other tabs).
|
|
|
|
Use `EventSource` with credentials so the session cookie is sent:
|
|
|
|
```js
|
|
const es = new EventSource('https://…/api/events', { withCredentials: true });
|
|
es.addEventListener('category', () => { refetchCategoryTree(); });
|
|
es.addEventListener('articles', () => { refetchArticleIndex(); });
|
|
es.addEventListener('article-42000045', () => { refetchArticle('42000045'); });
|
|
```
|
|
|
|
Keep-alive comments (`: heartbeat`) are sent roughly every 20s.
|
|
Reconnect after changing the selected company (the stream is bound
|
|
to the company at connect time).
|
|
|
|
## Signals
|
|
|
|
| Signal | Emitted after successful |
|
|
|--------|--------------------------|
|
|
| `category` | `POST /category`, `PATCH /category/{id}`, `PUT /category/order`, `DELETE /category/{id}`, `POST /category/{id}/image`, `DELETE /category/{id}/image` |
|
|
| `articles` | `POST /article`, `PATCH /article/{sku}`, `DELETE /article/{sku}` |
|
|
| `article-<sku>` | `PUT /article/{sku}/weight`, `PUT /article/{sku}/prices`, `PUT /article/{sku}/eans`, `PUT /article/{sku}/categories`, `PUT /article/{sku}/brand`, `PUT /article/{sku}/images/order`, `POST /article/{sku}/image`, `DELETE /article/{sku}/image/{fullHash}` |
|
|
| `brand` | `POST /brand`, `PATCH /brand/{id}`, `DELETE /brand/{id}`, `POST /brand/{id}/image`, `DELETE /brand/{id}/image` |
|
|
|
|
The `brand` signal carries a JSON payload `{ sender, brandId }`:
|
|
`sender` echoes the caller's `x-client-id` header (empty string if
|
|
absent) so the sender can ignore its own event; `brandId` is the
|
|
affected brand id (`null` only if unknown). Other signals send `{}`.
|
|
|
|
Signals are only sent when the mutation actually succeeds (2xx).
|
|
Failed or no-op validation errors do not emit. The `article-<sku>`
|
|
event name uses the concrete SKU (e.g. `article-42000045`).
|
|
|
|
|
|
## Response `200`
|
|
|
|
SSE stream (`text/event-stream`). Each signal is an SSE event
|
|
whose name is the signal id. Most signals send `{}` as data;
|
|
`brand` sends `{ "sender": "<x-client-id>", "brandId": 12 }`.
|
|
|
|
|
|
## Errors
|
|
|
|
| Status | Description |
|
|
|--------|-------------|
|
|
| 400 | No company selected — `{"error":"…"}` |
|
|
| 401 | Unauthorized — `{"error":"…"}` |
|
|
|
|
---
|
|
|
|
_Generated from `@openapi` JSDoc. Do not edit by hand — run `npm run docs:api`._
|