Skip to content

Commit 1fe2cc4

Browse files
Fix lint issues in nextjs package
1 parent b36e929 commit 1fe2cc4

54 files changed

Lines changed: 800 additions & 689 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/nextjs/.eslintrc.cjs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,11 @@ module.exports = {
3636
project: [path.resolve(__dirname, 'tsconfig.eslint.json')],
3737
},
3838
plugins: ['@wso2'],
39+
settings: {
40+
'import/resolver': {
41+
node: {
42+
extensions: ['.js', '.jsx', '.ts', '.tsx', '.d.ts', '.mjs', '.json'],
43+
},
44+
},
45+
},
3946
};

packages/nextjs/src/AsgardeoNextClient.ts

Lines changed: 75 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -17,49 +17,51 @@
1717
*/
1818

1919
import {
20+
AllOrganizationsApiResponse,
2021
AsgardeoNodeClient,
2122
AsgardeoRuntimeError,
23+
AuthClientConfig,
24+
CreateOrganizationPayload,
25+
EmbeddedFlowExecuteRequestConfig,
2226
EmbeddedFlowExecuteRequestPayload,
2327
EmbeddedFlowExecuteResponse,
28+
EmbeddedSignInFlowHandleRequestPayload,
29+
ExtendedAuthorizeRequestUrlParams,
30+
FlattenedSchema,
31+
IdToken,
2432
LegacyAsgardeoNodeClient,
33+
Organization,
34+
OrganizationDetails,
35+
Schema,
2536
SignInOptions,
2637
SignOutOptions,
2738
SignUpOptions,
39+
Storage,
40+
TokenExchangeRequestConfig,
41+
TokenResponse,
2842
User,
2943
UserProfile,
30-
initializeEmbeddedSignInFlow,
31-
Organization,
32-
EmbeddedSignInFlowHandleRequestPayload,
44+
createOrganization,
45+
deriveOrganizationHandleFromBaseUrl,
3346
executeEmbeddedSignInFlow,
34-
EmbeddedFlowExecuteRequestConfig,
35-
ExtendedAuthorizeRequestUrlParams,
36-
generateUserProfile,
47+
executeEmbeddedSignUpFlow,
48+
extractUserClaimsFromIdToken,
3749
flattenUserSchema,
38-
getScim2Me,
39-
getSchemas,
4050
generateFlattenedUserProfile,
41-
updateMeProfile,
42-
executeEmbeddedSignUpFlow,
51+
generateUserProfile,
52+
getAllOrganizations,
4353
getMeOrganizations,
44-
IdToken,
45-
createOrganization,
46-
CreateOrganizationPayload,
4754
getOrganization,
48-
OrganizationDetails,
49-
deriveOrganizationHandleFromBaseUrl,
50-
getAllOrganizations,
51-
AllOrganizationsApiResponse,
52-
extractUserClaimsFromIdToken,
53-
TokenResponse,
54-
Storage,
55-
TokenExchangeRequestConfig,
55+
getScim2Me,
56+
getSchemas,
57+
initializeEmbeddedSignInFlow,
58+
updateMeProfile,
5659
} from '@asgardeo/node';
5760
import {AsgardeoNextConfig} from './models/config';
61+
import getClientOrigin from './server/actions/getClientOrigin';
5862
import getSessionId from './server/actions/getSessionId';
5963
import decorateConfigWithNextEnv from './utils/decorateConfigWithNextEnv';
60-
import getClientOrigin from './server/actions/getClientOrigin';
6164

