@contextvm/sdk 0.4.3 → 0.4.5
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.
- package/dist/esm/core/interfaces.d.ts +4 -2
- package/dist/esm/core/interfaces.d.ts.map +1 -1
- package/dist/esm/core/utils/utils.d.ts +7 -0
- package/dist/esm/core/utils/utils.d.ts.map +1 -1
- package/dist/esm/core/utils/utils.js +29 -0
- package/dist/esm/core/utils/utils.js.map +1 -1
- package/dist/esm/payments/index.d.ts +3 -0
- package/dist/esm/payments/index.d.ts.map +1 -1
- package/dist/esm/payments/index.js +3 -0
- package/dist/esm/payments/index.js.map +1 -1
- package/dist/esm/payments/nip47/nwc-client.d.ts.map +1 -1
- package/dist/esm/payments/nip47/nwc-client.js +31 -4
- package/dist/esm/payments/nip47/nwc-client.js.map +1 -1
- package/dist/esm/payments/nip57/lnurl.d.ts +22 -0
- package/dist/esm/payments/nip57/lnurl.d.ts.map +1 -0
- package/dist/esm/payments/nip57/lnurl.js +41 -0
- package/dist/esm/payments/nip57/lnurl.js.map +1 -0
- package/dist/esm/payments/nip57/zap-events.d.ts +9 -0
- package/dist/esm/payments/nip57/zap-events.d.ts.map +1 -0
- package/dist/esm/payments/nip57/zap-events.js +18 -0
- package/dist/esm/payments/nip57/zap-events.js.map +1 -0
- package/dist/esm/payments/processors/ln-bolt11-nwc-payment-processor.d.ts +18 -0
- package/dist/esm/payments/processors/ln-bolt11-nwc-payment-processor.d.ts.map +1 -1
- package/dist/esm/payments/processors/ln-bolt11-nwc-payment-processor.js +44 -5
- package/dist/esm/payments/processors/ln-bolt11-nwc-payment-processor.js.map +1 -1
- package/dist/esm/payments/processors/ln-bolt11-zap-payment-processor.d.ts +48 -0
- package/dist/esm/payments/processors/ln-bolt11-zap-payment-processor.d.ts.map +1 -0
- package/dist/esm/payments/processors/ln-bolt11-zap-payment-processor.js +187 -0
- package/dist/esm/payments/processors/ln-bolt11-zap-payment-processor.js.map +1 -0
- package/dist/esm/relay/applesauce-relay-pool.d.ts +5 -4
- package/dist/esm/relay/applesauce-relay-pool.d.ts.map +1 -1
- package/dist/esm/relay/applesauce-relay-pool.js +40 -17
- package/dist/esm/relay/applesauce-relay-pool.js.map +1 -1
- package/dist/esm/relay/index.d.ts +0 -1
- package/dist/esm/relay/index.d.ts.map +1 -1
- package/dist/esm/relay/index.js +0 -1
- package/dist/esm/relay/index.js.map +1 -1
- package/dist/esm/transport/base-nostr-transport.d.ts +9 -0
- package/dist/esm/transport/base-nostr-transport.d.ts.map +1 -1
- package/dist/esm/transport/base-nostr-transport.js +37 -2
- package/dist/esm/transport/base-nostr-transport.js.map +1 -1
- package/dist/esm/transport/nostr-client-transport.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client-transport.js +1 -0
- package/dist/esm/transport/nostr-client-transport.js.map +1 -1
- package/dist/esm/transport/nostr-server-transport.d.ts.map +1 -1
- package/dist/esm/transport/nostr-server-transport.js +2 -1
- package/dist/esm/transport/nostr-server-transport.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,8 +32,10 @@ export interface NostrSigner {
|
|
|
32
32
|
export interface RelayHandler {
|
|
33
33
|
connect(): Promise<void>;
|
|
34
34
|
disconnect(relayUrls?: string[]): Promise<void>;
|
|
35
|
-
publish(event: NostrEvent
|
|
36
|
-
|
|
35
|
+
publish(event: NostrEvent, opts?: {
|
|
36
|
+
abortSignal?: AbortSignal;
|
|
37
|
+
}): Promise<void>;
|
|
38
|
+
subscribe(filters: Filter[], onEvent: (event: NostrEvent) => void, onEose?: () => void): Promise<() => void>;
|
|
37
39
|
unsubscribe(): void;
|
|
38
40
|
getRelayUrls?(): string[];
|
|
39
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/core/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErE;;;;;GAKG;AACH,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAGrD,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;KAClE,CAAC;IAGF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;KAClE,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/core/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,gBAAgB,EACjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAErE;;;;;GAKG;AACH,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAGrD,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;KAClE,CAAC;IAGF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;KAClE,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,CACL,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,SAAS,CACP,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACpC,MAAM,CAAC,EAAE,MAAM,IAAI,GAClB,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACvB,WAAW,IAAI,IAAI,CAAC;IACpB,YAAY,CAAC,IAAI,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClC,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC1C,iBAAiB,EAAE,4BAA4B,CAAC,QAAQ,CAAC,CAAC;IAC1D,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;CACvC"}
|
|
@@ -38,4 +38,11 @@ export declare function isHex64(value: string | undefined): value is string;
|
|
|
38
38
|
* @returns The current time in seconds
|
|
39
39
|
*/
|
|
40
40
|
export declare function nowSeconds(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Sleeps for a specified number of milliseconds, aborting if the abort signal is aborted.
|
|
43
|
+
*/
|
|
44
|
+
export declare function sleepWithAbort(params: {
|
|
45
|
+
ms: number;
|
|
46
|
+
abortSignal: AbortSignal | undefined;
|
|
47
|
+
}): Promise<void>;
|
|
41
48
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,cAAc,EACf,MAAM,oCAAoC,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,qBACmB,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAMvE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,GACnB,IAAI,CAYN;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,MAA8B,GAC3C,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,MAAM,CAElE;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,cAAc,EACf,MAAM,oCAAoC,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM,qBACmB,CAAC;AAEpD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAMvE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,GACnB,IAAI,CAYN;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,GAAE,MAA8B,GAC3C,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,MAAM,CAElE;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;CACtC,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB"}
|
|
@@ -76,4 +76,33 @@ export function isHex64(value) {
|
|
|
76
76
|
export function nowSeconds() {
|
|
77
77
|
return Math.floor(Date.now() / 1000);
|
|
78
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Sleeps for a specified number of milliseconds, aborting if the abort signal is aborted.
|
|
81
|
+
*/
|
|
82
|
+
export async function sleepWithAbort(params) {
|
|
83
|
+
var _a;
|
|
84
|
+
if ((_a = params.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
85
|
+
throw new Error('sleep aborted');
|
|
86
|
+
}
|
|
87
|
+
if (!params.abortSignal) {
|
|
88
|
+
await sleep(params.ms);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const abortSignal = params.abortSignal;
|
|
92
|
+
await new Promise((resolve, reject) => {
|
|
93
|
+
const onAbort = () => {
|
|
94
|
+
cleanup();
|
|
95
|
+
reject(new Error('sleep aborted'));
|
|
96
|
+
};
|
|
97
|
+
const timeout = setTimeout(() => {
|
|
98
|
+
cleanup();
|
|
99
|
+
resolve();
|
|
100
|
+
}, params.ms);
|
|
101
|
+
const cleanup = () => {
|
|
102
|
+
clearTimeout(timeout);
|
|
103
|
+
abortSignal.removeEventListener('abort', onAbort);
|
|
104
|
+
};
|
|
105
|
+
abortSignal.addEventListener('abort', onAbort, { once: true });
|
|
106
|
+
});
|
|
107
|
+
}
|
|
79
108
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/core/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oBAAoB,GAErB,MAAM,oCAAoC,CAAC;AAE5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,IAAI,CAAC;QACH,OAAO,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAuB,EACvB,YAAoB;IAEpB,+BAA+B;IAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO;IACT,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,YAAY,EAAE,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,OAAmB,EACnB,SAAiB,EACjB,eAAuB,qBAAqB;IAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAClC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,OAAO;aACJ,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAyB;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/core/utils/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,11 @@ export * from './pmis.js';
|
|
|
10
10
|
export * from './nip47/connection.js';
|
|
11
11
|
export * from './nip47/nwc-client.js';
|
|
12
12
|
export * from './nip47/types.js';
|
|
13
|
+
export * from './nip57/lnurl.js';
|
|
14
|
+
export * from './nip57/zap-events.js';
|
|
13
15
|
export * from './handlers/ln-bolt11-nwc-payment-handler.js';
|
|
14
16
|
export * from './handlers/ln-bolt11-lnbits-payment-handler.js';
|
|
15
17
|
export * from './processors/ln-bolt11-nwc-payment-processor.js';
|
|
16
18
|
export * from './processors/ln-bolt11-lnbits-payment-processor.js';
|
|
19
|
+
export * from './processors/ln-bolt11-zap-payment-processor.js';
|
|
17
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/payments/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,oDAAoD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/payments/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC"}
|
|
@@ -10,8 +10,11 @@ export * from './pmis.js';
|
|
|
10
10
|
export * from './nip47/connection.js';
|
|
11
11
|
export * from './nip47/nwc-client.js';
|
|
12
12
|
export * from './nip47/types.js';
|
|
13
|
+
export * from './nip57/lnurl.js';
|
|
14
|
+
export * from './nip57/zap-events.js';
|
|
13
15
|
export * from './handlers/ln-bolt11-nwc-payment-handler.js';
|
|
14
16
|
export * from './handlers/ln-bolt11-lnbits-payment-handler.js';
|
|
15
17
|
export * from './processors/ln-bolt11-nwc-payment-processor.js';
|
|
16
18
|
export * from './processors/ln-bolt11-lnbits-payment-processor.js';
|
|
19
|
+
export * from './processors/ln-bolt11-zap-payment-processor.js';
|
|
17
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/payments/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,oDAAoD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/payments/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iDAAiD,CAAC;AAChE,cAAc,oDAAoD,CAAC;AACnE,cAAc,iDAAiD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nwc-client.d.ts","sourceRoot":"","sources":["../../../../src/payments/nip47/nwc-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzE,eAAO,MAAM,aAAa,QAAsB,CAAC;AACjD,eAAO,MAAM,gBAAgB,QAAyB,CAAC;AACvD,eAAO,MAAM,iBAAiB,QAA0B,CAAC;AAUzD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,aAAa,CAAC;IAE1B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,SAAS,CAAS;IAI1B,OAAO,CAAC,YAAY,CAAoC;gBAErC,OAAO,EAAE,gBAAgB;IAO/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE;QACnD,MAAM,EAAE,CAAC,CAAC;QACV,OAAO,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,UAAU,EAAE,CAAC,CAAC;QACd,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC;QACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"nwc-client.d.ts","sourceRoot":"","sources":["../../../../src/payments/nip47/nwc-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzE,eAAO,MAAM,aAAa,QAAsB,CAAC;AACjD,eAAO,MAAM,gBAAgB,QAAyB,CAAC;AACvD,eAAO,MAAM,iBAAiB,QAA0B,CAAC;AAUzD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,aAAa,CAAC;IAE1B,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,SAAS,CAAS;IAI1B,OAAO,CAAC,YAAY,CAAoC;gBAErC,OAAO,EAAE,gBAAgB;IAO/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE;QACnD,MAAM,EAAE,CAAC,CAAC;QACV,OAAO,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,UAAU,EAAE,CAAC,CAAC;QACd,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC;QACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAwJ/B"}
|
|
@@ -25,8 +25,8 @@ export class NwcClient {
|
|
|
25
25
|
constructor(options) {
|
|
26
26
|
var _a;
|
|
27
27
|
this.connected = false;
|
|
28
|
-
//
|
|
29
|
-
//
|
|
28
|
+
// NIP-47 is request/response over relays. To avoid cross-request interference,
|
|
29
|
+
// we serialize NWC requests per client instance.
|
|
30
30
|
this.requestQueue = Promise.resolve();
|
|
31
31
|
this.relayHandler = options.relayHandler;
|
|
32
32
|
this.connection = options.connection;
|
|
@@ -68,6 +68,8 @@ export class NwcClient {
|
|
|
68
68
|
],
|
|
69
69
|
};
|
|
70
70
|
const signedRequest = finalizeEvent(eventTemplate, clientSecretKey);
|
|
71
|
+
let settled = false;
|
|
72
|
+
let unsubscribeResponse;
|
|
71
73
|
const responsePromise = new Promise((resolve, reject) => {
|
|
72
74
|
const filters = [
|
|
73
75
|
{
|
|
@@ -90,16 +92,41 @@ export class NwcClient {
|
|
|
90
92
|
eventId: event.id,
|
|
91
93
|
pubkey: event.pubkey,
|
|
92
94
|
});
|
|
95
|
+
settled = true;
|
|
93
96
|
resolve(event);
|
|
94
97
|
})
|
|
95
|
-
.
|
|
98
|
+
.then((unsubscribe) => {
|
|
99
|
+
// Ensure the subscription is cleaned up when the promise settles.
|
|
100
|
+
unsubscribeResponse = unsubscribe;
|
|
101
|
+
if (settled) {
|
|
102
|
+
unsubscribeResponse();
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
.catch((error) => {
|
|
106
|
+
settled = true;
|
|
107
|
+
reject(error);
|
|
108
|
+
});
|
|
96
109
|
});
|
|
110
|
+
// Also cleanup on timeout/error paths.
|
|
111
|
+
responsePromise.finally(() => unsubscribeResponse === null || unsubscribeResponse === void 0 ? void 0 : unsubscribeResponse());
|
|
97
112
|
this.logger.debug('publish request', {
|
|
98
113
|
method: params.method,
|
|
99
114
|
requestId: signedRequest.id,
|
|
100
115
|
encryption: 'nip04',
|
|
101
116
|
});
|
|
102
|
-
|
|
117
|
+
const publishController = new AbortController();
|
|
118
|
+
const publishTimeout = setTimeout(() => publishController.abort(), this.responseTimeoutMs);
|
|
119
|
+
try {
|
|
120
|
+
await this.relayHandler.publish(signedRequest, {
|
|
121
|
+
abortSignal: publishController.signal,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
clearTimeout(publishTimeout);
|
|
126
|
+
}
|
|
127
|
+
if (publishController.signal.aborted) {
|
|
128
|
+
throw new Error(`NWC publish timed out for ${params.method}`);
|
|
129
|
+
}
|
|
103
130
|
const responseEvent = await withTimeout(responsePromise, this.responseTimeoutMs, `NWC response timed out for ${params.method}`);
|
|
104
131
|
// Validate correlation.
|
|
105
132
|
const eTag = getTagValue(responseEvent.tags, 'e');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nwc-client.js","sourceRoot":"","sources":["../../../../src/payments/nip47/nwc-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAe,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;AAEzD,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,IAAgB,EAAE,IAAY;;IACjD,OAAO,MAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,0CAAG,CAAC,CAAC,CAAC;AAC9C,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IAWpB,YAAmB,OAAyB;;QANpC,cAAS,GAAG,KAAK,CAAC;QAE1B
|
|
1
|
+
{"version":3,"file":"nwc-client.js","sourceRoot":"","sources":["../../../../src/payments/nip47/nwc-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type LnurlPayParams = {
|
|
2
|
+
callback: string;
|
|
3
|
+
allowsNostr?: boolean;
|
|
4
|
+
nostrPubkey?: string;
|
|
5
|
+
minSendable?: number;
|
|
6
|
+
maxSendable?: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function parseLnAddress(lnAddress: string): {
|
|
9
|
+
username: string;
|
|
10
|
+
domain: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function fetchLnurlPayParams(params: {
|
|
13
|
+
lnAddress: string;
|
|
14
|
+
}): Promise<LnurlPayParams>;
|
|
15
|
+
export declare function requestZapInvoice(params: {
|
|
16
|
+
callback: string;
|
|
17
|
+
amountMsats: number;
|
|
18
|
+
zapRequestJson: string;
|
|
19
|
+
}): Promise<{
|
|
20
|
+
pr: string;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=lnurl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lnurl.d.ts","sourceRoot":"","sources":["../../../../src/payments/nip57/lnurl.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAUA;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,cAAc,CAAC,CAe1B;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB1B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export function parseLnAddress(lnAddress) {
|
|
2
|
+
const parts = lnAddress.split('@');
|
|
3
|
+
if (parts.length !== 2) {
|
|
4
|
+
throw new Error(`Invalid lnAddress: ${lnAddress}`);
|
|
5
|
+
}
|
|
6
|
+
const [username, domain] = parts;
|
|
7
|
+
if (!username || !domain) {
|
|
8
|
+
throw new Error(`Invalid lnAddress: ${lnAddress}`);
|
|
9
|
+
}
|
|
10
|
+
return { username, domain };
|
|
11
|
+
}
|
|
12
|
+
export async function fetchLnurlPayParams(params) {
|
|
13
|
+
const { username, domain } = parseLnAddress(params.lnAddress);
|
|
14
|
+
const url = `https://${domain}/.well-known/lnurlp/${encodeURIComponent(username)}`;
|
|
15
|
+
const response = await fetch(url, { method: 'GET' });
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
const text = await response.text();
|
|
18
|
+
throw new Error(`LNURL-pay fetch failed: ${response.status} ${text}`);
|
|
19
|
+
}
|
|
20
|
+
const json = (await response.json());
|
|
21
|
+
if (!json.callback) {
|
|
22
|
+
throw new Error('LNURL-pay response missing callback');
|
|
23
|
+
}
|
|
24
|
+
return json;
|
|
25
|
+
}
|
|
26
|
+
export async function requestZapInvoice(params) {
|
|
27
|
+
const url = new URL(params.callback);
|
|
28
|
+
url.searchParams.set('amount', params.amountMsats.toString());
|
|
29
|
+
url.searchParams.set('nostr', params.zapRequestJson);
|
|
30
|
+
const response = await fetch(url.toString(), { method: 'GET' });
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const text = await response.text();
|
|
33
|
+
throw new Error(`LNURL callback failed: ${response.status} ${text}`);
|
|
34
|
+
}
|
|
35
|
+
const json = (await response.json());
|
|
36
|
+
if (!json.pr) {
|
|
37
|
+
throw new Error(`LNURL callback missing pr${json.reason ? `: ${json.reason}` : ''}`);
|
|
38
|
+
}
|
|
39
|
+
return { pr: json.pr };
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=lnurl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lnurl.js","sourceRoot":"","sources":["../../../../src/payments/nip57/lnurl.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,cAAc,CAAC,SAAiB;IAI9C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACjC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAEzC;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,WAAW,MAAM,uBAAuB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEnF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;IACvD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAIvC;IACC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqC,CAAC;IACzE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type NostrEvent } from 'nostr-tools';
|
|
2
|
+
import { type EventTemplate } from 'nostr-tools/pure';
|
|
3
|
+
export declare function createZapRequest(params: {
|
|
4
|
+
amountMsats: number;
|
|
5
|
+
recipientPubkey: string;
|
|
6
|
+
relays: string[];
|
|
7
|
+
}): EventTemplate;
|
|
8
|
+
export declare function getBolt11FromZapReceipt(event: NostrEvent): string | undefined;
|
|
9
|
+
//# sourceMappingURL=zap-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zap-events.d.ts","sourceRoot":"","sources":["../../../../src/payments/nip57/zap-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG,aAAa,CAWhB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAE7E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { kinds } from 'nostr-tools';
|
|
2
|
+
export function createZapRequest(params) {
|
|
3
|
+
return {
|
|
4
|
+
kind: kinds.ZapRequest,
|
|
5
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
6
|
+
content: '',
|
|
7
|
+
tags: [
|
|
8
|
+
['relays', ...params.relays],
|
|
9
|
+
['amount', params.amountMsats.toString()],
|
|
10
|
+
['p', params.recipientPubkey],
|
|
11
|
+
],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function getBolt11FromZapReceipt(event) {
|
|
15
|
+
var _a;
|
|
16
|
+
return (_a = event.tags.find((t) => t[0] === 'bolt11')) === null || _a === void 0 ? void 0 : _a[1];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=zap-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zap-events.js","sourceRoot":"","sources":["../../../../src/payments/nip57/zap-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAmB,MAAM,aAAa,CAAC;AAGrD,MAAM,UAAU,gBAAgB,CAAC,MAIhC;IACC,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,UAAU;QACtB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACzC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE;YACJ,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;YAC5B,CAAC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzC,CAAC,GAAG,EAAE,MAAM,CAAC,eAAe,CAAC;SAC9B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAiB;;IACvD,OAAO,MAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,0CAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -13,6 +13,20 @@ export interface LnBolt11NwcPaymentProcessorOptions {
|
|
|
13
13
|
pollIntervalMs?: number;
|
|
14
14
|
/** Per-request response timeout. @default 60_000 */
|
|
15
15
|
responseTimeoutMs?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum number of in-flight invoice verifications to dedupe.
|
|
18
|
+
*
|
|
19
|
+
* This is a scalability and relay-load guardrail.
|
|
20
|
+
* @default 5000
|
|
21
|
+
*/
|
|
22
|
+
maxInFlightVerifications?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Maximum number of invoice->payment_hash mappings to cache.
|
|
25
|
+
*
|
|
26
|
+
* This reduces the need to rely on invoice-string lookups when wallets support payment_hash.
|
|
27
|
+
* @default 10000
|
|
28
|
+
*/
|
|
29
|
+
invoiceHashCacheSize?: number;
|
|
16
30
|
}
|
|
17
31
|
/**
|
|
18
32
|
* CEP-8 server payment processor for PMI `bitcoin-lightning-bolt11` backed by NIP-47 (NWC).
|
|
@@ -24,7 +38,10 @@ export declare class LnBolt11NwcPaymentProcessor implements PaymentProcessor {
|
|
|
24
38
|
private readonly invoiceExpirySeconds;
|
|
25
39
|
private readonly pollIntervalMs;
|
|
26
40
|
private readonly logger;
|
|
41
|
+
private readonly inFlightVerifications;
|
|
42
|
+
private readonly invoiceHashCache;
|
|
27
43
|
constructor(options: LnBolt11NwcPaymentProcessorOptions);
|
|
44
|
+
private computeNextDelayMs;
|
|
28
45
|
private isSettledInvoice;
|
|
29
46
|
private getReceiptFromInvoiceResult;
|
|
30
47
|
createPaymentRequired(params: PaymentProcessorCreateParams): Promise<{
|
|
@@ -37,5 +54,6 @@ export declare class LnBolt11NwcPaymentProcessor implements PaymentProcessor {
|
|
|
37
54
|
verifyPayment(params: PaymentProcessorVerifyParams): Promise<{
|
|
38
55
|
_meta?: Record<string, unknown>;
|
|
39
56
|
}>;
|
|
57
|
+
private verifyPaymentInternal;
|
|
40
58
|
}
|
|
41
59
|
//# sourceMappingURL=ln-bolt11-nwc-payment-processor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ln-bolt11-nwc-payment-processor.d.ts","sourceRoot":"","sources":["../../../../src/payments/processors/ln-bolt11-nwc-payment-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ln-bolt11-nwc-payment-processor.d.ts","sourceRoot":"","sources":["../../../../src/payments/processors/ln-bolt11-nwc-payment-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,aAAa,CAAC;AAWrB,MAAM,WAAW,kCAAkC;IACjD,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,4GAA4G;IAC5G,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,2BAA4B,YAAW,gBAAgB;IAClE,SAAgB,GAAG,6BAAgC;IAEnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAIhC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAEpC;IAGF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;gBAEjC,OAAO,EAAE,kCAAkC;IAwB9D,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,2BAA2B;IAqBtB,qBAAqB,CAChC,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IA0CW,aAAa,CACxB,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;YAajC,qBAAqB;CAqEpC"}
|
|
@@ -3,14 +3,15 @@ import { parseNwcConnectionString } from '../nip47/connection.js';
|
|
|
3
3
|
import { NwcClient } from '../nip47/nwc-client.js';
|
|
4
4
|
import { ApplesauceRelayPool } from '../../relay/applesauce-relay-pool.js';
|
|
5
5
|
import { createLogger } from '../../core/utils/logger.js';
|
|
6
|
-
import { sleep } from '../../core/utils/utils.js';
|
|
7
6
|
import { satsToMsats } from '../nip47/utils.js';
|
|
7
|
+
import { LruCache } from '../../core/utils/lru-cache.js';
|
|
8
|
+
import { sleepWithAbort } from '../../core/utils/utils.js';
|
|
8
9
|
/**
|
|
9
10
|
* CEP-8 server payment processor for PMI `bitcoin-lightning-bolt11` backed by NIP-47 (NWC).
|
|
10
11
|
*/
|
|
11
12
|
export class LnBolt11NwcPaymentProcessor {
|
|
12
13
|
constructor(options) {
|
|
13
|
-
var _a, _b, _c, _d;
|
|
14
|
+
var _a, _b, _c, _d, _e, _f;
|
|
14
15
|
this.pmi = PMI_BITCOIN_LIGHTNING_BOLT11;
|
|
15
16
|
const connection = parseNwcConnectionString(options.nwcConnectionString);
|
|
16
17
|
const relayHandler = (_a = options.relayHandler) !== null && _a !== void 0 ? _a : new ApplesauceRelayPool([...connection.relays]);
|
|
@@ -23,6 +24,18 @@ export class LnBolt11NwcPaymentProcessor {
|
|
|
23
24
|
this.invoiceExpirySeconds = (_c = options.invoiceExpirySeconds) !== null && _c !== void 0 ? _c : this.ttlSeconds;
|
|
24
25
|
this.pollIntervalMs = (_d = options.pollIntervalMs) !== null && _d !== void 0 ? _d : 1500;
|
|
25
26
|
this.logger = createLogger('payments/nwc-processor');
|
|
27
|
+
this.inFlightVerifications = new LruCache((_e = options.maxInFlightVerifications) !== null && _e !== void 0 ? _e : 5000);
|
|
28
|
+
this.invoiceHashCache = new LruCache((_f = options.invoiceHashCacheSize) !== null && _f !== void 0 ? _f : 10000);
|
|
29
|
+
}
|
|
30
|
+
computeNextDelayMs(params) {
|
|
31
|
+
// Prefer fast early checks (most invoices settle quickly), then back off.
|
|
32
|
+
// Keep a floor for legacy configs that rely on a predictable pollIntervalMs.
|
|
33
|
+
const scheduleMs = [500, 750, 1000, 1500, 2500, 4000, 6500, 10000, 15000];
|
|
34
|
+
const base = scheduleMs[Math.min(params.attempt, scheduleMs.length - 1)];
|
|
35
|
+
const flooredBase = Math.max(this.pollIntervalMs, base);
|
|
36
|
+
// Add small jitter to avoid stampeding on shared relay/wallet infra.
|
|
37
|
+
const jitter = Math.floor(Math.random() * 250);
|
|
38
|
+
return flooredBase + jitter;
|
|
26
39
|
}
|
|
27
40
|
isSettledInvoice(result) {
|
|
28
41
|
// Wallets vary: some set `state`, some only set `settled_at`, some include `preimage`.
|
|
@@ -50,7 +63,7 @@ export class LnBolt11NwcPaymentProcessor {
|
|
|
50
63
|
return `settled:${requestEventId}${settledAt ? `:${settledAt}` : ''}`;
|
|
51
64
|
}
|
|
52
65
|
async createPaymentRequired(params) {
|
|
53
|
-
var _a;
|
|
66
|
+
var _a, _b;
|
|
54
67
|
const request = {
|
|
55
68
|
amount: satsToMsats(params.amount),
|
|
56
69
|
description: params.description,
|
|
@@ -68,6 +81,10 @@ export class LnBolt11NwcPaymentProcessor {
|
|
|
68
81
|
if (!invoice) {
|
|
69
82
|
throw new Error('NWC make_invoice returned no invoice');
|
|
70
83
|
}
|
|
84
|
+
const paymentHash = (_b = response.result) === null || _b === void 0 ? void 0 : _b.payment_hash;
|
|
85
|
+
if (typeof paymentHash === 'string' && paymentHash.length > 0) {
|
|
86
|
+
this.invoiceHashCache.set(invoice, paymentHash);
|
|
87
|
+
}
|
|
71
88
|
// Keep TTL simple and predictable. Some providers return non-standard `expires_at`.
|
|
72
89
|
const ttl = this.ttlSeconds;
|
|
73
90
|
return {
|
|
@@ -79,19 +96,34 @@ export class LnBolt11NwcPaymentProcessor {
|
|
|
79
96
|
};
|
|
80
97
|
}
|
|
81
98
|
async verifyPayment(params) {
|
|
99
|
+
const existing = this.inFlightVerifications.get(params.pay_req);
|
|
100
|
+
if (existing) {
|
|
101
|
+
return await existing;
|
|
102
|
+
}
|
|
103
|
+
const run = this.verifyPaymentInternal(params).finally(() => {
|
|
104
|
+
this.inFlightVerifications.delete(params.pay_req);
|
|
105
|
+
});
|
|
106
|
+
this.inFlightVerifications.set(params.pay_req, run);
|
|
107
|
+
return await run;
|
|
108
|
+
}
|
|
109
|
+
async verifyPaymentInternal(params) {
|
|
82
110
|
var _a;
|
|
83
111
|
// Note: server-payments middleware already bounds overall time by the `ttl` it emitted.
|
|
84
112
|
// We still keep this loop tight and predictable.
|
|
113
|
+
let attempt = 0;
|
|
85
114
|
while (true) {
|
|
86
115
|
if ((_a = params.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
87
116
|
throw new Error('verifyPayment aborted');
|
|
88
117
|
}
|
|
118
|
+
const cachedPaymentHash = this.invoiceHashCache.get(params.pay_req);
|
|
89
119
|
const response = await this.nwc.request({
|
|
90
120
|
method: 'lookup_invoice',
|
|
91
121
|
resultType: 'lookup_invoice',
|
|
92
122
|
request: {
|
|
93
123
|
method: 'lookup_invoice',
|
|
94
|
-
params:
|
|
124
|
+
params: cachedPaymentHash
|
|
125
|
+
? { payment_hash: cachedPaymentHash }
|
|
126
|
+
: { invoice: params.pay_req },
|
|
95
127
|
},
|
|
96
128
|
});
|
|
97
129
|
if (response.error) {
|
|
@@ -109,6 +141,11 @@ export class LnBolt11NwcPaymentProcessor {
|
|
|
109
141
|
hasSettledAt: typeof (result === null || result === void 0 ? void 0 : result.settled_at) === 'number',
|
|
110
142
|
hasPaymentHash: Boolean(result === null || result === void 0 ? void 0 : result.payment_hash),
|
|
111
143
|
});
|
|
144
|
+
if (!cachedPaymentHash &&
|
|
145
|
+
typeof (result === null || result === void 0 ? void 0 : result.payment_hash) === 'string' &&
|
|
146
|
+
result.payment_hash.length > 0) {
|
|
147
|
+
this.invoiceHashCache.set(params.pay_req, result.payment_hash);
|
|
148
|
+
}
|
|
112
149
|
if (this.isSettledInvoice(result)) {
|
|
113
150
|
// Prefer payment_hash as a stable identifier (avoid exposing preimages).
|
|
114
151
|
const paymentHash = this.getReceiptFromInvoiceResult({
|
|
@@ -122,7 +159,9 @@ export class LnBolt11NwcPaymentProcessor {
|
|
|
122
159
|
throw new Error(`Invoice ${state}`);
|
|
123
160
|
}
|
|
124
161
|
}
|
|
125
|
-
|
|
162
|
+
const delayMs = this.computeNextDelayMs({ attempt });
|
|
163
|
+
attempt += 1;
|
|
164
|
+
await sleepWithAbort({ ms: delayMs, abortSignal: params.abortSignal });
|
|
126
165
|
}
|
|
127
166
|
}
|
|
128
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ln-bolt11-nwc-payment-processor.js","sourceRoot":"","sources":["../../../../src/payments/processors/ln-bolt11-nwc-payment-processor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAe,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ln-bolt11-nwc-payment-processor.js","sourceRoot":"","sources":["../../../../src/payments/processors/ln-bolt11-nwc-payment-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { RelayHandler } from '../../core/interfaces.js';
|
|
2
|
+
import type { PaymentProcessor, PaymentProcessorCreateParams, PaymentProcessorVerifyParams } from '../types.js';
|
|
3
|
+
export interface LnBolt11ZapPaymentProcessorOptions {
|
|
4
|
+
/** Lightning address (LUD-16), e.g. `alice@example.com`. */
|
|
5
|
+
lnAddress: string;
|
|
6
|
+
/** Optional relay handler to reuse; otherwise a new ApplesauceRelayPool is created. */
|
|
7
|
+
relayHandler?: RelayHandler;
|
|
8
|
+
/** Relay URLs used both in zap request `relays` tag and to subscribe for zap receipts. */
|
|
9
|
+
relayUrls?: string[];
|
|
10
|
+
/** Time-to-live in seconds returned in `payment_required`. @default 300 */
|
|
11
|
+
ttlSeconds?: number;
|
|
12
|
+
/** Maximum number of in-flight invoice verifications to dedupe. @default 5000 */
|
|
13
|
+
maxInFlightVerifications?: number;
|
|
14
|
+
/** Maximum number of pending invoice issuances to remember. @default 10000 */
|
|
15
|
+
maxPendingInvoices?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* CEP-8 server payment processor for PMI `bitcoin-lightning-bolt11` backed by NIP-57 zap receipts.
|
|
19
|
+
*
|
|
20
|
+
* This issues a BOLT11 invoice via LNURL-pay zap request (kind 9734) and verifies settlement by
|
|
21
|
+
* subscribing for zap receipts (kind 9735).
|
|
22
|
+
*/
|
|
23
|
+
export declare class LnBolt11ZapPaymentProcessor implements PaymentProcessor {
|
|
24
|
+
readonly pmi: "bitcoin-lightning-bolt11";
|
|
25
|
+
private static readonly DEFAULT_RELAY_URLS;
|
|
26
|
+
private readonly lnAddress;
|
|
27
|
+
private readonly relayHandler;
|
|
28
|
+
private readonly relayUrls;
|
|
29
|
+
private readonly ttlSeconds;
|
|
30
|
+
private readonly logger;
|
|
31
|
+
private readonly signerSecretKey;
|
|
32
|
+
private readonly inFlightVerifications;
|
|
33
|
+
private readonly pendingInvoices;
|
|
34
|
+
constructor(options: LnBolt11ZapPaymentProcessorOptions);
|
|
35
|
+
createPaymentRequired(params: PaymentProcessorCreateParams): Promise<{
|
|
36
|
+
amount: number;
|
|
37
|
+
pay_req: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
pmi: string;
|
|
40
|
+
ttl?: number;
|
|
41
|
+
_meta?: Record<string, unknown>;
|
|
42
|
+
}>;
|
|
43
|
+
verifyPayment(params: PaymentProcessorVerifyParams): Promise<{
|
|
44
|
+
_meta?: Record<string, unknown>;
|
|
45
|
+
}>;
|
|
46
|
+
private verifyPaymentInternal;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=ln-bolt11-zap-payment-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ln-bolt11-zap-payment-processor.d.ts","sourceRoot":"","sources":["../../../../src/payments/processors/ln-bolt11-zap-payment-processor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAU7D,OAAO,KAAK,EACV,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,kCAAkC;IACjD,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAElB,uFAAuF;IACvF,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,0FAA0F;IAC1F,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,iFAAiF;IACjF,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAQD;;;;;GAKG;AACH,qBAAa,2BAA4B,YAAW,gBAAgB;IAClE,SAAgB,GAAG,6BAAgC;IAInD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAIxC;IAEF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAC7C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAEpC;IACF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA+B;gBAE5C,OAAO,EAAE,kCAAkC;IAoBjD,qBAAqB,CAChC,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;IAqEW,aAAa,CACxB,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;YAWjC,qBAAqB;CAwGpC"}
|