Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Extend API to allow invoice creation with a description hash by joostjager · Pull Request #438 · lightningdevkit/ldk-node · GitHub
Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Extend API to allow invoice creation with a description hash by joostjager · Pull Request #438 · lightningdevkit/ldk-node · GitHub
Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Extend API to allow invoice creation with a description hash by joostjager · Pull Request #438 · lightningdevkit/ldk-node · GitHub
Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Extend API to allow invoice creation with a description hash by joostjager · Pull Request #438 · lightningdevkit/ldk-node · GitHub
Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Extend API to allow invoice creation with a description hash by joostjager · Pull Request #438 · lightningdevkit/ldk-node · GitHub
Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Extend API to allow invoice creation with a description hash by joostjager · Pull Request #438 · lightningdevkit/ldk-node · GitHub
Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Extend API to allow invoice creation with a description hash by joostjager · Pull Request #438 · lightningdevkit/ldk-node · GitHub
Skip to content

Extend API to allow invoice creation with a description hash - #438

Merged
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash
Jan 23, 2025
Merged

Extend API to allow invoice creation with a description hash#438
tnull merged 2 commits into
lightningdevkit:mainfrom
joostjager:invoice-description-hash

Conversation

@joostjager

@joostjagerjoostjager commented Jan 21, 2025

Copy link
Copy Markdown
Contributor

Fixes#325

@joostjager
joostjagerforce-pushed the invoice-description-hash branch 2 times, most recently from be6be7e to f958924CompareJanuary 21, 2025 15:14
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadsrc/payment/bolt11.rs Outdated
Comment threadbindings/ldk_node.udl Outdated
@joostjager
joostjagerforce-pushed the invoice-description-hash branch 3 times, most recently from 1eff1ae to 6b131b1CompareJanuary 23, 2025 12:04
@joostjager
joostjagerforce-pushed the invoice-description-hash branch from 6b131b1 to 7e8a8abCompareJanuary 23, 2025 12:07

@tnulltnull left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! Looks pretty good, but I think we can clean it up a bit further if we follow the approach of #434. Let me know if I should tackle that in a follow-up though!

Comment threadsrc/payment/bolt11.rs Outdated

/// Represents the description of an invoice which has to be either a directly included string or
/// a hash of a description provided out of band.
pub enum Bolt11InvoiceDescription {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this type definition to uniffi_types.rs directly.

Comment threadsrc/payment/bolt11.rs Outdated
#[cfg(not(feature = "uniffi"))]
pub fn receive(
&self, amount_msat: u64, description: &str, expiry_secs: u32,
&self, amount_msat: u64, description: &lightning_invoice::Bolt11InvoiceDescription,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think rather than duplicating all of these, we should be able to follow the same approach as #434, i.e.,

a) add a local type alias

use lightning_invoice::Bolt11InvoiceDescriptionasLdkBolt11InvoiceDescription;#[cfg(not(feature = "uniffi"))]typeBolt11InvoiceDescription = LdkBolt11InvoiceDescription;#[cfg(feature = "uniffi")]typeBolt11InvoiceDescription = crate::uniffi_types::Bolt11InvoiceDescription;

above and have the receives use a macro like this:

macro_rules! maybe_convert_description {($description: expr) => {{
#[cfg(not(feature = "uniffi"))]{
$description
}
#[cfg(feature = "uniffi")]{&LdkBolt11InvoiceDescription::try_from($description)?
}}};}

(could also consider using it in the receive_inner/receive_via_jit_channel_inner, but the former is reused in unified_qr, which complicates things. So probably easier to do the conversion before giving the description to the _inners).

Comment threadsrc/payment/bolt11.rs
}

#[cfg(feature = "uniffi")]
pub fn receive(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I double checked this as it confused me that it be possible to omit docs here. And indeed it doesn't work: note that if you run cargo doc --features uniffi --open, all the receive variants wouldn't have any docs on them.

For non-Uniffi we forbid missing docs on a crate-wide level (see top of lib.rs), but unfortunately we can't do this under the uniffi feature as some of the generated code doesn't have docs on it, which would have the deny(missing_docs) lint fail. This is why we didn't catch the missing docs at build time with the uniffi feature.

@tnull

Copy link
Copy Markdown
Collaborator

Feel free to undraft.

@joostjager
joostjager marked this pull request as ready for review January 23, 2025 15:31
@tnull

Copy link
Copy Markdown
Collaborator

Flaky python test is pre-existing. Going ahead and landing this.

@tnull
tnull merged commit 92ee62f into lightningdevkit:mainJan 23, 2025
tnull added a commit that referenced this pull request Jan 24, 2025
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bolt11Payment::receive* methods should accept a Bolt11InvoiceDescription instead of a &str

2 participants

@joostjager@tnull