62-
const removeTrailingSlash = (path: string): string => (path.endsWith('/') ? path.slice(0, -1) : path);
6365
/**
6466
* Client for mplementing Asgardeo in Next.js applications.
6567
* This class provides the core functionality for managing user authentication and sessions.
@@ -70,7 +72,9 @@ const removeTrailingSlash = (path: string): string => (path.endsWith('/') ? path
7072
*/
7173
class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> extends AsgardeoNodeClient<T> {
7274
private static instance: AsgardeoNextClient<any>;
75+
7376
private asgardeo: LegacyAsgardeoNodeClient<T>;
77+
7478
public isInitialized: boolean = false;
7579

7680
private constructor() {
@@ -130,15 +134,15 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
130134

131135
return this.asgardeo.initialize(
132136
{
133-
organizationHandle: resolvedOrganizationHandle,
137+
afterSignInUrl: afterSignInUrl ?? origin,
138+
afterSignOutUrl: afterSignOutUrl ?? origin,
134139
baseUrl,
135140
clientId,
136141
clientSecret,
142+
enablePKCE: false,
143+
organizationHandle: resolvedOrganizationHandle,
137144
signInUrl,
138145
signUpUrl,
139-
afterSignInUrl: afterSignInUrl ?? origin,
140-
afterSignOutUrl: afterSignOutUrl ?? origin,
141-
enablePKCE: false,
142146
...rest,
143147
} as any,
144148
storage,
@@ -169,17 +173,17 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
169173
const resolvedSessionId: string = userId || ((await getSessionId()) as string);
170174

171175
try {
172-
const configData = await this.asgardeo.getConfigData();
173-
const baseUrl = configData?.baseUrl;
176+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
177+
const baseUrl: string | undefined = configData?.baseUrl;
174178

175-
const profile = await getScim2Me({
179+
const profile: User = await getScim2Me({
176180
baseUrl,
177181
headers: {
178182
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
179183
},
180184
});
181185

182-
const schemas = await getSchemas({
186+
const schemas: Schema[] = await getSchemas({
183187
baseUrl,
184188
headers: {
185189
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
@@ -196,37 +200,37 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
196200
await this.ensureInitialized();
197201

198202
try {
199-
const configData = await this.asgardeo.getConfigData();
200-
const baseUrl = configData?.baseUrl;
203+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
204+
const baseUrl: string | undefined = configData?.baseUrl;
201205

202-
const profile = await getScim2Me({
206+
const profile: User = await getScim2Me({
203207
baseUrl,
204208
headers: {
205209
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
206210
},
207211
});
208212

209-
const schemas = await getSchemas({
213+
const schemas: Schema[] = await getSchemas({
210214
baseUrl,
211215
headers: {
212216
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
213217
},
214218
});
215219

216-
const processedSchemas = flattenUserSchema(schemas);
220+
const processedSchemas: FlattenedSchema[] = flattenUserSchema(schemas);
217221

218-
const output = {
219-
schemas: processedSchemas,
222+
const output: UserProfile = {
220223
flattenedProfile: generateFlattenedUserProfile(profile, processedSchemas),
221224
profile,
225+
schemas: processedSchemas,
222226
};
223227

224228
return output;
225229
} catch (error) {
226230
return {
227-
schemas: [],
228231
flattenedProfile: extractUserClaimsFromIdToken(await this.asgardeo.getDecodedIdToken(userId)),
229232
profile: extractUserClaimsFromIdToken(await this.asgardeo.getDecodedIdToken(userId)),
233+
schemas: [],
230234
};
231235
}
232236
}
@@ -235,15 +239,15 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
235239
await this.ensureInitialized();
236240

237241
try {
238-
const configData = await this.asgardeo.getConfigData();
239-
const baseUrl = configData?.baseUrl;
242+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
243+
const baseUrl: string | undefined = configData?.baseUrl;
240244

241245
return await updateMeProfile({
242246
baseUrl,
243-
payload,
244247
headers: {
245248
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
246249
},
250+
payload,
247251
});
248252
} catch (error) {
249253
throw new AsgardeoRuntimeError(
@@ -257,15 +261,15 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
257261

258262
async createOrganization(payload: CreateOrganizationPayload, userId?: string): Promise<Organization> {
259263
try {
260-
const configData = await this.asgardeo.getConfigData();
264+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
261265
const baseUrl: string = configData?.baseUrl as string;
262266

263267
return await createOrganization({
264-
payload,
265268
baseUrl,
266269
headers: {
267270
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
268271
},
272+
payload,
269273
});
270274
} catch (error) {
271275
throw new AsgardeoRuntimeError(
@@ -279,15 +283,15 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
279283

280284
async getOrganization(organizationId: string, userId?: string): Promise<OrganizationDetails> {
281285
try {
282-
const configData = await this.asgardeo.getConfigData();
286+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
283287
const baseUrl: string = configData?.baseUrl as string;
284288

285289
return await getOrganization({
286290
baseUrl,
287-
organizationId,
288291
headers: {
289292
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
290293
},
294+
organizationId,
291295
});
292296
} catch (error) {
293297
throw new AsgardeoRuntimeError(
@@ -301,7 +305,7 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
301305

302306
override async getMyOrganizations(options?: any, userId?: string): Promise<Organization[]> {
303307
try {
304-
const configData = await this.asgardeo.getConfigData();
308+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
305309
const baseUrl: string = configData?.baseUrl as string;
306310

307311
return await getMeOrganizations({
@@ -324,10 +328,10 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
324328

325329
override async getAllOrganizations(options?: any, userId?: string): Promise<AllOrganizationsApiResponse> {
326330
try {
327-
const configData = await this.asgardeo.getConfigData();
331+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
328332
const baseUrl: string = configData?.baseUrl as string;
329333

330-
return getAllOrganizations({
334+
return await getAllOrganizations({
331335
baseUrl,
332336
headers: {
333337
Authorization: `Bearer ${await this.getAccessToken(userId)}`,
@@ -347,17 +351,14 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
347351
const idToken: IdToken = await this.asgardeo.getDecodedIdToken(userId);
348352

349353
return {
350-
orgHandle: idToken?.org_handle as string,
351-
name: idToken?.org_name as string,
352354
id: idToken?.org_id as string,
355+
name: idToken?.org_name as string,
356+
orgHandle: idToken?.org_handle as string,
353357
};
354358
}
355359

356360
override async switchOrganization(organization: Organization, userId?: string): Promise<TokenResponse | Response> {
357361
try {
358-
const configData = await this.asgardeo.getConfigData();
359-
const scopes = configData?.scopes;
360-
361362
if (!organization.id) {
362363
throw new AsgardeoRuntimeError(
363364
'Organization ID is required for switching organizations',
@@ -367,7 +368,7 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
367368
);
368369
}
369370

370-
const exchangeConfig = {
371+
const exchangeConfig: TokenExchangeRequestConfig = {
371372
attachToken: false,
372373
data: {
373374
client_id: '{{clientId}}',
@@ -393,6 +394,7 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
393394
}
394395
}
395396

397+
// eslint-disable-next-line class-methods-use-this
396398
override isLoading(): boolean {
397399
return false;
398400
}
@@ -409,9 +411,10 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
409411
* Gets the access token from the session cookie if no sessionId is provided,
410412
* otherwise falls back to legacy client method.
411413
*/
412-
async getAccessToken(sessionId?: string): Promise<string> {
414+
// eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars
415+
async getAccessToken(_sessionId?: string): Promise<string> {
413416
const {default: getAccessToken} = await import('./server/actions/getAccessToken');
414-
const token = await getAccessToken();
417+
const token: string | undefined = await getAccessToken();
415418

416419
if (typeof token !== 'string' || !token) {
417420
throw new AsgardeoRuntimeError(
@@ -449,23 +452,23 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
449452
onSignInSuccess?: (afterSignInUrl: string) => void,
450453
): Promise<User>;
451454
override async signIn(...args: any[]): Promise<User> {
452-
const arg1 = args[0];
453-
const arg2 = args[1];
454-
const arg3 = args[2];
455-
const arg4 = args[3];
455+
const arg1: any = args[0];
456+
const arg2: any = args[1];
457+
const arg3: any = args[2];
458+
const arg4: any = args[3];
456459

457460
if (typeof arg1 === 'object' && 'flowId' in arg1) {
458461
if (arg1.flowId === '') {
459462
const defaultSignInUrl: URL = new URL(
460463
await this.getAuthorizeRequestUrl({
461-
response_mode: 'direct',
462464
client_secret: '{{clientSecret}}',
465+
response_mode: 'direct',
463466
}),
464467
);
465468

466469
return initializeEmbeddedSignInFlow({
467-
url: `${defaultSignInUrl.origin}${defaultSignInUrl.pathname}`,
468470
payload: Object.fromEntries(defaultSignInUrl.searchParams.entries()),
471+
url: `${defaultSignInUrl.origin}${defaultSignInUrl.pathname}`,
469472
});
470473
}
471474

@@ -513,11 +516,11 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
513516
);
514517
}
515518

516-
const firstArg = args[0];
519+
const firstArg: any = args[0];
517520

518521
if (typeof firstArg === 'object' && 'flowType' in firstArg) {
519-
const configData = await this.asgardeo.getConfigData();
520-
const baseUrl = configData?.baseUrl;
522+
const configData: AuthClientConfig<T> = await this.asgardeo.getConfigData();
523+
const baseUrl: string | undefined = configData?.baseUrl;
521524

522525
return executeEmbeddedSignUpFlow({
523526
baseUrl,
@@ -532,7 +535,8 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
532535
);
533536
}
534537

535-
override signInSilently(options?: SignInOptions): Promise<User | boolean> {
538+
// eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-unused-vars
539+
override signInSilently(_options?: SignInOptions): Promise<User | boolean> {
536540
throw new AsgardeoRuntimeError(
537541
'Not implemented',
538542
'AsgardeoNextClient-signInSilently-NotImplementedError-001',
@@ -568,6 +572,7 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
568572
return this.asgardeo.getStorageManager();
569573
}
570574

575+
// eslint-disable-next-line class-methods-use-this
571576
public async clearSession(): Promise<void> {
572577
throw new AsgardeoRuntimeError(
573578
'Not implemented',
@@ -578,11 +583,11 @@ class AsgardeoNextClient<T extends AsgardeoNextConfig = AsgardeoNextConfig> exte
578583
}
579584

580585
override async setSession(sessionData: Record<string, unknown>, sessionId?: string): Promise<void> {
581-
return await (await this.asgardeo.getStorageManager()).setSessionData(sessionData, sessionId);
586+
return (await this.asgardeo.getStorageManager()).setSessionData(sessionData, sessionId);
582587
}
583588

584-
override decodeJwtToken<T = Record<string, unknown>>(token: string): Promise<T> {
585-
return this.asgardeo.decodeJwtToken<T>(token);
589+
override decodeJwtToken<R = Record<string, unknown>>(token: string): Promise<R> {
590+
return this.asgardeo.decodeJwtToken<R>(token);
586591
}
587592
}
588593

0 commit comments

Comments
 (0)