@nexus-cross/crossx-sdk-core 1.1.1 → 1.2.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.
Files changed (32) hide show
  1. package/dist/__tests__/adapters/BrowserOAuthAdapter.test.d.ts +2 -0
  2. package/dist/__tests__/adapters/BrowserOAuthAdapter.test.d.ts.map +1 -0
  3. package/dist/__tests__/mocks/MockWalletProviderPort.d.ts +4 -3
  4. package/dist/__tests__/mocks/MockWalletProviderPort.d.ts.map +1 -1
  5. package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts +18 -15
  6. package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts.map +1 -1
  7. package/dist/adapters/oauth/BrowserOAuthAdapter.d.ts +9 -1
  8. package/dist/adapters/oauth/BrowserOAuthAdapter.d.ts.map +1 -1
  9. package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts +15 -15
  10. package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts.map +1 -1
  11. package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts +23 -14
  12. package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts.map +1 -1
  13. package/dist/core/i18n/messages.en.d.ts.map +1 -1
  14. package/dist/core/i18n/messages.ko.d.ts.map +1 -1
  15. package/dist/core/i18n/types.d.ts +28 -29
  16. package/dist/core/i18n/types.d.ts.map +1 -1
  17. package/dist/core/ports/ConfirmationPort.d.ts +19 -18
  18. package/dist/core/ports/ConfirmationPort.d.ts.map +1 -1
  19. package/dist/core/ports/WalletProviderPort.d.ts +13 -7
  20. package/dist/core/ports/WalletProviderPort.d.ts.map +1 -1
  21. package/dist/core/services/PinMemoryStore.d.ts +43 -0
  22. package/dist/core/services/PinMemoryStore.d.ts.map +1 -0
  23. package/dist/core/types/errors.d.ts +10 -8
  24. package/dist/core/types/errors.d.ts.map +1 -1
  25. package/dist/core/usecases/SignInUseCase.d.ts +10 -0
  26. package/dist/core/usecases/SignInUseCase.d.ts.map +1 -1
  27. package/dist/crossx.global +353 -196
  28. package/dist/index.cjs +353 -196
  29. package/dist/index.js +2638 -2174
  30. package/dist/sdk/CROSSxSDK.d.ts +72 -40
  31. package/dist/sdk/CROSSxSDK.d.ts.map +1 -1
  32. package/package.json +2 -1
