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 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
  ![RedisSMQ Web UI - Pending Messages](docs/screenshots/img01.png)
4
12
 
5
- A Single Page Application for monitoring and managing RedisSMQ: inspect queues, messages, consumers, and more — with an integrated OpenAPI client.
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 tooling, types, and test setup
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 to overview queues, consumers, and message stats
21
+ - Dashboard for queues, consumers, and message stats
14
22
  - Queue/message browsers with filters and actions (ack, retry, delete, etc.)
15
- - Support for FIFO/LIFO/Priority Queues and multiple delivery models
16
- - Integrated documentation via Swagger UI (when served with the REST API)
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. See the root docs for Version Compatibility. Use the same major/minor across:
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
- - --port
45
- - --base-path
46
- - --api-proxy-target
33
+ ## Requirements
47
34
 
48
- ### Development
35
+ See [requirements of RedisSMQ](/README.md).
49
36
 
50
- Prerequisites:
37
+ ## Installation
51
38
 
52
- - Node.js >= 20
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
- pnpm install
59
- pnpm -F redis-smq-web-ui dev
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
- #### OpenAPI client generation
63
-
64
- The UI uses a generated OpenAPI client. To regenerate:
49
+ ## Quick start
65
50
 
66
- ```shell
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
- Make sure redis-smq-rest-api (with OpenAPI endpoint) is reachable as configured by the generation script.
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
- #### Running the dev Server
60
+ Examples:
73
61
 
74
62
  ```bash
75
- pnpm -F redis-smq-web-ui dev
76
- ```
77
-
78
- The dev script typically runs:
63
+ # Default (UI at /, API at /api)
64
+ npx redis-smq-web-server
79
65
 
80
- - Vite dev server for the UI
81
- - A local REST API dev server for convenience
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
- - Open the printed local URL to access the UI during development.
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
- #### Building
73
+ See [RedisSMQ Web Server](/packages/redis-smq-web-server/README.md) for CLI options such as:
86
74
 
87
- From the monorepo root:
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
- ```shell
90
- pnpm -F redis-smq-web-ui build
91
- ```
80
+ ## Configuration and routing
92
81
 
93
- Artifacts are output to the package’s dist directory.
94
- Serve the built assets with [RedisSMQ Web Server](../redis-smq-web-server/README.md) for correct routing and API integration.
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
- #### Configuration and routing
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
- - Base path: When served by redis-smq-web-server, the basePath is handled by the server and the UI will work under either / or a sub-path (e.g., /redis-smq).
99
- - API endpoint: When using redis-smq-web-server, the UI automatically talks to the in-process API or the configured proxy target.
100
- - Swagger UI and static docs are available when the REST API is hosted or proxied alongside the UI.
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
- For standalone/static hosting, ensure your server:
100
+ ## Deploying behind a reverse proxy
103
101
 
104
- - Serves the built assets under the desired public base path
105
- - Proxies API requests to the REST API under the same base path (e.g., /api)
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 3 schema and Swagger UI
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 licensed under is released under the [MIT License](https://github.com/weyoss/redis-smq/blob/master/LICENSE).
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};