Make Blockchain Subscribe methods return Unsubscribe callback
This commit is contained in:
@@ -4,6 +4,7 @@ import {
|
||||
type BlockchainCallback,
|
||||
type BlockchainUTXOs,
|
||||
type BlockchainTransactions,
|
||||
type BlockchainUnsubscribeCallback,
|
||||
} from './types.js';
|
||||
|
||||
import { Transaction } from '@xocash/primitives';
|
||||
@@ -109,7 +110,7 @@ export abstract class BaseBlockchain<
|
||||
abstract subscribeLockscript(
|
||||
lockscript: string | Uint8Array,
|
||||
callback: BlockchainCallback<AddressNotificationPayload>,
|
||||
): Promise<void>;
|
||||
): Promise<BlockchainUnsubscribeCallback>;
|
||||
|
||||
/**
|
||||
* Removes a subscription for a specific blockchain address.
|
||||
@@ -136,7 +137,7 @@ export abstract class BaseBlockchain<
|
||||
abstract subscribeAddress(
|
||||
address: string,
|
||||
callback: BlockchainCallback<AddressNotificationPayload>,
|
||||
): Promise<void>;
|
||||
): Promise<BlockchainUnsubscribeCallback>;
|
||||
|
||||
/**
|
||||
* Removes a subscription for a specific blockchain address.
|
||||
@@ -163,7 +164,7 @@ export abstract class BaseBlockchain<
|
||||
abstract subscribeTransaction(
|
||||
transactionHash: string,
|
||||
callback: BlockchainCallback<TransactionNotificationPayload>,
|
||||
): Promise<void>;
|
||||
): Promise<BlockchainUnsubscribeCallback>;
|
||||
|
||||
/**
|
||||
* Removes a subscription for a specific transaction.
|
||||
|
||||
@@ -397,6 +397,9 @@ export class BlockchainElectrum extends BaseBlockchain<
|
||||
|
||||
// Add the callback to the set
|
||||
callbacks.add(callback);
|
||||
|
||||
// Return an unsubscribe callback.
|
||||
return async () => await this.unsubscribeAddress(address, callback);
|
||||
}
|
||||
|
||||
async unsubscribeAddress(
|
||||
@@ -464,6 +467,9 @@ export class BlockchainElectrum extends BaseBlockchain<
|
||||
|
||||
// Add the callback to the set
|
||||
callbacks.add(callback);
|
||||
|
||||
// Return an unsubscribe callback.
|
||||
return async () => this.unsubscribeTransaction(transactionHash, callback);
|
||||
}
|
||||
|
||||
async unsubscribeTransaction(
|
||||
|
||||
@@ -173,6 +173,9 @@ export class BlockchainInMemory extends BaseBlockchain {
|
||||
|
||||
// Add the address notification callback.
|
||||
this.addressSubscriptions.get(lockscriptHex)!.add(callback);
|
||||
|
||||
// Return an unsubscribe callback.
|
||||
return async () => await this.unsubscribeAddress(address, callback);
|
||||
}
|
||||
|
||||
async unsubscribeAddress(address: string, callback: BlockchainCallback) {
|
||||
@@ -206,6 +209,10 @@ export class BlockchainInMemory extends BaseBlockchain {
|
||||
this.transactionSubscriptions.set(transactionHash, new Set());
|
||||
}
|
||||
this.transactionSubscriptions.get(transactionHash)!.add(callback);
|
||||
|
||||
// Return an unsubscribe callback.
|
||||
return async () =>
|
||||
await this.unsubscribeTransaction(transactionHash, callback);
|
||||
}
|
||||
|
||||
async unsubscribeTransaction(
|
||||
|
||||
@@ -7,6 +7,8 @@ export type BlockchainCallback<Payload = undefined> = (
|
||||
payload?: Payload | undefined,
|
||||
) => void;
|
||||
|
||||
export type BlockchainUnsubscribeCallback = () => Promise<boolean>;
|
||||
|
||||
export type BlockchainTransaction = {
|
||||
hash: TransactionHash;
|
||||
height: number;
|
||||
|
||||
Reference in New Issue
Block a user