lightningdevkit
Version:
Lightning Development Kit
87 lines • 4.36 kB
JavaScript
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