@lendasat/lendaswap-sdk 0.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.
Files changed (46) hide show
  1. package/README.md +105 -0
  2. package/dist/api.d.ts +413 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +306 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/index.d.ts +42 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +45 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/price-feed.d.ts +121 -0
  11. package/dist/price-feed.d.ts.map +1 -0
  12. package/dist/price-feed.js +178 -0
  13. package/dist/price-feed.js.map +1 -0
  14. package/dist/storage/dexieSwapStorage.d.ts +111 -0
  15. package/dist/storage/dexieSwapStorage.d.ts.map +1 -0
  16. package/dist/storage/dexieSwapStorage.js +139 -0
  17. package/dist/storage/dexieSwapStorage.js.map +1 -0
  18. package/dist/storage/dexieWalletStorage.d.ts +99 -0
  19. package/dist/storage/dexieWalletStorage.d.ts.map +1 -0
  20. package/dist/storage/dexieWalletStorage.js +139 -0
  21. package/dist/storage/dexieWalletStorage.js.map +1 -0
  22. package/dist/storage/index.d.ts +18 -0
  23. package/dist/storage/index.d.ts.map +1 -0
  24. package/dist/storage/index.js +20 -0
  25. package/dist/storage/index.js.map +1 -0
  26. package/dist/storage/indexedDB.d.ts +30 -0
  27. package/dist/storage/indexedDB.d.ts.map +1 -0
  28. package/dist/storage/indexedDB.js +108 -0
  29. package/dist/storage/indexedDB.js.map +1 -0
  30. package/dist/storage/localStorage.d.ts +32 -0
  31. package/dist/storage/localStorage.d.ts.map +1 -0
  32. package/dist/storage/localStorage.js +58 -0
  33. package/dist/storage/localStorage.js.map +1 -0
  34. package/dist/storage/memory.d.ts +35 -0
  35. package/dist/storage/memory.d.ts.map +1 -0
  36. package/dist/storage/memory.js +50 -0
  37. package/dist/storage/memory.js.map +1 -0
  38. package/dist/types.d.ts +59 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +5 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/wallet.d.ts +108 -0
  43. package/dist/wallet.d.ts.map +1 -0
  44. package/dist/wallet.js +188 -0
  45. package/dist/wallet.js.map +1 -0
  46. package/package.json +58 -0
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Storage interface and utilities for the Lendaswap Client SDK.
3
+ *
4
+ * This module defines the Storage interface that can be implemented
5
+ * for various backends (localStorage, IndexedDB, etc.).
6
+ */
7
+ /**
8
+ * Storage key constants matching the Rust SDK.
9
+ */
10
+ export declare const STORAGE_KEYS: {
11
+ /** Key for storing the mnemonic phrase. */
12
+ readonly MNEMONIC: "lendaswap_hd_mnemonic";
13
+ /** Key for storing the current HD derivation index. */
14
+ readonly KEY_INDEX: "lendaswap_hd_index";
15
+ };
16
+ export { createDexieSwapStorage, DexieSwapStorageProvider, } from "./dexieSwapStorage.js";
17
+ export { createDexieWalletStorage, DexieWalletStorageProvider, } from "./dexieWalletStorage.js";
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,2CAA2C;;IAE3C,uDAAuD;;CAE/C,CAAC;AAGX,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Storage interface and utilities for the Lendaswap Client SDK.
3
+ *
4
+ * This module defines the Storage interface that can be implemented
5
+ * for various backends (localStorage, IndexedDB, etc.).
6
+ */
7
+ /**
8
+ * Storage key constants matching the Rust SDK.
9
+ */
10
+ export const STORAGE_KEYS = {
11
+ /** Key for storing the mnemonic phrase. */
12
+ MNEMONIC: "lendaswap_hd_mnemonic",
13
+ /** Key for storing the current HD derivation index. */
14
+ KEY_INDEX: "lendaswap_hd_index",
15
+ };
16
+ // Swap storage (typed storage for swap data using Dexie/IndexedDB)
17
+ export { createDexieSwapStorage, DexieSwapStorageProvider, } from "./dexieSwapStorage.js";
18
+ // Wallet storage (typed storage for wallet data using Dexie/IndexedDB)
19
+ export { createDexieWalletStorage, DexieWalletStorageProvider, } from "./dexieWalletStorage.js";
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,uBAAuB;IACjC,uDAAuD;IACvD,SAAS,EAAE,oBAAoB;CACvB,CAAC;AAEX,mEAAmE;AACnE,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,uEAAuE;AACvE,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * IndexedDB-based storage provider.
3
+ *
4
+ * IndexedDB is more robust than localStorage for larger amounts of data
5
+ * and provides better async operations.
6
+ */
7
+ import type { Storage } from "./index.js";
8
+ /**
9
+ * Storage provider using IndexedDB.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const storage = new IndexedDBProvider();
14
+ * await storage.set('key', 'value');
15
+ * const value = await storage.get('key'); // 'value'
16
+ * ```
17
+ */
18
+ export declare class IndexedDBProvider implements Storage {
19
+ private dbPromise;
20
+ /**
21
+ * Get or create the IndexedDB database.
22
+ */
23
+ private getDB;
24
+ get(key: string): Promise<string | null>;
25
+ set(key: string, value: string): Promise<void>;
26
+ remove(key: string): Promise<void>;
27
+ has(key: string): Promise<boolean>;
28
+ clear(): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=indexedDB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDB.d.ts","sourceRoot":"","sources":["../../src/storage/indexedDB.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAO1C;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,OAAO,CAAC,SAAS,CAAqC;IAEtD;;OAEG;IACH,OAAO,CAAC,KAAK;IA6BP,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB7B"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * IndexedDB-based storage provider.
3
+ *
4
+ * IndexedDB is more robust than localStorage for larger amounts of data
5
+ * and provides better async operations.
6
+ */
7
+ // FIXME: TODO: this shouldn't be v1.2, in fact, we probably shouldn't be using this file at all
8
+ const DB_NAME = "lendaswap-v1.2";
9
+ const DB_VERSION = 1;
10
+ const STORE_NAME = "keyvalue";
11
+ /**
12
+ * Storage provider using IndexedDB.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const storage = new IndexedDBProvider();
17
+ * await storage.set('key', 'value');
18
+ * const value = await storage.get('key'); // 'value'
19
+ * ```
20
+ */
21
+ export class IndexedDBProvider {
22
+ dbPromise = null;
23
+ /**
24
+ * Get or create the IndexedDB database.
25
+ */
26
+ getDB() {
27
+ if (this.dbPromise) {
28
+ return this.dbPromise;
29
+ }
30
+ this.dbPromise = new Promise((resolve, reject) => {
31
+ const request = indexedDB.open(DB_NAME, DB_VERSION);
32
+ request.onerror = () => {
33
+ reject(new Error(`Failed to open IndexedDB: ${request.error?.message}`));
34
+ };
35
+ request.onsuccess = () => {
36
+ resolve(request.result);
37
+ };
38
+ request.onupgradeneeded = (event) => {
39
+ const db = event.target.result;
40
+ if (!db.objectStoreNames.contains(STORE_NAME)) {
41
+ db.createObjectStore(STORE_NAME);
42
+ }
43
+ };
44
+ });
45
+ return this.dbPromise;
46
+ }
47
+ async get(key) {
48
+ const db = await this.getDB();
49
+ return new Promise((resolve, reject) => {
50
+ const transaction = db.transaction(STORE_NAME, "readonly");
51
+ const store = transaction.objectStore(STORE_NAME);
52
+ const request = store.get(key);
53
+ request.onerror = () => {
54
+ reject(new Error(`Failed to get key "${key}": ${request.error?.message}`));
55
+ };
56
+ request.onsuccess = () => {
57
+ resolve(request.result ?? null);
58
+ };
59
+ });
60
+ }
61
+ async set(key, value) {
62
+ const db = await this.getDB();
63
+ return new Promise((resolve, reject) => {
64
+ const transaction = db.transaction(STORE_NAME, "readwrite");
65
+ const store = transaction.objectStore(STORE_NAME);
66
+ const request = store.put(value, key);
67
+ request.onerror = () => {
68
+ reject(new Error(`Failed to set key "${key}": ${request.error?.message}`));
69
+ };
70
+ request.onsuccess = () => {
71
+ resolve();
72
+ };
73
+ });
74
+ }
75
+ async remove(key) {
76
+ const db = await this.getDB();
77
+ return new Promise((resolve, reject) => {
78
+ const transaction = db.transaction(STORE_NAME, "readwrite");
79
+ const store = transaction.objectStore(STORE_NAME);
80
+ const request = store.delete(key);
81
+ request.onerror = () => {
82
+ reject(new Error(`Failed to remove key "${key}": ${request.error?.message}`));
83
+ };
84
+ request.onsuccess = () => {
85
+ resolve();
86
+ };
87
+ });
88
+ }
89
+ async has(key) {
90
+ const value = await this.get(key);
91
+ return value !== null;
92
+ }
93
+ async clear() {
94
+ const db = await this.getDB();
95
+ return new Promise((resolve, reject) => {
96
+ const transaction = db.transaction(STORE_NAME, "readwrite");
97
+ const store = transaction.objectStore(STORE_NAME);
98
+ const request = store.clear();
99
+ request.onerror = () => {
100
+ reject(new Error(`Failed to clear storage: ${request.error?.message}`));
101
+ };
102
+ request.onsuccess = () => {
103
+ resolve();
104
+ };
105
+ });
106
+ }
107
+ }
108
+ //# sourceMappingURL=indexedDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDB.js","sourceRoot":"","sources":["../../src/storage/indexedDB.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,gGAAgG;AAChG,MAAM,OAAO,GAAG,gBAAgB,CAAC;AACjC,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAiB;IACpB,SAAS,GAAgC,IAAI,CAAC;IAEtD;;OAEG;IACK,KAAK;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEpD,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;gBACrB,MAAM,CACJ,IAAI,KAAK,CAAC,6BAA6B,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CACjE,CAAC;YACJ,CAAC,CAAC;YAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;gBACvB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC;YAEF,OAAO,CAAC,eAAe,GAAG,CAAC,KAAK,EAAE,EAAE;gBAClC,MAAM,EAAE,GAAI,KAAK,CAAC,MAA2B,CAAC,MAAM,CAAC;gBACrD,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9C,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE/B,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;gBACrB,MAAM,CACJ,IAAI,KAAK,CAAC,sBAAsB,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CACnE,CAAC;YACJ,CAAC,CAAC;YAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;gBACvB,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEtC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;gBACrB,MAAM,CACJ,IAAI,KAAK,CAAC,sBAAsB,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CACnE,CAAC;YACJ,CAAC,CAAC;YAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAElC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;gBACrB,MAAM,CACJ,IAAI,KAAK,CAAC,yBAAyB,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CACtE,CAAC;YACJ,CAAC,CAAC;YAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,KAAK,KAAK,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAE9B,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;gBACrB,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC;YAEF,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * localStorage-based storage provider.
3
+ *
4
+ * This is the simplest storage option, suitable for most browser environments.
5
+ * Data persists across page refreshes and browser sessions.
6
+ */
7
+ import type { Storage } from "./index.js";
8
+ /**
9
+ * Storage provider using browser localStorage.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const storage = new LocalStorageProvider();
14
+ * await storage.set('key', 'value');
15
+ * const value = await storage.get('key'); // 'value'
16
+ * ```
17
+ */
18
+ export declare class LocalStorageProvider implements Storage {
19
+ private prefix;
20
+ /**
21
+ * Create a new localStorage provider.
22
+ * @param prefix - Optional prefix for all keys (default: '')
23
+ */
24
+ constructor(prefix?: string);
25
+ private getKey;
26
+ get(key: string): Promise<string | null>;
27
+ set(key: string, value: string): Promise<void>;
28
+ remove(key: string): Promise<void>;
29
+ has(key: string): Promise<boolean>;
30
+ clear(): Promise<void>;
31
+ }
32
+ //# sourceMappingURL=localStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorage.d.ts","sourceRoot":"","sources":["../../src/storage/localStorage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;GASG;AACH,qBAAa,oBAAqB,YAAW,OAAO;IAClD,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;gBACS,MAAM,GAAE,MAAW;IAI/B,OAAO,CAAC,MAAM;IAIR,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAe7B"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * localStorage-based storage provider.
3
+ *
4
+ * This is the simplest storage option, suitable for most browser environments.
5
+ * Data persists across page refreshes and browser sessions.
6
+ */
7
+ /**
8
+ * Storage provider using browser localStorage.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const storage = new LocalStorageProvider();
13
+ * await storage.set('key', 'value');
14
+ * const value = await storage.get('key'); // 'value'
15
+ * ```
16
+ */
17
+ export class LocalStorageProvider {
18
+ prefix;
19
+ /**
20
+ * Create a new localStorage provider.
21
+ * @param prefix - Optional prefix for all keys (default: '')
22
+ */
23
+ constructor(prefix = "") {
24
+ this.prefix = prefix;
25
+ }
26
+ getKey(key) {
27
+ return this.prefix + key;
28
+ }
29
+ async get(key) {
30
+ return localStorage.getItem(this.getKey(key));
31
+ }
32
+ async set(key, value) {
33
+ localStorage.setItem(this.getKey(key), value);
34
+ }
35
+ async remove(key) {
36
+ localStorage.removeItem(this.getKey(key));
37
+ }
38
+ async has(key) {
39
+ return localStorage.getItem(this.getKey(key)) !== null;
40
+ }
41
+ async clear() {
42
+ if (this.prefix) {
43
+ // Only clear keys with our prefix
44
+ const keysToRemove = [];
45
+ for (let i = 0; i < localStorage.length; i++) {
46
+ const key = localStorage.key(i);
47
+ if (key && key.startsWith(this.prefix)) {
48
+ keysToRemove.push(key);
49
+ }
50
+ }
51
+ keysToRemove.forEach((key) => localStorage.removeItem(key));
52
+ }
53
+ else {
54
+ localStorage.clear();
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=localStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localStorage.js","sourceRoot":"","sources":["../../src/storage/localStorage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;GASG;AACH,MAAM,OAAO,oBAAoB;IACvB,MAAM,CAAS;IAEvB;;;OAGG;IACH,YAAY,SAAiB,EAAE;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,MAAM,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,kCAAkC;YAClC,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * In-memory storage provider.
3
+ *
4
+ * This is useful for testing or environments where persistent storage
5
+ * is not available. Data is lost when the page is refreshed.
6
+ */
7
+ import type { Storage } from "./index.js";
8
+ /**
9
+ * In-memory storage provider for testing.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const storage = new MemoryStorageProvider();
14
+ * await storage.set('key', 'value');
15
+ * const value = await storage.get('key'); // 'value'
16
+ * ```
17
+ */
18
+ export declare class MemoryStorageProvider implements Storage {
19
+ private data;
20
+ constructor();
21
+ get(key: string): Promise<string | null>;
22
+ set(key: string, value: string): Promise<void>;
23
+ remove(key: string): Promise<void>;
24
+ has(key: string): Promise<boolean>;
25
+ clear(): Promise<void>;
26
+ /**
27
+ * Get all keys in storage (for debugging).
28
+ */
29
+ keys(): string[];
30
+ /**
31
+ * Get the number of items in storage.
32
+ */
33
+ get size(): number;
34
+ }
35
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,OAAO;IACnD,OAAO,CAAC,IAAI,CAAsB;;IAM5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * In-memory storage provider.
3
+ *
4
+ * This is useful for testing or environments where persistent storage
5
+ * is not available. Data is lost when the page is refreshed.
6
+ */
7
+ /**
8
+ * In-memory storage provider for testing.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const storage = new MemoryStorageProvider();
13
+ * await storage.set('key', 'value');
14
+ * const value = await storage.get('key'); // 'value'
15
+ * ```
16
+ */
17
+ export class MemoryStorageProvider {
18
+ data;
19
+ constructor() {
20
+ this.data = new Map();
21
+ }
22
+ async get(key) {
23
+ return this.data.get(key) ?? null;
24
+ }
25
+ async set(key, value) {
26
+ this.data.set(key, value);
27
+ }
28
+ async remove(key) {
29
+ this.data.delete(key);
30
+ }
31
+ async has(key) {
32
+ return this.data.has(key);
33
+ }
34
+ async clear() {
35
+ this.data.clear();
36
+ }
37
+ /**
38
+ * Get all keys in storage (for debugging).
39
+ */
40
+ keys() {
41
+ return Array.from(this.data.keys());
42
+ }
43
+ /**
44
+ * Get the number of items in storage.
45
+ */
46
+ get size() {
47
+ return this.data.size;
48
+ }
49
+ }
50
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAqB;IACxB,IAAI,CAAsB;IAElC;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Type definitions for the Lendaswap Client SDK.
3
+ */
4
+ /**
5
+ * Bitcoin network type.
6
+ */
7
+ export type Network = "bitcoin" | "testnet" | "regtest" | "mutinynet";
8
+ /**
9
+ * Parameters derived for a swap operation.
10
+ */
11
+ export interface SwapParams {
12
+ /** Secret key (hex-encoded). */
13
+ ownSk: string;
14
+ /** Public key (hex-encoded). */
15
+ ownPk: string;
16
+ /** Preimage for HTLC (hex-encoded). */
17
+ preimage: string;
18
+ /** Hash of the preimage (hex-encoded). */
19
+ preimageHash: string;
20
+ /** User ID derived from HD wallet (hex-encoded). */
21
+ userId: string;
22
+ /** Key derivation index used. */
23
+ keyIndex: number;
24
+ }
25
+ /**
26
+ * VHTLC amounts returned from Arkade.
27
+ */
28
+ export interface VhtlcAmounts {
29
+ /** Amount that can be spent (in satoshis). */
30
+ spendable: number;
31
+ /** Amount already spent (in satoshis). */
32
+ spent: number;
33
+ /** Amount that can be recovered via refund (in satoshis). */
34
+ recoverable: number;
35
+ }
36
+ /**
37
+ * Swap data stored locally for VHTLC operations.
38
+ */
39
+ export interface SwapData {
40
+ /** HD derivation index for this swap. */
41
+ keyIndex: number;
42
+ /** Public key of Lendaswap service. */
43
+ lendaswapPk: string;
44
+ /** Arkade server public key. */
45
+ arkadeServerPk: string;
46
+ /** Absolute locktime for refunds. */
47
+ refundLocktime: number;
48
+ /** Relative delay for unilateral claim. */
49
+ unilateralClaimDelay: number;
50
+ /** Relative delay for unilateral refund. */
51
+ unilateralRefundDelay: number;
52
+ /** Relative delay for unilateral refund without receiver. */
53
+ unilateralRefundWithoutReceiverDelay: number;
54
+ /** Bitcoin network. */
55
+ network: string;
56
+ /** VHTLC address on Arkade. */
57
+ vhtlcAddress: string;
58
+ }
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,4CAA4C;IAC5C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,6DAA6D;IAC7D,oCAAoC,EAAE,MAAM,CAAC;IAC7C,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Type definitions for the Lendaswap Client SDK.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * High-level Wallet class wrapping the WASM SDK.
3
+ *
4
+ * This is the main entry point for using the Lendaswap Client SDK.
5
+ */
6
+ import type { WalletStorageProvider } from "./api.js";
7
+ import type { Network, SwapParams } from "./types.js";
8
+ /**
9
+ * Initialize the WASM module.
10
+ *
11
+ * This is called automatically when creating a Wallet, but can be called
12
+ * explicitly for eager initialization.
13
+ *
14
+ * @param wasmPath - Optional path to the WASM file (for Node.js environments)
15
+ */
16
+ export declare function initWasm(wasmPath?: string): Promise<void>;
17
+ /**
18
+ * High-level Wallet class for the Lendaswap Client SDK.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { Wallet, type WalletStorageProvider } from '@lendaswap/sdk';
23
+ *
24
+ * // Create a wallet storage provider using localStorage
25
+ * const walletStorage: WalletStorageProvider = {
26
+ * getMnemonic: async () => localStorage.getItem('mnemonic'),
27
+ * setMnemonic: async (mnemonic) => localStorage.setItem('mnemonic', mnemonic),
28
+ * getKeyIndex: async () => parseInt(localStorage.getItem('key_index') ?? '0'),
29
+ * setKeyIndex: async (index) => localStorage.setItem('key_index', index.toString()),
30
+ * };
31
+ * const wallet = await Wallet.create(walletStorage, 'bitcoin');
32
+ *
33
+ * // Generate or get existing mnemonic
34
+ * const mnemonic = await wallet.generateOrGetMnemonic();
35
+ *
36
+ * // Derive swap parameters
37
+ * const params = await wallet.deriveSwapParams();
38
+ * console.log(params.preimageHash);
39
+ * ```
40
+ */
41
+ export declare class Wallet {
42
+ private wasmWallet;
43
+ private storage;
44
+ private network;
45
+ private constructor();
46
+ /**
47
+ * Create a new Wallet instance.
48
+ *
49
+ * @param storage - Wallet storage provider for persisting mnemonic and key index
50
+ * @param network - Bitcoin network ('bitcoin', 'testnet', 'regtest', 'mutinynet')
51
+ * @param wasmPath - Optional path to the WASM file (for Node.js environments)
52
+ * @returns A new Wallet instance
53
+ */
54
+ static create(storage: WalletStorageProvider, network: Network, wasmPath?: string): Promise<Wallet>;
55
+ /**
56
+ * Get the network this wallet is configured for.
57
+ */
58
+ getNetwork(): Network;
59
+ /**
60
+ * Get the underlying storage provider.
61
+ */
62
+ getStorage(): WalletStorageProvider;
63
+ /**
64
+ * Generate a new mnemonic or return existing one.
65
+ *
66
+ * If a mnemonic already exists in storage, it is returned.
67
+ * Otherwise, a new 12-word mnemonic is generated and stored.
68
+ *
69
+ * @returns The mnemonic phrase
70
+ */
71
+ generateOrGetMnemonic(): Promise<string>;
72
+ /**
73
+ * Get the stored mnemonic (for backup display).
74
+ *
75
+ * @returns The mnemonic phrase, or null if not generated
76
+ */
77
+ getMnemonic(): Promise<string | null>;
78
+ /**
79
+ * Import a mnemonic phrase (replaces existing).
80
+ *
81
+ * @param phrase - The mnemonic phrase to import
82
+ */
83
+ importMnemonic(phrase: string): Promise<void>;
84
+ /**
85
+ * Derive swap parameters for a new swap.
86
+ *
87
+ * This automatically increments the key derivation index.
88
+ *
89
+ * @returns The derived swap parameters
90
+ */
91
+ deriveSwapParams(): Promise<SwapParams>;
92
+ /**
93
+ * Derive swap parameters at a specific index (for recovery).
94
+ *
95
+ * This does not modify the stored key index.
96
+ *
97
+ * @param index - The derivation index to use
98
+ * @returns The derived swap parameters
99
+ */
100
+ deriveSwapParamsAtIndex(index: number): Promise<SwapParams>;
101
+ /**
102
+ * Get the user ID Xpub for wallet recovery.
103
+ *
104
+ * @returns The extended public key, or null if no mnemonic
105
+ */
106
+ getUserIdXpub(): Promise<string | null>;
107
+ }
108
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKtD;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/D;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO;IAUP;;;;;;;OAOG;WACU,MAAM,CACjB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAelB;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,UAAU,IAAI,qBAAqB;IAInC;;;;;;;OAOG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9C;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3C;;;;OAIG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;;;;;OAMG;IACG,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC;IAY7C;;;;;;;OAOG;IACG,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAYjE;;;;OAIG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAI9C"}