@sunnyln/lni 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +118 -0
  2. package/dist/errors.d.ts +13 -0
  3. package/dist/errors.d.ts.map +1 -0
  4. package/dist/errors.js +25 -0
  5. package/dist/errors.js.map +1 -0
  6. package/dist/index.d.ts +11 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +11 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/internal/encoding.d.ts +5 -0
  11. package/dist/internal/encoding.d.ts.map +1 -0
  12. package/dist/internal/encoding.js +79 -0
  13. package/dist/internal/encoding.js.map +1 -0
  14. package/dist/internal/http.d.ts +19 -0
  15. package/dist/internal/http.d.ts.map +1 -0
  16. package/dist/internal/http.js +130 -0
  17. package/dist/internal/http.js.map +1 -0
  18. package/dist/internal/polling.d.ts +8 -0
  19. package/dist/internal/polling.d.ts.map +1 -0
  20. package/dist/internal/polling.js +26 -0
  21. package/dist/internal/polling.js.map +1 -0
  22. package/dist/internal/transform.d.ts +10 -0
  23. package/dist/internal/transform.d.ts.map +1 -0
  24. package/dist/internal/transform.js +91 -0
  25. package/dist/internal/transform.js.map +1 -0
  26. package/dist/lnurl.d.ts +13 -0
  27. package/dist/lnurl.d.ts.map +1 -0
  28. package/dist/lnurl.js +156 -0
  29. package/dist/lnurl.js.map +1 -0
  30. package/dist/nodes/blink.d.ts +23 -0
  31. package/dist/nodes/blink.d.ts.map +1 -0
  32. package/dist/nodes/blink.js +292 -0
  33. package/dist/nodes/blink.js.map +1 -0
  34. package/dist/nodes/cln.d.ts +24 -0
  35. package/dist/nodes/cln.d.ts.map +1 -0
  36. package/dist/nodes/cln.js +266 -0
  37. package/dist/nodes/cln.js.map +1 -0
  38. package/dist/nodes/lnd.d.ts +24 -0
  39. package/dist/nodes/lnd.d.ts.map +1 -0
  40. package/dist/nodes/lnd.js +205 -0
  41. package/dist/nodes/lnd.js.map +1 -0
  42. package/dist/nodes/nwc.d.ts +21 -0
  43. package/dist/nodes/nwc.d.ts.map +1 -0
  44. package/dist/nodes/nwc.js +194 -0
  45. package/dist/nodes/nwc.js.map +1 -0
  46. package/dist/nodes/phoenixd.d.ts +22 -0
  47. package/dist/nodes/phoenixd.d.ts.map +1 -0
  48. package/dist/nodes/phoenixd.js +258 -0
  49. package/dist/nodes/phoenixd.js.map +1 -0
  50. package/dist/nodes/speed.d.ts +25 -0
  51. package/dist/nodes/speed.d.ts.map +1 -0
  52. package/dist/nodes/speed.js +170 -0
  53. package/dist/nodes/speed.js.map +1 -0
  54. package/dist/nodes/strike.d.ts +25 -0
  55. package/dist/nodes/strike.d.ts.map +1 -0
  56. package/dist/nodes/strike.js +231 -0
  57. package/dist/nodes/strike.js.map +1 -0
  58. package/dist/types.d.ts +169 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +6 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +70 -0
