Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
function subscribeToOrderbookUncached(horizonURL: string, sellingAsset: string, buyingAsset: string) {
const buying = parseAssetID(buyingAsset)
const selling = parseAssetID(sellingAsset)
const query = createOrderbookQuery(selling, buying)
if (selling.equals(buying)) {
return Observable.from([createEmptyOrderbookRecord(buying, buying)])
}
const createURL = () => String(new URL(`/order_book?${qs.stringify({ ...query, cursor: "now" })}`, horizonURL))
const fetchUpdate = () => fetchOrderbookRecord(horizonURL, sellingAsset, buyingAsset)
let latestKnownSnapshot = ""
// TODO: Optimize - Make UpdateT = ValueT & { [$snapshot]: string }
return subscribeToUpdatesAndPoll({
async applyUpdate(update) {
latestKnownSnapshot = JSON.stringify(update)
return update
},
fetchUpdate,
async init() {
constructor(
spawnWorker: () => Promise,
optionsOrSize?: number | PoolOptions
) {
const options: PoolOptions = typeof optionsOrSize === "number"
? { size: optionsOrSize }
: optionsOrSize || {}
const { size = defaultPoolSize } = options
this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`)
this.options = options
this.workers = spawnWorkers(spawnWorker, size)
this.eventObservable = multicast(Observable.from(this.eventSubject))
Promise.all(this.workers.map(worker => worker.init)).then(
() => this.eventSubject.next({
type: PoolEventType.initialized,
size: this.workers.length
}),
error => {
this.debug("Error while initializing pool worker:", error)
this.eventSubject.error(error)
this.initErrors.push(error)
}
)
}
}).flatMap((txs: Horizon.TransactionResponse[]) => Observable.from(txs))
}