@sunnyln/lni 0.1.0 → 0.1.2

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 (51) hide show
  1. package/README.md +96 -81
  2. package/dist/errors.d.ts.map +1 -1
  3. package/dist/errors.js +1 -4
  4. package/dist/errors.js.map +1 -1
  5. package/dist/factory.d.ts +38 -0
  6. package/dist/factory.d.ts.map +1 -0
  7. package/dist/factory.js +26 -0
  8. package/dist/factory.js.map +1 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/internal/http.d.ts.map +1 -1
  14. package/dist/internal/http.js +27 -9
  15. package/dist/internal/http.js.map +1 -1
  16. package/dist/internal/polling.d.ts.map +1 -1
  17. package/dist/internal/polling.js +9 -2
  18. package/dist/internal/polling.js.map +1 -1
  19. package/dist/internal/transform.d.ts +1 -0
  20. package/dist/internal/transform.d.ts.map +1 -1
  21. package/dist/internal/transform.js +7 -1
  22. package/dist/internal/transform.js.map +1 -1
  23. package/dist/lnurl.d.ts.map +1 -1
  24. package/dist/lnurl.js +12 -18
  25. package/dist/lnurl.js.map +1 -1
  26. package/dist/nodes/blink.d.ts +8 -0
  27. package/dist/nodes/blink.d.ts.map +1 -1
  28. package/dist/nodes/blink.js +166 -112
  29. package/dist/nodes/blink.js.map +1 -1
  30. package/dist/nodes/cln.d.ts.map +1 -1
  31. package/dist/nodes/cln.js +31 -10
  32. package/dist/nodes/cln.js.map +1 -1
  33. package/dist/nodes/lnd.d.ts +1 -1
  34. package/dist/nodes/lnd.d.ts.map +1 -1
  35. package/dist/nodes/lnd.js +22 -5
  36. package/dist/nodes/lnd.js.map +1 -1
  37. package/dist/nodes/nwc.d.ts.map +1 -1
  38. package/dist/nodes/nwc.js +4 -12
  39. package/dist/nodes/nwc.js.map +1 -1
  40. package/dist/nodes/phoenixd.d.ts.map +1 -1
  41. package/dist/nodes/phoenixd.js +12 -4
  42. package/dist/nodes/phoenixd.js.map +1 -1
  43. package/dist/nodes/speed.d.ts.map +1 -1
  44. package/dist/nodes/speed.js +9 -12
  45. package/dist/nodes/speed.js.map +1 -1
  46. package/dist/nodes/strike.d.ts.map +1 -1
  47. package/dist/nodes/strike.js +19 -17
  48. package/dist/nodes/strike.js.map +1 -1
  49. package/dist/types.d.ts +25 -1
  50. package/dist/types.d.ts.map +1 -1
  51. package/package.json +2 -2
package/README.md CHANGED
@@ -1,23 +1,12 @@
1
- # LNI TypeScript (Frontend-first)
1
+ # Lightning Node Interface
2
2
 
3
- Pure TypeScript port of `crates/lni` HTTP adapters for frontend runtimes.
3
+ Remote connect to major Lightning node implementations with one TypeScript interface.
4
4
 
5
- ## Scope
6
-
7
- Implemented in this package:
8
-
9
- - `PhoenixdNode`
10
- - `ClnNode`
11
- - `LndNode`
12
- - `NwcNode`
13
- - `StrikeNode`
14
- - `SpeedNode`
15
- - `BlinkNode`
16
- - LNURL helpers (`detectPaymentType`, `needsResolution`, `resolveToBolt11`, `getPaymentInfo`)
17
-
18
- Not included yet:
19
-
20
- - `SparkNode` (intentionally deferred)
5
+ - Supports major nodes: CLN, LND, Phoenixd
6
+ - Supports protocols: BOLT11, BOLT12, NWC
7
+ - Includes custodial APIs: Strike, Speed, Blink
8
+ - LNURL + Lightning Address support (`user@domain.com`, `lnurl1...`)
9
+ - Frontend-capable TypeScript runtime (`fetch`-based)
21
10
 
