Skip to content

Commit fa83417

Browse files
Improve angular SDK archictecture
1 parent 91dceb1 commit fa83417

Some content is hidden

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

42 files changed

+4553
-1775
lines changed

package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@
5050
"undici": "^7.21.0"
5151
},
5252
"pnpm": {
53+
"packageExtensions": {
54+
"@analogjs/vite-plugin-angular": {
55+
"peerDependencies": {
56+
"typescript": ">=5.5"
57+
}
58+
}
59+
},
5360
"overrides": {
5461
"pbkdf2": "3.1.3",
5562
"sha.js": "2.4.12",

packages/angular/esbuild.config.mjs

Lines changed: 0 additions & 45 deletions
This file was deleted.

packages/angular/ng-package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"$schema": "node_modules/ng-packagr/ng-package.schema.json",
3+
"dest": "dist",
4+
"allowedNonPeerDependencies": ["@asgardeo/browser", "@asgardeo/i18n", "tslib"],
5+
"lib": {
6+
"entryFile": "src/index.ts"
7+
}
8+
}

packages/angular/package.json

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,47 +16,54 @@
1616
"author": "WSO2",
1717
"license": "Apache-2.0",
1818
"type": "module",
19-
"main": "dist/cjs/index.js",
20-
"module": "dist/index.js",
19+
"module": "dist/fesm2022/asgardeo-angular.mjs",
20+
"typings": "dist/types/asgardeo-angular.d.ts",
2121
"exports": {
22-
"import": "./dist/index.js",
23-
"require": "./dist/cjs/index.js"
22+
"./package.json": {
23+
"default": "./package.json"
24+
},
25+
".": {
26+
"types": "./dist/types/asgardeo-angular.d.ts",
27+
"default": "./dist/fesm2022/asgardeo-angular.mjs"
28+
}
2429
},
2530
"files": [
2631
"dist",
2732
"README.md",
2833
"LICENSE"
2934
],
30-
"types": "dist/index.d.ts",
35+
"sideEffects": false,
3136
"repository": {
3237
"type": "git",
3338
"url": "https://github.com/asgardeo/javascript",
3439
"directory": "packages/angular"
3540
},
3641
"scripts": {
37-
"build": "pnpm clean && node esbuild.config.mjs && tsc -p tsconfig.lib.json --emitDeclarationOnly --outDir dist",
42+
"build": "pnpm clean && ng-packagr -p ng-package.json",
3843
"clean": "rimraf dist",
3944
"fix:lint": "eslint . --ext .js,.ts,.cjs,.mjs",
4045
"lint": "eslint . --ext .js,.ts,.cjs,.mjs",
4146
"test": "vitest",
4247
"typecheck": "tsc -p tsconfig.lib.json"
4348
},
4449
"devDependencies": {
50+
"@angular/compiler": "21.1.5",
51+
"@angular/compiler-cli": "21.1.5",
4552
"@types/node": "22.15.3",
4653
"@wso2/eslint-plugin": "catalog:",
4754
"@wso2/prettier-config": "catalog:",
48-
"esbuild": "0.25.9",
4955
"eslint": "8.57.0",
5056
"jsdom": "26.1.0",
57+
"ng-packagr": "21.1.0",
5158
"prettier": "2.6.2",
5259
"rimraf": "6.1.0",
53-
"typescript": "5.7.2",
60+
"typescript": "5.9.3",
5461
"vitest": "3.1.3"
5562
},
5663
"peerDependencies": {
57-
"@angular/common": ">=17.0.0",
58-
"@angular/core": ">=17.0.0",
59-
"@angular/router": ">=17.0.0",
64+
"@angular/common": ">=18.0.0",
65+
"@angular/core": ">=18.0.0",
66+
"@angular/router": ">=18.0.0",
6067
"rxjs": ">=7.0.0"
6168
},
6269
"dependencies": {

packages/angular/src/AsgardeoAngularClient.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,11 @@ class AsgardeoAngularClient<T extends AsgardeoAngularConfig = AsgardeoAngularCon
150150
}
151151

152152
async getDecodedIdToken(sessionId?: string): Promise<IdToken> {
153-
return this.spaClient.getDecodedIdToken(sessionId);
153+
return (await this.spaClient.getDecodedIdToken(sessionId)) as IdToken;
154154
}
155155

156156
async getIdToken(): Promise<string> {
157-
return this.withLoading(async () => this.spaClient.getIdToken());
157+
return this.withLoading(async () => (await this.spaClient.getIdToken()) as string);
158158
}
159159

160160
async getUserProfile(options?: any): Promise<UserProfile> {
@@ -236,9 +236,9 @@ class AsgardeoAngularClient<T extends AsgardeoAngularConfig = AsgardeoAngularCon
236236
return await this.withLoading(async () => {
237237
const idToken: IdToken = await this.getDecodedIdToken();
238238
return {
239-
id: idToken?.org_id,
240-
name: idToken?.org_name,
241-
orgHandle: idToken?.org_handle,
239+
id: idToken?.org_id || '',
240+
name: idToken?.org_name || '',
241+
orgHandle: idToken?.org_handle || '',
242242
};
243243
});
244244
} catch (error) {
@@ -298,7 +298,7 @@ class AsgardeoAngularClient<T extends AsgardeoAngularConfig = AsgardeoAngularCon
298298
}
299299

300300
override async isSignedIn(): Promise<boolean> {
301-
return this.spaClient.isSignedIn();
301+
return (await this.spaClient.isSignedIn()) ?? false;
302302
}
303303

304304
/**
@@ -329,7 +329,7 @@ class AsgardeoAngularClient<T extends AsgardeoAngularConfig = AsgardeoAngularCon
329329
}
330330

331331
override async signInSilently(options?: SignInOptions): Promise<User | boolean> {
332-
return this.spaClient.signInSilently(options as Record<string, string | boolean>);
332+
return (await this.spaClient.signInSilently(options as Record<string, string | boolean>)) as User | boolean;
333333
}
334334

335335
// eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -353,12 +353,12 @@ class AsgardeoAngularClient<T extends AsgardeoAngularConfig = AsgardeoAngularCon
353353
navigate(getRedirectBasedSignUpUrl(config as Config));
354354
}
355355

356-
async request(requestConfig?: HttpRequestConfig): Promise<HttpResponse<any>> {
357-
return this.spaClient.httpRequest(requestConfig);
356+
async request(requestConfig: HttpRequestConfig): Promise<HttpResponse<any>> {
357+
return (await this.spaClient.httpRequest(requestConfig)) as HttpResponse<any>;
358358
}
359359

360-
async requestAll(requestConfigs?: HttpRequestConfig[]): Promise<HttpResponse<any>[]> {
361-
return this.spaClient.httpRequestAll(requestConfigs);
360+
async requestAll(requestConfigs: HttpRequestConfig[]): Promise<HttpResponse<any>[]> {
361+
return (await this.spaClient.httpRequestAll(requestConfigs)) as HttpResponse<any>[];
362362
}
363363

364364
override async getAccessToken(sessionId?: string): Promise<string> {
@@ -374,7 +374,7 @@ class AsgardeoAngularClient<T extends AsgardeoAngularConfig = AsgardeoAngularCon
374374
}
375375

376376
override decodeJwtToken<TResult = Record<string, unknown>>(token: string): Promise<TResult> {
377-
return this.spaClient.decodeJwtToken<TResult>(token);
377+
return this.spaClient.decodeJwtToken<TResult>(token) as Promise<TResult>;
378378
}
379379
}
380380

packages/angular/src/api/createOrganization.ts

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,10 @@
1818

1919
import {
2020
Organization,
21-
HttpInstance,
22-
HttpResponse,
23-
AsgardeoSPAClient,
24-
HttpRequestConfig,
2521
createOrganization as baseCreateOrganization,
2622
CreateOrganizationConfig as BaseCreateOrganizationConfig,
2723
} from '@asgardeo/browser';
24+
import {createDefaultFetcher} from '../utils/fetcher';
2825

2926
/**
3027
* Configuration for the createOrganization request (Angular-specific)
@@ -96,30 +93,10 @@ const createOrganization = async ({
9693
fetcher,
9794
instanceId = 0,
9895
...requestConfig
99-
}: CreateOrganizationConfig): Promise<Organization> => {
100-
const defaultFetcher = async (url: string, config: RequestInit): Promise<Response> => {
101-
const client: AsgardeoSPAClient = AsgardeoSPAClient.getInstance(instanceId);
102-
const httpClient: HttpInstance = client.httpRequest.bind(client);
103-
const response: HttpResponse<any> = await httpClient({
104-
data: config.body ? JSON.parse(config.body as string) : undefined,
105-
headers: config.headers as Record<string, string>,
106-
method: config.method || 'POST',
107-
url,
108-
} as HttpRequestConfig);
109-
110-
return {
111-
json: () => Promise.resolve(response.data),
112-
ok: response.status >= 200 && response.status < 300,
113-
status: response.status,
114-
statusText: response.statusText || '',
115-
text: () => Promise.resolve(typeof response.data === 'string' ? response.data : JSON.stringify(response.data)),
116-
} as Response;
117-
};
118-
119-
return baseCreateOrganization({
96+
}: CreateOrganizationConfig): Promise<Organization> =>
97+
baseCreateOrganization({
12098
...requestConfig,
121-
fetcher: fetcher || defaultFetcher,
99+
fetcher: fetcher || createDefaultFetcher(instanceId),
122100
});
123-
};
124101

125102
export default createOrganization;

packages/angular/src/api/getAllOrganizations.ts

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,11 @@
1717
*/
1818

1919
import {
20-
HttpInstance,
21-
HttpResponse,
22-
AsgardeoSPAClient,
23-
HttpRequestConfig,
2420
getAllOrganizations as baseGetAllOrganizations,
2521
GetAllOrganizationsConfig as BaseGetAllOrganizationsConfig,
2622
AllOrganizationsApiResponse,
2723
} from '@asgardeo/browser';
24+
import {createDefaultFetcher} from '../utils/fetcher';
2825

2926
/**
3027
* Configuration for the getAllOrganizations request (Angular-specific)
@@ -88,29 +85,10 @@ const getAllOrganizations = async ({
8885
fetcher,
8986
instanceId = 0,
9087
...requestConfig
91-
}: GetAllOrganizationsConfig): Promise<AllOrganizationsApiResponse> => {
92-
const defaultFetcher = async (url: string, config: RequestInit): Promise<Response> => {
93-
const client: AsgardeoSPAClient = AsgardeoSPAClient.getInstance(instanceId);
94-
const httpClient: HttpInstance = client.httpRequest.bind(client);
95-
const response: HttpResponse<any> = await httpClient({
96-
headers: config.headers as Record<string, string>,
97-
method: config.method || 'GET',
98-
url,
99-
} as HttpRequestConfig);
100-
101-
return {
102-
json: () => Promise.resolve(response.data),
103-
ok: response.status >= 200 && response.status < 300,
104-
status: response.status,
105-
statusText: response.statusText || '',
106-
text: () => Promise.resolve(typeof response.data === 'string' ? response.data : JSON.stringify(response.data)),
107-
} as Response;
108-
};
109-
110-
return baseGetAllOrganizations({
88+
}: GetAllOrganizationsConfig): Promise<AllOrganizationsApiResponse> =>
89+
baseGetAllOrganizations({
11190
...requestConfig,
112-
fetcher: fetcher || defaultFetcher,
91+
fetcher: fetcher || createDefaultFetcher(instanceId),
11392
});
114-
};
11593

11694
export default getAllOrganizations;

packages/angular/src/api/getMeOrganizations.ts

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,10 @@
1818

1919
import {
2020
Organization,
21-
HttpInstance,
22-
HttpResponse,
23-
AsgardeoSPAClient,
24-
HttpRequestConfig,
2521
getMeOrganizations as baseGetMeOrganizations,
2622
GetMeOrganizationsConfig as BaseGetMeOrganizationsConfig,
2723
} from '@asgardeo/browser';
24+
import {createDefaultFetcher} from '../utils/fetcher';
2825

2926
/**
3027
* Configuration for the getMeOrganizations request (Angular-specific)
@@ -92,29 +89,10 @@ const getMeOrganizations = async ({
9289
fetcher,
9390
instanceId = 0,
9491
...requestConfig
95-
}: GetMeOrganizationsConfig): Promise<Organization[]> => {
96-
const defaultFetcher = async (url: string, config: RequestInit): Promise<Response> => {
97-
const client: AsgardeoSPAClient = AsgardeoSPAClient.getInstance(instanceId);
98-
const httpClient: HttpInstance = client.httpRequest.bind(client);
99-
const response: HttpResponse<any> = await httpClient({
100-
headers: config.headers as Record<string, string>,
101-
method: config.method || 'GET',
102-
url,
103-
} as HttpRequestConfig);
104-
105-
return {
106-
json: () => Promise.resolve(response.data),
107-
ok: response.status >= 200 && response.status < 300,
108-
status: response.status,
109-
statusText: response.statusText || '',
110-
text: () => Promise.resolve(typeof response.data === 'string' ? response.data : JSON.stringify(response.data)),
111-
} as Response;
112-
};
113-
114-
return baseGetMeOrganizations({
92+
}: GetMeOrganizationsConfig): Promise<Organization[]> =>
93+
baseGetMeOrganizations({
11594
...requestConfig,
116-
fetcher: fetcher || defaultFetcher,
95+
fetcher: fetcher || createDefaultFetcher(instanceId),
11796
});
118-
};
11997

12098
export default getMeOrganizations;

0 commit comments

Comments
 (0)