plugin/clnrest: Adding new config param as clnrest-swagger-root

- Updated config params and plugin
- Updated documentation

Changelog-Added: Added a new configuration for clnrest plugin to change the default Swagger UI path from `/` to custom url.
This commit is contained in:
ShahanaFarooqui 2024-04-15 22:01:26 -07:00 committed by Christian Decker
parent 95a92b6e4b
commit cf5e8822b9
10 changed files with 837 additions and 626 deletions

View file

@ -847,6 +847,17 @@
"DelpayResponse": {
"DelPay.payments[]": 1
},
"DisableofferRequest": {
"DisableOffer.offer_id": 1
},
"DisableofferResponse": {
"DisableOffer.active": 2,
"DisableOffer.bolt12": 4,
"DisableOffer.label": 6,
"DisableOffer.offer_id": 1,
"DisableOffer.single_use": 3,
"DisableOffer.used": 5
},
"DisconnectRequest": {
"Disconnect.force": 2,
"Disconnect.id": 1
@ -3668,6 +3679,34 @@
"added": "pre-v0.10.1",
"deprecated": false
},
"DisableOffer": {
"added": "pre-v0.10.1",
"deprecated": null
},
"DisableOffer.active": {
"added": "pre-v0.10.1",
"deprecated": false
},
"DisableOffer.bolt12": {
"added": "pre-v0.10.1",
"deprecated": false
},
"DisableOffer.label": {
"added": "pre-v0.10.1",
"deprecated": false
},
"DisableOffer.offer_id": {
"added": "pre-v0.10.1",
"deprecated": false
},
"DisableOffer.single_use": {
"added": "pre-v0.10.1",
"deprecated": false
},
"DisableOffer.used": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Disconnect": {
"added": "pre-v0.10.1",
"deprecated": null

View file

