UNPKG

@0xsequence/connect

Version:
86 lines 3.63 kB
"use strict"; 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