redis-smq-web-ui 9.0.0-next.4 → 9.0.0-next.5
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.
- package/CHANGELOG.md +29 -0
- package/README.md +74 -72
- package/dist/browser/assets/QueuesView-gKXkgwTk.js +1 -0
- package/dist/browser/assets/index-BooLzpct.css +9 -0
- package/dist/browser/assets/index-C2KJn_-I.js +43 -0
- package/dist/browser/index.html +2 -2
- package/package.json +24 -25
- package/dist/browser/assets/QueuesView-BoC_jjup.js +0 -1
- package/dist/browser/assets/index-Bt_mTIwJ.css +0 -9
- package/dist/browser/assets/index-CRTYBxrI.js +0 -43
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,35 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [9.0.0-next.5](https://github.com/weyoss/redis-smq/compare/v9.0.0-next.4...v9.0.0-next.5) (2025-10-12)
|
|
7
|
+
|
|
8
|
+
### ✨ Features
|
|
9
|
+
|
|
10
|
+
- **redis-smq-web-ui:** improve mobile experience ([1230bfe](https://github.com/weyoss/redis-smq/commit/1230bfee88f2d6ed2dea4c56bd4b7e4c7dd216df))
|
|
11
|
+
- **redis-smq-web-ui:** notify about disabled message storage for ack/dl messages ([b3ecc52](https://github.com/weyoss/redis-smq/commit/b3ecc527548c770c37829cc69f716c27b8df5f14))
|
|
12
|
+
|
|
13
|
+
### 🐛 Bug Fixes
|
|
14
|
+
|
|
15
|
+
- **redis-smq-web-ui:** fix sudden CreateExchangeModal closure ([b6b2b0e](https://github.com/weyoss/redis-smq/commit/b6b2b0edb6d4d1c4fc022d2cbaf2f21101a61c4a))
|
|
16
|
+
|
|
17
|
+
### 🚀 Chore
|
|
18
|
+
|
|
19
|
+
- **redis-smq-web-ui:** update dependencies to latest versions ([f48c578](https://github.com/weyoss/redis-smq/commit/f48c578eaf84b04bdb700d808b5acc60396fc9e5))
|
|
20
|
+
|
|
21
|
+
### 📝 Documentation
|
|
22
|
+
|
|
23
|
+
- add GitHub note callouts in README files ([86e855a](https://github.com/weyoss/redis-smq/commit/86e855ae7aea91e3295301671b8da3249164ea40))
|
|
24
|
+
- **redis-smq-web-ui:** fix license statement ([0e37a16](https://github.com/weyoss/redis-smq/commit/0e37a16143bc458de9b33e78e2be9f1757897f33))
|
|
25
|
+
- **redis-smq-web-ui:** improve README clarity and structure ([d85bffe](https://github.com/weyoss/redis-smq/commit/d85bffede56fcc17651af1ac7d0fb0a03cb331ce))
|
|
26
|
+
- standardize "next" branch reference ([15f3e4f](https://github.com/weyoss/redis-smq/commit/15f3e4f4347fd4f76f9dc167dd72f174f178ab8e))
|
|
27
|
+
- update README files for next branch with pre-release badges and doc links ([463250b](https://github.com/weyoss/redis-smq/commit/463250bbd754d44ae6741abcf4e2d62995aef620))
|
|
28
|
+
|
|
29
|
+
### ♻️ Code Refactoring
|
|
30
|
+
|
|
31
|
+
- **redis-smq-web-ui:** migrate scripts utils to use RedisSMQ class ([30797f8](https://github.com/weyoss/redis-smq/commit/30797f855272f5c2f3456224c0a91a2301d2eb39))
|
|
32
|
+
- **redis-smq-web-ui:** remove unused CreateFanoutExchangeModal ([79f3fda](https://github.com/weyoss/redis-smq/commit/79f3fdae50c2f1cc21592e7a8759daf98be09fe8))
|
|
33
|
+
- **redis-smq-web-ui:** reorder navigation menu items ([235e81c](https://github.com/weyoss/redis-smq/commit/235e81c98a4df75b229b89227e06c2d7aaded068))
|
|
34
|
+
|
|
6
35
|
## [9.0.0-next.4](https://github.com/weyoss/redis-smq/compare/v9.0.0-next.3...v9.0.0-next.4) (2025-10-09)
|
|
7
36
|
|
|
8
37
|
### ✨ Features
|
package/README.md
CHANGED
|
@@ -1,120 +1,122 @@
|
|
|
1
1
|
# RedisSMQ Web UI
|
|
2
2
|
|
|
3
|
+
> [!NOTE]
|
|
4
|
+
> You are viewing the documentation for the "next" branch. These docs describe unreleased changes published under the npm "next" dist-tag.
|
|
5
|
+
> For the latest stable documentation, see:
|
|
6
|
+
>
|
|
7
|
+
> - Master (stable) README: https://github.com/weyoss/redis-smq/tree/master/packages/redis-smq-web-ui
|
|
8
|
+
> - Latest release notes/tags: https://github.com/weyoss/redis-smq/releases/latest
|
|
9
|
+
> - Install stable packages with @latest; pre-release with @next.
|
|
10
|
+
|
|
3
11
|

|
|
4
12
|
|
|
5
|
-
A Single Page Application for monitoring and managing RedisSMQ
|
|
13
|
+
A Single Page Application for monitoring and managing RedisSMQ. Inspect queues and messages, review consumers, and perform common actions — with an integrated, type-safe OpenAPI client.
|
|
6
14
|
|
|
7
15
|
- Works seamlessly with the RedisSMQ REST API
|
|
8
|
-
- Best served via the RedisSMQ Web Server (serves static UI and hosts or proxies the API)
|
|
9
|
-
- Ships with developer-friendly
|
|
16
|
+
- Best served via the RedisSMQ Web Server (serves the static UI and hosts or proxies the API)
|
|
17
|
+
- Ships with developer-friendly types and OpenAPI client generation
|
|
10
18
|
|
|
11
19
|
## Features
|
|
12
20
|
|
|
13
|
-
- Dashboard
|
|
21
|
+
- Dashboard for queues, consumers, and message stats
|
|
14
22
|
- Queue/message browsers with filters and actions (ack, retry, delete, etc.)
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
- Type-safe OpenAPI client (generated)
|
|
23
|
+
- Supports multiple queue and delivery models
|
|
24
|
+
- Exchange types: Direct, Topic, Fanout
|
|
25
|
+
- Type-safe OpenAPI client (generated from the REST API schema)
|
|
26
|
+
- History-fallback friendly routing (works correctly under a sub-path when configured)
|
|
18
27
|
|
|
19
28
|
## Version compatibility
|
|
20
29
|
|
|
21
|
-
Always install matching versions of RedisSMQ packages
|
|
22
|
-
|
|
23
|
-
- redis-smq
|
|
24
|
-
- redis-smq-common
|
|
25
|
-
- redis-smq-rest-api
|
|
26
|
-
- redis-smq-web-server
|
|
27
|
-
- redis-smq-web-ui
|
|
28
|
-
|
|
29
|
-
## Getting started
|
|
30
|
-
|
|
31
|
-
### Recommended: run via the Web Server
|
|
32
|
-
|
|
33
|
-
Use redis-smq-web-server to host the UI and API in one place, or proxy the API to an external service.
|
|
34
|
-
|
|
35
|
-
- In-process API:
|
|
36
|
-
- UI at http://localhost:8080/
|
|
37
|
-
- API at http://localhost:8080/api
|
|
38
|
-
- Proxy to an external REST API:
|
|
39
|
-
- UI is still served locally
|
|
40
|
-
- API/docs/assets are forwarded to the upstream API
|
|
41
|
-
|
|
42
|
-
See [RedisSMQ Web Server](../redis-smq-web-server/README.md) for CLI options such as:
|
|
30
|
+
Always install matching versions of RedisSMQ packages (same major/minor) to avoid runtime/API mismatches. See
|
|
31
|
+
[version-compatibility.md](/packages/redis-smq/docs/version-compatibility.md).
|
|
43
32
|
|
|
44
|
-
|
|
45
|
-
- --base-path
|
|
46
|
-
- --api-proxy-target
|
|
33
|
+
## Requirements
|
|
47
34
|
|
|
48
|
-
|
|
35
|
+
See [requirements of RedisSMQ](/README.md).
|
|
49
36
|
|
|
50
|
-
|
|
37
|
+
## Installation
|
|
51
38
|
|
|
52
|
-
-
|
|
53
|
-
- PNPM (recommended)
|
|
54
|
-
|
|
55
|
-
From the monorepo root:
|
|
39
|
+
Typically consumed via the [RedisSMQ Web Server](/packages/redis-smq-web-server/README.md). To set up everything with pre-release builds:
|
|
56
40
|
|
|
57
41
|
```bash
|
|
58
|
-
|
|
59
|
-
|
|
42
|
+
npm install redis-smq@next redis-smq-common@next redis-smq-rest-api@next redis-smq-web-ui@next redis-smq-web-server@next
|
|
43
|
+
# Choose a Redis client:
|
|
44
|
+
npm install ioredis
|
|
45
|
+
# or
|
|
46
|
+
npm install @redis/client
|
|
60
47
|
```
|
|
61
48
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
The UI uses a generated OpenAPI client. To regenerate:
|
|
49
|
+
## Quick start
|
|
65
50
|
|
|
66
|
-
|
|
67
|
-
pnpm -F redis-smq-web-ui generate-openapi-client
|
|
68
|
-
```
|
|
51
|
+
Use the [RedisSMQ Web Server](/packages/redis-smq-web-server/README.md) to serve the UI and either mount the REST API in-process or proxy to an external instance.
|
|
69
52
|
|
|
70
|
-
|
|
53
|
+
- In-process API (default):
|
|
54
|
+
- UI at http://localhost:8080/
|
|
55
|
+
- API at http://localhost:8080/api
|
|
56
|
+
- Proxy to an external REST API:
|
|
57
|
+
- UI is served locally
|
|
58
|
+
- API/docs/assets are forwarded to the upstream API
|
|
71
59
|
|
|
72
|
-
|
|
60
|
+
Examples:
|
|
73
61
|
|
|
74
62
|
```bash
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
The dev script typically runs:
|
|
63
|
+
# Default (UI at /, API at /api)
|
|
64
|
+
npx redis-smq-web-server
|
|
79
65
|
|
|
80
|
-
-
|
|
81
|
-
-
|
|
66
|
+
# Serve under a sub-path (e.g., behind a reverse proxy)
|
|
67
|
+
npx redis-smq-web-server --base-path /redis-smq
|
|
82
68
|
|
|
83
|
-
|
|
69
|
+
# Proxy API/docs/assets to an external REST API
|
|
70
|
+
npx redis-smq-web-server --api-proxy-target http://127.0.0.1:7210
|
|
71
|
+
```
|
|
84
72
|
|
|
85
|
-
|
|
73
|
+
See [RedisSMQ Web Server](/packages/redis-smq-web-server/README.md) for CLI options such as:
|
|
86
74
|
|
|
87
|
-
|
|
75
|
+
- `--port`
|
|
76
|
+
- `--base-path`
|
|
77
|
+
- `--api-proxy-target`
|
|
78
|
+
- Redis connection and logging options (used only when hosting the API in-process)
|
|
88
79
|
|
|
89
|
-
|
|
90
|
-
pnpm -F redis-smq-web-ui build
|
|
91
|
-
```
|
|
80
|
+
## Configuration and routing
|
|
92
81
|
|
|
93
|
-
|
|
94
|
-
|
|
82
|
+
- Base path
|
|
83
|
+
- When served by [RedisSMQ Web Server](/packages/redis-smq-web-server/README.md), basePath controls where the UI and local API/docs are mounted.
|
|
84
|
+
- Examples:
|
|
85
|
+
- basePath = / → UI at /, API at /api, Swagger UI at /docs
|
|
86
|
+
- basePath = /redis-smq → UI at /redis-smq, API at /redis-smq/api, Swagger UI at /redis-smq/docs
|
|
95
87
|
|
|
96
|
-
|
|
88
|
+
- API endpoint
|
|
89
|
+
- With an embedded API (no proxy): the server mounts the REST API alongside the UI under <basePath>/api.
|
|
90
|
+
- With a proxy target: the server forwards <basePath>/api, <basePath>/docs, and <basePath>/assets to the configured upstream URL.
|
|
97
91
|
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
92
|
+
- Standalone/static hosting (advanced)
|
|
93
|
+
- If hosting the UI assets yourself:
|
|
94
|
+
- Serve the SPA with history fallback (so client-side routes work on refresh).
|
|
95
|
+
- Ensure the public base path matches where you host the app.
|
|
96
|
+
- Proxy API requests to the REST API under the same public base path (e.g., <basePath>/api).
|
|
97
|
+
- Expose <basePath>/docs and <basePath>/assets if you want Swagger UI and API schema accessible.
|
|
98
|
+
- Note: [RedisSMQ Web Server](/packages/redis-smq-web-server/README.md) already handles these concerns and is the simplest path.
|
|
101
99
|
|
|
102
|
-
|
|
100
|
+
## Deploying behind a reverse proxy
|
|
103
101
|
|
|
104
|
-
-
|
|
105
|
-
-
|
|
102
|
+
- Set a public sub-path using the web server’s --base-path (e.g., /redis-smq).
|
|
103
|
+
- Forward both the UI and API prefixes through your proxy:
|
|
104
|
+
- /redis-smq → web server
|
|
105
|
+
- If proxying the API to an external service, combine with --api-proxy-target:
|
|
106
|
+
- Client → reverse proxy → web server (/redis-smq)
|
|
107
|
+
- Web server proxies /redis-smq/api, /redis-smq/docs, /redis-smq/assets → external API
|
|
106
108
|
|
|
107
109
|
## Related packages
|
|
108
110
|
|
|
109
111
|
- [redis-smq](../redis-smq/README.md): Core message queue
|
|
110
112
|
- [redis-smq-common](../redis-smq-common/README.md): Shared components/utilities
|
|
111
|
-
- [redis-smq-rest-api](../redis-smq-rest-api/README.md): REST API with OpenAPI
|
|
113
|
+
- [redis-smq-rest-api](../redis-smq-rest-api/README.md): REST API with OpenAPI v3 and Swagger UI
|
|
112
114
|
- [redis-smq-web-server](../redis-smq-web-server/README.md): Static hosting + in-process or proxied API
|
|
113
115
|
|
|
114
116
|
## Contributing
|
|
115
117
|
|
|
116
|
-
Contributions are welcome. Please see the repository’s CONTRIBUTING.md in the project root.
|
|
118
|
+
Contributions are welcome. Please see the repository’s [CONTRIBUTING.md](/CONTRIBUTING.md) in the project root.
|
|
117
119
|
|
|
118
120
|
## License
|
|
119
121
|
|
|
120
|
-
RedisSMQ Web UI is
|
|
122
|
+
RedisSMQ Web UI is released under the [MIT License](/LICENSE).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as H,u as I,a as R,b as j,c as G,e as K,f as h,r as p,w,o as Y,g as z,h as f,i as S,j as E,k as y,l as J,P as O,m as t,n as g,C as U,D as W,p as i,q as n,s as _,t as m,F as X,v as Z,Q as ee,x as te,_ as ae}from"./index-C2KJn_-I.js";const se={key:0,class:"alert alert-warning alert-dismissible fade show mb-4",role:"alert"},ue={key:1,class:"alert alert-warning alert-dismissible fade show mb-4",role:"alert"},le={class:"queues-list-container"},ne={class:"queues-list-header"},re={class:"queues-count"},ie={class:"queues-list"},oe="Queues",ce="Manage all available message queues",de=H({__name:"QueuesView",setup(ve){const D=te(),s=I(),k=R(),{sortedQueues:c,isLoadingQueues:d,queuesError:C,refetchQueues:v}=j(),{createQueue:M,isCreatingQueue:Q,createQueueError:b,createQueueMutation:x}=G(async()=>{await v()}),{deleteQueue:$,isDeletingQueue:F,deleteQueueError:q,deleteQueueMutation:L}=K(async()=>{await v()}),N=h(()=>c.value.length>0),u=p(!1),l=p(!1),o=p(null),P=h(()=>[{id:"refresh-queues",label:"Refresh",icon:"bi bi-arrow-clockwise",variant:"secondary",disabled:d.value,loading:d.value,handler:()=>v()},{id:"create-queue",label:"Create Queue",icon:"bi bi-plus-circle",variant:"primary",disabled:Q.value,loading:Q.value,handler:()=>u.value=!0}]);function T(a,e){D.push({name:"Queue",params:{ns:a,queue:e}})}async function V(a){try{const e={queue:{ns:a.ns,name:a.name},queueType:a.type,queueDeliveryModel:a.deliveryModel};await M({data:e}),u.value=!1}catch(e){console.error("Failed to create queue:",e)}}function B(a,e){o.value={ns:a,name:e},l.value=!0}async function A(){if(o.value)try{await $(o.value),l.value=!1}catch(a){console.error("Failed to delete queue:",a)}}return w(()=>{s.setPageHeader({title:oe,subtitle:ce,icon:"bi bi-card-list"}),s.setPageActions(P.value),s.setLoadingState(d.value),C.value?(s.setErrorState(g(C.value)),s.setEmptyState(!1)):!d.value&&!N.value?(s.setErrorState(null),s.setEmptyState(!0,{icon:"bi bi-plus-square-dotted",title:"No Queues Found",message:"Get started by creating your first message queue.",actionLabel:"Create Your First Queue",actionHandler:()=>u.value=!0})):(s.setErrorState(null),s.setEmptyState(!1))}),w(()=>{k.clearSelectedQueue()}),Y(()=>{v()}),z([{isVisible:u,onEscape:()=>u.value=!1},{isVisible:l,onEscape:()=>l.value=!1}]),(a,e)=>(i(),f("div",null,[S(O,null,{default:J(()=>[t(b)&&!u.value?(i(),f("div",se,[e[4]||(e[4]=n("i",{class:"bi bi-exclamation-triangle-fill me-2"},null,-1)),_(" "+m(t(g)(t(b)))+" ",1),n("button",{type:"button",class:"btn-close","aria-label":"Close",onClick:e[0]||(e[0]=r=>t(x).reset())})])):y("",!0),t(q)&&!l.value?(i(),f("div",ue,[e[5]||(e[5]=n("i",{class:"bi bi-exclamation-triangle-fill me-2"},null,-1)),_(" "+m(t(g)(t(q)))+" ",1),n("button",{type:"button",class:"btn-close","aria-label":"Close",onClick:e[1]||(e[1]=r=>t(L).reset())})])):y("",!0),n("div",le,[n("div",ne,[n("h5",re,m(t(c).length)+" Queue"+m(t(c).length!==1?"s":""),1)]),n("div",ie,[(i(!0),f(X,null,Z(t(c),r=>(i(),E(ee,{key:`${r.ns}-${r.name}`,queue:r,onSelect:T,onDelete:B},null,8,["queue"]))),128))])])]),_:1}),S(U,{"is-visible":u.value,"is-creating":t(Q),"create-error":t(b)?`${t(g)(t(b))?.message}`:"",onClose:e[2]||(e[2]=r=>u.value=!1),onCreate:V},null,8,["is-visible","is-creating","create-error"]),l.value&&o.value?(i(),E(W,{key:0,"is-visible":l.value,"is-deleting":t(F),queue:o.value,onCancel:e[3]||(e[3]=r=>l.value=!1),onConfirm:A},null,8,["is-visible","is-deleting","queue"])):y("",!0)]))}}),fe=ae(de,[["__scopeId","data-v-f3ec936e"]]);export{fe as default};
|