From 2a71e8be90c1d52f46fdbf449ad7e8d4c2a2a196 Mon Sep 17 00:00:00 2001 From: Jim Marshall Date: Fri, 13 Jun 2025 10:13:46 +0100 Subject: [PATCH 1/2] Add lnbits example --- examples/lnbitsPayment.ts | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 examples/lnbitsPayment.ts diff --git a/examples/lnbitsPayment.ts b/examples/lnbitsPayment.ts new file mode 100644 index 0000000..5086d5e --- /dev/null +++ b/examples/lnbitsPayment.ts @@ -0,0 +1,44 @@ +import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; +import axios from "axios"; + +// Constants +const LN_BITS_URL = "https://demo.lnbits.com/api/v1/payments"; +const ADMIN_KEY = process.env.LNBITS_ADMIN_KEY as string; // Set in your env + +async function pay(offer: any) { + console.log("Paying using lnbits:"); + + try { + const response = await axios.post( + LN_BITS_URL, + { + out: true, + bolt11: offer.payment_request + }, + { + headers: { + "X-Api-Key": ADMIN_KEY, + "Content-Type": "application/json" + } + } + ); + + console.log("Payment successful:", response.data); + } catch (error) { + if (axios.isAxiosError(error)) { + console.error("Payment failed:", error.response?.data || error.message); + } else { + console.error("Unexpected error:", error); + } + } +} + +async function main() { + const path = await convertMarkdownToPdf("# Save this one using LNbits", { + downloadPath: "output.pdf", + onPaymentRequest: pay + }); + console.log("Saved PDF to:", path); +} + +main().catch(console.error); \ No newline at end of file From 2458d366b0f6650d6f2511f804329e7fd9c86356 Mon Sep 17 00:00:00 2001 From: George Alexiou Date: Fri, 13 Jun 2025 12:22:24 +0100 Subject: [PATCH 2/2] refactor: update pay function signatures to use OfferDetails type across examples --- examples/albyPayment.ts | 3 ++- examples/basicUsage.ts | 3 ++- examples/downloadToFile.ts | 3 ++- examples/fewsatsPayment.ts | 3 ++- examples/inMemoryExample.ts | 3 ++- examples/lnbitsPayment.ts | 3 ++- examples/randomMarkdown.ts | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/examples/albyPayment.ts b/examples/albyPayment.ts index edfcf05..137db5b 100644 --- a/examples/albyPayment.ts +++ b/examples/albyPayment.ts @@ -1,5 +1,6 @@ import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; import axios from 'axios'; +import type { OfferDetails } from '@serendipityai/markdown2pdf-typescript'; // Configure Alby client const ALBY_API_URL = 'https://api.getalby.com'; @@ -11,7 +12,7 @@ const client = axios.create({ } }); -async function pay(offer: any) { +async function pay(offer: OfferDetails) { console.log("Paying using Alby:"); try { // Pay the invoice using Alby's API diff --git a/examples/basicUsage.ts b/examples/basicUsage.ts index f056f53..c7f3d5a 100644 --- a/examples/basicUsage.ts +++ b/examples/basicUsage.ts @@ -1,6 +1,7 @@ import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; +import type { OfferDetails } from '@serendipityai/markdown2pdf-typescript'; -async function pay(offer: any) { +async function pay(offer: OfferDetails) { console.log("⚡ Lightning payment required"); console.log(`Amount: ${offer.amount} ${offer.currency}`); console.log(`Description: ${offer.description}`); diff --git a/examples/downloadToFile.ts b/examples/downloadToFile.ts index b6f3769..c75df3f 100644 --- a/examples/downloadToFile.ts +++ b/examples/downloadToFile.ts @@ -1,6 +1,7 @@ import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; +import type { OfferDetails } from '@serendipityai/markdown2pdf-typescript'; -async function pay(offer: any) { +async function pay(offer: OfferDetails) { console.log("Paying manually:"); console.log(offer.payment_request); await new Promise(resolve => { process.stdin.once("data", () => resolve(undefined)); }); diff --git a/examples/fewsatsPayment.ts b/examples/fewsatsPayment.ts index 7df0cfd..e4e928a 100644 --- a/examples/fewsatsPayment.ts +++ b/examples/fewsatsPayment.ts @@ -1,9 +1,10 @@ import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; +import type { OfferDetails } from '@serendipityai/markdown2pdf-typescript'; import { Fewsats } from 'fewsats'; // Configure the SDK const client = new Fewsats({ apiKey: process.env.FEWSATS_API_KEY }); -async function pay(offer: any) { +async function pay(offer: OfferDetails) { console.log("Paying using Fewsats:"); console.log(offer); diff --git a/examples/inMemoryExample.ts b/examples/inMemoryExample.ts index 8f2665b..bf5ec72 100644 --- a/examples/inMemoryExample.ts +++ b/examples/inMemoryExample.ts @@ -1,6 +1,7 @@ import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; +import type { OfferDetails } from '@serendipityai/markdown2pdf-typescript'; -async function pay(offer: any) { +async function pay(offer: OfferDetails) { console.log("Pay invoice and press Enter:"); console.log(offer.payment_request); await new Promise(resolve => { process.stdin.once("data", () => resolve(undefined)); }); diff --git a/examples/lnbitsPayment.ts b/examples/lnbitsPayment.ts index 5086d5e..4caa8c5 100644 --- a/examples/lnbitsPayment.ts +++ b/examples/lnbitsPayment.ts @@ -1,11 +1,12 @@ import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; import axios from "axios"; +import type { OfferDetails } from '@serendipityai/markdown2pdf-typescript'; // Constants const LN_BITS_URL = "https://demo.lnbits.com/api/v1/payments"; const ADMIN_KEY = process.env.LNBITS_ADMIN_KEY as string; // Set in your env -async function pay(offer: any) { +async function pay(offer: OfferDetails) { console.log("Paying using lnbits:"); try { diff --git a/examples/randomMarkdown.ts b/examples/randomMarkdown.ts index 4746ec0..601261a 100644 --- a/examples/randomMarkdown.ts +++ b/examples/randomMarkdown.ts @@ -1,5 +1,6 @@ import { convertMarkdownToPdf } from "@serendipityai/markdown2pdf-typescript"; import { OpenAI } from "openai"; // npm install openai +import type { OfferDetails } from '@serendipityai/markdown2pdf-typescript'; const openai = new OpenAI(); @@ -46,7 +47,7 @@ Start now. return (response.choices[0]?.message?.content || ""); } -async function pay(offer: any) { +async function pay(offer: OfferDetails) { console.log("Paying using Alby:"); // const payment = new Payment(); // const payResult = await payment.bolt11_payment(offer.payment_request);