@0xsequence/connect
Version:
Connect package for Sequence Web SDK
86 lines • 3.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useWaasConfirmationHandler = useWaasConfirmationHandler;
const react_1 = require("react");
const deferred_js_1 = require("../utils/deferred.js");
let _pendingConfirmation;
/**
* Hook to handle transaction and message signing confirmations for WaaS (Wallet-as-a-Service) connections.
*
* This hook sets up confirmation handlers for signing transactions and messages when using a WaaS connector.
* It manages the state of pending confirmations and provides functions to confirm or reject signing requests.
*
* @param waasConnector - The WaaS connector instance to handle confirmations for (optional)
*
* @returns A tuple containing:
* - [0] {@link WaasRequestConfirmation} | undefined - The current pending request confirmation info or undefined if none
* - [1] `(id: string) => void` - Function to confirm a pending request by ID
* - [2] `(id: string) => void` - Function to reject a pending request by ID
*
* The {@link WaasRequestConfirmation} object contains:
* - `id` - Unique identifier for the request
* - `type` - Either 'signTransaction' or 'signMessage'
* - `message?` - Optional message to sign (for signMessage requests)
* - `txs?` - Optional array of transactions (for signTransaction requests)
* - `chainId?` - Optional chain ID for the request
*
* @example
* ```tsx
* const [
* pendingRequestConfirmation,
* confirmPendingRequest,
* rejectPendingRequest
* ] = useWaasConfirmationHandler(waasConnector)
*
* // When user confirms the request
* if (pendingRequestConfirmation) {
* confirmPendingRequest(pendingRequestConfirmation.id)
* }
*
* // When user rejects the request
* if (pendingRequestConfirmation) {
* rejectPendingRequest(pendingRequestConfirmation.id)
* }
* ```
*/
function useWaasConfirmationHandler(waasConnector) {
const [pendingRequestConfirmation, setPendingRequestConfirmation] = (0, react_1.useState)();
function confirmPendingRequest(id) {
_pendingConfirmation?.resolve({ id, confirmed: true });
setPendingRequestConfirmation(undefined);
_pendingConfirmation = undefined;
}
function rejectPendingRequest(id) {
_pendingConfirmation?.resolve({ id, confirmed: false });
setPendingRequestConfirmation(undefined);
_pendingConfirmation = undefined;
}
(0, react_1.useEffect)(() => {
async function setup() {
if (!waasConnector) {
return;
}
const waasProvider = waasConnector.sequenceWaasProvider;
if (!waasProvider) {
return;
}
waasProvider.requestConfirmationHandler = {
confirmSignTransactionRequest(id, txs, chainId) {
const pending = new deferred_js_1.Deferred();
setPendingRequestConfirmation({ id, type: 'signTransaction', txs: Array.isArray(txs) ? txs : [txs], chainId });
_pendingConfirmation = pending;
return pending.promise;
},
confirmSignMessageRequest(id, message, chainId) {
const pending = new deferred_js_1.Deferred();
setPendingRequestConfirmation({ id, type: 'signMessage', message, chainId });
_pendingConfirmation = pending;
return pending.promise;
}
};
}
setup();
});
return [pendingRequestConfirmation, confirmPendingRequest, rejectPendingRequest];
}
//# sourceMappingURL=useWaasConfirmationHandler.js.map