@ -53,6 +53,7 @@ service Node {
rpc Decode(DecodeRequest) returns (DecodeResponse) {}
rpc DelPay(DelpayRequest) returns (DelpayResponse) {}
rpc DelForward(DelforwardRequest) returns (DelforwardResponse) {}
rpc DisableOffer(DisableofferRequest) returns (DisableofferResponse) {}
rpc Disconnect(DisconnectRequest) returns (DisconnectResponse) {}
rpc Feerates(FeeratesRequest) returns (FeeratesResponse) {}
rpc FetchInvoice(FetchinvoiceRequest) returns (FetchinvoiceResponse) {}
@ -1620,6 +1621,19 @@ message DelforwardRequest {
message DelforwardResponse {
}
message DisableofferRequest {
bytes offer_id = 1;
}
message DisableofferResponse {
bytes offer_id = 1;
bool active = 2;
bool single_use = 3;
string bolt12 = 4;
bool used = 5;
optional string label = 6;
}
message DisconnectRequest {
bytes id = 1;
optional bool force = 2;

View file

@ -1533,6 +1533,20 @@ impl From<responses::DelforwardResponse> for pb::DelforwardResponse {
}
}
#[allow(unused_variables)]
impl From<responses::DisableofferResponse> for pb::DisableofferResponse {
fn from(c: responses::DisableofferResponse) -> Self {
Self {
active: c.active, // Rule #2 for type boolean
bolt12: c.bolt12, // Rule #2 for type string
label: c.label, // Rule #2 for type string?
offer_id: <Sha256 as AsRef<[u8]>>::as_ref(&c.offer_id).to_vec(), // Rule #2 for type hash
single_use: c.single_use, // Rule #2 for type boolean
used: c.used, // Rule #2 for type boolean
}
}
}
#[allow(unused_variables)]
impl From<responses::DisconnectResponse> for pb::DisconnectResponse {
fn from(c: responses::DisconnectResponse) -> Self {
@ -2801,6 +2815,15 @@ impl From<requests::DelforwardRequest> for pb::DelforwardRequest {
}
}
#[allow(unused_variables)]
impl From<requests::DisableofferRequest> for pb::DisableofferRequest {
fn from(c: requests::DisableofferRequest) -> Self {
Self {
offer_id: <Sha256 as AsRef<[u8]>>::as_ref(&c.offer_id).to_vec(), // Rule #2 for type hash
}
}
}
#[allow(unused_variables)]
impl From<requests::DisconnectRequest> for pb::DisconnectRequest {
fn from(c: requests::DisconnectRequest) -> Self {
@ -3751,6 +3774,15 @@ impl From<pb::DelforwardRequest> for requests::DelforwardRequest {
}
}
#[allow(unused_variables)]
impl From<pb::DisableofferRequest> for requests::DisableofferRequest {
fn from(c: pb::DisableofferRequest) -> Self {
Self {
offer_id: Sha256::from_slice(&c.offer_id).unwrap(), // Rule #1 for type hash
}
}
}
#[allow(unused_variables)]
impl From<pb::DisconnectRequest> for requests::DisconnectRequest {
fn from(c: pb::DisconnectRequest) -> Self {

View file

@ -1466,6 +1466,38 @@ async fn del_forward(
}
async fn disable_offer(
&self,
request: tonic::Request<pb::DisableofferRequest>,
) -> Result<tonic::Response<pb::DisableofferResponse>, tonic::Status> {
let req = request.into_inner();
let req: requests::DisableofferRequest = req.into();
debug!("Client asked for disable_offer");
trace!("disable_offer request: {:?}", req);
let mut rpc = ClnRpc::new(&self.rpc_path)
.await
.map_err(|e| Status::new(Code::Internal, e.to_string()))?;
let result = rpc.call(Request::DisableOffer(req))
.await
.map_err(|e| Status::new(
Code::Unknown,
format!("Error calling method DisableOffer: {:?}", e)))?;
match result {
Response::DisableOffer(r) => {
trace!("disable_offer response: {:?}", r);
Ok(tonic::Response::new(r.into()))
},
r => Err(Status::new(
Code::Internal,
format!(
"Unexpected result {:?} to method call DisableOffer",
r
)
)),
}
}
async fn disconnect(
&self,
request: tonic::Request<pb::DisconnectRequest>,

46
cln-rpc/src/model.rs generated
View file

@ -64,6 +64,7 @@ pub enum Request {
Decode(requests::DecodeRequest),
DelPay(requests::DelpayRequest),
DelForward(requests::DelforwardRequest),
DisableOffer(requests::DisableofferRequest),
Disconnect(requests::DisconnectRequest),
Feerates(requests::FeeratesRequest),
FetchInvoice(requests::FetchinvoiceRequest),
@ -149,6 +150,7 @@ pub enum Response {
Decode(responses::DecodeResponse),
DelPay(responses::DelpayResponse),
DelForward(responses::DelforwardResponse),
DisableOffer(responses::DisableofferResponse),
Disconnect(responses::DisconnectResponse),
Feerates(responses::FeeratesResponse),
FetchInvoice(responses::FetchinvoiceResponse),
@ -1754,6 +1756,28 @@ pub mod requests {
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct DisableofferRequest {
pub offer_id: Sha256,
}
impl From<DisableofferRequest> for Request {
fn from(r: DisableofferRequest) -> Self {
Request::DisableOffer(r)
}
}
impl IntoRequest for DisableofferRequest {
type Response = super::responses::DisableofferResponse;
}
impl TypedRequest for DisableofferRequest {
type Response = super::responses::DisableofferResponse;
fn method(&self) -> &str {
"disableoffer"
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct DisconnectRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub force: Option<bool>,
@ -5791,6 +5815,28 @@ pub mod responses {
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct DisableofferResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
pub active: bool,
pub bolt12: String,
pub offer_id: Sha256,
pub single_use: bool,
pub used: bool,
}
impl TryFrom<Response> for DisableofferResponse {
type Error = super::TryFromResponseError;
fn try_from(response: Response) -> Result<Self, Self::Error> {
match response {
Response::DisableOffer(response) => Ok(response),
_ => Err(TryFromResponseError)
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct DisconnectResponse {
}

View file

@ -103,7 +103,7 @@ def load_jsonrpc_service():
"Decode",
"DelPay",
"DelForward",
# "disableoffer",
"DisableOffer",
"Disconnect",
"Feerates",
"FetchInvoice",

File diff suppressed because one or more lines are too long

View file

@ -239,6 +239,11 @@ class NodeStub(object):
request_serializer=node__pb2.DelforwardRequest.SerializeToString,
response_deserializer=node__pb2.DelforwardResponse.FromString,
)
self.DisableOffer = channel.unary_unary(
'/cln.Node/DisableOffer',
request_serializer=node__pb2.DisableofferRequest.SerializeToString,
response_deserializer=node__pb2.DisableofferResponse.FromString,
)
self.Disconnect = channel.unary_unary(
'/cln.Node/Disconnect',
request_serializer=node__pb2.DisconnectRequest.SerializeToString,
@ -669,6 +674,12 @@ class NodeServicer(object):
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def DisableOffer(self, request, context):
"""Missing associated documentation comment in .proto file."""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def Disconnect(self, request, context):
"""Missing associated documentation comment in .proto file."""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@ -1083,6 +1094,11 @@ def add_NodeServicer_to_server(servicer, server):
request_deserializer=node__pb2.DelforwardRequest.FromString,
response_serializer=node__pb2.DelforwardResponse.SerializeToString,
),
'DisableOffer': grpc.unary_unary_rpc_method_handler(
servicer.DisableOffer,
request_deserializer=node__pb2.DisableofferRequest.FromString,
response_serializer=node__pb2.DisableofferResponse.SerializeToString,
),
'Disconnect': grpc.unary_unary_rpc_method_handler(
servicer.Disconnect,
request_deserializer=node__pb2.DisconnectRequest.FromString,
@ -2013,6 +2029,23 @@ class Node(object):
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def DisableOffer(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/cln.Node/DisableOffer',
node__pb2.DisableofferRequest.SerializeToString,
node__pb2.DisableofferResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def Disconnect(request,
target,

View file

@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: primitives.proto
"""Generated protocol buffer code."""
from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@ -15,43 +15,43 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10primitives.proto\x12\x03\x63ln\"\x16\n\x06\x41mount\x12\x0c\n\x04msat\x18\x01 \x01(\x04\"D\n\x0b\x41mountOrAll\x12\x1d\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x12\r\n\x03\x61ll\x18\x02 \x01(\x08H\x00\x42\x07\n\x05value\"D\n\x0b\x41mountOrAny\x12\x1d\n\x06\x61mount\x18\x01 \x01(\x0b\x32\x0b.cln.AmountH\x00\x12\r\n\x03\x61ny\x18\x02 \x01(\x08H\x00\x42\x07\n\x05value\"\x19\n\x17\x43hannelStateChangeCause\"(\n\x08Outpoint\x12\x0c\n\x04txid\x18\x01 \x01(\x0c\x12\x0e\n\x06outnum\x18\x02 \x01(\r\"h\n\x07\x46\x65\x65rate\x12\x0e\n\x04slow\x18\x01 \x01(\x08H\x00\x12\x10\n\x06normal\x18\x02 \x01(\x08H\x00\x12\x10\n\x06urgent\x18\x03 \x01(\x08H\x00\x12\x0f\n\x05perkb\x18\x04 \x01(\rH\x00\x12\x0f\n\x05perkw\x18\x05 \x01(\rH\x00\x42\x07\n\x05style\":\n\nOutputDesc\x12\x0f\n\x07\x61\x64\x64ress\x18\x01 \x01(\t\x12\x1b\n\x06\x61mount\x18\x02 \x01(\x0b\x32\x0b.cln.Amount\"t\n\x08RouteHop\x12\n\n\x02id\x18\x01 \x01(\x0c\x12\x18\n\x10short_channel_id\x18\x02 \x01(\t\x12\x1c\n\x07\x66\x65\x65\x62\x61se\x18\x03 \x01(\x0b\x32\x0b.cln.Amount\x12\x0f\n\x07\x66\x65\x65prop\x18\x04 \x01(\r\x12\x13\n\x0b\x65xpirydelta\x18\x05 \x01(\r\"(\n\tRoutehint\x12\x1b\n\x04hops\x18\x01 \x03(\x0b\x32\r.cln.RouteHop\".\n\rRoutehintList\x12\x1d\n\x05hints\x18\x02 \x03(\x0b\x32\x0e.cln.Routehint\"\'\n\x08TlvEntry\x12\x0c\n\x04type\x18\x01 \x01(\x04\x12\r\n\x05value\x18\x02 \x01(\x0c\"+\n\tTlvStream\x12\x1e\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\r.cln.TlvEntry*$\n\x0b\x43hannelSide\x12\t\n\x05LOCAL\x10\x00\x12\n\n\x06REMOTE\x10\x01*\xa0\x02\n\x0c\x43hannelState\x12\x0c\n\x08Openingd\x10\x00\x12\x1a\n\x16\x43hanneldAwaitingLockin\x10\x01\x12\x12\n\x0e\x43hanneldNormal\x10\x02\x12\x18\n\x14\x43hanneldShuttingDown\x10\x03\x12\x17\n\x13\x43losingdSigexchange\x10\x04\x12\x14\n\x10\x43losingdComplete\x10\x05\x12\x16\n\x12\x41waitingUnilateral\x10\x06\x12\x14\n\x10\x46undingSpendSeen\x10\x07\x12\x0b\n\x07Onchain\x10\x08\x12\x15\n\x11\x44ualopendOpenInit\x10\t\x12\x1b\n\x17\x44ualopendAwaitingLockin\x10\n\x12\x1a\n\x16\x43hanneldAwaitingSplice\x10\x0b*\xd5\x03\n\tHtlcState\x12\x0f\n\x0bSentAddHtlc\x10\x00\x12\x11\n\rSentAddCommit\x10\x01\x12\x15\n\x11RcvdAddRevocation\x10\x02\x12\x14\n\x10RcvdAddAckCommit\x10\x03\x12\x18\n\x14SentAddAckRevocation\x10\x04\x12\x18\n\x14RcvdAddAckRevocation\x10\x05\x12\x12\n\x0eRcvdRemoveHtlc\x10\x06\x12\x14\n\x10RcvdRemoveCommit\x10\x07\x12\x18\n\x14SentRemoveRevocation\x10\x08\x12\x17\n\x13SentRemoveAckCommit\x10\t\x12\x1b\n\x17RcvdRemoveAckRevocation\x10\n\x12\x0f\n\x0bRcvdAddHtlc\x10\x0b\x12\x11\n\rRcvdAddCommit\x10\x0c\x12\x15\n\x11SentAddRevocation\x10\r\x12\x14\n\x10SentAddAckCommit\x10\x0e\x12\x12\n\x0eSentRemoveHtlc\x10\x0f\x12\x14\n\x10SentRemoveCommit\x10\x10\x12\x18\n\x14RcvdRemoveRevocation\x10\x11\x12\x17\n\x13RcvdRemoveAckCommit\x10\x12\x12\x1b\n\x17SentRemoveAckRevocation\x10\x13*\x90\x01\n\x0f\x43hannelTypeName\x12\x19\n\x15static_remotekey_even\x10\x00\x12\x17\n\x13\x61nchor_outputs_even\x10\x01\x12!\n\x1d\x61nchors_zero_fee_htlc_tx_even\x10\x02\x12\x13\n\x0fscid_alias_even\x10\x03\x12\x11\n\rzeroconf_even\x10\x04*\x89\x01\n\x12\x41utocleanSubsystem\x12\x15\n\x11SUCCEEDEDFORWARDS\x10\x00\x12\x12\n\x0e\x46\x41ILEDFORWARDS\x10\x01\x12\x11\n\rSUCCEEDEDPAYS\x10\x02\x12\x0e\n\nFAILEDPAYS\x10\x03\x12\x10\n\x0cPAIDINVOICES\x10\x04\x12\x13\n\x0f\x45XPIREDINVOICES\x10\x05\x62\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'primitives_pb2', _globals)
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'primitives_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
DESCRIPTOR._options = None
_globals['_CHANNELSIDE']._serialized_start=718
_globals['_CHANNELSIDE']._serialized_end=754
_globals['_CHANNELSTATE']._serialized_start=757
_globals['_CHANNELSTATE']._serialized_end=1045
_globals['_HTLCSTATE']._serialized_start=1048
_globals['_HTLCSTATE']._serialized_end=1517
_globals['_CHANNELTYPENAME']._serialized_start=1520
_globals['_CHANNELTYPENAME']._serialized_end=1664
_globals['_AUTOCLEANSUBSYSTEM']._serialized_start=1667
_globals['_AUTOCLEANSUBSYSTEM']._serialized_end=1804
_globals['_AMOUNT']._serialized_start=25
_globals['_AMOUNT']._serialized_end=47
_globals['_AMOUNTORALL']._serialized_start=49
_globals['_AMOUNTORALL']._serialized_end=117
_globals['_AMOUNTORANY']._serialized_start=119
_globals['_AMOUNTORANY']._serialized_end=187
_globals['_CHANNELSTATECHANGECAUSE']._serialized_start=189
_globals['_CHANNELSTATECHANGECAUSE']._serialized_end=214
_globals['_OUTPOINT']._serialized_start=216
_globals['_OUTPOINT']._serialized_end=256
_globals['_FEERATE']._serialized_start=258
_globals['_FEERATE']._serialized_end=362
_globals['_OUTPUTDESC']._serialized_start=364
_globals['_OUTPUTDESC']._serialized_end=422
_globals['_ROUTEHOP']._serialized_start=424
_globals['_ROUTEHOP']._serialized_end=540
_globals['_ROUTEHINT']._serialized_start=542
_globals['_ROUTEHINT']._serialized_end=582
_globals['_ROUTEHINTLIST']._serialized_start=584
_globals['_ROUTEHINTLIST']._serialized_end=630
_globals['_TLVENTRY']._serialized_start=632
_globals['_TLVENTRY']._serialized_end=671
_globals['_TLVSTREAM']._serialized_start=673
_globals['_TLVSTREAM']._serialized_end=716
_CHANNELSIDE._serialized_start=718
_CHANNELSIDE._serialized_end=754
_CHANNELSTATE._serialized_start=757
_CHANNELSTATE._serialized_end=1045
_HTLCSTATE._serialized_start=1048
_HTLCSTATE._serialized_end=1517
_CHANNELTYPENAME._serialized_start=1520
_CHANNELTYPENAME._serialized_end=1664
_AUTOCLEANSUBSYSTEM._serialized_start=1667
_AUTOCLEANSUBSYSTEM._serialized_end=1804
_AMOUNT._serialized_start=25
_AMOUNT._serialized_end=47
_AMOUNTORALL._serialized_start=49
_AMOUNTORALL._serialized_end=117
_AMOUNTORANY._serialized_start=119
_AMOUNTORANY._serialized_end=187
_CHANNELSTATECHANGECAUSE._serialized_start=189
_CHANNELSTATECHANGECAUSE._serialized_end=214
_OUTPOINT._serialized_start=216
_OUTPOINT._serialized_end=256
_FEERATE._serialized_start=258
_FEERATE._serialized_end=362
_OUTPUTDESC._serialized_start=364
_OUTPUTDESC._serialized_end=422
_ROUTEHOP._serialized_start=424
_ROUTEHOP._serialized_end=540
_ROUTEHINT._serialized_start=542
_ROUTEHINT._serialized_end=582
_ROUTEHINTLIST._serialized_start=584
_ROUTEHINTLIST._serialized_end=630
_TLVENTRY._serialized_start=632
_TLVENTRY._serialized_end=671
_TLVSTREAM._serialized_start=673
_TLVSTREAM._serialized_end=716
# @@protoc_insertion_point(module_scope)

View file

@ -1291,6 +1291,17 @@ def delforward2py(m):
})
def disableoffer2py(m):
return remove_default({
"active": m.active, # PrimitiveField in generate_composite
"bolt12": m.bolt12, # PrimitiveField in generate_composite
"label": m.label, # PrimitiveField in generate_composite
"offer_id": hexlify(m.offer_id), # PrimitiveField in generate_composite
"single_use": m.single_use, # PrimitiveField in generate_composite
"used": m.used, # PrimitiveField in generate_composite
})
def disconnect2py(m):
return remove_default({
})