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