@theranova/auth-sdk 0.2.0 → 0.4.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theranova/auth-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Theranova Platform OAuth2 Authentication SDK for frontend applications",
5
5
  "main": "./src/index.js",
6
6
  "types": "./src/index.d.ts",
@@ -3,6 +3,7 @@
3
3
  * Main class for OAuth2 PKCE authentication
4
4
  */
5
5
  import { type TokenStorage } from './token-manager';
6
+ import { type DeviceInfo } from './device-info';
6
7
  export interface TheranovaAuthConfig {
7
8
  /** OAuth2 client ID */
8
9
  clientId: string;
@@ -20,6 +21,33 @@ export interface TheranovaAuthConfig {
20
21
  storageKey?: string;
21
22
  /** Post-logout redirect URI */
22
23
  postLogoutRedirectUri?: string;
24
+ /**
25
+ * Automatically register device after login callback
26
+ * @default true
27
+ * @description 로그인 완료 후 자동으로 기기 등록 API 호출
28
+ */
29
+ autoRegisterDevice?: boolean;
30
+ /**
31
+ * Resource indicator for JWT access token (oidc-provider resourceIndicators)
32
+ * @example 'urn:hopsys:api' for Hopsys, 'urn:platform:api' for Platform Admin
33
+ * @description JWT access token 발급을 위해 필요. 각 앱에서 고유한 resource URI 설정
34
+ */
35
+ resource?: string;
36
+ }
37
+ /** Device registration request payload */
38
+ export interface DeviceRegistrationPayload {
39
+ deviceType: DeviceInfo['deviceType'];
40
+ platform: string;
41
+ platformVersion?: string;
42
+ browser: string;
43
+ browserVersion?: string;
44
+ model?: string;
45
+ mobile: boolean;
46
+ architecture?: string;
47
+ bitness?: string;
48
+ userAgent: string;
49
+ uaHintSupported: boolean;
50
+ deviceName: string;
23
51
  }
24
52
  export interface TheranovaAuthTokens {
25
53
  accessToken: string;
@@ -39,15 +67,41 @@ export declare class TheranovaAuth {
39
67
  /**
40
68
  * Start OAuth2 PKCE login flow
41
69
  * Generates PKCE challenge and redirects to authorization server
70
+ *
71
+ * @param options.prompt - OAuth2 prompt parameter ('login' | 'consent' | 'select_account' | 'none')
72
+ * 'login': 항상 로그인 화면 표시 (히스토리 있으면 계정 선택)
73
+ * @param options.action - Custom action parameter ('signup' to go directly to signup page)
74
+ */
75
+ login(options?: {
76
+ prompt?: string;
77
+ action?: 'signup';
78
+ }): Promise<void>;
79
+ /**
80
+ * Start OAuth2 PKCE signup flow
81
+ * Redirects directly to signup page on authorization server
42
82
  */
43
- login(): Promise<void>;
83
+ signup(): Promise<void>;
44
84
  /**
45
85
  * Handle OAuth2 callback
46
- * Exchanges authorization code for tokens
86
+ * Exchanges authorization code for tokens and optionally registers device
47
87
  *
88
+ * @param options.skipDeviceRegistration - Skip automatic device registration
48
89
  * @returns The tokens if successful, null if there was an error
49
90
  */
50
- handleCallback(): Promise<TheranovaAuthTokens | null>;
91
+ handleCallback(options?: {
92
+ skipDeviceRegistration?: boolean;
93
+ }): Promise<TheranovaAuthTokens | null>;
94
+ /**
95
+ * Register current device with the auth server
96
+ * Uses UA Hints API for accurate device information when available
97
+ *
98
+ * @returns Device info that was sent to the server
99
+ */
100
+ registerDevice(): Promise<DeviceInfo>;
101
+ /**
102
+ * Get current device info (without registering)
103
+ */
104
+ getDeviceInfo(): Promise<DeviceInfo>;
51
105
  /**
52
106
  * Exchange authorization code for tokens
53
107
  */
@@ -85,14 +139,27 @@ export declare class TheranovaAuth {
85
139
  * Get user info from ID token
86
140
  */
87
141
  getUserInfo(): Record<string, unknown> | null;
142
+ /**
143
+ * Base64URL 디코딩 (UTF-8 한글 지원)
144
+ * JWT payload 디코딩에 사용
145
+ *
146
+ * @param str - base64url 인코딩된 문자열
147
+ * @returns UTF-8 디코딩된 문자열
148
+ */
149
+ private base64UrlDecode;
88
150
  /**
89
151
  * Generate random string for state and code verifier
90
152
  */
91
153
  private generateRandomString;
92
154
  /**
93
- * Generate PKCE code challenge from verifier
155
+ * Generate PKCE code challenge from verifier (Always S256)
94
156
  */
95
157
  private generateCodeChallenge;
158
+ /**
159
+ * 소프트웨어 SHA-256 구현 (PKCE S256용)
160
+ * 참고: 이 코드는 외부 라이브러리 없이 S256 PKCE를 지원하기 위해 포함되었습니다.
161
+ */
162
+ private sha256Fallback;
96
163
  /**
97
164
  * Base64 URL encode
98
165
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TheranovaAuth.d.ts","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/TheranovaAuth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAMlE,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA8G;IAC5H,OAAO,CAAC,YAAY,CAAe;gBAEvB,MAAM,EAAE,mBAAmB;IASvC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B;;;;;OAKG;IACG,cAAc,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAmD3D;;OAEG;YACW,qBAAqB;IAiCnC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAoD/D;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY9C;;OAEG;IACH,SAAS,IAAI,YAAY,GAAG,IAAI;IAIhC;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;;OAGG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAQnC;;OAEG;IACH,YAAY,IAAI,IAAI;IAQpB;;OAEG;IACH,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkB7C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;YACW,qBAAqB;IAOnC;;OAEG;IACH,OAAO,CAAC,eAAe;CAUxB"}
1
+ {"version":3,"file":"TheranovaAuth.d.ts","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/TheranovaAuth.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { TokenManager } from './token-manager';
6
6
  import { logout as localLogout, logoutGlobal, logoutAndRedirect } from './logout';
7
+ import { getDeviceInfo, getDeviceDisplayName } from './device-info';
7
8
  /** Default Theranova Auth Server URL */
8
9
  const DEFAULT_ISSUER = 'https://auth.theranova.co.kr';
9
10
  export class TheranovaAuth {
@@ -12,6 +13,7 @@ export class TheranovaAuth {
12
13
  ...config,
13
14
  issuer: config.issuer || DEFAULT_ISSUER,
14
15
  scopes: config.scopes || ['openid', 'profile', 'email', 'offline_access'],
16
+ autoRegisterDevice: config.autoRegisterDevice ?? true,
15
17
  };
16
18
  this.tokenManager = new TokenManager(config.storageKey);
17
19
  }
@@ -24,8 +26,12 @@ export class TheranovaAuth {
24
26
  /**
25
27
  * Start OAuth2 PKCE login flow
26
28
  * Generates PKCE challenge and redirects to authorization server
29
+ *
30
+ * @param options.prompt - OAuth2 prompt parameter ('login' | 'consent' | 'select_account' | 'none')
31
+ * 'login': 항상 로그인 화면 표시 (히스토리 있으면 계정 선택)
32
+ * @param options.action - Custom action parameter ('signup' to go directly to signup page)
27
33
  */
28
- async login() {
34
+ async login(options) {
29
35
  // Generate state for CSRF protection
30
36
  const state = this.generateRandomString(32);
31
37
  // Generate PKCE code verifier and challenge
@@ -43,20 +49,41 @@ export class TheranovaAuth {
43
49
  authUrl.searchParams.set('redirect_uri', this.config.redirectUri);
44
50
  authUrl.searchParams.set('scope', this.config.scopes.join(' '));
45
51
  authUrl.searchParams.set('state', state);
52
+ // prompt 파라미터: 기본값 'login' (계정 선택/로그인 화면 표시)
53
+ authUrl.searchParams.set('prompt', options?.prompt || 'login');
46
54
  authUrl.searchParams.set('code_challenge', codeChallenge);
47
55
  authUrl.searchParams.set('code_challenge_method', 'S256');
56
+ // resource 파라미터: JWT access token 발급을 위해 필요 (oidc-provider resourceIndicators)
57
+ // 설정에 resource가 있으면 추가
58
+ if (this.config.resource) {
59
+ authUrl.searchParams.set('resource', this.config.resource);
60
+ }
61
+ // action 파라미터: 'signup'이면 바로 회원가입 페이지로 이동
62
+ if (options?.action) {
63
+ authUrl.searchParams.set('action', options.action);
64
+ }
48
65
  // Redirect to authorization server
49
66
  if (typeof window !== 'undefined') {
50
- window.location.href = authUrl.toString();
67
+ const url = authUrl.toString();
68
+ console.log('[TheranovaAuth] Redirecting to:', url);
69
+ window.location.href = url;
51
70
  }
52
71
  }
72
+ /**
73
+ * Start OAuth2 PKCE signup flow
74
+ * Redirects directly to signup page on authorization server
75
+ */
76
+ async signup() {
77
+ return this.login({ action: 'signup' });
78
+ }
53
79
  /**
54
80
  * Handle OAuth2 callback
55
- * Exchanges authorization code for tokens
81
+ * Exchanges authorization code for tokens and optionally registers device
56
82
  *
83
+ * @param options.skipDeviceRegistration - Skip automatic device registration
57
84
  * @returns The tokens if successful, null if there was an error
58
85
  */
59
- async handleCallback() {
86
+ async handleCallback(options) {
60
87
  if (typeof window === 'undefined') {
61
88
  return null;
62
89
  }
@@ -95,8 +122,63 @@ export class TheranovaAuth {
95
122
  // Clean up sessionStorage
96
123
  sessionStorage.removeItem('oauth2_state');
97
124
  sessionStorage.removeItem('oauth2_code_verifier');
125
+ // Auto-register device (non-blocking)
126
+ if (this.config.autoRegisterDevice && !options?.skipDeviceRegistration) {
127
+ this.registerDevice().catch((err) => {
128
+ console.warn('[TheranovaAuth] Device registration failed (non-critical):', err);
129
+ });
130
+ }
98
131
  return tokens;
99
132
  }
133
+ /**
134
+ * Register current device with the auth server
135
+ * Uses UA Hints API for accurate device information when available
136
+ *
137
+ * @returns Device info that was sent to the server
138
+ */
139
+ async registerDevice() {
140
+ const accessToken = this.tokenManager.getAccessToken();
141
+ if (!accessToken) {
142
+ throw new Error('Not authenticated. Please login first.');
143
+ }
144
+ // Collect device info using UA Hints
145
+ const deviceInfo = await getDeviceInfo();
146
+ const deviceName = getDeviceDisplayName(deviceInfo);
147
+ const payload = {
148
+ deviceType: deviceInfo.deviceType,
149
+ platform: deviceInfo.platform,
150
+ platformVersion: deviceInfo.platformVersion,
151
+ browser: deviceInfo.browser,
152
+ browserVersion: deviceInfo.browserVersion,
153
+ model: deviceInfo.model,
154
+ mobile: deviceInfo.mobile,
155
+ architecture: deviceInfo.architecture,
156
+ bitness: deviceInfo.bitness,
157
+ userAgent: deviceInfo.userAgent,
158
+ uaHintSupported: deviceInfo.uaHintSupported,
159
+ deviceName,
160
+ };
161
+ const response = await fetch(`${this.config.issuer}/device/register`, {
162
+ method: 'POST',
163
+ headers: {
164
+ 'Content-Type': 'application/json',
165
+ 'Authorization': `Bearer ${accessToken}`,
166
+ },
167
+ body: JSON.stringify(payload),
168
+ });
169
+ if (!response.ok) {
170
+ const errorData = await response.json().catch(() => ({}));
171
+ throw new Error(errorData.message || `Device registration failed: ${response.status}`);
172
+ }
173
+ console.log('[TheranovaAuth] Device registered:', deviceName, deviceInfo.uaHintSupported ? '(UA Hints)' : '(User-Agent fallback)');
174
+ return deviceInfo;
175
+ }
176
+ /**
177
+ * Get current device info (without registering)
178
+ */
179
+ async getDeviceInfo() {
180
+ return getDeviceInfo();
181
+ }
100
182
  /**
101
183
  * Exchange authorization code for tokens
102
184
  */
@@ -215,6 +297,7 @@ export class TheranovaAuth {
215
297
  return logoutGlobal({
216
298
  tokenManager: this.tokenManager,
217
299
  issuer: this.config.issuer,
300
+ clientId: this.config.clientId,
218
301
  postLogoutRedirectUri: this.config.postLogoutRedirectUri || this.config.redirectUri,
219
302
  });
220
303
  }
@@ -225,6 +308,7 @@ export class TheranovaAuth {
225
308
  logoutAndRedirect({
226
309
  tokenManager: this.tokenManager,
227
310
  issuer: this.config.issuer,
311
+ clientId: this.config.clientId,
228
312
  postLogoutRedirectUri: this.config.postLogoutRedirectUri || this.config.redirectUri,
229
313
  });
230
314
  }
@@ -241,13 +325,41 @@ export class TheranovaAuth {
241
325
  if (parts.length !== 3) {
242
326
  return null;
243
327
  }
244
- const payload = JSON.parse(atob(parts[1]));
245
- return payload;
328
+ const jsonPayload = this.base64UrlDecode(parts[1]);
329
+ return JSON.parse(jsonPayload);
246
330
  }
247
331
  catch {
248
332
  return null;
249
333
  }
250
334
  }
335
+ /**
336
+ * Base64URL 디코딩 (UTF-8 한글 지원)
337
+ * JWT payload 디코딩에 사용
338
+ *
339
+ * @param str - base64url 인코딩된 문자열
340
+ * @returns UTF-8 디코딩된 문자열
341
+ */
342
+ base64UrlDecode(str) {
343
+ // base64url → base64 변환 (URL-safe 문자 복원)
344
+ let base64 = str.replace(/-/g, '+').replace(/_/g, '/');
345
+ // 패딩 추가 (base64는 4의 배수여야 함)
346
+ const padding = (4 - (base64.length % 4)) % 4;
347
+ base64 += '='.repeat(padding);
348
+ // TextDecoder 사용 (모던 브라우저, 가장 깔끔)
349
+ if (typeof TextDecoder !== 'undefined') {
350
+ const binaryStr = atob(base64);
351
+ const bytes = new Uint8Array(binaryStr.length);
352
+ for (let i = 0; i < binaryStr.length; i++) {
353
+ bytes[i] = binaryStr.charCodeAt(i);
354
+ }
355
+ return new TextDecoder('utf-8').decode(bytes);
356
+ }
357
+ // 폴백: decodeURIComponent 방식 (구형 브라우저)
358
+ return decodeURIComponent(atob(base64)
359
+ .split('')
360
+ .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
361
+ .join(''));
362
+ }
251
363
  /**
252
364
  * Generate random string for state and code verifier
253
365
  */
@@ -257,14 +369,92 @@ export class TheranovaAuth {
257
369
  return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('').slice(0, length);
258
370
  }
259
371
  /**
260
- * Generate PKCE code challenge from verifier
372
+ * Generate PKCE code challenge from verifier (Always S256)
261
373
  */
262
374
  async generateCodeChallenge(verifier) {
263
375
  const encoder = new TextEncoder();
264
376
  const data = encoder.encode(verifier);
265
- const digest = await crypto.subtle.digest('SHA-256', data);
377
+ let digest;
378
+ if (typeof crypto !== 'undefined' && crypto.subtle) {
379
+ digest = await crypto.subtle.digest('SHA-256', data);
380
+ }
381
+ else {
382
+ // Secure Context가 아닐 경우(HTTP LAN 등)를 위한 소프트웨어 SHA-256 폴백
383
+ console.warn('[TheranovaAuth] Secure context (crypto.subtle) not available. Using software SHA-256 fallback.');
384
+ digest = this.sha256Fallback(verifier).buffer;
385
+ }
266
386
  return this.base64UrlEncode(new Uint8Array(digest));
267
387
  }
388
+ /**
389
+ * 소프트웨어 SHA-256 구현 (PKCE S256용)
390
+ * 참고: 이 코드는 외부 라이브러리 없이 S256 PKCE를 지원하기 위해 포함되었습니다.
391
+ */
392
+ sha256Fallback(ascii) {
393
+ function rightRotate(value, amount) {
394
+ return (value >>> amount) | (value << (32 - amount));
395
+ }
396
+ const asciiLength = ascii.length * 8;
397
+ // Initialize words with enough space and zero-fill
398
+ const totalWords = (((asciiLength + 64) >> 9) << 4) + 16;
399
+ const words = new Array(totalWords).fill(0);
400
+ for (let i = 0; i < ascii.length * 8; i += 8) {
401
+ words[i >> 5] |= (ascii.charCodeAt(i / 8) & 0xff) << (24 - (i % 32));
402
+ }
403
+ words[asciiLength >> 5] |= 0x80 << (24 - (asciiLength % 32));
404
+ words[totalWords - 1] = asciiLength;
405
+ const hash = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
406
+ const k = [
407
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
408
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
409
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
410
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
411
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
412
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
413
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
414
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
415
+ ];
416
+ for (let i = 0; i < words.length; i += 16) {
417
+ const w = words.slice(i, i + 16);
418
+ for (let j = 16; j < 64; j++) {
419
+ const s0 = rightRotate(w[j - 15], 7) ^ rightRotate(w[j - 15], 18) ^ (w[j - 15] >>> 3);
420
+ const s1 = rightRotate(w[j - 2], 17) ^ rightRotate(w[j - 2], 19) ^ (w[j - 2] >>> 10);
421
+ w[j] = (w[j - 16] + s0 + w[j - 7] + s1) | 0;
422
+ }
423
+ let [a, b, c, d, e, f, g, h] = hash;
424
+ for (let j = 0; j < 64; j++) {
425
+ const S1 = rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25);
426
+ const ch = (e & f) ^ (~e & g);
427
+ const temp1 = (h + S1 + ch + k[j] + w[j]) | 0;
428
+ const S0 = rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22);
429
+ const maj = (a & b) ^ (a & c) ^ (b & c);
430
+ const temp2 = (S0 + maj) | 0;
431
+ h = g;
432
+ g = f;
433
+ f = e;
434
+ e = (d + temp1) | 0;
435
+ d = c;
436
+ c = b;
437
+ b = a;
438
+ a = (temp1 + temp2) | 0;
439
+ }
440
+ hash[0] = (hash[0] + a) | 0;
441
+ hash[1] = (hash[1] + b) | 0;
442
+ hash[2] = (hash[2] + c) | 0;
443
+ hash[3] = (hash[3] + d) | 0;
444
+ hash[4] = (hash[4] + e) | 0;
445
+ hash[5] = (hash[5] + f) | 0;
446
+ hash[6] = (hash[6] + g) | 0;
447
+ hash[7] = (hash[7] + h) | 0;
448
+ }
449
+ const result = new Uint8Array(32);
450
+ for (let i = 0; i < 8; i++) {
451
+ result[i * 4 + 0] = (hash[i] >>> 24) & 0xff;
452
+ result[i * 4 + 1] = (hash[i] >>> 16) & 0xff;
453
+ result[i * 4 + 2] = (hash[i] >>> 8) & 0xff;
454
+ result[i * 4 + 3] = hash[i] & 0xff;
455
+ }
456
+ return result;
457
+ }
268
458
  /**
269
459
  * Base64 URL encode
270
460
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TheranovaAuth.js","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/TheranovaAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TheranovaAuth.js","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/TheranovaAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Device Info - UA Hint 기반 기기 정보 수집
3
+ *
4
+ * User-Agent Client Hints API를 사용하여 더 정확한 기기 정보를 수집합니다.
5
+ * 지원하지 않는 브라우저에서는 기존 User-Agent 파싱으로 폴백합니다.
6
+ */
7
+ export interface DeviceInfo {
8
+ /** 기기 유형 */
9
+ deviceType: 'DESKTOP' | 'MOBILE' | 'WEB' | 'TABLET' | 'OTHER';
10
+ /** 플랫폼 (Windows, macOS, Android, iOS, Linux) */
11
+ platform: string;
12
+ /** 플랫폼 버전 */
13
+ platformVersion?: string;
14
+ /** 브라우저 이름 */
15
+ browser: string;
16
+ /** 브라우저 버전 */
17
+ browserVersion?: string;
18
+ /** 기기 모델 (모바일) */
19
+ model?: string;
20
+ /** 모바일 여부 */
21
+ mobile: boolean;
22
+ /** 아키텍처 (x86, arm) */
23
+ architecture?: string;
24
+ /** 비트 수 (32, 64) */
25
+ bitness?: string;
26
+ /** 원본 User-Agent 문자열 */
27
+ userAgent: string;
28
+ /** UA Hint 사용 여부 */
29
+ uaHintSupported: boolean;
30
+ }
31
+ interface NavigatorUAData {
32
+ brands: {
33
+ brand: string;
34
+ version: string;
35
+ }[];
36
+ mobile: boolean;
37
+ platform: string;
38
+ getHighEntropyValues(hints: string[]): Promise<{
39
+ platform?: string;
40
+ platformVersion?: string;
41
+ architecture?: string;
42
+ model?: string;
43
+ bitness?: string;
44
+ mobile?: boolean;
45
+ uaFullVersion?: string;
46
+ }>;
47
+ }
48
+ declare global {
49
+ interface Navigator {
50
+ userAgentData?: NavigatorUAData;
51
+ }
52
+ }
53
+ /**
54
+ * 기기 정보 수집 (UA Hint 우선, 폴백으로 User-Agent 파싱)
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const deviceInfo = await getDeviceInfo();
59
+ * console.log(deviceInfo);
60
+ * // {
61
+ * // deviceType: 'DESKTOP',
62
+ * // platform: 'Windows',
63
+ * // platformVersion: '10.0.0',
64
+ * // browser: 'Chrome',
65
+ * // browserVersion: '120',
66
+ * // mobile: false,
67
+ * // architecture: 'x86',
68
+ * // bitness: '64',
69
+ * // userAgent: '...',
70
+ * // uaHintSupported: true
71
+ * // }
72
+ * ```
73
+ */
74
+ export declare function getDeviceInfo(): Promise<DeviceInfo>;
75
+ /**
76
+ * 기기 정보를 사람이 읽기 쉬운 이름으로 변환
77
+ */
78
+ export declare function getDeviceDisplayName(info: DeviceInfo): string;
79
+ export {};
80
+ //# sourceMappingURL=device-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-info.d.ts","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/device-info.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,YAAY;IACZ,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9D,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,sBAAsB;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAGD,UAAU,eAAe;IACvB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,SAAS;QACjB,aAAa,CAAC,EAAE,eAAe,CAAC;KACjC;CACF;AAwHD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAsBzD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAM7D"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Device Info - UA Hint 기반 기기 정보 수집
3
+ *
4
+ * User-Agent Client Hints API를 사용하여 더 정확한 기기 정보를 수집합니다.
5
+ * 지원하지 않는 브라우저에서는 기존 User-Agent 파싱으로 폴백합니다.
6
+ */
7
+ /**
8
+ * User-Agent 문자열에서 기기 정보 파싱 (폴백)
9
+ */
10
+ function parseUserAgent(ua) {
11
+ const uaLower = ua.toLowerCase();
12
+ // 기기 유형 판별
13
+ let deviceType = 'DESKTOP';
14
+ let mobile = false;
15
+ if (uaLower.includes('mobile') || uaLower.includes('android') || uaLower.includes('iphone')) {
16
+ deviceType = 'MOBILE';
17
+ mobile = true;
18
+ }
19
+ else if (uaLower.includes('tablet') || uaLower.includes('ipad')) {
20
+ deviceType = 'TABLET';
21
+ mobile = true;
22
+ }
23
+ // 플랫폼 판별
24
+ let platform = 'Unknown';
25
+ if (uaLower.includes('windows'))
26
+ platform = 'Windows';
27
+ else if (uaLower.includes('mac os') || uaLower.includes('macos'))
28
+ platform = 'macOS';
29
+ else if (uaLower.includes('android'))
30
+ platform = 'Android';
31
+ else if (uaLower.includes('iphone') || uaLower.includes('ipad') || uaLower.includes('ios'))
32
+ platform = 'iOS';
33
+ else if (uaLower.includes('linux'))
34
+ platform = 'Linux';
35
+ else if (uaLower.includes('cros'))
36
+ platform = 'Chrome OS';
37
+ // 브라우저 판별
38
+ let browser = 'Unknown';
39
+ let browserVersion;
40
+ if (uaLower.includes('edg/')) {
41
+ browser = 'Edge';
42
+ browserVersion = ua.match(/Edg\/(\d+(\.\d+)?)/)?.[1];
43
+ }
44
+ else if (uaLower.includes('chrome') && !uaLower.includes('chromium')) {
45
+ browser = 'Chrome';
46
+ browserVersion = ua.match(/Chrome\/(\d+(\.\d+)?)/)?.[1];
47
+ }
48
+ else if (uaLower.includes('firefox')) {
49
+ browser = 'Firefox';
50
+ browserVersion = ua.match(/Firefox\/(\d+(\.\d+)?)/)?.[1];
51
+ }
52
+ else if (uaLower.includes('safari') && !uaLower.includes('chrome')) {
53
+ browser = 'Safari';
54
+ browserVersion = ua.match(/Version\/(\d+(\.\d+)?)/)?.[1];
55
+ }
56
+ else if (uaLower.includes('opera') || uaLower.includes('opr/')) {
57
+ browser = 'Opera';
58
+ browserVersion = ua.match(/(?:Opera|OPR)\/(\d+(\.\d+)?)/)?.[1];
59
+ }
60
+ // 모델 추출 (괄호 안의 정보)
61
+ const modelMatch = ua.match(/\(([^)]+)\)/);
62
+ const model = modelMatch?.[1];
63
+ return {
64
+ deviceType,
65
+ platform,
66
+ browser,
67
+ browserVersion,
68
+ mobile,
69
+ model,
70
+ };
71
+ }
72
+ /**
73
+ * UA Hint API를 사용하여 기기 정보 수집
74
+ */
75
+ async function getDeviceInfoFromUAHint() {
76
+ if (!navigator.userAgentData) {
77
+ return null;
78
+ }
79
+ try {
80
+ const highEntropyData = await navigator.userAgentData.getHighEntropyValues([
81
+ 'platform',
82
+ 'platformVersion',
83
+ 'architecture',
84
+ 'model',
85
+ 'bitness',
86
+ 'mobile',
87
+ ]);
88
+ const brands = navigator.userAgentData.brands;
89
+ const mobile = navigator.userAgentData.mobile;
90
+ // 메인 브라우저 브랜드 찾기 (Chromium 제외)
91
+ const mainBrand = brands.find(b => !b.brand.includes('Chromium') &&
92
+ !b.brand.includes('Not')) || brands[0];
93
+ // 기기 유형 판별
94
+ let deviceType = 'DESKTOP';
95
+ if (mobile) {
96
+ // 태블릿과 모바일 구분 (화면 크기 기반)
97
+ if (typeof window !== 'undefined' && window.screen) {
98
+ const minDimension = Math.min(window.screen.width, window.screen.height);
99
+ deviceType = minDimension >= 600 ? 'TABLET' : 'MOBILE';
100
+ }
101
+ else {
102
+ deviceType = 'MOBILE';
103
+ }
104
+ }
105
+ return {
106
+ deviceType,
107
+ platform: highEntropyData.platform || navigator.userAgentData.platform,
108
+ platformVersion: highEntropyData.platformVersion,
109
+ browser: mainBrand?.brand || 'Unknown',
110
+ browserVersion: mainBrand?.version,
111
+ model: highEntropyData.model || undefined,
112
+ mobile,
113
+ architecture: highEntropyData.architecture,
114
+ bitness: highEntropyData.bitness,
115
+ };
116
+ }
117
+ catch (error) {
118
+ console.warn('[TheranovaAuth] UA Hint API error, falling back to User-Agent parsing:', error);
119
+ return null;
120
+ }
121
+ }
122
+ /**
123
+ * 기기 정보 수집 (UA Hint 우선, 폴백으로 User-Agent 파싱)
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * const deviceInfo = await getDeviceInfo();
128
+ * console.log(deviceInfo);
129
+ * // {
130
+ * // deviceType: 'DESKTOP',
131
+ * // platform: 'Windows',
132
+ * // platformVersion: '10.0.0',
133
+ * // browser: 'Chrome',
134
+ * // browserVersion: '120',
135
+ * // mobile: false,
136
+ * // architecture: 'x86',
137
+ * // bitness: '64',
138
+ * // userAgent: '...',
139
+ * // uaHintSupported: true
140
+ * // }
141
+ * ```
142
+ */
143
+ export async function getDeviceInfo() {
144
+ const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : '';
145
+ // UA Hint API 시도
146
+ const uaHintInfo = await getDeviceInfoFromUAHint();
147
+ if (uaHintInfo) {
148
+ return {
149
+ ...uaHintInfo,
150
+ userAgent,
151
+ uaHintSupported: true,
152
+ };
153
+ }
154
+ // 폴백: User-Agent 문자열 파싱
155
+ const parsedInfo = parseUserAgent(userAgent);
156
+ return {
157
+ ...parsedInfo,
158
+ userAgent,
159
+ uaHintSupported: false,
160
+ };
161
+ }
162
+ /**
163
+ * 기기 정보를 사람이 읽기 쉬운 이름으로 변환
164
+ */
165
+ export function getDeviceDisplayName(info) {
166
+ const browserPart = info.browserVersion
167
+ ? `${info.browser} ${info.browserVersion.split('.')[0]}`
168
+ : info.browser;
169
+ return `${browserPart} on ${info.platform}`;
170
+ }
171
+ //# sourceMappingURL=device-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-info.js","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/device-info.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,10 @@ export interface LogoutOptions {
10
10
  storageKey?: string;
11
11
  /** Authorization server issuer URL */
12
12
  issuer?: string;
13
+ /** OAuth2 Client ID */
14
+ clientId?: string;
13
15
  /** Post-logout redirect URI */
14
16
  postLogoutRedirectUri?: string;
15
- /** ID token for global logout */
16
- idToken?: string;
17
17
  }
18
18
  /**
19
19
  * Local logout
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/logout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,IAAI,CASxD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CA8BlE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAM9D"}
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/logout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,IAAI,CASxD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAwBlE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAY9D"}
@@ -24,21 +24,16 @@ export function logout(options = {}) {
24
24
  * @returns The logout URL to redirect to, or null if issuer is not provided
25
25
  */
26
26
  export function logoutGlobal(options) {
27
- const { issuer, postLogoutRedirectUri, idToken, tokenManager, storageKey } = options;
27
+ const { issuer, clientId, postLogoutRedirectUri, tokenManager, storageKey } = options;
28
28
  if (!issuer) {
29
29
  console.warn('[TheranovaAuth] Cannot perform global logout: issuer not provided');
30
30
  return null;
31
31
  }
32
- // Get ID token from options or storage
33
- let idTokenHint = idToken;
34
- if (!idTokenHint) {
35
- const tm = tokenManager || new TokenManager(storageKey);
36
- idTokenHint = tm.getIdToken() || undefined;
37
- }
38
32
  // Build end_session URL
33
+ // client_id 사용 (id_token_hint는 만료된 토큰일 수 있어서 제외)
39
34
  const url = new URL('/session/end', issuer);
40
- if (idTokenHint) {
41
- url.searchParams.set('id_token_hint', idTokenHint);
35
+ if (clientId) {
36
+ url.searchParams.set('client_id', clientId);
42
37
  }
43
38
  if (postLogoutRedirectUri) {
44
39
  url.searchParams.set('post_logout_redirect_uri', postLogoutRedirectUri);
@@ -54,7 +49,14 @@ export function logoutGlobal(options) {
54
49
  export function logoutAndRedirect(options) {
55
50
  const logoutUrl = logoutGlobal(options);
56
51
  if (logoutUrl && typeof window !== 'undefined') {
57
- window.location.href = logoutUrl;
52
+ window.location.replace(logoutUrl);
53
+ }
54
+ else {
55
+ // Fallback: 로컬 로그아웃만 수행하고 홈으로 이동
56
+ logout(options);
57
+ if (typeof window !== 'undefined') {
58
+ window.location.replace(options.postLogoutRedirectUri || '/');
59
+ }
58
60
  }
59
61
  }
60
62
  //# sourceMappingURL=logout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/logout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAe/C;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,UAAyB,EAAE;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClF,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,4BAA4B;IAC5B,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;QAC1C,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC1C,cAAc,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAErF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,IAAI,WAAW,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,EAAE,GAAG,YAAY,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;QACxD,WAAW,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,SAAS,CAAC;IAC7C,CAAC;IAED,wBAAwB;IACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,qBAAqB,EAAE,CAAC;QAC1B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;IAC1E,CAAC;IAED,qBAAqB;IACrB,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;IACnC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../../../../libs/theranova/auth-sdk/src/core/logout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAe/C;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,UAAyB,EAAE;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClF,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,4BAA4B;IAC5B,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;QAC1C,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC1C,cAAc,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAAsB;IACjD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEtF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAwB;IACxB,iDAAiD;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,qBAAqB,EAAE,CAAC;QAC1B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,CAAC;IAC1E,CAAC;IAED,qBAAqB;IACrB,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAsB;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAExC,IAAI,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,iCAAiC;QACjC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC"}
package/src/index.d.ts CHANGED
@@ -32,7 +32,8 @@
32
32
  * auth.logout();
33
33
  * ```
34
34
  */
35
- export { TheranovaAuth, type TheranovaAuthConfig, type TheranovaAuthTokens } from './core/TheranovaAuth';
35
+ export { TheranovaAuth, type TheranovaAuthConfig, type TheranovaAuthTokens, type DeviceRegistrationPayload } from './core/TheranovaAuth';
36
36
  export { TokenManager, type TokenStorage } from './core/token-manager';
37
37
  export { logout, logoutGlobal, type LogoutOptions } from './core/logout';
38
+ export { getDeviceInfo, getDeviceDisplayName, type DeviceInfo } from './core/device-info';
38
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/theranova/auth-sdk/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../libs/theranova/auth-sdk/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,KAAK,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACzI,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
package/src/index.js CHANGED
@@ -35,4 +35,5 @@
35
35
  export { TheranovaAuth } from './core/TheranovaAuth';
36
36
  export { TokenManager } from './core/token-manager';
37
37
  export { logout, logoutGlobal } from './core/logout';
38
+ export { getDeviceInfo, getDeviceDisplayName } from './core/device-info';
38
39
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/theranova/auth-sdk/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,aAAa,EAAsD,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAsB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/theranova/auth-sdk/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,aAAa,EAAsF,MAAM,sBAAsB,CAAC;AACzI,OAAO,EAAE,YAAY,EAAqB,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAsB,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAmB,MAAM,oBAAoB,CAAC"}