@morojs/moro 1.0.3 → 1.2.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.
- package/README.md +57 -2
- package/dist/core/auth/morojs-adapter.d.ts +94 -0
- package/dist/core/auth/morojs-adapter.js +288 -0
- package/dist/core/auth/morojs-adapter.js.map +1 -0
- package/dist/core/config/file-loader.d.ts +18 -0
- package/dist/core/config/file-loader.js +345 -0
- package/dist/core/config/file-loader.js.map +1 -0
- package/dist/core/config/index.d.ts +6 -0
- package/dist/core/config/index.js +15 -0
- package/dist/core/config/index.js.map +1 -1
- package/dist/core/config/loader.d.ts +2 -1
- package/dist/core/config/loader.js +15 -2
- package/dist/core/config/loader.js.map +1 -1
- package/dist/core/config/utils.js +50 -3
- package/dist/core/config/utils.js.map +1 -1
- package/dist/core/http/http-server.d.ts +2 -0
- package/dist/core/http/http-server.js +52 -9
- package/dist/core/http/http-server.js.map +1 -1
- package/dist/core/middleware/built-in/auth-helpers.d.ts +124 -0
- package/dist/core/middleware/built-in/auth-helpers.js +338 -0
- package/dist/core/middleware/built-in/auth-helpers.js.map +1 -0
- package/dist/core/middleware/built-in/auth-providers.d.ts +125 -0
- package/dist/core/middleware/built-in/auth-providers.js +394 -0
- package/dist/core/middleware/built-in/auth-providers.js.map +1 -0
- package/dist/core/middleware/built-in/auth.d.ts +29 -1
- package/dist/core/middleware/built-in/auth.js +259 -16
- package/dist/core/middleware/built-in/auth.js.map +1 -1
- package/dist/core/middleware/built-in/index.d.ts +3 -1
- package/dist/core/middleware/built-in/index.js +19 -1
- package/dist/core/middleware/built-in/index.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/moro.d.ts +1 -0
- package/dist/moro.js +19 -1
- package/dist/moro.js.map +1 -1
- package/dist/types/auth.d.ts +367 -0
- package/dist/types/auth.js +28 -0
- package/dist/types/auth.js.map +1 -0
- package/package.json +6 -2
- package/src/core/auth/README.md +339 -0
- package/src/core/auth/morojs-adapter.ts +402 -0
- package/src/core/config/file-loader.ts +398 -0
- package/src/core/config/index.ts +18 -0
- package/src/core/config/loader.ts +18 -2
- package/src/core/config/utils.ts +53 -3
- package/src/core/http/http-server.ts +61 -10
- package/src/core/middleware/built-in/auth-helpers.ts +401 -0
- package/src/core/middleware/built-in/auth-providers.ts +480 -0
- package/src/core/middleware/built-in/auth.ts +306 -16
- package/src/core/middleware/built-in/index.ts +22 -0
- package/src/index.ts +30 -1
- package/src/moro.ts +29 -1
- package/src/types/auth.ts +440 -0
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sessionHelpers = exports.authResponses = exports.authUtils = void 0;
|
|
4
|
+
exports.requireAuth = requireAuth;
|
|
5
|
+
exports.requireRole = requireRole;
|
|
6
|
+
exports.requirePermission = requirePermission;
|
|
7
|
+
exports.requireAdmin = requireAdmin;
|
|
8
|
+
exports.guestOnly = guestOnly;
|
|
9
|
+
exports.optionalAuth = optionalAuth;
|
|
10
|
+
exports.withAuth = withAuth;
|
|
11
|
+
exports.protectedRoute = protectedRoute;
|
|
12
|
+
/**
|
|
13
|
+
* Auth Guard Middleware - Protects routes with authentication and authorization
|
|
14
|
+
*/
|
|
15
|
+
function requireAuth(options = {}) {
|
|
16
|
+
return async (req, res, next) => {
|
|
17
|
+
const auth = req.auth;
|
|
18
|
+
if (!auth) {
|
|
19
|
+
throw new Error('Auth middleware must be installed before using requireAuth');
|
|
20
|
+
}
|
|
21
|
+
// Check if already authenticated and should redirect
|
|
22
|
+
if (auth.isAuthenticated && options.redirectOnAuth) {
|
|
23
|
+
return res.redirect(options.redirectOnAuth);
|
|
24
|
+
}
|
|
25
|
+
// Check authentication requirement
|
|
26
|
+
if (!options.allowUnauthenticated && !auth.isAuthenticated) {
|
|
27
|
+
if (options.onUnauthorized) {
|
|
28
|
+
return options.onUnauthorized(req, res);
|
|
29
|
+
}
|
|
30
|
+
if (options.redirectTo) {
|
|
31
|
+
return res.redirect(`${options.redirectTo}?callbackUrl=${encodeURIComponent(req.url)}`);
|
|
32
|
+
}
|
|
33
|
+
return res.status(401).json({
|
|
34
|
+
error: 'Authentication required',
|
|
35
|
+
message: 'You must be logged in to access this resource',
|
|
36
|
+
signInUrl: '/api/auth/signin',
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// Skip further checks if not authenticated but allowed
|
|
40
|
+
if (!auth.isAuthenticated && options.allowUnauthenticated) {
|
|
41
|
+
return next();
|
|
42
|
+
}
|
|
43
|
+
const user = auth.user;
|
|
44
|
+
// Check roles if specified
|
|
45
|
+
if (options.roles && options.roles.length > 0) {
|
|
46
|
+
const userRoles = user?.roles || [];
|
|
47
|
+
const hasRole = options.roles.some(role => userRoles.includes(role));
|
|
48
|
+
if (!hasRole) {
|
|
49
|
+
if (options.onForbidden) {
|
|
50
|
+
return options.onForbidden(req, res);
|
|
51
|
+
}
|
|
52
|
+
return res.status(403).json({
|
|
53
|
+
error: 'Insufficient permissions',
|
|
54
|
+
message: `Required roles: ${options.roles.join(', ')}`,
|
|
55
|
+
userRoles,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Check permissions if specified
|
|
60
|
+
if (options.permissions && options.permissions.length > 0) {
|
|
61
|
+
const userPermissions = user?.permissions || [];
|
|
62
|
+
const hasPermission = options.permissions.every(permission => userPermissions.includes(permission));
|
|
63
|
+
if (!hasPermission) {
|
|
64
|
+
if (options.onForbidden) {
|
|
65
|
+
return options.onForbidden(req, res);
|
|
66
|
+
}
|
|
67
|
+
return res.status(403).json({
|
|
68
|
+
error: 'Insufficient permissions',
|
|
69
|
+
message: `Required permissions: ${options.permissions.join(', ')}`,
|
|
70
|
+
userPermissions,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Custom authorization function
|
|
75
|
+
if (options.authorize) {
|
|
76
|
+
try {
|
|
77
|
+
const authorized = await options.authorize(user);
|
|
78
|
+
if (!authorized) {
|
|
79
|
+
if (options.onForbidden) {
|
|
80
|
+
return options.onForbidden(req, res);
|
|
81
|
+
}
|
|
82
|
+
return res.status(403).json({
|
|
83
|
+
error: 'Access denied',
|
|
84
|
+
message: 'Custom authorization check failed',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
return res.status(500).json({
|
|
90
|
+
error: 'Authorization error',
|
|
91
|
+
message: 'Failed to verify authorization',
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// All checks passed
|
|
96
|
+
next();
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Role-based access control middleware
|
|
101
|
+
*/
|
|
102
|
+
function requireRole(role, options = {}) {
|
|
103
|
+
const roles = Array.isArray(role) ? role : [role];
|
|
104
|
+
return requireAuth({ ...options, roles });
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Permission-based access control middleware
|
|
108
|
+
*/
|
|
109
|
+
function requirePermission(permission, options = {}) {
|
|
110
|
+
const permissions = Array.isArray(permission) ? permission : [permission];
|
|
111
|
+
return requireAuth({ ...options, permissions });
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Admin-only access middleware
|
|
115
|
+
*/
|
|
116
|
+
function requireAdmin(options = {}) {
|
|
117
|
+
return requireRole('admin', options);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Guest-only middleware (redirect if authenticated)
|
|
121
|
+
*/
|
|
122
|
+
function guestOnly(redirectTo = '/dashboard') {
|
|
123
|
+
return requireAuth({
|
|
124
|
+
allowUnauthenticated: true,
|
|
125
|
+
redirectOnAuth: redirectTo,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Optional auth middleware (allows both authenticated and unauthenticated)
|
|
130
|
+
*/
|
|
131
|
+
function optionalAuth() {
|
|
132
|
+
return requireAuth({
|
|
133
|
+
allowUnauthenticated: true,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Route-level auth decorator
|
|
138
|
+
*/
|
|
139
|
+
function withAuth(options = {}) {
|
|
140
|
+
return function (target, propertyKey, descriptor) {
|
|
141
|
+
const originalMethod = descriptor.value;
|
|
142
|
+
descriptor.value = async function (req, res, next) {
|
|
143
|
+
if (options.requireAuth !== false) {
|
|
144
|
+
const authMiddleware = requireAuth({
|
|
145
|
+
roles: options.roles,
|
|
146
|
+
redirectTo: options.redirectTo,
|
|
147
|
+
});
|
|
148
|
+
await new Promise((resolve, reject) => {
|
|
149
|
+
authMiddleware(req, res, (error) => {
|
|
150
|
+
if (error)
|
|
151
|
+
reject(error);
|
|
152
|
+
else
|
|
153
|
+
resolve();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return originalMethod.call(this, req, res, next);
|
|
158
|
+
};
|
|
159
|
+
return descriptor;
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Auth utilities for manual checks in route handlers
|
|
164
|
+
*/
|
|
165
|
+
exports.authUtils = {
|
|
166
|
+
/**
|
|
167
|
+
* Check if user is authenticated
|
|
168
|
+
*/
|
|
169
|
+
isAuthenticated(req) {
|
|
170
|
+
return req.auth?.isAuthenticated || false;
|
|
171
|
+
},
|
|
172
|
+
/**
|
|
173
|
+
* Get current user
|
|
174
|
+
*/
|
|
175
|
+
getUser(req) {
|
|
176
|
+
return req.auth?.user || null;
|
|
177
|
+
},
|
|
178
|
+
/**
|
|
179
|
+
* Check if user has role
|
|
180
|
+
*/
|
|
181
|
+
hasRole(req, role) {
|
|
182
|
+
const user = this.getUser(req);
|
|
183
|
+
if (!user?.roles)
|
|
184
|
+
return false;
|
|
185
|
+
const roles = Array.isArray(role) ? role : [role];
|
|
186
|
+
return roles.some(r => user.roles.includes(r));
|
|
187
|
+
},
|
|
188
|
+
/**
|
|
189
|
+
* Check if user has permission
|
|
190
|
+
*/
|
|
191
|
+
hasPermission(req, permission) {
|
|
192
|
+
const user = this.getUser(req);
|
|
193
|
+
if (!user?.permissions)
|
|
194
|
+
return false;
|
|
195
|
+
const permissions = Array.isArray(permission) ? permission : [permission];
|
|
196
|
+
return permissions.every(p => user.permissions.includes(p));
|
|
197
|
+
},
|
|
198
|
+
/**
|
|
199
|
+
* Check if user is admin
|
|
200
|
+
*/
|
|
201
|
+
isAdmin(req) {
|
|
202
|
+
return this.hasRole(req, 'admin');
|
|
203
|
+
},
|
|
204
|
+
/**
|
|
205
|
+
* Get user ID
|
|
206
|
+
*/
|
|
207
|
+
getUserId(req) {
|
|
208
|
+
return this.getUser(req)?.id || null;
|
|
209
|
+
},
|
|
210
|
+
/**
|
|
211
|
+
* Force authentication check and redirect if needed
|
|
212
|
+
*/
|
|
213
|
+
ensureAuth(req, res, redirectTo = '/api/auth/signin') {
|
|
214
|
+
if (!this.isAuthenticated(req)) {
|
|
215
|
+
res.redirect(`${redirectTo}?callbackUrl=${encodeURIComponent(req.url)}`);
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
return true;
|
|
219
|
+
},
|
|
220
|
+
/**
|
|
221
|
+
* Create auth response for API endpoints
|
|
222
|
+
*/
|
|
223
|
+
createAuthResponse(req) {
|
|
224
|
+
const auth = req.auth;
|
|
225
|
+
return {
|
|
226
|
+
isAuthenticated: auth?.isAuthenticated || false,
|
|
227
|
+
user: auth?.user || null,
|
|
228
|
+
session: auth?.session || null,
|
|
229
|
+
timestamp: new Date().toISOString(),
|
|
230
|
+
};
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* API Response helpers for auth endpoints
|
|
235
|
+
*/
|
|
236
|
+
exports.authResponses = {
|
|
237
|
+
unauthorized: (res, message = 'Authentication required') => {
|
|
238
|
+
return res.status(401).json({
|
|
239
|
+
error: 'Unauthorized',
|
|
240
|
+
message,
|
|
241
|
+
code: 'AUTH_REQUIRED',
|
|
242
|
+
signInUrl: '/api/auth/signin',
|
|
243
|
+
});
|
|
244
|
+
},
|
|
245
|
+
forbidden: (res, message = 'Insufficient permissions') => {
|
|
246
|
+
return res.status(403).json({
|
|
247
|
+
error: 'Forbidden',
|
|
248
|
+
message,
|
|
249
|
+
code: 'INSUFFICIENT_PERMISSIONS',
|
|
250
|
+
});
|
|
251
|
+
},
|
|
252
|
+
authSuccess: (res, user, message = 'Authentication successful') => {
|
|
253
|
+
return res.json({
|
|
254
|
+
success: true,
|
|
255
|
+
message,
|
|
256
|
+
user: {
|
|
257
|
+
id: user.id,
|
|
258
|
+
name: user.name,
|
|
259
|
+
email: user.email,
|
|
260
|
+
roles: user.roles || [],
|
|
261
|
+
permissions: user.permissions || [],
|
|
262
|
+
},
|
|
263
|
+
});
|
|
264
|
+
},
|
|
265
|
+
authError: (res, error, message = 'Authentication failed') => {
|
|
266
|
+
return res.status(400).json({
|
|
267
|
+
error,
|
|
268
|
+
message,
|
|
269
|
+
code: 'AUTH_ERROR',
|
|
270
|
+
});
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* Higher-order function to create protected route handlers
|
|
275
|
+
*/
|
|
276
|
+
function protectedRoute(handler, options = {}) {
|
|
277
|
+
return async (req, res, next) => {
|
|
278
|
+
const authMiddleware = requireAuth(options);
|
|
279
|
+
return new Promise((resolve, reject) => {
|
|
280
|
+
authMiddleware(req, res, (error) => {
|
|
281
|
+
if (error) {
|
|
282
|
+
reject(error);
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
Promise.resolve(handler(req, res, next))
|
|
286
|
+
.then(() => resolve())
|
|
287
|
+
.catch(reject);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Session management helpers
|
|
295
|
+
*/
|
|
296
|
+
exports.sessionHelpers = {
|
|
297
|
+
/**
|
|
298
|
+
* Store data in session
|
|
299
|
+
*/
|
|
300
|
+
async setSessionData(req, key, value) {
|
|
301
|
+
if (req.session) {
|
|
302
|
+
req.session[key] = value;
|
|
303
|
+
await req.session.save();
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
/**
|
|
307
|
+
* Get data from session
|
|
308
|
+
*/
|
|
309
|
+
getSessionData(req, key) {
|
|
310
|
+
return req.session?.[key] || null;
|
|
311
|
+
},
|
|
312
|
+
/**
|
|
313
|
+
* Remove data from session
|
|
314
|
+
*/
|
|
315
|
+
async removeSessionData(req, key) {
|
|
316
|
+
if (req.session && key in req.session.data) {
|
|
317
|
+
delete req.session.data[key];
|
|
318
|
+
await req.session.save();
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
/**
|
|
322
|
+
* Clear entire session
|
|
323
|
+
*/
|
|
324
|
+
async clearSession(req) {
|
|
325
|
+
if (req.session) {
|
|
326
|
+
await req.session.destroy();
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
/**
|
|
330
|
+
* Regenerate session ID
|
|
331
|
+
*/
|
|
332
|
+
async regenerateSession(req) {
|
|
333
|
+
if (req.session) {
|
|
334
|
+
return await req.session.regenerate();
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
//# sourceMappingURL=auth-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../../../src/core/middleware/built-in/auth-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { AuthProvider } from '../../../types/auth';
|
|
2
|
+
/**
|
|
3
|
+
* Popular OAuth Providers for Auth.js
|
|
4
|
+
* These extend the basic providers with more options and popular services
|
|
5
|
+
*/
|
|
6
|
+
export declare const extendedProviders: {
|
|
7
|
+
github: (options: {
|
|
8
|
+
clientId: string;
|
|
9
|
+
clientSecret: string;
|
|
10
|
+
scope?: string;
|
|
11
|
+
allowSignup?: boolean;
|
|
12
|
+
}) => AuthProvider;
|
|
13
|
+
google: (options: {
|
|
14
|
+
clientId: string;
|
|
15
|
+
clientSecret: string;
|
|
16
|
+
scope?: string;
|
|
17
|
+
hostedDomain?: string;
|
|
18
|
+
}) => AuthProvider;
|
|
19
|
+
microsoft: (options: {
|
|
20
|
+
clientId: string;
|
|
21
|
+
clientSecret: string;
|
|
22
|
+
tenant?: string;
|
|
23
|
+
scope?: string;
|
|
24
|
+
}) => AuthProvider;
|
|
25
|
+
apple: (options: {
|
|
26
|
+
clientId: string;
|
|
27
|
+
clientSecret: string;
|
|
28
|
+
scope?: string;
|
|
29
|
+
}) => AuthProvider;
|
|
30
|
+
linkedin: (options: {
|
|
31
|
+
clientId: string;
|
|
32
|
+
clientSecret: string;
|
|
33
|
+
scope?: string;
|
|
34
|
+
}) => AuthProvider;
|
|
35
|
+
facebook: (options: {
|
|
36
|
+
clientId: string;
|
|
37
|
+
clientSecret: string;
|
|
38
|
+
scope?: string;
|
|
39
|
+
}) => AuthProvider;
|
|
40
|
+
twitter: (options: {
|
|
41
|
+
clientId: string;
|
|
42
|
+
clientSecret: string;
|
|
43
|
+
version?: "1.0a" | "2.0";
|
|
44
|
+
}) => AuthProvider;
|
|
45
|
+
slack: (options: {
|
|
46
|
+
clientId: string;
|
|
47
|
+
clientSecret: string;
|
|
48
|
+
scope?: string;
|
|
49
|
+
}) => AuthProvider;
|
|
50
|
+
gitlab: (options: {
|
|
51
|
+
clientId: string;
|
|
52
|
+
clientSecret: string;
|
|
53
|
+
domain?: string;
|
|
54
|
+
scope?: string;
|
|
55
|
+
}) => AuthProvider;
|
|
56
|
+
spotify: (options: {
|
|
57
|
+
clientId: string;
|
|
58
|
+
clientSecret: string;
|
|
59
|
+
scope?: string;
|
|
60
|
+
}) => AuthProvider;
|
|
61
|
+
twitch: (options: {
|
|
62
|
+
clientId: string;
|
|
63
|
+
clientSecret: string;
|
|
64
|
+
scope?: string;
|
|
65
|
+
}) => AuthProvider;
|
|
66
|
+
notion: (options: {
|
|
67
|
+
clientId: string;
|
|
68
|
+
clientSecret: string;
|
|
69
|
+
}) => AuthProvider;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Enterprise/SAML providers
|
|
73
|
+
*/
|
|
74
|
+
export declare const enterpriseProviders: {
|
|
75
|
+
saml: (options: {
|
|
76
|
+
name: string;
|
|
77
|
+
entryPoint: string;
|
|
78
|
+
issuer: string;
|
|
79
|
+
cert: string;
|
|
80
|
+
callbackUrl?: string;
|
|
81
|
+
}) => AuthProvider;
|
|
82
|
+
okta: (options: {
|
|
83
|
+
clientId: string;
|
|
84
|
+
clientSecret: string;
|
|
85
|
+
domain: string;
|
|
86
|
+
authorizationServerId?: string;
|
|
87
|
+
}) => AuthProvider;
|
|
88
|
+
auth0: (options: {
|
|
89
|
+
clientId: string;
|
|
90
|
+
clientSecret: string;
|
|
91
|
+
domain: string;
|
|
92
|
+
audience?: string;
|
|
93
|
+
}) => AuthProvider;
|
|
94
|
+
cognito: (options: {
|
|
95
|
+
clientId: string;
|
|
96
|
+
clientSecret: string;
|
|
97
|
+
domain: string;
|
|
98
|
+
region?: string;
|
|
99
|
+
}) => AuthProvider;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Helper function to create custom OAuth provider
|
|
103
|
+
*/
|
|
104
|
+
export declare function createCustomOAuthProvider(config: {
|
|
105
|
+
id: string;
|
|
106
|
+
name: string;
|
|
107
|
+
clientId: string;
|
|
108
|
+
clientSecret: string;
|
|
109
|
+
authorizationUrl: string;
|
|
110
|
+
tokenUrl: string;
|
|
111
|
+
userinfoUrl: string;
|
|
112
|
+
scope?: string;
|
|
113
|
+
profileMapper?: (profile: any) => any;
|
|
114
|
+
}): AuthProvider;
|
|
115
|
+
/**
|
|
116
|
+
* Helper function to create custom OIDC provider
|
|
117
|
+
*/
|
|
118
|
+
export declare function createCustomOIDCProvider(config: {
|
|
119
|
+
id: string;
|
|
120
|
+
name: string;
|
|
121
|
+
clientId: string;
|
|
122
|
+
clientSecret: string;
|
|
123
|
+
issuer: string;
|
|
124
|
+
profileMapper?: (profile: any) => any;
|
|
125
|
+
}): AuthProvider;
|