22
11
  ## Install
23
12
 
@@ -25,94 +14,120 @@ Not included yet:
25
14
  npm install @sunnyln/lni
26
15
  ```
27
16
 
28
- From source:
17
+ ## TypeScript Examples
29
18
 
30
- ```bash
31
- cd bindings/typescript
32
- npm install
33
- npm run typecheck
34
- npm run build
35
- ```
19
+ ### Node API
36
20
 
37
- ## Install from this GitHub repo (without publishing)
21
+ ```ts
22
+ import {
23
+ createNode,
24
+ InvoiceType,
25
+ type BackendNodeConfig,
26
+ } from '@sunnyln/lni';
27
+
28
+ const backend: BackendNodeConfig = {
29
+ kind: 'lnd',
30
+ config: {
31
+ url: 'https://lnd.example.com',
32
+ macaroon: '...',
33
+ },
34
+ };
35
+
36
+ const node = createNode(backend);
38
37
 
39
- Because this package lives in a monorepo subfolder, install it from a local path after cloning:
38
+ const info = await node.getInfo();
40
39
 
41
- ```bash
42
- git clone https://github.com/lightning-node-interface/lni.git
43
- npm install ./lni/bindings/typescript
44
- ```
40
+ const invoiceParams = {
41
+ invoiceType: InvoiceType.Bolt11,
42
+ amountMsats: 2000,
43
+ description: 'your memo',
44
+ expiry: 3600,
45
+ };
45
46
 
46
- One-liner:
47
+ const invoice = await node.createInvoice(invoiceParams);
47
48
 
48
- ```bash
49
- TMP_DIR=$(mktemp -d) && git clone --depth 1 https://github.com/lightning-node-interface/lni.git "$TMP_DIR/lni" && npm install "$TMP_DIR/lni/bindings/typescript"
50
- ```
49
+ const payInvoiceParams = {
50
+ invoice: invoice.invoice,
51
+ feeLimitPercentage: 1,
52
+ allowSelfPayment: true,
53
+ };
51
54
 
52
- From another project:
55
+ const payment = await node.payInvoice(payInvoiceParams);
53
56
 
54
- ```bash
55
- npm install /absolute/path/to/lni/bindings/typescript
57
+ const status = await node.lookupInvoice({ paymentHash: invoice.paymentHash });
58
+
59
+ const txs = await node.listTransactions({ from: 0, limit: 10 });
56
60
  ```
57
61
 
58
- ## Packaging and publish
62
+ For NWC specifically, `createNode` returns `NwcNode` when `kind: 'nwc'`, so you can close it:
59
63
 
60
- ```bash
61
- cd bindings/typescript
62
- npm install
63
- npm run prepack
64
- npm run pack:dry-run
64
+ ```ts
65
+ const nwcNode = createNode({ kind: 'nwc', config: { nwcUri: 'nostr+walletconnect://...' } });
66
+ // ... use node
67
+ nwcNode.close();
65
68
  ```
66
69
 
67
- To publish:
70
+ ### LNURL + Lightning Address
68
71
 
69
- ```bash
70
- npm login
71
- npm run publish:public
72
- ```
72
+ ```ts
73
+ import { detectPaymentType, needsResolution, getPaymentInfo, resolveToBolt11 } from '@sunnyln/lni';
73
74
 
74
- Per-node real integration test scripts are available before publishing:
75
+ const destination = 'user@domain.com';
75
76
 
76
- - `npm run test:integration:phoenixd`
77
- - `npm run test:integration:cln`
78
- - `npm run test:integration:lnd`
79
- - `npm run test:integration:strike`
80
- - `npm run test:integration:speed`
81
- - `npm run test:integration:blink`
82
- - `npm run test:integration:nwc`
77
+ const type = detectPaymentType(destination);
78
+ const requiresResolution = needsResolution(destination);
79
+ const info = await getPaymentInfo(destination, 100_000);
80
+ const bolt11 = await resolveToBolt11(destination, 100_000);
81
+ ```
83
82
 
84
- ## Basic usage
83
+ ### Invoice Event Polling
85
84
 
86
85
  ```ts
