@nexus-cross/crossx-sdk-core 1.0.9 → 1.1.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/dist/__tests__/mocks/MockWalletProviderPort.d.ts +15 -0
- package/dist/__tests__/mocks/MockWalletProviderPort.d.ts.map +1 -1
- package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts +37 -2
- package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts.map +1 -1
- package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts +56 -3
- package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts.map +1 -1
- package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts +56 -5
- package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts.map +1 -1
- package/dist/adapters/wallet/types.d.ts +73 -8
- package/dist/adapters/wallet/types.d.ts.map +1 -1
- package/dist/core/i18n/messages.en.d.ts.map +1 -1
- package/dist/core/i18n/messages.ko.d.ts.map +1 -1
- package/dist/core/i18n/types.d.ts +26 -0
- package/dist/core/i18n/types.d.ts.map +1 -1
- package/dist/core/ports/ConfirmationPort.d.ts +48 -2
- package/dist/core/ports/ConfirmationPort.d.ts.map +1 -1
- package/dist/core/ports/WalletProviderPort.d.ts +46 -5
- package/dist/core/ports/WalletProviderPort.d.ts.map +1 -1
- package/dist/core/services/PasswordMemoryStore.d.ts +43 -0
- package/dist/core/services/PasswordMemoryStore.d.ts.map +1 -0
- package/dist/core/types/errors.d.ts +30 -0
- package/dist/core/types/errors.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +12 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/usecases/SignInUseCase.d.ts.map +1 -1
- package/dist/crossx.global +694 -107
- package/dist/index.cjs +694 -107
- package/dist/index.js +3128 -1758
- package/dist/sdk/CROSSxSDK.d.ts +94 -3
- package/dist/sdk/CROSSxSDK.d.ts.map +1 -1
- package/dist/sdk/factory.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { AddressInfo, EvmTransactionRequest } from '../types/chain';
|
|
2
2
|
import { PrepareAction, PrepareContext, PrepareResult } from '../types/prepare';
|
|
3
3
|
|
|
4
|
+
/** GET /mnemonic/check 응답 */
|
|
5
|
+
export type WalletCheckResult = 'exists' | 'migration_required' | 'not_found';
|
|
4
6
|
export interface WalletProviderPort {
|
|
7
|
+
/**
|
|
8
|
+
* 지갑 존재 여부 확인 (비밀번호 불필요 — JWT 인증만)
|
|
9
|
+
* exists: 지갑 존재
|
|
10
|
+
* migration_required: CROSSx 레거시 백업 존재 (마이그레이션 필요)
|
|
11
|
+
* not_found: 지갑 없음, 백업도 없음 (신규 생성 필요)
|
|
12
|
+
*/
|
|
13
|
+
checkWallet?(): Promise<WalletCheckResult>;
|
|
5
14
|
/**
|
|
6
15
|
* 지갑 생성 또는 로드
|
|
7
16
|
*/
|
|
@@ -49,10 +58,6 @@ export interface WalletProviderPort {
|
|
|
49
58
|
sendTransaction?(userId: string, chainId: string, tx: EvmTransactionRequest, uuid?: string): Promise<{
|
|
50
59
|
txHash: string;
|
|
51
60
|
}>;
|
|
52
|
-
/**
|
|
53
|
-
* Share-C로 지갑 복구 (선택적)
|
|
54
|
-
*/
|
|
55
|
-
recoverWallet?(userId: string, shareC: string): Promise<WalletData>;
|
|
56
61
|
/**
|
|
57
62
|
* CROSSx 지갑 → Embedded Wallet 마이그레이션
|
|
58
63
|
* 클라우드 백업에서 복구하여 새 Embedded Wallet로 전환
|
|
@@ -61,6 +66,43 @@ export interface WalletProviderPort {
|
|
|
61
66
|
* @param sub 사용자 식별자 (OAuth sub)
|
|
62
67
|
*/
|
|
63
68
|
migrateWallet?(pin: string, sub: string): Promise<WalletData>;
|
|
69
|
+
/**
|
|
70
|
+
* 비밀번호 검증 — POST /mnemonic/verify-password
|
|
71
|
+
* Share-A를 KMS로 복호화해 비밀번호 유효성을 확인합니다 (캐시 없이 항상 Signer 호출).
|
|
72
|
+
* 세션 복원(refresh) 후 비밀번호를 캐시하기 전 검증에 사용합니다.
|
|
73
|
+
*
|
|
74
|
+
* @returns 비밀번호가 올바르면 true, 아니면 false
|
|
75
|
+
*/
|
|
76
|
+
verifyPassword?(password: string): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Share-C 발급 — POST /mnemonic/share-c
|
|
79
|
+
* 니모닉을 재분할하여 새로운 Share-C를 반환합니다. 기존 Share-C는 무효화됩니다.
|
|
80
|
+
*
|
|
81
|
+
* @returns 새로운 Share-C 문자열
|
|
82
|
+
*/
|
|
83
|
+
getShareC?(): Promise<string>;
|
|
84
|
+
/**
|
|
85
|
+
* 레거시 CROSSx 백업 PIN 검증 — POST /mnemonic/verify-pin
|
|
86
|
+
* 마이그레이션 전 PIN 유효성과 잠금 상태를 확인합니다.
|
|
87
|
+
*
|
|
88
|
+
* @param pin 4자리 PIN
|
|
89
|
+
* @param sub 사용자 OAuth sub
|
|
90
|
+
*
|
|
91
|
+
* 응답 케이스:
|
|
92
|
+
* - PIN 맞음 (200): `{ valid: true }`
|
|
93
|
+
* - PIN 틀림 (200): `{ valid: false, pinStatus: { maxAttempts, remainingAttempts } }`
|
|
94
|
+
* - PIN → 잠금 (200): `{ valid: false, pinStatus: { lockExpiresAt, maxAttempts, remainingAttempts } }`
|
|
95
|
+
* - 이미 잠금 (-10027): CROSSxError(MIGRATION_PIN_LOCKED) throw — details에 { permanent, lockExpiresAt, ... }
|
|
96
|
+
*/
|
|
97
|
+
verifyPin?(pin: string, sub: string): Promise<{
|
|
98
|
+
valid: boolean;
|
|
99
|
+
pinStatus?: {
|
|
100
|
+
maxAttempts: number;
|
|
101
|
+
remainingAttempts: number;
|
|
102
|
+
lockExpiresAt?: number;
|
|
103
|
+
permanent?: boolean;
|
|
104
|
+
};
|
|
105
|
+
}>;
|
|
64
106
|
}
|
|
65
107
|
/**
|
|
66
108
|
* 지갑 데이터
|
|
@@ -70,7 +112,6 @@ export interface WalletData {
|
|
|
70
112
|
address: string;
|
|
71
113
|
derivationPath: string;
|
|
72
114
|
createdAt: number;
|
|
73
|
-
newShareC?: string;
|
|
74
115
|
}
|
|
75
116
|
/**
|
|
76
117
|
* 서명 응답
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletProviderPort.d.ts","sourceRoot":"","sources":["../../../src/core/ports/WalletProviderPort.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAErF,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAEjF;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEhE;;;;OAIG;IACH,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAEjF;;;;OAIG;IACH,WAAW,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;OAIG;IACH,aAAa,CAAC,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,EAClB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;OAIG;IACH,eAAe,CACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,qBAAqB,EACzB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzB;;;;OAIG;IACH,eAAe,CAAC,CACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,qBAAqB,EACzB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE/B
|
|
1
|
+
{"version":3,"file":"WalletProviderPort.d.ts","sourceRoot":"","sources":["../../../src/core/ports/WalletProviderPort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PasswordMemoryStore
|
|
3
|
+
* 서명/전송용 비밀번호를 메모리에 보관합니다.
|
|
4
|
+
* 페이지 새로고침 시 자동으로 초기화됩니다.
|
|
5
|
+
*
|
|
6
|
+
* ## 보안 설계
|
|
7
|
+
* 비밀번호를 평문 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 PasswordMemoryStore {
|
|
22
|
+
/** XOR 암호화된 비밀번호 바이트 (ciphertext) */
|
|
23
|
+
private encryptedBytes;
|
|
24
|
+
/** 비밀번호와 같은 길이의 랜덤 XOR 키 */
|
|
25
|
+
private xorKey;
|
|
26
|
+
/**
|
|
27
|
+
* 비밀번호를 메모리에 암호화하여 저장합니다.
|
|
28
|
+
* 이전 값이 있으면 먼저 안전하게 소거합니다.
|
|
29
|
+
*/
|
|
30
|
+
set(password: string): void;
|
|
31
|
+
/**
|
|
32
|
+
* 저장된 비밀번호를 복호화하여 반환합니다. 없으면 null.
|
|
33
|
+
* 복호화에 사용된 중간 배열은 반환 전에 소거됩니다.
|
|
34
|
+
*/
|
|
35
|
+
get(): string | null;
|
|
36
|
+
/**
|
|
37
|
+
* 저장된 비밀번호와 키를 안전하게 소거합니다.
|
|
38
|
+
*/
|
|
39
|
+
clear(): void;
|
|
40
|
+
/** 비밀번호가 저장되어 있는지 여부를 반환합니다. */
|
|
41
|
+
has(): boolean;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=PasswordMemoryStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasswordMemoryStore.d.ts","sourceRoot":"","sources":["../../../src/core/services/PasswordMemoryStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,mBAAmB;IAC9B,qCAAqC;IACrC,OAAO,CAAC,cAAc,CAA2B;IACjD,4BAA4B;IAC5B,OAAO,CAAC,MAAM,CAA2B;IAEzC;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAmB3B;;;OAGG;IACH,GAAG,IAAI,MAAM,GAAG,IAAI;IAgBpB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,gCAAgC;IAChC,GAAG,IAAI,OAAO;CAGf"}
|
|
@@ -7,6 +7,7 @@ export declare enum ErrorCode {
|
|
|
7
7
|
AUTH_TOKEN_INVALID = "AUTH_TOKEN_INVALID",
|
|
8
8
|
AUTH_TOKEN_EXPIRED = "AUTH_TOKEN_EXPIRED",
|
|
9
9
|
AUTH_NOT_AUTHENTICATED = "AUTH_NOT_AUTHENTICATED",
|
|
10
|
+
ALREADY_AUTHENTICATED = "ALREADY_AUTHENTICATED",
|
|
10
11
|
WALLET_NOT_FOUND = "WALLET_NOT_FOUND",
|
|
11
12
|
WALLET_CREATION_FAILED = "WALLET_CREATION_FAILED",
|
|
12
13
|
SIGN_FAILED = "SIGN_FAILED",
|
|
@@ -28,6 +29,7 @@ export declare enum ErrorCode {
|
|
|
28
29
|
PREPARE_MISMATCH = "PREPARE_MISMATCH",
|
|
29
30
|
MIGRATION_FAILED = "MIGRATION_FAILED",
|
|
30
31
|
MIGRATION_BACKUP_EXISTS = "MIGRATION_BACKUP_EXISTS",
|
|
32
|
+
MIGRATION_PIN_LOCKED = "MIGRATION_PIN_LOCKED",// -10027: PIN 잠금 상태
|
|
31
33
|
GATEWAY_INTERNAL_ERROR = "GATEWAY_INTERNAL_ERROR",// -10006: 내부 통신 실패, 재시도 권장
|
|
32
34
|
GATEWAY_LOCK_CONFLICT = "GATEWAY_LOCK_CONFLICT",// -10008: 락 충돌(동시 요청), 재시도 권장
|
|
33
35
|
PROJECT_ID_MISSING = "PROJECT_ID_MISSING",// -10023: X-Project-Id 헤더 누락
|
|
@@ -41,9 +43,37 @@ export declare enum ErrorCode {
|
|
|
41
43
|
GAS_ESTIMATION_FAILED = "GAS_ESTIMATION_FAILED",
|
|
42
44
|
/** EIP-712 domain.chainId와 path chainId 불일치 (-10026) */
|
|
43
45
|
TYPED_DATA_CHAIN_ID_MISMATCH = "TYPED_DATA_CHAIN_ID_MISMATCH",
|
|
46
|
+
/** 비밀번호가 설정되지 않음 — 최초 지갑 생성 시 비밀번호 설정 필요 */
|
|
47
|
+
PASSWORD_NOT_SET = "PASSWORD_NOT_SET",
|
|
48
|
+
/** 비밀번호가 틀림 (Gateway -10028: Invalid password) */
|
|
49
|
+
PASSWORD_WRONG = "PASSWORD_WRONG",
|
|
50
|
+
/** 비밀번호 복잡도 미달 (Gateway -10029: Password does not meet complexity requirements) */
|
|
51
|
+
PASSWORD_COMPLEXITY = "PASSWORD_COMPLEXITY",
|
|
52
|
+
/** 사용자가 비밀번호 입력을 취소함 */
|
|
53
|
+
PASSWORD_CANCELLED = "PASSWORD_CANCELLED",
|
|
44
54
|
INVALID_CONFIG = "INVALID_CONFIG",
|
|
45
55
|
UNKNOWN_ERROR = "UNKNOWN_ERROR"
|
|
46
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* -10027 에러 응답의 data 필드 구조.
|
|
59
|
+
*
|
|
60
|
+
* 임시 잠금: { permanent: false, lockExpiresAt: <Unix 초>, maxAttempts, remainingAttempts: 0 }
|
|
61
|
+
* 영구 잠금: { permanent: true, lockExpiresAt: 0, maxAttempts: 0, remainingAttempts: 0 }
|
|
62
|
+
*/
|
|
63
|
+
export interface MigrationLockDetails {
|
|
64
|
+
/** true이면 영구 잠금 (lockExpiresAt은 0, 횟수 제한 없음) */
|
|
65
|
+
permanent: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* 잠금 해제 시각 (Unix timestamp, 초 단위).
|
|
68
|
+
* 영구 잠금이면 0. 임시 잠금이면 > 0.
|
|
69
|
+
* 남은 시간(ms) = lockExpiresAt * 1000 - Date.now()
|
|
70
|
+
*/
|
|
71
|
+
lockExpiresAt: number;
|
|
72
|
+
/** 잠금 해제까지 남은 시도 횟수. 잠금 중이면 0 */
|
|
73
|
+
remainingAttempts: number;
|
|
74
|
+
/** 이 사이클의 최대 시도 허용 횟수. 영구 잠금이면 0 */
|
|
75
|
+
maxAttempts: number;
|
|
76
|
+
}
|
|
47
77
|
/**
|
|
48
78
|
* Domain Error
|
|
49
79
|
*/
|
|
@@ -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;
|
|
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,CAAI,2BAA2B;IAChF,qBAAqB,0BAA0B,CAAM,8BAA8B;IAGnF,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,GAAG;gBAFb,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,GAAG,YAAA;IAOtB,MAAM;;;;;;CAQP"}
|
|
@@ -199,15 +199,26 @@ export interface SDKColorOverrides {
|
|
|
199
199
|
*/
|
|
200
200
|
textIconTertiary?: string;
|
|
201
201
|
/**
|
|
202
|
-
* Semantic: Surface/default — pill·hover 등 인라인 강조 배경
|
|
202
|
+
* Semantic: Surface/default — pill·hover·입력 필드 배경 등 인라인 강조 배경
|
|
203
203
|
* @default light: 'rgba(18,18,18,0.05)' / dark: 'rgba(255,255,255,0.05)'
|
|
204
204
|
*/
|
|
205
205
|
surfaceDefault?: string;
|
|
206
|
+
/**
|
|
207
|
+
* Semantic: Surface/Subtle — 구분선·보조 배경 (Gray/10)
|
|
208
|
+
* @default light: 'rgba(18,18,18,0.1)' / dark: 'rgba(255,255,255,0.1)'
|
|
209
|
+
*/
|
|
210
|
+
surfaceSubtle?: string;
|
|
206
211
|
/**
|
|
207
212
|
* Semantic: Surface/BG — 모달 카드 배경
|
|
208
213
|
* @default light: '#FFFFFF' / dark: '#121212'
|
|
209
214
|
*/
|
|
210
215
|
bg?: string;
|
|
216
|
+
/**
|
|
217
|
+
* Semantic: Error — 에러 상태 전용 색상 (입력 오류, 경고 텍스트 등)
|
|
218
|
+
* `secondary`와 독립적으로 오버라이드할 수 있습니다.
|
|
219
|
+
* @default '#E70077'
|
|
220
|
+
*/
|
|
221
|
+
error?: string;
|
|
211
222
|
}
|
|
212
223
|
/**
|
|
213
224
|
* 컨펌 모달 색상 토큰 오버라이드
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAuB,SAAQ,UAAU;IACxD,2CAA2C;IAC3C,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;OAGG;IACH,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;;;;;;;;;GAaG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAEhC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IAGZ;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,SAAS,EAAE,SAAS,CAAC;IAErC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,OAAO,qBAAqB,EAAE,UAAU,CAAC;IAElD;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC;IAE7B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,cAAc,CAAC,EAAE;QACf,6BAA6B;QAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iCAAiC;QACjC,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CAEH;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,SAAS,EAAE,kBAAkB,CAAC;CAC/C"}
|
|
@@ -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;
|
|
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"}
|