@lendasat/lendaswap-sdk 0.1.8 → 0.1.65
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/api.d.ts +138 -160
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +174 -113
- package/dist/api.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/price-calculations.d.ts +135 -0
- package/dist/price-calculations.d.ts.map +1 -0
- package/dist/price-calculations.js +171 -0
- package/dist/price-calculations.js.map +1 -0
- package/dist/price-calculations.test.d.ts +2 -0
- package/dist/price-calculations.test.d.ts.map +1 -0
- package/dist/price-calculations.test.js +173 -0
- package/dist/price-calculations.test.js.map +1 -0
- package/dist/price-feed.d.ts +3 -0
- package/dist/price-feed.d.ts.map +1 -1
- package/dist/price-feed.js.map +1 -1
- package/dist/storage/dexieSwapStorage.d.ts +12 -10
- package/dist/storage/dexieSwapStorage.d.ts.map +1 -1
- package/dist/storage/dexieSwapStorage.js +63 -2
- package/dist/storage/dexieSwapStorage.js.map +1 -1
- package/dist/storage/dexieVtxoSwapStorage.d.ts +105 -0
- package/dist/storage/dexieVtxoSwapStorage.d.ts.map +1 -0
- package/dist/storage/dexieVtxoSwapStorage.js +149 -0
- package/dist/storage/dexieVtxoSwapStorage.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/usd-price.d.ts.map +1 -1
- package/dist/usd-price.js +1 -0
- package/dist/usd-price.js.map +1 -1
- package/package.json +1 -1
- package/wasm/lendaswap_wasm_sdk.d.ts +361 -43
- package/wasm/lendaswap_wasm_sdk_bg.js +2499 -483
- package/wasm/lendaswap_wasm_sdk_bg.wasm +0 -0
- package/wasm/lendaswap_wasm_sdk_bg.wasm.d.ts +259 -65
|
@@ -12,9 +12,49 @@ class LendaswapDatabase extends Dexie {
|
|
|
12
12
|
swaps;
|
|
13
13
|
constructor(dbName = "lendaswap") {
|
|
14
14
|
super(dbName);
|
|
15
|
+
// Version 1: Original schema
|
|
15
16
|
this.version(1).stores({
|
|
16
17
|
swaps: "id", // Primary key only, no additional indexes needed
|
|
17
18
|
});
|
|
19
|
+
// Version 2: Migrate refund_locktime field names
|
|
20
|
+
// - btc_to_evm: refund_locktime -> vhtlc_refund_locktime, add evm_refund_locktime
|
|
21
|
+
// - evm_to_btc: refund_locktime -> evm_refund_locktime, add vhtlc_refund_locktime
|
|
22
|
+
this.version(2)
|
|
23
|
+
.stores({
|
|
24
|
+
swaps: "id",
|
|
25
|
+
})
|
|
26
|
+
.upgrade(async (tx) => {
|
|
27
|
+
const TWELVE_HOURS_SECONDS = 43200;
|
|
28
|
+
await tx
|
|
29
|
+
.table("swaps")
|
|
30
|
+
.toCollection()
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
|
+
.modify((record) => {
|
|
33
|
+
const response = record.response;
|
|
34
|
+
if (!response || !("refund_locktime" in response))
|
|
35
|
+
return;
|
|
36
|
+
// Skip BtcToArkade swaps - they already have correct field names
|
|
37
|
+
if ("btc_htlc_address" in response)
|
|
38
|
+
return;
|
|
39
|
+
const oldLocktime = response.refund_locktime;
|
|
40
|
+
// Detect swap type: evm_to_btc has source_token_address field
|
|
41
|
+
const isEvmToBtc = "source_token_address" in response;
|
|
42
|
+
if (isEvmToBtc) {
|
|
43
|
+
// evm_to_btc: refund_locktime -> evm_refund_locktime
|
|
44
|
+
// vhtlc_refund_locktime = evm_refund_locktime - 12h
|
|
45
|
+
response.evm_refund_locktime = oldLocktime;
|
|
46
|
+
response.vhtlc_refund_locktime =
|
|
47
|
+
oldLocktime - TWELVE_HOURS_SECONDS;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// btc_to_evm: refund_locktime -> vhtlc_refund_locktime
|
|
51
|
+
// evm_refund_locktime = vhtlc_refund_locktime - 12h
|
|
52
|
+
response.vhtlc_refund_locktime = oldLocktime;
|
|
53
|
+
response.evm_refund_locktime = oldLocktime - TWELVE_HOURS_SECONDS;
|
|
54
|
+
}
|
|
55
|
+
delete response.refund_locktime;
|
|
56
|
+
});
|
|
57
|
+
});
|
|
18
58
|
}
|
|
19
59
|
}
|
|
20
60
|
/**
|
|
@@ -99,10 +139,12 @@ export class DexieSwapStorageProvider {
|
|
|
99
139
|
/**
|
|
100
140
|
* Get all stored swaps.
|
|
101
141
|
*
|
|
102
|
-
* @returns Array of all swap data
|
|
142
|
+
* @returns Array of all swap data
|
|
103
143
|
*/
|
|
104
144
|
async getAll() {
|
|
105
|
-
|
|
145
|
+
const records = await this.db.swaps.toArray();
|
|
146
|
+
// Remove the id field from each record
|
|
147
|
+
return records.map(({ id: _, ...data }) => data);
|
|
106
148
|
}
|
|
107
149
|
/**
|
|
108
150
|
* Close the database connection.
|
|
@@ -110,6 +152,25 @@ export class DexieSwapStorageProvider {
|
|
|
110
152
|
close() {
|
|
111
153
|
this.db.close();
|
|
112
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Get raw swap_params for a potentially corrupted entry.
|
|
157
|
+
*
|
|
158
|
+
* This method reads the raw data from IndexedDB and extracts just the swap_params,
|
|
159
|
+
* which can succeed even when the full ExtendedSwapStorageData fails to deserialize.
|
|
160
|
+
*
|
|
161
|
+
* @param swapId - The swap ID
|
|
162
|
+
* @returns The swap_params as raw object, or null if not found or invalid
|
|
163
|
+
*/
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
165
|
+
async getRawSwapParams(swapId) {
|
|
166
|
+
// Use raw IndexedDB access to avoid type checking issues
|
|
167
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
168
|
+
const record = (await this.db.swaps.get(swapId));
|
|
169
|
+
if (!record || !record.swap_params) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
return record.swap_params;
|
|
173
|
+
}
|
|
113
174
|
}
|
|
114
175
|
/**
|
|
115
176
|
* Create a Dexie-based swap storage provider.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dexieSwapStorage.js","sourceRoot":"","sources":["../../src/storage/dexieSwapStorage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAW1C;;GAEG;AACH,MAAM,iBAAkB,SAAQ,KAAK;IACnC,KAAK,CAA6B;IAElC,YAAY,MAAM,GAAG,WAAW;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dexieSwapStorage.js","sourceRoot":"","sources":["../../src/storage/dexieSwapStorage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAW1C;;GAEG;AACH,MAAM,iBAAkB,SAAQ,KAAK;IACnC,KAAK,CAA6B;IAElC,YAAY,MAAM,GAAG,WAAW;QAC9B,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACrB,KAAK,EAAE,IAAI,EAAE,iDAAiD;SAC/D,CAAC,CAAC;QAEH,iDAAiD;QACjD,kFAAkF;QAClF,kFAAkF;QAClF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aACZ,MAAM,CAAC;YACN,KAAK,EAAE,IAAI;SACZ,CAAC;aACD,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACpB,MAAM,oBAAoB,GAAG,KAAK,CAAC;YAEnC,MAAM,EAAE;iBACL,KAAK,CAAC,OAAO,CAAC;iBACd,YAAY,EAAE;gBACf,8DAA8D;iBAC7D,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE;gBACtB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,iBAAiB,IAAI,QAAQ,CAAC;oBAAE,OAAO;gBAE1D,iEAAiE;gBACjE,IAAI,kBAAkB,IAAI,QAAQ;oBAAE,OAAO;gBAE3C,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAE7C,8DAA8D;gBAC9D,MAAM,UAAU,GAAG,sBAAsB,IAAI,QAAQ,CAAC;gBAEtD,IAAI,UAAU,EAAE,CAAC;oBACf,qDAAqD;oBACrD,oDAAoD;oBACpD,QAAQ,CAAC,mBAAmB,GAAG,WAAW,CAAC;oBAC3C,QAAQ,CAAC,qBAAqB;wBAC5B,WAAW,GAAG,oBAAoB,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,uDAAuD;oBACvD,oDAAoD;oBACpD,QAAQ,CAAC,qBAAqB,GAAG,WAAW,CAAC;oBAC7C,QAAQ,CAAC,mBAAmB,GAAG,WAAW,GAAG,oBAAoB,CAAC;gBACpE,CAAC;gBAED,OAAO,QAAQ,CAAC,eAAe,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,wBAAwB;IAC3B,EAAE,CAAoB;IAE9B;;;;OAIG;IACH,YAAY,MAAe;QACzB,IAAI,CAAC,EAAE,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,kFAAkF;QAClF,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,IAA6B;QACvD,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAa,CAAC;IACxE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,uCAAuC;QACvC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAED;;;;;;;;OAQG;IACH,8DAA8D;IAC9D,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,yDAAyD;QACzD,8DAA8D;QAC9D,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAQ,CAAC;QACxD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAe;IAEf,OAAO,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dexie-based VTXO swap storage provider for IndexedDB.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a typed VTXO swap storage implementation using Dexie,
|
|
5
|
+
* which is a wrapper around IndexedDB that provides a simpler API.
|
|
6
|
+
*/
|
|
7
|
+
import type { ExtendedVtxoSwapStorageData } from "../api.js";
|
|
8
|
+
/**
|
|
9
|
+
* Dexie-based VTXO swap storage provider.
|
|
10
|
+
*
|
|
11
|
+
* Stores VTXO swap data as typed objects in IndexedDB using Dexie.
|
|
12
|
+
* This provides better performance and querying capabilities compared
|
|
13
|
+
* to storing serialized JSON strings.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { DexieVtxoSwapStorageProvider } from '@lendasat/lendaswap-sdk';
|
|
18
|
+
*
|
|
19
|
+
* const vtxoSwapStorage = new DexieVtxoSwapStorageProvider();
|
|
20
|
+
*
|
|
21
|
+
* // Use with the Client
|
|
22
|
+
* const client = await Client.create(
|
|
23
|
+
* 'https://apilendaswap.lendasat.com',
|
|
24
|
+
* walletStorage,
|
|
25
|
+
* swapStorage,
|
|
26
|
+
* vtxoSwapStorage,
|
|
27
|
+
* 'bitcoin',
|
|
28
|
+
* 'https://arkade.computer'
|
|
29
|
+
* );
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class DexieVtxoSwapStorageProvider {
|
|
33
|
+
private db;
|
|
34
|
+
/**
|
|
35
|
+
* Create a new DexieVtxoSwapStorageProvider.
|
|
36
|
+
*
|
|
37
|
+
* @param dbName - Optional database name (default: "lendaswap_vtxo_swaps")
|
|
38
|
+
*/
|
|
39
|
+
constructor(dbName?: string);
|
|
40
|
+
/**
|
|
41
|
+
* Get VTXO swap data by swap ID.
|
|
42
|
+
*
|
|
43
|
+
* @param swapId - The swap ID
|
|
44
|
+
* @returns The VTXO swap data, or null if not found
|
|
45
|
+
*/
|
|
46
|
+
get(swapId: string): Promise<ExtendedVtxoSwapStorageData | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Store VTXO swap data.
|
|
49
|
+
*
|
|
50
|
+
* @param swapId - The swap ID
|
|
51
|
+
* @param data - The VTXO swap data to store
|
|
52
|
+
*/
|
|
53
|
+
store(swapId: string, data: ExtendedVtxoSwapStorageData): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Delete VTXO swap data by swap ID.
|
|
56
|
+
*
|
|
57
|
+
* @param swapId - The swap ID
|
|
58
|
+
*/
|
|
59
|
+
delete(swapId: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* List all stored VTXO swap IDs.
|
|
62
|
+
*
|
|
63
|
+
* @returns Array of swap IDs
|
|
64
|
+
*/
|
|
65
|
+
list(): Promise<string[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Clear all VTXO swap data.
|
|
68
|
+
*/
|
|
69
|
+
clear(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Get all stored VTXO swaps.
|
|
72
|
+
*
|
|
73
|
+
* @returns Array of all VTXO swap data
|
|
74
|
+
*/
|
|
75
|
+
getAll(): Promise<ExtendedVtxoSwapStorageData[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Close the database connection.
|
|
78
|
+
*/
|
|
79
|
+
close(): void;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create a Dexie-based VTXO swap storage provider.
|
|
83
|
+
*
|
|
84
|
+
* This is a convenience function for creating a DexieVtxoSwapStorageProvider.
|
|
85
|
+
*
|
|
86
|
+
* @param dbName - Optional database name (default: "lendaswap_vtxo_swaps")
|
|
87
|
+
* @returns A new DexieVtxoSwapStorageProvider instance
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* import { createDexieVtxoSwapStorage, Client } from '@lendasat/lendaswap-sdk';
|
|
92
|
+
*
|
|
93
|
+
* const vtxoSwapStorage = createDexieVtxoSwapStorage();
|
|
94
|
+
* const client = await Client.create(
|
|
95
|
+
* 'https://apilendaswap.lendasat.com',
|
|
96
|
+
* walletStorage,
|
|
97
|
+
* swapStorage,
|
|
98
|
+
* vtxoSwapStorage,
|
|
99
|
+
* 'bitcoin',
|
|
100
|
+
* 'https://arkade.computer'
|
|
101
|
+
* );
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare function createDexieVtxoSwapStorage(dbName?: string): DexieVtxoSwapStorageProvider;
|
|
105
|
+
//# sourceMappingURL=dexieVtxoSwapStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dexieVtxoSwapStorage.d.ts","sourceRoot":"","sources":["../../src/storage/dexieVtxoSwapStorage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AAsE7D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,EAAE,CAA4B;IAEtC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,MAAM;IAI3B;;;;;OAKG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC;IAUtE;;;;;OAKG;IACG,KAAK,CACT,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,2BAA2B,GAChC,OAAO,CAAC,IAAI,CAAC;IAUhB;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAQtD;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,CAAC,EAAE,MAAM,GACd,4BAA4B,CAE9B"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dexie-based VTXO swap storage provider for IndexedDB.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a typed VTXO swap storage implementation using Dexie,
|
|
5
|
+
* which is a wrapper around IndexedDB that provides a simpler API.
|
|
6
|
+
*/
|
|
7
|
+
import Dexie from "dexie";
|
|
8
|
+
/**
|
|
9
|
+
* Dexie database for storing VTXO swap data.
|
|
10
|
+
*/
|
|
11
|
+
class LendaswapVtxoSwapDatabase extends Dexie {
|
|
12
|
+
vtxoSwaps;
|
|
13
|
+
constructor(dbName = "lendaswap_vtxo_swaps") {
|
|
14
|
+
super(dbName);
|
|
15
|
+
this.version(1).stores({
|
|
16
|
+
vtxoSwaps: "id", // Primary key only, no additional indexes needed
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Dexie-based VTXO swap storage provider.
|
|
22
|
+
*
|
|
23
|
+
* Stores VTXO swap data as typed objects in IndexedDB using Dexie.
|
|
24
|
+
* This provides better performance and querying capabilities compared
|
|
25
|
+
* to storing serialized JSON strings.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { DexieVtxoSwapStorageProvider } from '@lendasat/lendaswap-sdk';
|
|
30
|
+
*
|
|
31
|
+
* const vtxoSwapStorage = new DexieVtxoSwapStorageProvider();
|
|
32
|
+
*
|
|
33
|
+
* // Use with the Client
|
|
34
|
+
* const client = await Client.create(
|
|
35
|
+
* 'https://apilendaswap.lendasat.com',
|
|
36
|
+
* walletStorage,
|
|
37
|
+
* swapStorage,
|
|
38
|
+
* vtxoSwapStorage,
|
|
39
|
+
* 'bitcoin',
|
|
40
|
+
* 'https://arkade.computer'
|
|
41
|
+
* );
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class DexieVtxoSwapStorageProvider {
|
|
45
|
+
db;
|
|
46
|
+
/**
|
|
47
|
+
* Create a new DexieVtxoSwapStorageProvider.
|
|
48
|
+
*
|
|
49
|
+
* @param dbName - Optional database name (default: "lendaswap_vtxo_swaps")
|
|
50
|
+
*/
|
|
51
|
+
constructor(dbName) {
|
|
52
|
+
this.db = new LendaswapVtxoSwapDatabase(dbName);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get VTXO swap data by swap ID.
|
|
56
|
+
*
|
|
57
|
+
* @param swapId - The swap ID
|
|
58
|
+
* @returns The VTXO swap data, or null if not found
|
|
59
|
+
*/
|
|
60
|
+
async get(swapId) {
|
|
61
|
+
const record = await this.db.vtxoSwaps.get(swapId);
|
|
62
|
+
if (!record) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
// Remove the id field before returning
|
|
66
|
+
const { id: _, ...data } = record;
|
|
67
|
+
return data;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Store VTXO swap data.
|
|
71
|
+
*
|
|
72
|
+
* @param swapId - The swap ID
|
|
73
|
+
* @param data - The VTXO swap data to store
|
|
74
|
+
*/
|
|
75
|
+
async store(swapId, data) {
|
|
76
|
+
// Data may be a WASM class or plain object - both have same property access
|
|
77
|
+
const record = {
|
|
78
|
+
id: swapId,
|
|
79
|
+
response: data.response,
|
|
80
|
+
swap_params: data.swap_params,
|
|
81
|
+
};
|
|
82
|
+
await this.db.vtxoSwaps.put(record);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Delete VTXO swap data by swap ID.
|
|
86
|
+
*
|
|
87
|
+
* @param swapId - The swap ID
|
|
88
|
+
*/
|
|
89
|
+
async delete(swapId) {
|
|
90
|
+
await this.db.vtxoSwaps.delete(swapId);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* List all stored VTXO swap IDs.
|
|
94
|
+
*
|
|
95
|
+
* @returns Array of swap IDs
|
|
96
|
+
*/
|
|
97
|
+
async list() {
|
|
98
|
+
return (await this.db.vtxoSwaps.toCollection().primaryKeys());
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Clear all VTXO swap data.
|
|
102
|
+
*/
|
|
103
|
+
async clear() {
|
|
104
|
+
await this.db.vtxoSwaps.clear();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get all stored VTXO swaps.
|
|
108
|
+
*
|
|
109
|
+
* @returns Array of all VTXO swap data
|
|
110
|
+
*/
|
|
111
|
+
async getAll() {
|
|
112
|
+
const records = await this.db.vtxoSwaps.toArray();
|
|
113
|
+
// Remove the id field from each record
|
|
114
|
+
return records.map(({ id: _, ...data }) => data);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Close the database connection.
|
|
118
|
+
*/
|
|
119
|
+
close() {
|
|
120
|
+
this.db.close();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a Dexie-based VTXO swap storage provider.
|
|
125
|
+
*
|
|
126
|
+
* This is a convenience function for creating a DexieVtxoSwapStorageProvider.
|
|
127
|
+
*
|
|
128
|
+
* @param dbName - Optional database name (default: "lendaswap_vtxo_swaps")
|
|
129
|
+
* @returns A new DexieVtxoSwapStorageProvider instance
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* import { createDexieVtxoSwapStorage, Client } from '@lendasat/lendaswap-sdk';
|
|
134
|
+
*
|
|
135
|
+
* const vtxoSwapStorage = createDexieVtxoSwapStorage();
|
|
136
|
+
* const client = await Client.create(
|
|
137
|
+
* 'https://apilendaswap.lendasat.com',
|
|
138
|
+
* walletStorage,
|
|
139
|
+
* swapStorage,
|
|
140
|
+
* vtxoSwapStorage,
|
|
141
|
+
* 'bitcoin',
|
|
142
|
+
* 'https://arkade.computer'
|
|
143
|
+
* );
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export function createDexieVtxoSwapStorage(dbName) {
|
|
147
|
+
return new DexieVtxoSwapStorageProvider(dbName);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=dexieVtxoSwapStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dexieVtxoSwapStorage.js","sourceRoot":"","sources":["../../src/storage/dexieVtxoSwapStorage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAyD1C;;GAEG;AACH,MAAM,yBAA0B,SAAQ,KAAK;IAC3C,SAAS,CAAiC;IAE1C,YAAY,MAAM,GAAG,sBAAsB;QACzC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACrB,SAAS,EAAE,IAAI,EAAE,iDAAiD;SACnE,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,4BAA4B;IAC/B,EAAE,CAA4B;IAEtC;;;;OAIG;IACH,YAAY,MAAe;QACzB,IAAI,CAAC,EAAE,GAAG,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,uCAAuC;QACvC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAClC,OAAO,IAAmC,CAAC;IAC7C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CACT,MAAc,EACd,IAAiC;QAEjC,4EAA4E;QAC5E,MAAM,MAAM,GAAmB;YAC7B,EAAE,EAAE,MAAM;YACV,QAAQ,EAAE,IAAI,CAAC,QAAiC;YAChD,WAAW,EAAE,IAAI,CAAC,WAA8B;SACjD,CAAC;QACF,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,CAAa,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAClD,uCAAuC;QACvC,OAAO,OAAO,CAAC,GAAG,CAChB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAmC,CAC5D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAe;IAEf,OAAO,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC"}
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -14,5 +14,6 @@ export declare const STORAGE_KEYS: {
|
|
|
14
14
|
readonly KEY_INDEX: "lendaswap_hd_index";
|
|
15
15
|
};
|
|
16
16
|
export { createDexieSwapStorage, DexieSwapStorageProvider, } from "./dexieSwapStorage.js";
|
|
17
|
+
export { createDexieVtxoSwapStorage, DexieVtxoSwapStorageProvider, } from "./dexieVtxoSwapStorage.js";
|
|
17
18
|
export { createDexieWalletStorage, DexieWalletStorageProvider, } from "./dexieWalletStorage.js";
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +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"}
|
|
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,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC"}
|
package/dist/storage/index.js
CHANGED
|
@@ -15,6 +15,8 @@ export const STORAGE_KEYS = {
|
|
|
15
15
|
};
|
|
16
16
|
// Swap storage (typed storage for swap data using Dexie/IndexedDB)
|
|
17
17
|
export { createDexieSwapStorage, DexieSwapStorageProvider, } from "./dexieSwapStorage.js";
|
|
18
|
+
// VTXO Swap storage (typed storage for VTXO swap data using Dexie/IndexedDB)
|
|
19
|
+
export { createDexieVtxoSwapStorage, DexieVtxoSwapStorageProvider, } from "./dexieVtxoSwapStorage.js";
|
|
18
20
|
// Wallet storage (typed storage for wallet data using Dexie/IndexedDB)
|
|
19
21
|
export { createDexieWalletStorage, DexieWalletStorageProvider, } from "./dexieWalletStorage.js";
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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"}
|
|
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,6EAA6E;AAC7E,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AACnC,uEAAuE;AACvE,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC"}
|
package/dist/usd-price.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usd-price.d.ts","sourceRoot":"","sources":["../src/usd-price.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"usd-price.d.ts","sourceRoot":"","sources":["../src/usd-price.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA2C9C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAEpE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,EAAE,CAAC,CAwE3B;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,aAAa,EAAE,CAE/D"}
|
package/dist/usd-price.js
CHANGED
package/dist/usd-price.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usd-price.js","sourceRoot":"","sources":["../src/usd-price.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH;;GAEG;AACH,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEzD;;;GAGG;AACH,MAAM,kBAAkB,GAA2B;IACjD,mBAAmB;IACnB,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"usd-price.js","sourceRoot":"","sources":["../src/usd-price.ts"],"names":[],"mappings":"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"}
|