@rangs/auth0-lib 0.0.1

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 ADDED
@@ -0,0 +1,63 @@
1
+ # Auth0Lib
2
+
3
+ This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
8
+
9
+ ```bash
10
+ ng generate component component-name
11
+ ```
12
+
13
+ For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
14
+
15
+ ```bash
16
+ ng generate --help
17
+ ```
18
+
19
+ ## Building
20
+
21
+ To build the library, run:
22
+
23
+ ```bash
24
+ ng build auth0-lib
25
+ ```
26
+
27
+ This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
28
+
29
+ ### Publishing the Library
30
+
31
+ Once the project is built, you can publish your library by following these steps:
32
+
33
+ 1. Navigate to the `dist` directory:
34
+ ```bash
35
+ cd dist/auth0-lib
36
+ ```
37
+
38
+ 2. Run the `npm publish` command to publish your library to the npm registry:
39
+ ```bash
40
+ npm publish
41
+ ```
42
+
43
+ ## Running unit tests
44
+
45
+ To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
46
+
47
+ ```bash
48
+ ng test
49
+ ```
50
+
51
+ ## Running end-to-end tests
52
+
53
+ For end-to-end (e2e) testing, run:
54
+
55
+ ```bash
56
+ ng e2e
57
+ ```
58
+
59
+ Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
60
+
61
+ ## Additional Resources
62
+
63
+ For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
@@ -0,0 +1,206 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, effect, computed, Injectable, NgModule } from '@angular/core';
3
+ import * as i1 from 'ngx-permissions';
4
+ import { NgxPermissionsModule } from 'ngx-permissions';
5
+ import * as i1$1 from '@auth0/auth0-angular';
6
+ import { AuthModule as AuthModule$1 } from '@auth0/auth0-angular';
7
+ import { BehaviorSubject, firstValueFrom } from 'rxjs';
8
+
9
+ class RoleContextService {
10
+ permissionsService;
11
+ STORAGE_KEY = 'im-role-context';
12
+ bc = new BroadcastChannel('im-role-context-channel');
13
+ // Store role context in signal (without permissions)
14
+ contextSignal = signal(this.getStoredContext(), ...(ngDevMode ? [{ debugName: "contextSignal" }] : []));
15
+ context = this.contextSignal;
16
+ /** For opening side Nav after tenant/role switch */
17
+ sidNav = new BehaviorSubject(null);
18
+ sidNav$ = this.sidNav.asObservable();
19
+ constructor(permissionsService) {
20
+ this.permissionsService = permissionsService;
21
+ /** Sync from BroadcastChannel */
22
+ this.bc.onmessage = (ev) => {
23
+ if (!this.isSameContext(ev.data.ctx)) {
24
+ this.showCustomPopup();
25
+ }
26
+ };
27
+ /** Sync from LocalStorage events (multi-tab) */
28
+ window.addEventListener('storage', (ev) => {
29
+ if (ev.key === this.STORAGE_KEY) {
30
+ const newCtx = ev.newValue ? JSON.parse(ev.newValue) : null;
31
+ if (!this.isSameContext(newCtx)) {
32
+ this.showCustomPopup();
33
+ }
34
+ }
35
+ });
36
+ // 🔥 IMPORTANT: Load permissions in memory — DO NOT save them
37
+ effect(() => {
38
+ const ctx = this.contextSignal();
39
+ this.permissionsService.flushPermissions();
40
+ if (ctx?.permissions?.length) {
41
+ // Load only in memory, not persisted
42
+ this.permissionsService.loadPermissions(ctx.permissions);
43
+ }
44
+ });
45
+ }
46
+ isSameContext(newCtx) {
47
+ const current = this.contextSignal();
48
+ return (current?.roleName === newCtx?.roleName && current?.tenantId === newCtx?.tenantId);
49
+ }
50
+ showCustomPopup() {
51
+ const modal = document.getElementById('roleChangeModal');
52
+ modal.style.display = 'flex';
53
+ const okBtn = document.getElementById('roleChangeOkBtn');
54
+ okBtn.onclick = () => {
55
+ window.location.href = window.location.origin;
56
+ };
57
+ }
58
+ // Set role context WITHOUT saving permissions to storage
59
+ setContext(ctx) {
60
+ // Clone without permissions
61
+ const saveCtx = ctx ? { ...ctx, permissions: undefined } : null;
62
+ this.applyContext(saveCtx, true);
63
+ // Permissions still applied in memory
64
+ if (ctx?.permissions) {
65
+ this.permissionsService.flushPermissions();
66
+ this.permissionsService.loadPermissions(ctx.permissions);
67
+ }
68
+ // Notify subscribers
69
+ this.sidNav.next(ctx);
70
+ }
71
+ clearContext() {
72
+ this.permissionsService.flushPermissions();
73
+ this.applyContext(null, true);
74
+ }
75
+ // Internal store + broadcast
76
+ applyContext(ctx, broadcast) {
77
+ if (ctx) {
78
+ const { permissions, ...storeOnly } = ctx;
79
+ localStorage.setItem(this.STORAGE_KEY, JSON.stringify(storeOnly));
80
+ }
81
+ else {
82
+ localStorage.removeItem(this.STORAGE_KEY);
83
+ }
84
+ this.contextSignal.set(ctx);
85
+ if (broadcast)
86
+ this.bc.postMessage(ctx);
87
+ }
88
+ // Load existing context (no permissions)
89
+ getStoredContext() {
90
+ const raw = localStorage.getItem(this.STORAGE_KEY);
91
+ return raw ? JSON.parse(raw) : null;
92
+ }
93
+ // Role check used by directive
94
+ hasAnyRole(roles) {
95
+ return computed(() => {
96
+ const currentRole = this.contextSignal()?.roleName?.toLowerCase();
97
+ return roles.some(r => r.toLowerCase() === currentRole);
98
+ });
99
+ }
100
+ notAnyRole(roles) {
101
+ return computed(() => !this.hasAnyRole(roles)());
102
+ }
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: RoleContextService, deps: [{ token: i1.NgxPermissionsService }], target: i0.ɵɵFactoryTarget.Injectable });
104
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: RoleContextService, providedIn: 'root' });
105
+ }
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: RoleContextService, decorators: [{
107
+ type: Injectable,
108
+ args: [{
109
+ providedIn: 'root'
110
+ }]
111
+ }], ctorParameters: () => [{ type: i1.NgxPermissionsService }] });
112
+
113
+ class TokenService {
114
+ auth;
115
+ constructor(auth) {
116
+ this.auth = auth;
117
+ }
118
+ async isAuthenticated() {
119
+ return await firstValueFrom(this.auth.isAuthenticated$);
120
+ }
121
+ async getUserId() {
122
+ try {
123
+ const user = await firstValueFrom(this.auth.user$);
124
+ return user?.['user_id'] ?? null;
125
+ }
126
+ catch (err) {
127
+ console.warn('User ID not available:', err);
128
+ return null;
129
+ }
130
+ }
131
+ async getUserEmail() {
132
+ try {
133
+ const user = await firstValueFrom(this.auth.user$);
134
+ console.log(user);
135
+ return user?.email ?? null;
136
+ }
137
+ catch (err) {
138
+ console.warn('User ID not available:', err);
139
+ return null;
140
+ }
141
+ }
142
+ async getUserFirstName() {
143
+ try {
144
+ const user = await firstValueFrom(this.auth.user$);
145
+ return user?.given_name ?? '';
146
+ }
147
+ catch (err) {
148
+ console.warn('User ID not available:', err);
149
+ return '';
150
+ }
151
+ }
152
+ async getUserLastName() {
153
+ try {
154
+ const user = await firstValueFrom(this.auth.user$);
155
+ return user?.family_name ?? '';
156
+ }
157
+ catch (err) {
158
+ console.warn('User ID not available:', err);
159
+ return '';
160
+ }
161
+ }
162
+ async getUserFullName() {
163
+ try {
164
+ const user = await firstValueFrom(this.auth.user$);
165
+ const fullName = `${user?.family_name ?? ''} ${user?.given_name ?? ''}`.trim();
166
+ return fullName || '';
167
+ }
168
+ catch (err) {
169
+ console.warn('User not available:', err);
170
+ return '';
171
+ }
172
+ }
173
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TokenService, deps: [{ token: i1$1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
174
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TokenService, providedIn: 'root' });
175
+ }
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: TokenService, decorators: [{
177
+ type: Injectable,
178
+ args: [{
179
+ providedIn: 'root'
180
+ }]
181
+ }], ctorParameters: () => [{ type: i1$1.AuthService }] });
182
+
183
+ class AuthModule {
184
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
185
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.14", ngImport: i0, type: AuthModule, imports: [NgxPermissionsModule,
186
+ AuthModule$1] });
187
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AuthModule, providers: [RoleContextService, TokenService], imports: [NgxPermissionsModule,
188
+ AuthModule$1] });
189
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.14", ngImport: i0, type: AuthModule, decorators: [{
191
+ type: NgModule,
192
+ args: [{
193
+ imports: [
194
+ NgxPermissionsModule,
195
+ AuthModule$1
196
+ ],
197
+ providers: [RoleContextService, TokenService]
198
+ }]
199
+ }] });
200
+
201
+ /**
202
+ * Generated bundle index. Do not edit.
203
+ */
204
+
205
+ export { AuthModule, RoleContextService, TokenService };
206
+ //# sourceMappingURL=auth0-lib.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth0-lib.mjs","sources":["../../../projects/auth0-lib/src/lib/services/role-context.service.ts","../../../projects/auth0-lib/src/lib/services/token.service.ts","../../../projects/auth0-lib/src/lib/auth.module.ts","../../../projects/auth0-lib/src/auth0-lib.ts"],"sourcesContent":["import { Injectable, signal, computed, effect } from '@angular/core';\r\nimport { RoleContextModel } from './role-context.model';\r\nimport { NgxPermissionsService } from 'ngx-permissions';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RoleContextService {\r\n\r\n private readonly STORAGE_KEY = 'im-role-context';\r\n private readonly bc = new BroadcastChannel('im-role-context-channel');\r\n\r\n // Store role context in signal (without permissions)\r\n private contextSignal = signal<RoleContextModel | null>(this.getStoredContext());\r\n context = this.contextSignal;\r\n\r\n /** For opening side Nav after tenant/role switch */\r\n private sidNav = new BehaviorSubject<RoleContextModel | null>(null);\r\n readonly sidNav$ = this.sidNav.asObservable();\r\n\r\n constructor(private permissionsService: NgxPermissionsService) {\r\n\r\n /** Sync from BroadcastChannel */\r\n this.bc.onmessage = (ev) => {\r\n if (!this.isSameContext(ev.data.ctx)) {\r\n this.showCustomPopup();\r\n }\r\n };\r\n\r\n /** Sync from LocalStorage events (multi-tab) */\r\n window.addEventListener('storage', (ev) => {\r\n if (ev.key === this.STORAGE_KEY) {\r\n const newCtx = ev.newValue ? JSON.parse(ev.newValue) : null;\r\n if (!this.isSameContext(newCtx)) {\r\n this.showCustomPopup();\r\n }\r\n }\r\n });\r\n\r\n // 🔥 IMPORTANT: Load permissions in memory — DO NOT save them\r\n effect(() => {\r\n const ctx = this.contextSignal();\r\n\r\n this.permissionsService.flushPermissions();\r\n\r\n if (ctx?.permissions?.length) {\r\n // Load only in memory, not persisted\r\n this.permissionsService.loadPermissions(ctx.permissions);\r\n }\r\n });\r\n }\r\n\r\n\r\n isSameContext(newCtx: RoleContextModel | null): boolean {\r\n const current = this.contextSignal();\r\n return ( current?.roleName === newCtx?.roleName && current?.tenantId === newCtx?.tenantId );\r\n }\r\n\r\n \r\n\r\n private showCustomPopup() {\r\n const modal = document.getElementById('roleChangeModal')!;\r\n modal.style.display = 'flex';\r\n\r\n const okBtn = document.getElementById('roleChangeOkBtn')!;\r\n okBtn.onclick = () => {\r\n window.location.href = window.location.origin;\r\n };\r\n }\r\n\r\n // Set role context WITHOUT saving permissions to storage\r\n setContext(ctx: RoleContextModel | null) {\r\n // Clone without permissions\r\n const saveCtx = ctx ? { ...ctx, permissions: undefined } : null;\r\n this.applyContext(saveCtx, true);\r\n\r\n // Permissions still applied in memory\r\n if (ctx?.permissions) {\r\n this.permissionsService.flushPermissions();\r\n this.permissionsService.loadPermissions(ctx.permissions);\r\n }\r\n\r\n // Notify subscribers\r\n this.sidNav.next(ctx);\r\n\r\n }\r\n\r\n clearContext() {\r\n this.permissionsService.flushPermissions();\r\n this.applyContext(null, true);\r\n }\r\n\r\n // Internal store + broadcast\r\n private applyContext(ctx: RoleContextModel | null, broadcast: boolean) {\r\n if (ctx) {\r\n const { permissions, ...storeOnly } = ctx;\r\n localStorage.setItem(this.STORAGE_KEY, JSON.stringify(storeOnly));\r\n } else {\r\n localStorage.removeItem(this.STORAGE_KEY);\r\n }\r\n\r\n this.contextSignal.set(ctx);\r\n\r\n if (broadcast) this.bc.postMessage(ctx);\r\n }\r\n\r\n // Load existing context (no permissions)\r\n private getStoredContext(): RoleContextModel | null {\r\n const raw = localStorage.getItem(this.STORAGE_KEY);\r\n return raw ? JSON.parse(raw) : null;\r\n }\r\n\r\n // Role check used by directive\r\n hasAnyRole(roles: string[]) {\r\n return computed(() => {\r\n const currentRole = this.contextSignal()?.roleName?.toLowerCase();\r\n return roles.some(r => r.toLowerCase() === currentRole);\r\n });\r\n }\r\n \r\n notAnyRole(roles: string[]) {\r\n return computed(() => !this.hasAnyRole(roles)());\r\n }\r\n\r\n \r\n}","import { Injectable } from '@angular/core';\r\nimport { AuthService } from '@auth0/auth0-angular';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TokenService {\r\n\r\n constructor(private auth: AuthService) { }\r\n\r\n\r\n\r\n async isAuthenticated(): Promise<boolean> {\r\n return await firstValueFrom(this.auth.isAuthenticated$);\r\n }\r\n\r\n\r\n async getUserId(): Promise<string | null> {\r\n try {\r\n const user = await firstValueFrom(this.auth.user$);\r\n return user?.['user_id'] ?? null;\r\n } catch (err) {\r\n console.warn('User ID not available:', err);\r\n return null;\r\n }\r\n }\r\n\r\n async getUserEmail(): Promise<string | null> {\r\n try {\r\n const user = await firstValueFrom(this.auth.user$);\r\n console.log(user);\r\n return user?.email ?? null;\r\n } catch (err) {\r\n console.warn('User ID not available:', err);\r\n return null;\r\n }\r\n }\r\n\r\n async getUserFirstName(): Promise<string | null> {\r\n try {\r\n const user = await firstValueFrom(this.auth.user$);\r\n return user?.given_name ?? '';\r\n } catch (err) {\r\n console.warn('User ID not available:', err);\r\n return '';\r\n }\r\n }\r\n async getUserLastName(): Promise<string | null> {\r\n try {\r\n const user = await firstValueFrom(this.auth.user$);\r\n return user?.family_name ?? '';\r\n } catch (err) {\r\n console.warn('User ID not available:', err);\r\n return '';\r\n }\r\n }\r\n\r\n async getUserFullName(): Promise<string> {\r\n try {\r\n const user = await firstValueFrom(this.auth.user$);\r\n const fullName = `${user?.family_name ?? ''} ${user?.given_name ?? ''}`.trim();\r\n return fullName || '';\r\n } catch (err) {\r\n console.warn('User not available:', err);\r\n return '';\r\n }\r\n }\r\n\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NgxPermissionsModule } from 'ngx-permissions';\r\nimport { AuthModule as OAuthModule } from '@auth0/auth0-angular';\r\nimport { RoleContextService,TokenService } from './services';\r\n\r\n@NgModule({\r\n imports: [\r\n NgxPermissionsModule,\r\n OAuthModule\r\n ],\r\n providers: [RoleContextService, TokenService]\r\n})\r\nexport class AuthModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","OAuthModule"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,71 @@
1
+ import * as i0 from '@angular/core';
2
+ import * as i1 from 'ngx-permissions';
3
+ import { NgxPermissionsService } from 'ngx-permissions';
4
+ import * as i2 from '@auth0/auth0-angular';
5
+ import { AuthService } from '@auth0/auth0-angular';
6
+ import * as rxjs from 'rxjs';
7
+
8
+ declare class AuthModule {
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthModule, never>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AuthModule, never, [typeof i1.NgxPermissionsModule, typeof i2.AuthModule], never>;
11
+ static ɵinj: i0.ɵɵInjectorDeclaration<AuthModule>;
12
+ }
13
+
14
+ interface RoleContextModel {
15
+ tenantId: string;
16
+ tenantName: string;
17
+ tenantAddress: string;
18
+ tenantEmail: string;
19
+ tenantLogo?: string;
20
+ tenantphone?: string;
21
+ tenantEmailId?: string;
22
+ roleId: string;
23
+ roleName: string;
24
+ userId: string;
25
+ firstName: string;
26
+ lastName: string;
27
+ fullName: string;
28
+ email: string;
29
+ phoneNumber: string;
30
+ headshotUrl?: string;
31
+ permissions?: string[];
32
+ roles: string[];
33
+ }
34
+
35
+ declare class RoleContextService {
36
+ private permissionsService;
37
+ private readonly STORAGE_KEY;
38
+ private readonly bc;
39
+ private contextSignal;
40
+ context: i0.WritableSignal<RoleContextModel | null>;
41
+ /** For opening side Nav after tenant/role switch */
42
+ private sidNav;
43
+ readonly sidNav$: rxjs.Observable<RoleContextModel | null>;
44
+ constructor(permissionsService: NgxPermissionsService);
45
+ isSameContext(newCtx: RoleContextModel | null): boolean;
46
+ private showCustomPopup;
47
+ setContext(ctx: RoleContextModel | null): void;
48
+ clearContext(): void;
49
+ private applyContext;
50
+ private getStoredContext;
51
+ hasAnyRole(roles: string[]): i0.Signal<boolean>;
52
+ notAnyRole(roles: string[]): i0.Signal<boolean>;
53
+ static ɵfac: i0.ɵɵFactoryDeclaration<RoleContextService, never>;
54
+ static ɵprov: i0.ɵɵInjectableDeclaration<RoleContextService>;
55
+ }
56
+
57
+ declare class TokenService {
58
+ private auth;
59
+ constructor(auth: AuthService);
60
+ isAuthenticated(): Promise<boolean>;
61
+ getUserId(): Promise<string | null>;
62
+ getUserEmail(): Promise<string | null>;
63
+ getUserFirstName(): Promise<string | null>;
64
+ getUserLastName(): Promise<string | null>;
65
+ getUserFullName(): Promise<string>;
66
+ static ɵfac: i0.ɵɵFactoryDeclaration<TokenService, never>;
67
+ static ɵprov: i0.ɵɵInjectableDeclaration<TokenService>;
68
+ }
69
+
70
+ export { AuthModule, RoleContextService, TokenService };
71
+ export type { RoleContextModel };
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@rangs/auth0-lib",
3
+ "version": "0.0.1",
4
+ "peerDependencies": {
5
+ "@angular/common": "^20.0.0",
6
+ "@angular/core": "^20.0.0",
7
+ "@auth0/auth0-angular": "^2.3.0",
8
+ "ngx-permissions": "^19.0.0"
9
+ },
10
+ "dependencies": {
11
+ "tslib": "^2.3.0"
12
+ },
13
+ "sideEffects": false,
14
+ "module": "fesm2022/auth0-lib.mjs",
15
+ "typings": "index.d.ts",
16
+ "exports": {
17
+ "./package.json": {
18
+ "default": "./package.json"
19
+ },
20
+ ".": {
21
+ "types": "./index.d.ts",
22
+ "default": "./fesm2022/auth0-lib.mjs"
23
+ }
24
+ }
25
+ }