Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0d6a3b97df |
@@ -635,6 +635,7 @@ attachPortalCoreAuthRoutes({
|
|||||||
resolveSkillRuntimeForClient,
|
resolveSkillRuntimeForClient,
|
||||||
resolveAgentCodeRunForClient,
|
resolveAgentCodeRunForClient,
|
||||||
resolveGoalRunForClient,
|
resolveGoalRunForClient,
|
||||||
|
getSubscriptionService: () => subscriptionService,
|
||||||
getPlazaSeo: () => plazaSeo,
|
getPlazaSeo: () => plazaSeo,
|
||||||
plazaClientIp,
|
plazaClientIp,
|
||||||
logger: console,
|
logger: console,
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ export function attachPortalCoreAuthRoutes({
|
|||||||
resolveGoalRunForClient = async (userId) => ({
|
resolveGoalRunForClient = async (userId) => ({
|
||||||
enabled: isGoalRunEnabledForUser(userId, process.env),
|
enabled: isGoalRunEnabledForUser(userId, process.env),
|
||||||
}),
|
}),
|
||||||
|
getSubscriptionService = () => null,
|
||||||
getPlazaSeo = () => null,
|
getPlazaSeo = () => null,
|
||||||
plazaClientIp = (req) => req.ip,
|
plazaClientIp = (req) => req.ip,
|
||||||
logger = console,
|
logger = console,
|
||||||
@@ -64,9 +65,16 @@ export function attachPortalCoreAuthRoutes({
|
|||||||
const agentCodeRun =
|
const agentCodeRun =
|
||||||
await resolveAgentCodeRunForClient(me.id);
|
await resolveAgentCodeRunForClient(me.id);
|
||||||
const goalRun = await resolveGoalRunForClient(me.id);
|
const goalRun = await resolveGoalRunForClient(me.id);
|
||||||
|
const subscriptionService = getSubscriptionService();
|
||||||
|
const subscription = subscriptionService
|
||||||
|
? await subscriptionService.getActiveSubscription(me.id)
|
||||||
|
: null;
|
||||||
return res.json({
|
return res.json({
|
||||||
authenticated: true,
|
authenticated: true,
|
||||||
user: me,
|
user: {
|
||||||
|
...me,
|
||||||
|
subscription,
|
||||||
|
},
|
||||||
mode: 'user',
|
mode: 'user',
|
||||||
capabilities: capabilityState.capabilities,
|
capabilities: capabilityState.capabilities,
|
||||||
grantedSkills:
|
grantedSkills:
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ test('returns multi-user status and preserves capability projection', async () =
|
|||||||
assert.equal(res.statusCode, 200);
|
assert.equal(res.statusCode, 200);
|
||||||
assert.deepEqual(res.body, {
|
assert.deepEqual(res.body, {
|
||||||
authenticated: true,
|
authenticated: true,
|
||||||
user: { id: 'user-1', username: 'john' },
|
user: { id: 'user-1', username: 'john', subscription: null },
|
||||||
mode: 'user',
|
mode: 'user',
|
||||||
capabilities: ['chat'],
|
capabilities: ['chat'],
|
||||||
grantedSkills: ['web'],
|
grantedSkills: ['web'],
|
||||||
@@ -220,6 +220,24 @@ test('returns multi-user status and preserves capability projection', async () =
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('includes active subscription in auth status user payload', async () => {
|
||||||
|
const setup = createSetup({
|
||||||
|
getSubscriptionService: () => ({
|
||||||
|
async getActiveSubscription(userId) {
|
||||||
|
assert.equal(userId, 'user-1');
|
||||||
|
return {
|
||||||
|
planType: 'pro',
|
||||||
|
periodTokensLimit: 100_000_000,
|
||||||
|
periodTokensUsed: 0,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const res = await invoke(setup, 'get', '/auth/status');
|
||||||
|
assert.equal(res.statusCode, 200);
|
||||||
|
assert.equal(res.body.user.subscription?.planType, 'pro');
|
||||||
|
});
|
||||||
|
|
||||||
test('preserves unavailable, legacy, and disabled status modes', async () => {
|
test('preserves unavailable, legacy, and disabled status modes', async () => {
|
||||||
const unavailable = createSetup({
|
const unavailable = createSetup({
|
||||||
isDatabaseConfiguredFn: () => true,
|
isDatabaseConfiguredFn: () => true,
|
||||||
|
|||||||
+10
-3
@@ -331,19 +331,26 @@ export async function checkAuth(): Promise<AuthStatus> {
|
|||||||
}
|
}
|
||||||
if (status.authenticated) resetUnauthorizedGuard();
|
if (status.authenticated) resetUnauthorizedGuard();
|
||||||
applyAgentCodeRunClientPolicy(status.agentCodeRun ?? null);
|
applyAgentCodeRunClientPolicy(status.agentCodeRun ?? null);
|
||||||
if (status.authenticated && status.mode === 'user' && !status.capabilities) {
|
if (status.authenticated && status.mode === 'user') {
|
||||||
|
const needsMeHydration =
|
||||||
|
!status.capabilities
|
||||||
|
|| !status.user
|
||||||
|
|| !Object.prototype.hasOwnProperty.call(status.user, 'subscription');
|
||||||
|
if (needsMeHydration) {
|
||||||
try {
|
try {
|
||||||
const me = await getMe();
|
const me = await getMe();
|
||||||
return {
|
return {
|
||||||
...status,
|
...status,
|
||||||
capabilities: me.capabilities,
|
capabilities: me.capabilities ?? status.capabilities,
|
||||||
grantedSkills: me.grantedSkills,
|
grantedSkills: me.grantedSkills ?? status.grantedSkills,
|
||||||
|
unrestricted: me.unrestricted ?? status.unrestricted,
|
||||||
user: me.user,
|
user: me.user,
|
||||||
};
|
};
|
||||||
} catch {
|
} catch {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return status;
|
return status;
|
||||||
} catch {
|
} catch {
|
||||||
return { authenticated: false };
|
return { authenticated: false };
|
||||||
|
|||||||
Reference in New Issue
Block a user