@rolatech/angular-auth 17.2.16

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.
Files changed (64) hide show
  1. package/README.md +7 -0
  2. package/esm2022/index.mjs +10 -0
  3. package/esm2022/lib/angular-auth.module.mjs +24 -0
  4. package/esm2022/lib/auth-routing.module.mjs +40 -0
  5. package/esm2022/lib/auth.routes.mjs +13 -0
  6. package/esm2022/lib/auth.store.mjs +51 -0
  7. package/esm2022/lib/components/auth-dialog/auth-dialog.component.mjs +14 -0
  8. package/esm2022/lib/components/faceid-detect-dialog/faceid-detect-dialog.component.mjs +88 -0
  9. package/esm2022/lib/components/forbidden/forbidden.component.mjs +11 -0
  10. package/esm2022/lib/components/index.mjs +2 -0
  11. package/esm2022/lib/components/unauthorized/unauthorized.component.mjs +11 -0
  12. package/esm2022/lib/guards/auth-dialog.guard.mjs +37 -0
  13. package/esm2022/lib/guards/auth.guard.mjs +40 -0
  14. package/esm2022/lib/guards/index.mjs +5 -0
  15. package/esm2022/lib/guards/permission.guard.mjs +16 -0
  16. package/esm2022/lib/guards/role.guard.mjs +32 -0
  17. package/esm2022/lib/interceptors/auth.interceptor.mjs +66 -0
  18. package/esm2022/lib/interceptors/cookie.interceptor.mjs +31 -0
  19. package/esm2022/lib/interceptors/error.interceptor.mjs +63 -0
  20. package/esm2022/lib/interceptors/index.mjs +3 -0
  21. package/esm2022/lib/interfaces/auth.interface.mjs +7 -0
  22. package/esm2022/lib/pages/forgot-password/forgot-password.component.mjs +13 -0
  23. package/esm2022/lib/pages/passwordreset/passwordreset.component.mjs +13 -0
  24. package/esm2022/lib/pages/signin/signin.component.mjs +67 -0
  25. package/esm2022/lib/pages/signup/signup.component.mjs +13 -0
  26. package/esm2022/lib/services/auth.service.mjs +139 -0
  27. package/esm2022/lib/services/auth.user.service.mjs +135 -0
  28. package/esm2022/lib/services/index.mjs +4 -0
  29. package/esm2022/lib/services/storage.service.mjs +50 -0
  30. package/esm2022/provider.mjs +25 -0
  31. package/esm2022/rolatech-angular-auth.mjs +5 -0
  32. package/fesm2022/rolatech-angular-auth.mjs +735 -0
  33. package/fesm2022/rolatech-angular-auth.mjs.map +1 -0
  34. package/index.d.ts +9 -0
  35. package/lib/angular-auth.module.d.ts +10 -0
  36. package/lib/auth-routing.module.d.ts +7 -0
  37. package/lib/auth.routes.d.ts +2 -0
  38. package/lib/auth.store.d.ts +16 -0
  39. package/lib/components/auth-dialog/auth-dialog.component.d.ts +7 -0
  40. package/lib/components/faceid-detect-dialog/faceid-detect-dialog.component.d.ts +23 -0
  41. package/lib/components/forbidden/forbidden.component.d.ts +5 -0
  42. package/lib/components/index.d.ts +1 -0
  43. package/lib/components/unauthorized/unauthorized.component.d.ts +5 -0
  44. package/lib/guards/auth-dialog.guard.d.ts +2 -0
  45. package/lib/guards/auth.guard.d.ts +2 -0
  46. package/lib/guards/index.d.ts +4 -0
  47. package/lib/guards/permission.guard.d.ts +2 -0
  48. package/lib/guards/role.guard.d.ts +2 -0
  49. package/lib/interceptors/auth.interceptor.d.ts +15 -0
  50. package/lib/interceptors/cookie.interceptor.d.ts +9 -0
  51. package/lib/interceptors/error.interceptor.d.ts +23 -0
  52. package/lib/interceptors/index.d.ts +2 -0
  53. package/lib/interfaces/auth.interface.d.ts +29 -0
  54. package/lib/pages/forgot-password/forgot-password.component.d.ts +8 -0
  55. package/lib/pages/passwordreset/passwordreset.component.d.ts +8 -0
  56. package/lib/pages/signin/signin.component.d.ts +25 -0
  57. package/lib/pages/signup/signup.component.d.ts +8 -0
  58. package/lib/services/auth.service.d.ts +33 -0
  59. package/lib/services/auth.user.service.d.ts +36 -0
  60. package/lib/services/index.d.ts +3 -0
  61. package/lib/services/storage.service.d.ts +15 -0
  62. package/package.json +31 -0
  63. package/provider.d.ts +2 -0
  64. package/themes/_default.scss +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-auth.mjs","sources":["../../../../libs/angular-auth/src/lib/components/forbidden/forbidden.component.ts","../../../../libs/angular-auth/src/lib/components/forbidden/forbidden.component.html","../../../../libs/angular-auth/src/lib/components/unauthorized/unauthorized.component.ts","../../../../libs/angular-auth/src/lib/components/unauthorized/unauthorized.component.html","../../../../libs/angular-auth/src/lib/auth.store.ts","../../../../libs/angular-auth/src/lib/services/auth.service.ts","../../../../libs/angular-auth/src/lib/components/faceid-detect-dialog/faceid-detect-dialog.component.ts","../../../../libs/angular-auth/src/lib/components/faceid-detect-dialog/faceid-detect-dialog.component.html","../../../../libs/angular-auth/src/lib/guards/auth.guard.ts","../../../../libs/angular-auth/src/lib/components/auth-dialog/auth-dialog.component.ts","../../../../libs/angular-auth/src/lib/components/auth-dialog/auth-dialog.component.html","../../../../libs/angular-auth/src/lib/guards/auth-dialog.guard.ts","../../../../libs/angular-auth/src/lib/guards/role.guard.ts","../../../../libs/angular-auth/src/lib/guards/permission.guard.ts","../../../../libs/angular-auth/src/lib/services/auth.user.service.ts","../../../../libs/angular-auth/src/lib/services/storage.service.ts","../../../../libs/angular-auth/src/lib/interceptors/error.interceptor.ts","../../../../libs/angular-auth/src/lib/interceptors/auth.interceptor.ts","../../../../libs/angular-auth/src/provider.ts","../../../../libs/angular-auth/src/lib/auth.routes.ts","../../../../libs/angular-auth/src/rolatech-angular-auth.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-forbidden',\n templateUrl: './forbidden.component.html',\n styleUrls: ['./forbidden.component.scss'],\n standalone: true,\n})\nexport class ForbiddenComponent {}\n","<div class=\"p-6 max-w-lg h-auto max-h-32\">\n <div class=\"flex flex-col\">\n <b>403.</b>\n <p>Forbidden page.</p>\n </div>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-unauthorized',\n templateUrl: './unauthorized.component.html',\n styleUrls: ['./unauthorized.component.scss'],\n standalone: true,\n})\nexport class UnauthorizedComponent {}\n","<div class=\"p-6 max-w-lg h-auto max-h-32\">\n <div class=\"flex flex-col\">\n <b>401.</b>\n <p>Unauthorized page.</p>\n </div>\n</div>\n","import { Injectable, computed, signal } from '@angular/core';\nimport { User } from './interfaces/auth.interface';\n\ntype AuthState = {\n userId: string;\n user: User | null;\n roles: string[];\n authenticated: boolean;\n loaded: boolean;\n};\n@Injectable({ providedIn: 'root' })\nexport class AuthStore {\n private _state = signal<AuthState>({\n userId: '',\n user: null,\n roles: [],\n authenticated: false,\n loaded: false,\n });\n userId = computed(() => this._state().userId);\n user = computed(() => this._state().user);\n roles = computed(() => this._state().roles);\n authenticated = computed(() => this._state().authenticated);\n loaded = computed(() => this._state().loaded);\n\n update(data: any) {\n this._state.update((state) => {\n state.authenticated = data.authenticated;\n state.userId = data.userId;\n state.roles = data.roles;\n state.loaded = data.loaded;\n state.user = data.user;\n return { ...state };\n });\n }\n updateAuthenticated(authenticated: boolean) {\n this._state.update((state) => {\n state.authenticated = authenticated;\n return { ...state };\n });\n }\n updateUser(user: User) {\n this._state.update((state) => {\n state.user = user;\n return { ...state };\n });\n }\n updateEmail(email: string) {\n this._state.update((state) => {\n state.user!.email = email;\n return { ...state };\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { PasswordChange, APP_CONFIG } from '@rolatech/angular-common';\nimport { ActivatedRoute } from '@angular/router';\nimport { IntrospectResponse, User } from '../interfaces/auth.interface';\nimport { AuthStore } from '../auth.store';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n environment = inject(APP_CONFIG);\n http = inject(HttpClient);\n route = inject(ActivatedRoute);\n authStore = inject(AuthStore);\n authenticated = this.authStore.authenticated;\n userId = this.authStore.userId;\n user = this.authStore.user;\n roles = this.authStore.roles;\n loaded = this.authStore.loaded;\n\n public introspect(): Observable<IntrospectResponse | never> {\n return this.http\n .get<any>(`${this.environment.baseUrl}/auth/introspect`, {\n withCredentials: true,\n })\n .pipe(\n map((res) => {\n this.authStore.update({\n authenticated: res.authenticated,\n userId: res.userId,\n roles: res.roles,\n loaded: true,\n });\n if (res.authenticated) {\n this.me().subscribe();\n }\n return res;\n }),\n );\n }\n me() {\n return this.http\n .get<any>(`${this.environment.baseUrl}/auth/users/me`, {\n withCredentials: true,\n })\n .pipe(\n map((res) => {\n this.authStore.updateUser(res.data);\n return res;\n }),\n );\n }\n wechatLogin(code: string, state: string) {\n return this.http.post<any>(\n `${this.environment.baseUrl}/auth/wechat/login?code=${code}&state=${state}`,\n {},\n {\n withCredentials: true,\n },\n );\n }\n wechatDisconnect() {\n return this.http.post<any>(\n `${this.environment.baseUrl}/auth/wechat/disconnect`,\n {},\n {\n withCredentials: true,\n },\n );\n }\n requestFaceIdDetect() {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/face-id`, {\n withCredentials: true,\n });\n }\n faceIdStatus() {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/face-id/status/me`, {\n withCredentials: true,\n });\n }\n faceIdStatusByToken(token: any) {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/face-id/status/me/by`, {\n params: { token: token },\n withCredentials: true,\n });\n }\n wechatStatus(options: any) {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/wechat/status/by`, {\n params: options,\n withCredentials: true,\n });\n }\n login(data: any) {\n return this.http\n .post<any>(`${this.environment.baseUrl}/auth/login`, data, {\n withCredentials: true,\n })\n .pipe(\n map((res) => {\n this.authStore.updateAuthenticated(true);\n return res.data;\n }),\n );\n }\n logout() {\n return this.http\n .get<any>(`${this.environment.baseUrl}/auth/logout`, {\n withCredentials: true,\n })\n .pipe(\n map((res) => {\n this.authStore.updateAuthenticated(false);\n return res;\n }),\n );\n }\n changePassword(data: PasswordChange) {\n return this.http\n .put<any>(`${this.environment.baseUrl}/auth/users/password`, data, {\n withCredentials: true,\n })\n .pipe(\n map((user) => {\n return user;\n }),\n tap((_) => {\n this.authStore.updateAuthenticated(true);\n }),\n );\n }\n lookup(account: string, next: string) {\n return this.http\n .post<any>(\n `${this.environment.baseUrl}/auth/lookup`,\n {\n account,\n next,\n },\n { withCredentials: false },\n )\n .pipe(\n map((user) => {\n return user;\n }),\n );\n }\n challenge(username: string, password: string, next: string) {\n return this.http\n .post<any>(\n `${this.environment.baseUrl}/auth/challenge`,\n {\n username,\n password,\n next,\n },\n { withCredentials: true },\n )\n .pipe(\n map((user) => {\n return user;\n }),\n tap((_) => {\n this.authStore.updateAuthenticated(true);\n }),\n );\n }\n}\n","import { Component, ElementRef, HostListener, Renderer2, inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { SnackBarService } from '@rolatech/angular-services';\nimport QRCode from 'qrcode';\nimport { MatButtonModule } from '@angular/material/button';\nimport { AuthService } from '../../services/auth.service';\nimport { SpinnerComponent } from '@rolatech/angular-components';\n\n@Component({\n selector: 'rolatech-faceid-detect-dialog',\n templateUrl: './faceid-detect-dialog.component.html',\n styleUrls: ['./faceid-detect-dialog.component.scss'],\n standalone: true,\n imports: [SpinnerComponent, MatButtonModule],\n})\nexport class FaceidDetectDialogComponent {\n dialogRef = inject(MatDialogRef);\n environment = inject(APP_CONFIG);\n data = inject(MAT_DIALOG_DATA);\n authService = inject(AuthService);\n snackBarService = inject(SnackBarService);\n loading = false;\n qrcodeUrl = '';\n verified = false;\n interval;\n constructor() {\n this.request();\n }\n request() {\n this.loading = true;\n this.authService.requestFaceIdDetect().subscribe({\n next: ({ data }) => {\n this.genQRCode(data.url);\n this.loop();\n },\n error: () => {\n this.loading = false;\n },\n });\n }\n cancel() {\n clearInterval(this.interval);\n this.dialogRef.close(this.verified);\n }\n checkFaceIdStatus() {\n this.loading = false;\n this.authService.faceIdStatus().subscribe({\n next: (res) => {\n this.verified = res.data.verified;\n if (res.data.verified) {\n clearInterval(this.interval);\n this.dialogRef.close(true);\n } else {\n this.snackBarService.open('未认证');\n }\n },\n error: (error) => {\n clearInterval(this.interval);\n this.dialogRef.close(false);\n },\n });\n }\n loop() {\n this.loading = false;\n this.interval = setInterval(() => {\n this.authService.faceIdStatus().subscribe({\n next: (res) => {\n if (res.data.verified) {\n clearInterval(this.interval);\n this.dialogRef.close(true);\n }\n },\n });\n this;\n }, 2000);\n }\n async genQRCode(url: string) {\n try {\n this.qrcodeUrl = await QRCode.toDataURL(url);\n } catch (err) {\n console.error(err);\n }\n }\n}\n","<div class=\"flex flex-col p-3 max-w-[500px] mx-auto\">\n <div class=\"text-xl font-bold p-3\">使用微信扫描二维码, 完成人脸实名认证</div>\n <div class=\"w-[256px] h-[256px] mx-auto flex justify-center items-center\">\n @if (loading) {\n <div>\n <rolatech-spinner></rolatech-spinner>\n </div>\n }\n\n <img [src]=\"qrcodeUrl\" />\n </div>\n <div class=\"p-3 flex justify-end items-center gap-3\">\n <button mat-button (click)=\"cancel()\">取消</button>\n <button mat-raised-button color=\"primary\" (click)=\"checkFaceIdStatus()\">完成认证</button>\n </div>\n</div>\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, PLATFORM_ID } from '@angular/core';\nimport { CanActivateChildFn, CanActivateFn, Router } from '@angular/router';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { map, of } from 'rxjs';\nimport { AuthService } from '../services/auth.service';\n\nexport const AuthGuard: CanActivateFn | CanActivateChildFn = (route, state) => {\n const environment = inject(APP_CONFIG);\n const platformId = inject(PLATFORM_ID);\n const authService = inject(AuthService);\n const router = inject(Router);\n const isContinue = state.url.includes('continue');\n const continueUrl = route.queryParams['continue'];\n if (!isPlatformBrowser(platformId)) {\n return of(false);\n }\n return authService.introspect().pipe(\n map(({ roles, authenticated }) => {\n const routeRoles = route.data['roles'];\n let passRoled = routeRoles ? roles?.some((r) => routeRoles.indexOf(r) >= 0) : true;\n if (authenticated && !passRoled) {\n router.navigate(['/forbidden']);\n return false;\n }\n if (authenticated) {\n if (window.location.href.includes(environment.accountsUrl) && !isContinue) {\n window.location.href = environment.myaccountUrl;\n }\n if (isContinue) {\n window.location.href = continueUrl;\n }\n } else {\n if (!isContinue) {\n window.location.href = environment.accountsUrl + `/signin?continue=${window.location.href}`;\n }\n }\n return true;\n }),\n );\n};\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatDialog, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'rolatech-auth-dialog',\n standalone: true,\n imports: [CommonModule, MatDialogModule],\n templateUrl: './auth-dialog.component.html',\n styleUrl: './auth-dialog.component.scss',\n})\nexport class AuthDialogComponent {\n dialogRef = inject(MatDialogRef);\n}\n","<p>auth-dialog works!</p>\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { CanActivateFn, UrlTree } from '@angular/router';\nimport { APP_CONFIG, WINDOW } from '@rolatech/angular-common';\nimport { last, map, Observable, of, switchMap, take } from 'rxjs';\nimport { AuthService } from '../services/auth.service';\nimport { DialogService } from '@rolatech/angular-services';\nimport { MatDialog } from '@angular/material/dialog';\nimport { AuthDialogComponent } from '../components/auth-dialog/auth-dialog.component';\n\nexport const AuthDialogGuard: CanActivateFn = (route, state): Observable<boolean> => {\n const authService = inject(AuthService);\n const dialog = inject(MatDialog);\n const environment = inject(APP_CONFIG);\n const platformId = inject(PLATFORM_ID);\n const isContinue = state.url.includes('continue');\n const continueUrl = route.queryParams['continue'];\n if (!isPlatformBrowser(platformId)) {\n return of(false);\n }\n return authService.introspect().pipe(\n map(({ roles, authenticated }) => {\n if (!authenticated) {\n if (window.location.href.includes(environment.accountsUrl) && !isContinue) {\n window.location.href = environment.myaccountUrl;\n }\n if (isContinue) {\n window.location.href = continueUrl;\n }\n } else {\n const dialogRef = dialog.open(AuthDialogComponent, {\n data: {},\n });\n dialogRef.afterClosed().subscribe((result) => {});\n return true;\n }\n return authenticated;\n }),\n );\n};\n","import { filter } from 'rxjs/operators';\nimport { PLATFORM_ID, inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { map, Observable, of } from 'rxjs';\nimport { AuthService } from '../services/auth.service';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { isPlatformBrowser } from '@angular/common';\nimport { APP_CONFIG } from '@rolatech/angular-common';\n\nexport const RoleGuard: CanActivateFn = (route, state): Observable<boolean> => {\n const authService = inject(AuthService);\n const environment = inject(APP_CONFIG);\n const platformId = inject(PLATFORM_ID);\n const snackBar = inject(MatSnackBar);\n const router = inject(Router);\n const isContinue = state.url.includes('continue');\n const continueUrl = route.queryParams['continue'];\n if (!isPlatformBrowser(platformId)) {\n return of(false);\n }\n const routeRoles = route.data['roles'];\n // if (!routeRoles) {\n // return of(false);\n // }\n return authService.introspect().pipe(\n filter((res) => res.roles !== null && res.roles.length > 0),\n map(({ roles }) => {\n const authed = roles.some((r) => routeRoles?.indexOf(r) >= 0);\n if (!authed) {\n router.navigate(['/forbidden']);\n }\n return authed;\n }),\n );\n};\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { CanActivateFn, Router } from '@angular/router';\nimport { Observable, of } from 'rxjs';\nimport { AuthService } from '../services/auth.service';\nimport { AuthUserService } from '../services/auth.user.service';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport const PermissionGuard: CanActivateFn = (route, state): Observable<boolean> => {\n const authService = inject(AuthService);\n const environment = inject(APP_CONFIG);\n const platformId = inject(PLATFORM_ID);\n const isContinue = state.url.includes('continue');\n const continueUrl = route.queryParams['continue'];\n\n // if (!isPlatformBrowser(platformId)) {\n // return of(false);\n // }\n\n return of(false);\n};\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\nimport { User } from '../interfaces/auth.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthUserService {\n environment = inject(APP_CONFIG);\n http = inject(HttpClient);\n private userSubject: BehaviorSubject<User | null> = new BehaviorSubject<User | null>(JSON.parse('null'));\n public userInfo$: Observable<User | null> = this.userSubject.asObservable();\n updateUserInfo(userInfo: User | null) {\n this.userSubject.next(userInfo);\n }\n findAll(options: any) {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users`, {\n params: options,\n withCredentials: true,\n });\n }\n findOne(userId: any) {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/${userId}`, {\n withCredentials: true,\n });\n }\n me() {\n return this.http\n .get<any>(`${this.environment.baseUrl}/auth/users/me`, {\n withCredentials: true,\n })\n .pipe(\n map((res) => {\n return res.data;\n }),\n );\n }\n getPublicUserInfo(id: string): Observable<any> {\n return this.http\n .get<any>(`${this.environment.baseUrl}/auth/users/${id}/info/public`, {\n withCredentials: false,\n })\n .pipe(\n map((res) => {\n return res.data;\n }),\n );\n }\n findPublicInfoByIds(ids: Array<string>) {\n const params = { ids: ids.join(',') };\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/by`, {\n params: params,\n });\n }\n sendSMSCode(countryCode: string, phone: string) {\n return this.http.post<any>(`${this.environment.baseUrl}/auth/users/verification/phone/start`, { countryCode, phone });\n }\n signup(data: any): Observable<any> {\n return this.http.post<any>(`${this.environment.baseUrl}/auth/users/signup`, data);\n }\n findByUsername(username: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/info`, {\n params: { username },\n withCredentials: true,\n });\n }\n findUserInfoByUsername(username: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/info/by`, {\n params: { username },\n withCredentials: true,\n });\n }\n findPublicInfoByRole(role: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/public/by`, {\n params: { role: role },\n withCredentials: false,\n });\n }\n changeUsername(username: string): Observable<any> {\n return this.http.put<any>(\n `${this.environment.baseUrl}/auth/users/username`,\n { username },\n {\n withCredentials: true,\n },\n );\n }\n changeName(name: any): Observable<any> {\n return this.http.put<any>(\n `${this.environment.baseUrl}/auth/users/me`,\n { name },\n {\n withCredentials: true,\n },\n );\n }\n update(data: any): Observable<any> {\n return this.http.put<any>(`${this.environment.baseUrl}/auth/users/me`, data, {\n withCredentials: true,\n });\n }\n uploadAvatar(data: any): Observable<any> {\n return this.http.post<any>(`${this.environment.baseUrl}/auth/users/avatar`, data, {\n withCredentials: true,\n });\n }\n changePhone(phone: any, code: any): Observable<any> {\n return this.http.put<any>(\n `${this.environment.baseUrl}/auth/users/phone`,\n { phone, code },\n {\n withCredentials: true,\n },\n );\n }\n follow(username: string): Observable<any> {\n return this.http.put<any>(\n `${this.environment.baseUrl}/auth/users/following/${username}`,\n {},\n {\n withCredentials: true,\n },\n );\n }\n unfollow(username: string): Observable<any> {\n return this.http.delete<any>(`${this.environment.baseUrl}/auth/users/following/${username}`, {\n withCredentials: true,\n });\n }\n listFollowingByUsername(username: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/${username}/following`);\n }\n listFollowersByUsername(username: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/${username}/followers`);\n }\n checkIfFollowingSomeone(username: string, target: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/${username}/following/${target}`);\n }\n isFollowing(username: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/following/${username}`, { withCredentials: true });\n }\n friendships(ids: string[]): Observable<any> {\n return this.http.post<any>(`${this.environment.baseUrl}/auth/users/friendships`, { ids: ids }, { withCredentials: true });\n }\n followersStats(username: string): Observable<any> {\n return this.http.get<any>(`${this.environment.baseUrl}/auth/users/followers/stats/by`, { params: { username: username } });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nclass LocalStorage implements Storage {\n [name: string]: any;\n readonly length = 0;\n clear(): void {}\n getItem(key: string): string | null {\n return null;\n }\n key(index: number): string | null {\n return null;\n }\n removeItem(key: string): void {}\n setItem(key: string, value: string): void {}\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LocalstorageService implements Storage {\n private storage: Storage;\n platformId = inject(PLATFORM_ID);\n\n constructor() {\n this.storage = new LocalStorage();\n\n if (isPlatformBrowser(this.platformId)) {\n this.storage = localStorage;\n }\n }\n\n [name: string]: any;\n\n length = 0;\n\n clear(): void {\n this.storage.clear();\n }\n\n getItem(key: string): string | null {\n return this.storage.getItem(key);\n }\n\n key(index: number): string | null {\n return this.storage.key(index);\n }\n\n removeItem(key: string): void {\n return this.storage.removeItem(key);\n }\n\n setItem(key: string, value: string): void {\n return this.storage.setItem(key, value);\n }\n}\n","import { MatSnackBar } from '@angular/material/snack-bar';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\nimport { BehaviorSubject, catchError, Observable, of, throwError } from 'rxjs';\n\n@Injectable()\nexport class ErrorInterceptor implements HttpInterceptor {\n tokenSubject: BehaviorSubject<string> = new BehaviorSubject<string>('');\n isRefreshingToken = false;\n authService = inject(AuthService);\n\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n return next.handle(request).pipe(\n catchError((error) => {\n if (error instanceof HttpErrorResponse) {\n switch (error.status) {\n case 400:\n return this.hand400Error(error);\n case 401:\n return this.hand401Error(error);\n case 403:\n return this.hand403Error(error);\n case 404:\n return this.hand404Error(error);\n case 429:\n return this.hand429Error(error);\n default:\n return this.handleDefaultError(error);\n }\n } else {\n return throwError(() => error);\n }\n })\n );\n }\n private hand400Error(error: HttpErrorResponse) {\n return throwError(() => error.error);\n }\n private hand401Error(error: HttpErrorResponse) {\n return throwError(() => error.error);\n }\n private hand403Error(error: HttpErrorResponse) {\n return throwError(() => error.error);\n }\n private hand404Error(error: HttpErrorResponse) {\n return throwError(() => error.error);\n }\n /**\n *\n * @param error 短信验证码发送过多\n * @returns\n */\n private hand429Error(error: HttpErrorResponse) {\n return throwError(() => error.error);\n }\n private handleDefaultError(error: HttpErrorResponse) {\n // return throwError(() => new Error('系统错误'));\n return throwError(() => error.error);\n }\n}\n","import { catchError, filter, map, switchMap, take } from 'rxjs/operators';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { inject, Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\nimport { NEVER, Observable, throwError } from 'rxjs';\n\nimport { AuthService } from '../services/auth.service';\nimport { APP_CONFIG } from '@rolatech/angular-common';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n environment = inject(APP_CONFIG);\n platformId = inject(PLATFORM_ID);\n authService = inject(AuthService);\n constructor() {}\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const authRequest = request.clone({\n headers: request.headers.append('Client-Id', this.environment.clientId),\n });\n\n if (request.withCredentials) {\n return next.handle(authRequest).pipe(\n map((res) => {\n if (res instanceof HttpResponse && isPlatformBrowser(this.platformId)) {\n // window.location.href = res.headers.get('Location') as string;\n }\n return res;\n }),\n catchError((error: any) => {\n if (isPlatformBrowser(this.platformId)) {\n if (error.url?.includes('auth/introspect')) {\n // if (window.location.origin !== `${this.environment.accountsUrl}`) {\n // window.location.href = `${this.environment.accountsUrl}/signin?continue=` + window.location.href;\n // return NEVER;\n // }\n }\n if (error instanceof HttpErrorResponse && error.error.code === 'G401') {\n window.location.href = `${this.environment.accountsUrl}/signin?continue=` + window.location.href;\n return NEVER;\n }\n }\n return throwError(() => error);\n }),\n );\n }\n const newRequest = request.clone({\n headers: request.headers.append('Client-Id', this.environment.clientId),\n });\n\n return next.handle(newRequest);\n }\n addClientIdHeader(request: HttpRequest<any>) {\n return request.clone({\n setHeaders: {\n 'Client-id': this.environment.clientId,\n },\n });\n }\n addCookieHeader(request: HttpRequest<any>, cookie: string) {\n return request.clone({\n setHeaders: {\n Cookie: cookie,\n 'Client-id': this.environment.clientId,\n },\n });\n }\n}\n","import { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { EnvironmentProviders, Provider, makeEnvironmentProviders } from '@angular/core';\nimport { ErrorInterceptor, AuthInterceptor } from './lib/interceptors';\nimport { ROUTES } from '@angular/router';\nimport { ForbiddenComponent } from './lib/components/forbidden/forbidden.component';\n\nexport function provideAngularAuth(): EnvironmentProviders {\n const providers: (Provider | EnvironmentProviders)[] = [\n { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },\n // {\n // provide: ROUTES,\n // useValue: [\n // {\n // path: 'forbidden',\n // component: ForbiddenComponent,\n // },\n // ],\n // multi: true,\n // },\n\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthInterceptor,\n multi: true,\n },\n ];\n return makeEnvironmentProviders(providers);\n}\n","import { Routes } from '@angular/router';\nimport { UnauthorizedComponent } from './components/unauthorized/unauthorized.component';\nimport { ForbiddenComponent } from './components/forbidden/forbidden.component';\n\nexport const authRoutes: Routes = [\n {\n path: 'unauthorized',\n component: UnauthorizedComponent,\n },\n {\n path: 'forbidden',\n component: ForbiddenComponent,\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map","catchError"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export { ForbiddenComponent } from './lib/components/forbidden/forbidden.component';
