@qwickapps/server 1.2.0 → 1.3.1
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/README.md +392 -0
- package/dist/core/control-panel.d.ts +7 -2
- package/dist/core/control-panel.d.ts.map +1 -1
- package/dist/core/control-panel.js +120 -54
- package/dist/core/control-panel.js.map +1 -1
- package/dist/core/gateway.d.ts +159 -79
- package/dist/core/gateway.d.ts.map +1 -1
- package/dist/core/gateway.js +679 -319
- package/dist/core/gateway.js.map +1 -1
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/plugin-registry.d.ts +307 -0
- package/dist/core/plugin-registry.d.ts.map +1 -0
- package/dist/core/plugin-registry.js +352 -0
- package/dist/core/plugin-registry.js.map +1 -0
- package/dist/core/types.d.ts +16 -33
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/plugins/auth/adapters/auth0-adapter.d.ts +14 -0
- package/dist/plugins/auth/adapters/auth0-adapter.d.ts.map +1 -0
- package/dist/plugins/auth/adapters/auth0-adapter.js +179 -0
- package/dist/plugins/auth/adapters/auth0-adapter.js.map +1 -0
- package/dist/plugins/auth/adapters/basic-adapter.d.ts +13 -0
- package/dist/plugins/auth/adapters/basic-adapter.d.ts.map +1 -0
- package/dist/plugins/auth/adapters/basic-adapter.js +51 -0
- package/dist/plugins/auth/adapters/basic-adapter.js.map +1 -0
- package/dist/plugins/auth/adapters/index.d.ts +10 -0
- package/dist/plugins/auth/adapters/index.d.ts.map +1 -0
- package/dist/plugins/auth/adapters/index.js +10 -0
- package/dist/plugins/auth/adapters/index.js.map +1 -0
- package/dist/plugins/auth/adapters/supabase-adapter.d.ts +13 -0
- package/dist/plugins/auth/adapters/supabase-adapter.d.ts.map +1 -0
- package/dist/plugins/auth/adapters/supabase-adapter.js +109 -0
- package/dist/plugins/auth/adapters/supabase-adapter.js.map +1 -0
- package/dist/plugins/auth/adapters/supertokens-adapter.d.ts +18 -0
- package/dist/plugins/auth/adapters/supertokens-adapter.d.ts.map +1 -0
- package/dist/plugins/auth/adapters/supertokens-adapter.js +267 -0
- package/dist/plugins/auth/adapters/supertokens-adapter.js.map +1 -0
- package/dist/plugins/auth/auth-plugin.d.ts +40 -0
- package/dist/plugins/auth/auth-plugin.d.ts.map +1 -0
- package/dist/plugins/auth/auth-plugin.js +255 -0
- package/dist/plugins/auth/auth-plugin.js.map +1 -0
- package/dist/plugins/auth/auth-plugin.test.d.ts +9 -0
- package/dist/plugins/auth/auth-plugin.test.d.ts.map +1 -0
- package/dist/plugins/auth/auth-plugin.test.js +147 -0
- package/dist/plugins/auth/auth-plugin.test.js.map +1 -0
- package/dist/plugins/auth/env-config.d.ts +88 -0
- package/dist/plugins/auth/env-config.d.ts.map +1 -0
- package/dist/plugins/auth/env-config.js +489 -0
- package/dist/plugins/auth/env-config.js.map +1 -0
- package/dist/plugins/auth/index.d.ts +14 -0
- package/dist/plugins/auth/index.d.ts.map +1 -0
- package/dist/plugins/auth/index.js +16 -0
- package/dist/plugins/auth/index.js.map +1 -0
- package/dist/plugins/auth/supertokens-adapter.test.d.ts +10 -0
- package/dist/plugins/auth/supertokens-adapter.test.d.ts.map +1 -0
- package/dist/plugins/auth/supertokens-adapter.test.js +486 -0
- package/dist/plugins/auth/supertokens-adapter.test.js.map +1 -0
- package/dist/plugins/auth/types.d.ts +218 -0
- package/dist/plugins/auth/types.d.ts.map +1 -0
- package/dist/plugins/auth/types.js +14 -0
- package/dist/plugins/auth/types.js.map +1 -0
- package/dist/plugins/bans/bans-plugin.d.ts +59 -0
- package/dist/plugins/bans/bans-plugin.d.ts.map +1 -0
- package/dist/plugins/bans/bans-plugin.js +428 -0
- package/dist/plugins/bans/bans-plugin.js.map +1 -0
- package/dist/plugins/bans/index.d.ts +9 -0
- package/dist/plugins/bans/index.d.ts.map +1 -0
- package/dist/plugins/bans/index.js +10 -0
- package/dist/plugins/bans/index.js.map +1 -0
- package/dist/plugins/bans/stores/index.d.ts +7 -0
- package/dist/plugins/bans/stores/index.d.ts.map +1 -0
- package/dist/plugins/bans/stores/index.js +7 -0
- package/dist/plugins/bans/stores/index.js.map +1 -0
- package/dist/plugins/bans/stores/postgres-store.d.ts +29 -0
- package/dist/plugins/bans/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/bans/stores/postgres-store.js +132 -0
- package/dist/plugins/bans/stores/postgres-store.js.map +1 -0
- package/dist/plugins/bans/types.d.ts +128 -0
- package/dist/plugins/bans/types.d.ts.map +1 -0
- package/dist/plugins/bans/types.js +11 -0
- package/dist/plugins/bans/types.js.map +1 -0
- package/dist/plugins/cache-plugin.d.ts +14 -3
- package/dist/plugins/cache-plugin.d.ts.map +1 -1
- package/dist/plugins/cache-plugin.js +27 -7
- package/dist/plugins/cache-plugin.js.map +1 -1
- package/dist/plugins/cache-plugin.test.js +99 -32
- package/dist/plugins/cache-plugin.test.js.map +1 -1
- package/dist/plugins/config-plugin.d.ts +3 -2
- package/dist/plugins/config-plugin.d.ts.map +1 -1
- package/dist/plugins/config-plugin.js +17 -10
- package/dist/plugins/config-plugin.js.map +1 -1
- package/dist/plugins/diagnostics-plugin.d.ts +2 -2
- package/dist/plugins/diagnostics-plugin.d.ts.map +1 -1
- package/dist/plugins/diagnostics-plugin.js +17 -10
- package/dist/plugins/diagnostics-plugin.js.map +1 -1
- package/dist/plugins/entitlements/entitlements-plugin.d.ts +95 -0
- package/dist/plugins/entitlements/entitlements-plugin.d.ts.map +1 -0
- package/dist/plugins/entitlements/entitlements-plugin.js +707 -0
- package/dist/plugins/entitlements/entitlements-plugin.js.map +1 -0
- package/dist/plugins/entitlements/index.d.ts +12 -0
- package/dist/plugins/entitlements/index.d.ts.map +1 -0
- package/dist/plugins/entitlements/index.js +16 -0
- package/dist/plugins/entitlements/index.js.map +1 -0
- package/dist/plugins/entitlements/sources/index.d.ts +9 -0
- package/dist/plugins/entitlements/sources/index.d.ts.map +1 -0
- package/dist/plugins/entitlements/sources/index.js +9 -0
- package/dist/plugins/entitlements/sources/index.js.map +1 -0
- package/dist/plugins/entitlements/sources/postgres-source.d.ts +29 -0
- package/dist/plugins/entitlements/sources/postgres-source.d.ts.map +1 -0
- package/dist/plugins/entitlements/sources/postgres-source.js +169 -0
- package/dist/plugins/entitlements/sources/postgres-source.js.map +1 -0
- package/dist/plugins/entitlements/types.d.ts +232 -0
- package/dist/plugins/entitlements/types.d.ts.map +1 -0
- package/dist/plugins/entitlements/types.js +11 -0
- package/dist/plugins/entitlements/types.js.map +1 -0
- package/dist/plugins/frontend-app-plugin.d.ts +9 -3
- package/dist/plugins/frontend-app-plugin.d.ts.map +1 -1
- package/dist/plugins/frontend-app-plugin.js +14 -9
- package/dist/plugins/frontend-app-plugin.js.map +1 -1
- package/dist/plugins/health-plugin.d.ts +5 -2
- package/dist/plugins/health-plugin.d.ts.map +1 -1
- package/dist/plugins/health-plugin.js +20 -5
- package/dist/plugins/health-plugin.js.map +1 -1
- package/dist/plugins/index.d.ts +10 -2
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +10 -2
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/logs-plugin.d.ts +3 -2
- package/dist/plugins/logs-plugin.d.ts.map +1 -1
- package/dist/plugins/logs-plugin.js +21 -12
- package/dist/plugins/logs-plugin.js.map +1 -1
- package/dist/plugins/postgres-plugin.d.ts +3 -3
- package/dist/plugins/postgres-plugin.d.ts.map +1 -1
- package/dist/plugins/postgres-plugin.js +9 -7
- package/dist/plugins/postgres-plugin.js.map +1 -1
- package/dist/plugins/postgres-plugin.test.js +50 -29
- package/dist/plugins/postgres-plugin.test.js.map +1 -1
- package/dist/plugins/preferences/__tests__/deep-merge.test.d.ts +7 -0
- package/dist/plugins/preferences/__tests__/deep-merge.test.d.ts.map +1 -0
- package/dist/plugins/preferences/__tests__/deep-merge.test.js +215 -0
- package/dist/plugins/preferences/__tests__/deep-merge.test.js.map +1 -0
- package/dist/plugins/preferences/__tests__/preferences-plugin.test.d.ts +7 -0
- package/dist/plugins/preferences/__tests__/preferences-plugin.test.d.ts.map +1 -0
- package/dist/plugins/preferences/__tests__/preferences-plugin.test.js +265 -0
- package/dist/plugins/preferences/__tests__/preferences-plugin.test.js.map +1 -0
- package/dist/plugins/preferences/index.d.ts +12 -0
- package/dist/plugins/preferences/index.d.ts.map +1 -0
- package/dist/plugins/preferences/index.js +13 -0
- package/dist/plugins/preferences/index.js.map +1 -0
- package/dist/plugins/preferences/preferences-plugin.d.ts +39 -0
- package/dist/plugins/preferences/preferences-plugin.d.ts.map +1 -0
- package/dist/plugins/preferences/preferences-plugin.js +226 -0
- package/dist/plugins/preferences/preferences-plugin.js.map +1 -0
- package/dist/plugins/preferences/stores/index.d.ts +9 -0
- package/dist/plugins/preferences/stores/index.d.ts.map +1 -0
- package/dist/plugins/preferences/stores/index.js +9 -0
- package/dist/plugins/preferences/stores/index.js.map +1 -0
- package/dist/plugins/preferences/stores/postgres-store.d.ts +41 -0
- package/dist/plugins/preferences/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/preferences/stores/postgres-store.js +181 -0
- package/dist/plugins/preferences/stores/postgres-store.js.map +1 -0
- package/dist/plugins/preferences/types.d.ts +91 -0
- package/dist/plugins/preferences/types.d.ts.map +1 -0
- package/dist/plugins/preferences/types.js +10 -0
- package/dist/plugins/preferences/types.js.map +1 -0
- package/dist/plugins/users/__tests__/users-plugin.test.d.ts +9 -0
- package/dist/plugins/users/__tests__/users-plugin.test.d.ts.map +1 -0
- package/dist/plugins/users/__tests__/users-plugin.test.js +546 -0
- package/dist/plugins/users/__tests__/users-plugin.test.js.map +1 -0
- package/dist/plugins/users/index.d.ts +12 -0
- package/dist/plugins/users/index.d.ts.map +1 -0
- package/dist/plugins/users/index.js +13 -0
- package/dist/plugins/users/index.js.map +1 -0
- package/dist/plugins/users/stores/index.d.ts +7 -0
- package/dist/plugins/users/stores/index.d.ts.map +1 -0
- package/dist/plugins/users/stores/index.js +7 -0
- package/dist/plugins/users/stores/index.js.map +1 -0
- package/dist/plugins/users/stores/postgres-store.d.ts +28 -0
- package/dist/plugins/users/stores/postgres-store.d.ts.map +1 -0
- package/dist/plugins/users/stores/postgres-store.js +157 -0
- package/dist/plugins/users/stores/postgres-store.js.map +1 -0
- package/dist/plugins/users/types.d.ts +225 -0
- package/dist/plugins/users/types.d.ts.map +1 -0
- package/dist/plugins/users/types.js +12 -0
- package/dist/plugins/users/types.js.map +1 -0
- package/dist/plugins/users/users-plugin.d.ts +45 -0
- package/dist/plugins/users/users-plugin.d.ts.map +1 -0
- package/dist/plugins/users/users-plugin.js +359 -0
- package/dist/plugins/users/users-plugin.js.map +1 -0
- package/dist-ui/assets/index-BY8OxNgO.js +465 -0
- package/dist-ui/assets/index-BY8OxNgO.js.map +1 -0
- package/dist-ui/index.html +1 -1
- package/dist-ui-lib/api/controlPanelApi.d.ts +278 -0
- package/dist-ui-lib/components/ControlPanelApp.d.ts +61 -0
- package/dist-ui-lib/components/index.d.ts +18 -0
- package/dist-ui-lib/config/AppConfig.d.ts +7 -0
- package/dist-ui-lib/dashboard/DashboardWidgetRegistry.d.ts +62 -0
- package/dist-ui-lib/dashboard/DashboardWidgetRenderer.d.ts +8 -0
- package/dist-ui-lib/dashboard/PluginWidgetRenderer.d.ts +19 -0
- package/dist-ui-lib/dashboard/WidgetComponentRegistry.d.ts +48 -0
- package/dist-ui-lib/dashboard/builtInWidgets.d.ts +25 -0
- package/dist-ui-lib/dashboard/index.d.ts +13 -0
- package/dist-ui-lib/dashboard/widgets/ServiceHealthWidget.d.ts +12 -0
- package/dist-ui-lib/dashboard/widgets/index.d.ts +6 -0
- package/dist-ui-lib/index.js +5172 -0
- package/dist-ui-lib/index.js.map +1 -0
- package/dist-ui-lib/pages/AuthPage.d.ts +1 -0
- package/dist-ui-lib/pages/ConfigPage.d.ts +1 -0
- package/dist-ui-lib/pages/DashboardPage.d.ts +1 -0
- package/dist-ui-lib/pages/DiagnosticsPage.d.ts +1 -0
- package/dist-ui-lib/pages/EntitlementsPage.d.ts +17 -0
- package/dist-ui-lib/pages/LogsPage.d.ts +1 -0
- package/dist-ui-lib/pages/NotFoundPage.d.ts +1 -0
- package/dist-ui-lib/pages/PluginPage.d.ts +15 -0
- package/dist-ui-lib/pages/PluginsPage.d.ts +1 -0
- package/dist-ui-lib/pages/SystemPage.d.ts +1 -0
- package/dist-ui-lib/pages/UsersPage.d.ts +22 -0
- package/package.json +24 -7
- package/src/core/control-panel.ts +145 -61
- package/src/core/gateway.ts +863 -403
- package/src/core/index.ts +21 -2
- package/src/core/plugin-registry.ts +716 -0
- package/src/core/types.ts +31 -37
- package/src/index.ts +125 -19
- package/src/plugins/auth/adapters/auth0-adapter.ts +214 -0
- package/src/plugins/auth/adapters/basic-adapter.ts +61 -0
- package/src/plugins/auth/adapters/index.ts +10 -0
- package/src/plugins/auth/adapters/supabase-adapter.ts +149 -0
- package/src/plugins/auth/adapters/supertokens-adapter.ts +326 -0
- package/src/plugins/auth/auth-plugin.test.ts +176 -0
- package/src/plugins/auth/auth-plugin.ts +303 -0
- package/src/plugins/auth/env-config.ts +572 -0
- package/src/plugins/auth/index.ts +42 -0
- package/src/plugins/auth/supertokens-adapter.test.ts +621 -0
- package/src/plugins/auth/types.ts +245 -0
- package/src/plugins/bans/bans-plugin.ts +485 -0
- package/src/plugins/bans/index.ts +31 -0
- package/src/plugins/bans/stores/index.ts +7 -0
- package/src/plugins/bans/stores/postgres-store.ts +195 -0
- package/src/plugins/bans/types.ts +141 -0
- package/src/plugins/cache-plugin.test.ts +108 -32
- package/src/plugins/cache-plugin.ts +40 -9
- package/src/plugins/config-plugin.ts +23 -12
- package/src/plugins/diagnostics-plugin.ts +22 -12
- package/src/plugins/entitlements/entitlements-plugin.ts +820 -0
- package/src/plugins/entitlements/index.ts +51 -0
- package/src/plugins/entitlements/sources/index.ts +9 -0
- package/src/plugins/entitlements/sources/postgres-source.ts +253 -0
- package/src/plugins/entitlements/types.ts +256 -0
- package/src/plugins/frontend-app-plugin.ts +24 -12
- package/src/plugins/health-plugin.ts +27 -7
- package/src/plugins/index.ts +132 -4
- package/src/plugins/logs-plugin.ts +28 -14
- package/src/plugins/postgres-plugin.test.ts +52 -29
- package/src/plugins/postgres-plugin.ts +11 -9
- package/src/plugins/preferences/__tests__/deep-merge.test.ts +242 -0
- package/src/plugins/preferences/__tests__/preferences-plugin.test.ts +350 -0
- package/src/plugins/preferences/index.ts +30 -0
- package/src/plugins/preferences/preferences-plugin.ts +270 -0
- package/src/plugins/preferences/stores/index.ts +9 -0
- package/src/plugins/preferences/stores/postgres-store.ts +252 -0
- package/src/plugins/preferences/types.ts +100 -0
- package/src/plugins/users/__tests__/users-plugin.test.ts +690 -0
- package/src/plugins/users/index.ts +38 -0
- package/src/plugins/users/stores/index.ts +7 -0
- package/src/plugins/users/stores/postgres-store.ts +225 -0
- package/src/plugins/users/types.ts +247 -0
- package/src/plugins/users/users-plugin.ts +418 -0
- package/ui/src/App.tsx +188 -31
- package/ui/src/api/controlPanelApi.ts +453 -1
- package/ui/src/components/ControlPanelApp.tsx +212 -0
- package/ui/src/components/index.ts +62 -0
- package/ui/src/dashboard/DashboardWidgetRegistry.tsx +129 -0
- package/ui/src/dashboard/DashboardWidgetRenderer.tsx +34 -0
- package/ui/src/dashboard/PluginWidgetRenderer.tsx +118 -0
- package/ui/src/dashboard/WidgetComponentRegistry.tsx +120 -0
- package/ui/src/dashboard/builtInWidgets.tsx +35 -0
- package/ui/src/dashboard/index.ts +35 -0
- package/ui/src/dashboard/widgets/ServiceHealthWidget.tsx +140 -0
- package/ui/src/dashboard/widgets/index.ts +7 -0
- package/ui/src/pages/AuthPage.tsx +259 -0
- package/ui/src/pages/DashboardPage.tsx +28 -149
- package/ui/src/pages/EntitlementsPage.tsx +557 -0
- package/ui/src/pages/LogsPage.tsx +174 -8
- package/ui/src/pages/PluginPage.tsx +148 -0
- package/ui/src/pages/PluginsPage.tsx +394 -0
- package/ui/src/pages/SystemPage.tsx +445 -0
- package/ui/src/pages/UsersPage.tsx +837 -0
- package/ui/tsconfig.lib.json +11 -0
- package/ui/vite.lib.config.ts +56 -0
- package/dist-ui/assets/index-CW1BviRn.js +0 -465
- package/dist-ui/assets/index-CW1BviRn.js.map +0 -1
- package/ui/src/pages/HealthPage.tsx +0 -204
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supertokens Auth Adapter
|
|
3
|
+
*
|
|
4
|
+
* Provides Supertokens authentication using EmailPassword and ThirdParty recipes.
|
|
5
|
+
* Supports email/password and social logins (Google, Apple, GitHub).
|
|
6
|
+
*
|
|
7
|
+
* Note: Requires supertokens-node v20+
|
|
8
|
+
*
|
|
9
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
10
|
+
*/
|
|
11
|
+
// Keys for storing data on the request object
|
|
12
|
+
const REQUEST_USER_KEY = '_supertokensUser';
|
|
13
|
+
const REQUEST_RES_KEY = '_supertokensRes';
|
|
14
|
+
const REQUEST_SESSION_KEY = '_supertokensSession';
|
|
15
|
+
/**
|
|
16
|
+
* Create a Supertokens authentication adapter
|
|
17
|
+
*
|
|
18
|
+
* Uses EmailPassword and ThirdParty recipes (Supertokens v20+)
|
|
19
|
+
*/
|
|
20
|
+
export function supertokensAdapter(config) {
|
|
21
|
+
// Track initialization state
|
|
22
|
+
let initialized = false;
|
|
23
|
+
let initializationError = null;
|
|
24
|
+
return {
|
|
25
|
+
name: 'supertokens',
|
|
26
|
+
initialize() {
|
|
27
|
+
// Return middleware that lazily initializes Supertokens
|
|
28
|
+
const initMiddleware = async (req, res, next) => {
|
|
29
|
+
// Store response on request for later use in getUser()
|
|
30
|
+
req[REQUEST_RES_KEY] = res;
|
|
31
|
+
// Skip if already initialized with error
|
|
32
|
+
if (initializationError) {
|
|
33
|
+
return res.status(500).json({
|
|
34
|
+
error: 'Auth Configuration Error',
|
|
35
|
+
message: 'Supertokens is not properly configured. Install supertokens-node package: npm install supertokens-node',
|
|
36
|
+
details: initializationError.message,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// Lazy initialize Supertokens
|
|
40
|
+
if (!initialized) {
|
|
41
|
+
try {
|
|
42
|
+
const supertokens = await import('supertokens-node');
|
|
43
|
+
const Session = await import('supertokens-node/recipe/session');
|
|
44
|
+
const EmailPassword = await import('supertokens-node/recipe/emailpassword');
|
|
45
|
+
const ThirdParty = await import('supertokens-node/recipe/thirdparty');
|
|
46
|
+
// Build recipe list - using any[] for Supertokens internal types
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
+
const recipeList = [];
|
|
49
|
+
// Add EmailPassword recipe if enabled (default: true)
|
|
50
|
+
if (config.enableEmailPassword !== false) {
|
|
51
|
+
recipeList.push(EmailPassword.default.init());
|
|
52
|
+
}
|
|
53
|
+
// Add ThirdParty recipe if any social providers configured
|
|
54
|
+
if (config.socialProviders) {
|
|
55
|
+
// Build provider configurations using Supertokens ProviderInput type
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
+
const providers = [];
|
|
58
|
+
if (config.socialProviders.google) {
|
|
59
|
+
providers.push({
|
|
60
|
+
config: {
|
|
61
|
+
thirdPartyId: 'google',
|
|
62
|
+
clients: [
|
|
63
|
+
{
|
|
64
|
+
clientId: config.socialProviders.google.clientId,
|
|
65
|
+
clientSecret: config.socialProviders.google.clientSecret,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
if (config.socialProviders.apple) {
|
|
72
|
+
// Apple requires keyId, teamId, and privateKey in additionalConfig
|
|
73
|
+
providers.push({
|
|
74
|
+
config: {
|
|
75
|
+
thirdPartyId: 'apple',
|
|
76
|
+
clients: [
|
|
77
|
+
{
|
|
78
|
+
clientId: config.socialProviders.apple.clientId,
|
|
79
|
+
clientSecret: config.socialProviders.apple.clientSecret,
|
|
80
|
+
additionalConfig: {
|
|
81
|
+
keyId: config.socialProviders.apple.keyId,
|
|
82
|
+
teamId: config.socialProviders.apple.teamId,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (config.socialProviders.github) {
|
|
90
|
+
providers.push({
|
|
91
|
+
config: {
|
|
92
|
+
thirdPartyId: 'github',
|
|
93
|
+
clients: [
|
|
94
|
+
{
|
|
95
|
+
clientId: config.socialProviders.github.clientId,
|
|
96
|
+
clientSecret: config.socialProviders.github.clientSecret,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
if (providers.length > 0) {
|
|
103
|
+
recipeList.push(ThirdParty.default.init({
|
|
104
|
+
signInAndUpFeature: {
|
|
105
|
+
providers,
|
|
106
|
+
},
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Always add Session recipe
|
|
111
|
+
recipeList.push(Session.default.init());
|
|
112
|
+
// Initialize Supertokens
|
|
113
|
+
supertokens.default.init({
|
|
114
|
+
framework: 'express',
|
|
115
|
+
supertokens: {
|
|
116
|
+
connectionURI: config.connectionUri,
|
|
117
|
+
apiKey: config.apiKey,
|
|
118
|
+
},
|
|
119
|
+
appInfo: {
|
|
120
|
+
appName: config.appName,
|
|
121
|
+
apiDomain: config.apiDomain,
|
|
122
|
+
websiteDomain: config.websiteDomain,
|
|
123
|
+
apiBasePath: config.apiBasePath ?? '/auth',
|
|
124
|
+
websiteBasePath: config.websiteBasePath ?? '/auth',
|
|
125
|
+
},
|
|
126
|
+
recipeList,
|
|
127
|
+
});
|
|
128
|
+
initialized = true;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
initializationError =
|
|
132
|
+
error instanceof Error ? error : new Error('Failed to initialize Supertokens');
|
|
133
|
+
console.error('[SupertokensAdapter] Initialization error:', error);
|
|
134
|
+
return res.status(500).json({
|
|
135
|
+
error: 'Auth Configuration Error',
|
|
136
|
+
message: 'Supertokens is not properly configured. Install supertokens-node package: npm install supertokens-node',
|
|
137
|
+
details: initializationError.message,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
next();
|
|
142
|
+
};
|
|
143
|
+
// Supertokens middleware for handling auth routes
|
|
144
|
+
const supertokensMiddleware = async (req, res, next) => {
|
|
145
|
+
if (!initialized) {
|
|
146
|
+
return next();
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
const { middleware } = await import('supertokens-node/framework/express');
|
|
150
|
+
middleware()(req, res, next);
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
next();
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
return [initMiddleware, supertokensMiddleware];
|
|
157
|
+
},
|
|
158
|
+
isAuthenticated(req) {
|
|
159
|
+
const extReq = req;
|
|
160
|
+
// Check if we already validated this request
|
|
161
|
+
if (extReq[REQUEST_USER_KEY]) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
// Check if session was already retrieved
|
|
165
|
+
if (extReq[REQUEST_SESSION_KEY]) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
// For synchronous check, we can only check if session cookies exist
|
|
169
|
+
// Full validation happens in getUser()
|
|
170
|
+
// Supertokens uses cookies, so we check for session tokens
|
|
171
|
+
const cookies = req.cookies || {};
|
|
172
|
+
const accessToken = cookies.sAccessToken;
|
|
173
|
+
const refreshToken = cookies.sRefreshToken;
|
|
174
|
+
// Also check for Authorization header (for API clients)
|
|
175
|
+
const authHeader = req.headers.authorization;
|
|
176
|
+
const hasBearerToken = authHeader?.startsWith('Bearer ');
|
|
177
|
+
return !!(accessToken || refreshToken || hasBearerToken);
|
|
178
|
+
},
|
|
179
|
+
async getUser(req) {
|
|
180
|
+
const extReq = req;
|
|
181
|
+
// Return cached user if available
|
|
182
|
+
const cachedUser = extReq[REQUEST_USER_KEY];
|
|
183
|
+
if (cachedUser) {
|
|
184
|
+
return cachedUser;
|
|
185
|
+
}
|
|
186
|
+
if (!initialized) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
// Get response object stored during middleware
|
|
190
|
+
const res = extReq[REQUEST_RES_KEY];
|
|
191
|
+
if (!res) {
|
|
192
|
+
console.error('[SupertokensAdapter] Response object not found on request');
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
const Session = await import('supertokens-node/recipe/session');
|
|
197
|
+
const supertokens = await import('supertokens-node');
|
|
198
|
+
// Get session - sessionRequired: false means it won't throw if no session
|
|
199
|
+
const session = await Session.default.getSession(req, res, {
|
|
200
|
+
sessionRequired: false,
|
|
201
|
+
});
|
|
202
|
+
if (!session) {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
// Cache session for isAuthenticated check
|
|
206
|
+
extReq[REQUEST_SESSION_KEY] = session;
|
|
207
|
+
const userId = session.getUserId();
|
|
208
|
+
// Get user info from Supertokens
|
|
209
|
+
const userInfo = await supertokens.default.getUser(userId);
|
|
210
|
+
if (!userInfo) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
// Get roles from session access token payload if available
|
|
214
|
+
const accessTokenPayload = session.getAccessTokenPayload();
|
|
215
|
+
const roles = accessTokenPayload?.roles || [];
|
|
216
|
+
// Map Supertokens user to AuthenticatedUser
|
|
217
|
+
const user = {
|
|
218
|
+
id: userId,
|
|
219
|
+
email: userInfo.emails?.[0] ?? '',
|
|
220
|
+
name: accessTokenPayload?.name ||
|
|
221
|
+
userInfo.thirdParty?.[0]?.userId ||
|
|
222
|
+
userInfo.emails?.[0]?.split('@')[0],
|
|
223
|
+
picture: accessTokenPayload?.picture,
|
|
224
|
+
emailVerified: userInfo.emails?.[0] ? true : false,
|
|
225
|
+
roles,
|
|
226
|
+
raw: {
|
|
227
|
+
...userInfo,
|
|
228
|
+
sessionHandle: session.getHandle(),
|
|
229
|
+
accessTokenPayload,
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
// Cache on request object
|
|
233
|
+
extReq[REQUEST_USER_KEY] = user;
|
|
234
|
+
return user;
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
console.error('[SupertokensAdapter] Error getting user:', error);
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
hasRoles(req, roles) {
|
|
242
|
+
const extReq = req;
|
|
243
|
+
const user = extReq[REQUEST_USER_KEY];
|
|
244
|
+
if (!user?.roles)
|
|
245
|
+
return false;
|
|
246
|
+
return roles.every((role) => user.roles?.includes(role));
|
|
247
|
+
},
|
|
248
|
+
getAccessToken(_req) {
|
|
249
|
+
// Supertokens uses session cookies, not access tokens
|
|
250
|
+
// Return null as per the design decision
|
|
251
|
+
return null;
|
|
252
|
+
},
|
|
253
|
+
onUnauthorized(_req, res) {
|
|
254
|
+
res.status(401).json({
|
|
255
|
+
error: 'Unauthorized',
|
|
256
|
+
message: 'Authentication required. Please sign in.',
|
|
257
|
+
hint: 'Use the /auth endpoints to authenticate',
|
|
258
|
+
});
|
|
259
|
+
},
|
|
260
|
+
async shutdown() {
|
|
261
|
+
// Supertokens doesn't require explicit cleanup
|
|
262
|
+
initialized = false;
|
|
263
|
+
initializationError = null;
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=supertokens-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supertokens-adapter.js","sourceRoot":"","sources":["../../../../src/plugins/auth/adapters/supertokens-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
import type { Request, RequestHandler } from 'express';
|
|
10
|
+
import type { Plugin } from '../../core/plugin-registry.js';
|
|
11
|
+
import type { AuthPluginConfig, AuthenticatedUser } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Create the Auth plugin
|
|
14
|
+
*/
|
|
15
|
+
export declare function createAuthPlugin(config: AuthPluginConfig): Plugin;
|
|
16
|
+
/**
|
|
17
|
+
* Check if the current request is authenticated
|
|
18
|
+
*/
|
|
19
|
+
export declare function isAuthenticated(req: Request): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Get the authenticated user from the request
|
|
22
|
+
*/
|
|
23
|
+
export declare function getAuthenticatedUser(req: Request): AuthenticatedUser | null;
|
|
24
|
+
/**
|
|
25
|
+
* Get the access token from the request
|
|
26
|
+
*/
|
|
27
|
+
export declare function getAccessToken(req: Request): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Middleware to require authentication
|
|
30
|
+
*/
|
|
31
|
+
export declare function requireAuth(): RequestHandler;
|
|
32
|
+
/**
|
|
33
|
+
* Middleware to require specific roles
|
|
34
|
+
*/
|
|
35
|
+
export declare function requireRoles(...roles: string[]): RequestHandler;
|
|
36
|
+
/**
|
|
37
|
+
* Middleware to require any of the specified roles
|
|
38
|
+
*/
|
|
39
|
+
export declare function requireAnyRole(...roles: string[]): RequestHandler;
|
|
40
|
+
//# sourceMappingURL=auth-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/auth-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAA0B,cAAc,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAgC,MAAM,+BAA+B,CAAC;AAC1F,OAAO,KAAK,EACV,gBAAgB,EAEhB,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAsLjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAGrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAG3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG1D;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,cAAc,CAU5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAuB/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAuBjE"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"auth-plugin.test.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/auth-plugin.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|