doc: adding schema to create offer requests

This commit is contained in:
vacwmX 2023-11-24 18:32:17 +01:00 committed by Christian Decker
parent 5eacb5b22e
commit d1052e3924
8 changed files with 412 additions and 162 deletions

View File

@ -1453,6 +1453,42 @@
"NewAddr.p2sh-segwit": 2,
"NewAddr.p2tr": 3
},
"OfferRecurrence": {
"Offer.recurrence.period": 2,
"Offer.recurrence.time_unit": 1,
"Offer.recurrence.time_unit_name": 3
},
"OfferRecurrence_base": {
"Offer.recurrence_base.basetime": 1,
"Offer.recurrence_base.start_any_period": 2
},
"OfferRecurrence_paywindow": {
"Offer.recurrence_paywindow.proportional_amount": 3,
"Offer.recurrence_paywindow.seconds_after": 2,
"Offer.recurrence_paywindow.seconds_before": 1
},
"OfferRequest": {
"Offer.absolute_expiry": 6,
"Offer.amount": 1,
"Offer.description": 2,
"Offer.issuer": 3,
"Offer.label": 4,
"Offer.quantity_max": 5,
"Offer.recurrence": 7,
"Offer.recurrence_base": 8,
"Offer.recurrence_limit": 10,
"Offer.recurrence_paywindow": 9,
"Offer.single_use": 11
},
"OfferResponse": {
"Offer.active": 2,
"Offer.bolt12": 4,
"Offer.created": 6,
"Offer.label": 7,
"Offer.offer_id": 1,
"Offer.single_use": 3,
"Offer.used": 5
},
"PayRequest": {
"Pay.amount_msat": 13,
"Pay.bolt11": 1,
@ -5290,6 +5326,106 @@
"added": "v23.08",
"deprecated": false
},
"Offer": {
"added": "pre-v0.10.1",
"deprecated": null
},
"Offer.absolute_expiry": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.active": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.amount": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.bolt12": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.created": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.description": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.issuer": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.label": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.offer_id": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.quantity_max": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence.period": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence.time_unit": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence.time_unit_name": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_base": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_base.basetime": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_base.start_any_period": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_limit": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_paywindow": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_paywindow.proportional_amount": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_paywindow.seconds_after": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.recurrence_paywindow.seconds_before": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.single_use": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Offer.used": {
"added": "pre-v0.10.1",
"deprecated": false
},
"Pay": {
"added": "pre-v0.10.1",
"deprecated": null

View File

@ -1804,39 +1804,40 @@ message OfferRequest {
string description = 2;
optional string issuer = 3;
optional string label = 4;
optional uint64 absolute_expiry = 5;
optional Offer_recurrence recurrence = 6;
optional Offer_recurrenceBase recurrence_base = 7;
optional Offer_recurrencePaywindow recurrence_paywindow = 8;
optional uint64 recurrence_limit = 9;
optional bool single_use = 10;
}
message Offer_recurrence {
uint32 time_unit = 1;
uint32 period = 2;
optional string time_unit_name = 3;
}
message Offer_recurrenceBase {
uint64 basetime = 1;
bool start_any_period = 2;
}
message Offer_recurrencePaywindow {
uint32 seconds_before = 1;
uint32 seconds_after = 2;
optional bool proportional_amount = 3;
optional uint64 quantity_max = 5;
optional uint64 absolute_expiry = 6;
optional OfferRecurrence recurrence = 7;
optional OfferRecurrence_base recurrence_base = 8;
optional OfferRecurrence_paywindow recurrence_paywindow = 9;
optional uint64 recurrence_limit = 10;
optional bool single_use = 11;
}
message OfferResponse {
bytes offer_id = 1;
bool active = 2;
bool single_use = 3;
string bolt12 = 4;
bool used = 5;
bool created = 6;
optional string label = 7;
bool active = 2;
bool single_use = 3;
string bolt12 = 4;
bool used = 5;
bool created = 6;
optional string label = 7;
}
message OfferRecurrence {
uint32 time_unit = 1;
uint32 period = 2;
optional string time_unit_name = 3;
}
message OfferRecurrence_base {
uint64 basetime = 1;
bool start_any_period = 2;
}
message OfferRecurrence_paywindow {
uint32 seconds_before = 1;
uint32 seconds_after = 2;
optional bool proportional_amount = 3;
}
message PingRequest {

View File

@ -1698,7 +1698,7 @@ impl From<responses::ListhtlcsResponse> for pb::ListhtlcsResponse {
impl From<responses::OfferResponse> for pb::OfferResponse {
fn from(c: responses::OfferResponse) -> Self {
Self {
offer_id: c.offer_id, // Rule #2 for type hex
offer_id: <Sha256 as AsRef<[u8]>>::as_ref(&c.offer_id).to_vec(), // Rule #2 for type hash
active: c.active, // Rule #2 for type boolean
single_use: c.single_use, // Rule #2 for type boolean
bolt12: c.bolt12, // Rule #2 for type string
@ -2506,31 +2506,30 @@ impl From<requests::ListhtlcsRequest> for pb::ListhtlcsRequest {
impl From<requests::OfferRecurrence> for pb::OfferRecurrence {
fn from(c: requests::OfferRecurrence) -> Self {
Self {
period: c.period, // Rule #2 for type u32
time_unit: c.time_unit, // Rule #2 for type u32
period: c.period, // Rule #2 for type u32
time_unit_name: c.time_unit_name, // Rule #2 for type string?
}
}
}
#[allow(unused_variables)]
impl From<requests::OfferRecurrenceBase> for pb::OfferRecurrenceBase {
fn from(c: requests::OfferRecurrenceBase) -> Self {
impl From<requests::OfferRecurrence_base> for pb::OfferRecurrenceBase {
fn from(c: requests::OfferRecurrence_base) -> Self {
Self {
basetime: c.basetime, // Rule #2 for type u64
start_any_period: c.start_any_period, // Rule #2 for type bool
basetime: c.basetime, // Rule #2 for type u64
start_any_period: c.start_any_period, // Rule #2 for type boolean
}
}
}
#[allow(unused_variables)]
impl From<requests::OfferRecurrencePaywindow> for pb::OfferRecurrencePaywindow {
fn from(c: requests::OfferRecurrencePaywindow) -> Self {
impl From<requests::OfferRecurrence_paywindow> for pb::OfferRecurrencePaywindow {
fn from(c: requests::OfferRecurrence_paywindow) -> Self {
Self {
seconds_before: c.seconds_before, // Rule #2 for type u32
seconds_after: c.seconds_after, // Rule #2 for type u32
proportional_amount: c.proportional_amount, // Rule #2 for type bool?
seconds_before: c.seconds_before, // Rule #2 for type u32
seconds_after: c.seconds_after, // Rule #2 for type u32
proportional_amount: c.proportional_amount, // Rule #2 for type boolean?
}
}
}
@ -2542,13 +2541,14 @@ impl From<requests::OfferRequest> for pb::OfferRequest {
amount: Some(c.amount.into()), // Rule #2 for type msat_or_any
description: c.description, // Rule #2 for type string
issuer: c.issuer, // Rule #2 for type string?
label: c.label, // Rule #2 for type string?
label: c.label, // Rule #2 for type string?
quantity_max: c.quantity_max, // Rule #2 for type u64?
absolute_expiry: c.absolute_expiry, // Rule #2 for type u64?
recurrence: c.recurrence.map(|v| v.into()),
recurrence_base: c.recurrence_base.map(|v| v.into()),
recurrence_paywindow: c.recurrence_paywindow.map(|v| v.into()),
recurrence_limit: c.recurrence_limit, // Rule #2 for type u64?
single_use: c.single_use // Rule #2 for type bool?
single_use: c.single_use, // Rule #2 for type boolean?
}
}
}
@ -3307,31 +3307,30 @@ impl From<pb::ListhtlcsRequest> for requests::ListhtlcsRequest {
impl From<pb::OfferRecurrence> for requests::OfferRecurrence {
fn from(c: pb::OfferRecurrence) -> Self {
Self {
period: c.period, // Rule #1 for type u32
time_unit: c.time_unit, // Rule #1 for type u32
period: c.period, // Rule #1 for type u32
time_unit_name: c.time_unit_name, // Rule #1 for type string?
}
}
}
#[allow(unused_variables)]
impl From<pb::OfferRecurrenceBase> for requests::OfferRecurrenceBase {
impl From<pb::OfferRecurrenceBase> for requests::OfferRecurrence_base {
fn from(c: pb::OfferRecurrenceBase) -> Self {
Self {
basetime: c.basetime, // Rule #1 for type u64
start_any_period: c.start_any_period, // Rule #1 for type bool
basetime: c.basetime, // Rule #1 for type u64
start_any_period: c.start_any_period, // Rule #1 for type boolean
}
}
}
#[allow(unused_variables)]
impl From<pb::OfferRecurrencePaywindow> for requests::OfferRecurrencePaywindow {
impl From<pb::OfferRecurrencePaywindow> for requests::OfferRecurrence_paywindow {
fn from(c: pb::OfferRecurrencePaywindow) -> Self {
Self {
seconds_before: c.seconds_before, // Rule #1 for type u32
seconds_after: c.seconds_after, // Rule #1 for type u32
proportional_amount: c.proportional_amount, // Rule #1 for type bool?
seconds_before: c.seconds_before, // Rule #1 for type u32
seconds_after: c.seconds_after, // Rule #1 for type u32
proportional_amount: c.proportional_amount, // Rule #1 for type boolean?
}
}
}
@ -3343,13 +3342,14 @@ impl From<pb::OfferRequest> for requests::OfferRequest {
amount: c.amount.unwrap().into(), // Rule #1 for type msat_or_any
description: c.description, // Rule #1 for type string
issuer: c.issuer, // Rule #1 for type string?
label: c.label, // Rule #1 for type string?
label: c.label, // Rule #1 for type string?
quantity_max: c.quantity_max, // Rule #1 for type u64?
absolute_expiry: c.absolute_expiry, // Rule #1 for type u64?
recurrence: c.recurrence.map(|v| v.into()),
recurrence_base: c.recurrence_base.map(|v| v.into()),
recurrence_paywindow: c.recurrence_paywindow.map(|v| v.into()),
recurrence_limit: c.recurrence_limit, // Rule #1 for type u64?
single_use: c.single_use // Rule #1 for type bool?
single_use: c.single_use, // Rule #1 for type boolean?
}
}
}

View File

@ -1655,6 +1655,7 @@ async fn offer(
)
)),
}
}
async fn ping(

81
cln-rpc/src/model.rs generated
View File

@ -1901,44 +1901,48 @@ pub mod requests {
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct OfferRecurrence {
pub time_unit: u32,
pub period: u32,
pub time_unit_name: Option<String>,
pub time_unit: u32,
pub period: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_unit_name: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct OfferRecurrenceBase {
pub basetime: u64,
pub start_any_period: bool,
pub struct OfferRecurrence_base {
pub basetime: u64,
pub start_any_period: bool,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct OfferRecurrencePaywindow {
pub seconds_before: u32,
pub seconds_after: u32,
pub proportional_amount: Option<bool>,
pub struct OfferRecurrence_paywindow {
pub seconds_before: u32,
pub seconds_after: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub proportional_amount: Option<bool>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct OfferRequest {
pub amount: AmountOrAny,
pub description: String,
pub amount: AmountOrAny,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub issuer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub absolute_expiry: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence: Option<OfferRecurrence>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence_base: Option<OfferRecurrenceBase>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence_paywindow: Option<OfferRecurrencePaywindow>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence_limit: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub single_use: Option<bool>,
pub issuer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quantity_max: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub absolute_expiry: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence: Option<OfferRecurrence>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence_base: Option<OfferRecurrence_base>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence_paywindow: Option<OfferRecurrence_paywindow>,
#[serde(skip_serializing_if = "Option::is_none")]
pub recurrence_limit: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub single_use: Option<bool>,
}
impl From<OfferRequest> for Request {
@ -1951,6 +1955,13 @@ pub mod requests {
type Response = super::responses::OfferResponse;
}
impl TypedRequest for OfferRequest {
type Response = super::responses::OfferResponse;
fn method(&self) -> &str {
"offer"
}
}
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct PingRequest {
pub id: PublicKey,
@ -5714,14 +5725,14 @@ pub mod responses {
#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct OfferResponse {
pub offer_id: Vec<u8>,
pub active: bool,
pub single_use: bool,
pub bolt12: String,
pub used: bool,
pub created: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
pub offer_id: Sha256,
pub active: bool,
pub single_use: bool,
pub bolt12: String,
pub used: bool,
pub created: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub label: Option<String>,
}
impl TryFrom<Response> for OfferResponse {

File diff suppressed because one or more lines are too long

View File

@ -1423,13 +1423,13 @@ def listhtlcs2py(m):
def offer2py(m):
return remove_default({
"offer_id": m.offer_id, # PrimitiveField in generate_composite
"offer_id": hexlify(m.offer_id), # PrimitiveField in generate_composite
"active": m.active, # PrimitiveField in generate_composite
"single_use": m.single_use, # PrimitiveField in generate_composite
"bolt12": m.bolt12, # PrimitiveField in generate_composite
"used": m.used, # PrimitiveField in generate_composite
"created": c.created, # PrimitiveField in generate_composite
"label": c.label, # PrimitiveField in generate_composite # PrimitiveField in generate_composite
"created": m.created, # PrimitiveField in generate_composite
"label": m.label, # PrimitiveField in generate_composite
})

View File

@ -0,0 +1,101 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": [
"amount",
"description"
],
"properties": {
"amount": {
"type": "msat_or_any",
"description": "either the string \"any\" (e.g. for donations) or a positive value in millisatoshi precision"
},
"description": {
"type": "string",
"description": "a short description of purpose of the offer"
},
"issuer": {
"type": "string",
"description": "who is issuing this offer"
},
"label": {
"type": "string",
"description": "an internal-use name for the offer"
},
"quantity_max": {
"type": "u64",
"description": "specifies the number of items up (and including) this maximum"
},
"absolute_expiry": {
"type": "u64",
"description": "the time the offer is valid until, in seconds since the first day of 1970 UTC"
},
"recurrence": {
"type": "object",
"required": [
"time_unit",
"period"
],
"properties": {
"time_unit": {
"type": "u32",
"description": "a positive number referring to a time unit - 0 (seconds), 1 (days), 2 (months), 3 (years)"
},
"period": {
"type": "u32",
"description": "the positive number which the time unit refers to"
},
"time_unit_name": {
"type": "string",
"description": "the name of the specified time unit - either \"seconds\", \"minutes\", \"hours\", \"days\", \"weeks\" or \"years\""
}
}
},
"recurrence_base": {
"type": "object",
"required": [
"basetime",
"start_any_period"
],
"properties": {
"basetime": {
"type": "u64",
"description": "time in seconds since the first day of 1970 UTC"
},
"start_any_period": {
"type": "boolean",
"description": "whether or not the invoice should start at any period"
}
}
},
"recurrence_paywindow": {
"type": "object",
"required": [
"seconds_before",
"seconds_after"
],
"properties": {
"seconds_before": {
"type": "u32",
"description": "number of seconds before the start of a period in which an invoice and payment is valid"
},
"seconds_after": {
"type": "u32",
"description": "number of seconds after the start of a period in which an invoice and payment is valid"
},
"proportional_amount": {
"type": "boolean",
"description": "indicates whether the amount of the invoice will be scaled by the time remaining in the period"
}
}
},
"recurrence_limit": {
"type": "u64",
"description": "the maximum recurrence period which exists"
},
"single_use": {
"type": "boolean",
"description": "indicates that the offer is only valid once"
}
}
}