@nexus-cross/crossx-sdk-core 0.0.0-beta.2 → 1.0.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 (68) hide show
  1. package/README.md +129 -83
  2. package/dist/__tests__/adapters/IndexedDBStorageAdapter.test.d.ts +2 -0
  3. package/dist/__tests__/adapters/IndexedDBStorageAdapter.test.d.ts.map +1 -0
  4. package/dist/__tests__/mocks/MockChainRegistryPort.d.ts +9 -0
  5. package/dist/__tests__/mocks/MockChainRegistryPort.d.ts.map +1 -0
  6. package/dist/__tests__/mocks/MockTransportPort.d.ts +10 -5
  7. package/dist/__tests__/mocks/MockTransportPort.d.ts.map +1 -1
  8. package/dist/__tests__/mocks/MockWalletProviderPort.d.ts +3 -8
  9. package/dist/__tests__/mocks/MockWalletProviderPort.d.ts.map +1 -1
  10. package/dist/adapters/chain/RemoteChainRegistryAdapter.d.ts +29 -0
  11. package/dist/adapters/chain/RemoteChainRegistryAdapter.d.ts.map +1 -0
  12. package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts +6 -1
  13. package/dist/adapters/confirmation/BrowserConfirmationAdapter.d.ts.map +1 -1
  14. package/dist/adapters/oauth/BrowserOAuthAdapter.d.ts.map +1 -1
  15. package/dist/adapters/storage/IndexedDBStorageAdapter.d.ts +25 -0
  16. package/dist/adapters/storage/IndexedDBStorageAdapter.d.ts.map +1 -0
  17. package/dist/adapters/transport/FetchTransportAdapter.d.ts.map +1 -1
  18. package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts +1 -6
  19. package/dist/adapters/wallet/MockWalletProviderAdapter.d.ts.map +1 -1
  20. package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts +1 -11
  21. package/dist/adapters/wallet/RemoteWalletProviderAdapter.d.ts.map +1 -1
  22. package/dist/adapters/wallet/types.d.ts +0 -6
  23. package/dist/adapters/wallet/types.d.ts.map +1 -1
  24. package/dist/core/constants.d.ts +27 -0
  25. package/dist/core/constants.d.ts.map +1 -0
  26. package/dist/core/ports/ChainRegistryPort.d.ts +18 -0
  27. package/dist/core/ports/ChainRegistryPort.d.ts.map +1 -0
  28. package/dist/core/ports/ConfirmationPort.d.ts +46 -6
  29. package/dist/core/ports/ConfirmationPort.d.ts.map +1 -1
  30. package/dist/core/ports/TransportPort.d.ts +2 -0
  31. package/dist/core/ports/TransportPort.d.ts.map +1 -1
  32. package/dist/core/ports/WalletProviderPort.d.ts +3 -28
  33. package/dist/core/ports/WalletProviderPort.d.ts.map +1 -1
  34. package/dist/core/ports/index.d.ts +1 -0
  35. package/dist/core/ports/index.d.ts.map +1 -1
  36. package/dist/core/services/JsonRpcService.d.ts +18 -0
  37. package/dist/core/services/JsonRpcService.d.ts.map +1 -0
  38. package/dist/core/services/TypedEventEmitter.d.ts +23 -0
  39. package/dist/core/services/TypedEventEmitter.d.ts.map +1 -0
  40. package/dist/core/types/chain.d.ts +102 -17
  41. package/dist/core/types/chain.d.ts.map +1 -1
  42. package/dist/core/types/errors.d.ts +8 -3
  43. package/dist/core/types/errors.d.ts.map +1 -1
  44. package/dist/core/types/events.d.ts +23 -0
  45. package/dist/core/types/events.d.ts.map +1 -0
  46. package/dist/core/types/index.d.ts +8 -15
  47. package/dist/core/types/index.d.ts.map +1 -1
  48. package/dist/core/types/internal.d.ts +39 -0
  49. package/dist/core/types/internal.d.ts.map +1 -0
  50. package/dist/core/usecases/SignInUseCase.d.ts +32 -7
  51. package/dist/core/usecases/SignInUseCase.d.ts.map +1 -1
  52. package/dist/core/usecases/SignOutUseCase.d.ts +3 -1
  53. package/dist/core/usecases/SignOutUseCase.d.ts.map +1 -1
  54. package/dist/core/usecases/index.d.ts +0 -1
  55. package/dist/core/usecases/index.d.ts.map +1 -1
  56. package/dist/index.cjs +263 -203
  57. package/dist/index.d.ts +2 -2
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +5128 -4410
  60. package/dist/sdk/CROSSxSDK.d.ts +148 -15
  61. package/dist/sdk/CROSSxSDK.d.ts.map +1 -1
  62. package/dist/sdk/EthereumProvider.d.ts.map +1 -1
  63. package/dist/sdk/factory.d.ts.map +1 -1
  64. package/package.json +2 -1
  65. package/dist/__tests__/usecases/WithdrawUseCase.test.d.ts +0 -2
  66. package/dist/__tests__/usecases/WithdrawUseCase.test.d.ts.map +0 -1
  67. package/dist/core/usecases/WithdrawUseCase.d.ts +0 -11
  68. package/dist/core/usecases/WithdrawUseCase.d.ts.map +0 -1
