@nexus-cross/crossx-sdk-core 1.3.4 → 1.3.5

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.
@@ -0,0 +1,17 @@
1
+ /**
2
+ * parseOAuthDeeplink 테스트
3
+ *
4
+ * 실제 OAuth deeplink 데이터로 파싱·추출을 검증합니다.
5
+ *
6
+ * 인코딩 구조: Base64( encodeURIComponent( JSON ) )
7
+ *
8
+ * 검증 항목:
9
+ * 1. Google deeplink 파싱 (accessToken === idToken, tokenType/expiresIn/scope 포함)
10
+ * 2. Apple deeplink 파싱 (accessToken ≠ idToken, code 포함, tokenType/expiresIn/scope 없음)
11
+ * 3. 추출된 필드 정확성 (provider, email, sub, token)
12
+ * 4. Firebase JWT payload 에서 sign_in_provider, identities 추출
13
+ * 5. Apple ID Token payload 에서 apple-specific 필드 검증
14
+ * 6. 에러 케이스 (잘못된 base64, 누락 필드 등)
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=parseOAuthDeeplink.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseOAuthDeeplink.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/utils/parseOAuthDeeplink.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserOAuthAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/oauth/BrowserOAuthAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/D,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAMlC,OAAO,CAAC,MAAM,CAAC,eAAe;mBAST,SAAS;IAQ9B;;;;OAIG;mBACkB,kBAAkB;IA8DvC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CA0J/C"}
1
+ {"version":3,"file":"BrowserOAuthAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/oauth/BrowserOAuthAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAS/D,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAMlC,OAAO,CAAC,MAAM,CAAC,eAAe;mBAST,SAAS;IAQ9B;;;;OAIG;mBACkB,kBAAkB;IA2DvC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CA6K/C"}
@@ -25,6 +25,21 @@ export declare class SignInUseCase {
25
25
  */
26
26
  private checkResponseError;
27
27
  execute(options?: SignInOptions): Promise<AuthResult>;
