@qwickapps/server 1.3.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 +154 -0
- package/dist/core/control-panel.d.ts.map +1 -1
- package/dist/core/control-panel.js +30 -2
- package/dist/core/control-panel.js.map +1 -1
- package/dist/core/plugin-registry.d.ts +36 -0
- package/dist/core/plugin-registry.d.ts.map +1 -1
- package/dist/core/plugin-registry.js +26 -0
- package/dist/core/plugin-registry.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/auth/adapters/index.d.ts +1 -0
- package/dist/plugins/auth/adapters/index.d.ts.map +1 -1
- package/dist/plugins/auth/adapters/index.js +1 -0
- package/dist/plugins/auth/adapters/index.js.map +1 -1
- package/dist/plugins/auth/adapters/supabase-adapter.d.ts.map +1 -1
- package/dist/plugins/auth/adapters/supabase-adapter.js.map +1 -1
- 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/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 +3 -1
- package/dist/plugins/auth/index.d.ts.map +1 -1
- package/dist/plugins/auth/index.js +3 -0
- package/dist/plugins/auth/index.js.map +1 -1
- 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 +70 -0
- package/dist/plugins/auth/types.d.ts.map +1 -1
- package/dist/plugins/auth/types.js.map +1 -1
- package/dist/plugins/cache-plugin.test.js +3 -0
- package/dist/plugins/cache-plugin.test.js.map +1 -1
- package/dist/plugins/index.d.ts +4 -2
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +3 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/postgres-plugin.test.js +3 -0
- 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 +2 -2
- package/dist/plugins/users/index.d.ts.map +1 -1
- package/dist/plugins/users/index.js +1 -1
- package/dist/plugins/users/index.js.map +1 -1
- package/dist/plugins/users/types.d.ts +36 -0
- package/dist/plugins/users/types.d.ts.map +1 -1
- package/dist/plugins/users/users-plugin.d.ts +8 -2
- package/dist/plugins/users/users-plugin.d.ts.map +1 -1
- package/dist/plugins/users/users-plugin.js +122 -5
- package/dist/plugins/users/users-plugin.js.map +1 -1
- package/dist-ui/assets/{index-Bsp2ntcw.js → index-BY8OxNgO.js} +112 -112
- 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 +53 -7
- package/dist-ui-lib/dashboard/WidgetComponentRegistry.d.ts +9 -5
- package/dist-ui-lib/dashboard/builtInWidgets.d.ts +7 -1
- package/dist-ui-lib/index.js +2382 -3651
- package/dist-ui-lib/index.js.map +1 -1
- package/dist-ui-lib/pages/AuthPage.d.ts +1 -0
- package/dist-ui-lib/pages/PluginsPage.d.ts +1 -0
- package/package.json +7 -2
- package/src/core/control-panel.ts +33 -2
- package/src/core/plugin-registry.ts +63 -0
- package/src/index.ts +7 -0
- package/src/plugins/auth/adapters/index.ts +1 -0
- package/src/plugins/auth/adapters/supabase-adapter.ts +22 -14
- package/src/plugins/auth/adapters/supertokens-adapter.ts +326 -0
- package/src/plugins/auth/env-config.ts +572 -0
- package/src/plugins/auth/index.ts +9 -0
- package/src/plugins/auth/supertokens-adapter.test.ts +621 -0
- package/src/plugins/auth/types.ts +80 -0
- package/src/plugins/cache-plugin.test.ts +3 -0
- package/src/plugins/index.ts +26 -0
- package/src/plugins/postgres-plugin.test.ts +3 -0
- 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 +3 -0
- package/src/plugins/users/types.ts +38 -0
- package/src/plugins/users/users-plugin.ts +142 -5
- package/ui/src/App.tsx +4 -1
- package/ui/src/api/controlPanelApi.ts +100 -1
- package/ui/src/components/ControlPanelApp.tsx +3 -0
- package/ui/src/dashboard/PluginWidgetRenderer.tsx +13 -10
- package/ui/src/dashboard/WidgetComponentRegistry.tsx +13 -9
- package/ui/src/dashboard/builtInWidgets.tsx +8 -2
- package/ui/src/pages/AuthPage.tsx +259 -0
- package/ui/src/pages/PluginsPage.tsx +394 -0
- package/ui/vite.lib.config.ts +5 -0
- package/dist-ui/assets/index-Bsp2ntcw.js.map +0 -1
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Plugin Environment Configuration
|
|
3
|
+
*
|
|
4
|
+
* Factory function and utilities for configuring auth adapters via environment variables.
|
|
5
|
+
* Supports all adapters: Auth0, Supabase, Supertokens, Basic.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
import { createAuthPlugin } from './auth-plugin.js';
|
|
10
|
+
import { auth0Adapter } from './adapters/auth0-adapter.js';
|
|
11
|
+
import { supabaseAdapter } from './adapters/supabase-adapter.js';
|
|
12
|
+
import { supertokensAdapter } from './adapters/supertokens-adapter.js';
|
|
13
|
+
import { basicAdapter } from './adapters/basic-adapter.js';
|
|
14
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
15
|
+
// Module State
|
|
16
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
17
|
+
let currentStatus = {
|
|
18
|
+
state: 'disabled',
|
|
19
|
+
adapter: null,
|
|
20
|
+
};
|
|
21
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
22
|
+
// Environment Variable Helpers
|
|
23
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
24
|
+
/**
|
|
25
|
+
* Get an environment variable, treating empty strings as undefined
|
|
26
|
+
*/
|
|
27
|
+
function getEnv(key) {
|
|
28
|
+
const value = process.env[key];
|
|
29
|
+
if (value === undefined || value === null || value.trim() === '') {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return value.trim();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse a boolean environment variable
|
|
36
|
+
* Supports: true/false, 1/0, yes/no (case-insensitive)
|
|
37
|
+
*/
|
|
38
|
+
function getEnvBool(key, defaultValue) {
|
|
39
|
+
const value = getEnv(key);
|
|
40
|
+
if (value === undefined) {
|
|
41
|
+
return defaultValue;
|
|
42
|
+
}
|
|
43
|
+
const lower = value.toLowerCase();
|
|
44
|
+
if (['true', '1', 'yes'].includes(lower)) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
if (['false', '0', 'no'].includes(lower)) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return defaultValue;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Parse a comma-separated list environment variable
|
|
54
|
+
*/
|
|
55
|
+
function getEnvList(key) {
|
|
56
|
+
const value = getEnv(key);
|
|
57
|
+
if (value === undefined) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return value
|
|
61
|
+
.split(',')
|
|
62
|
+
.map((s) => s.trim())
|
|
63
|
+
.filter((s) => s.length > 0);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Mask a sensitive value for display
|
|
67
|
+
*/
|
|
68
|
+
function maskValue(value) {
|
|
69
|
+
if (value.length <= 4) {
|
|
70
|
+
return '****';
|
|
71
|
+
}
|
|
72
|
+
return value.substring(0, 2) + '*'.repeat(Math.min(value.length - 4, 20)) + value.substring(value.length - 2);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse Supertokens configuration from environment variables
|
|
76
|
+
*/
|
|
77
|
+
function parseSupertokensEnv() {
|
|
78
|
+
const errors = [];
|
|
79
|
+
const connectionUri = getEnv('SUPERTOKENS_CONNECTION_URI');
|
|
80
|
+
const appName = getEnv('SUPERTOKENS_APP_NAME');
|
|
81
|
+
const apiDomain = getEnv('SUPERTOKENS_API_DOMAIN');
|
|
82
|
+
const websiteDomain = getEnv('SUPERTOKENS_WEBSITE_DOMAIN');
|
|
83
|
+
// Check required vars
|
|
84
|
+
if (!connectionUri)
|
|
85
|
+
errors.push('SUPERTOKENS_CONNECTION_URI');
|
|
86
|
+
if (!appName)
|
|
87
|
+
errors.push('SUPERTOKENS_APP_NAME');
|
|
88
|
+
if (!apiDomain)
|
|
89
|
+
errors.push('SUPERTOKENS_API_DOMAIN');
|
|
90
|
+
if (!websiteDomain)
|
|
91
|
+
errors.push('SUPERTOKENS_WEBSITE_DOMAIN');
|
|
92
|
+
if (errors.length > 0) {
|
|
93
|
+
return { config: null, errors };
|
|
94
|
+
}
|
|
95
|
+
// Build config
|
|
96
|
+
const config = {
|
|
97
|
+
connectionUri: connectionUri,
|
|
98
|
+
appName: appName,
|
|
99
|
+
apiDomain: apiDomain,
|
|
100
|
+
websiteDomain: websiteDomain,
|
|
101
|
+
apiKey: getEnv('SUPERTOKENS_API_KEY'),
|
|
102
|
+
apiBasePath: getEnv('SUPERTOKENS_API_BASE_PATH') ?? '/auth',
|
|
103
|
+
websiteBasePath: getEnv('SUPERTOKENS_WEBSITE_BASE_PATH') ?? '/auth',
|
|
104
|
+
enableEmailPassword: getEnvBool('SUPERTOKENS_ENABLE_EMAIL_PASSWORD', true),
|
|
105
|
+
};
|
|
106
|
+
// Parse social providers
|
|
107
|
+
const googleClientId = getEnv('SUPERTOKENS_GOOGLE_CLIENT_ID');
|
|
108
|
+
const googleClientSecret = getEnv('SUPERTOKENS_GOOGLE_CLIENT_SECRET');
|
|
109
|
+
const githubClientId = getEnv('SUPERTOKENS_GITHUB_CLIENT_ID');
|
|
110
|
+
const githubClientSecret = getEnv('SUPERTOKENS_GITHUB_CLIENT_SECRET');
|
|
111
|
+
const appleClientId = getEnv('SUPERTOKENS_APPLE_CLIENT_ID');
|
|
112
|
+
const appleClientSecret = getEnv('SUPERTOKENS_APPLE_CLIENT_SECRET');
|
|
113
|
+
const appleKeyId = getEnv('SUPERTOKENS_APPLE_KEY_ID');
|
|
114
|
+
const appleTeamId = getEnv('SUPERTOKENS_APPLE_TEAM_ID');
|
|
115
|
+
// Only add social providers if both client ID and secret are provided
|
|
116
|
+
if (googleClientId && googleClientSecret) {
|
|
117
|
+
config.socialProviders = config.socialProviders || {};
|
|
118
|
+
config.socialProviders.google = {
|
|
119
|
+
clientId: googleClientId,
|
|
120
|
+
clientSecret: googleClientSecret,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (githubClientId && githubClientSecret) {
|
|
124
|
+
config.socialProviders = config.socialProviders || {};
|
|
125
|
+
config.socialProviders.github = {
|
|
126
|
+
clientId: githubClientId,
|
|
127
|
+
clientSecret: githubClientSecret,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (appleClientId && appleClientSecret && appleKeyId && appleTeamId) {
|
|
131
|
+
config.socialProviders = config.socialProviders || {};
|
|
132
|
+
config.socialProviders.apple = {
|
|
133
|
+
clientId: appleClientId,
|
|
134
|
+
clientSecret: appleClientSecret,
|
|
135
|
+
keyId: appleKeyId,
|
|
136
|
+
teamId: appleTeamId,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return { config, errors: [] };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Parse Auth0 configuration from environment variables
|
|
143
|
+
*/
|
|
144
|
+
function parseAuth0Env() {
|
|
145
|
+
const errors = [];
|
|
146
|
+
const domain = getEnv('AUTH0_DOMAIN');
|
|
147
|
+
const clientId = getEnv('AUTH0_CLIENT_ID');
|
|
148
|
+
const clientSecret = getEnv('AUTH0_CLIENT_SECRET');
|
|
149
|
+
const baseUrl = getEnv('AUTH0_BASE_URL');
|
|
150
|
+
const secret = getEnv('AUTH0_SECRET');
|
|
151
|
+
// Check required vars
|
|
152
|
+
if (!domain)
|
|
153
|
+
errors.push('AUTH0_DOMAIN');
|
|
154
|
+
if (!clientId)
|
|
155
|
+
errors.push('AUTH0_CLIENT_ID');
|
|
156
|
+
if (!clientSecret)
|
|
157
|
+
errors.push('AUTH0_CLIENT_SECRET');
|
|
158
|
+
if (!baseUrl)
|
|
159
|
+
errors.push('AUTH0_BASE_URL');
|
|
160
|
+
if (!secret)
|
|
161
|
+
errors.push('AUTH0_SECRET');
|
|
162
|
+
if (errors.length > 0) {
|
|
163
|
+
return { config: null, errors };
|
|
164
|
+
}
|
|
165
|
+
// Build config
|
|
166
|
+
const config = {
|
|
167
|
+
domain: domain,
|
|
168
|
+
clientId: clientId,
|
|
169
|
+
clientSecret: clientSecret,
|
|
170
|
+
baseUrl: baseUrl,
|
|
171
|
+
secret: secret,
|
|
172
|
+
audience: getEnv('AUTH0_AUDIENCE'),
|
|
173
|
+
scopes: getEnvList('AUTH0_SCOPES') ?? ['openid', 'profile', 'email'],
|
|
174
|
+
allowedRoles: getEnvList('AUTH0_ALLOWED_ROLES'),
|
|
175
|
+
allowedDomains: getEnvList('AUTH0_ALLOWED_DOMAINS'),
|
|
176
|
+
exposeAccessToken: getEnvBool('AUTH0_EXPOSE_ACCESS_TOKEN', false),
|
|
177
|
+
routes: {
|
|
178
|
+
login: getEnv('AUTH0_LOGIN_PATH') ?? '/login',
|
|
179
|
+
logout: getEnv('AUTH0_LOGOUT_PATH') ?? '/logout',
|
|
180
|
+
callback: getEnv('AUTH0_CALLBACK_PATH') ?? '/callback',
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
return { config, errors: [] };
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Parse Supabase configuration from environment variables
|
|
187
|
+
*/
|
|
188
|
+
function parseSupabaseEnv() {
|
|
189
|
+
const errors = [];
|
|
190
|
+
const url = getEnv('SUPABASE_URL');
|
|
191
|
+
const anonKey = getEnv('SUPABASE_ANON_KEY');
|
|
192
|
+
// Check required vars
|
|
193
|
+
if (!url)
|
|
194
|
+
errors.push('SUPABASE_URL');
|
|
195
|
+
if (!anonKey)
|
|
196
|
+
errors.push('SUPABASE_ANON_KEY');
|
|
197
|
+
if (errors.length > 0) {
|
|
198
|
+
return { config: null, errors };
|
|
199
|
+
}
|
|
200
|
+
const config = {
|
|
201
|
+
url: url,
|
|
202
|
+
anonKey: anonKey,
|
|
203
|
+
};
|
|
204
|
+
return { config, errors: [] };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Parse Basic Auth configuration from environment variables
|
|
208
|
+
*/
|
|
209
|
+
function parseBasicAuthEnv() {
|
|
210
|
+
const errors = [];
|
|
211
|
+
const username = getEnv('BASIC_AUTH_USERNAME');
|
|
212
|
+
const password = getEnv('BASIC_AUTH_PASSWORD');
|
|
213
|
+
// Check required vars
|
|
214
|
+
if (!username)
|
|
215
|
+
errors.push('BASIC_AUTH_USERNAME');
|
|
216
|
+
if (!password)
|
|
217
|
+
errors.push('BASIC_AUTH_PASSWORD');
|
|
218
|
+
if (errors.length > 0) {
|
|
219
|
+
return { config: null, errors };
|
|
220
|
+
}
|
|
221
|
+
const config = {
|
|
222
|
+
username: username,
|
|
223
|
+
password: password,
|
|
224
|
+
realm: getEnv('BASIC_AUTH_REALM') ?? 'Protected',
|
|
225
|
+
};
|
|
226
|
+
return { config, errors: [] };
|
|
227
|
+
}
|
|
228
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
229
|
+
// Factory Function
|
|
230
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
231
|
+
/**
|
|
232
|
+
* Valid adapter names
|
|
233
|
+
*/
|
|
234
|
+
const VALID_ADAPTERS = ['supertokens', 'auth0', 'supabase', 'basic'];
|
|
235
|
+
/**
|
|
236
|
+
* Create an auth plugin configured from environment variables.
|
|
237
|
+
*
|
|
238
|
+
* The plugin state depends on environment configuration:
|
|
239
|
+
* - **disabled**: AUTH_ADAPTER not set - no authentication middleware is applied
|
|
240
|
+
* - **enabled**: Valid configuration - adapter is active and working
|
|
241
|
+
* - **error**: Invalid configuration - plugin is disabled with error details
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* ```typescript
|
|
245
|
+
* // Zero-config setup - reads everything from env vars
|
|
246
|
+
* const authPlugin = createAuthPluginFromEnv();
|
|
247
|
+
*
|
|
248
|
+
* // With overrides
|
|
249
|
+
* const authPlugin = createAuthPluginFromEnv({
|
|
250
|
+
* excludePaths: ['/health', '/metrics'],
|
|
251
|
+
* authRequired: true,
|
|
252
|
+
* });
|
|
253
|
+
* ```
|
|
254
|
+
*
|
|
255
|
+
* @param options - Optional overrides (env vars take precedence for adapter config)
|
|
256
|
+
* @returns A Plugin instance
|
|
257
|
+
*/
|
|
258
|
+
export function createAuthPluginFromEnv(options) {
|
|
259
|
+
const adapterName = getEnv('AUTH_ADAPTER')?.toLowerCase();
|
|
260
|
+
// No adapter specified - return disabled plugin
|
|
261
|
+
if (!adapterName) {
|
|
262
|
+
currentStatus = {
|
|
263
|
+
state: 'disabled',
|
|
264
|
+
adapter: null,
|
|
265
|
+
};
|
|
266
|
+
return createDisabledPlugin();
|
|
267
|
+
}
|
|
268
|
+
// Validate adapter name
|
|
269
|
+
if (!VALID_ADAPTERS.includes(adapterName)) {
|
|
270
|
+
const error = `Invalid AUTH_ADAPTER value: "${adapterName}". Valid options: ${VALID_ADAPTERS.join(', ')}`;
|
|
271
|
+
currentStatus = {
|
|
272
|
+
state: 'error',
|
|
273
|
+
adapter: null,
|
|
274
|
+
error,
|
|
275
|
+
};
|
|
276
|
+
return createErrorPlugin(error);
|
|
277
|
+
}
|
|
278
|
+
// Parse adapter-specific configuration
|
|
279
|
+
let parseResult;
|
|
280
|
+
switch (adapterName) {
|
|
281
|
+
case 'supertokens':
|
|
282
|
+
parseResult = parseSupertokensEnv();
|
|
283
|
+
break;
|
|
284
|
+
case 'auth0':
|
|
285
|
+
parseResult = parseAuth0Env();
|
|
286
|
+
break;
|
|
287
|
+
case 'supabase':
|
|
288
|
+
parseResult = parseSupabaseEnv();
|
|
289
|
+
break;
|
|
290
|
+
case 'basic':
|
|
291
|
+
parseResult = parseBasicAuthEnv();
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
// Check for parsing errors
|
|
295
|
+
if (parseResult.errors.length > 0) {
|
|
296
|
+
const error = `Missing required environment variables for ${adapterName} adapter: ${parseResult.errors.join(', ')}`;
|
|
297
|
+
currentStatus = {
|
|
298
|
+
state: 'error',
|
|
299
|
+
adapter: adapterName,
|
|
300
|
+
error,
|
|
301
|
+
missingVars: parseResult.errors,
|
|
302
|
+
};
|
|
303
|
+
return createErrorPlugin(error);
|
|
304
|
+
}
|
|
305
|
+
// Create the adapter
|
|
306
|
+
let adapter;
|
|
307
|
+
switch (adapterName) {
|
|
308
|
+
case 'supertokens':
|
|
309
|
+
adapter = supertokensAdapter(parseResult.config);
|
|
310
|
+
break;
|
|
311
|
+
case 'auth0':
|
|
312
|
+
adapter = auth0Adapter(parseResult.config);
|
|
313
|
+
break;
|
|
314
|
+
case 'supabase':
|
|
315
|
+
adapter = supabaseAdapter(parseResult.config);
|
|
316
|
+
break;
|
|
317
|
+
case 'basic':
|
|
318
|
+
adapter = basicAdapter(parseResult.config);
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
// Build plugin configuration
|
|
322
|
+
const excludePaths = options?.excludePaths ?? getEnvList('AUTH_EXCLUDE_PATHS') ?? [];
|
|
323
|
+
const authRequired = options?.authRequired ?? getEnvBool('AUTH_REQUIRED', true);
|
|
324
|
+
const debug = options?.debug ?? getEnvBool('AUTH_DEBUG', false);
|
|
325
|
+
const pluginConfig = {
|
|
326
|
+
adapter,
|
|
327
|
+
excludePaths,
|
|
328
|
+
authRequired,
|
|
329
|
+
debug,
|
|
330
|
+
onUnauthorized: options?.onUnauthorized,
|
|
331
|
+
};
|
|
332
|
+
// Update status
|
|
333
|
+
currentStatus = {
|
|
334
|
+
state: 'enabled',
|
|
335
|
+
adapter: adapterName,
|
|
336
|
+
config: getMaskedConfig(adapterName),
|
|
337
|
+
};
|
|
338
|
+
// Create the plugin
|
|
339
|
+
const basePlugin = createAuthPlugin(pluginConfig);
|
|
340
|
+
// Wrap to add config status routes
|
|
341
|
+
return {
|
|
342
|
+
...basePlugin,
|
|
343
|
+
async onStart(pluginConfig, registry) {
|
|
344
|
+
// Call base plugin onStart
|
|
345
|
+
await basePlugin.onStart?.(pluginConfig, registry);
|
|
346
|
+
// Add config status routes
|
|
347
|
+
registerConfigRoutes(registry);
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
352
|
+
// Status & Config API
|
|
353
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
354
|
+
/**
|
|
355
|
+
* Get current auth plugin status
|
|
356
|
+
*/
|
|
357
|
+
export function getAuthStatus() {
|
|
358
|
+
return { ...currentStatus };
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get masked configuration for the current adapter
|
|
362
|
+
*/
|
|
363
|
+
function getMaskedConfig(adapter) {
|
|
364
|
+
const config = {};
|
|
365
|
+
// Sensitive keys that should be masked
|
|
366
|
+
const sensitiveKeys = [
|
|
367
|
+
'SECRET',
|
|
368
|
+
'PASSWORD',
|
|
369
|
+
'KEY',
|
|
370
|
+
'TOKEN',
|
|
371
|
+
'CREDENTIAL',
|
|
372
|
+
'ANON_KEY',
|
|
373
|
+
'API_KEY',
|
|
374
|
+
'CLIENT_SECRET',
|
|
375
|
+
];
|
|
376
|
+
const isSensitive = (key) => {
|
|
377
|
+
const upper = key.toUpperCase();
|
|
378
|
+
return sensitiveKeys.some((s) => upper.includes(s));
|
|
379
|
+
};
|
|
380
|
+
// Get all env vars for the adapter
|
|
381
|
+
const prefixes = {
|
|
382
|
+
supertokens: ['SUPERTOKENS_'],
|
|
383
|
+
auth0: ['AUTH0_'],
|
|
384
|
+
supabase: ['SUPABASE_'],
|
|
385
|
+
basic: ['BASIC_AUTH_'],
|
|
386
|
+
};
|
|
387
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
388
|
+
const matchesPrefix = prefixes[adapter].some((p) => key.startsWith(p));
|
|
389
|
+
if (matchesPrefix && value) {
|
|
390
|
+
config[key] = isSensitive(key) ? maskValue(value) : value;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Add general auth vars
|
|
394
|
+
const generalVars = ['AUTH_ADAPTER', 'AUTH_REQUIRED', 'AUTH_EXCLUDE_PATHS', 'AUTH_DEBUG'];
|
|
395
|
+
for (const key of generalVars) {
|
|
396
|
+
const value = process.env[key];
|
|
397
|
+
if (value) {
|
|
398
|
+
config[key] = value;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return config;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Register config API routes
|
|
405
|
+
*/
|
|
406
|
+
function registerConfigRoutes(registry) {
|
|
407
|
+
// GET /api/auth/config/status - Get current auth status
|
|
408
|
+
registry.addRoute({
|
|
409
|
+
method: 'get',
|
|
410
|
+
path: '/api/auth/config/status',
|
|
411
|
+
pluginId: 'auth',
|
|
412
|
+
handler: (_req, res) => {
|
|
413
|
+
res.json(getAuthStatus());
|
|
414
|
+
},
|
|
415
|
+
});
|
|
416
|
+
// GET /api/auth/config - Get current configuration (masked)
|
|
417
|
+
registry.addRoute({
|
|
418
|
+
method: 'get',
|
|
419
|
+
path: '/api/auth/config',
|
|
420
|
+
pluginId: 'auth',
|
|
421
|
+
handler: (_req, res) => {
|
|
422
|
+
const status = getAuthStatus();
|
|
423
|
+
res.json({
|
|
424
|
+
state: status.state,
|
|
425
|
+
adapter: status.adapter,
|
|
426
|
+
config: status.config || {},
|
|
427
|
+
error: status.error,
|
|
428
|
+
missingVars: status.missingVars,
|
|
429
|
+
});
|
|
430
|
+
},
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
434
|
+
// Disabled & Error Plugins
|
|
435
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
436
|
+
/**
|
|
437
|
+
* Create a disabled plugin (no auth middleware)
|
|
438
|
+
*/
|
|
439
|
+
function createDisabledPlugin() {
|
|
440
|
+
return {
|
|
441
|
+
id: 'auth',
|
|
442
|
+
name: 'Auth Plugin (Disabled)',
|
|
443
|
+
version: '1.0.0',
|
|
444
|
+
async onStart(_pluginConfig, registry) {
|
|
445
|
+
const logger = registry.getLogger('auth');
|
|
446
|
+
logger.info('Auth plugin disabled - AUTH_ADAPTER not set');
|
|
447
|
+
// Register status routes even when disabled
|
|
448
|
+
registerConfigRoutes(registry);
|
|
449
|
+
},
|
|
450
|
+
async onStop() {
|
|
451
|
+
// Nothing to cleanup
|
|
452
|
+
},
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Create an error plugin (auth disabled due to configuration error)
|
|
457
|
+
*/
|
|
458
|
+
function createErrorPlugin(error) {
|
|
459
|
+
return {
|
|
460
|
+
id: 'auth',
|
|
461
|
+
name: 'Auth Plugin (Error)',
|
|
462
|
+
version: '1.0.0',
|
|
463
|
+
async onStart(_pluginConfig, registry) {
|
|
464
|
+
const logger = registry.getLogger('auth');
|
|
465
|
+
logger.error(`Auth plugin error: ${error}`);
|
|
466
|
+
// Register status routes so admin can see the error
|
|
467
|
+
registerConfigRoutes(registry);
|
|
468
|
+
},
|
|
469
|
+
async onStop() {
|
|
470
|
+
// Nothing to cleanup
|
|
471
|
+
},
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
475
|
+
// Exports for Testing
|
|
476
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
477
|
+
// Export internal functions for testing
|
|
478
|
+
export const __testing = {
|
|
479
|
+
parseSupertokensEnv,
|
|
480
|
+
parseAuth0Env,
|
|
481
|
+
parseSupabaseEnv,
|
|
482
|
+
parseBasicAuthEnv,
|
|
483
|
+
getEnv,
|
|
484
|
+
getEnvBool,
|
|
485
|
+
getEnvList,
|
|
486
|
+
maskValue,
|
|
487
|
+
VALID_ADAPTERS,
|
|
488
|
+
};
|
|
489
|
+
//# sourceMappingURL=env-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-config.js","sourceRoot":"","sources":["../../../src/plugins/auth/env-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
5
5
|
*/
|
|
6
6
|
export { createAuthPlugin, isAuthenticated, getAuthenticatedUser, getAccessToken, requireAuth, requireRoles, requireAnyRole, } from './auth-plugin.js';
|
|
7
|
-
export
|
|
7
|
+
export { createAuthPluginFromEnv, getAuthStatus } from './env-config.js';
|
|
8
|
+
export type { AuthPluginConfig, AuthAdapter, AuthenticatedUser, AuthenticatedRequest, Auth0AdapterConfig, SupabaseAdapterConfig, BasicAdapterConfig, SupertokensAdapterConfig, AuthPluginState, AuthEnvPluginOptions, AuthConfigStatus, } from './types.js';
|
|
8
9
|
export { isAuthenticatedRequest } from './types.js';
|
|
9
10
|
export { auth0Adapter } from './adapters/auth0-adapter.js';
|
|
10
11
|
export { basicAdapter } from './adapters/basic-adapter.js';
|
|
11
12
|
export { supabaseAdapter } from './adapters/supabase-adapter.js';
|
|
13
|
+
export { supertokensAdapter } from './adapters/supertokens-adapter.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +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,
|
|
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,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGzE,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EAExB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GACjB,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;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// Main plugin
|
|
7
7
|
export { createAuthPlugin, isAuthenticated, getAuthenticatedUser, getAccessToken, requireAuth, requireRoles, requireAnyRole, } from './auth-plugin.js';
|
|
8
|
+
// Environment-based configuration
|
|
9
|
+
export { createAuthPluginFromEnv, getAuthStatus } from './env-config.js';
|
|
8
10
|
export { isAuthenticatedRequest } from './types.js';
|
|
9
11
|
// Adapters
|
|
10
12
|
export { auth0Adapter } from './adapters/auth0-adapter.js';
|
|
11
13
|
export { basicAdapter } from './adapters/basic-adapter.js';
|
|
12
14
|
export { supabaseAdapter } from './adapters/supabase-adapter.js';
|
|
15
|
+
export { supertokensAdapter } from './adapters/supertokens-adapter.js';
|
|
13
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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;
|
|
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;AAE1B,kCAAkC;AAClC,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAiBzE,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;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supertokens Adapter Tests
|
|
3
|
+
*
|
|
4
|
+
* Unit tests for the Supertokens authentication adapter.
|
|
5
|
+
* Tests against supertokens-node v20+ API.
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 QwickApps.com. All rights reserved.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=supertokens-adapter.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supertokens-adapter.test.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/supertokens-adapter.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|