2
+ export { UnauthorizedComponent } from './lib/components/unauthorized/unauthorized.component';
3
+ export * from './lib/components';
4
+ export * from './lib/guards';
5
+ export * from './lib/services';
6
+ export * from './lib/interceptors';
7
+ export * from './provider';
8
+ export * from './lib/auth.routes';
9
+ export * from './lib/auth.store';
@@ -0,0 +1,10 @@
1
+ import { ModuleWithProviders } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@rolatech/angular-common";
4
+ import * as i2 from "@angular/common/http";
5
+ export declare class AngularAuthModule {
6
+ static forRoot(): ModuleWithProviders<AngularAuthModule>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<AngularAuthModule, never>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AngularAuthModule, never, [typeof i1.AngularCommonModule, typeof i2.HttpClientModule], never>;
9
+ static ɵinj: i0.ɵɵInjectorDeclaration<AngularAuthModule>;
10
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/router";
3
+ export declare class AuthRoutingModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthRoutingModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AuthRoutingModule, never, [typeof i1.RouterModule], [typeof i1.RouterModule]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<AuthRoutingModule>;
7
+ }
@@ -0,0 +1,2 @@
1
+ import { Routes } from '@angular/router';
2
+ export declare const authRoutes: Routes;
@@ -0,0 +1,16 @@
1
+ import { User } from './interfaces/auth.interface';
2
+ import * as i0 from "@angular/core";
3
+ export declare class AuthStore {
4
+ private _state;
5
+ userId: import("@angular/core").Signal<string>;
6
+ user: import("@angular/core").Signal<User | null>;
7
+ roles: import("@angular/core").Signal<string[]>;
8
+ authenticated: import("@angular/core").Signal<boolean>;
9
+ loaded: import("@angular/core").Signal<boolean>;
10
+ update(data: any): void;
11
+ updateAuthenticated(authenticated: boolean): void;
12
+ updateUser(user: User): void;
13
+ updateEmail(email: string): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthStore, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthStore>;
16
+ }
@@ -0,0 +1,7 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import * as i0 from "@angular/core";
3
+ export declare class AuthDialogComponent {
4
+ dialogRef: MatDialogRef<any, any>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthDialogComponent, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<AuthDialogComponent, "rolatech-auth-dialog", never, {}, {}, never, never, true, never>;
7
+ }
@@ -0,0 +1,23 @@
1
+ import { MatDialogRef } from '@angular/material/dialog';
2
+ import { SnackBarService } from '@rolatech/angular-services';
3
+ import { AuthService } from '../../services/auth.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class FaceidDetectDialogComponent {
6
+ dialogRef: MatDialogRef<any, any>;
7
+ environment: any;
8
+ data: any;
9
+ authService: AuthService;
10
+ snackBarService: SnackBarService;
11
+ loading: boolean;
12
+ qrcodeUrl: string;
13
+ verified: boolean;
14
+ interval: any;
15
+ constructor();
16
+ request(): void;
17
+ cancel(): void;
18
+ checkFaceIdStatus(): void;
19
+ loop(): void;
20
+ genQRCode(url: string): Promise<void>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<FaceidDetectDialogComponent, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<FaceidDetectDialogComponent, "rolatech-faceid-detect-dialog", never, {}, {}, never, never, true, never>;
23
+ }
@@ -0,0 +1,5 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ForbiddenComponent {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<ForbiddenComponent, never>;
4
+ static ɵcmp: i0.ɵɵComponentDeclaration<ForbiddenComponent, "rolatech-forbidden", never, {}, {}, never, never, true, never>;
5
+ }
@@ -0,0 +1 @@
1
+ export { FaceidDetectDialogComponent } from './faceid-detect-dialog/faceid-detect-dialog.component';
@@ -0,0 +1,5 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class UnauthorizedComponent {
3
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnauthorizedComponent, never>;
4
+ static ɵcmp: i0.ɵɵComponentDeclaration<UnauthorizedComponent, "rolatech-unauthorized", never, {}, {}, never, never, true, never>;
5
+ }
@@ -0,0 +1,2 @@
1
+ import { CanActivateFn } from '@angular/router';
2
+ export declare const AuthDialogGuard: CanActivateFn;
@@ -0,0 +1,2 @@
1
+ import { CanActivateChildFn, CanActivateFn } from '@angular/router';
2
+ export declare const AuthGuard: CanActivateFn | CanActivateChildFn;
@@ -0,0 +1,4 @@
1
+ export { AuthGuard } from './auth.guard';
2
+ export { AuthDialogGuard } from './auth-dialog.guard';
3
+ export { RoleGuard } from './role.guard';
4
+ export { PermissionGuard } from './permission.guard';
@@ -0,0 +1,2 @@
1
+ import { CanActivateFn } from '@angular/router';
2
+ export declare const PermissionGuard: CanActivateFn;
@@ -0,0 +1,2 @@
1
+ import { CanActivateFn } from '@angular/router';
2
+ export declare const RoleGuard: CanActivateFn;
@@ -0,0 +1,15 @@
1
+ import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { AuthService } from '../services/auth.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class AuthInterceptor implements HttpInterceptor {
6
+ environment: any;
7
+ platformId: Object;
8
+ authService: AuthService;
9
+ constructor();
10
+ intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
11
+ addClientIdHeader(request: HttpRequest<any>): HttpRequest<any>;
12
+ addCookieHeader(request: HttpRequest<any>, cookie: string): HttpRequest<any>;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthInterceptor, never>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthInterceptor>;
15
+ }
@@ -0,0 +1,9 @@
1
+ import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';
2
+ import * as i0 from "@angular/core";
3
+ export declare class CookieInterceptor implements HttpInterceptor {
4
+ private httpRequest;
5
+ constructor(httpRequest: any);
6
+ intercept(req: HttpRequest<any>, next: HttpHandler): import("rxjs").Observable<import("@angular/common/http").HttpEvent<any>>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<CookieInterceptor, [{ optional: true; }]>;
8
+ static ɵprov: i0.ɵɵInjectableDeclaration<CookieInterceptor>;
9
+ }
@@ -0,0 +1,23 @@
1
+ import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
2
+ import { AuthService } from '../services/auth.service';
3
+ import { BehaviorSubject, Observable } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ export declare class ErrorInterceptor implements HttpInterceptor {
6
+ tokenSubject: BehaviorSubject<string>;
7
+ isRefreshingToken: boolean;
8
+ authService: AuthService;
9
+ intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
10
+ private hand400Error;
11
+ private hand401Error;
12
+ private hand403Error;
13
+ private hand404Error;
14
+ /**
15
+ *
16
+ * @param error 短信验证码发送过多
17
+ * @returns
18
+ */
19
+ private hand429Error;
20
+ private handleDefaultError;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<ErrorInterceptor, never>;
22
+ static ɵprov: i0.ɵɵInjectableDeclaration<ErrorInterceptor>;
23
+ }
@@ -0,0 +1,2 @@
1
+ export { ErrorInterceptor } from './error.interceptor';
2
+ export { AuthInterceptor } from './auth.interceptor';
@@ -0,0 +1,29 @@
1
+ export interface User {
2
+ id: string;
3
+ name: string;
4
+ username: string;
5
+ avatar: string;
6
+ phone: string;
7
+ email: string;
8
+ bio: string;
9
+ roles: Role[];
10
+ gender: string;
11
+ }
12
+ export interface Role {
13
+ name: string;
14
+ }
15
+ export interface PasswordChange {
16
+ oldPassword: string;
17
+ newPassword: string;
18
+ ne2Password: string;
19
+ }
20
+ export declare enum UserStatus {
21
+ ACTIVE = "\u6B63\u5E38",
22
+ AWAITING = "\u5BA1\u6838\u4E2D",
23
+ DELETED = "\u5DF2\u5220\u9664"
24
+ }
25
+ export interface IntrospectResponse {
26
+ userId: string;
27
+ roles: string[];
28
+ authenticated: boolean;
29
+ }
@@ -0,0 +1,8 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ForgotPasswordComponent implements OnInit {
4
+ constructor();
5
+ ngOnInit(): void;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<ForgotPasswordComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<ForgotPasswordComponent, "rolatech-forgot-password", never, {}, {}, never, never, true, never>;
8
+ }
@@ -0,0 +1,8 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class PasswordresetComponent implements OnInit {
4
+ constructor();
5
+ ngOnInit(): void;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<PasswordresetComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<PasswordresetComponent, "rolatech-passwordreset", never, {}, {}, never, never, true, never>;
8
+ }
@@ -0,0 +1,25 @@
1
+ import { BreakpointObserver } from '@angular/cdk/layout';
2
+ import { OnInit } from '@angular/core';
3
+ import { FormGroup, FormBuilder } from '@angular/forms';
4
+ import { MatSnackBar } from '@angular/material/snack-bar';
5
+ import { ActivatedRoute, Router } from '@angular/router';
6
+ import { AuthService } from '../../services/auth.service';
7
+ import * as i0 from "@angular/core";
8
+ export declare class SigninComponent implements OnInit {
9
+ private formBuilder;
10
+ private authService;
11
+ private breakpointObserver;
12
+ private router;
13
+ private route;
14
+ private snackBar;
15
+ signinForm: FormGroup;
16
+ continue: string;
17
+ constructor(formBuilder: FormBuilder, authService: AuthService, breakpointObserver: BreakpointObserver, router: Router, route: ActivatedRoute, snackBar: MatSnackBar);
18
+ ngOnInit(): void;
19
+ get f(): {
20
+ [key: string]: import("@angular/forms").AbstractControl<any, any>;
21
+ };
22
+ submit(): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<SigninComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<SigninComponent, "rolatech-signin", never, {}, {}, never, never, true, never>;
25
+ }
@@ -0,0 +1,8 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class SignupComponent implements OnInit {
4
+ constructor();
5
+ ngOnInit(): void;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<SignupComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<SignupComponent, "rolatech-signup", never, {}, {}, never, never, true, never>;
8
+ }
@@ -0,0 +1,33 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { PasswordChange } from '@rolatech/angular-common';
4
+ import { ActivatedRoute } from '@angular/router';
5
+ import { IntrospectResponse, User } from '../interfaces/auth.interface';
6
+ import { AuthStore } from '../auth.store';
7
+ import * as i0 from "@angular/core";
8
+ export declare class AuthService {
9
+ environment: any;
10
+ http: HttpClient;
11
+ route: ActivatedRoute;
12
+ authStore: AuthStore;
13
+ authenticated: import("@angular/core").Signal<boolean>;
14
+ userId: import("@angular/core").Signal<string>;
15
+ user: import("@angular/core").Signal<User | null>;
16
+ roles: import("@angular/core").Signal<string[]>;
17
+ loaded: import("@angular/core").Signal<boolean>;
18
+ introspect(): Observable<IntrospectResponse | never>;
19
+ me(): Observable<any>;
20
+ wechatLogin(code: string, state: string): Observable<any>;
21
+ wechatDisconnect(): Observable<any>;
22
+ requestFaceIdDetect(): Observable<any>;
23
+ faceIdStatus(): Observable<any>;
24
+ faceIdStatusByToken(token: any): Observable<any>;
25
+ wechatStatus(options: any): Observable<any>;
26
+ login(data: any): Observable<any>;
27
+ logout(): Observable<any>;
28
+ changePassword(data: PasswordChange): Observable<any>;
29
+ lookup(account: string, next: string): Observable<any>;
30
+ challenge(username: string, password: string, next: string): Observable<any>;
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthService, never>;
32
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthService>;
33
+ }
@@ -0,0 +1,36 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { User } from '../interfaces/auth.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class AuthUserService {
6
+ environment: any;
7
+ http: HttpClient;
8
+ private userSubject;
9
+ userInfo$: Observable<User | null>;
10
+ updateUserInfo(userInfo: User | null): void;
11
+ findAll(options: any): Observable<any>;
12
+ findOne(userId: any): Observable<any>;
13
+ me(): Observable<any>;
14
+ getPublicUserInfo(id: string): Observable<any>;
15
+ findPublicInfoByIds(ids: Array<string>): Observable<any>;
16
+ sendSMSCode(countryCode: string, phone: string): Observable<any>;
17
+ signup(data: any): Observable<any>;
18
+ findByUsername(username: string): Observable<any>;
19
+ findUserInfoByUsername(username: string): Observable<any>;
20
+ findPublicInfoByRole(role: string): Observable<any>;
21
+ changeUsername(username: string): Observable<any>;
22
+ changeName(name: any): Observable<any>;
23
+ update(data: any): Observable<any>;
24
+ uploadAvatar(data: any): Observable<any>;
25
+ changePhone(phone: any, code: any): Observable<any>;
26
+ follow(username: string): Observable<any>;
27
+ unfollow(username: string): Observable<any>;
28
+ listFollowingByUsername(username: string): Observable<any>;
29
+ listFollowersByUsername(username: string): Observable<any>;
30
+ checkIfFollowingSomeone(username: string, target: string): Observable<any>;
31
+ isFollowing(username: string): Observable<any>;
32
+ friendships(ids: string[]): Observable<any>;
33
+ followersStats(username: string): Observable<any>;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthUserService, never>;
35
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthUserService>;
36
+ }
@@ -0,0 +1,3 @@
1
+ export { AuthService } from './auth.service';
2
+ export { AuthUserService } from './auth.user.service';
3
+ export { LocalstorageService } from './storage.service';
@@ -0,0 +1,15 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class LocalstorageService implements Storage {
3
+ private storage;
4
+ platformId: Object;
5
+ constructor();
6
+ [name: string]: any;
7
+ length: number;
8
+ clear(): void;
9
+ getItem(key: string): string | null;
10
+ key(index: number): string | null;
11
+ removeItem(key: string): void;
12
+ setItem(key: string, value: string): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalstorageService, never>;
14
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocalstorageService>;
15
+ }
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "@rolatech/angular-auth",
3
+ "version": "17.2.16",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.0.0",
6
+ "@angular/core": "^18.0.0"
7
+ },
8
+ "dependencies": {
9
+ "tslib": "^2.5.0"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/viablecell/rolatech-web.git"
14
+ },
15
+ "license": "MIT",
16
+ "exports": {
17
+ ".": {
18
+ "sass": "./themes/styles.scss",
19
+ "types": "./index.d.ts",
20
+ "esm2022": "./esm2022/rolatech-angular-auth.mjs",
21
+ "esm": "./esm2022/rolatech-angular-auth.mjs",
22
+ "default": "./fesm2022/rolatech-angular-auth.mjs"
23
+ },
24
+ "./package.json": {
25
+ "default": "./package.json"
26
+ }
27
+ },
28
+ "module": "fesm2022/rolatech-angular-auth.mjs",
29
+ "typings": "index.d.ts",
30
+ "sideEffects": false
31
+ }
package/provider.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { EnvironmentProviders } from '@angular/core';
2
+ export declare function provideAngularAuth(): EnvironmentProviders;
@@ -0,0 +1 @@
1
+ /*! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.right-0{right:0}.top-0{top:0}.z-20{z-index:20}.z-30{z-index:30}.-m-1{margin:-.25rem}.m-auto{margin:auto}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-bottom:.5rem;margin-top:.5rem}.-mt-4{margin-top:-1rem}.mb-2{margin-bottom:.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-24{margin-left:6rem}.ml-3{margin-left:.75rem}.ml-\[40px\]{margin-left:40px}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-\[6px\]{margin-top:6px}.box-border{box-sizing:border-box}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.hidden{display:none}.aspect-video{aspect-ratio:16/9}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-24{height:6rem}.h-4{height:1rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[190px\]{height:190px}.h-\[256px\]{height:256px}.h-auto{height:auto}.h-full{height:100%}.max-h-32{max-height:8rem}.min-h-11{min-height:2.75rem}.min-h-14{min-height:3.5rem}.min-h-\[320px\]{min-height:320px}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-20{width:5rem}.w-32{width:8rem}.w-4{width:1rem}.w-9{width:2.25rem}.w-\[190px\]{width:190px}.w-\[256px\]{width:256px}.w-full{width:100%}.min-w-\[256px\]{min-width:256px}.min-w-\[320px\]{min-width:320px}.max-w-\[500px\]{max-width:500px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.flex-1{flex:1 1 0%}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overflow-x-scroll{overflow-x:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre{white-space:pre}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-dashed{border-style:dashed}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity))}.bg-fixed{background-attachment:fixed}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pl-2{padding-left:.5rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.leading-3{line-height:.75rem}.leading-none{line-height:1}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity))}.text-transparent{color:transparent}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.opacity-75{opacity:.75}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.outline-4{outline-width:4px}.outline-transparent{outline-color:transparent}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}html{line-height:normal}.hover\:bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:outline-gray-200:hover{outline-color:#e5e7eb}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width:640px){.sm\:mb-1{margin-bottom:.25rem}.sm\:mr-0{margin-right:0}.sm\:h-full{height:100%}.sm\:w-1\/3{width:33.333333%}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.sm\:items-start{align-items:flex-start}.sm\:gap-10{gap:2.5rem}.sm\:bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.sm\:px-16{padding-left:4rem;padding-right:4rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\:w-1\/4{width:25%}}@media (min-width:1024px){.lg\:w-1\/6{width:16.666667%}}@media (min-width:1280px){.xl\:max-w-\[1024px\]{max-width:1024px}}@media (min-width:1536px){.\32xl\:max-w-\[1280px\]{max-width:1280px}}