UNPKG

lightningdevkit

Version:
87 lines 4.36 kB
import { Option_OffersContextZ } from '../structs/Option_OffersContextZ.mjs'; import { OffersMessage } from '../structs/OffersMessage.mjs'; import { Option_C2Tuple_OffersMessageResponseInstructionZZ } from '../structs/Option_C2Tuple_OffersMessageResponseInstructionZZ.mjs'; import { TwoTuple_OffersMessageMessageSendInstructionsZ } from '../structs/TwoTuple_OffersMessageMessageSendInstructionsZ.mjs'; import { Responder } from '../structs/Responder.mjs'; import { CommonBase } from './CommonBase.mjs'; import * as bindings from '../bindings.mjs'; class LDKOffersMessageHandlerHolder { constructor() { this.held = null; } } /** * A handler for an [`OnionMessage`] containing a BOLT 12 Offers message as its payload. * * [`OnionMessage`]: crate::ln::msgs::OnionMessage */ export class OffersMessageHandler extends CommonBase { /* @internal */ constructor(_dummy, ptr) { super(ptr, bindings.OffersMessageHandler_free); this.bindings_instance = null; } /** Creates a new instance of OffersMessageHandler from a given implementation */ static new_impl(arg) { const impl_holder = new LDKOffersMessageHandlerHolder(); let structImplementation = { handle_message(message, context, responder) { const message_hu_conv = OffersMessage.constr_from_ptr(message); CommonBase.add_ref_from(message_hu_conv, this); const context_hu_conv = Option_OffersContextZ.constr_from_ptr(context); CommonBase.add_ref_from(context_hu_conv, this); const responder_hu_conv = new Responder(null, responder); CommonBase.add_ref_from(responder_hu_conv, this); const ret = arg.handle_message(message_hu_conv, context_hu_conv, responder_hu_conv); const result = ret.clone_ptr(); return result; }, release_pending_messages() { const ret = arg.release_pending_messages(); const result = bindings.encodeUint64Array(ret.map(ret_conv_48 => ret_conv_48.clone_ptr())); return result; }, }; const ptr_idx = bindings.LDKOffersMessageHandler_new(structImplementation); impl_holder.held = new OffersMessageHandler(null, ptr_idx[0]); impl_holder.held.instance_idx = ptr_idx[1]; impl_holder.held.bindings_instance = structImplementation; return impl_holder.held; } /** * Handles the given message by either responding with an [`Bolt12Invoice`], sending a payment, * or replying with an error. * * The returned [`OffersMessage`], if any, is enqueued to be sent by [`OnionMessenger`]. * * [`OnionMessenger`]: crate::onion_message::messenger::OnionMessenger * * Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None */ handle_message(message, context, responder) { const ret = bindings.OffersMessageHandler_handle_message(this.ptr, CommonBase.get_ptr_of(message), CommonBase.get_ptr_of(context), responder == null ? 0n : CommonBase.get_ptr_of(responder)); const ret_hu_conv = Option_C2Tuple_OffersMessageResponseInstructionZZ.constr_from_ptr(ret); CommonBase.add_ref_from(ret_hu_conv, this); return ret_hu_conv; } /** * Releases any [`OffersMessage`]s that need to be sent. * * Typically, this is used for messages initiating a payment flow rather than in response to * another message. The latter should use the return value of [`Self::handle_message`]. */ release_pending_messages() { const ret = bindings.OffersMessageHandler_release_pending_messages(this.ptr); const ret_conv_48_len = bindings.getArrayLength(ret); const ret_conv_48_arr = new Array(ret_conv_48_len).fill(null); for (var w = 0; w < ret_conv_48_len; w++) { const ret_conv_48 = bindings.getU64ArrayElem(ret, w); const ret_conv_48_hu_conv = new TwoTuple_OffersMessageMessageSendInstructionsZ(null, ret_conv_48); CommonBase.add_ref_from(ret_conv_48_hu_conv, this); ret_conv_48_arr[w] = ret_conv_48_hu_conv; } bindings.freeWasmMemory(ret); return ret_conv_48_arr; } } //# sourceMappingURL=OffersMessageHandler.mjs.map