@@ -0,0 +1,43 @@
1
+ /**
2
+ * PinMemoryStore
3
+ * 서명/전송용 6자리 PIN을 메모리에 보관합니다.
4
+ * 페이지 새로고침 시 자동으로 초기화됩니다.
5
+ *
6
+ * ## 보안 설계
7
+ * PIN을 평문 string으로 보관하는 대신, 저장 시마다 새로운
8
+ * 랜덤 키를 생성하여 XOR(OTP) 방식으로 암호화합니다.
9
+ *
10
+ * - 키: `crypto.getRandomValues`로 생성한 암호학적 안전 난수
11
+ * - 암호화: XOR(One-Time Pad) — 키가 평문 길이와 동일하고 1회만 사용되므로
12
+ * 정보 이론적 완전 비밀(information-theoretic perfect secrecy)을 보장합니다.
13
+ * - get() 반환 직전: 복호화에 사용한 중간 바이트 배열을 즉시 0으로 소거합니다.
14
+ * - clear() 시: 암호문·키 배열을 모두 0으로 소거한 뒤 참조를 제거합니다.
15
+ *
16
+ * ### 한계
17
+ * 키와 암호문이 같은 메모리 공간에 존재하므로 공격자가 전체 힙 덤프를 획득하면
18
+ * 복원이 가능합니다. 그러나 평문 string을 그대로 보관할 때 발생하는
19
+ * 우발적 로깅·직렬화·패턴 매칭 위협은 차단합니다.
20
+ */
21
+ export declare class PinMemoryStore {
22
+ /** XOR 암호화된 PIN 바이트 (ciphertext) */
23
+ private encryptedBytes;
24
+ /** PIN과 같은 길이의 랜덤 XOR 키 */
25
+ private xorKey;
26
+ /**
27
+ * PIN을 메모리에 암호화하여 저장합니다.
28
+ * 이전 값이 있으면 먼저 안전하게 소거합니다.
29
+ */
30
+ set(pin: string): void;
31
+ /**
32
+ * 저장된 PIN을 복호화하여 반환합니다. 없으면 null.
33
+ * 복호화에 사용된 중간 배열은 반환 전에 소거됩니다.
34
+ */
35
+ get(): string | null;
36
+ /**
37
+ * 저장된 PIN과 키를 안전하게 소거합니다.
38
+ */
39
+ clear(): void;
40
+ /** PIN이 저장되어 있는지 여부를 반환합니다. */
41
+ has(): boolean;
42
+ }
43
+ //# sourceMappingURL=PinMemoryStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PinMemoryStore.d.ts","sourceRoot":"","sources":["../../../src/core/services/PinMemoryStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAc;IACzB,oCAAoC;IACpC,OAAO,CAAC,cAAc,CAA2B;IACjD,2BAA2B;IAC3B,OAAO,CAAC,MAAM,CAA2B;IAEzC;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAkBtB;;;OAGG;IACH,GAAG,IAAI,MAAM,GAAG,IAAI;IAepB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,+BAA+B;IAC/B,GAAG,IAAI,OAAO;CAGf"}
@@ -45,14 +45,16 @@ export declare enum ErrorCode {
45
45
  GAS_ESTIMATION_FAILED = "GAS_ESTIMATION_FAILED",
46
46
  /** EIP-712 domain.chainId와 path chainId 불일치 (-10026) */
47
47
  TYPED_DATA_CHAIN_ID_MISMATCH = "TYPED_DATA_CHAIN_ID_MISMATCH",
48
- /** 비밀번호가 설정되지 않음 — 최초 지갑 생성 시 비밀번호 설정 필요 */
49
- PASSWORD_NOT_SET = "PASSWORD_NOT_SET",
50
- /** 비밀번호가 틀림 (Gateway -10028: Invalid password) */
51
- PASSWORD_WRONG = "PASSWORD_WRONG",
52
- /** 비밀번호 복잡도 미달 (Gateway -10029: Password does not meet complexity requirements) */
53
- PASSWORD_COMPLEXITY = "PASSWORD_COMPLEXITY",
54
- /** 사용자가 비밀번호 입력을 취소함 */
55
- PASSWORD_CANCELLED = "PASSWORD_CANCELLED",
48
+ /** PIN이 설정되지 않음 — 최초 지갑 생성 시 PIN 설정 필요 */
49
+ PIN_NOT_SET = "PIN_NOT_SET",
50
+ /** PIN이 틀림 (Gateway -10028: Invalid password) */
51
+ PIN_WRONG = "PIN_WRONG",
52
+ /** PIN 형식 오류 (Gateway -10029: Password must be a 6-digit PIN) */
53
+ PIN_INVALID = "PIN_INVALID",
54
+ /** 사용자가 PIN 입력을 취소함 */
55
+ PIN_CANCELLED = "PIN_CANCELLED",
56
+ /** 너무 많은 PIN 시도 실패 — 잠금 상태 (Gateway -10031) */
57
+ PIN_LOCKED = "PIN_LOCKED",
56
58
  INVALID_CONFIG = "INVALID_CONFIG",
57
59
  UNKNOWN_ERROR = "UNKNOWN_ERROR"
58
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/types/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,SAAS;IAEnB,oBAAoB,yBAAyB;IAC7C,WAAW,gBAAgB;IAC3B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;IAG/C,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IAGjD,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAG/B,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAG3B,aAAa,kBAAkB;IAC/B,iBAAiB,sBAAsB;IAGvC,aAAa,kBAAkB;IAC/B,sBAAsB,2BAA2B;IAGjD,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,uBAAuB,4BAA4B;IAGnD,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;IAGzC,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IAGrC,gBAAgB,qBAAqB;IACrC,uBAAuB,4BAA4B;IACnD,oBAAoB,yBAAyB,CAAI,oBAAoB;IAGrE,sBAAsB,2BAA2B,CAAQ,2BAA2B;IACpF,qBAAqB,0BAA0B,CAAU,8BAA8B;IACvF,yEAAyE;IACzE,yBAAyB,8BAA8B,CAAE,uCAAuC;IAGhG,kBAAkB,uBAAuB,CAAY,6BAA6B;IAClF,kBAAkB,uBAAuB,CAAY,4BAA4B;IACjF,sBAAsB,2BAA2B,CAAI,oCAAoC;IACzF,gBAAgB,qBAAqB,CAAgB,2BAA2B;IAChF,sBAAsB,2BAA2B,CAAI,6BAA6B;IAElF,mDAAmD;IACnD,yBAAyB,8BAA8B;IAEvD,oDAAoD;IACpD,qBAAqB,0BAA0B;IAE/C,wDAAwD;IACxD,4BAA4B,iCAAiC;IAG7D,4CAA4C;IAC5C,gBAAgB,qBAAqB;IACrC,kDAAkD;IAClD,cAAc,mBAAmB;IACjC,mFAAmF;IACnF,mBAAmB,wBAAwB;IAC3C,wBAAwB;IACxB,kBAAkB,uBAAuB;IAGzC,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IAE3B,IAAI,EAAE,SAAS;IAEf,OAAO,CAAC,EAAE,OAAO;gBAFjB,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,YAAA;IAO1B,MAAM;;;;;;CAQP"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/types/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,SAAS;IAEnB,oBAAoB,yBAAyB;IAC7C,WAAW,gBAAgB;IAC3B,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;IAG/C,gBAAgB,qBAAqB;IACrC,sBAAsB,2BAA2B;IAGjD,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAG/B,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAG3B,aAAa,kBAAkB;IAC/B,iBAAiB,sBAAsB;IAGvC,aAAa,kBAAkB;IAC/B,sBAAsB,2BAA2B;IAGjD,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,uBAAuB,4BAA4B;IAGnD,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;IAGzC,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IAGrC,gBAAgB,qBAAqB;IACrC,uBAAuB,4BAA4B;IACnD,oBAAoB,yBAAyB,CAAI,oBAAoB;IAGrE,sBAAsB,2BAA2B,CAAQ,2BAA2B;IACpF,qBAAqB,0BAA0B,CAAU,8BAA8B;IACvF,yEAAyE;IACzE,yBAAyB,8BAA8B,CAAE,uCAAuC;IAGhG,kBAAkB,uBAAuB,CAAY,6BAA6B;IAClF,kBAAkB,uBAAuB,CAAY,4BAA4B;IACjF,sBAAsB,2BAA2B,CAAI,oCAAoC;IACzF,gBAAgB,qBAAqB,CAAgB,2BAA2B;IAChF,sBAAsB,2BAA2B,CAAI,6BAA6B;IAElF,mDAAmD;IACnD,yBAAyB,8BAA8B;IAEvD,oDAAoD;IACpD,qBAAqB,0BAA0B;IAE/C,wDAAwD;IACxD,4BAA4B,iCAAiC;IAG7D,0CAA0C;IAC1C,WAAW,gBAAgB;IAC3B,iDAAiD;IACjD,SAAS,cAAc;IACvB,iEAAiE;IACjE,WAAW,gBAAgB;IAC3B,uBAAuB;IACvB,aAAa,kBAAkB;IAC/B,+CAA+C;IAC/C,UAAU,eAAe;IAGzB,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IAE3B,IAAI,EAAE,SAAS;IAEf,OAAO,CAAC,EAAE,OAAO;gBAFjB,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,YAAA;IAO1B,MAAM;;;;;;CAQP"}
@@ -58,6 +58,16 @@ export declare class SignInUseCase {
58
58
  */
59
59
  private silentRefresh;
60
60
  private _doSilentRefresh;
61
+ /**
62
+ * 외부에서 발급된 CROSSx JWT를 직접 주입하여 로그인합니다.
63
+ *
64
+ * OAuth 팝업 없이 이미 보유한 access_token으로 인증합니다.
65
+ * iOS SDK의 signInWithJWT(accessToken:refreshToken:)에 대응합니다.
66
+ *
67
+ * @param accessToken CROSSx 서버 발급 JWT access token
68
+ * @param refreshToken 선택적 refresh token
69
+ */
70
+ executeWithJWT(accessToken: string, refreshToken?: string): Promise<AuthResult>;
61
71
  private loadWallet;
62
72
  }
63
73
  //# sourceMappingURL=SignInUseCase.d.ts.map
@@ -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;IAItB,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;IATpB,OAAO,CAAC,eAAe,CAA4C;gBAGzD,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;IAGtC,OAAO,KAAK,aAAa,GAExB;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAmBpB,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IA+G3D;;;;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;IAmElD;;;;OAIG;IACH,OAAO,CAAC,aAAa;YAOP,gBAAgB;YAuDhB,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;IAItB,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;IATpB,OAAO,CAAC,eAAe,CAA4C;gBAGzD,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;IAGtC,OAAO,KAAK,aAAa,GAExB;IAED;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAmBpB,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IA+G3D;;;;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;IAmElD;;;;OAIG;IACH,OAAO,CAAC,aAAa;YAOP,gBAAgB;IAuD9B;;;;;;;;OAQG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAmEvE,UAAU;CA2DzB"}