redis-smq-web-ui 9.0.0-next.3 → 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 +49 -0
- package/README.md +75 -70
- 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 +6 -6
- package/package.json +24 -25
- package/dist/browser/assets/QueuesView-CaPQRTLA.js +0 -1
- package/dist/browser/assets/index-D9klXO36.js +0 -43
- package/dist/browser/assets/index-DZKBl9eI.css +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,55 @@
|
|
|
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
|
+
|
|
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)
|
|
36
|
+
|
|
37
|
+
### ✨ Features
|
|
38
|
+
|
|
39
|
+
- **redis-smq-web-ui:** add exchange management system ([c33650c](https://github.com/weyoss/redis-smq/commit/c33650c01a3c4fcd4663b08668642f7aea394fce))
|
|
40
|
+
|
|
41
|
+
### 🐛 Bug Fixes
|
|
42
|
+
|
|
43
|
+
- **redis-smq-web-ui:** fix error message reference ([8e6fb43](https://github.com/weyoss/redis-smq/commit/8e6fb4379976a7a3d26036f22f235f0271da79a0))
|
|
44
|
+
- **redis-smq-web-ui:** initialize RedisSMQ before starting API server ([22887fa](https://github.com/weyoss/redis-smq/commit/22887faf0abc8939de9f90e8abfb18d7c8e93d02))
|
|
45
|
+
- **redis-smq-web-ui:** update branding ([2bd50ce](https://github.com/weyoss/redis-smq/commit/2bd50ce8ef75bdca9c5602ddc8bc6d36cdb8342f))
|
|
46
|
+
|
|
47
|
+
### 📝 Documentation
|
|
48
|
+
|
|
49
|
+
- **redis-smq-web-ui:** improve README formatting ([e0d3399](https://github.com/weyoss/redis-smq/commit/e0d33990886f934df31e65fa831b87f7a761e3b0))
|
|
50
|
+
|
|
51
|
+
### ♻️ Code Refactoring
|
|
52
|
+
|
|
53
|
+
- **redis-smq-web-ui:** standardize HTML formatting ([b290044](https://github.com/weyoss/redis-smq/commit/b290044c861014cda393467dd3b7af52f5507679))
|
|
54
|
+
|
|
6
55
|
## [9.0.0-next.3](https://github.com/weyoss/redis-smq/compare/v9.0.0-next.2...v9.0.0-next.3) (2025-09-09)
|
|
7
56
|
|
|
8
57
|
### 🐛 Bug Fixes
|
package/README.md
CHANGED
|
@@ -1,117 +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-common
|
|
24
|
-
- redis-smq-rest-api
|
|
25
|
-
- redis-smq-web-server
|
|
26
|
-
- redis-smq-web-ui
|
|
27
|
-
|
|
28
|
-
## Getting started
|
|
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).
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
## Requirements
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- In-process API:
|
|
35
|
-
- UI at http://localhost:8080/
|
|
36
|
-
- API at http://localhost:8080/api
|
|
37
|
-
- Proxy to an external REST API:
|
|
38
|
-
- UI is still served locally
|
|
39
|
-
- API/docs/assets are forwarded to the upstream API
|
|
35
|
+
See [requirements of RedisSMQ](/README.md).
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
- --port
|
|
43
|
-
- --base-path
|
|
44
|
-
- --api-proxy-target
|
|
37
|
+
## Installation
|
|
45
38
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
Prerequisites:
|
|
49
|
-
- Node.js >= 20
|
|
50
|
-
- PNPM (recommended)
|
|
51
|
-
|
|
52
|
-
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:
|
|
53
40
|
|
|
54
41
|
```bash
|
|
55
|
-
|
|
56
|
-
|
|
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
|
|
57
47
|
```
|
|
58
48
|
|
|
59
|
-
|
|
49
|
+
## Quick start
|
|
60
50
|
|
|
61
|
-
|
|
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.
|
|
62
52
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
|
68
59
|
|
|
69
|
-
|
|
60
|
+
Examples:
|
|
70
61
|
|
|
71
62
|
```bash
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
# Default (UI at /, API at /api)
|
|
64
|
+
npx redis-smq-web-server
|
|
74
65
|
|
|
75
|
-
|
|
66
|
+
# Serve under a sub-path (e.g., behind a reverse proxy)
|
|
67
|
+
npx redis-smq-web-server --base-path /redis-smq
|
|
76
68
|
|
|
77
|
-
|
|
78
|
-
-
|
|
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
|
+
```
|
|
79
72
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
#### Building
|
|
83
|
-
|
|
84
|
-
From the monorepo root:
|
|
73
|
+
See [RedisSMQ Web Server](/packages/redis-smq-web-server/README.md) for CLI options such as:
|
|
85
74
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
75
|
+
- `--port`
|
|
76
|
+
- `--base-path`
|
|
77
|
+
- `--api-proxy-target`
|
|
78
|
+
- Redis connection and logging options (used only when hosting the API in-process)
|
|
79
|
+
|
|
80
|
+
## Configuration and routing
|
|
89
81
|
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
92
87
|
|
|
93
|
-
|
|
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.
|
|
94
91
|
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
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.
|
|
98
99
|
|
|
99
|
-
|
|
100
|
+
## Deploying behind a reverse proxy
|
|
100
101
|
|
|
101
|
-
-
|
|
102
|
-
-
|
|
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
|
|
103
108
|
|
|
104
109
|
## Related packages
|
|
105
110
|
|
|
106
111
|
- [redis-smq](../redis-smq/README.md): Core message queue
|
|
107
112
|
- [redis-smq-common](../redis-smq-common/README.md): Shared components/utilities
|
|
108
|
-
- [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
|
|
109
114
|
- [redis-smq-web-server](../redis-smq-web-server/README.md): Static hosting + in-process or proxied API
|
|
110
115
|
|
|
111
116
|
## Contributing
|
|
112
117
|
|
|
113
|
-
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.
|
|
114
119
|
|
|
115
120
|
## License
|
|
116
121
|
|
|
117
|
-
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};
|