28
+ /**
29
+ * RN WebView 등 외부 환경에서 deeplink로 수신한 Firebase(OAuth) 토큰을
30
+ * 직접 주입하여 로그인합니다.
31
+ *
32
+ * OAuth 팝업 없이 이미 확보된 Firebase 토큰으로
33
+ * CROSSx 인증 교환 → 사용자 정보 추출 → 지갑 로드를 수행합니다.
34
+ *
35
+ * @param firebaseToken OAuth 서비스에서 발급받은 Firebase JWT
36
+ */
37
+ executeWithOAuthToken(firebaseToken: string): Promise<AuthResult>;
38
+ /**
39
+ * Firebase 토큰 → CROSSx 인증 교환 → 사용자 정보 추출 → 토큰 저장 → 지갑 로드.
40
+ * execute()와 executeWithOAuthToken()에서 공유합니다.
41
+ */
42
+ private processFirebaseToken;
28
43
  /**
29
44
  * Firebase 토큰 → CROSSx 인증 교환
30
45
  * cookie 모드: POST /social/login/cookie → JWT는 HttpOnly Set-Cookie, body는 성공 메시지
@@ -1 +1 @@
1
- {"version":3,"file":"SignInUseCase.d.ts","sourceRoot":"","sources":["../../../src/core/usecases/SignInUseCase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMrE,qBAAa,aAAa;IAStB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAdpB,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAGhC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,kBAAkB,EAClC,UAAU,EAAE,gBAAgB;IAQtC,OAAO,KAAK,aAAa,GAExB;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAmBpB,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAiH3D;;;;OAIG;YACW,qBAAqB;IAkDnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,WAAW;IAInB;;;;;;;;OAQG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsElD;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,OAAO,CAAC,aAAa;YAUP,gBAAgB;IAuD9B;;;;;;;;OAQG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmErF;;;OAGG;YACW,kBAAkB;YAwBlB,UAAU;CA2DzB"}
1
+ {"version":3,"file":"SignInUseCase.d.ts","sourceRoot":"","sources":["../../../src/core/usecases/SignInUseCase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACtG,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,KAAK,EACV,iBAAiB,EAIlB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMrE,qBAAa,aAAa;IAStB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAdpB,OAAO,CAAC,eAAe,CAA4C;IACnE,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAGhC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,kBAAkB,EAClC,UAAU,EAAE,gBAAgB;IAQtC,OAAO,KAAK,aAAa,GAExB;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAmBpB,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IAqC3D;;;;;;;;OAQG;IACG,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKvE;;;OAGG;YACW,oBAAoB;IAwFlC;;;;OAIG;YACW,qBAAqB;IAkDnC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,WAAW;IAInB;;;;;;;;OAQG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsElD;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAAqB;IAE9C,OAAO,CAAC,aAAa;YAUP,gBAAgB;IAuD9B;;;;;;;;OAQG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAmErF;;;OAGG;YACW,kBAAkB;YAwBlB,UAAU;CA2DzB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * OAuth Deeplink Parser
3
+ *
4
+ * RN 앱이 OAuth deeplink(`crossx://oauth-callback?status=success&data=...`)를
5
+ * 수신한 뒤 SDK에 전달하기 전에 data 파라미터를 파싱하는 유틸리티.
6
+ *
7
+ * 인코딩 구조: Base64( encodeURIComponent( JSON ) )
8
+ *
9
+ * @example
10
+ * // RN에서 deeplink 수신 → 파서 사용 → SDK 호출
11
+ * const parsed = parseOAuthDeeplink(deeplinkUrl);
12
+ * if (parsed.status === 'success') {
13
+ * await sdk.signInWithOAuthToken(parsed.firebaseToken);
14
+ * }
15
+ */
16
+ export interface OAuthDeeplinkResult {
17
+ /** 최상위 상태 ('success' | 'error') */
18
+ status: string;
19
+ /** CSRF 방어용 state */
20
+ state: string;
21
+ /** 로그인에 사용할 Firebase JWT (= data.accessToken) */
22
+ firebaseToken: string;
23
+ /** OAuth 프로바이더 ('google' | 'apple') */
24
+ provider: string;
25
+ /** 사용자 이메일 */
26
+ email?: string;
27
+ /** OAuth 프로바이더 subject (Google UID 등) */
28
+ providerSub?: string;
29
+ /** 토큰 유형 ('Bearer') */
30
+ tokenType?: string;
31
+ /** 토큰 만료 시간(초) */
32
+ expiresIn?: string;
33
+ /** 전체 디코딩된 data 객체 (추가 필드 접근용) */
34
+ raw: DeeplinkPayload;
35
+ }
36
+ export interface DeeplinkPayload {
37
+ status: string;
38
+ state: string;
39
+ data: DeeplinkOAuthData;
40
+ }
41
+ export interface DeeplinkOAuthData {
42
+ provider: string;
43
+ accessToken: string;
44
+ idToken?: string;
45
+ /** Apple 로그인 시 발급되는 authorization code */
46
+ code?: string;
47
+ tokenType?: string;
48
+ sub?: string;
49
+ email?: string;
50
+ expiresIn?: string;
51
+ scope?: string;
52
+ state?: string;
53
+ [key: string]: unknown;
54
+ }
55
+ /**
56
+ * OAuth deeplink URL 또는 data 파라미터 값을 파싱합니다.
57
+ *
58
+ * @param input 전체 deeplink URL (`crossx://oauth-callback?...`) 또는 `data` 쿼리 파라미터 값
59
+ * @returns 파싱된 인증 정보
60
+ * @throws 디코딩/파싱 실패 시 Error
61
+ */
62
+ export declare function parseOAuthDeeplink(input: string): OAuthDeeplinkResult;
63
+ //# sourceMappingURL=parseOAuthDeeplink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseOAuthDeeplink.d.ts","sourceRoot":"","sources":["../../../src/core/utils/parseOAuthDeeplink.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,GAAG,EAAE,eAAe,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,CAoBrE"}