crewly 1.3.3 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend/backend/src/constants.d.ts +25 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +29 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/admin/admin.controller.d.ts +69 -0
- package/dist/backend/backend/src/controllers/admin/admin.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/admin/admin.controller.js +187 -0
- package/dist/backend/backend/src/controllers/admin/admin.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/admin/admin.routes.d.ts +22 -0
- package/dist/backend/backend/src/controllers/admin/admin.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/admin/admin.routes.js +31 -0
- package/dist/backend/backend/src/controllers/admin/admin.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js +4 -0
- package/dist/backend/backend/src/controllers/cloud/auth/auth.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/auth/google-auth.controller.d.ts +40 -0
- package/dist/backend/backend/src/controllers/cloud/auth/google-auth.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/auth/google-auth.controller.js +161 -0
- package/dist/backend/backend/src/controllers/cloud/auth/google-auth.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/device.controller.d.ts +34 -0
- package/dist/backend/backend/src/controllers/cloud/device.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/device.controller.js +70 -0
- package/dist/backend/backend/src/controllers/cloud/device.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/device.routes.d.ts +23 -0
- package/dist/backend/backend/src/controllers/cloud/device.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/device.routes.js +34 -0
- package/dist/backend/backend/src/controllers/cloud/device.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/cloud/index.d.ts +1 -0
- package/dist/backend/backend/src/controllers/cloud/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/index.js +1 -0
- package/dist/backend/backend/src/controllers/cloud/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +6 -1
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/auth/auth.service.d.ts +29 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/auth/auth.service.js +92 -0
- package/dist/backend/backend/src/services/cloud/auth/auth.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/auth/auth.types.js +1 -1
- package/dist/backend/backend/src/services/cloud/auth/auth.types.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/auth/require-user.middleware.d.ts +25 -0
- package/dist/backend/backend/src/services/cloud/auth/require-user.middleware.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/auth/require-user.middleware.js +52 -0
- package/dist/backend/backend/src/services/cloud/auth/require-user.middleware.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/device-heartbeat.service.d.ts +103 -0
- package/dist/backend/backend/src/services/cloud/device-heartbeat.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/device-heartbeat.service.js +143 -0
- package/dist/backend/backend/src/services/cloud/device-heartbeat.service.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts +23 -1
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js +78 -2
- package/dist/backend/backend/src/services/messaging/adapters/google-chat-messenger.adapter.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +25 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +29 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/frontend/dist/assets/{index-073711d5.js → index-17f53f4d.js} +323 -323
- package/frontend/dist/assets/{index-02d0bb77.css → index-91937977.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google OAuth Authentication Controller
|
|
3
|
+
*
|
|
4
|
+
* Handles Google OAuth login flow for CrewlyAI Cloud accounts.
|
|
5
|
+
* Users can sign in with Google as an alternative to email/password.
|
|
6
|
+
*
|
|
7
|
+
* Flow:
|
|
8
|
+
* 1. Frontend redirects to GET /api/auth/google
|
|
9
|
+
* 2. Backend redirects to Google OAuth consent screen
|
|
10
|
+
* 3. Google redirects back to GET /api/auth/google/callback
|
|
11
|
+
* 4. Backend exchanges code for tokens, gets user email
|
|
12
|
+
* 5. Creates or finds user, returns JWT tokens
|
|
13
|
+
* 6. Redirects to frontend with tokens in URL fragment
|
|
14
|
+
*
|
|
15
|
+
* @module controllers/cloud/auth/google-auth.controller
|
|
16
|
+
*/
|
|
17
|
+
import { randomUUID } from 'crypto';
|
|
18
|
+
import { AuthService } from '../../../services/cloud/auth/auth.service.js';
|
|
19
|
+
import { LoggerService } from '../../../services/core/logger.service.js';
|
|
20
|
+
import { GOOGLE_OAUTH_CONSTANTS } from '../../../constants.js';
|
|
21
|
+
const logger = LoggerService.getInstance().createComponentLogger('GoogleAuth');
|
|
22
|
+
/** Scopes needed for login (just email + profile, not Gmail). */
|
|
23
|
+
const LOGIN_SCOPES = ['openid', 'email', 'profile'];
|
|
24
|
+
/**
|
|
25
|
+
* Get Google OAuth config from environment variables.
|
|
26
|
+
*
|
|
27
|
+
* @param req - Express request for deriving default redirect URI
|
|
28
|
+
* @returns Google OAuth client configuration
|
|
29
|
+
*/
|
|
30
|
+
function getGoogleAuthConfig(req) {
|
|
31
|
+
const clientId = process.env['GOOGLE_OAUTH_CLIENT_ID'] || '';
|
|
32
|
+
const clientSecret = process.env['GOOGLE_OAUTH_CLIENT_SECRET'] || '';
|
|
33
|
+
const redirectUri = process.env['GOOGLE_OAUTH_REDIRECT_URI'] || `${req.protocol}://${req.get('host')}/api/auth/google/callback`;
|
|
34
|
+
return { clientId, clientSecret, redirectUri };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* GET /api/auth/google
|
|
38
|
+
*
|
|
39
|
+
* Initiate Google OAuth login by redirecting to Google's consent screen.
|
|
40
|
+
*
|
|
41
|
+
* @param req - Express request
|
|
42
|
+
* @param res - Express response (redirect)
|
|
43
|
+
* @param next - Next middleware
|
|
44
|
+
*/
|
|
45
|
+
export async function googleAuthStart(req, res, next) {
|
|
46
|
+
try {
|
|
47
|
+
const { clientId, redirectUri } = getGoogleAuthConfig(req);
|
|
48
|
+
if (!clientId) {
|
|
49
|
+
res.status(500).json({ success: false, error: 'Google OAuth is not configured (missing GOOGLE_OAUTH_CLIENT_ID)' });
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const state = Buffer.from(JSON.stringify({
|
|
53
|
+
nonce: randomUUID(),
|
|
54
|
+
t: Date.now(),
|
|
55
|
+
})).toString('base64url');
|
|
56
|
+
const url = new URL(GOOGLE_OAUTH_CONSTANTS.AUTH_BASE_URL);
|
|
57
|
+
url.searchParams.set('client_id', clientId);
|
|
58
|
+
url.searchParams.set('redirect_uri', redirectUri);
|
|
59
|
+
url.searchParams.set('response_type', 'code');
|
|
60
|
+
url.searchParams.set('access_type', 'offline');
|
|
61
|
+
url.searchParams.set('prompt', 'consent');
|
|
62
|
+
url.searchParams.set('scope', LOGIN_SCOPES.join(' '));
|
|
63
|
+
url.searchParams.set('state', state);
|
|
64
|
+
res.redirect(url.toString());
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
next(error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* GET /api/auth/google/callback
|
|
72
|
+
*
|
|
73
|
+
* Handle Google OAuth callback. Exchanges auth code for tokens,
|
|
74
|
+
* fetches user profile, creates/finds the user, and redirects
|
|
75
|
+
* to the frontend with JWT tokens.
|
|
76
|
+
*
|
|
77
|
+
* @param req - Express request with code and state query params
|
|
78
|
+
* @param res - Express response (redirect to frontend with tokens)
|
|
79
|
+
* @param next - Next middleware
|
|
80
|
+
*/
|
|
81
|
+
export async function googleAuthCallback(req, res, next) {
|
|
82
|
+
try {
|
|
83
|
+
const code = req.query['code'] ? String(req.query['code']) : '';
|
|
84
|
+
const errorParam = req.query['error'] ? String(req.query['error']) : '';
|
|
85
|
+
if (errorParam) {
|
|
86
|
+
logger.warn('Google OAuth error', { error: errorParam });
|
|
87
|
+
res.redirect(`/?auth_error=${encodeURIComponent(errorParam)}`);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (!code) {
|
|
91
|
+
res.redirect('/?auth_error=missing_code');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const { clientId, clientSecret, redirectUri } = getGoogleAuthConfig(req);
|
|
95
|
+
if (!clientId || !clientSecret) {
|
|
96
|
+
res.redirect('/?auth_error=oauth_not_configured');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Exchange code for tokens
|
|
100
|
+
const tokenResp = await fetch(GOOGLE_OAUTH_CONSTANTS.TOKEN_ENDPOINT, {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
103
|
+
body: new URLSearchParams({
|
|
104
|
+
code,
|
|
105
|
+
client_id: clientId,
|
|
106
|
+
client_secret: clientSecret,
|
|
107
|
+
redirect_uri: redirectUri,
|
|
108
|
+
grant_type: 'authorization_code',
|
|
109
|
+
}),
|
|
110
|
+
});
|
|
111
|
+
if (!tokenResp.ok) {
|
|
112
|
+
const details = await tokenResp.text();
|
|
113
|
+
logger.error('Google token exchange failed', { status: tokenResp.status, details });
|
|
114
|
+
res.redirect('/?auth_error=token_exchange_failed');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const tokenData = await tokenResp.json();
|
|
118
|
+
// Fetch user profile
|
|
119
|
+
const profileResp = await fetch(GOOGLE_OAUTH_CONSTANTS.USERINFO_ENDPOINT, {
|
|
120
|
+
headers: { Authorization: `Bearer ${tokenData.access_token}` },
|
|
121
|
+
});
|
|
122
|
+
if (!profileResp.ok) {
|
|
123
|
+
logger.error('Google profile fetch failed', { status: profileResp.status });
|
|
124
|
+
res.redirect('/?auth_error=profile_fetch_failed');
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const profile = await profileResp.json();
|
|
128
|
+
if (!profile.email) {
|
|
129
|
+
res.redirect('/?auth_error=no_email');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
// Find or create user in our auth system
|
|
133
|
+
const authService = AuthService.getInstance();
|
|
134
|
+
let tokenResponse;
|
|
135
|
+
try {
|
|
136
|
+
// Try logging in first (user exists)
|
|
137
|
+
// We use a special internal method for OAuth — no password needed
|
|
138
|
+
tokenResponse = await authService.loginOrCreateOAuth(profile.email, profile.name || profile.email.split('@')[0]);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
logger.error('Google OAuth user creation failed', {
|
|
142
|
+
email: profile.email,
|
|
143
|
+
error: err instanceof Error ? err.message : String(err),
|
|
144
|
+
});
|
|
145
|
+
res.redirect('/?auth_error=user_creation_failed');
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
logger.info('Google OAuth login successful', { email: profile.email });
|
|
149
|
+
// Redirect to frontend with tokens in URL fragment (not query params for security)
|
|
150
|
+
const params = new URLSearchParams({
|
|
151
|
+
access_token: tokenResponse.accessToken,
|
|
152
|
+
refresh_token: tokenResponse.refreshToken,
|
|
153
|
+
expires_in: String(tokenResponse.expiresIn),
|
|
154
|
+
});
|
|
155
|
+
res.redirect(`/?auth_callback=google#${params.toString()}`);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
next(error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=google-auth.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-auth.controller.js","sourceRoot":"","sources":["../../../../../../../backend/src/controllers/cloud/auth/google-auth.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Controller
|
|
3
|
+
*
|
|
4
|
+
* Handles device heartbeat and discovery endpoints for
|
|
5
|
+
* dual-machine connectivity. Pro users can see each other's
|
|
6
|
+
* online devices and their running teams.
|
|
7
|
+
*
|
|
8
|
+
* @module controllers/cloud/device.controller
|
|
9
|
+
*/
|
|
10
|
+
import type { Response, NextFunction } from 'express';
|
|
11
|
+
import type { AuthenticatedRequest } from '../../services/cloud/auth/auth.utils.js';
|
|
12
|
+
/**
|
|
13
|
+
* POST /api/cloud/devices/heartbeat
|
|
14
|
+
*
|
|
15
|
+
* Record a device heartbeat with current team information.
|
|
16
|
+
* The device will appear as online to other Pro users.
|
|
17
|
+
*
|
|
18
|
+
* @param req - Authenticated request with { deviceName, teams } body
|
|
19
|
+
* @param res - Express response
|
|
20
|
+
* @param next - Next middleware
|
|
21
|
+
*/
|
|
22
|
+
export declare function deviceHeartbeat(req: AuthenticatedRequest, res: Response, next: NextFunction): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* GET /api/cloud/devices
|
|
25
|
+
*
|
|
26
|
+
* List all online devices excluding the requester.
|
|
27
|
+
* Only returns devices with valid (non-expired) heartbeats.
|
|
28
|
+
*
|
|
29
|
+
* @param req - Authenticated request
|
|
30
|
+
* @param res - Express response
|
|
31
|
+
* @param next - Next middleware
|
|
32
|
+
*/
|
|
33
|
+
export declare function listDevices(req: AuthenticatedRequest, res: Response, next: NextFunction): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=device.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/device.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAKpF;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BjH;AAED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,oBAAoB,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAc7G"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Controller
|
|
3
|
+
*
|
|
4
|
+
* Handles device heartbeat and discovery endpoints for
|
|
5
|
+
* dual-machine connectivity. Pro users can see each other's
|
|
6
|
+
* online devices and their running teams.
|
|
7
|
+
*
|
|
8
|
+
* @module controllers/cloud/device.controller
|
|
9
|
+
*/
|
|
10
|
+
import { DeviceHeartbeatService } from '../../services/cloud/device-heartbeat.service.js';
|
|
11
|
+
import { LoggerService } from '../../services/core/logger.service.js';
|
|
12
|
+
const logger = LoggerService.getInstance().createComponentLogger('DeviceController');
|
|
13
|
+
/**
|
|
14
|
+
* POST /api/cloud/devices/heartbeat
|
|
15
|
+
*
|
|
16
|
+
* Record a device heartbeat with current team information.
|
|
17
|
+
* The device will appear as online to other Pro users.
|
|
18
|
+
*
|
|
19
|
+
* @param req - Authenticated request with { deviceName, teams } body
|
|
20
|
+
* @param res - Express response
|
|
21
|
+
* @param next - Next middleware
|
|
22
|
+
*/
|
|
23
|
+
export async function deviceHeartbeat(req, res, next) {
|
|
24
|
+
try {
|
|
25
|
+
const { deviceName, teams } = req.body;
|
|
26
|
+
if (!deviceName || typeof deviceName !== 'string') {
|
|
27
|
+
res.status(400).json({ success: false, error: 'deviceName is required' });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const validTeams = [];
|
|
31
|
+
if (Array.isArray(teams)) {
|
|
32
|
+
for (const t of teams) {
|
|
33
|
+
if (t && typeof t.id === 'string' && typeof t.name === 'string' && typeof t.memberCount === 'number') {
|
|
34
|
+
validTeams.push({ id: t.id, name: t.name, memberCount: t.memberCount });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const service = DeviceHeartbeatService.getInstance();
|
|
39
|
+
await service.heartbeat(req.user.userId, req.user.email, deviceName.trim(), validTeams);
|
|
40
|
+
res.json({ success: true, message: 'Heartbeat recorded' });
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
next(error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* GET /api/cloud/devices
|
|
48
|
+
*
|
|
49
|
+
* List all online devices excluding the requester.
|
|
50
|
+
* Only returns devices with valid (non-expired) heartbeats.
|
|
51
|
+
*
|
|
52
|
+
* @param req - Authenticated request
|
|
53
|
+
* @param res - Express response
|
|
54
|
+
* @param next - Next middleware
|
|
55
|
+
*/
|
|
56
|
+
export async function listDevices(req, res, next) {
|
|
57
|
+
try {
|
|
58
|
+
const service = DeviceHeartbeatService.getInstance();
|
|
59
|
+
const devices = service.listOnlineDevices(req.user.userId);
|
|
60
|
+
logger.debug('Device list requested', {
|
|
61
|
+
requesterId: req.user.userId,
|
|
62
|
+
onlineCount: devices.length,
|
|
63
|
+
});
|
|
64
|
+
res.json({ success: true, data: devices });
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
next(error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=device.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/device.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,sBAAsB,EAAuB,MAAM,kDAAkD,CAAC;AAE/G,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,MAAM,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;AAErF;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAyB,EAAE,GAAa,EAAE,IAAkB;IAChG,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,IAGjC,CAAC;QAEF,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAClD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;oBACrG,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QAExF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAyB,EAAE,GAAa,EAAE,IAAkB;IAC5F,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,sBAAsB,CAAC,WAAW,EAAE,CAAC;QACrD,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3D,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACpC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM;YAC5B,WAAW,EAAE,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Routes
|
|
3
|
+
*
|
|
4
|
+
* Router configuration for device heartbeat and discovery API.
|
|
5
|
+
*
|
|
6
|
+
* All endpoints require:
|
|
7
|
+
* - User authentication (requireUser middleware)
|
|
8
|
+
* - Pro tier subscription (requireTier middleware)
|
|
9
|
+
*
|
|
10
|
+
* Endpoints:
|
|
11
|
+
* - POST /heartbeat — record device heartbeat with team info
|
|
12
|
+
* - GET / — list online devices (excluding self)
|
|
13
|
+
*
|
|
14
|
+
* @module controllers/cloud/device.routes
|
|
15
|
+
*/
|
|
16
|
+
import { Router } from 'express';
|
|
17
|
+
/**
|
|
18
|
+
* Create the device API router.
|
|
19
|
+
*
|
|
20
|
+
* @returns Express router with device heartbeat and discovery routes
|
|
21
|
+
*/
|
|
22
|
+
export declare function createDeviceRouter(): Router;
|
|
23
|
+
//# sourceMappingURL=device.routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/device.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAKjC;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAW3C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device Routes
|
|
3
|
+
*
|
|
4
|
+
* Router configuration for device heartbeat and discovery API.
|
|
5
|
+
*
|
|
6
|
+
* All endpoints require:
|
|
7
|
+
* - User authentication (requireUser middleware)
|
|
8
|
+
* - Pro tier subscription (requireTier middleware)
|
|
9
|
+
*
|
|
10
|
+
* Endpoints:
|
|
11
|
+
* - POST /heartbeat — record device heartbeat with team info
|
|
12
|
+
* - GET / — list online devices (excluding self)
|
|
13
|
+
*
|
|
14
|
+
* @module controllers/cloud/device.routes
|
|
15
|
+
*/
|
|
16
|
+
import { Router } from 'express';
|
|
17
|
+
import { deviceHeartbeat, listDevices } from './device.controller.js';
|
|
18
|
+
import { requireUser } from '../../services/cloud/auth/require-user.middleware.js';
|
|
19
|
+
import { requireTier } from '../../services/cloud/cloud-auth.middleware.js';
|
|
20
|
+
/**
|
|
21
|
+
* Create the device API router.
|
|
22
|
+
*
|
|
23
|
+
* @returns Express router with device heartbeat and discovery routes
|
|
24
|
+
*/
|
|
25
|
+
export function createDeviceRouter() {
|
|
26
|
+
const router = Router();
|
|
27
|
+
// All device endpoints require authenticated Pro user
|
|
28
|
+
router.use(requireUser);
|
|
29
|
+
router.use(requireTier('pro'));
|
|
30
|
+
router.post('/heartbeat', deviceHeartbeat);
|
|
31
|
+
router.get('/', listDevices);
|
|
32
|
+
return router;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=device.routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/device.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAE5E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,sDAAsD;IACtD,MAAM,CAAC,GAAG,CAAC,WAAoB,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/B,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,eAAwB,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,WAAoB,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/cloud/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.routes.d.ts","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"api.routes.d.ts","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AA0BjE;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAyFpE"}
|
|
@@ -20,7 +20,8 @@ import { createQualityGateRouter } from './modules/quality-gate.routes.js';
|
|
|
20
20
|
import { createMarketplaceRouter } from '../controllers/marketplace/index.js';
|
|
21
21
|
import { createKnowledgeRouter } from '../controllers/knowledge/index.js';
|
|
22
22
|
import { createTemplateRouter } from '../controllers/template/index.js';
|
|
23
|
-
import { createCloudRouter, createRelayRouter, createAuthRouter } from '../controllers/cloud/index.js';
|
|
23
|
+
import { createCloudRouter, createRelayRouter, createAuthRouter, createDeviceRouter } from '../controllers/cloud/index.js';
|
|
24
|
+
import { createAdminRouter } from '../controllers/admin/admin.routes.js';
|
|
24
25
|
import { createAuditorRouter } from '../controllers/auditor/auditor.routes.js';
|
|
25
26
|
/**
|
|
26
27
|
* Creates API routes using the new organized controller structure
|
|
@@ -76,6 +77,10 @@ export function createApiRoutes(apiController) {
|
|
|
76
77
|
router.use('/relay', createRelayRouter());
|
|
77
78
|
// Auth routes for CrewlyAI Cloud account management (register, login, JWT)
|
|
78
79
|
router.use('/auth', createAuthRouter());
|
|
80
|
+
// Admin portal routes (admin login, user management)
|
|
81
|
+
router.use('/admin', createAdminRouter());
|
|
82
|
+
// Device heartbeat and discovery routes (Pro users, dual-machine)
|
|
83
|
+
router.use('/cloud/devices', createDeviceRouter());
|
|
79
84
|
// Auditor routes for manual audit triggers and status
|
|
80
85
|
router.use('/auditor', createAuditorRouter());
|
|
81
86
|
// Keep legacy modular routes for handlers not yet migrated (for backward compatibility)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.routes.js","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAmB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"api.routes.js","sourceRoot":"","sources":["../../../../../backend/src/routes/api.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module services/cloud/auth/auth.service
|
|
14
14
|
*/
|
|
15
|
+
import { type UserPlan } from '../../../constants.js';
|
|
15
16
|
import { type UserProfile, type JwtPayload, type AuthTokenResponse, type LicenseStatus } from './auth.types.js';
|
|
16
17
|
/**
|
|
17
18
|
* AuthService singleton.
|
|
@@ -89,6 +90,34 @@ export declare class AuthService {
|
|
|
89
90
|
updateProfile(userId: string, updates: {
|
|
90
91
|
displayName?: string;
|
|
91
92
|
}): Promise<UserProfile>;
|
|
93
|
+
/**
|
|
94
|
+
* Login or create a user via OAuth (e.g., Google Sign-In).
|
|
95
|
+
*
|
|
96
|
+
* If the user exists, returns tokens for them.
|
|
97
|
+
* If not, creates a new account with no password (OAuth-only).
|
|
98
|
+
*
|
|
99
|
+
* @param email - User email from OAuth provider
|
|
100
|
+
* @param displayName - Display name from OAuth profile
|
|
101
|
+
* @returns Auth token response with access and refresh tokens
|
|
102
|
+
*/
|
|
103
|
+
loginOrCreateOAuth(email: string, displayName: string): Promise<AuthTokenResponse>;
|
|
104
|
+
/**
|
|
105
|
+
* List all registered users (admin only).
|
|
106
|
+
*
|
|
107
|
+
* Reads all user JSON files from the users directory.
|
|
108
|
+
*
|
|
109
|
+
* @returns Array of public user profiles
|
|
110
|
+
*/
|
|
111
|
+
listAllUsers(): Promise<UserProfile[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Update a user's subscription tier (admin only).
|
|
114
|
+
*
|
|
115
|
+
* @param userId - User ID to update
|
|
116
|
+
* @param tier - New plan tier
|
|
117
|
+
* @returns Updated user profile
|
|
118
|
+
* @throws Error if user not found
|
|
119
|
+
*/
|
|
120
|
+
updateUserTier(userId: string, tier: UserPlan): Promise<UserProfile>;
|
|
92
121
|
/**
|
|
93
122
|
* Get the license status for a user.
|
|
94
123
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/cloud/auth/auth.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/cloud/auth/auth.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAGnB,MAAM,iBAAiB,CAAC;AAgBzB;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,OAAO;IAQP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,WAAW;IAOjC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAQ5B;;;;;;;;OAQG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgChG;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0BxE;;;;;;OAMG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBpE;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAqCtC;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMjE;;;;;;;OAOG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAqB5F;;;;;;;;;OASG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmCxF;;;;;;OAMG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAwB5C;;;;;;;OAOG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;IAmB1E;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAmB9D;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQtC;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAiB7D;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAQjB;;;;;OAKG;IACH,OAAO,CAAC,IAAI;IAQZ;;OAEG;YACW,SAAS;IAIvB;;;;OAIG;YACW,QAAQ;IAMtB;;;;;OAKG;YACW,QAAQ;IAUtB;;;;;OAKG;YACW,iBAAiB;IAK/B;;;;OAIG;YACW,SAAS;IASvB;;;;;OAKG;YACW,WAAW;CAM1B"}
|
|
@@ -214,6 +214,98 @@ export class AuthService {
|
|
|
214
214
|
return toUserProfile(user);
|
|
215
215
|
}
|
|
216
216
|
// -------------------------------------------------------------------------
|
|
217
|
+
// OAuth login (no password required)
|
|
218
|
+
// -------------------------------------------------------------------------
|
|
219
|
+
/**
|
|
220
|
+
* Login or create a user via OAuth (e.g., Google Sign-In).
|
|
221
|
+
*
|
|
222
|
+
* If the user exists, returns tokens for them.
|
|
223
|
+
* If not, creates a new account with no password (OAuth-only).
|
|
224
|
+
*
|
|
225
|
+
* @param email - User email from OAuth provider
|
|
226
|
+
* @param displayName - Display name from OAuth profile
|
|
227
|
+
* @returns Auth token response with access and refresh tokens
|
|
228
|
+
*/
|
|
229
|
+
async loginOrCreateOAuth(email, displayName) {
|
|
230
|
+
const normalizedEmail = email.toLowerCase().trim();
|
|
231
|
+
const existingId = await this.findUserIdByEmail(normalizedEmail);
|
|
232
|
+
if (existingId) {
|
|
233
|
+
const user = await this.loadUser(existingId);
|
|
234
|
+
if (user) {
|
|
235
|
+
this.logger.info('OAuth login for existing user', { userId: user.id, email: normalizedEmail });
|
|
236
|
+
return this.createTokenResponse(user);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Create new OAuth user (no password — they authenticate via provider)
|
|
240
|
+
const now = new Date().toISOString();
|
|
241
|
+
const user = {
|
|
242
|
+
id: randomUUID(),
|
|
243
|
+
email: normalizedEmail,
|
|
244
|
+
passwordHash: '', // OAuth users have no password
|
|
245
|
+
displayName: displayName.trim(),
|
|
246
|
+
plan: AUTH.PLANS.FREE,
|
|
247
|
+
createdAt: now,
|
|
248
|
+
updatedAt: now,
|
|
249
|
+
};
|
|
250
|
+
await this.saveUser(user);
|
|
251
|
+
await this.updateIndex(normalizedEmail, user.id);
|
|
252
|
+
this.logger.info('OAuth user created', { userId: user.id, email: normalizedEmail });
|
|
253
|
+
return this.createTokenResponse(user);
|
|
254
|
+
}
|
|
255
|
+
// -------------------------------------------------------------------------
|
|
256
|
+
// Admin operations
|
|
257
|
+
// -------------------------------------------------------------------------
|
|
258
|
+
/**
|
|
259
|
+
* List all registered users (admin only).
|
|
260
|
+
*
|
|
261
|
+
* Reads all user JSON files from the users directory.
|
|
262
|
+
*
|
|
263
|
+
* @returns Array of public user profiles
|
|
264
|
+
*/
|
|
265
|
+
async listAllUsers() {
|
|
266
|
+
await this.ensureDir();
|
|
267
|
+
let files;
|
|
268
|
+
try {
|
|
269
|
+
files = await fs.readdir(this.usersDir);
|
|
270
|
+
}
|
|
271
|
+
catch {
|
|
272
|
+
return [];
|
|
273
|
+
}
|
|
274
|
+
const profiles = [];
|
|
275
|
+
for (const file of files) {
|
|
276
|
+
if (!file.endsWith('.json') || file === 'index.json')
|
|
277
|
+
continue;
|
|
278
|
+
try {
|
|
279
|
+
const content = await fs.readFile(path.join(this.usersDir, file), 'utf8');
|
|
280
|
+
const user = JSON.parse(content);
|
|
281
|
+
profiles.push(toUserProfile(user));
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// Skip malformed files
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
return profiles.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Update a user's subscription tier (admin only).
|
|
291
|
+
*
|
|
292
|
+
* @param userId - User ID to update
|
|
293
|
+
* @param tier - New plan tier
|
|
294
|
+
* @returns Updated user profile
|
|
295
|
+
* @throws Error if user not found
|
|
296
|
+
*/
|
|
297
|
+
async updateUserTier(userId, tier) {
|
|
298
|
+
const user = await this.loadUser(userId);
|
|
299
|
+
if (!user) {
|
|
300
|
+
throw new Error('User not found');
|
|
301
|
+
}
|
|
302
|
+
user.plan = tier;
|
|
303
|
+
user.updatedAt = new Date().toISOString();
|
|
304
|
+
await this.saveUser(user);
|
|
305
|
+
this.logger.info('User tier updated', { userId, tier });
|
|
306
|
+
return toUserProfile(user);
|
|
307
|
+
}
|
|
308
|
+
// -------------------------------------------------------------------------
|
|
217
309
|
// License
|
|
218
310
|
// -------------------------------------------------------------------------
|
|
219
311
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/cloud/auth/auth.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/cloud/auth/auth.service.ts"],"names":[],"mappings":"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"}
|