87
- import { LndNode } from '@sunnyln/lni';
86
+ await node.onInvoiceEvents(
87
+ {
88
+ paymentHash: invoice.paymentHash,
89
+ pollingDelaySec: 3,
90
+ maxPollingSec: 60,
91
+ },
92
+ (status, tx) => {
93
+ console.log('Invoice event:', status, tx);
94
+ },
95
+ );
96
+ ```
88
97
 
89
- const node = new LndNode({
90
- url: 'https://127.0.0.1:8080',
91
- macaroon: '...'
92
- });
98
+ ## Implemented in this package
93
99
 
94
- const info = await node.getInfo();
95
- console.log(info.sendBalanceMsat);
96
- ```
100
+ - `PhoenixdNode`
101
+ - `ClnNode`
102
+ - `LndNode`
103
+ - `NwcNode`
104
+ - `StrikeNode`
105
+ - `SpeedNode`
106
+ - `BlinkNode`
107
+ - LNURL helpers (`detectPaymentType`, `needsResolution`, `resolveToBolt11`, `getPaymentInfo`)
97
108
 
98
- ## Frontend runtime notes
109
+ Not included yet:
110
+ - `SparkNode` (planned)
99
111
 
100
- - This package uses `fetch` and does not depend on Node native modules.
101
- - You can inject a custom fetch implementation via constructor options:
112
+ ## Frontend Runtime Notes
113
+
114
+ - Uses `fetch`, no Node-native runtime dependency required.
115
+ - You can inject custom fetch via constructor options:
102
116
  - `new LndNode(config, { fetch: customFetch })`
103
- - `socks5Proxy` and `acceptInvalidCerts` are config-compatible with Rust structs, but not applied in browser fetch runtimes.
104
- - Most backends require secrets (API keys, macaroons, runes, passwords). For production web apps, use a backend proxy/BFF to protect secrets.
117
+ - Most backends require secrets (API keys, macaroons, runes, passwords). For production web apps, use a backend proxy/BFF to protect credentials.
105
118
 
106
- ## API parity
119
+ ## Build and Publish (package maintainers)
107
120
 
108
- The exported TypeScript interfaces mirror `bindings/lni_nodejs/index.d.ts` shapes:
121
+ ```bash
122
+ npm run prepack
123
+ npm run pack:dry-run
124
+ npm run publish:public
125
+ ```
109
126
 
110
- - `NodeInfo`
111
- - `Transaction`
112
- - `CreateInvoiceParams`
113
- - `PayInvoiceParams`
114
- - `ListTransactionsParams`
115
- - `LookupInvoiceParams`
116
- - `OnInvoiceEventParams`
127
+ ## Integration tests
128
+
129
+ ```bash
130
+ npm run test:integration
131
+ ```
117
132
 
118
- Methods are class-based (`getInfo`, `createInvoice`, `payInvoice`, `lookupInvoice`, etc.), with polling callback support via `onInvoiceEvents`.
133
+ These scripts set `NODE_TLS_REJECT_UNAUTHORIZED=0` because many local Lightning nodes use self-signed certs in test environments. Do not use this in production.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,KAAK,GACL,MAAM,GACN,cAAc,GACd,cAAc,GACd,YAAY,CAAC;AAEjB,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAElB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAW/G;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,GAAE,YAAoB,GAAG,QAAQ,CAUvF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,KAAK,GACL,MAAM,GACN,cAAc,GACd,cAAc,GACd,YAAY,CAAC;AAEjB,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAElB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAO/G;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,GAAE,YAAoB,GAAG,QAAQ,CAUvF"}
package/dist/errors.js CHANGED
@@ -3,14 +3,11 @@ export class LniError extends Error {
3
3
  status;
4
4
  body;
5
5
  constructor(code, message, options) {
6
- super(message);
6
+ super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);
7
7
  this.name = 'LniError';
8
8
  this.code = code;
9
9
  this.status = options?.status;
10
10
  this.body = options?.body;
11
- if (options?.cause !== undefined) {
12
- this.cause = options.cause;
13
- }
14
11
  }
