@authon/angular 0.1.16 → 0.1.19
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/dist/index.cjs +5 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/package.json +12 -5
package/dist/index.cjs
CHANGED
|
@@ -53,6 +53,11 @@ var AuthonService = class {
|
|
|
53
53
|
this._isLoading = false;
|
|
54
54
|
this.notifyListeners();
|
|
55
55
|
});
|
|
56
|
+
const existingUser = this.client.getUser();
|
|
57
|
+
if (existingUser) {
|
|
58
|
+
this._user = existingUser;
|
|
59
|
+
this._isSignedIn = true;
|
|
60
|
+
}
|
|
56
61
|
this._isLoading = false;
|
|
57
62
|
}
|
|
58
63
|
get user() {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/service.ts","../src/guard.ts","../src/helpers.ts"],"sourcesContent":["export { AuthonService, AUTHON_CONFIG, type AuthonServiceConfig } from './service';\nexport { authGuard } from './guard';\nexport { provideAuthon } from './helpers';\n","import { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser } from '@authon/shared';\n\n/**\n * Injection token key for Authon configuration.\n * Used with Angular's InjectionToken.\n */\nexport const AUTHON_CONFIG = 'AUTHON_CONFIG';\n\nexport interface AuthonServiceConfig {\n publishableKey: string;\n config?: Omit<AuthonConfig, 'mode'>;\n}\n\n/**\n * Plain class wrapping @authon/js for Angular dependency injection.\n *\n * Since tsup cannot compile Angular decorators, this is a plain class.\n * Users should wrap it in their own injectable service:\n *\n * ```ts\n * import { Injectable } from '@angular/core';\n * import { AuthonService as BaseAuthonService } from '@authon/angular';\n *\n * @Injectable({ providedIn: 'root' })\n * export class AuthonService extends BaseAuthonService {\n * constructor() {\n * super({ publishableKey: 'pk_live_...' });\n * }\n * }\n * ```\n *\n * Or use the `provideAuthon()` helper for standalone components.\n */\nexport class AuthonService {\n private client: Authon;\n private _user: AuthonUser | null = null;\n private _isSignedIn = false;\n private _isLoading = true;\n private _listeners: Array<() => void> = [];\n\n constructor(config: AuthonServiceConfig) {\n this.client = new Authon(config.publishableKey, config.config);\n\n this.client.on('signedIn', (user) => {\n this._user = user as AuthonUser;\n this._isSignedIn = true;\n this._isLoading = false;\n this.notifyListeners();\n });\n\n this.client.on('signedOut', () => {\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n });\n\n this.client.on('error', () => {\n this._isLoading = false;\n this.notifyListeners();\n });\n\n this._isLoading = false;\n }\n\n get user(): AuthonUser | null {\n return this._user;\n }\n\n get isSignedIn(): boolean {\n return this._isSignedIn;\n }\n\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n async openSignIn(): Promise<void> {\n await this.client.openSignIn();\n }\n\n async openSignUp(): Promise<void> {\n await this.client.openSignUp();\n }\n\n async signOut(): Promise<void> {\n await this.client.signOut();\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n }\n\n getToken(): string | null {\n return this.client.getToken();\n }\n\n getClient(): Authon {\n return this.client;\n }\n\n /**\n * Subscribe to auth state changes.\n * Returns an unsubscribe function.\n */\n onStateChange(callback: () => void): () => void {\n this._listeners.push(callback);\n return () => {\n this._listeners = this._listeners.filter((l) => l !== callback);\n };\n }\n\n destroy(): void {\n this.client.destroy();\n this._listeners = [];\n }\n\n private notifyListeners(): void {\n for (const listener of this._listeners) {\n listener();\n }\n }\n}\n","import type { AuthonService } from './service';\n\n/**\n * Route guard factory for Angular Router (CanActivateFn style).\n *\n * Since tsup can't compile Angular decorators, this returns a plain function.\n * Users wire it up in their route config:\n *\n * ```ts\n * import { inject } from '@angular/core';\n * import { authGuard } from '@authon/angular';\n * import { AuthonService } from './authon.service'; // your injectable wrapper\n *\n * const routes = [\n * {\n * path: 'dashboard',\n * component: DashboardComponent,\n * canActivate: [() => {\n * const authon = inject(AuthonService);\n * return authGuard(authon, '/login');\n * }],\n * },\n * ];\n * ```\n */\nexport function authGuard(\n authonService: AuthonService,\n redirectTo = '/sign-in',\n): boolean | { path: string } {\n if (authonService.isLoading) {\n return false;\n }\n\n if (!authonService.isSignedIn) {\n return { path: redirectTo };\n }\n\n return true;\n}\n","import { AuthonService, AUTHON_CONFIG, type AuthonServiceConfig } from './service';\n\n/**\n * Provider factory for Angular standalone components.\n *\n * Usage in app.config.ts:\n * ```ts\n * import { provideAuthon } from '@authon/angular';\n *\n * export const appConfig = {\n * providers: [\n * ...provideAuthon({ publishableKey: 'pk_live_...' }),\n * ],\n * };\n * ```\n *\n * Then inject in your components:\n * ```ts\n * import { Inject } from '@angular/core';\n * import { AUTHON_CONFIG, AuthonService } from '@authon/angular';\n *\n * constructor(@Inject('AuthonService') private authon: AuthonService) {}\n * ```\n */\nexport function provideAuthon(config: AuthonServiceConfig) {\n const service = new AuthonService(config);\n\n return [\n { provide: AUTHON_CONFIG, useValue: config },\n { provide: 'AuthonService', useValue: service },\n ];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gBAAuB;AAQhB,IAAM,gBAAgB;AA2BtB,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EACA,QAA2B;AAAA,EAC3B,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAgC,CAAC;AAAA,EAEzC,YAAY,QAA6B;AACvC,SAAK,SAAS,IAAI,iBAAO,OAAO,gBAAgB,OAAO,MAAM;AAE7D,SAAK,OAAO,GAAG,YAAY,CAAC,SAAS;AACnC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,aAAa,MAAM;AAChC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,SAAS,MAAM;AAC5B,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,OAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,OAAO,QAAQ;AAC1B,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,YAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,UAAkC;AAC9C,SAAK,WAAW,KAAK,QAAQ;AAC7B,WAAO,MAAM;AACX,WAAK,aAAa,KAAK,WAAW,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,OAAO,QAAQ;AACpB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEQ,kBAAwB;AAC9B,eAAW,YAAY,KAAK,YAAY;AACtC,eAAS;AAAA,IACX;AAAA,EACF;AACF;;;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/service.ts","../src/guard.ts","../src/helpers.ts"],"sourcesContent":["export { AuthonService, AUTHON_CONFIG, type AuthonServiceConfig } from './service';\nexport { authGuard } from './guard';\nexport { provideAuthon } from './helpers';\n","import { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser } from '@authon/shared';\n\n/**\n * Injection token key for Authon configuration.\n * Used with Angular's InjectionToken.\n */\nexport const AUTHON_CONFIG = 'AUTHON_CONFIG';\n\nexport interface AuthonServiceConfig {\n publishableKey: string;\n config?: Omit<AuthonConfig, 'mode'>;\n}\n\n/**\n * Plain class wrapping @authon/js for Angular dependency injection.\n *\n * Since tsup cannot compile Angular decorators, this is a plain class.\n * Users should wrap it in their own injectable service:\n *\n * ```ts\n * import { Injectable } from '@angular/core';\n * import { AuthonService as BaseAuthonService } from '@authon/angular';\n *\n * @Injectable({ providedIn: 'root' })\n * export class AuthonService extends BaseAuthonService {\n * constructor() {\n * super({ publishableKey: 'pk_live_...' });\n * }\n * }\n * ```\n *\n * Or use the `provideAuthon()` helper for standalone components.\n */\nexport class AuthonService {\n private client: Authon;\n private _user: AuthonUser | null = null;\n private _isSignedIn = false;\n private _isLoading = true;\n private _listeners: Array<() => void> = [];\n\n constructor(config: AuthonServiceConfig) {\n this.client = new Authon(config.publishableKey, config.config);\n\n this.client.on('signedIn', (user) => {\n this._user = user as AuthonUser;\n this._isSignedIn = true;\n this._isLoading = false;\n this.notifyListeners();\n });\n\n this.client.on('signedOut', () => {\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n });\n\n this.client.on('error', () => {\n this._isLoading = false;\n this.notifyListeners();\n });\n\n const existingUser = this.client.getUser();\n if (existingUser) {\n this._user = existingUser as AuthonUser;\n this._isSignedIn = true;\n }\n this._isLoading = false;\n }\n\n get user(): AuthonUser | null {\n return this._user;\n }\n\n get isSignedIn(): boolean {\n return this._isSignedIn;\n }\n\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n async openSignIn(): Promise<void> {\n await this.client.openSignIn();\n }\n\n async openSignUp(): Promise<void> {\n await this.client.openSignUp();\n }\n\n async signOut(): Promise<void> {\n await this.client.signOut();\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n }\n\n getToken(): string | null {\n return this.client.getToken();\n }\n\n getClient(): Authon {\n return this.client;\n }\n\n /**\n * Subscribe to auth state changes.\n * Returns an unsubscribe function.\n */\n onStateChange(callback: () => void): () => void {\n this._listeners.push(callback);\n return () => {\n this._listeners = this._listeners.filter((l) => l !== callback);\n };\n }\n\n destroy(): void {\n this.client.destroy();\n this._listeners = [];\n }\n\n private notifyListeners(): void {\n for (const listener of this._listeners) {\n listener();\n }\n }\n}\n","import type { AuthonService } from './service';\n\n/**\n * Route guard factory for Angular Router (CanActivateFn style).\n *\n * Since tsup can't compile Angular decorators, this returns a plain function.\n * Users wire it up in their route config:\n *\n * ```ts\n * import { inject } from '@angular/core';\n * import { authGuard } from '@authon/angular';\n * import { AuthonService } from './authon.service'; // your injectable wrapper\n *\n * const routes = [\n * {\n * path: 'dashboard',\n * component: DashboardComponent,\n * canActivate: [() => {\n * const authon = inject(AuthonService);\n * return authGuard(authon, '/login');\n * }],\n * },\n * ];\n * ```\n */\nexport function authGuard(\n authonService: AuthonService,\n redirectTo = '/sign-in',\n): boolean | { path: string } {\n if (authonService.isLoading) {\n return false;\n }\n\n if (!authonService.isSignedIn) {\n return { path: redirectTo };\n }\n\n return true;\n}\n","import { AuthonService, AUTHON_CONFIG, type AuthonServiceConfig } from './service';\n\n/**\n * Provider factory for Angular standalone components.\n *\n * Usage in app.config.ts:\n * ```ts\n * import { provideAuthon } from '@authon/angular';\n *\n * export const appConfig = {\n * providers: [\n * ...provideAuthon({ publishableKey: 'pk_live_...' }),\n * ],\n * };\n * ```\n *\n * Then inject in your components:\n * ```ts\n * import { Inject } from '@angular/core';\n * import { AUTHON_CONFIG, AuthonService } from '@authon/angular';\n *\n * constructor(@Inject('AuthonService') private authon: AuthonService) {}\n * ```\n */\nexport function provideAuthon(config: AuthonServiceConfig) {\n const service = new AuthonService(config);\n\n return [\n { provide: AUTHON_CONFIG, useValue: config },\n { provide: 'AuthonService', useValue: service },\n ];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gBAAuB;AAQhB,IAAM,gBAAgB;AA2BtB,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EACA,QAA2B;AAAA,EAC3B,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAgC,CAAC;AAAA,EAEzC,YAAY,QAA6B;AACvC,SAAK,SAAS,IAAI,iBAAO,OAAO,gBAAgB,OAAO,MAAM;AAE7D,SAAK,OAAO,GAAG,YAAY,CAAC,SAAS;AACnC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,aAAa,MAAM;AAChC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,SAAS,MAAM;AAC5B,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,UAAM,eAAe,KAAK,OAAO,QAAQ;AACzC,QAAI,cAAc;AAChB,WAAK,QAAQ;AACb,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,OAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,OAAO,QAAQ;AAC1B,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,YAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,UAAkC;AAC9C,SAAK,WAAW,KAAK,QAAQ;AAC7B,WAAO,MAAM;AACX,WAAK,aAAa,KAAK,WAAW,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,OAAO,QAAQ;AACpB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEQ,kBAAwB;AAC9B,eAAW,YAAY,KAAK,YAAY;AACtC,eAAS;AAAA,IACX;AAAA,EACF;AACF;;;ACtGO,SAAS,UACd,eACA,aAAa,YACe;AAC5B,MAAI,cAAc,WAAW;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,cAAc,YAAY;AAC7B,WAAO,EAAE,MAAM,WAAW;AAAA,EAC5B;AAEA,SAAO;AACT;;;ACdO,SAAS,cAAc,QAA6B;AACzD,QAAM,UAAU,IAAI,cAAc,MAAM;AAExC,SAAO;AAAA,IACL,EAAE,SAAS,eAAe,UAAU,OAAO;AAAA,IAC3C,EAAE,SAAS,iBAAiB,UAAU,QAAQ;AAAA,EAChD;AACF;","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -24,6 +24,11 @@ var AuthonService = class {
|
|
|
24
24
|
this._isLoading = false;
|
|
25
25
|
this.notifyListeners();
|
|
26
26
|
});
|
|
27
|
+
const existingUser = this.client.getUser();
|
|
28
|
+
if (existingUser) {
|
|
29
|
+
this._user = existingUser;
|
|
30
|
+
this._isSignedIn = true;
|
|
31
|
+
}
|
|
27
32
|
this._isLoading = false;
|
|
28
33
|
}
|
|
29
34
|
get user() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/service.ts","../src/guard.ts","../src/helpers.ts"],"sourcesContent":["import { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser } from '@authon/shared';\n\n/**\n * Injection token key for Authon configuration.\n * Used with Angular's InjectionToken.\n */\nexport const AUTHON_CONFIG = 'AUTHON_CONFIG';\n\nexport interface AuthonServiceConfig {\n publishableKey: string;\n config?: Omit<AuthonConfig, 'mode'>;\n}\n\n/**\n * Plain class wrapping @authon/js for Angular dependency injection.\n *\n * Since tsup cannot compile Angular decorators, this is a plain class.\n * Users should wrap it in their own injectable service:\n *\n * ```ts\n * import { Injectable } from '@angular/core';\n * import { AuthonService as BaseAuthonService } from '@authon/angular';\n *\n * @Injectable({ providedIn: 'root' })\n * export class AuthonService extends BaseAuthonService {\n * constructor() {\n * super({ publishableKey: 'pk_live_...' });\n * }\n * }\n * ```\n *\n * Or use the `provideAuthon()` helper for standalone components.\n */\nexport class AuthonService {\n private client: Authon;\n private _user: AuthonUser | null = null;\n private _isSignedIn = false;\n private _isLoading = true;\n private _listeners: Array<() => void> = [];\n\n constructor(config: AuthonServiceConfig) {\n this.client = new Authon(config.publishableKey, config.config);\n\n this.client.on('signedIn', (user) => {\n this._user = user as AuthonUser;\n this._isSignedIn = true;\n this._isLoading = false;\n this.notifyListeners();\n });\n\n this.client.on('signedOut', () => {\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n });\n\n this.client.on('error', () => {\n this._isLoading = false;\n this.notifyListeners();\n });\n\n this._isLoading = false;\n }\n\n get user(): AuthonUser | null {\n return this._user;\n }\n\n get isSignedIn(): boolean {\n return this._isSignedIn;\n }\n\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n async openSignIn(): Promise<void> {\n await this.client.openSignIn();\n }\n\n async openSignUp(): Promise<void> {\n await this.client.openSignUp();\n }\n\n async signOut(): Promise<void> {\n await this.client.signOut();\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n }\n\n getToken(): string | null {\n return this.client.getToken();\n }\n\n getClient(): Authon {\n return this.client;\n }\n\n /**\n * Subscribe to auth state changes.\n * Returns an unsubscribe function.\n */\n onStateChange(callback: () => void): () => void {\n this._listeners.push(callback);\n return () => {\n this._listeners = this._listeners.filter((l) => l !== callback);\n };\n }\n\n destroy(): void {\n this.client.destroy();\n this._listeners = [];\n }\n\n private notifyListeners(): void {\n for (const listener of this._listeners) {\n listener();\n }\n }\n}\n","import type { AuthonService } from './service';\n\n/**\n * Route guard factory for Angular Router (CanActivateFn style).\n *\n * Since tsup can't compile Angular decorators, this returns a plain function.\n * Users wire it up in their route config:\n *\n * ```ts\n * import { inject } from '@angular/core';\n * import { authGuard } from '@authon/angular';\n * import { AuthonService } from './authon.service'; // your injectable wrapper\n *\n * const routes = [\n * {\n * path: 'dashboard',\n * component: DashboardComponent,\n * canActivate: [() => {\n * const authon = inject(AuthonService);\n * return authGuard(authon, '/login');\n * }],\n * },\n * ];\n * ```\n */\nexport function authGuard(\n authonService: AuthonService,\n redirectTo = '/sign-in',\n): boolean | { path: string } {\n if (authonService.isLoading) {\n return false;\n }\n\n if (!authonService.isSignedIn) {\n return { path: redirectTo };\n }\n\n return true;\n}\n","import { AuthonService, AUTHON_CONFIG, type AuthonServiceConfig } from './service';\n\n/**\n * Provider factory for Angular standalone components.\n *\n * Usage in app.config.ts:\n * ```ts\n * import { provideAuthon } from '@authon/angular';\n *\n * export const appConfig = {\n * providers: [\n * ...provideAuthon({ publishableKey: 'pk_live_...' }),\n * ],\n * };\n * ```\n *\n * Then inject in your components:\n * ```ts\n * import { Inject } from '@angular/core';\n * import { AUTHON_CONFIG, AuthonService } from '@authon/angular';\n *\n * constructor(@Inject('AuthonService') private authon: AuthonService) {}\n * ```\n */\nexport function provideAuthon(config: AuthonServiceConfig) {\n const service = new AuthonService(config);\n\n return [\n { provide: AUTHON_CONFIG, useValue: config },\n { provide: 'AuthonService', useValue: service },\n ];\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAQhB,IAAM,gBAAgB;AA2BtB,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EACA,QAA2B;AAAA,EAC3B,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAgC,CAAC;AAAA,EAEzC,YAAY,QAA6B;AACvC,SAAK,SAAS,IAAI,OAAO,OAAO,gBAAgB,OAAO,MAAM;AAE7D,SAAK,OAAO,GAAG,YAAY,CAAC,SAAS;AACnC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,aAAa,MAAM;AAChC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,SAAS,MAAM;AAC5B,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,OAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,OAAO,QAAQ;AAC1B,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,YAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,UAAkC;AAC9C,SAAK,WAAW,KAAK,QAAQ;AAC7B,WAAO,MAAM;AACX,WAAK,aAAa,KAAK,WAAW,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,OAAO,QAAQ;AACpB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEQ,kBAAwB;AAC9B,eAAW,YAAY,KAAK,YAAY;AACtC,eAAS;AAAA,IACX;AAAA,EACF;AACF;;;
|
|
1
|
+
{"version":3,"sources":["../src/service.ts","../src/guard.ts","../src/helpers.ts"],"sourcesContent":["import { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser } from '@authon/shared';\n\n/**\n * Injection token key for Authon configuration.\n * Used with Angular's InjectionToken.\n */\nexport const AUTHON_CONFIG = 'AUTHON_CONFIG';\n\nexport interface AuthonServiceConfig {\n publishableKey: string;\n config?: Omit<AuthonConfig, 'mode'>;\n}\n\n/**\n * Plain class wrapping @authon/js for Angular dependency injection.\n *\n * Since tsup cannot compile Angular decorators, this is a plain class.\n * Users should wrap it in their own injectable service:\n *\n * ```ts\n * import { Injectable } from '@angular/core';\n * import { AuthonService as BaseAuthonService } from '@authon/angular';\n *\n * @Injectable({ providedIn: 'root' })\n * export class AuthonService extends BaseAuthonService {\n * constructor() {\n * super({ publishableKey: 'pk_live_...' });\n * }\n * }\n * ```\n *\n * Or use the `provideAuthon()` helper for standalone components.\n */\nexport class AuthonService {\n private client: Authon;\n private _user: AuthonUser | null = null;\n private _isSignedIn = false;\n private _isLoading = true;\n private _listeners: Array<() => void> = [];\n\n constructor(config: AuthonServiceConfig) {\n this.client = new Authon(config.publishableKey, config.config);\n\n this.client.on('signedIn', (user) => {\n this._user = user as AuthonUser;\n this._isSignedIn = true;\n this._isLoading = false;\n this.notifyListeners();\n });\n\n this.client.on('signedOut', () => {\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n });\n\n this.client.on('error', () => {\n this._isLoading = false;\n this.notifyListeners();\n });\n\n const existingUser = this.client.getUser();\n if (existingUser) {\n this._user = existingUser as AuthonUser;\n this._isSignedIn = true;\n }\n this._isLoading = false;\n }\n\n get user(): AuthonUser | null {\n return this._user;\n }\n\n get isSignedIn(): boolean {\n return this._isSignedIn;\n }\n\n get isLoading(): boolean {\n return this._isLoading;\n }\n\n async openSignIn(): Promise<void> {\n await this.client.openSignIn();\n }\n\n async openSignUp(): Promise<void> {\n await this.client.openSignUp();\n }\n\n async signOut(): Promise<void> {\n await this.client.signOut();\n this._user = null;\n this._isSignedIn = false;\n this.notifyListeners();\n }\n\n getToken(): string | null {\n return this.client.getToken();\n }\n\n getClient(): Authon {\n return this.client;\n }\n\n /**\n * Subscribe to auth state changes.\n * Returns an unsubscribe function.\n */\n onStateChange(callback: () => void): () => void {\n this._listeners.push(callback);\n return () => {\n this._listeners = this._listeners.filter((l) => l !== callback);\n };\n }\n\n destroy(): void {\n this.client.destroy();\n this._listeners = [];\n }\n\n private notifyListeners(): void {\n for (const listener of this._listeners) {\n listener();\n }\n }\n}\n","import type { AuthonService } from './service';\n\n/**\n * Route guard factory for Angular Router (CanActivateFn style).\n *\n * Since tsup can't compile Angular decorators, this returns a plain function.\n * Users wire it up in their route config:\n *\n * ```ts\n * import { inject } from '@angular/core';\n * import { authGuard } from '@authon/angular';\n * import { AuthonService } from './authon.service'; // your injectable wrapper\n *\n * const routes = [\n * {\n * path: 'dashboard',\n * component: DashboardComponent,\n * canActivate: [() => {\n * const authon = inject(AuthonService);\n * return authGuard(authon, '/login');\n * }],\n * },\n * ];\n * ```\n */\nexport function authGuard(\n authonService: AuthonService,\n redirectTo = '/sign-in',\n): boolean | { path: string } {\n if (authonService.isLoading) {\n return false;\n }\n\n if (!authonService.isSignedIn) {\n return { path: redirectTo };\n }\n\n return true;\n}\n","import { AuthonService, AUTHON_CONFIG, type AuthonServiceConfig } from './service';\n\n/**\n * Provider factory for Angular standalone components.\n *\n * Usage in app.config.ts:\n * ```ts\n * import { provideAuthon } from '@authon/angular';\n *\n * export const appConfig = {\n * providers: [\n * ...provideAuthon({ publishableKey: 'pk_live_...' }),\n * ],\n * };\n * ```\n *\n * Then inject in your components:\n * ```ts\n * import { Inject } from '@angular/core';\n * import { AUTHON_CONFIG, AuthonService } from '@authon/angular';\n *\n * constructor(@Inject('AuthonService') private authon: AuthonService) {}\n * ```\n */\nexport function provideAuthon(config: AuthonServiceConfig) {\n const service = new AuthonService(config);\n\n return [\n { provide: AUTHON_CONFIG, useValue: config },\n { provide: 'AuthonService', useValue: service },\n ];\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAQhB,IAAM,gBAAgB;AA2BtB,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EACA,QAA2B;AAAA,EAC3B,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAgC,CAAC;AAAA,EAEzC,YAAY,QAA6B;AACvC,SAAK,SAAS,IAAI,OAAO,OAAO,gBAAgB,OAAO,MAAM;AAE7D,SAAK,OAAO,GAAG,YAAY,CAAC,SAAS;AACnC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,aAAa,MAAM;AAChC,WAAK,QAAQ;AACb,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,SAAK,OAAO,GAAG,SAAS,MAAM;AAC5B,WAAK,aAAa;AAClB,WAAK,gBAAgB;AAAA,IACvB,CAAC;AAED,UAAM,eAAe,KAAK,OAAO,QAAQ;AACzC,QAAI,cAAc;AAChB,WAAK,QAAQ;AACb,WAAK,cAAc;AAAA,IACrB;AACA,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,OAA0B;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAqB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,KAAK,OAAO,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,OAAO,QAAQ;AAC1B,SAAK,QAAQ;AACb,SAAK,cAAc;AACnB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA,EAEA,YAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,UAAkC;AAC9C,SAAK,WAAW,KAAK,QAAQ;AAC7B,WAAO,MAAM;AACX,WAAK,aAAa,KAAK,WAAW,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,SAAK,OAAO,QAAQ;AACpB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEQ,kBAAwB;AAC9B,eAAW,YAAY,KAAK,YAAY;AACtC,eAAS;AAAA,IACX;AAAA,EACF;AACF;;;ACtGO,SAAS,UACd,eACA,aAAa,YACe;AAC5B,MAAI,cAAc,WAAW;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,cAAc,YAAY;AAC7B,WAAO,EAAE,MAAM,WAAW;AAAA,EAC5B;AAEA,SAAO;AACT;;;ACdO,SAAS,cAAc,QAA6B;AACzD,QAAM,UAAU,IAAI,cAAc,MAAM;AAExC,SAAO;AAAA,IACL,EAAE,SAAS,eAAe,UAAU,OAAO;AAAA,IAC3C,EAAE,SAAS,iBAAiB,UAAU,QAAQ;AAAA,EAChD;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@authon/angular",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.19",
|
|
4
4
|
"description": "Authon Angular SDK — service, guard, and components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
"require": "./dist/index.cjs"
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
|
-
"files": [
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
17
19
|
"scripts": {
|
|
18
20
|
"build": "tsup",
|
|
19
21
|
"dev": "tsup --watch"
|
|
@@ -28,10 +30,15 @@
|
|
|
28
30
|
"publishConfig": {
|
|
29
31
|
"access": "public"
|
|
30
32
|
},
|
|
31
|
-
"keywords": [
|
|
33
|
+
"keywords": [
|
|
34
|
+
"authon",
|
|
35
|
+
"angular",
|
|
36
|
+
"auth",
|
|
37
|
+
"guard"
|
|
38
|
+
],
|
|
32
39
|
"dependencies": {
|
|
33
|
-
"@authon/js": "
|
|
34
|
-
"@authon/shared": "
|
|
40
|
+
"@authon/js": "workspace:^",
|
|
41
|
+
"@authon/shared": "workspace:^"
|
|
35
42
|
},
|
|
36
43
|
"peerDependencies": {
|
|
37
44
|
"@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0"
|