@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 +1 -1
- package/src/core/TheranovaAuth.d.ts +71 -4
- package/src/core/TheranovaAuth.d.ts.map +1 -1
- package/src/core/TheranovaAuth.js +198 -8
- package/src/core/TheranovaAuth.js.map +1 -1
- package/src/core/device-info.d.ts +80 -0
- package/src/core/device-info.d.ts.map +1 -0
- package/src/core/device-info.js +171 -0
- package/src/core/device-info.js.map +1 -0
- package/src/core/logout.d.ts +2 -2
- package/src/core/logout.d.ts.map +1 -1
- package/src/core/logout.js +12 -10
- package/src/core/logout.js.map +1 -1
- package/src/index.d.ts +2 -1
- package/src/index.d.ts.map +1 -1
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
package/package.json
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
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;
|
|
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
|
-
|
|
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
|
|
245
|
-
return
|
|
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
|
-
|
|
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":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAqB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAmB,MAAM,eAAe,CAAC;AAErF,wCAAwC;AACxC,MAAM,cAAc,GAAG,8BAA8B,CAAC;AAiEtD,MAAM,OAAO,aAAa;IAIxB,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,cAAc;YACvC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC;YACzE,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;SACtD,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,OAAgD;QAC1D,qCAAqC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAE5C,4CAA4C;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAErE,kDAAkD;QAClD,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;YAC1C,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAC9C,cAAc,CAAC,OAAO,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5D,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClE,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEzC,6CAA6C;QAC7C,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;QAC1D,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;QAE1D,+EAA+E;QAC/E,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAED,0CAA0C;QAC1C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,mCAAmC;QACnC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;QAC7B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAAC,OAA8C;QACjE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAE5D,mBAAmB;QACnB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,oBAAoB;QACpB,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,2BAA2B;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEpE,cAAc;QACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI;SAChD,CAAC,CAAC;QAEH,0BAA0B;QAC1B,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC1C,cAAc,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QAElD,sCAAsC;QACtC,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC;YACvE,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClC,OAAO,CAAC,IAAI,CAAC,4DAA4D,EAAE,GAAG,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,qCAAqC;QACrC,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QAEpD,MAAM,OAAO,GAA8B;YACzC,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,eAAe,EAAE,UAAU,CAAC,eAAe;YAC3C,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,eAAe,EAAE,UAAU,CAAC,eAAe;YAC3C,UAAU;SACX,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,kBAAkB,EAAE;YACpE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,WAAW,EAAE;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,IAAI,+BAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,UAAU,EAC1D,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;QAEvE,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,IAAY,EAAE,YAAoB;QACpE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;YACD,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,UAAU,EAAE,oBAAoB;gBAChC,IAAI;gBACJ,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBACrC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC/B,aAAa,EAAE,YAAY;aAC5B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,IAAI,GAAkB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAElD,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QACzD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;gBAChD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,mCAAmC;iBACpD;gBACD,IAAI,EAAE,IAAI,eAAe,CAAC;oBACxB,UAAU,EAAE,eAAe;oBAC3B,aAAa,EAAE,YAAY;oBAC3B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;iBAChC,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,+BAA+B;gBAC/B,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,IAAI,GAAkB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAElD,MAAM,MAAM,GAAwB;gBAClC,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,YAAY,EAAE,IAAI,CAAC,aAAa,IAAI,YAAY;gBAChD,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;aAC3B,CAAC;YAEF,kBAAkB;YAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI;aAChD,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,+BAA+B;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;QAC/C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gCAAgC;QAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,OAAO,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,WAAW,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,OAAO,YAAY,CAAC;YAClB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;SACpF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,YAAY;QACV,iBAAiB,CAAC;YAChB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;SACpF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,eAAe,CAAC,GAAW;QACjC,yCAAyC;QACzC,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEvD,4BAA4B;QAC5B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE9B,kCAAkC;QAClC,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,sCAAsC;QACtC,OAAO,kBAAkB,CACvB,IAAI,CAAC,MAAM,CAAC;aACT,KAAK,CAAC,EAAE,CAAC;aACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACjE,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAc;QACzC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnG,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAClD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,MAAW,CAAC;QAEhB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,yDAAyD;YACzD,OAAO,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;YAC/G,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,KAAa;QAClC,SAAS,WAAW,CAAC,KAAa,EAAE,MAAc;YAChD,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,mDAAmD;QACnD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACzD,MAAM,KAAK,GAAa,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;QAEpC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9G,MAAM,CAAC,GAAG;YACR,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;YAC9F,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;SAC/F,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtF,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrF,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE7B,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;YAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;YAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC;YAC3C,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACrC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAkB;QACxC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;aAChB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -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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"}
|
package/src/core/logout.d.ts
CHANGED
|
@@ -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
|
package/src/core/logout.d.ts.map
CHANGED
|
@@ -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
|
|
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"}
|
package/src/core/logout.js
CHANGED
|
@@ -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,
|
|
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 (
|
|
41
|
-
url.searchParams.set('
|
|
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.
|
|
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
|
package/src/core/logout.js.map
CHANGED
|
@@ -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,
|
|
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
|
package/src/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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"}
|