15
12
  }
16
13
  export function asLniError(error, fallbackCode = 'Api') {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,IAAI,CAAe;IACnB,MAAM,CAAU;IAChB,IAAI,CAAU;IAE9B,YAAY,IAAkB,EAAE,OAAe,EAAE,OAA6D;QAC5G,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAE1B,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,IAAoC,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9D,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,eAA6B,KAAK;IAC3E,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,IAAI,CAAe;IACnB,MAAM,CAAU;IAChB,IAAI,CAAU;IAE9B,YAAY,IAAkB,EAAE,OAAe,EAAE,OAA6D;QAC5G,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,eAA6B,KAAK;IAC3E,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { BlinkNode } from './nodes/blink.js';
2
+ import { ClnNode } from './nodes/cln.js';
3
+ import { LndNode } from './nodes/lnd.js';
4
+ import { NwcNode } from './nodes/nwc.js';
5
+ import { PhoenixdNode } from './nodes/phoenixd.js';
6
+ import { SpeedNode } from './nodes/speed.js';
7
+ import { StrikeNode } from './nodes/strike.js';
8
+ import type { BackendNodeConfig, BlinkConfig, ClnConfig, LightningNode, LndConfig, NodeRequestOptions, NwcConfig, PhoenixdConfig, SpeedConfig, StrikeConfig } from './types.js';
9
+ export declare function createNode(input: {
10
+ kind: 'phoenixd';
11
+ config: PhoenixdConfig;
12
+ }, options?: NodeRequestOptions): PhoenixdNode;
13
+ export declare function createNode(input: {
14
+ kind: 'cln';
15
+ config: ClnConfig;
16
+ }, options?: NodeRequestOptions): ClnNode;
17
+ export declare function createNode(input: {
18
+ kind: 'lnd';
19
+ config: LndConfig;
20
+ }, options?: NodeRequestOptions): LndNode;
21
+ export declare function createNode(input: {
22
+ kind: 'nwc';
23
+ config: NwcConfig;
24
+ }, options?: NodeRequestOptions): NwcNode;
25
+ export declare function createNode(input: {
26
+ kind: 'strike';
27
+ config: StrikeConfig;
28
+ }, options?: NodeRequestOptions): StrikeNode;
29
+ export declare function createNode(input: {
30
+ kind: 'speed';
31
+ config: SpeedConfig;
32
+ }, options?: NodeRequestOptions): SpeedNode;
33
+ export declare function createNode(input: {
34
+ kind: 'blink';
35
+ config: BlinkConfig;
36
+ }, options?: NodeRequestOptions): BlinkNode;
37
+ export declare function createNode(input: BackendNodeConfig, options?: NodeRequestOptions): LightningNode;
38
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,EACnD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,YAAY,CAAC;AAChB,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,EACzC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;AACX,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,EACzC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;AACX,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,EACzC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC;AACX,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,EAC/C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,UAAU,CAAC;AACd,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,EAC7C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,SAAS,CAAC;AACb,wBAAgB,UAAU,CACxB,KAAK,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,EAC7C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,SAAS,CAAC;AACb,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { BlinkNode } from './nodes/blink.js';
2
+ import { ClnNode } from './nodes/cln.js';
3
+ import { LndNode } from './nodes/lnd.js';
4
+ import { NwcNode } from './nodes/nwc.js';
5
+ import { PhoenixdNode } from './nodes/phoenixd.js';
6
+ import { SpeedNode } from './nodes/speed.js';
7
+ import { StrikeNode } from './nodes/strike.js';
8
+ export function createNode(input, options = {}) {
9
+ switch (input.kind) {
10
+ case 'phoenixd':
11
+ return new PhoenixdNode(input.config, options);
12
+ case 'cln':
13
+ return new ClnNode(input.config, options);
14
+ case 'lnd':
15
+ return new LndNode(input.config, options);
16
+ case 'nwc':
17
+ return new NwcNode(input.config, options);
18
+ case 'strike':
19
+ return new StrikeNode(input.config, options);
20
+ case 'speed':
21
+ return new SpeedNode(input.config, options);
22
+ case 'blink':
23
+ return new BlinkNode(input.config, options);
24
+ }
25
+ }
26
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA2C/C,MAAM,UAAU,UAAU,CAAC,KAAwB,EAAE,UAA8B,EAAE;IACnF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,KAAK;YACR,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,KAAK,KAAK;YACR,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,KAAK,KAAK;YACR,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,KAAK,QAAQ;YACX,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,KAAK,OAAO;YACV,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './types.js';
2
2
  export * from './errors.js';
3
3
  export * from './lnurl.js';
4
+ export * from './factory.js';
4
5
  export { PhoenixdNode } from './nodes/phoenixd.js';
5
6
  export { ClnNode } from './nodes/cln.js';
6
7
  export { LndNode } from './nodes/lnd.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './types.js';
2
2
  export * from './errors.js';
3
3
  export * from './lnurl.js';
4
+ export * from './factory.js';
4
5
  export { PhoenixdNode } from './nodes/phoenixd.js';
5
6
  export { ClnNode } from './nodes/cln.js';
6
7
  export { LndNode } from './nodes/lnd.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/internal/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAU/D;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,CAelG;AAgDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C1G;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAexG;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAYtH;AAED,wBAAgB,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvE"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/internal/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAU/D;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,CAelG;AAiED,wBAAsB,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C1G;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,CAexG;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAYtH;AAED,wBAAgB,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvE"}
@@ -34,26 +34,41 @@ function encodeForm(form) {
34
34
  }
35
35
  function withTimeout(signal, timeoutMs) {
36
36
  if (!timeoutMs || timeoutMs <= 0) {
37
- return signal;
37
+ return {
38
+ signal,
39
+ clear: () => { },
40
+ };
38
41
  }
39
42
  const controller = new AbortController();
40
43
  const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
44
+ let externalAbortListener;
45
+ const clear = () => {
46
+ clearTimeout(timeoutId);
47
+ if (signal && externalAbortListener) {
48
+ signal.removeEventListener('abort', externalAbortListener);
49
+ externalAbortListener = undefined;
50
+ }
51
+ };
41
52
  if (signal) {
42
53
  if (signal.aborted) {
43
- clearTimeout(timeoutId);
54
+ clear();
44
55
  controller.abort();
45
56
  }
46
57
  else {
47
- signal.addEventListener('abort', () => {
48
- clearTimeout(timeoutId);
58
+ externalAbortListener = () => {
59
+ clear();
49
60
  controller.abort();
50
- }, { once: true });
61
+ };
62
+ signal.addEventListener('abort', externalAbortListener, { once: true });
51
63
  }
52
64
  }
53
65
  controller.signal.addEventListener('abort', () => {
54
- clearTimeout(timeoutId);
66
+ clear();
55
67
  }, { once: true });
56
- return controller.signal;
68
+ return {
69
+ signal: controller.signal,
70
+ clear,
71
+ };
57
72
  }
58
73
  export async function requestText(fetchFn, url, args = {}) {
59
74
  const headers = new Headers(args.headers);
@@ -70,14 +85,14 @@ export async function requestText(fetchFn, url, args = {}) {
70
85
  }
71
86
  body = encodeForm(args.form).toString();
72
87
  }
73
- const signal = withTimeout(args.signal, args.timeoutMs);
88
+ const timeout = withTimeout(args.signal, args.timeoutMs);
74
89
  let response;
75
90
  try {
76
91
  response = await fetchFn(url, {
77
92
  method: args.method ?? (body ? 'POST' : 'GET'),
78
93
  headers,
79
94
  body,
80
- signal,
95
+ signal: timeout.signal,
81
96
  });
82
97
  }
83
98
  catch (error) {
@@ -85,6 +100,9 @@ export async function requestText(fetchFn, url, args = {}) {
85
100
  cause: error,
86
101
  });
87
102
  }
