@nexus-cross/crossx-sdk-core 0.0.0-beta.2
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/README.md +302 -0
- package/dist/__tests__/mocks/MockCryptoPort.d.ts +15 -0
- package/dist/__tests__/mocks/MockCryptoPort.d.ts.map +1 -0
- package/dist/__tests__/mocks/MockOAuthPort.d.ts +11 -0
- package/dist/__tests__/mocks/MockOAuthPort.d.ts.map +1 -0
- package/dist/__tests__/mocks/MockStoragePort.d.ts +18 -0
- package/dist/__tests__/mocks/MockStoragePort.d.ts.map +1 -0
- package/dist/__tests__/mocks/MockTransportPort.d.ts +14 -0
- package/dist/__tests__/mocks/MockTransportPort.d.ts.map +1 -0
- package/dist/__tests__/mocks/MockWalletProviderPort.d.ts +28 -0
- package/dist/__tests__/mocks/MockWalletProviderPort.d.ts.map +1 -0
- package/dist/__tests__/sdk/CROSSxSDK.test.d.ts +2 -0
- package/dist/__tests__/sdk/CROSSxSDK.test.d.ts.map +1 -0
- package/dist/__tests__/sdk/EthereumProvider.test.d.ts +2 -0
- package/dist/__tests__/sdk/EthereumProvider.test.d.ts.map +1 -0
- package/dist/__tests__/usecases/SignInUseCase.test.d.ts +2 -0
- package/dist/__tests__/usecases/SignInUseCase.test.d.ts.map +1 -0
- package/dist/__tests__/usecases/SignOutUseCase.test.d.ts +2 -0
- package/dist/__tests__/usecases/SignOutUseCase.test.d.ts.map +1 -0
- package/dist/__tests__/usecases/WithdrawUseCase.test.d.ts +2 -0
- package/dist/__tests__/usecases/WithdrawUseCase.test.d.ts.map +1 -0
- package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts +36 -0
- package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts.map +1 -0
- package/dist/adapters/crypto/JoseCryptoAdapter.d.ts +16 -0
- package/dist/adapters/crypto/JoseCryptoAdapter.d.ts.map +1 -0
- package/dist/adapters/index.d.ts +10 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/oauth/BrowserOAuthAdapter.d.ts +7 -0
- package/dist/adapters/oauth/BrowserOAuthAdapter.d.ts.map +1 -0
- package/dist/adapters/storage/LocalStorageAdapter.d.ts +10 -0
- package/dist/adapters/storage/LocalStorageAdapter.d.ts.map +1 -0
- package/dist/adapters/transport/FetchTransportAdapter.d.ts +6 -0
- package/dist/adapters/transport/FetchTransportAdapter.d.ts.map +1 -0
- package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts +28 -0
- package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts.map +1 -0
- package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts +47 -0
- package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts.map +1 -0
- package/dist/adapters/wallet/types.d.ts +112 -0
- package/dist/adapters/wallet/types.d.ts.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/ports/ConfirmationPort.d.ts +74 -0
- package/dist/core/ports/ConfirmationPort.d.ts.map +1 -0
- package/dist/core/ports/CryptoPort.d.ts +43 -0
- package/dist/core/ports/CryptoPort.d.ts.map +1 -0
- package/dist/core/ports/LoggerPort.d.ts +23 -0
- package/dist/core/ports/LoggerPort.d.ts.map +1 -0
- package/dist/core/ports/OAuthPort.d.ts +18 -0
- package/dist/core/ports/OAuthPort.d.ts.map +1 -0
- package/dist/core/ports/StoragePort.d.ts +25 -0
- package/dist/core/ports/StoragePort.d.ts.map +1 -0
- package/dist/core/ports/TransportPort.d.ts +24 -0
- package/dist/core/ports/TransportPort.d.ts.map +1 -0
- package/dist/core/ports/WalletProviderPort.d.ts +106 -0
- package/dist/core/ports/WalletProviderPort.d.ts.map +1 -0
- package/dist/core/ports/index.d.ts +12 -0
- package/dist/core/ports/index.d.ts.map +1 -0
- package/dist/core/services/TokenMemoryStore.d.ts +17 -0
- package/dist/core/services/TokenMemoryStore.d.ts.map +1 -0
- package/dist/core/types/caip.d.ts +119 -0
- package/dist/core/types/caip.d.ts.map +1 -0
- package/dist/core/types/chain.d.ts +90 -0
- package/dist/core/types/chain.d.ts.map +1 -0
- package/dist/core/types/errors.d.ts +56 -0
- package/dist/core/types/errors.d.ts.map +1 -0
- package/dist/core/types/index.d.ts +309 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/prepare.d.ts +21 -0
- package/dist/core/types/prepare.d.ts.map +1 -0
- package/dist/core/usecases/MigrateWalletUseCase.d.ts +10 -0
- package/dist/core/usecases/MigrateWalletUseCase.d.ts.map +1 -0
- package/dist/core/usecases/SignInUseCase.d.ts +38 -0
- package/dist/core/usecases/SignInUseCase.d.ts.map +1 -0
- package/dist/core/usecases/SignOutUseCase.d.ts +10 -0
- package/dist/core/usecases/SignOutUseCase.d.ts.map +1 -0
- package/dist/core/usecases/WithdrawUseCase.d.ts +11 -0
- package/dist/core/usecases/WithdrawUseCase.d.ts.map +1 -0
- package/dist/core/usecases/index.d.ts +9 -0
- package/dist/core/usecases/index.d.ts.map +1 -0
- package/dist/core/utils/apiUrl.d.ts +16 -0
- package/dist/core/utils/apiUrl.d.ts.map +1 -0
- package/dist/core/utils/logger.d.ts +19 -0
- package/dist/core/utils/logger.d.ts.map +1 -0
- package/dist/index.cjs +939 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4773 -0
- package/dist/sdk/CROSSxSDK.d.ts +278 -0
- package/dist/sdk/CROSSxSDK.d.ts.map +1 -0
- package/dist/sdk/EthereumProvider.d.ts +32 -0
- package/dist/sdk/EthereumProvider.d.ts.map +1 -0
- package/dist/sdk/factory.d.ts +8 -0
- package/dist/sdk/factory.d.ts.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import { SDKConfig, SDKThemeTokens, AuthResult, SignMessageResp, SignTxResp, SignTypedDataResp, SignInOptions, SignOptions, SendTxResp, TransactionWithReceipt, TransactionReceipt, MigrateResult, SDKUserInfo } from '../core/types';
|
|
2
|
+
import { StoragePort, CryptoPort, TransportPort, OAuthPort, WalletProviderPort } from '../core/ports';
|
|
3
|
+
import { EvmTransactionRequest } from '../core/types/chain';
|
|
4
|
+
import { CROSSxEthereumProvider } from './EthereumProvider';
|
|
5
|
+
import { TokenMemoryStore } from '../core/services/TokenMemoryStore';
|
|
6
|
+
|
|
7
|
+
export declare class CROSSxSDK {
|
|
8
|
+
private storage;
|
|
9
|
+
private crypto;
|
|
10
|
+
private transport;
|
|
11
|
+
private oauth;
|
|
12
|
+
private walletProvider;
|
|
13
|
+
private _config;
|
|
14
|
+
private initialized;
|
|
15
|
+
private authenticated;
|
|
16
|
+
private userId;
|
|
17
|
+
private address;
|
|
18
|
+
private userEmail;
|
|
19
|
+
/** 로그인 프로바이더 ('google' | 'apple') */
|
|
20
|
+
private loginType;
|
|
21
|
+
/** OAuth 프로바이더(Google/Apple)의 고유 sub — migration API에 사용 */
|
|
22
|
+
private providerSub;
|
|
23
|
+
/** JWT 서명이 실제 검증(JWKS)되었는지 여부 */
|
|
24
|
+
private tokenSignatureVerified;
|
|
25
|
+
private readonly confirmation;
|
|
26
|
+
get config(): Readonly<SDKConfig>;
|
|
27
|
+
private signInUseCase;
|
|
28
|
+
private signOutUseCase;
|
|
29
|
+
private withdrawUseCase;
|
|
30
|
+
private migrateWalletUseCase;
|
|
31
|
+
constructor(config: SDKConfig, storage: StoragePort, crypto: CryptoPort, transport: TransportPort, oauth: OAuthPort, walletProvider: WalletProviderPort, tokenStore: TokenMemoryStore);
|
|
32
|
+
/**
|
|
33
|
+
* SDK 초기화 및 세션 복원 시도
|
|
34
|
+
*
|
|
35
|
+
* @returns 복원된 세션이 있으면 `AuthResult`, 없으면 `null`
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* const session = await sdk.initialize();
|
|
39
|
+
* if (session) {
|
|
40
|
+
* console.log('자동 로그인:', session.address);
|
|
41
|
+
* }
|
|
42
|
+
*/
|
|
43
|
+
initialize(): Promise<AuthResult | null>;
|
|
44
|
+
signIn(options?: SignInOptions): Promise<AuthResult>;
|
|
45
|
+
signOut(): Promise<void>;
|
|
46
|
+
withdraw(): Promise<void>;
|
|
47
|
+
isAuthenticated(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* 현재 로그인 상태 확인 (isAuthenticated() 별칭)
|
|
50
|
+
* Android SDK의 isLoggedIn()과 동일합니다.
|
|
51
|
+
*/
|
|
52
|
+
isLoggedIn(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* 로그인 상태를 보장합니다.
|
|
55
|
+
*
|
|
56
|
+
* - 이미 인증된 상태면 즉시 `true` 반환
|
|
57
|
+
* - 세션이 없어도 refresh_token이 유효하면 자동 복원 후 `true` 반환
|
|
58
|
+
* - 복원 불가하면 `false` 반환 (에러를 throw하지 않습니다)
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* if (await sdk.ensureLoggedIn()) {
|
|
62
|
+
* // 인증된 상태에서 작업
|
|
63
|
+
* } else {
|
|
64
|
+
* // 로그인 화면으로 이동
|
|
65
|
+
* }
|
|
66
|
+
*/
|
|
67
|
+
ensureLoggedIn(): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* 현재 로그인한 사용자의 상세 정보를 반환합니다.
|
|
70
|
+
* Android SDK의 getUserInfo()와 동일합니다.
|
|
71
|
+
*
|
|
72
|
+
* @returns `{ id, email?, loginType?, addresses }`
|
|
73
|
+
*/
|
|
74
|
+
getUserInfo(): Promise<SDKUserInfo>;
|
|
75
|
+
/**
|
|
76
|
+
* CROSSx 지갑 → Embedded Wallet 마이그레이션
|
|
77
|
+
*
|
|
78
|
+
* 클라우드 백업에서 기존 CROSSx 지갑을 복구하여
|
|
79
|
+
* Embedded Wallet으로 전환합니다.
|
|
80
|
+
*
|
|
81
|
+
* create 시 -10012 에러(기존 백업 발견)가 발생하면 자동으로 호출됩니다.
|
|
82
|
+
*
|
|
83
|
+
* @param pin 4자리 PIN (클라우드 백업 복호화용)
|
|
84
|
+
* @returns 마이그레이션 결과 (address, shareC)
|
|
85
|
+
*/
|
|
86
|
+
migrateWallet(pin: string): Promise<MigrateResult>;
|
|
87
|
+
/**
|
|
88
|
+
* 지갑 주소 조회
|
|
89
|
+
*
|
|
90
|
+
* - `index` 생략 시: 로그인 후 로드된 기본 주소를 반환 (`{ address, index: 0 }`)
|
|
91
|
+
* - `index` 지정 시: 해당 인덱스의 주소를 서버에서 조회하여 반환
|
|
92
|
+
*
|
|
93
|
+
* @param index 주소 파생 인덱스 (생략 가능)
|
|
94
|
+
* @returns `{ address, index }` 또는 주소가 없으면 `null`
|
|
95
|
+
*/
|
|
96
|
+
getAddress(index?: number): Promise<{
|
|
97
|
+
address: string;
|
|
98
|
+
index: number;
|
|
99
|
+
} | null>;
|
|
100
|
+
/**
|
|
101
|
+
* 사용자의 지갑 주소 목록 반환
|
|
102
|
+
* Android SDK의 getAddresses()와 동일합니다.
|
|
103
|
+
*
|
|
104
|
+
* @returns `[{ address, index }]` 형식의 배열
|
|
105
|
+
*/
|
|
106
|
+
getAddresses(): Promise<Array<{
|
|
107
|
+
address: string;
|
|
108
|
+
index: number;
|
|
109
|
+
}>>;
|
|
110
|
+
/**
|
|
111
|
+
* 컨펌 모달 테마를 런타임에 변경합니다.
|
|
112
|
+
* 다음 모달이 열릴 때부터 적용됩니다.
|
|
113
|
+
*
|
|
114
|
+
* @param themeMode 'light' | 'dark' (생략 시 기존 config.theme 유지)
|
|
115
|
+
* @param themeTokens 모드별 색상 오버라이드 (생략 시 기존 config.themeTokens 유지)
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* sdk.applyTheme('dark');
|
|
119
|
+
* sdk.applyTheme('dark', { dark: { primary: '#4D9FFF', bg: '#121212' } });
|
|
120
|
+
*/
|
|
121
|
+
applyTheme(themeMode?: 'light' | 'dark', themeTokens?: SDKThemeTokens): void;
|
|
122
|
+
/**
|
|
123
|
+
* 지갑 생성 (로그인 후 지갑이 없는 경우)
|
|
124
|
+
* 기존 CROSSx 백업이 발견되면 자동으로 마이그레이션 플로우 실행
|
|
125
|
+
*/
|
|
126
|
+
createWallet(): Promise<{
|
|
127
|
+
address: string;
|
|
128
|
+
}>;
|
|
129
|
+
/**
|
|
130
|
+
* 메시지 서명
|
|
131
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612055')
|
|
132
|
+
* @param message 서명할 메시지
|
|
133
|
+
* @param opts 서명 옵션 (index, dappName, accountName)
|
|
134
|
+
* @todo 백엔드 메시지 서명 전용 엔드포인트 추가 후 구현
|
|
135
|
+
*/
|
|
136
|
+
signMessage(chainId: string, message: string, opts?: SignOptions): Promise<SignMessageResp>;
|
|
137
|
+
/**
|
|
138
|
+
* EIP-712 Typed Data 서명 — /mnemonic/sign-typed-data
|
|
139
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612055')
|
|
140
|
+
* @param typedData EIP-712 typed structured data (파싱된 객체)
|
|
141
|
+
* @param opts 서명 옵션 (index, dappName, accountName)
|
|
142
|
+
*/
|
|
143
|
+
signTypedData(chainId: string, typedData: unknown, opts?: SignOptions): Promise<SignTypedDataResp>;
|
|
144
|
+
/**
|
|
145
|
+
* 트랜잭션 서명 (전송 없음) — /mnemonic/sign
|
|
146
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612055')
|
|
147
|
+
* @param tx EVM 트랜잭션 요청
|
|
148
|
+
* @param opts 서명 옵션 (index, dappName, accountName)
|
|
149
|
+
*/
|
|
150
|
+
signTransaction(chainId: string, tx: EvmTransactionRequest, opts?: SignOptions): Promise<SignTxResp>;
|
|
151
|
+
/**
|
|
152
|
+
* 트랜잭션 전송
|
|
153
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612055')
|
|
154
|
+
* @param tx EVM 트랜잭션 요청
|
|
155
|
+
* @param opts 서명 옵션 (index, dappName, accountName)
|
|
156
|
+
*/
|
|
157
|
+
sendTransaction(chainId: string, tx: EvmTransactionRequest, opts?: SignOptions): Promise<SendTxResp>;
|
|
158
|
+
/**
|
|
159
|
+
* 트랜잭션 Receipt 조회 (eth_getTransactionReceipt)
|
|
160
|
+
* 아직 채굴되지 않은 경우 null 반환
|
|
161
|
+
*/
|
|
162
|
+
getTransactionReceipt(txHash: string, chainId: string): Promise<TransactionReceipt | null>;
|
|
163
|
+
/**
|
|
164
|
+
* 트랜잭션이 채굴될 때까지 폴링
|
|
165
|
+
* @param txHash 트랜잭션 해시
|
|
166
|
+
* @param chainId CAIP-2 체인 ID
|
|
167
|
+
* @param opts.intervalMs 폴링 간격 (기본 2000ms)
|
|
168
|
+
* @param opts.timeoutMs 최대 대기 시간 (기본 60000ms)
|
|
169
|
+
*/
|
|
170
|
+
waitForTxAndGetReceipt(txHash: string, chainId: string, opts?: {
|
|
171
|
+
intervalMs?: number;
|
|
172
|
+
timeoutMs?: number;
|
|
173
|
+
}): Promise<TransactionReceipt>;
|
|
174
|
+
/**
|
|
175
|
+
* 트랜잭션 전송 후 Receipt가 확인될 때까지 폴링하여 결과를 반환.
|
|
176
|
+
*
|
|
177
|
+
* sendTransaction + waitForTxAndGetReceipt 을 하나로 합친 편의 메서드.
|
|
178
|
+
* 폴링 주기/타임아웃은 SDKConfig.receiptPolling 값을 사용하며
|
|
179
|
+
* opts 인자로 개별 호출 시 오버라이드할 수 있습니다.
|
|
180
|
+
*
|
|
181
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
|
|
182
|
+
* @param tx 서명되지 않은 트랜잭션 객체
|
|
183
|
+
* @param opts 폴링 옵션 오버라이드 (생략 시 config 값 사용)
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* const { txHash, receipt } = await sdk.sendTransactionWithWaitForReceipt('eip155:612044', tx);
|
|
187
|
+
* logger.log(receipt.status); // '0x1' | '0x0'
|
|
188
|
+
*/
|
|
189
|
+
sendTransactionWithWaitForReceipt(chainId: string, tx: EvmTransactionRequest, opts?: {
|
|
190
|
+
intervalMs?: number;
|
|
191
|
+
timeoutMs?: number;
|
|
192
|
+
}): Promise<TransactionWithReceipt>;
|
|
193
|
+
/**
|
|
194
|
+
* 현재 nonce 조회 (eth_getTransactionCount, pending 기준)
|
|
195
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
|
|
196
|
+
*/
|
|
197
|
+
getNonce(chainId: string): Promise<number>;
|
|
198
|
+
/**
|
|
199
|
+
* 잔액 조회
|
|
200
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
|
|
201
|
+
* @returns wei (hex) 및 포맷된 문자열
|
|
202
|
+
*/
|
|
203
|
+
getBalance(chainId: string): Promise<{
|
|
204
|
+
wei: string;
|
|
205
|
+
formatted: string;
|
|
206
|
+
chainId: string;
|
|
207
|
+
}>;
|
|
208
|
+
private static formatWei;
|
|
209
|
+
/**
|
|
210
|
+
* EIP-1193 호환 Ethereum Provider 반환.
|
|
211
|
+
*
|
|
212
|
+
* 읽기 전용 RPC (eth_call, eth_getBalance, …) → /wallet/rpc 프록시
|
|
213
|
+
* 서명·전송 (eth_sendTransaction, eth_signTransaction) → Wallet Gateway
|
|
214
|
+
*
|
|
215
|
+
* @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* const provider = sdk.getProvider('eip155:612044');
|
|
219
|
+
* // ethers.js
|
|
220
|
+
* const ethersProvider = new ethers.BrowserProvider(provider);
|
|
221
|
+
* // viem
|
|
222
|
+
* const client = createWalletClient({ transport: custom(provider) });
|
|
223
|
+
*/
|
|
224
|
+
getProvider(chainId: string): CROSSxEthereumProvider;
|
|
225
|
+
/**
|
|
226
|
+
* 범용 JSON-RPC 요청 — /wallet/rpc 프록시.
|
|
227
|
+
* getProvider() 내부 및 직접 호출 모두 가능.
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* const result = await sdk.walletRpc('eth_call', [{ to, data }, 'latest'], 'eip155:612044');
|
|
231
|
+
*/
|
|
232
|
+
walletRpc(method: string, params: any[], chainId: string): Promise<any>;
|
|
233
|
+
/**
|
|
234
|
+
* hex wei → "X.XXXX {symbol}" 표시 문자열. value가 0이거나 없으면 null 반환.
|
|
235
|
+
* Contract call(data만 있고 value=0) 등은 표시하지 않기 위해 null을 반환합니다.
|
|
236
|
+
*/
|
|
237
|
+
private static formatTxAmount;
|
|
238
|
+
/** CAIP-2 chainId (예: 'eip155:612044') → 네이티브 토큰 심볼/소수점 */
|
|
239
|
+
private getNativeCurrency;
|
|
240
|
+
private static readonly CHAIN_NATIVE_CURRENCY;
|
|
241
|
+
/**
|
|
242
|
+
* 마이그레이션 팝업 플로우
|
|
243
|
+
* 1) "Wallet Found" 팝업 → Recover / Skip
|
|
244
|
+
* 2) "PIN 입력" 팝업 → 4자리 PIN 입력 (재시도 지원)
|
|
245
|
+
* 3) migrateWallet API 호출
|
|
246
|
+
*/
|
|
247
|
+
private handleMigrationFlow;
|
|
248
|
+
/** ECDSA 서명 형식 검증 (65 bytes = 130 hex chars) */
|
|
249
|
+
private static validateSignatureFormat;
|
|
250
|
+
/** RLP-encoded signed transaction 형식 검증 */
|
|
251
|
+
private static validateSignedTxFormat;
|
|
252
|
+
/**
|
|
253
|
+
* Gateway 서명 응답의 ecrecover 검증 (XF-036)
|
|
254
|
+
*
|
|
255
|
+
* CryptoPort.recoverPersonalSignSigner 가 구현되어 있으면
|
|
256
|
+
* 복원된 주소와 기대 주소를 비교하여 불일치 시 에러를 throw합니다.
|
|
257
|
+
*/
|
|
258
|
+
private verifySignatureSigner;
|
|
259
|
+
/** AuthResult를 내부 상태에 반영합니다. */
|
|
260
|
+
private applyAuthResult;
|
|
261
|
+
/** 인증 상태를 초기화합니다. */
|
|
262
|
+
private clearAuthState;
|
|
263
|
+
/**
|
|
264
|
+
* Firebase sign_in_provider 값을 정규화합니다.
|
|
265
|
+
* 'google.com' → 'google', 'apple.com' → 'apple'
|
|
266
|
+
*/
|
|
267
|
+
private static normalizeLoginType;
|
|
268
|
+
private ensureInitialized;
|
|
269
|
+
private ensureAuthenticated;
|
|
270
|
+
/**
|
|
271
|
+
* SDK 리소스를 정리합니다.
|
|
272
|
+
*
|
|
273
|
+
* 내부 상태 초기화, 커스텀 로거 해제 등을 수행합니다.
|
|
274
|
+
* dispose 후 SDK 인스턴스는 더 이상 사용할 수 없습니다.
|
|
275
|
+
*/
|
|
276
|
+
dispose(): void;
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=CROSSxSDK.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CROSSxSDK.d.ts","sourceRoot":"","sources":["../../src/sdk/CROSSxSDK.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { CROSSxSDK } from './CROSSxSDK';
|
|
2
|
+
|
|
3
|
+
type Listener = (...args: any[]) => void;
|
|
4
|
+
export interface EIP1193RequestArguments {
|
|
5
|
+
method: string;
|
|
6
|
+
params?: any[];
|
|
7
|
+
}
|
|
8
|
+
export interface EIP1193Provider {
|
|
9
|
+
request(args: EIP1193RequestArguments): Promise<any>;
|
|
10
|
+
on(event: string, listener: Listener): this;
|
|
11
|
+
removeListener(event: string, listener: Listener): this;
|
|
12
|
+
}
|
|
13
|
+
export declare class CROSSxEthereumProvider implements EIP1193Provider {
|
|
14
|
+
private readonly sdk;
|
|
15
|
+
private readonly chainId;
|
|
16
|
+
private _listeners;
|
|
17
|
+
constructor(sdk: CROSSxSDK, chainId: string);
|
|
18
|
+
request({ method, params }: EIP1193RequestArguments): Promise<any>;
|
|
19
|
+
on(event: string, listener: Listener): this;
|
|
20
|
+
removeListener(event: string, listener: Listener): this;
|
|
21
|
+
/** 내부적으로 이벤트를 발행 (accountsChanged, chainChanged 등) */
|
|
22
|
+
emit(event: string, ...args: any[]): void;
|
|
23
|
+
/** CAIP-2 → EVM hex chainId (e.g. 'eip155:612044' → '0x956cc') */
|
|
24
|
+
private _caip2ToHex;
|
|
25
|
+
/**
|
|
26
|
+
* EIP-1193 tx 파라미터를 SDK UnsignedTransaction 형식으로 변환.
|
|
27
|
+
* EIP-1193에서는 gasLimit 대신 gas 를 사용하는 경우가 있으므로 정규화.
|
|
28
|
+
*/
|
|
29
|
+
private _normalizeEIP1193Tx;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=EthereumProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EthereumProvider.d.ts","sourceRoot":"","sources":["../../src/sdk/EthereumProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,KAAK,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;AAEzC,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzD;AAED,qBAAa,sBAAuB,YAAW,eAAe;IAI1D,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,UAAU,CAAoC;gBAGnC,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM;IAO5B,OAAO,CAAC,EAAE,MAAM,EAAE,MAAW,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC;IA8D7E,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAM3C,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKvD,sDAAsD;IACtD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQzC,kEAAkE;IAClE,OAAO,CAAC,WAAW;IAMnB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAc5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/sdk/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAwC/C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAyD5D"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nexus-cross/crossx-sdk-core",
|
|
3
|
+
"version": "0.0.0-beta.2",
|
|
4
|
+
"description": "CROSSx Core SDK - Vanilla JavaScript Embedded Wallet SDK",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"require": "./dist/index.cjs",
|
|
13
|
+
"types": "./dist/index.d.ts"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"keywords": [
|
|
20
|
+
"crossx",
|
|
21
|
+
"wallet",
|
|
22
|
+
"embedded-wallet",
|
|
23
|
+
"oauth",
|
|
24
|
+
"blockchain"
|
|
25
|
+
],
|
|
26
|
+
"author": "",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"registry": "https://registry.npmjs.org",
|
|
30
|
+
"access": "public"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@noble/curves": "^2.0.1",
|
|
34
|
+
"@noble/hashes": "^2.0.1",
|
|
35
|
+
"jose": "^5.2.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
39
|
+
"typescript": "^5.3.3",
|
|
40
|
+
"vite": "^5.0.11",
|
|
41
|
+
"vite-plugin-dts": "^3.7.1",
|
|
42
|
+
"vitest": "^4.0.18"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "vite build",
|
|
46
|
+
"dev": "vite build --watch",
|
|
47
|
+
"typecheck": "tsc --noEmit",
|
|
48
|
+
"test": "vitest run",
|
|
49
|
+
"test:watch": "vitest",
|
|
50
|
+
"test:coverage": "vitest run --coverage"
|
|
51
|
+
}
|
|
52
|
+
}
|