@qwickapps/server 1.1.9 → 1.3.0

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.
Files changed (240) hide show
  1. package/README.md +318 -0
  2. package/dist/core/control-panel.d.ts +7 -2
  3. package/dist/core/control-panel.d.ts.map +1 -1
  4. package/dist/core/control-panel.js +99 -60
  5. package/dist/core/control-panel.js.map +1 -1
  6. package/dist/core/gateway.d.ts +159 -79
  7. package/dist/core/gateway.d.ts.map +1 -1
  8. package/dist/core/gateway.js +683 -315
  9. package/dist/core/gateway.js.map +1 -1
  10. package/dist/core/index.d.ts +3 -1
  11. package/dist/core/index.d.ts.map +1 -1
  12. package/dist/core/index.js +2 -0
  13. package/dist/core/index.js.map +1 -1
  14. package/dist/core/plugin-registry.d.ts +271 -0
  15. package/dist/core/plugin-registry.d.ts.map +1 -0
  16. package/dist/core/plugin-registry.js +326 -0
  17. package/dist/core/plugin-registry.js.map +1 -0
  18. package/dist/core/types.d.ts +16 -33
  19. package/dist/core/types.d.ts.map +1 -1
  20. package/dist/index.d.ts +8 -5
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +15 -7
  23. package/dist/index.js.map +1 -1
  24. package/dist/plugins/auth/adapters/auth0-adapter.d.ts +14 -0
  25. package/dist/plugins/auth/adapters/auth0-adapter.d.ts.map +1 -0
  26. package/dist/plugins/auth/adapters/auth0-adapter.js +179 -0
  27. package/dist/plugins/auth/adapters/auth0-adapter.js.map +1 -0
  28. package/dist/plugins/auth/adapters/basic-adapter.d.ts +13 -0
  29. package/dist/plugins/auth/adapters/basic-adapter.d.ts.map +1 -0
  30. package/dist/plugins/auth/adapters/basic-adapter.js +51 -0
  31. package/dist/plugins/auth/adapters/basic-adapter.js.map +1 -0
  32. package/dist/plugins/auth/adapters/index.d.ts +9 -0
  33. package/dist/plugins/auth/adapters/index.d.ts.map +1 -0
  34. package/dist/plugins/auth/adapters/index.js +9 -0
  35. package/dist/plugins/auth/adapters/index.js.map +1 -0
  36. package/dist/plugins/auth/adapters/supabase-adapter.d.ts +13 -0
  37. package/dist/plugins/auth/adapters/supabase-adapter.d.ts.map +1 -0
  38. package/dist/plugins/auth/adapters/supabase-adapter.js +109 -0
  39. package/dist/plugins/auth/adapters/supabase-adapter.js.map +1 -0
  40. package/dist/plugins/auth/auth-plugin.d.ts +40 -0
  41. package/dist/plugins/auth/auth-plugin.d.ts.map +1 -0
  42. package/dist/plugins/auth/auth-plugin.js +255 -0
  43. package/dist/plugins/auth/auth-plugin.js.map +1 -0
  44. package/dist/plugins/auth/auth-plugin.test.d.ts +9 -0
  45. package/dist/plugins/auth/auth-plugin.test.d.ts.map +1 -0
  46. package/dist/plugins/auth/auth-plugin.test.js +147 -0
  47. package/dist/plugins/auth/auth-plugin.test.js.map +1 -0
  48. package/dist/plugins/auth/index.d.ts +12 -0
  49. package/dist/plugins/auth/index.d.ts.map +1 -0
  50. package/dist/plugins/auth/index.js +13 -0
  51. package/dist/plugins/auth/index.js.map +1 -0
  52. package/dist/plugins/auth/types.d.ts +148 -0
  53. package/dist/plugins/auth/types.d.ts.map +1 -0
  54. package/dist/plugins/auth/types.js +14 -0
  55. package/dist/plugins/auth/types.js.map +1 -0
  56. package/dist/plugins/bans/bans-plugin.d.ts +59 -0
  57. package/dist/plugins/bans/bans-plugin.d.ts.map +1 -0
  58. package/dist/plugins/bans/bans-plugin.js +428 -0
  59. package/dist/plugins/bans/bans-plugin.js.map +1 -0
  60. package/dist/plugins/bans/index.d.ts +9 -0
  61. package/dist/plugins/bans/index.d.ts.map +1 -0
  62. package/dist/plugins/bans/index.js +10 -0
  63. package/dist/plugins/bans/index.js.map +1 -0
  64. package/dist/plugins/bans/stores/index.d.ts +7 -0
  65. package/dist/plugins/bans/stores/index.d.ts.map +1 -0
  66. package/dist/plugins/bans/stores/index.js +7 -0
  67. package/dist/plugins/bans/stores/index.js.map +1 -0
  68. package/dist/plugins/bans/stores/postgres-store.d.ts +29 -0
  69. package/dist/plugins/bans/stores/postgres-store.d.ts.map +1 -0
  70. package/dist/plugins/bans/stores/postgres-store.js +132 -0
  71. package/dist/plugins/bans/stores/postgres-store.js.map +1 -0
  72. package/dist/plugins/bans/types.d.ts +128 -0
  73. package/dist/plugins/bans/types.d.ts.map +1 -0
  74. package/dist/plugins/bans/types.js +11 -0
  75. package/dist/plugins/bans/types.js.map +1 -0
  76. package/dist/plugins/cache-plugin.d.ts +14 -3
  77. package/dist/plugins/cache-plugin.d.ts.map +1 -1
  78. package/dist/plugins/cache-plugin.js +27 -7
  79. package/dist/plugins/cache-plugin.js.map +1 -1
  80. package/dist/plugins/cache-plugin.test.js +96 -32
  81. package/dist/plugins/cache-plugin.test.js.map +1 -1
  82. package/dist/plugins/config-plugin.d.ts +3 -2
  83. package/dist/plugins/config-plugin.d.ts.map +1 -1
  84. package/dist/plugins/config-plugin.js +17 -10
  85. package/dist/plugins/config-plugin.js.map +1 -1
  86. package/dist/plugins/diagnostics-plugin.d.ts +2 -2
  87. package/dist/plugins/diagnostics-plugin.d.ts.map +1 -1
  88. package/dist/plugins/diagnostics-plugin.js +17 -10
  89. package/dist/plugins/diagnostics-plugin.js.map +1 -1
  90. package/dist/plugins/entitlements/entitlements-plugin.d.ts +95 -0
  91. package/dist/plugins/entitlements/entitlements-plugin.d.ts.map +1 -0
  92. package/dist/plugins/entitlements/entitlements-plugin.js +707 -0
  93. package/dist/plugins/entitlements/entitlements-plugin.js.map +1 -0
  94. package/dist/plugins/entitlements/index.d.ts +12 -0
  95. package/dist/plugins/entitlements/index.d.ts.map +1 -0
  96. package/dist/plugins/entitlements/index.js +16 -0
  97. package/dist/plugins/entitlements/index.js.map +1 -0
  98. package/dist/plugins/entitlements/sources/index.d.ts +9 -0
  99. package/dist/plugins/entitlements/sources/index.d.ts.map +1 -0
  100. package/dist/plugins/entitlements/sources/index.js +9 -0
  101. package/dist/plugins/entitlements/sources/index.js.map +1 -0
  102. package/dist/plugins/entitlements/sources/postgres-source.d.ts +29 -0
  103. package/dist/plugins/entitlements/sources/postgres-source.d.ts.map +1 -0
  104. package/dist/plugins/entitlements/sources/postgres-source.js +169 -0
  105. package/dist/plugins/entitlements/sources/postgres-source.js.map +1 -0
  106. package/dist/plugins/entitlements/types.d.ts +232 -0
  107. package/dist/plugins/entitlements/types.d.ts.map +1 -0
  108. package/dist/plugins/entitlements/types.js +11 -0
  109. package/dist/plugins/entitlements/types.js.map +1 -0
  110. package/dist/plugins/frontend-app-plugin.d.ts +9 -3
  111. package/dist/plugins/frontend-app-plugin.d.ts.map +1 -1
  112. package/dist/plugins/frontend-app-plugin.js +14 -9
  113. package/dist/plugins/frontend-app-plugin.js.map +1 -1
  114. package/dist/plugins/health-plugin.d.ts +5 -2
  115. package/dist/plugins/health-plugin.d.ts.map +1 -1
  116. package/dist/plugins/health-plugin.js +20 -5
  117. package/dist/plugins/health-plugin.js.map +1 -1
  118. package/dist/plugins/index.d.ts +8 -2
  119. package/dist/plugins/index.d.ts.map +1 -1
  120. package/dist/plugins/index.js +8 -2
  121. package/dist/plugins/index.js.map +1 -1
  122. package/dist/plugins/logs-plugin.d.ts +3 -2
  123. package/dist/plugins/logs-plugin.d.ts.map +1 -1
  124. package/dist/plugins/logs-plugin.js +21 -12
  125. package/dist/plugins/logs-plugin.js.map +1 -1
  126. package/dist/plugins/postgres-plugin.d.ts +3 -3
  127. package/dist/plugins/postgres-plugin.d.ts.map +1 -1
  128. package/dist/plugins/postgres-plugin.js +9 -7
  129. package/dist/plugins/postgres-plugin.js.map +1 -1
  130. package/dist/plugins/postgres-plugin.test.js +47 -29
  131. package/dist/plugins/postgres-plugin.test.js.map +1 -1
  132. package/dist/plugins/users/index.d.ts +12 -0
  133. package/dist/plugins/users/index.d.ts.map +1 -0
  134. package/dist/plugins/users/index.js +13 -0
  135. package/dist/plugins/users/index.js.map +1 -0
  136. package/dist/plugins/users/stores/index.d.ts +7 -0
  137. package/dist/plugins/users/stores/index.d.ts.map +1 -0
  138. package/dist/plugins/users/stores/index.js +7 -0
  139. package/dist/plugins/users/stores/index.js.map +1 -0
  140. package/dist/plugins/users/stores/postgres-store.d.ts +28 -0
  141. package/dist/plugins/users/stores/postgres-store.d.ts.map +1 -0
  142. package/dist/plugins/users/stores/postgres-store.js +157 -0
  143. package/dist/plugins/users/stores/postgres-store.js.map +1 -0
  144. package/dist/plugins/users/types.d.ts +189 -0
  145. package/dist/plugins/users/types.d.ts.map +1 -0
  146. package/dist/plugins/users/types.js +12 -0
  147. package/dist/plugins/users/types.js.map +1 -0
  148. package/dist/plugins/users/users-plugin.d.ts +39 -0
  149. package/dist/plugins/users/users-plugin.d.ts.map +1 -0
  150. package/dist/plugins/users/users-plugin.js +242 -0
  151. package/dist/plugins/users/users-plugin.js.map +1 -0
  152. package/dist-ui/assets/index-Bsp2ntcw.js +465 -0
  153. package/dist-ui/assets/index-Bsp2ntcw.js.map +1 -0
  154. package/dist-ui/index.html +1 -1
  155. package/dist-ui-lib/api/controlPanelApi.d.ts +232 -0
  156. package/dist-ui-lib/components/ControlPanelApp.d.ts +61 -0
  157. package/dist-ui-lib/components/index.d.ts +18 -0
  158. package/dist-ui-lib/config/AppConfig.d.ts +7 -0
  159. package/dist-ui-lib/dashboard/DashboardWidgetRegistry.d.ts +62 -0
  160. package/dist-ui-lib/dashboard/DashboardWidgetRenderer.d.ts +8 -0
  161. package/dist-ui-lib/dashboard/PluginWidgetRenderer.d.ts +19 -0
  162. package/dist-ui-lib/dashboard/WidgetComponentRegistry.d.ts +44 -0
  163. package/dist-ui-lib/dashboard/builtInWidgets.d.ts +19 -0
  164. package/dist-ui-lib/dashboard/index.d.ts +13 -0
  165. package/dist-ui-lib/dashboard/widgets/ServiceHealthWidget.d.ts +12 -0
  166. package/dist-ui-lib/dashboard/widgets/index.d.ts +6 -0
  167. package/dist-ui-lib/index.js +6441 -0
  168. package/dist-ui-lib/index.js.map +1 -0
  169. package/dist-ui-lib/pages/ConfigPage.d.ts +1 -0
  170. package/dist-ui-lib/pages/DashboardPage.d.ts +1 -0
  171. package/dist-ui-lib/pages/DiagnosticsPage.d.ts +1 -0
  172. package/dist-ui-lib/pages/EntitlementsPage.d.ts +17 -0
  173. package/dist-ui-lib/pages/LogsPage.d.ts +1 -0
  174. package/dist-ui-lib/pages/NotFoundPage.d.ts +1 -0
  175. package/dist-ui-lib/pages/PluginPage.d.ts +15 -0
  176. package/dist-ui-lib/pages/SystemPage.d.ts +1 -0
  177. package/dist-ui-lib/pages/UsersPage.d.ts +22 -0
  178. package/package.json +18 -6
  179. package/src/core/control-panel.ts +122 -68
  180. package/src/core/gateway.ts +870 -399
  181. package/src/core/index.ts +21 -2
  182. package/src/core/plugin-registry.ts +653 -0
  183. package/src/core/types.ts +31 -37
  184. package/src/index.ts +118 -19
  185. package/src/plugins/auth/adapters/auth0-adapter.ts +214 -0
  186. package/src/plugins/auth/adapters/basic-adapter.ts +61 -0
  187. package/src/plugins/auth/adapters/index.ts +9 -0
  188. package/src/plugins/auth/adapters/supabase-adapter.ts +141 -0
  189. package/src/plugins/auth/auth-plugin.test.ts +176 -0
  190. package/src/plugins/auth/auth-plugin.ts +303 -0
  191. package/src/plugins/auth/index.ts +33 -0
  192. package/src/plugins/auth/types.ts +165 -0
  193. package/src/plugins/bans/bans-plugin.ts +485 -0
  194. package/src/plugins/bans/index.ts +31 -0
  195. package/src/plugins/bans/stores/index.ts +7 -0
  196. package/src/plugins/bans/stores/postgres-store.ts +195 -0
  197. package/src/plugins/bans/types.ts +141 -0
  198. package/src/plugins/cache-plugin.test.ts +105 -32
  199. package/src/plugins/cache-plugin.ts +40 -9
  200. package/src/plugins/config-plugin.ts +23 -12
  201. package/src/plugins/diagnostics-plugin.ts +22 -12
  202. package/src/plugins/entitlements/entitlements-plugin.ts +820 -0
  203. package/src/plugins/entitlements/index.ts +51 -0
  204. package/src/plugins/entitlements/sources/index.ts +9 -0
  205. package/src/plugins/entitlements/sources/postgres-source.ts +253 -0
  206. package/src/plugins/entitlements/types.ts +256 -0
  207. package/src/plugins/frontend-app-plugin.ts +24 -12
  208. package/src/plugins/health-plugin.ts +27 -7
  209. package/src/plugins/index.ts +106 -4
  210. package/src/plugins/logs-plugin.ts +28 -14
  211. package/src/plugins/postgres-plugin.test.ts +49 -29
  212. package/src/plugins/postgres-plugin.ts +11 -9
  213. package/src/plugins/users/index.ts +35 -0
  214. package/src/plugins/users/stores/index.ts +7 -0
  215. package/src/plugins/users/stores/postgres-store.ts +225 -0
  216. package/src/plugins/users/types.ts +209 -0
  217. package/src/plugins/users/users-plugin.ts +281 -0
  218. package/ui/src/App.tsx +185 -31
  219. package/ui/src/api/controlPanelApi.ts +354 -1
  220. package/ui/src/components/ControlPanelApp.tsx +209 -0
  221. package/ui/src/components/index.ts +62 -0
  222. package/ui/src/dashboard/DashboardWidgetRegistry.tsx +129 -0
  223. package/ui/src/dashboard/DashboardWidgetRenderer.tsx +34 -0
  224. package/ui/src/dashboard/PluginWidgetRenderer.tsx +115 -0
  225. package/ui/src/dashboard/WidgetComponentRegistry.tsx +116 -0
  226. package/ui/src/dashboard/builtInWidgets.tsx +29 -0
  227. package/ui/src/dashboard/index.ts +35 -0
  228. package/ui/src/dashboard/widgets/ServiceHealthWidget.tsx +140 -0
  229. package/ui/src/dashboard/widgets/index.ts +7 -0
  230. package/ui/src/pages/DashboardPage.tsx +28 -149
  231. package/ui/src/pages/EntitlementsPage.tsx +557 -0
  232. package/ui/src/pages/LogsPage.tsx +174 -8
  233. package/ui/src/pages/PluginPage.tsx +148 -0
  234. package/ui/src/pages/SystemPage.tsx +445 -0
  235. package/ui/src/pages/UsersPage.tsx +837 -0
  236. package/ui/tsconfig.lib.json +11 -0
  237. package/ui/vite.lib.config.ts +51 -0
  238. package/dist-ui/assets/index-CW1BviRn.js +0 -465
  239. package/dist-ui/assets/index-CW1BviRn.js.map +0 -1
  240. package/ui/src/pages/HealthPage.tsx +0 -204
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Auth Plugin
3
+ *
4
+ * Pluggable authentication plugin for @qwickapps/server.
5
+ * Supports multiple adapters (Auth0, Supabase, Basic) with fallback chain.
6
+ *
7
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
8
+ */
9
+ // Store the plugin instance for helper access
10
+ let currentAdapter = null;
11
+ let fallbackAdapters = [];
12
+ /**
13
+ * Create the Auth plugin
14
+ */
15
+ export function createAuthPlugin(config) {
16
+ const excludePaths = config.excludePaths || [];
17
+ const authRequired = config.authRequired !== false;
18
+ const debug = config.debug || false;
19
+ function log(message, data) {
20
+ if (debug) {
21
+ console.log(`[AuthPlugin] ${message}`, data || '');
22
+ }
23
+ }
24
+ return {
25
+ id: 'auth',
26
+ name: 'Auth Plugin',
27
+ version: '1.0.0',
28
+ async onStart(_pluginConfig, registry) {
29
+ const app = registry.getApp();
30
+ // Store adapters for helper access
31
+ currentAdapter = config.adapter;
32
+ fallbackAdapters = config.fallback || [];
33
+ log('Initializing auth plugin', {
34
+ adapter: config.adapter.name,
35
+ fallback: fallbackAdapters.map((a) => a.name),
36
+ excludePaths,
37
+ authRequired,
38
+ });
39
+ // Initialize the primary adapter
40
+ const primaryMiddleware = config.adapter.initialize();
41
+ if (Array.isArray(primaryMiddleware)) {
42
+ primaryMiddleware.forEach((mw) => app.use(mw));
43
+ }
44
+ else {
45
+ app.use(primaryMiddleware);
46
+ }
47
+ // Initialize fallback adapters
48
+ for (const fallback of fallbackAdapters) {
49
+ const fallbackMiddleware = fallback.initialize();
50
+ if (Array.isArray(fallbackMiddleware)) {
51
+ fallbackMiddleware.forEach((mw) => app.use(mw));
52
+ }
53
+ else {
54
+ app.use(fallbackMiddleware);
55
+ }
56
+ }
57
+ // Add the auth checking middleware
58
+ app.use(createAuthMiddleware());
59
+ // Register auth status route
60
+ registry.addRoute({
61
+ method: 'get',
62
+ path: '/api/auth/status',
63
+ handler: (_req, res) => {
64
+ const authReq = _req;
65
+ res.json({
66
+ authenticated: authReq.auth?.isAuthenticated || false,
67
+ user: authReq.auth?.user
68
+ ? {
69
+ id: authReq.auth.user.id,
70
+ email: authReq.auth.user.email,
71
+ name: authReq.auth.user.name,
72
+ picture: authReq.auth.user.picture,
73
+ roles: authReq.auth.user.roles,
74
+ }
75
+ : null,
76
+ adapter: authReq.auth?.adapter,
77
+ });
78
+ },
79
+ pluginId: 'auth',
80
+ });
81
+ log('Auth plugin initialized');
82
+ },
83
+ async onStop() {
84
+ log('Shutting down auth plugin');
85
+ // Cleanup adapters
86
+ if (currentAdapter?.shutdown) {
87
+ await currentAdapter.shutdown();
88
+ }
89
+ for (const fallback of fallbackAdapters) {
90
+ if (fallback.shutdown) {
91
+ await fallback.shutdown();
92
+ }
93
+ }
94
+ currentAdapter = null;
95
+ fallbackAdapters = [];
96
+ },
97
+ };
98
+ /**
99
+ * Create the auth checking middleware
100
+ */
101
+ function createAuthMiddleware() {
102
+ return async (req, res, next) => {
103
+ const authReq = req;
104
+ // Initialize auth object
105
+ authReq.auth = {
106
+ isAuthenticated: false,
107
+ user: null,
108
+ adapter: 'none',
109
+ };
110
+ // Check if path is excluded
111
+ const isExcluded = excludePaths.some((path) => {
112
+ if (path.endsWith('*')) {
113
+ return req.path.startsWith(path.slice(0, -1));
114
+ }
115
+ return req.path === path || req.path.startsWith(path + '/');
116
+ });
117
+ if (isExcluded) {
118
+ log('Path excluded from auth', { path: req.path });
119
+ return next();
120
+ }
121
+ // Try primary adapter
122
+ let authenticated = false;
123
+ let user = null;
124
+ let activeAdapter = config.adapter;
125
+ if (config.adapter.isAuthenticated(req)) {
126
+ user = await Promise.resolve(config.adapter.getUser(req));
127
+ if (user) {
128
+ authenticated = true;
129
+ log('Authenticated via primary adapter', { adapter: config.adapter.name });
130
+ }
131
+ }
132
+ // Try fallback adapters if primary didn't authenticate
133
+ if (!authenticated && fallbackAdapters.length > 0) {
134
+ for (const fallback of fallbackAdapters) {
135
+ if (fallback.isAuthenticated(req)) {
136
+ user = await Promise.resolve(fallback.getUser(req));
137
+ if (user) {
138
+ authenticated = true;
139
+ activeAdapter = fallback;
140
+ log('Authenticated via fallback adapter', { adapter: fallback.name });
141
+ break;
142
+ }
143
+ }
144
+ }
145
+ }
146
+ // Set auth info on request
147
+ authReq.auth = {
148
+ isAuthenticated: authenticated,
149
+ user,
150
+ adapter: activeAdapter.name,
151
+ accessToken: activeAdapter.getAccessToken?.(req) || undefined,
152
+ };
153
+ // Check if auth is required but user is not authenticated
154
+ if (authRequired && !authenticated) {
155
+ log('Auth required but not authenticated', { path: req.path });
156
+ // Use custom handler if provided
157
+ if (config.onUnauthorized) {
158
+ return config.onUnauthorized(req, res);
159
+ }
160
+ // Use adapter's unauthorized handler
161
+ if (activeAdapter.onUnauthorized) {
162
+ return activeAdapter.onUnauthorized(req, res);
163
+ }
164
+ // Default unauthorized response
165
+ return res.status(401).json({
166
+ error: 'Unauthorized',
167
+ message: 'Authentication required',
168
+ });
169
+ }
170
+ next();
171
+ };
172
+ }
173
+ }
174
+ /**
175
+ * Check if the current request is authenticated
176
+ */
177
+ export function isAuthenticated(req) {
178
+ const authReq = req;
179
+ return authReq.auth?.isAuthenticated || false;
180
+ }
181
+ /**
182
+ * Get the authenticated user from the request
183
+ */
184
+ export function getAuthenticatedUser(req) {
185
+ const authReq = req;
186
+ return authReq.auth?.user || null;
187
+ }
188
+ /**
189
+ * Get the access token from the request
190
+ */
191
+ export function getAccessToken(req) {
192
+ const authReq = req;
193
+ return authReq.auth?.accessToken || null;
194
+ }
195
+ /**
196
+ * Middleware to require authentication
197
+ */
198
+ export function requireAuth() {
199
+ return (req, res, next) => {
200
+ if (!isAuthenticated(req)) {
201
+ return res.status(401).json({
202
+ error: 'Unauthorized',
203
+ message: 'Authentication required',
204
+ });
205
+ }
206
+ next();
207
+ };
208
+ }
209
+ /**
210
+ * Middleware to require specific roles
211
+ */
212
+ export function requireRoles(...roles) {
213
+ return (req, res, next) => {
214
+ const user = getAuthenticatedUser(req);
215
+ if (!user) {
216
+ return res.status(401).json({
217
+ error: 'Unauthorized',
218
+ message: 'Authentication required',
219
+ });
220
+ }
221
+ const userRoles = user.roles || [];
222
+ const hasAllRoles = roles.every((role) => userRoles.includes(role));
223
+ if (!hasAllRoles) {
224
+ return res.status(403).json({
225
+ error: 'Forbidden',
226
+ message: `Required roles: ${roles.join(', ')}`,
227
+ });
228
+ }
229
+ next();
230
+ };
231
+ }
232
+ /**
233
+ * Middleware to require any of the specified roles
234
+ */
235
+ export function requireAnyRole(...roles) {
236
+ return (req, res, next) => {
237
+ const user = getAuthenticatedUser(req);
238
+ if (!user) {
239
+ return res.status(401).json({
240
+ error: 'Unauthorized',
241
+ message: 'Authentication required',
242
+ });
243
+ }
244
+ const userRoles = user.roles || [];
245
+ const hasAnyRole = roles.some((role) => userRoles.includes(role));
246
+ if (!hasAnyRole) {
247
+ return res.status(403).json({
248
+ error: 'Forbidden',
249
+ message: `Required one of roles: ${roles.join(', ')}`,
250
+ });
251
+ }
252
+ next();
253
+ };
254
+ }
255
+ //# sourceMappingURL=auth-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-plugin.js","sourceRoot":"","sources":["../../../src/plugins/auth/auth-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Auth Plugin Tests
3
+ *
4
+ * Unit tests for the authentication plugin and adapters.
5
+ *
6
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=auth-plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-plugin.test.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/auth-plugin.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Auth Plugin Tests
3
+ *
4
+ * Unit tests for the authentication plugin and adapters.
5
+ *
6
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
7
+ */
8
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
9
+ import { basicAdapter } from './adapters/basic-adapter.js';
10
+ // Mock request/response helpers
11
+ function createMockRequest(overrides = {}) {
12
+ return {
13
+ headers: {},
14
+ path: '/',
15
+ originalUrl: '/',
16
+ ...overrides,
17
+ };
18
+ }
19
+ function createMockResponse() {
20
+ const res = {
21
+ status: vi.fn().mockReturnThis(),
22
+ json: vi.fn().mockReturnThis(),
23
+ setHeader: vi.fn().mockReturnThis(),
24
+ redirect: vi.fn().mockReturnThis(),
25
+ };
26
+ return res;
27
+ }
28
+ describe('basicAdapter', () => {
29
+ const config = {
30
+ username: 'admin',
31
+ password: 'secret123',
32
+ realm: 'Test Realm',
33
+ };
34
+ let adapter;
35
+ beforeEach(() => {
36
+ adapter = basicAdapter(config);
37
+ });
38
+ describe('name', () => {
39
+ it('should return "basic"', () => {
40
+ expect(adapter.name).toBe('basic');
41
+ });
42
+ });
43
+ describe('initialize', () => {
44
+ it('should return a pass-through middleware', () => {
45
+ const middleware = adapter.initialize();
46
+ const req = createMockRequest();
47
+ const res = createMockResponse();
48
+ const next = vi.fn();
49
+ // Handle both single middleware and array of middlewares
50
+ if (Array.isArray(middleware)) {
51
+ middleware[0](req, res, next);
52
+ }
53
+ else {
54
+ middleware(req, res, next);
55
+ }
56
+ expect(next).toHaveBeenCalled();
57
+ });
58
+ });
59
+ describe('isAuthenticated', () => {
60
+ it('should return true for valid basic auth credentials', () => {
61
+ const expectedAuth = `Basic ${Buffer.from('admin:secret123').toString('base64')}`;
62
+ const req = createMockRequest({
63
+ headers: { authorization: expectedAuth },
64
+ });
65
+ expect(adapter.isAuthenticated(req)).toBe(true);
66
+ });
67
+ it('should return false for invalid credentials', () => {
68
+ const wrongAuth = `Basic ${Buffer.from('admin:wrongpassword').toString('base64')}`;
69
+ const req = createMockRequest({
70
+ headers: { authorization: wrongAuth },
71
+ });
72
+ expect(adapter.isAuthenticated(req)).toBe(false);
73
+ });
74
+ it('should return false for missing authorization header', () => {
75
+ const req = createMockRequest();
76
+ expect(adapter.isAuthenticated(req)).toBe(false);
77
+ });
78
+ it('should return false for non-basic auth header', () => {
79
+ const req = createMockRequest({
80
+ headers: { authorization: 'Bearer some-token' },
81
+ });
82
+ expect(adapter.isAuthenticated(req)).toBe(false);
83
+ });
84
+ });
85
+ describe('getUser', () => {
86
+ it('should return user for authenticated request', async () => {
87
+ const expectedAuth = `Basic ${Buffer.from('admin:secret123').toString('base64')}`;
88
+ const req = createMockRequest({
89
+ headers: { authorization: expectedAuth },
90
+ });
91
+ const user = await Promise.resolve(adapter.getUser(req));
92
+ expect(user).not.toBeNull();
93
+ expect(user?.id).toBe('basic-auth-user');
94
+ expect(user?.email).toBe('admin@localhost');
95
+ expect(user?.name).toBe('admin');
96
+ expect(user?.roles).toContain('admin');
97
+ });
98
+ it('should return null for unauthenticated request', async () => {
99
+ const req = createMockRequest();
100
+ expect(await Promise.resolve(adapter.getUser(req))).toBeNull();
101
+ });
102
+ });
103
+ describe('hasRoles', () => {
104
+ it('should return true if user has the role', () => {
105
+ const expectedAuth = `Basic ${Buffer.from('admin:secret123').toString('base64')}`;
106
+ const req = createMockRequest({
107
+ headers: { authorization: expectedAuth },
108
+ });
109
+ expect(adapter.hasRoles(req, ['admin'])).toBe(true);
110
+ });
111
+ it('should return false if user does not have the role', () => {
112
+ const expectedAuth = `Basic ${Buffer.from('admin:secret123').toString('base64')}`;
113
+ const req = createMockRequest({
114
+ headers: { authorization: expectedAuth },
115
+ });
116
+ expect(adapter.hasRoles(req, ['superadmin'])).toBe(false);
117
+ });
118
+ });
119
+ describe('onUnauthorized', () => {
120
+ it('should set WWW-Authenticate header and return 401', () => {
121
+ const req = createMockRequest();
122
+ const res = createMockResponse();
123
+ adapter.onUnauthorized(req, res);
124
+ expect(res.setHeader).toHaveBeenCalledWith('WWW-Authenticate', 'Basic realm="Test Realm"');
125
+ expect(res.status).toHaveBeenCalledWith(401);
126
+ expect(res.json).toHaveBeenCalledWith({
127
+ error: 'Unauthorized',
128
+ message: 'Authentication required.',
129
+ });
130
+ });
131
+ });
132
+ });
133
+ describe('Auth Plugin helpers', () => {
134
+ // These tests would require more complex setup with express app
135
+ // For now, we test the basic functionality
136
+ it('should export all required functions', async () => {
137
+ const authModule = await import('./auth-plugin.js');
138
+ expect(authModule.createAuthPlugin).toBeDefined();
139
+ expect(authModule.isAuthenticated).toBeDefined();
140
+ expect(authModule.getAuthenticatedUser).toBeDefined();
141
+ expect(authModule.getAccessToken).toBeDefined();
142
+ expect(authModule.requireAuth).toBeDefined();
143
+ expect(authModule.requireRoles).toBeDefined();
144
+ expect(authModule.requireAnyRole).toBeDefined();
145
+ });
146
+ });
147
+ //# sourceMappingURL=auth-plugin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-plugin.test.js","sourceRoot":"","sources":["../../../src/plugins/auth/auth-plugin.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Auth Plugin Index
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ export { createAuthPlugin, isAuthenticated, getAuthenticatedUser, getAccessToken, requireAuth, requireRoles, requireAnyRole, } from './auth-plugin.js';
7
+ export type { AuthPluginConfig, AuthAdapter, AuthenticatedUser, AuthenticatedRequest, Auth0AdapterConfig, SupabaseAdapterConfig, BasicAdapterConfig, } from './types.js';
8
+ export { isAuthenticatedRequest } from './types.js';
9
+ export { auth0Adapter } from './adapters/auth0-adapter.js';
10
+ export { basicAdapter } from './adapters/basic-adapter.js';
11
+ export { supabaseAdapter } from './adapters/supabase-adapter.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Auth Plugin Index
3
+ *
4
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
5
+ */
6
+ // Main plugin
7
+ export { createAuthPlugin, isAuthenticated, getAuthenticatedUser, getAccessToken, requireAuth, requireRoles, requireAnyRole, } from './auth-plugin.js';
8
+ export { isAuthenticatedRequest } from './types.js';
9
+ // Adapters
10
+ export { auth0Adapter } from './adapters/auth0-adapter.js';
11
+ export { basicAdapter } from './adapters/basic-adapter.js';
12
+ export { supabaseAdapter } from './adapters/supabase-adapter.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/auth/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc;AACd,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,GACf,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,WAAW;AACX,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Auth Plugin Types
3
+ *
4
+ * Type definitions for the pluggable authentication system.
5
+ *
6
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
7
+ */
8
+ import type { Request, Response, RequestHandler } from 'express';
9
+ /**
10
+ * Authenticated user information
11
+ */
12
+ export interface AuthenticatedUser {
13
+ /** Unique user ID from the provider */
14
+ id: string;
15
+ /** User's email address */
16
+ email: string;
17
+ /** User's display name */
18
+ name?: string;
19
+ /** User's profile picture URL */
20
+ picture?: string;
21
+ /** Whether the email is verified */
22
+ emailVerified?: boolean;
23
+ /** User's roles from the provider */
24
+ roles?: string[];
25
+ /** Raw user object from the provider */
26
+ raw?: Record<string, unknown>;
27
+ }
28
+ /**
29
+ * Auth adapter interface - all adapters must implement this
30
+ */
31
+ export interface AuthAdapter {
32
+ /** Adapter name (e.g., 'auth0', 'supabase', 'basic') */
33
+ name: string;
34
+ /**
35
+ * Initialize the adapter - called once during plugin setup
36
+ * Returns middleware to apply to the Express app
37
+ */
38
+ initialize(): RequestHandler | RequestHandler[];
39
+ /**
40
+ * Check if the request is authenticated
41
+ */
42
+ isAuthenticated(req: Request): boolean;
43
+ /**
44
+ * Get the authenticated user from the request
45
+ * Can be async for adapters that need to validate tokens
46
+ */
47
+ getUser(req: Request): AuthenticatedUser | null | Promise<AuthenticatedUser | null>;
48
+ /**
49
+ * Check if user has required roles (optional)
50
+ */
51
+ hasRoles?(req: Request, roles: string[]): boolean;
52
+ /**
53
+ * Get the access token for downstream API calls (optional)
54
+ */
55
+ getAccessToken?(req: Request): string | null;
56
+ /**
57
+ * Handler for unauthorized requests (optional custom behavior)
58
+ */
59
+ onUnauthorized?(req: Request, res: Response): void;
60
+ /**
61
+ * Cleanup resources on shutdown (optional)
62
+ */
63
+ shutdown?(): Promise<void>;
64
+ }
65
+ /**
66
+ * Auth0 adapter configuration
67
+ */
68
+ export interface Auth0AdapterConfig {
69
+ /** Auth0 domain (e.g., 'myapp.auth0.com') */
70
+ domain: string;
71
+ /** Auth0 client ID */
72
+ clientId: string;
73
+ /** Auth0 client secret */
74
+ clientSecret: string;
75
+ /** Base URL of the application */
76
+ baseUrl: string;
77
+ /** Session secret for cookie encryption */
78
+ secret: string;
79
+ /** API audience for access tokens (optional) */
80
+ audience?: string;
81
+ /** Scopes to request (default: ['openid', 'profile', 'email']) */
82
+ scopes?: string[];
83
+ /** Allowed roles - only these roles can access (optional) */
84
+ allowedRoles?: string[];
85
+ /** Allowed email domains - only these domains can access (optional) */
86
+ allowedDomains?: string[];
87
+ /** Whether to expose the access token to handlers (default: false) */
88
+ exposeAccessToken?: boolean;
89
+ /** Auth routes configuration */
90
+ routes?: {
91
+ login?: string;
92
+ logout?: string;
93
+ callback?: string;
94
+ };
95
+ }
96
+ /**
97
+ * Supabase adapter configuration
98
+ */
99
+ export interface SupabaseAdapterConfig {
100
+ /** Supabase project URL */
101
+ url: string;
102
+ /** Supabase anon key */
103
+ anonKey: string;
104
+ }
105
+ /**
106
+ * Basic auth adapter configuration
107
+ */
108
+ export interface BasicAdapterConfig {
109
+ /** Username for basic auth */
110
+ username: string;
111
+ /** Password for basic auth */
112
+ password: string;
113
+ /** Realm name for the WWW-Authenticate header */
114
+ realm?: string;
115
+ }
116
+ /**
117
+ * Auth plugin configuration
118
+ */
119
+ export interface AuthPluginConfig {
120
+ /** Primary adapter for authentication */
121
+ adapter: AuthAdapter;
122
+ /** Fallback adapters checked in order if primary fails (optional) */
123
+ fallback?: AuthAdapter[];
124
+ /** Paths to exclude from authentication */
125
+ excludePaths?: string[];
126
+ /** Whether auth is required for all routes (default: true) */
127
+ authRequired?: boolean;
128
+ /** Custom unauthorized handler */
129
+ onUnauthorized?: (req: Request, res: Response) => void;
130
+ /** Enable debug logging */
131
+ debug?: boolean;
132
+ }
133
+ /**
134
+ * Extended Express Request with auth info
135
+ */
136
+ export interface AuthenticatedRequest extends Request {
137
+ auth: {
138
+ isAuthenticated: boolean;
139
+ user: AuthenticatedUser | null;
140
+ adapter: string;
141
+ accessToken?: string;
142
+ };
143
+ }
144
+ /**
145
+ * Helper type guard for authenticated requests
146
+ */
147
+ export declare function isAuthenticatedRequest(req: Request): req is AuthenticatedRequest;
148
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Auth Plugin Types
3
+ *
4
+ * Type definitions for the pluggable authentication system.
5
+ *
6
+ * Copyright (c) 2025 QwickApps.com. All rights reserved.
7
+ */
8
+ /**
9
+ * Helper type guard for authenticated requests
10
+ */
11
+ export function isAuthenticatedRequest(req) {
12
+ return 'auth' in req && req.auth?.isAuthenticated === true;
13
+ }
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/plugins/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAyJH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,OAAO,MAAM,IAAI,GAAG,IAAK,GAA4B,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;AACvF,CAAC"}