lightningdevkit
Version:
Lightning Development Kit
96 lines • 4.92 kB
JavaScript
import { AsyncPaymentsContext } from '../structs/AsyncPaymentsContext.mjs';
import { ReleaseHeldHtlc } from '../structs/ReleaseHeldHtlc.mjs';
import { Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ } from '../structs/Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.mjs';
import { HeldHtlcAvailable } from '../structs/HeldHtlcAvailable.mjs';
import { TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ } from '../structs/TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ.mjs';
import { Responder } from '../structs/Responder.mjs';
import { CommonBase } from './CommonBase.mjs';
import * as bindings from '../bindings.mjs';
class LDKAsyncPaymentsMessageHandlerHolder {
constructor() {
this.held = null;
}
}
/**
* A handler for an [`OnionMessage`] containing an async payments message as its payload.
*
* [`OnionMessage`]: crate::ln::msgs::OnionMessage
*/
export class AsyncPaymentsMessageHandler extends CommonBase {
/* @internal */
constructor(_dummy, ptr) {
super(ptr, bindings.AsyncPaymentsMessageHandler_free);
this.bindings_instance = null;
}
/** Creates a new instance of AsyncPaymentsMessageHandler from a given implementation */
static new_impl(arg) {
const impl_holder = new LDKAsyncPaymentsMessageHandlerHolder();
let structImplementation = {
handle_held_htlc_available(message, responder) {
const message_hu_conv = new HeldHtlcAvailable(null, message);
CommonBase.add_ref_from(message_hu_conv, this);
const responder_hu_conv = new Responder(null, responder);
CommonBase.add_ref_from(responder_hu_conv, this);
const ret = arg.handle_held_htlc_available(message_hu_conv, responder_hu_conv);
const result = ret.clone_ptr();
return result;
},
handle_release_held_htlc(message, context) {
const message_hu_conv = new ReleaseHeldHtlc(null, message);
CommonBase.add_ref_from(message_hu_conv, this);
const context_hu_conv = AsyncPaymentsContext.constr_from_ptr(context);
CommonBase.add_ref_from(context_hu_conv, this);
arg.handle_release_held_htlc(message_hu_conv, context_hu_conv);
},
release_pending_messages() {
const ret = arg.release_pending_messages();
const result = bindings.encodeUint64Array(ret.map(ret_conv_55 => ret_conv_55.clone_ptr()));
return result;
},
};
const ptr_idx = bindings.LDKAsyncPaymentsMessageHandler_new(structImplementation);
impl_holder.held = new AsyncPaymentsMessageHandler(null, ptr_idx[0]);
impl_holder.held.instance_idx = ptr_idx[1];
impl_holder.held.bindings_instance = structImplementation;
return impl_holder.held;
}
/**
* Handle a [`HeldHtlcAvailable`] message. A [`ReleaseHeldHtlc`] should be returned to release
* the held funds.
*
* Note that responder (or a relevant inner pointer) may be NULL or all-0s to represent None
*/
handle_held_htlc_available(message, responder) {
const ret = bindings.AsyncPaymentsMessageHandler_handle_held_htlc_available(this.ptr, CommonBase.get_ptr_of(message), responder == null ? 0n : CommonBase.get_ptr_of(responder));
const ret_hu_conv = Option_C2Tuple_ReleaseHeldHtlcResponseInstructionZZ.constr_from_ptr(ret);
CommonBase.add_ref_from(ret_hu_conv, this);
return ret_hu_conv;
}
/**
* Handle a [`ReleaseHeldHtlc`] message. If authentication of the message succeeds, an HTLC
* should be released to the corresponding payee.
*/
handle_release_held_htlc(message, context) {
bindings.AsyncPaymentsMessageHandler_handle_release_held_htlc(this.ptr, CommonBase.get_ptr_of(message), CommonBase.get_ptr_of(context));
}
/**
* Release any [`AsyncPaymentsMessage`]s that need to be sent.
*
* Typically, this is used for messages initiating an async payment flow rather than in response
* to another message.
*/
release_pending_messages() {
const ret = bindings.AsyncPaymentsMessageHandler_release_pending_messages(this.ptr);
const ret_conv_55_len = bindings.getArrayLength(ret);
const ret_conv_55_arr = new Array(ret_conv_55_len).fill(null);
for (var d = 0; d < ret_conv_55_len; d++) {
const ret_conv_55 = bindings.getU64ArrayElem(ret, d);
const ret_conv_55_hu_conv = new TwoTuple_AsyncPaymentsMessageMessageSendInstructionsZ(null, ret_conv_55);
CommonBase.add_ref_from(ret_conv_55_hu_conv, this);
ret_conv_55_arr[d] = ret_conv_55_hu_conv;
}
bindings.freeWasmMemory(ret);
return ret_conv_55_arr;
}
}
//# sourceMappingURL=AsyncPaymentsMessageHandler.mjs.map