@@ -1,15 +1,18 @@
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';
1
+ import { SDKConfig, SDKThemeTokens, AuthResult, SignMessageResp, SignTxResp, SignTypedDataResp, SignInOptions, SignOptions, SendTxResp, TransactionWithReceipt, TransactionReceipt, MigrateResult, SDKUserInfo, SDKEventMap } from '../core/types';
2
+ import { StoragePort, CryptoPort, TransportPort, OAuthPort, WalletProviderPort, ChainRegistryPort } from '../core/ports';
3
+ import { ChainInfo, EvmTransactionRequest } from '../core/types/chain';
4
4
  import { CROSSxEthereumProvider } from './EthereumProvider';
5
+ import { ConfirmationPort } from '../core/ports/ConfirmationPort';
5
6
  import { TokenMemoryStore } from '../core/services/TokenMemoryStore';
7
+ import { TypedEventEmitter } from '../core/services/TypedEventEmitter';
6
8
 
7
- export declare class CROSSxSDK {
9
+ export declare class CROSSxSDK extends TypedEventEmitter<SDKEventMap> {
8
10
  private storage;
9
11
  private crypto;
10
12
  private transport;
11
13
  private oauth;
12
14
  private walletProvider;
15
+ private tokenStore;
13
16
  private _config;
14
17
  private initialized;
15
18
  private authenticated;
@@ -26,9 +29,10 @@ export declare class CROSSxSDK {
26
29
  get config(): Readonly<SDKConfig>;
27
30
  private signInUseCase;
28
31
  private signOutUseCase;
29
- private withdrawUseCase;
30
32
  private migrateWalletUseCase;
31
- constructor(config: SDKConfig, storage: StoragePort, crypto: CryptoPort, transport: TransportPort, oauth: OAuthPort, walletProvider: WalletProviderPort, tokenStore: TokenMemoryStore);
33
+ private readonly chainRegistry;
34
+ private readonly jsonRpc;
35
+ constructor(config: SDKConfig, storage: StoragePort, crypto: CryptoPort, transport: TransportPort, oauth: OAuthPort, walletProvider: WalletProviderPort, tokenStore: TokenMemoryStore, confirmation: ConfirmationPort, chainRegistry: ChainRegistryPort);
32
36
  /**
33
37
  * SDK 초기화 및 세션 복원 시도
34
38
  *
@@ -43,8 +47,11 @@ export declare class CROSSxSDK {
43
47
  initialize(): Promise<AuthResult | null>;
44
48
  signIn(options?: SignInOptions): Promise<AuthResult>;
45
49
  signOut(): Promise<void>;
46
- withdraw(): Promise<void>;
47
50
  isAuthenticated(): boolean;
51
+ /** 현재 지갑 주소 (동기) — useSyncExternalStore 등에서 사용 */
52
+ get currentAddress(): string | null;
53
+ /** 현재 사용자 ID (동기) */
54
+ get currentUserId(): string | null;
48
55
  /**
49
56
  * 현재 로그인 상태 확인 (isAuthenticated() 별칭)
50
57
  * Android SDK의 isLoggedIn()과 동일합니다.
@@ -107,6 +114,31 @@ export declare class CROSSxSDK {
107
114
  address: string;
108
115
  index: number;
109
116
  }>>;
117
+ /**
118
+ * 지원 체인 전체 목록 조회
119
+ *
120
+ * Gateway에서 프로젝트에 등록된 체인 목록과 RPC URL을 반환합니다.
121
+ * 인증 불필요 — 초기화만 되어 있으면 호출 가능합니다.
122
+ *
123
+ * @returns 체인 정보 배열 `[{ chainId, rpcUrl }]`
124
+ *
125
+ * @example
126
+ * const chains = await sdk.getChains();
127
+ * chains.forEach(c => console.log(c.chainId, c.rpcUrl));
128
+ */
129
+ getChains(): Promise<ChainInfo[]>;
130
+ /**
131
+ * 특정 체인 정보 조회
132
+ *
133
+ * @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
134
+ * @returns 체인 정보 `{ chainId, rpcUrl }`
135
+ * @throws 미등록 체인인 경우 CROSSxError(CHAIN_NOT_SUPPORTED)
136
+ *
137
+ * @example
138
+ * const chain = await sdk.getChain('eip155:612044');
139
+ * console.log(chain.rpcUrl); // 'https://testnet.crosstoken.io:22001'
140
+ */
141
+ getChain(chainId: string): Promise<ChainInfo>;
110
142
  /**
111
143
  * 컨펌 모달 테마를 런타임에 변경합니다.
112
144
  * 다음 모달이 열릴 때부터 적용됩니다.
@@ -135,12 +167,49 @@ export declare class CROSSxSDK {
135
167
  */
136
168
  signMessage(chainId: string, message: string, opts?: SignOptions): Promise<SignMessageResp>;
137
169
  /**
138
- * EIP-712 Typed Data 서명 — /mnemonic/sign-typed-data
139
- * @param chainId CAIP-2 체인 ID (예: 'eip155:612055')
170
+ * EIP-712 Typed Data 온체인 서명 — /mnemonic/sign-typed-data/:chainId
171
+ *
172
+ * 온체인 서명 전용입니다. `typedData.domain.chainId`가 반드시 존재해야 하며,
173
+ * `chainId` 파라미터의 숫자 부분과 일치해야 합니다.
174
+ *
175
+ * 오프체인 서명(domain.chainId가 없는 경우)은 {@link signTypedDataOffchain}을 사용하세요.
176
+ *
177
+ * @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
140
178
  * @param typedData EIP-712 typed structured data (파싱된 객체)
141
179
  * @param opts 서명 옵션 (index, dappName, accountName)
180
+ *
181
+ * @example
182
+ * // Permit 서명 (온체인)
183
+ * const result = await sdk.signTypedData('eip155:612044', {
184
+ * domain: { name: 'MyToken', chainId: 612044, ... },
185
+ * types: { ... },
186
+ * primaryType: 'Permit',
187
+ * message: { ... },
188
+ * });
142
189
  */
143
190
  signTypedData(chainId: string, typedData: unknown, opts?: SignOptions): Promise<SignTypedDataResp>;
191
+ /** 오프체인 서명에 사용하는 내부 chainId 값 */
192
+ private static readonly OFFCHAIN_CHAIN_ID;
193
+ /**
194
+ * EIP-712 Typed Data 오프체인 서명 — /mnemonic/sign-typed-data/0
195
+ *
196
+ * `typedData.domain.chainId`가 없거나 0인 경우에 사용합니다.
197
+ * 내부적으로 chainId를 `'0'`으로 설정하여 서버에 요청합니다.
198
+ *
199
+ * 온체인 서명(Permit 등 domain.chainId가 필요한 경우)은 {@link signTypedData}를 사용하세요.
200
+ *
201
+ * @param typedData EIP-712 typed structured data (파싱된 객체)
202
+ * @param opts 서명 옵션 (index, dappName, accountName)
203
+ *
204
+ * @example
205
+ * const result = await sdk.signTypedDataOffchain({
206
+ * domain: { name: 'Test' },
207
+ * types: { ... },
208
+ * primaryType: 'Mail',
209
+ * message: { contents: 'Hello' },
210
+ * });
211
+ */
212
+ signTypedDataOffchain(typedData: unknown, opts?: SignOptions): Promise<SignTypedDataResp>;
144
213
  /**
145
214
  * 트랜잭션 서명 (전송 없음) — /mnemonic/sign
146
215
  * @param chainId CAIP-2 체인 ID (예: 'eip155:612055')
@@ -190,6 +259,50 @@ export declare class CROSSxSDK {
190
259
  intervalMs?: number;
191
260
  timeoutMs?: number;
192
261
  }): Promise<TransactionWithReceipt>;
262
+ /**
263
+ * 현재 네트워크의 가스 가격(Wei)을 조회합니다.
264
+ *
265
+ * @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
266
+ * @returns hex 문자열 가스 가격 (예: '0x3B9ACA00')
267
+ *
268
+ * @example
269
+ * const gasPrice = await sdk.getGasPrice('eip155:612044');
270
+ */
271
+ getGasPrice(chainId: string): Promise<string>;
272
+ /**
273
+ * 트랜잭션 실행에 필요한 가스량을 추정합니다.
274
+ *
275
+ * @param tx EVM 트랜잭션 요청
276
+ * @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
277
+ * @returns hex 문자열 가스 한도 (예: '0x5208')
278
+ *
279
+ * @example
280
+ * const gasLimit = await sdk.estimateGas({ from: '0x...', to: '0x...', value: '0x0' }, 'eip155:612044');
281
+ */
282
+ estimateGas(tx: EvmTransactionRequest, chainId: string): Promise<string>;
283
+ /**
284
+ * 최신 블록의 baseFeePerGas를 조회합니다.
285
+ * EIP-1559(Dynamic) 체인이면 hex 문자열을, Legacy 체인이면 `null`을 반환합니다.
286
+ *
287
+ * @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
288
+ * @returns hex baseFeePerGas (Wei) 또는 null (Legacy 체인)
289
+ *
290
+ * @example
291
+ * const baseFee = await sdk.getBaseFeePerGas('eip155:1');
292
+ * if (baseFee) console.log('EIP-1559 chain, baseFee:', baseFee);
293
+ */
294
+ getBaseFeePerGas(chainId: string): Promise<string | null>;
295
+ /**
296
+ * EIP-1559 우선순위 가스 가격(팁)을 조회합니다.
297
+ * EIP-1559 미지원 체인에서는 에러가 발생할 수 있습니다.
298
+ *
299
+ * @param chainId CAIP-2 체인 ID (예: 'eip155:1')
300
+ * @returns hex 우선순위 가스 가격 (Wei)
301
+ *
302
+ * @example
303
+ * const tip = await sdk.getMaxPriorityFeePerGas('eip155:1');
304
+ */
305
+ getMaxPriorityFeePerGas(chainId: string): Promise<string>;
193
306
  /**
194
307
  * 현재 nonce 조회 (eth_getTransactionCount, pending 기준)
195
308
  * @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
@@ -209,7 +322,7 @@ export declare class CROSSxSDK {
209
322
  /**
210
323
  * EIP-1193 호환 Ethereum Provider 반환.
211
324
  *
212
- * 읽기 전용 RPC (eth_call, eth_getBalance, …) → /wallet/rpc 프록시
325
+ * 읽기 전용 RPC (eth_call, eth_getBalance, …) → 노드 직접 JSON-RPC 호출
213
326
  * 서명·전송 (eth_sendTransaction, eth_signTransaction) → Wallet Gateway
214
327
  *
215
328
  * @param chainId CAIP-2 체인 ID (예: 'eip155:612044')
@@ -223,8 +336,10 @@ export declare class CROSSxSDK {
223
336
  */
224
337
  getProvider(chainId: string): CROSSxEthereumProvider;
225
338
  /**
226
- * 범용 JSON-RPC 요청 — /wallet/rpc 프록시.
227
- * getProvider() 내부 및 직접 호출 모두 가능.
339
+ * 범용 JSON-RPC 요청 — 노드에 직접 연결.
340
+ *
341
+ * ChainRegistryPort에서 RPC URL을 조회한 뒤 TransportPort로 직접 호출합니다.
342
+ * getProvider() 내부 및 직접 호출 모두 가능합니다.
228
343
  *
229
344
  * @example
230
345
  * const result = await sdk.walletRpc('eth_call', [{ to, data }, 'latest'], 'eip155:612044');
@@ -235,9 +350,6 @@ export declare class CROSSxSDK {
235
350
  * Contract call(data만 있고 value=0) 등은 표시하지 않기 위해 null을 반환합니다.
236
351
  */
237
352
  private static formatTxAmount;
238
- /** CAIP-2 chainId (예: 'eip155:612044') → 네이티브 토큰 심볼/소수점 */
239
- private getNativeCurrency;
240
- private static readonly CHAIN_NATIVE_CURRENCY;
241
353
  /**
242
354
  * 마이그레이션 팝업 플로우
243
355
  * 1) "Wallet Found" 팝업 → Recover / Skip
@@ -245,6 +357,27 @@ export declare class CROSSxSDK {
245
357
  * 3) migrateWallet API 호출
246
358
  */
247
359
  private handleMigrationFlow;
360
+ /**
361
+ * nonce / gasLimit / 가스 가격이 비어 있으면 RPC 조회 + fallback 정책으로 채운 트랜잭션을 반환합니다.
362
+ *
363
+ * | 조건 | 동작 |
364
+ * |------|------|
365
+ * | nonce가 undefined/null | eth_getTransactionCount(pending) 호출 |
366
+ * | gasLimit이 없거나 빈 문자열 | eth_estimateGas 호출 |
367
+ * | gasPrice, maxFeePerGas 모두 비어있음 | baseFee 조회 → Dynamic이면 maxFeePerGas=baseFee + tip=1Gwei, Legacy이면 gasPrice=2Gwei |
368
+ * | maxFeePerGas 있고 maxPriorityFeePerGas 없음 | maxPriorityFeePerGas = 1 Gwei (고정) |
369
+ *
370
+ * jsonRpc 서비스를 통해 nonce 및 가스 파라미터를 자동 조회합니다.
371
+ */
372
+ private withResolvedGasAndFee;
373
+ /**
374
+ * EIP-712 signTypedData 호출 시 chainId와 typedData.domain.chainId 정합성 검증.
375
+ *
376
+ * - chainId가 eip155:XXXX → domain.chainId가 반드시 존재하고 XXXX와 일치해야 함
377
+ * - chainId가 '0' → domain.chainId가 없거나 0이어야 함
378
+ */
379
+ private static validateTypedDataChainId;
380
+ private static extractDomainChainId;
248
381
  /** ECDSA 서명 형식 검증 (65 bytes = 130 hex chars) */
249
382
  private static validateSignatureFormat;
250
383
  /** RLP-encoded signed transaction 형식 검증 */
@@ -1 +1 @@
1
- {"version":3,"file":"CROSSxSDK.d.ts","sourceRoot":"","sources":["../../src/sdk/CROSSxSDK.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACZ,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,SAAS,EACT,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAW5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,qBAAa,SAAS;IA0BlB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,cAAc;IA7BxB,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAuB;IACxC,qCAAqC;IACrC,OAAO,CAAC,SAAS,CAAuB;IACxC,4DAA4D;IAC5D,OAAO,CAAC,WAAW,CAAuB;IAC1C,iCAAiC;IACjC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D,IAAI,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,CAEhC;IAED,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAuB;gBAGjD,MAAM,EAAE,SAAS,EACT,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,SAAS,EAChB,cAAc,EAAE,kBAAkB,EAC1C,UAAU,EAAE,gBAAgB;IA0B9B;;;;;;;;;;OAUG;IACG,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAsBxC,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,eAAe,IAAI,OAAO;IAI1B;;;OAGG;IACH,UAAU,IAAI,OAAO;IAIrB;;;;;;;;;;;;;OAaG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBxC;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBzC;;;;;;;;;;OAUG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0BxD;;;;;;;;OAQG;IACG,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAcpF;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAWxE;;;;;;;;;;OAUG;IACH,UAAU,CACR,SAAS,GAAE,OAAO,GAAG,MAAsC,EAC3D,WAAW,GAAE,cAA+C,GAC3D,IAAI;IAKP;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAuClD;;;;;;OAMG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,eAAe,CAAC;IAoD3B;;;;;OAKG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO,EAClB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,iBAAiB,CAAC;IA0D7B;;;;;OAKG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,qBAAqB,EACzB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC;IA6DtB;;;;;OAKG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,qBAAqB,EACzB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,UAAU,CAAC;IA4EtB;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAShG;;;;;;OAMG;IACG,sBAAsB,CAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,kBAAkB,CAAC;IAoB9B;;;;;;;;;;;;;;OAcG;IACG,iCAAiC,CACrC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,qBAAqB,EACzB,IAAI,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,sBAAsB,CAAC;IAWlC;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAehD;;;;OAIG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAqB/F,OAAO,CAAC,MAAM,CAAC,SAAS;IAmBxB;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;IAKpD;;;;;;OAMG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAmB7E;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAoB7B,2DAA2D;IAC3D,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAoB3C;IAEF;;;;;OAKG;YACW,mBAAmB;IAwCjC,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAatC,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAUrC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA0B7B,gCAAgC;IAChC,OAAO,CAAC,eAAe;IAUvB,qBAAqB;IACrB,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAOjC,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,mBAAmB;IAW3B;;;;;OAKG;IACH,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"CROSSxSDK.d.ts","sourceRoot":"","sources":["../../src/sdk/CROSSxSDK.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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;IA6D7E,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"}
@@ -1 +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"}
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;AAmC/C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAqE5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexus-cross/crossx-sdk-core",
3
- "version": "0.0.0-beta.2",
3
+ "version": "1.0.0",
4
4
  "description": "CROSSx Core SDK - Vanilla JavaScript Embedded Wallet SDK",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -36,6 +36,7 @@
36
36
  },
37
37
  "devDependencies": {
38
38
  "@vitest/coverage-v8": "^4.0.18",
39
+ "fake-indexeddb": "^6.2.5",
39
40
  "typescript": "^5.3.3",
40
41
  "vite": "^5.0.11",
41
42
  "vite-plugin-dts": "^3.7.1",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=WithdrawUseCase.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WithdrawUseCase.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/usecases/WithdrawUseCase.test.ts"],"names":[],"mappings":""}
@@ -1,11 +0,0 @@
1
- import { StoragePort, WalletProviderPort } from '../ports';
2
- import { TokenMemoryStore } from '../services/TokenMemoryStore';
3
-
4
- export declare class WithdrawUseCase {
5
- private storage;
6
- private walletProvider;
7
- private tokenStore;
8
- constructor(storage: StoragePort, walletProvider: WalletProviderPort, tokenStore: TokenMemoryStore);
9
- execute(): Promise<void>;
10
- }
11
- //# sourceMappingURL=WithdrawUseCase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WithdrawUseCase.d.ts","sourceRoot":"","sources":["../../../src/core/usecases/WithdrawUseCase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAQrE,qBAAa,eAAe;IAExB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;gBAFV,OAAO,EAAE,WAAW,EACpB,cAAc,EAAE,kBAAkB,EAClC,UAAU,EAAE,gBAAgB;IAGhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B/B"}