package/dist/lnurl.js ADDED
@@ -0,0 +1,156 @@
1
+ import { bech32 } from '@scure/base';
2
+ import { LniError } from './errors.js';
3
+ import { resolveFetch, requestJson, requestText } from './internal/http.js';
4
+ export function detectPaymentType(destination) {
5
+ const input = destination.trim();
6
+ const lower = input.toLowerCase();
7
+ if (input.includes('@') && !lower.startsWith('lnurl')) {
8
+ return 'lightning_address';
9
+ }
10
+ if (lower.startsWith('lnbc') || lower.startsWith('lntb') || lower.startsWith('lntbs')) {
11
+ return 'bolt11';
12
+ }
13
+ if (lower.startsWith('lno1')) {
14
+ return 'bolt12';
15
+ }
16
+ if (lower.startsWith('lnurl1')) {
17
+ return 'lnurl';
18
+ }
19
+ throw new LniError('InvalidInput', 'Unknown payment destination format. Expected BOLT11, BOLT12, LNURL, or Lightning Address.');
20
+ }
21
+ export function needsResolution(destination) {
22
+ const normalized = destination.trim().toLowerCase();
23
+ return destination.includes('@') || normalized.startsWith('lnurl1');
24
+ }
25
+ export function lightningAddressToUrl(user, domain) {
26
+ return `https://${domain}/.well-known/lnurlp/${user}`;
27
+ }
28
+ export function decodeLnurl(lnurl) {
29
+ try {
30
+ const decoded = bech32.decode(lnurl.toLowerCase(), Number.MAX_SAFE_INTEGER);
31
+ if (decoded.prefix !== 'lnurl') {
32
+ throw new LniError('InvalidInput', "LNURL must use the 'lnurl' prefix.");
33
+ }
34
+ const bytes = Uint8Array.from(bech32.fromWords(decoded.words));
35
+ return new TextDecoder().decode(bytes);
36
+ }
37
+ catch (error) {
38
+ if (error instanceof LniError) {
39
+ throw error;
40
+ }
41
+ throw new LniError('InvalidInput', `Invalid LNURL encoding: ${error?.message ?? 'unknown error'}`);
42
+ }
43
+ }
44
+ async function fetchLnurlPay(url, fetchFn) {
45
+ const payload = await requestText(fetchFn, url, {
46
+ method: 'GET',
47
+ headers: {
48
+ accept: 'application/json',
49
+ },
50
+ timeoutMs: 30_000,
51
+ });
52
+ let parsed;
53
+ try {
54
+ parsed = JSON.parse(payload);
55
+ }
56
+ catch (error) {
57
+ throw new LniError('Json', `Invalid LNURL-pay response: ${error.message}`);
58
+ }
59
+ const maybeError = parsed;
60
+ if (maybeError?.status === 'ERROR') {
61
+ throw new LniError('LnurlError', maybeError.reason);
62
+ }
63
+ return parsed;
64
+ }
65
+ async function requestInvoice(callbackUrl, amountMsats, fetchFn) {
66
+ const callback = new URL(callbackUrl);
67
+ callback.searchParams.set('amount', String(amountMsats));
68
+ const response = await requestJson(fetchFn, callback.toString(), {
69
+ method: 'GET',
70
+ headers: {
71
+ accept: 'application/json',
72
+ },
73
+ timeoutMs: 30_000,
74
+ });
75
+ const maybeError = response;
76
+ if (maybeError.status === 'ERROR') {
77
+ throw new LniError('LnurlError', maybeError.reason);
78
+ }
79
+ const invoiceResponse = response;
80
+ if (!invoiceResponse.pr) {
81
+ throw new LniError('Json', 'Invalid LNURL invoice response: missing pr field');
82
+ }
83
+ return invoiceResponse.pr;
84
+ }
85
+ function parseLightningAddress(input) {
86
+ const parts = input.split('@');
87
+ if (parts.length !== 2 || !parts[0] || !parts[1]) {
88
+ throw new LniError('InvalidInput', 'Invalid Lightning Address format.');
89
+ }
90
+ return { user: parts[0], domain: parts[1] };
91
+ }
92
+ function assertAmountRange(amountMsats, minSendable, maxSendable) {
93
+ if (amountMsats < minSendable) {
94
+ throw new LniError('InvalidInput', `Amount ${amountMsats} msats is below minimum ${minSendable} msats`);
95
+ }
96
+ if (amountMsats > maxSendable) {
97
+ throw new LniError('InvalidInput', `Amount ${amountMsats} msats exceeds maximum ${maxSendable} msats`);
98
+ }
99
+ }
100
+ export async function resolveToBolt11(destination, amountMsats, options) {
101
+ const fetchFn = resolveFetch(options?.fetch);
102
+ const destinationType = detectPaymentType(destination);
103
+ if (destinationType === 'bolt11') {
104
+ return destination.trim();
105
+ }
106
+ if (destinationType === 'bolt12') {
107
+ throw new LniError('InvalidInput', 'BOLT12 offers should be paid via payOffer.');
108
+ }
109
+ if (amountMsats === undefined || amountMsats === null) {
110
+ throw new LniError('InvalidInput', 'LNURL and Lightning Address resolution requires amountMsats.');
111
+ }
112
+ if (destinationType === 'lightning_address') {
113
+ const { user, domain } = parseLightningAddress(destination.trim());
114
+ const lnurlPay = await fetchLnurlPay(lightningAddressToUrl(user, domain), fetchFn);
115
+ assertAmountRange(amountMsats, lnurlPay.minSendable, lnurlPay.maxSendable);
116
+ return requestInvoice(lnurlPay.callback, amountMsats, fetchFn);
117
+ }
118
+ const lnurl = decodeLnurl(destination.trim());
119
+ const lnurlPay = await fetchLnurlPay(lnurl, fetchFn);
120
+ assertAmountRange(amountMsats, lnurlPay.minSendable, lnurlPay.maxSendable);
121
+ return requestInvoice(lnurlPay.callback, amountMsats, fetchFn);
122
+ }
123
+ export async function getPaymentInfo(destination, amountMsats, options) {
124
+ const fetchFn = resolveFetch(options?.fetch);
125
+ const destinationType = detectPaymentType(destination);
126
+ if (destinationType === 'bolt11' || destinationType === 'bolt12') {
127
+ return {
128
+ destinationType,
129
+ destination,
130
+ amountMsats,
131
+ };
132
+ }
133
+ if (destinationType === 'lightning_address') {
134
+ const { user, domain } = parseLightningAddress(destination.trim());
135
+ const lnurlPay = await fetchLnurlPay(lightningAddressToUrl(user, domain), fetchFn);
136
+ return {
137
+ destinationType,
138
+ destination,
139
+ amountMsats,
140
+ minSendableMsats: lnurlPay.minSendable,
141
+ maxSendableMsats: lnurlPay.maxSendable,
142
+ description: lnurlPay.metadata,
143
+ };
144
+ }
145
+ const lnurl = decodeLnurl(destination.trim());
146
+ const lnurlPay = await fetchLnurlPay(lnurl, fetchFn);
147
+ return {
148
+ destinationType,
149
+ destination,
150
+ amountMsats,
151
+ minSendableMsats: lnurlPay.minSendable,
152
+ maxSendableMsats: lnurlPay.maxSendable,
153
+ description: lnurlPay.metadata,
154
+ };
155
+ }
156
+ //# sourceMappingURL=lnurl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lnurl.js","sourceRoot":"","sources":["../src/lnurl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type BlinkConfig, type CreateInvoiceParams, type CreateOfferParams, type InvoiceEventCallback, type LightningNode, type ListTransactionsParams, type LookupInvoiceParams, type NodeInfo, type NodeRequestOptions, type Offer, type OnInvoiceEventParams, type PayInvoiceParams, type PayInvoiceResponse, type Transaction } from '../types.js';
2
+ export declare class BlinkNode implements LightningNode {
3
+ private readonly config;
4
+ private readonly fetchFn;
5
+ private readonly timeoutMs?;
6
+ private readonly baseUrl;
7
+ constructor(config: BlinkConfig, options?: NodeRequestOptions);
8
+ private headers;
9
+ private gql;
10
+ private getBtcWalletId;
11
+ getInfo(): Promise<NodeInfo>;
12
+ createInvoice(params: CreateInvoiceParams): Promise<Transaction>;
13
+ payInvoice(params: PayInvoiceParams): Promise<PayInvoiceResponse>;
14
+ createOffer(_params: CreateOfferParams): Promise<Offer>;
15
+ getOffer(_search?: string): Promise<Offer>;
16
+ listOffers(_search?: string): Promise<Offer[]>;
17
+ payOffer(_offer: string, _amountMsats: number, _payerNote?: string): Promise<PayInvoiceResponse>;
18
+ lookupInvoice(params: LookupInvoiceParams): Promise<Transaction>;
19
+ listTransactions(params: ListTransactionsParams): Promise<Transaction[]>;
20
+ decode(str: string): Promise<string>;
21
+ onInvoiceEvents(params: OnInvoiceEventParams, callback: InvoiceEventCallback): Promise<void>;
22
+ }
23
+ //# sourceMappingURL=blink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blink.d.ts","sourceRoot":"","sources":["../../src/nodes/blink.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,KAAK,EAAE,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AA6ErW,qBAAa,SAAU,YAAW,aAAa;IAKjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAEJ,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB;IAMlF,OAAO,CAAC,OAAO;YAQD,GAAG;YAsBH,cAAc;IAyBtB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IA2B5B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAoDhE,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA4DjE,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAIvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAI1C,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAI9C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIhG,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAahE,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA6FxE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpC,eAAe,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAOnG"}
@@ -0,0 +1,292 @@
1
+ import { LniError } from '../errors.js';
2
+ import { requestJson, resolveFetch, toTimeoutMs } from '../internal/http.js';
3
+ import { pollInvoiceEvents } from '../internal/polling.js';
4
+ import { emptyNodeInfo, emptyTransaction, satsToMsats } from '../internal/transform.js';
5
+ import { InvoiceType } from '../types.js';
6
+ export class BlinkNode {
7
+ config;
8
+ fetchFn;
9
+ timeoutMs;
10
+ baseUrl;
11
+ constructor(config, options = {}) {
12
+ this.config = config;
13
+ this.fetchFn = resolveFetch(options.fetch);
14
+ this.timeoutMs = toTimeoutMs(config.httpTimeout);
15
+ this.baseUrl = config.baseUrl ?? 'https://api.blink.sv/graphql';
16
+ }
17
+ headers(extra) {
18
+ return {
19
+ 'x-api-key': this.config.apiKey,
20
+ 'content-type': 'application/json',
21
+ ...(extra ?? {}),
22
+ };
23
+ }
24
+ async gql(query, variables) {
25
+ const payload = await requestJson(this.fetchFn, this.baseUrl, {
26
+ method: 'POST',
27
+ headers: this.headers(),
28
+ json: {
29
+ query,
30
+ variables,
31
+ },
32
+ timeoutMs: this.timeoutMs,
33
+ });
34
+ if (payload.errors?.length) {
35
+ throw new LniError('Api', payload.errors.map((error) => error.message).join(', '));
36
+ }
37
+ if (!payload.data) {
38
+ throw new LniError('Json', 'No data in Blink GraphQL response.');
39
+ }
40
+ return payload.data;
41
+ }
42
+ async getBtcWalletId() {
43
+ const query = `
44
+ query Me {
45
+ me {
46
+ defaultAccount {
47
+ wallets {
48
+ id
49
+ walletCurrency
50
+ balance
51
+ }
52
+ }
53
+ }
54
+ }
55
+ `;
56
+ const response = await this.gql(query);
57
+ const wallet = response.me.defaultAccount.wallets.find((item) => item.walletCurrency === 'BTC');
58
+ if (!wallet) {
59
+ throw new LniError('Api', 'No BTC wallet found in Blink account.');
60
+ }
61
+ return wallet.id;
62
+ }
63
+ async getInfo() {
64
+ const query = `
65
+ query Me {
66
+ me {
67
+ defaultAccount {
68
+ wallets {
69
+ id
70
+ walletCurrency
71
+ balance
72
+ }
73
+ }
74
+ }
75
+ }
76
+ `;
77
+ const response = await this.gql(query);
78
+ const wallet = response.me.defaultAccount.wallets.find((item) => item.walletCurrency === 'BTC');
79
+ const sats = wallet?.balance ?? 0;
80
+ return emptyNodeInfo({
81
+ alias: 'Blink Node',
82
+ network: 'mainnet',
83
+ sendBalanceMsat: satsToMsats(sats),
84
+ receiveBalanceMsat: satsToMsats(sats),
85
+ });
86
+ }
87
+ async createInvoice(params) {
88
+ if ((params.invoiceType ?? InvoiceType.Bolt11) !== InvoiceType.Bolt11) {
89
+ throw new LniError('Api', 'Bolt12 is not implemented for BlinkNode.');
90
+ }
91
+ const walletId = await this.getBtcWalletId();
92
+ const query = `
93
+ mutation LnInvoiceCreate($input: LnInvoiceCreateInput!) {
94
+ lnInvoiceCreate(input: $input) {
95
+ invoice {
96
+ paymentRequest
97
+ paymentHash
98
+ satoshis
99
+ }
100
+ errors {
101
+ message
102
+ }
103
+ }
104
+ }
105
+ `;
106
+ const response = await this.gql(query, {
107
+ input: {
108
+ amount: String(Math.floor((params.amountMsats ?? 0) / 1000)),
109
+ walletId,
110
+ memo: params.description,
111
+ },
112
+ });
113
+ if (response.lnInvoiceCreate.errors?.length) {
114
+ throw new LniError('Api', response.lnInvoiceCreate.errors.map((error) => error.message).join(', '));
115
+ }
116
+ const invoice = response.lnInvoiceCreate.invoice;
117
+ if (!invoice) {
118
+ throw new LniError('Json', 'No invoice returned from Blink invoice creation.');
119
+ }
120
+ return emptyTransaction({
121
+ type: 'incoming',
122
+ invoice: invoice.paymentRequest,
123
+ paymentHash: invoice.paymentHash,
124
+ amountMsats: satsToMsats(invoice.satoshis),
125
+ createdAt: Math.floor(Date.now() / 1000),
126
+ description: params.description ?? '',
127
+ descriptionHash: params.descriptionHash ?? '',
128
+ payerNote: '',
129
+ externalId: '',
130
+ });
131
+ }
132
+ async payInvoice(params) {
133
+ const walletId = await this.getBtcWalletId();
134
+ const feeProbe = await this.gql(`
135
+ mutation lnInvoiceFeeProbe($input: LnInvoiceFeeProbeInput!) {
136
+ lnInvoiceFeeProbe(input: $input) {
137
+ errors {
138
+ message
139
+ }
140
+ amount
141
+ }
142
+ }
143
+ `, {
144
+ input: {
145
+ paymentRequest: params.invoice,
146
+ walletId,
147
+ },
148
+ });
149
+ if (feeProbe.lnInvoiceFeeProbe.errors?.length) {
150
+ throw new LniError('Api', feeProbe.lnInvoiceFeeProbe.errors.map((error) => error.message).join(', '));
151
+ }
152
+ const payment = await this.gql(`
153
+ mutation LnInvoicePaymentSend($input: LnInvoicePaymentInput!) {
154
+ lnInvoicePaymentSend(input: $input) {
155
+ status
156
+ errors {
157
+ message
158
+ }
159
+ }
160
+ }
161
+ `, {
162
+ input: {
163
+ paymentRequest: params.invoice,
164
+ walletId,
165
+ },
166
+ });
167
+ if (payment.lnInvoicePaymentSend.errors?.length) {
168
+ throw new LniError('Api', payment.lnInvoicePaymentSend.errors.map((error) => error.message).join(', '));
169
+ }
170
+ if (payment.lnInvoicePaymentSend.status !== 'SUCCESS') {
171
+ throw new LniError('Api', `Blink payment failed with status ${payment.lnInvoicePaymentSend.status}`);
172
+ }
173
+ return {
174
+ paymentHash: '',
175
+ preimage: '',
176
+ feeMsats: satsToMsats(feeProbe.lnInvoiceFeeProbe.amount ?? 0),
177
+ };
178
+ }
179
+ async createOffer(_params) {
180
+ throw new LniError('Api', 'Bolt12 is not implemented for BlinkNode.');
181
+ }
182
+ async getOffer(_search) {
183
+ throw new LniError('Api', 'Bolt12 is not implemented for BlinkNode.');
184
+ }
185
+ async listOffers(_search) {
186
+ throw new LniError('Api', 'Bolt12 is not implemented for BlinkNode.');
187
+ }
188
+ async payOffer(_offer, _amountMsats, _payerNote) {
189
+ throw new LniError('Api', 'Bolt12 is not implemented for BlinkNode.');
190
+ }
191
+ async lookupInvoice(params) {
192
+ if (!params.paymentHash) {
193
+ throw new LniError('InvalidInput', 'lookupInvoice requires paymentHash for BlinkNode.');
194
+ }
195
+ const txs = await this.listTransactions({ from: 0, limit: 100, search: params.search });
196
+ const match = txs.find((tx) => tx.paymentHash === params.paymentHash);
197
+ if (!match) {
198
+ throw new LniError('Api', `Transaction not found for payment hash: ${params.paymentHash}`);
199
+ }
200
+ return match;
201
+ }
202
+ async listTransactions(params) {
203
+ const query = `
204
+ query TransactionsQuery($first: Int, $last: Int, $after: String, $before: String) {
205
+ me {
206
+ defaultAccount {
207
+ transactions(first: $first, last: $last, after: $after, before: $before) {
208
+ edges {
209
+ node {
210
+ id
211
+ createdAt
212
+ direction
213
+ status
214
+ memo
215
+ settlementAmount
216
+ settlementCurrency
217
+ settlementFee
218
+ initiationVia {
219
+ __typename
220
+ ... on InitiationViaLn {
221
+ paymentHash
222
+ }
223
+ }
224
+ settlementVia {
225
+ __typename
226
+ ... on SettlementViaLn {
227
+ preImage
228
+ }
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
235
+ }
236
+ `;
237
+ const first = Math.max(params.from + params.limit, 1);
238
+ const response = await this.gql(query, {
239
+ first,
240
+ last: null,
241
+ after: null,
242
+ before: null,
243
+ });
244
+ const transactions = response.me.defaultAccount.transactions.edges.map(({ node }) => {
245
+ const paymentHash = node.initiationVia?.__typename === 'InitiationViaLn'
246
+ ? (node.initiationVia.paymentHash ?? '')
247
+ : '';
248
+ const preimage = node.settlementVia?.__typename === 'SettlementViaLn' ? (node.settlementVia.preImage ?? '') : '';
249
+ const amountMsats = node.settlementCurrency === 'BTC' ? satsToMsats(Math.abs(node.settlementAmount ?? 0)) : 0;
250
+ const feeMsats = node.settlementCurrency === 'BTC' ? satsToMsats(Math.abs(node.settlementFee ?? 0)) : 0;
251
+ return emptyTransaction({
252
+ type: node.direction === 'SEND' ? 'outgoing' : 'incoming',
253
+ paymentHash,
254
+ preimage,
255
+ amountMsats,
256
+ feesPaid: feeMsats,
257
+ createdAt: node.createdAt,
258
+ settledAt: node.status === 'SUCCESS' ? node.createdAt : 0,
259
+ description: node.memo ?? '',
260
+ descriptionHash: '',
261
+ payerNote: '',
262
+ externalId: node.id,
263
+ });
264
+ });
265
+ const filtered = transactions.filter((tx) => {
266
+ if (params.paymentHash && tx.paymentHash !== params.paymentHash) {
267
+ return false;
268
+ }
269
+ if (!params.search) {
270
+ return true;
271
+ }
272
+ const search = params.search.toLowerCase();
273
+ return (tx.description.toLowerCase().includes(search) ||
274
+ tx.paymentHash.toLowerCase().includes(search) ||
275
+ tx.preimage.toLowerCase().includes(search));
276
+ });
277
+ const skip = Math.max(params.from, 0);
278
+ const end = params.limit > 0 ? skip + params.limit : undefined;
279
+ return filtered.slice(skip, end);
280
+ }
281
+ async decode(str) {
282
+ return str;
283
+ }
284
+ async onInvoiceEvents(params, callback) {
285
+ await pollInvoiceEvents({
286
+ params,
287
+ callback,
288
+ lookup: () => this.lookupInvoice({ paymentHash: params.paymentHash, search: params.search }),
289
+ });
290
+ }
291
+ }
292
+ //# sourceMappingURL=blink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blink.js","sourceRoot":"","sources":["../../src/nodes/blink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type ClnConfig, type CreateInvoiceParams, type CreateOfferParams, type InvoiceEventCallback, type LightningNode, type ListTransactionsParams, type LookupInvoiceParams, type NodeInfo, type NodeRequestOptions, type Offer, type OnInvoiceEventParams, type PayInvoiceParams, type PayInvoiceResponse, type Transaction } from '../types.js';
2
+ export declare class ClnNode implements LightningNode {
3
+ private readonly config;
4
+ private readonly fetchFn;
5
+ private readonly timeoutMs?;
6
+ constructor(config: ClnConfig, options?: NodeRequestOptions);
7
+ private headers;
8
+ private postJson;
9
+ private postText;
10
+ private fetchInvoiceFromOffer;
11
+ private invoiceToTransaction;
12
+ getInfo(): Promise<NodeInfo>;
13
+ createInvoice(params: CreateInvoiceParams): Promise<Transaction>;
14
+ payInvoice(params: PayInvoiceParams): Promise<PayInvoiceResponse>;
15
+ createOffer(params: CreateOfferParams): Promise<Offer>;
16
+ getOffer(search?: string): Promise<Offer>;
17
+ listOffers(search?: string): Promise<Offer[]>;
18
+ payOffer(offer: string, amountMsats: number, payerNote?: string): Promise<PayInvoiceResponse>;
19
+ lookupInvoice(params: LookupInvoiceParams): Promise<Transaction>;
20
+ listTransactions(params: ListTransactionsParams): Promise<Transaction[]>;
21
+ decode(str: string): Promise<string>;
22
+ onInvoiceEvents(params: OnInvoiceEventParams, callback: InvoiceEventCallback): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=cln.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cln.d.ts","sourceRoot":"","sources":["../../src/nodes/cln.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,SAAS,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,KAAK,EAAE,KAAK,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAiEnW,qBAAa,OAAQ,YAAW,aAAa;IAI/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAEP,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,kBAAuB;IAKhF,OAAO,CAAC,OAAO;YAQD,QAAQ;YASR,QAAQ;YASR,qBAAqB;IAenC,OAAO,CAAC,oBAAoB;IAkBtB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IA0D5B,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IA8ChE,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+BjE,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAiBtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAUzC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAQ7C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAe7F,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkBhE,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAwBxE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpC,eAAe,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;CAWnG"}