@lendasat/lendaswap-sdk-pure 0.2.21-preview.0 → 0.2.21
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/client.d.ts.map +1 -1
- package/dist/api/client.js +4 -1
- package/dist/api/client.js.map +1 -1
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +4 -1
- package/dist/price-feed.d.ts +0 -124
- package/dist/price-feed.d.ts.map +0 -1
- package/dist/price-feed.js +0 -178
- package/dist/price-feed.js.map +0 -1
- package/dist/src/api/client.d.ts +0 -31
- package/dist/src/api/client.d.ts.map +0 -1
- package/dist/src/api/client.js +0 -12
- package/dist/src/api/client.js.map +0 -1
- package/dist/src/arkade.d.ts +0 -36
- package/dist/src/arkade.d.ts.map +0 -1
- package/dist/src/arkade.js +0 -68
- package/dist/src/arkade.js.map +0 -1
- package/dist/src/client.d.ts +0 -760
- package/dist/src/client.d.ts.map +0 -1
- package/dist/src/client.js +0 -2169
- package/dist/src/client.js.map +0 -1
- package/dist/src/create/arkade.d.ts +0 -34
- package/dist/src/create/arkade.d.ts.map +0 -1
- package/dist/src/create/arkade.js +0 -76
- package/dist/src/create/arkade.js.map +0 -1
- package/dist/src/create/bitcoin-to-arkade.d.ts +0 -36
- package/dist/src/create/bitcoin-to-arkade.d.ts.map +0 -1
- package/dist/src/create/bitcoin-to-arkade.js +0 -69
- package/dist/src/create/bitcoin-to-arkade.js.map +0 -1
- package/dist/src/create/bitcoin.d.ts +0 -31
- package/dist/src/create/bitcoin.d.ts.map +0 -1
- package/dist/src/create/bitcoin.js +0 -67
- package/dist/src/create/bitcoin.js.map +0 -1
- package/dist/src/create/evm-to-arkade.d.ts +0 -34
- package/dist/src/create/evm-to-arkade.d.ts.map +0 -1
- package/dist/src/create/evm-to-arkade.js +0 -69
- package/dist/src/create/evm-to-arkade.js.map +0 -1
- package/dist/src/create/evm-to-bitcoin.d.ts +0 -35
- package/dist/src/create/evm-to-bitcoin.d.ts.map +0 -1
- package/dist/src/create/evm-to-bitcoin.js +0 -71
- package/dist/src/create/evm-to-bitcoin.js.map +0 -1
- package/dist/src/create/evm-to-lightning.d.ts +0 -34
- package/dist/src/create/evm-to-lightning.d.ts.map +0 -1
- package/dist/src/create/evm-to-lightning.js +0 -66
- package/dist/src/create/evm-to-lightning.js.map +0 -1
- package/dist/src/create/index.d.ts +0 -19
- package/dist/src/create/index.d.ts.map +0 -1
- package/dist/src/create/index.js +0 -18
- package/dist/src/create/index.js.map +0 -1
- package/dist/src/create/lightning.d.ts +0 -31
- package/dist/src/create/lightning.d.ts.map +0 -1
- package/dist/src/create/lightning.js +0 -72
- package/dist/src/create/lightning.js.map +0 -1
- package/dist/src/create/types.d.ts +0 -247
- package/dist/src/create/types.d.ts.map +0 -1
- package/dist/src/create/types.js +0 -5
- package/dist/src/create/types.js.map +0 -1
- package/dist/src/delegate.d.ts +0 -62
- package/dist/src/delegate.d.ts.map +0 -1
- package/dist/src/delegate.js +0 -284
- package/dist/src/delegate.js.map +0 -1
- package/dist/src/esplora.d.ts +0 -41
- package/dist/src/esplora.d.ts.map +0 -1
- package/dist/src/esplora.js +0 -47
- package/dist/src/esplora.js.map +0 -1
- package/dist/src/evm/coordinator.d.ts +0 -247
- package/dist/src/evm/coordinator.d.ts.map +0 -1
- package/dist/src/evm/coordinator.js +0 -414
- package/dist/src/evm/coordinator.js.map +0 -1
- package/dist/src/evm/htlc.d.ts +0 -238
- package/dist/src/evm/htlc.d.ts.map +0 -1
- package/dist/src/evm/htlc.js +0 -278
- package/dist/src/evm/htlc.js.map +0 -1
- package/dist/src/evm/index.d.ts +0 -9
- package/dist/src/evm/index.d.ts.map +0 -1
- package/dist/src/evm/index.js +0 -9
- package/dist/src/evm/index.js.map +0 -1
- package/dist/src/evm/signing.d.ts +0 -30
- package/dist/src/evm/signing.d.ts.map +0 -1
- package/dist/src/evm/signing.js +0 -91
- package/dist/src/evm/signing.js.map +0 -1
- package/dist/src/generated/api.d.ts +0 -2736
- package/dist/src/generated/api.d.ts.map +0 -1
- package/dist/src/generated/api.js +0 -6
- package/dist/src/generated/api.js.map +0 -1
- package/dist/src/index.d.ts +0 -18
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -24
- package/dist/src/index.js.map +0 -1
- package/dist/src/node.d.ts +0 -19
- package/dist/src/node.d.ts.map +0 -1
- package/dist/src/node.js +0 -19
- package/dist/src/node.js.map +0 -1
- package/dist/src/price-calculations.d.ts +0 -109
- package/dist/src/price-calculations.d.ts.map +0 -1
- package/dist/src/price-calculations.js +0 -135
- package/dist/src/price-calculations.js.map +0 -1
- package/dist/src/redeem/arkade.d.ts +0 -65
- package/dist/src/redeem/arkade.d.ts.map +0 -1
- package/dist/src/redeem/arkade.js +0 -217
- package/dist/src/redeem/arkade.js.map +0 -1
- package/dist/src/redeem/ethereum.d.ts +0 -52
- package/dist/src/redeem/ethereum.d.ts.map +0 -1
- package/dist/src/redeem/ethereum.js +0 -206
- package/dist/src/redeem/ethereum.js.map +0 -1
- package/dist/src/redeem/gasless.d.ts +0 -41
- package/dist/src/redeem/gasless.d.ts.map +0 -1
- package/dist/src/redeem/gasless.js +0 -71
- package/dist/src/redeem/gasless.js.map +0 -1
- package/dist/src/redeem/index.d.ts +0 -49
- package/dist/src/redeem/index.d.ts.map +0 -1
- package/dist/src/redeem/index.js +0 -189
- package/dist/src/redeem/index.js.map +0 -1
- package/dist/src/redeem/types.d.ts +0 -126
- package/dist/src/redeem/types.d.ts.map +0 -1
- package/dist/src/redeem/types.js +0 -36
- package/dist/src/redeem/types.js.map +0 -1
- package/dist/src/refund/arkade.d.ts +0 -62
- package/dist/src/refund/arkade.d.ts.map +0 -1
- package/dist/src/refund/arkade.js +0 -212
- package/dist/src/refund/arkade.js.map +0 -1
- package/dist/src/refund/index.d.ts +0 -10
- package/dist/src/refund/index.d.ts.map +0 -1
- package/dist/src/refund/index.js +0 -10
- package/dist/src/refund/index.js.map +0 -1
- package/dist/src/refund/onchain.d.ts +0 -137
- package/dist/src/refund/onchain.d.ts.map +0 -1
- package/dist/src/refund/onchain.js +0 -366
- package/dist/src/refund/onchain.js.map +0 -1
- package/dist/src/signer/index.d.ts +0 -106
- package/dist/src/signer/index.d.ts.map +0 -1
- package/dist/src/signer/index.js +0 -179
- package/dist/src/signer/index.js.map +0 -1
- package/dist/src/storage/idb.d.ts +0 -70
- package/dist/src/storage/idb.d.ts.map +0 -1
- package/dist/src/storage/idb.js +0 -236
- package/dist/src/storage/idb.js.map +0 -1
- package/dist/src/storage/index.d.ts +0 -152
- package/dist/src/storage/index.d.ts.map +0 -1
- package/dist/src/storage/index.js +0 -98
- package/dist/src/storage/index.js.map +0 -1
- package/dist/src/storage/sqlite.d.ts +0 -95
- package/dist/src/storage/sqlite.d.ts.map +0 -1
- package/dist/src/storage/sqlite.js +0 -206
- package/dist/src/storage/sqlite.js.map +0 -1
- package/dist/src/storage/types.d.ts +0 -57
- package/dist/src/storage/types.d.ts.map +0 -1
- package/dist/src/storage/types.js +0 -9
- package/dist/src/storage/types.js.map +0 -1
- package/dist/src/tokens.d.ts +0 -29
- package/dist/src/tokens.d.ts.map +0 -1
- package/dist/src/tokens.js +0 -89
- package/dist/src/tokens.js.map +0 -1
- package/dist/src/usd-price.d.ts +0 -34
- package/dist/src/usd-price.d.ts.map +0 -1
- package/dist/src/usd-price.js +0 -83
- package/dist/src/usd-price.js.map +0 -1
- package/dist/tests/api-client.test.d.ts +0 -2
- package/dist/tests/api-client.test.d.ts.map +0 -1
- package/dist/tests/api-client.test.js +0 -86
- package/dist/tests/api-client.test.js.map +0 -1
- package/dist/tests/client.test.d.ts +0 -2
- package/dist/tests/client.test.d.ts.map +0 -1
- package/dist/tests/client.test.js +0 -150
- package/dist/tests/client.test.js.map +0 -1
- package/dist/tests/index.test.d.ts +0 -2
- package/dist/tests/index.test.d.ts.map +0 -1
- package/dist/tests/index.test.js +0 -8
- package/dist/tests/index.test.js.map +0 -1
- package/dist/tests/onchain-refund.test.d.ts +0 -2
- package/dist/tests/onchain-refund.test.d.ts.map +0 -1
- package/dist/tests/onchain-refund.test.js +0 -279
- package/dist/tests/onchain-refund.test.js.map +0 -1
- package/dist/tests/signer.test.d.ts +0 -2
- package/dist/tests/signer.test.d.ts.map +0 -1
- package/dist/tests/signer.test.js +0 -92
- package/dist/tests/signer.test.js.map +0 -1
- package/dist/tests/sqlite-storage.test.d.ts +0 -2
- package/dist/tests/sqlite-storage.test.d.ts.map +0 -1
- package/dist/tests/sqlite-storage.test.js +0 -160
- package/dist/tests/sqlite-storage.test.js.map +0 -1
- package/dist/tests/storage.test.d.ts +0 -2
- package/dist/tests/storage.test.d.ts.map +0 -1
- package/dist/tests/storage.test.js +0 -184
- package/dist/tests/storage.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/usdt0-bridge/bridge.d.ts +0 -82
- package/dist/usdt0-bridge/bridge.d.ts.map +0 -1
- package/dist/usdt0-bridge/bridge.js +0 -56
- package/dist/usdt0-bridge/bridge.js.map +0 -1
- package/dist/usdt0-bridge/chains.d.ts +0 -41
- package/dist/usdt0-bridge/chains.d.ts.map +0 -1
- package/dist/usdt0-bridge/chains.js +0 -117
- package/dist/usdt0-bridge/chains.js.map +0 -1
- package/dist/usdt0-bridge/layerzero-tracker.d.ts +0 -34
- package/dist/usdt0-bridge/layerzero-tracker.d.ts.map +0 -1
- package/dist/usdt0-bridge/layerzero-tracker.js +0 -86
- package/dist/usdt0-bridge/layerzero-tracker.js.map +0 -1
- package/dist/usdt0-bridge/oft-abi.d.ts +0 -145
- package/dist/usdt0-bridge/oft-abi.d.ts.map +0 -1
- package/dist/usdt0-bridge/oft-abi.js +0 -117
- package/dist/usdt0-bridge/oft-abi.js.map +0 -1
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IndexedDB storage implementation for browser environments using Dexie.
|
|
3
|
-
*
|
|
4
|
-
* This module provides persistent storage using IndexedDB via Dexie,
|
|
5
|
-
* suitable for web browsers and environments that support IndexedDB.
|
|
6
|
-
*/
|
|
7
|
-
import type { GetSwapResponse } from "../api/client.js";
|
|
8
|
-
import type { StoredSwap, SwapStorage, WalletStorage } from "./index.js";
|
|
9
|
-
/**
|
|
10
|
-
* IndexedDB implementation of WalletStorage using Dexie.
|
|
11
|
-
*
|
|
12
|
-
* Provides persistent storage for wallet data in browser environments.
|
|
13
|
-
* Uses the shared "lendaswap-v3" database with a "wallet" table.
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```ts
|
|
17
|
-
* const storage = new IdbWalletStorage();
|
|
18
|
-
* await storage.setMnemonic("your mnemonic phrase");
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export declare class IdbWalletStorage implements WalletStorage {
|
|
22
|
-
#private;
|
|
23
|
-
constructor();
|
|
24
|
-
/**
|
|
25
|
-
* Whether a legacy (v2) wallet was migrated during this session.
|
|
26
|
-
*
|
|
27
|
-
* When true, the caller should invoke `client.recoverSwaps()` to
|
|
28
|
-
* restore swap history from the server.
|
|
29
|
-
*/
|
|
30
|
-
get migratedFromLegacy(): boolean;
|
|
31
|
-
getMnemonic(): Promise<string | null>;
|
|
32
|
-
setMnemonic(mnemonic: string): Promise<void>;
|
|
33
|
-
getKeyIndex(): Promise<number>;
|
|
34
|
-
setKeyIndex(index: number): Promise<void>;
|
|
35
|
-
incrementKeyIndex(): Promise<number>;
|
|
36
|
-
clear(): Promise<void>;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* IndexedDB implementation of SwapStorage using Dexie.
|
|
40
|
-
*
|
|
41
|
-
* Provides persistent storage for swap data in browser environments.
|
|
42
|
-
* Uses the shared "lendaswap-v3" database with a "swaps" table.
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```ts
|
|
46
|
-
* const storage = new IdbSwapStorage();
|
|
47
|
-
* await storage.store({ swapId: "swap-id", ... });
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
export declare class IdbSwapStorage implements SwapStorage {
|
|
51
|
-
#private;
|
|
52
|
-
constructor();
|
|
53
|
-
get(swapId: string): Promise<StoredSwap | null>;
|
|
54
|
-
store(swap: StoredSwap): Promise<void>;
|
|
55
|
-
update(swapId: string, response: GetSwapResponse): Promise<void>;
|
|
56
|
-
delete(swapId: string): Promise<void>;
|
|
57
|
-
list(): Promise<string[]>;
|
|
58
|
-
getAll(): Promise<StoredSwap[]>;
|
|
59
|
-
clear(): Promise<void>;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Storage factory for IndexedDB (browser) storage.
|
|
63
|
-
*
|
|
64
|
-
* Creates IDB-backed storage instances that persist data in the browser.
|
|
65
|
-
*/
|
|
66
|
-
export declare const idbStorageFactory: {
|
|
67
|
-
createWalletStorage: () => WalletStorage;
|
|
68
|
-
createSwapStorage: () => SwapStorage;
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=idb.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"idb.d.ts","sourceRoot":"","sources":["../../../src/storage/idb.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyDzE;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,YAAW,aAAa;;;IAQpD;;;;;OAKG;IACH,IAAI,kBAAkB,IAAI,OAAO,CAEhC;IAEK,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAsBrC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,YAAW,WAAW;;;IAO1C,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK/C,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAchE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKzB,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAgFD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;+BACH,aAAa;6BACf,WAAW;CACnC,CAAC"}
|
package/dist/src/storage/idb.js
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IndexedDB storage implementation for browser environments using Dexie.
|
|
3
|
-
*
|
|
4
|
-
* This module provides persistent storage using IndexedDB via Dexie,
|
|
5
|
-
* suitable for web browsers and environments that support IndexedDB.
|
|
6
|
-
*/
|
|
7
|
-
import Dexie from "dexie";
|
|
8
|
-
const DB_NAME = "lendaswap-v3";
|
|
9
|
-
const DB_VERSION = 1;
|
|
10
|
-
// Legacy (v2) database constants for migration
|
|
11
|
-
const V2_DB_NAME = "lendaswap-v2";
|
|
12
|
-
const V2_WALLET_STORE = "wallet";
|
|
13
|
-
const V2_WALLET_KEY = "default";
|
|
14
|
-
/**
|
|
15
|
-
* Dexie database class for Lendaswap storage.
|
|
16
|
-
*
|
|
17
|
-
* Schema versions:
|
|
18
|
-
* - v1: Initial schema with wallet and swaps tables
|
|
19
|
-
*/
|
|
20
|
-
class LendaswapDatabase extends Dexie {
|
|
21
|
-
wallet;
|
|
22
|
-
swaps;
|
|
23
|
-
constructor() {
|
|
24
|
-
super(DB_NAME);
|
|
25
|
-
// Version 1: Initial schema
|
|
26
|
-
this.version(DB_VERSION).stores({
|
|
27
|
-
wallet: "key",
|
|
28
|
-
swaps: "swapId",
|
|
29
|
-
});
|
|
30
|
-
// Future migrations would be added here:
|
|
31
|
-
// this.version(2).stores({ ... }).upgrade(tx => { ... });
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
// Singleton database instance
|
|
35
|
-
let dbInstance = null;
|
|
36
|
-
/**
|
|
37
|
-
* Get the shared database instance.
|
|
38
|
-
*/
|
|
39
|
-
function getDatabase() {
|
|
40
|
-
if (!dbInstance) {
|
|
41
|
-
dbInstance = new LendaswapDatabase();
|
|
42
|
-
}
|
|
43
|
-
return dbInstance;
|
|
44
|
-
}
|
|
45
|
-
// Wallet storage keys
|
|
46
|
-
const MNEMONIC_KEY = "mnemonic";
|
|
47
|
-
const KEY_INDEX_KEY = "keyIndex";
|
|
48
|
-
/**
|
|
49
|
-
* IndexedDB implementation of WalletStorage using Dexie.
|
|
50
|
-
*
|
|
51
|
-
* Provides persistent storage for wallet data in browser environments.
|
|
52
|
-
* Uses the shared "lendaswap-v3" database with a "wallet" table.
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
* ```ts
|
|
56
|
-
* const storage = new IdbWalletStorage();
|
|
57
|
-
* await storage.setMnemonic("your mnemonic phrase");
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
60
|
-
export class IdbWalletStorage {
|
|
61
|
-
#db;
|
|
62
|
-
#migratedFromLegacy = false;
|
|
63
|
-
constructor() {
|
|
64
|
-
this.#db = getDatabase();
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Whether a legacy (v2) wallet was migrated during this session.
|
|
68
|
-
*
|
|
69
|
-
* When true, the caller should invoke `client.recoverSwaps()` to
|
|
70
|
-
* restore swap history from the server.
|
|
71
|
-
*/
|
|
72
|
-
get migratedFromLegacy() {
|
|
73
|
-
return this.#migratedFromLegacy;
|
|
74
|
-
}
|
|
75
|
-
async getMnemonic() {
|
|
76
|
-
const record = await this.#db.wallet.get(MNEMONIC_KEY);
|
|
77
|
-
if (record?.value) {
|
|
78
|
-
return record.value;
|
|
79
|
-
}
|
|
80
|
-
// No mnemonic in v3 — try migrating from v2 (legacy WASM SDK)
|
|
81
|
-
const v2Wallet = await readV2Wallet();
|
|
82
|
-
if (!v2Wallet?.mnemonic) {
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
// Persist to v3 so this migration only happens once
|
|
86
|
-
await this.setMnemonic(v2Wallet.mnemonic);
|
|
87
|
-
if (v2Wallet.keyIndex > 0) {
|
|
88
|
-
await this.setKeyIndex(v2Wallet.keyIndex);
|
|
89
|
-
}
|
|
90
|
-
this.#migratedFromLegacy = true;
|
|
91
|
-
return v2Wallet.mnemonic;
|
|
92
|
-
}
|
|
93
|
-
async setMnemonic(mnemonic) {
|
|
94
|
-
await this.#db.wallet.put({ key: MNEMONIC_KEY, value: mnemonic });
|
|
95
|
-
}
|
|
96
|
-
async getKeyIndex() {
|
|
97
|
-
const record = await this.#db.wallet.get(KEY_INDEX_KEY);
|
|
98
|
-
return record?.value ?? 0;
|
|
99
|
-
}
|
|
100
|
-
async setKeyIndex(index) {
|
|
101
|
-
await this.#db.wallet.put({ key: KEY_INDEX_KEY, value: index });
|
|
102
|
-
}
|
|
103
|
-
async incrementKeyIndex() {
|
|
104
|
-
// Use a transaction to ensure atomicity
|
|
105
|
-
return this.#db.transaction("rw", this.#db.wallet, async () => {
|
|
106
|
-
const record = await this.#db.wallet.get(KEY_INDEX_KEY);
|
|
107
|
-
const current = record?.value ?? 0;
|
|
108
|
-
await this.#db.wallet.put({ key: KEY_INDEX_KEY, value: current + 1 });
|
|
109
|
-
return current;
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
async clear() {
|
|
113
|
-
await this.#db.wallet.clear();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* IndexedDB implementation of SwapStorage using Dexie.
|
|
118
|
-
*
|
|
119
|
-
* Provides persistent storage for swap data in browser environments.
|
|
120
|
-
* Uses the shared "lendaswap-v3" database with a "swaps" table.
|
|
121
|
-
*
|
|
122
|
-
* @example
|
|
123
|
-
* ```ts
|
|
124
|
-
* const storage = new IdbSwapStorage();
|
|
125
|
-
* await storage.store({ swapId: "swap-id", ... });
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
export class IdbSwapStorage {
|
|
129
|
-
#db;
|
|
130
|
-
constructor() {
|
|
131
|
-
this.#db = getDatabase();
|
|
132
|
-
}
|
|
133
|
-
async get(swapId) {
|
|
134
|
-
const record = await this.#db.swaps.get(swapId);
|
|
135
|
-
return record ?? null;
|
|
136
|
-
}
|
|
137
|
-
async store(swap) {
|
|
138
|
-
await this.#db.swaps.put(swap);
|
|
139
|
-
}
|
|
140
|
-
async update(swapId, response) {
|
|
141
|
-
await this.#db.transaction("rw", this.#db.swaps, async () => {
|
|
142
|
-
const existing = await this.#db.swaps.get(swapId);
|
|
143
|
-
if (!existing) {
|
|
144
|
-
throw new Error(`Swap not found: ${swapId}`);
|
|
145
|
-
}
|
|
146
|
-
await this.#db.swaps.put({
|
|
147
|
-
...existing,
|
|
148
|
-
response,
|
|
149
|
-
updatedAt: Date.now(),
|
|
150
|
-
});
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
async delete(swapId) {
|
|
154
|
-
await this.#db.swaps.delete(swapId);
|
|
155
|
-
}
|
|
156
|
-
async list() {
|
|
157
|
-
const records = await this.#db.swaps.toArray();
|
|
158
|
-
return records.map((r) => r.swapId);
|
|
159
|
-
}
|
|
160
|
-
async getAll() {
|
|
161
|
-
return this.#db.swaps.toArray();
|
|
162
|
-
}
|
|
163
|
-
async clear() {
|
|
164
|
-
await this.#db.swaps.clear();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Read wallet data from the legacy v2 (WASM SDK) IndexedDB database.
|
|
169
|
-
*
|
|
170
|
-
* The v2 database ("lendaswap-v2") stores wallet data as a single object
|
|
171
|
-
* under key "default" in the "wallet" object store, with fields:
|
|
172
|
-
* - `mnemonic`: string
|
|
173
|
-
* - `key_index`: number
|
|
174
|
-
*
|
|
175
|
-
* Returns null if the v2 database doesn't exist or has no wallet data.
|
|
176
|
-
*/
|
|
177
|
-
function readV2Wallet() {
|
|
178
|
-
return new Promise((resolve) => {
|
|
179
|
-
if (typeof indexedDB === "undefined") {
|
|
180
|
-
resolve(null);
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
183
|
-
const request = indexedDB.open(V2_DB_NAME);
|
|
184
|
-
// If onupgradeneeded fires, the database didn't exist — abort to
|
|
185
|
-
// prevent creating an empty v2 database.
|
|
186
|
-
request.onupgradeneeded = () => {
|
|
187
|
-
request.transaction?.abort();
|
|
188
|
-
};
|
|
189
|
-
request.onerror = () => {
|
|
190
|
-
resolve(null);
|
|
191
|
-
};
|
|
192
|
-
request.onsuccess = () => {
|
|
193
|
-
const db = request.result;
|
|
194
|
-
if (!db.objectStoreNames.contains(V2_WALLET_STORE)) {
|
|
195
|
-
db.close();
|
|
196
|
-
resolve(null);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
try {
|
|
200
|
-
const tx = db.transaction(V2_WALLET_STORE, "readonly");
|
|
201
|
-
const store = tx.objectStore(V2_WALLET_STORE);
|
|
202
|
-
const getReq = store.get(V2_WALLET_KEY);
|
|
203
|
-
getReq.onsuccess = () => {
|
|
204
|
-
db.close();
|
|
205
|
-
const result = getReq.result;
|
|
206
|
-
if (!result) {
|
|
207
|
-
resolve(null);
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
resolve({
|
|
211
|
-
mnemonic: result.mnemonic ?? null,
|
|
212
|
-
keyIndex: typeof result.key_index === "number" ? result.key_index : 0,
|
|
213
|
-
});
|
|
214
|
-
};
|
|
215
|
-
getReq.onerror = () => {
|
|
216
|
-
db.close();
|
|
217
|
-
resolve(null);
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
catch {
|
|
221
|
-
db.close();
|
|
222
|
-
resolve(null);
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Storage factory for IndexedDB (browser) storage.
|
|
229
|
-
*
|
|
230
|
-
* Creates IDB-backed storage instances that persist data in the browser.
|
|
231
|
-
*/
|
|
232
|
-
export const idbStorageFactory = {
|
|
233
|
-
createWalletStorage: () => new IdbWalletStorage(),
|
|
234
|
-
createSwapStorage: () => new IdbSwapStorage(),
|
|
235
|
-
};
|
|
236
|
-
//# sourceMappingURL=idb.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"idb.js","sourceRoot":"","sources":["../../../src/storage/idb.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Storage module for persisting wallet and swap data.
|
|
3
|
-
*
|
|
4
|
-
* This module provides a pluggable storage interface that can be implemented
|
|
5
|
-
* for different backends (IndexedDB, SQLite, etc.).
|
|
6
|
-
*/
|
|
7
|
-
import type { GetSwapResponse } from "../api/client.js";
|
|
8
|
-
import type { StoredSwap } from "./types.js";
|
|
9
|
-
export type { StoredSwap } from "./types.js";
|
|
10
|
-
export { SWAP_STORAGE_VERSION } from "./types.js";
|
|
11
|
-
/**
|
|
12
|
-
* Storage interface for wallet data (mnemonic, key index).
|
|
13
|
-
*
|
|
14
|
-
* Implementations should handle persistence of sensitive wallet data.
|
|
15
|
-
* For browser environments, consider using IndexedDB with encryption.
|
|
16
|
-
* For desktop/mobile, consider using SQLite with secure storage.
|
|
17
|
-
*/
|
|
18
|
-
export interface WalletStorage {
|
|
19
|
-
/**
|
|
20
|
-
* Get the stored mnemonic phrase.
|
|
21
|
-
* @returns The mnemonic phrase, or null if not stored.
|
|
22
|
-
*/
|
|
23
|
-
getMnemonic(): Promise<string | null>;
|
|
24
|
-
/**
|
|
25
|
-
* Store the mnemonic phrase.
|
|
26
|
-
* @param mnemonic - The mnemonic phrase to store.
|
|
27
|
-
*/
|
|
28
|
-
setMnemonic(mnemonic: string): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Get the current key derivation index.
|
|
31
|
-
* @returns The current key index, defaults to 0 if not set.
|
|
32
|
-
*/
|
|
33
|
-
getKeyIndex(): Promise<number>;
|
|
34
|
-
/**
|
|
35
|
-
* Set the key derivation index.
|
|
36
|
-
* @param index - The new key index.
|
|
37
|
-
*/
|
|
38
|
-
setKeyIndex(index: number): Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* Increment and return the current key index.
|
|
41
|
-
* @returns The index before incrementing (the one to use).
|
|
42
|
-
*/
|
|
43
|
-
incrementKeyIndex(): Promise<number>;
|
|
44
|
-
/**
|
|
45
|
-
* Clear all wallet data from storage.
|
|
46
|
-
*/
|
|
47
|
-
clear(): Promise<void>;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Storage interface for swap data.
|
|
51
|
-
*
|
|
52
|
-
* Stores `StoredSwap` records which contain both the API response
|
|
53
|
-
* and client-side parameters needed for claim/refund operations.
|
|
54
|
-
*/
|
|
55
|
-
export interface SwapStorage {
|
|
56
|
-
/**
|
|
57
|
-
* Get swap data by ID.
|
|
58
|
-
* @param swapId - The swap ID.
|
|
59
|
-
* @returns The stored swap data, or null if not found.
|
|
60
|
-
*/
|
|
61
|
-
get(swapId: string): Promise<StoredSwap | null>;
|
|
62
|
-
/**
|
|
63
|
-
* Store a new swap.
|
|
64
|
-
* @param swap - The swap data to store (must include swapId).
|
|
65
|
-
*/
|
|
66
|
-
store(swap: StoredSwap): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Update an existing swap's API response.
|
|
69
|
-
* @param swapId - The swap ID.
|
|
70
|
-
* @param response - The updated API response.
|
|
71
|
-
* @throws Error if swap is not found.
|
|
72
|
-
*/
|
|
73
|
-
update(swapId: string, response: GetSwapResponse): Promise<void>;
|
|
74
|
-
/**
|
|
75
|
-
* Delete swap data by ID.
|
|
76
|
-
* @param swapId - The swap ID.
|
|
77
|
-
*/
|
|
78
|
-
delete(swapId: string): Promise<void>;
|
|
79
|
-
/**
|
|
80
|
-
* List all swap IDs.
|
|
81
|
-
* @returns Array of swap IDs.
|
|
82
|
-
*/
|
|
83
|
-
list(): Promise<string[]>;
|
|
84
|
-
/**
|
|
85
|
-
* Get all stored swaps.
|
|
86
|
-
* @returns Array of all stored swap data.
|
|
87
|
-
*/
|
|
88
|
-
getAll(): Promise<StoredSwap[]>;
|
|
89
|
-
/**
|
|
90
|
-
* Clear all swap data from storage.
|
|
91
|
-
*/
|
|
92
|
-
clear(): Promise<void>;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* In-memory implementation of WalletStorage.
|
|
96
|
-
*
|
|
97
|
-
* Useful for testing or temporary sessions where persistence is not required.
|
|
98
|
-
* Data is lost when the application is closed.
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* ```ts
|
|
102
|
-
* const storage = new InMemoryWalletStorage();
|
|
103
|
-
* await storage.setMnemonic("your mnemonic phrase");
|
|
104
|
-
* ```
|
|
105
|
-
*/
|
|
106
|
-
export declare class InMemoryWalletStorage implements WalletStorage {
|
|
107
|
-
#private;
|
|
108
|
-
getMnemonic(): Promise<string | null>;
|
|
109
|
-
setMnemonic(mnemonic: string): Promise<void>;
|
|
110
|
-
getKeyIndex(): Promise<number>;
|
|
111
|
-
setKeyIndex(index: number): Promise<void>;
|
|
112
|
-
incrementKeyIndex(): Promise<number>;
|
|
113
|
-
clear(): Promise<void>;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* In-memory implementation of SwapStorage.
|
|
117
|
-
*
|
|
118
|
-
* Useful for testing or temporary sessions where persistence is not required.
|
|
119
|
-
* Data is lost when the application is closed.
|
|
120
|
-
*
|
|
121
|
-
* @example
|
|
122
|
-
* ```ts
|
|
123
|
-
* const storage = new InMemorySwapStorage();
|
|
124
|
-
* await storage.store({ swapId: "swap-id", ... });
|
|
125
|
-
* ```
|
|
126
|
-
*/
|
|
127
|
-
export declare class InMemorySwapStorage implements SwapStorage {
|
|
128
|
-
#private;
|
|
129
|
-
get(swapId: string): Promise<StoredSwap | null>;
|
|
130
|
-
store(swap: StoredSwap): Promise<void>;
|
|
131
|
-
update(swapId: string, response: GetSwapResponse): Promise<void>;
|
|
132
|
-
delete(swapId: string): Promise<void>;
|
|
133
|
-
list(): Promise<string[]>;
|
|
134
|
-
getAll(): Promise<StoredSwap[]>;
|
|
135
|
-
clear(): Promise<void>;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Factory function type for creating storage instances.
|
|
139
|
-
*
|
|
140
|
-
* This allows the Client to accept different storage backends.
|
|
141
|
-
*/
|
|
142
|
-
export type StorageFactory = {
|
|
143
|
-
createWalletStorage: () => WalletStorage;
|
|
144
|
-
createSwapStorage: () => SwapStorage;
|
|
145
|
-
};
|
|
146
|
-
/**
|
|
147
|
-
* In-memory storage factory.
|
|
148
|
-
*
|
|
149
|
-
* Creates in-memory storage instances for testing or temporary sessions.
|
|
150
|
-
*/
|
|
151
|
-
export declare const inMemoryStorageFactory: StorageFactory;
|
|
152
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Storage module for persisting wallet and swap data.
|
|
3
|
-
*
|
|
4
|
-
* This module provides a pluggable storage interface that can be implemented
|
|
5
|
-
* for different backends (IndexedDB, SQLite, etc.).
|
|
6
|
-
*/
|
|
7
|
-
export { SWAP_STORAGE_VERSION } from "./types.js";
|
|
8
|
-
/**
|
|
9
|
-
* In-memory implementation of WalletStorage.
|
|
10
|
-
*
|
|
11
|
-
* Useful for testing or temporary sessions where persistence is not required.
|
|
12
|
-
* Data is lost when the application is closed.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```ts
|
|
16
|
-
* const storage = new InMemoryWalletStorage();
|
|
17
|
-
* await storage.setMnemonic("your mnemonic phrase");
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export class InMemoryWalletStorage {
|
|
21
|
-
#mnemonic = null;
|
|
22
|
-
#keyIndex = 0;
|
|
23
|
-
async getMnemonic() {
|
|
24
|
-
return this.#mnemonic;
|
|
25
|
-
}
|
|
26
|
-
async setMnemonic(mnemonic) {
|
|
27
|
-
this.#mnemonic = mnemonic;
|
|
28
|
-
}
|
|
29
|
-
async getKeyIndex() {
|
|
30
|
-
return this.#keyIndex;
|
|
31
|
-
}
|
|
32
|
-
async setKeyIndex(index) {
|
|
33
|
-
this.#keyIndex = index;
|
|
34
|
-
}
|
|
35
|
-
async incrementKeyIndex() {
|
|
36
|
-
const current = this.#keyIndex;
|
|
37
|
-
this.#keyIndex = current + 1;
|
|
38
|
-
return current;
|
|
39
|
-
}
|
|
40
|
-
async clear() {
|
|
41
|
-
this.#mnemonic = null;
|
|
42
|
-
this.#keyIndex = 0;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* In-memory implementation of SwapStorage.
|
|
47
|
-
*
|
|
48
|
-
* Useful for testing or temporary sessions where persistence is not required.
|
|
49
|
-
* Data is lost when the application is closed.
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```ts
|
|
53
|
-
* const storage = new InMemorySwapStorage();
|
|
54
|
-
* await storage.store({ swapId: "swap-id", ... });
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
export class InMemorySwapStorage {
|
|
58
|
-
#data = new Map();
|
|
59
|
-
async get(swapId) {
|
|
60
|
-
return this.#data.get(swapId) ?? null;
|
|
61
|
-
}
|
|
62
|
-
async store(swap) {
|
|
63
|
-
this.#data.set(swap.swapId, swap);
|
|
64
|
-
}
|
|
65
|
-
async update(swapId, response) {
|
|
66
|
-
const existing = this.#data.get(swapId);
|
|
67
|
-
if (!existing) {
|
|
68
|
-
throw new Error(`Swap not found: ${swapId}`);
|
|
69
|
-
}
|
|
70
|
-
this.#data.set(swapId, {
|
|
71
|
-
...existing,
|
|
72
|
-
response,
|
|
73
|
-
updatedAt: Date.now(),
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
async delete(swapId) {
|
|
77
|
-
this.#data.delete(swapId);
|
|
78
|
-
}
|
|
79
|
-
async list() {
|
|
80
|
-
return Array.from(this.#data.keys());
|
|
81
|
-
}
|
|
82
|
-
async getAll() {
|
|
83
|
-
return Array.from(this.#data.values());
|
|
84
|
-
}
|
|
85
|
-
async clear() {
|
|
86
|
-
this.#data.clear();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* In-memory storage factory.
|
|
91
|
-
*
|
|
92
|
-
* Creates in-memory storage instances for testing or temporary sessions.
|
|
93
|
-
*/
|
|
94
|
-
export const inMemoryStorageFactory = {
|
|
95
|
-
createWalletStorage: () => new InMemoryWalletStorage(),
|
|
96
|
-
createSwapStorage: () => new InMemorySwapStorage(),
|
|
97
|
-
};
|
|
98
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAkGlD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,qBAAqB;IAChC,SAAS,GAAkB,IAAI,CAAC;IAChC,SAAS,GAAG,CAAC,CAAC;IAEd,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB;QAChC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,mBAAmB;IACrB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE/C,KAAK,CAAC,GAAG,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAgB;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,QAAyB;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;YACrB,GAAG,QAAQ;YACX,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAYD;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmB;IACpD,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,qBAAqB,EAAE;IACtD,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE;CACnD,CAAC"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SQLite storage implementations for Node.js.
|
|
3
|
-
*
|
|
4
|
-
* Uses better-sqlite3 for fast, synchronous SQLite access.
|
|
5
|
-
*/
|
|
6
|
-
import type { GetSwapResponse } from "../api/client.js";
|
|
7
|
-
import type { SwapStorage, WalletStorage } from "./index.js";
|
|
8
|
-
import type { StoredSwap } from "./types.js";
|
|
9
|
-
/**
|
|
10
|
-
* SQLite-based wallet storage for Node.js.
|
|
11
|
-
*
|
|
12
|
-
* Stores mnemonic and key index in a SQLite database.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```ts
|
|
16
|
-
* const storage = new SqliteWalletStorage("./lendaswap.db");
|
|
17
|
-
* const client = await Client.builder()
|
|
18
|
-
* .withSignerStorage(storage)
|
|
19
|
-
* .build();
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
export declare class SqliteWalletStorage implements WalletStorage {
|
|
23
|
-
#private;
|
|
24
|
-
/**
|
|
25
|
-
* Creates a new SQLite wallet storage.
|
|
26
|
-
* @param dbPath - Path to the SQLite database file. Use ":memory:" for in-memory storage.
|
|
27
|
-
*/
|
|
28
|
-
constructor(dbPath: string);
|
|
29
|
-
getMnemonic(): Promise<string | null>;
|
|
30
|
-
setMnemonic(mnemonic: string): Promise<void>;
|
|
31
|
-
getKeyIndex(): Promise<number>;
|
|
32
|
-
setKeyIndex(index: number): Promise<void>;
|
|
33
|
-
incrementKeyIndex(): Promise<number>;
|
|
34
|
-
clear(): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Closes the database connection.
|
|
37
|
-
*/
|
|
38
|
-
close(): void;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* SQLite-based swap storage for Node.js.
|
|
42
|
-
*
|
|
43
|
-
* Stores swap data including responses and cryptographic parameters.
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* ```ts
|
|
47
|
-
* const storage = new SqliteSwapStorage("./lendaswap.db");
|
|
48
|
-
* const client = await Client.builder()
|
|
49
|
-
* .withSwapStorage(storage)
|
|
50
|
-
* .build();
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
|
-
export declare class SqliteSwapStorage implements SwapStorage {
|
|
54
|
-
#private;
|
|
55
|
-
/**
|
|
56
|
-
* Creates a new SQLite swap storage.
|
|
57
|
-
* @param dbPath - Path to the SQLite database file. Use ":memory:" for in-memory storage.
|
|
58
|
-
*/
|
|
59
|
-
constructor(dbPath: string);
|
|
60
|
-
get(swapId: string): Promise<StoredSwap | null>;
|
|
61
|
-
store(swap: StoredSwap): Promise<void>;
|
|
62
|
-
update(swapId: string, response: GetSwapResponse): Promise<void>;
|
|
63
|
-
delete(swapId: string): Promise<void>;
|
|
64
|
-
list(): Promise<string[]>;
|
|
65
|
-
getAll(): Promise<StoredSwap[]>;
|
|
66
|
-
clear(): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Closes the database connection.
|
|
69
|
-
*/
|
|
70
|
-
close(): void;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Creates a storage factory that uses SQLite for both wallet and swap storage.
|
|
74
|
-
*
|
|
75
|
-
* @param dbPath - Path to the SQLite database file.
|
|
76
|
-
* @returns A storage factory with shared database connection.
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* ```ts
|
|
80
|
-
* const { walletStorage, swapStorage, close } = sqliteStorageFactory("./lendaswap.db");
|
|
81
|
-
* const client = await Client.builder()
|
|
82
|
-
* .withSignerStorage(walletStorage)
|
|
83
|
-
* .withSwapStorage(swapStorage)
|
|
84
|
-
* .build();
|
|
85
|
-
*
|
|
86
|
-
* // When done:
|
|
87
|
-
* close();
|
|
88
|
-
* ```
|
|
89
|
-
*/
|
|
90
|
-
export declare function sqliteStorageFactory(dbPath: string): {
|
|
91
|
-
walletStorage: SqliteWalletStorage;
|
|
92
|
-
swapStorage: SqliteSwapStorage;
|
|
93
|
-
close: () => void;
|
|
94
|
-
};
|
|
95
|
-
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/storage/sqlite.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAoB,YAAW,aAAa;;IAGvD;;;OAGG;gBACS,MAAM,EAAE,MAAM;IAgBpB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAOrC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAO9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAMpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAkB,YAAW,WAAW;;IAGnD;;;OAGG;gBACS,MAAM,EAAE,MAAM;IAuBpB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAS/C,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOzB,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAO/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAeD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG;IACpD,aAAa,EAAE,mBAAmB,CAAC;IACnC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAYA"}
|