103
+ finally {
104
+ timeout.clear();
105
+ }
88
106
  const text = await response.text();
89
107
  if (!response.ok) {
90
108
  throw new LniError('Http', `HTTP ${response.status}: ${text || response.statusText}`, {
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/internal/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/internal/http.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../src/internal/polling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ3F,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBlF"}
1
+ {"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../src/internal/polling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAQ3F,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACnC,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlF"}
@@ -16,10 +16,17 @@ export async function pollInvoiceEvents(args) {
16
16
  }
17
17
  args.callback('pending', tx);
18
18
  }
19
- catch {
19
+ catch (error) {
20
+ if (typeof console !== 'undefined' && typeof console.debug === 'function') {
21
+ console.debug('[lni] pollInvoiceEvents lookup failed', error);
22
+ }
20
23
  args.callback('failure');
21
24
  }
22
- await sleep(delayMs);
25
+ if (Date.now() - startedAt + delayMs <= maxDurationMs) {
26
+ await sleep(delayMs);
27
+ continue;
28
+ }
29
+ break;
23
30
  }
24
31
  args.callback('failure');
25
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"polling.js","sourceRoot":"","sources":["../../src/internal/polling.ts"],"names":[],"mappings":"AAEA,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA2B;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAChE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"polling.js","sourceRoot":"","sources":["../../src/internal/polling.ts"],"names":[],"mappings":"AAEA,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA2B;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAChE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,aAAa,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBAC1E,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,IAAI,aAAa,EAAE,CAAC;YACtD,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,MAAM;IACR,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC"}
@@ -5,6 +5,7 @@ export declare function parseOptionalNumber(value: unknown): number;
5
5
  export declare function toUnixSeconds(value: unknown): number;
6
6
  export declare function rHashToHex(value: string): string;
7
7
  export declare function btcToMsats(amount: string | number): number;
8
+ export declare function msatsToBtc(amountMsats: number): string;
8
9
  export declare function satsToMsats(amount: string | number): number;
9
10
  export declare function matchesSearch(tx: Transaction, search?: string): boolean;
10
11
  //# sourceMappingURL=transform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/internal/transform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAgB,aAAa,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CAiBzE;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAelF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW1D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAYvE"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/internal/transform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzD,wBAAgB,aAAa,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CAiBzE;AAED,wBAAgB,gBAAgB,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAelF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW1D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWpD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAM1D;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAYvE"}
@@ -19,7 +19,7 @@ export function emptyNodeInfo(overrides = {}) {
19
19
  }
20
20
  export function emptyTransaction(overrides = {}) {
21
21
  return {
22
- type: '',
22
+ type: 'incoming',
23
23
  invoice: '',
24
24
  description: '',
25
25
  descriptionHash: '',
@@ -71,6 +71,12 @@ export function btcToMsats(amount) {
71
71
  }
72
72
  return Math.round(num * 100_000_000_000);
73
73
  }
74
+ export function msatsToBtc(amountMsats) {
75
+ if (!Number.isFinite(amountMsats)) {
76
+ return '0.00000000';
77
+ }
78
+ return (amountMsats / 100_000_000_000).toFixed(8);
79
+ }
74
80
  export function satsToMsats(amount) {
75
81
  const num = typeof amount === 'string' ? Number(amount) : amount;
76
82
  if (!Number.isFinite(num)) {
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/internal/transform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/internal/transform.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lnurl.d.ts","sourceRoot":"","sources":["../src/lnurl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,mBAAmB,CAAC;AAqBzF,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,CAqB7E;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAejD;AAoED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAC9B,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAC9B,OAAO,CAAC,WAAW,CAAC,CAmCtB"}
1
+ {"version":3,"file":"lnurl.d.ts","sourceRoot":"","sources":["../src/lnurl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,mBAAmB,CAAC;AAqBzF,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,CAqB7E;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAejD;AAmED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAC9B,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,GAC9B,OAAO,CAAC,WAAW,CAAC,CAmCtB"}
package/dist/lnurl.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { bech32 } from '@scure/base';
2
2
  import { LniError } from './errors.js';
3
- import { resolveFetch, requestJson, requestText } from './internal/http.js';
3
+ import { resolveFetch, requestJson } from './internal/http.js';
4
4
  export function detectPaymentType(destination) {
5
5
  const input = destination.trim();
6
6
  const lower = input.toLowerCase();
@@ -20,7 +20,7 @@ export function detectPaymentType(destination) {
20
20
  }
21
21
  export function needsResolution(destination) {
22
22
  const normalized = destination.trim().toLowerCase();
23
- return destination.includes('@') || normalized.startsWith('lnurl1');
23
+ return (normalized.includes('@') && !normalized.startsWith('lnurl')) || normalized.startsWith('lnurl1');
24
24
  }
25
25
  export function lightningAddressToUrl(user, domain) {
26
26
  return `https://${domain}/.well-known/lnurlp/${user}`;
@@ -42,25 +42,18 @@ export function decodeLnurl(lnurl) {
42
42
  }
43
43
  }
44
44
  async function fetchLnurlPay(url, fetchFn) {
45
- const payload = await requestText(fetchFn, url, {
45
+ const payload = await requestJson(fetchFn, url, {
46
46
  method: 'GET',
47
47
  headers: {
48
48
  accept: 'application/json',
49
49
  },
50
50
  timeoutMs: 30_000,
51
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;
52
+ const maybeError = payload;
60
53
  if (maybeError?.status === 'ERROR') {
61
54
  throw new LniError('LnurlError', maybeError.reason);
62
55
  }
63
- return parsed;
56
+ return payload;
64
57
  }
65
58
  async function requestInvoice(callbackUrl, amountMsats, fetchFn) {
66
59
  const callback = new URL(callbackUrl);
@@ -97,6 +90,11 @@ function assertAmountRange(amountMsats, minSendable, maxSendable) {
97
90
  throw new LniError('InvalidInput', `Amount ${amountMsats} msats exceeds maximum ${maxSendable} msats`);
98
91
  }
99
92
  }
93
+ async function resolveViaLnurlPay(url, amountMsats, fetchFn) {
94
+ const lnurlPay = await fetchLnurlPay(url, fetchFn);
95
+ assertAmountRange(amountMsats, lnurlPay.minSendable, lnurlPay.maxSendable);
96
+ return requestInvoice(lnurlPay.callback, amountMsats, fetchFn);
97
+ }
100
98
  export async function resolveToBolt11(destination, amountMsats, options) {
101
99
  const fetchFn = resolveFetch(options?.fetch);
102
100
  const destinationType = detectPaymentType(destination);
@@ -111,14 +109,10 @@ export async function resolveToBolt11(destination, amountMsats, options) {
111
109
  }
112
110
  if (destinationType === 'lightning_address') {
113
111
  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);
112
+ return resolveViaLnurlPay(lightningAddressToUrl(user, domain), amountMsats, fetchFn);
117
113
  }
118
114
  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);
115
+ return resolveViaLnurlPay(lnurl, amountMsats, fetchFn);
122
116
  }
123
117
  export async function getPaymentInfo(destination, amountMsats, options) {
124
118
  const fetchFn = resolveFetch(options?.fetch);