Files
brk/website_next/wallets/vault/runtime.js
T
2026-06-18 22:39:28 +02:00

55 lines
1.1 KiB
JavaScript

import { scanWalletAddresses } from "../scan/index.js";
/**
* @typedef {import("../scan/index.js").WalletScan} WalletScan
* @typedef {import("../scan/index.js").WalletScanClient} WalletScanClient
* @typedef {import("../scan/index.js").WalletScanProgress} WalletScanProgress
*
* @typedef {Object} LoadOptions
* @property {WalletScanClient} client
* @property {(progress: WalletScanProgress) => void} [onProgress]
*/
/**
* @param {string} source
*/
export function createRuntime(source) {
/** @type {WalletScan | undefined} */
let scan;
/** @type {Promise<WalletScan> | undefined} */
let pending;
/**
* @param {LoadOptions} options
*/
function load(options) {
if (scan) return Promise.resolve(scan);
if (!pending) {
pending = scanWalletAddresses({
client: options.client,
source,
onProgress: options.onProgress,
}).then((nextScan) => {
scan = nextScan;
pending = undefined;
return nextScan;
}, (error) => {
pending = undefined;
throw error;
});
}
return pending;
}
return {
get scan() {
return scan;
},
load,
};
}