@moneydevkit/core 0.9.0-beta.2 → 0.9.0-beta.3

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.
@@ -1,46 +1,148 @@
1
1
  import { z } from "zod";
2
- import { warn } from "../logging";
2
+ import { log, warn } from "../logging";
3
3
  import { createMoneyDevKitClient, createMoneyDevKitNode } from "../mdk";
4
4
  import { markPaymentReceived } from "../payment-state";
5
5
  const webhookSchema = z.object({
6
6
  event: z.enum(["incoming-payment"]),
7
7
  nodeId: z.string(),
8
8
  });
9
- async function handleIncomingPayment() {
9
+ // How often to poll for new LDK events
10
+ const POLL_INTERVAL_MS = 100;
11
+ // Minimum time that we'll run the lightning node when handling incoming payments.
12
+ // This needs to be long enough for JIT channel opening and HTLC commitment exchanges.
13
+ const MIN_WAIT_BEFORE_QUIET_MS = 15_000;
14
+ // After the minimum wait, this is how long we'll wait for new events if there are no pending claims.
15
+ const QUIET_THRESHOLD_MS = 5_000;
16
+ // Maximum time we'll run the lightning node when handling incoming payments.
17
+ // Vercel has a hard timeout of 60 seconds for the hobby plan so this should not
18
+ // be longer than that.
19
+ const MAX_WAIT_MS = 60_000;
20
+ /**
21
+ * Handles incoming-payment webhooks from MoneyDevKit platform.
22
+ *
23
+ * This function is invoked when the MDK node sends a webhook notification
24
+ * indicating that new payments have arrived ("incoming-payment" event).
25
+ */
26
+ async function handleIncomingPaymentEvents() {
27
+ const webhookStartTime = Date.now();
28
+ log("[webhook] handleIncomingPayment started");
10
29
  const node = createMoneyDevKitNode();
11
30
  const client = createMoneyDevKitClient();
12
- const payments = node.receivePayments();
13
- if (payments.length === 0) {
14
- return;
15
- }
16
- payments.forEach((payment) => {
17
- markPaymentReceived(payment.paymentHash);
18
- });
31
+ log("[webhook] Starting node and syncing...");
32
+ const syncStartTime = Date.now();
33
+ node.startReceiving();
34
+ const syncDuration = Date.now() - syncStartTime;
35
+ log(`[webhook] Node started and synced in ${syncDuration}ms`);
36
+ const pendingClaims = new Set();
37
+ let eventsProcessed = 0;
38
+ let paymentsReceived = 0;
39
+ let paymentsFailed = 0;
40
+ const startTime = Date.now();
41
+ let lastEventTime = startTime;
19
42
  try {
20
- await client.checkouts.paymentReceived({
21
- payments: payments.map((payment) => ({
22
- paymentHash: payment.paymentHash,
23
- // amount comes in msat from the node, convert to sats
24
- amountSats: payment.amount / 1000,
25
- sandbox: false,
26
- })),
27
- });
43
+ while (true) {
44
+ const event = node.nextEvent();
45
+ if (event) {
46
+ lastEventTime = Date.now();
47
+ eventsProcessed++;
48
+ switch (event.eventType) {
49
+ case 0 /* PaymentEventType.Claimable */:
50
+ log(`[webhook] PaymentClaimable hash=${event.paymentHash} amount=${event.amountMsat}msat pending=${pendingClaims.size + 1}`);
51
+ pendingClaims.add(event.paymentHash);
52
+ node.ackEvent();
53
+ break;
54
+ case 1 /* PaymentEventType.Received */: {
55
+ paymentsReceived++;
56
+ log(`[webhook] PaymentReceived hash=${event.paymentHash} amount=${event.amountMsat}msat`);
57
+ pendingClaims.delete(event.paymentHash);
58
+ markPaymentReceived(event.paymentHash);
59
+ try {
60
+ await client.checkouts.paymentReceived({
61
+ payments: [{
62
+ paymentHash: event.paymentHash,
63
+ amountSats: Math.floor(event.amountMsat / 1000),
64
+ sandbox: false,
65
+ }],
66
+ });
67
+ log(`[webhook] Payment confirmed to API hash=${event.paymentHash}`);
68
+ }
69
+ catch (error) {
70
+ // TODO (austin): Investigate retry strategy for API failures. Currently we ack
71
+ // regardless of API success (matching existing behavior). However,
72
+ // this leaves us in a state where the payment is received but not
73
+ // confirmed to the paying customer or reflected on moneydevkit.com.
74
+ // Consider having the checkout update based on the global payment state
75
+ // and some sort of reconciliation process to backfill the database.
76
+ warn(`[webhook] Failed to confirm payment ${event.paymentHash} to API`, error);
77
+ }
78
+ node.ackEvent();
79
+ break;
80
+ }
81
+ case 2 /* PaymentEventType.Failed */:
82
+ paymentsFailed++;
83
+ log(`[webhook] PaymentFailed hash=${event.paymentHash} reason=${event.reason}`);
84
+ pendingClaims.delete(event.paymentHash);
85
+ node.ackEvent();
86
+ break;
87
+ }
88
+ // Continue immediately to process next event
89
+ continue;
90
+ }
91
+ // No event available - check exit conditions
92
+ const now = Date.now();
93
+ const totalElapsed = now - startTime;
94
+ const quietElapsed = now - lastEventTime;
95
+ if (totalElapsed >= MAX_WAIT_MS) {
96
+ if (pendingClaims.size > 0) {
97
+ warn(`[webhook] Hard timeout after ${totalElapsed}ms with ${pendingClaims.size} pending claims`);
98
+ }
99
+ else {
100
+ log(`[webhook] Hard timeout after ${totalElapsed}ms (no pending)`);
101
+ }
102
+ break;
103
+ }
104
+ const canQuietExit = pendingClaims.size === 0 &&
105
+ quietElapsed >= QUIET_THRESHOLD_MS &&
106
+ totalElapsed >= MIN_WAIT_BEFORE_QUIET_MS;
107
+ if (canQuietExit) {
108
+ log(`[webhook] Quiet exit after ${totalElapsed}ms (quiet=${quietElapsed}ms)`);
109
+ break;
110
+ }
111
+ // Log occasionally while waiting for minimum time
112
+ if (pendingClaims.size === 0 &&
113
+ quietElapsed >= QUIET_THRESHOLD_MS &&
114
+ totalElapsed < MIN_WAIT_BEFORE_QUIET_MS &&
115
+ totalElapsed % 1000 < POLL_INTERVAL_MS) {
116
+ log(`[webhook] Waiting for min time: ${totalElapsed}/${MIN_WAIT_BEFORE_QUIET_MS}ms`);
117
+ }
118
+ // Yield to JS event loop
119
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
120
+ }
28
121
  }
29
- catch (error) {
30
- warn("Failed to notify MoneyDevKit checkout about received payments. Will rely on local state and retry on next webhook.", error);
122
+ finally {
123
+ log("[webhook] Stopping node...");
124
+ node.stopReceiving();
125
+ const totalDuration = Date.now() - webhookStartTime;
126
+ log(`[webhook] Complete: duration=${totalDuration}ms events=${eventsProcessed} received=${paymentsReceived} failed=${paymentsFailed}`);
31
127
  }
32
128
  }
33
129
  export async function handleMdkWebhook(request) {
130
+ const requestStartTime = Date.now();
131
+ log("[webhook] Received webhook request");
34
132
  try {
35
133
  const body = await request.json();
36
134
  const parsed = webhookSchema.parse(body);
135
+ log(`[webhook] Parsed event=${parsed.event} nodeId=${parsed.nodeId}`);
37
136
  if (parsed.event === "incoming-payment") {
38
- await handleIncomingPayment();
137
+ await handleIncomingPaymentEvents();
39
138
  }
139
+ const duration = Date.now() - requestStartTime;
140
+ log(`[webhook] Response OK in ${duration}ms`);
40
141
  return new Response("OK", { status: 200 });
41
142
  }
42
143
  catch (error) {
43
- console.error(error);
144
+ const duration = Date.now() - requestStartTime;
145
+ warn(`[webhook] Error after ${duration}ms:`, error);
44
146
  return new Response("Internal Server Error", { status: 500 });
45
147
  }
46
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/handlers/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,KAAK,UAAU,qBAAqB;IAClC,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAExC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC;YACrC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACnC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,sDAAsD;gBACtD,UAAU,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI;gBACjC,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CACF,oHAAoH,EACpH,KAAK,CACN,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAgB;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE,CAAC;YACxC,MAAM,qBAAqB,EAAE,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,IAAI,QAAQ,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/handlers/webhooks.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { PaymentEvent } from '@moneydevkit/lightning-js';
1
2
  type LightningModule = typeof import('@moneydevkit/lightning-js');
2
3
  type LightningNodeConstructor = LightningModule['MdkNode'];
3
4
  type LightningNodeOptions = ConstructorParameters<LightningNodeConstructor>[0];
@@ -18,6 +19,21 @@ export declare class MoneyDevKitNode {
18
19
  constructor(options: MoneyDevKitNodeOptions);
19
20
  get id(): string;
20
21
  receivePayments(): import("@moneydevkit/lightning-js").ReceivedPayment[];
22
+ /** Start the node and sync wallets. The node must be started before polling for events. */
23
+ startReceiving(): void;
24
+ /**
25
+ * Get the next payment event without ACKing it.
26
+ * Returns null if no events are available.
27
+ * Must call ackEvent() after successfully handling the event.
28
+ */
29
+ nextEvent(): PaymentEvent | null;
30
+ /**
31
+ * ACK the current event after successfully handling it.
32
+ * Must be called after nextEvent() returns an event, before calling nextEvent() again.
33
+ */
34
+ ackEvent(): void;
35
+ /** Stop the node. Call when done polling. */
36
+ stopReceiving(): void;
21
37
  payBolt12Offer(bolt12: string, amountMsat: number): string;
22
38
  payBolt11(bolt11: string): string;
23
39
  payLNUrl(lnurl: string, amountMsat: number): string;
@@ -87,6 +87,29 @@ export class MoneyDevKitNode {
87
87
  receivePayments() {
88
88
  return this.node.receivePayment(RECEIVE_PAYMENTS_MIN_THRESHOLD_MS, RECEIVE_PAYMENTS_QUIET_THRESHOLD_MS);
89
89
  }
90
+ /** Start the node and sync wallets. The node must be started before polling for events. */
91
+ startReceiving() {
92
+ this.node.startReceiving();
93
+ }
94
+ /**
95
+ * Get the next payment event without ACKing it.
96
+ * Returns null if no events are available.
97
+ * Must call ackEvent() after successfully handling the event.
98
+ */
99
+ nextEvent() {
100
+ return this.node.nextEvent();
101
+ }
102
+ /**
103
+ * ACK the current event after successfully handling it.
104
+ * Must be called after nextEvent() returns an event, before calling nextEvent() again.
105
+ */
106
+ ackEvent() {
107
+ this.node.ackEvent();
108
+ }
109
+ /** Stop the node. Call when done polling. */
110
+ stopReceiving() {
111
+ this.node.stopReceiving();
112
+ }
90
113
  payBolt12Offer(bolt12, amountMsat) {
91
114
  return this.node.payBolt12Offer(bolt12, amountMsat, 30);
92
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lightning-node.js","sourceRoot":"","sources":["../src/lightning-node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lightning-node.js","sourceRoot":"","sources":["../src/lightning-node.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneydevkit/core",
3
- "version": "0.9.0-beta.2",
3
+ "version": "0.9.0-beta.3",
4
4
  "description": "Shared moneydevkit checkout core utilities",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,7 +43,7 @@
43
43
  "dependencies": {
44
44
  "@hookform/resolvers": "^5.0.1",
45
45
  "@moneydevkit/api-contract": "^0.1.17",
46
- "@moneydevkit/lightning-js": "^0.1.63",
46
+ "@moneydevkit/lightning-js": "^0.1.65",
47
47
  "@orpc/client": "1.3.0",
48
48
  "@orpc/contract": "1.3.0",
49
49
  "@radix-ui/react-collapsible": "^1.1.11",