@moneydevkit/core 0.9.0-beta.3 → 0.9.0-beta.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/actions.d.ts +6 -1
- package/dist/actions.js +58 -6
- package/dist/actions.js.map +1 -1
- package/dist/checkout-utils.d.ts +9 -0
- package/dist/checkout-utils.js +46 -0
- package/dist/checkout-utils.js.map +1 -1
- package/dist/client-actions.d.ts +6 -1
- package/dist/client-actions.js +10 -1
- package/dist/client-actions.js.map +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.js +1 -0
- package/dist/client.js.map +1 -1
- package/dist/components/checkout/PendingPaymentCheckout.js +6 -2
- package/dist/components/checkout/PendingPaymentCheckout.js.map +1 -1
- package/dist/components/checkout/UnconfirmedCheckout.js +10 -2
- package/dist/components/checkout/UnconfirmedCheckout.js.map +1 -1
- package/dist/handlers/checkout.js +28 -2
- package/dist/handlers/checkout.js.map +1 -1
- package/dist/handlers/customer.d.ts +1 -0
- package/dist/handlers/customer.js +39 -0
- package/dist/handlers/customer.js.map +1 -0
- package/dist/handlers/index.d.ts +1 -0
- package/dist/handlers/index.js +1 -0
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/subscription.d.ts +95 -0
- package/dist/handlers/subscription.js +224 -0
- package/dist/handlers/subscription.js.map +1 -0
- package/dist/handlers/webhooks.js +22 -3
- package/dist/handlers/webhooks.js.map +1 -1
- package/dist/hooks/useCustomer.d.ts +16 -0
- package/dist/hooks/useCustomer.js +54 -0
- package/dist/hooks/useCustomer.js.map +1 -0
- package/dist/hooks/useProducts.d.ts +14 -3
- package/dist/hooks/useProducts.js +11 -0
- package/dist/hooks/useProducts.js.map +1 -1
- package/dist/mdk-client.d.ts +19 -1
- package/dist/mdk-client.js +21 -0
- package/dist/mdk-client.js.map +1 -1
- package/dist/route.d.ts +17 -4
- package/dist/route.js +45 -21
- package/dist/route.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
package/dist/handlers/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options for creating a subscription renewal URL.
|
|
3
|
+
*/
|
|
4
|
+
export interface CreateRenewalSubscriptionUrlOptions {
|
|
5
|
+
/** The subscription ID to renew */
|
|
6
|
+
subscriptionId: string;
|
|
7
|
+
/** Base path for the MDK API (default: /api/mdk) */
|
|
8
|
+
basePath?: string;
|
|
9
|
+
/** Custom checkout path (default: /checkout) */
|
|
10
|
+
checkoutPath?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Options for creating a subscription cancel URL.
|
|
14
|
+
*/
|
|
15
|
+
export interface CreateCancelSubscriptionUrlOptions {
|
|
16
|
+
/** The subscription ID to cancel */
|
|
17
|
+
subscriptionId: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate an HMAC-SHA256 signature for subscription action URL params.
|
|
21
|
+
* This is the core signing function used by both SDK helpers and backend services.
|
|
22
|
+
*
|
|
23
|
+
* @param action - The action type ('cancelSubscription' or 'renewSubscription')
|
|
24
|
+
* @param subscriptionId - The subscription ID
|
|
25
|
+
* @param secret - The HMAC secret (MDK_ACCESS_TOKEN / app.apiKey)
|
|
26
|
+
* @param additionalParams - Optional additional params to include (e.g., checkoutPath)
|
|
27
|
+
* @returns The hex-encoded HMAC signature
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* // Backend usage with app.apiKey from database
|
|
31
|
+
* const signature = generateSubscriptionSignature(
|
|
32
|
+
* 'cancelSubscription',
|
|
33
|
+
* subscriptionId,
|
|
34
|
+
* app.apiKey
|
|
35
|
+
* )
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // SDK usage with MDK_ACCESS_TOKEN from env
|
|
39
|
+
* const signature = generateSubscriptionSignature(
|
|
40
|
+
* 'renewSubscription',
|
|
41
|
+
* subscriptionId,
|
|
42
|
+
* process.env.MDK_ACCESS_TOKEN!,
|
|
43
|
+
* { checkoutPath: '/checkout' }
|
|
44
|
+
* )
|
|
45
|
+
*/
|
|
46
|
+
export declare function generateSubscriptionSignature(action: 'cancelSubscription' | 'renewSubscription', subscriptionId: string, secret: string, additionalParams?: Record<string, string>): string;
|
|
47
|
+
/**
|
|
48
|
+
* Verify an HMAC-SHA256 signature for subscription action URL params.
|
|
49
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
50
|
+
*
|
|
51
|
+
* @param params - The URL params (action, subscriptionId, optionally checkoutPath)
|
|
52
|
+
* @param signature - The signature to verify
|
|
53
|
+
* @param secret - The HMAC secret (MDK_ACCESS_TOKEN / app.apiKey)
|
|
54
|
+
* @returns True if signature is valid
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* // Verify with explicit secret
|
|
58
|
+
* const isValid = verifySubscriptionSignatureWithSecret(params, signature, app.apiKey)
|
|
59
|
+
*/
|
|
60
|
+
export declare function verifySubscriptionSignatureWithSecret(params: URLSearchParams, signature: string, secret: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Generate a signed URL for renewing a subscription.
|
|
63
|
+
* When visited, creates a renewal checkout and redirects to the checkout page.
|
|
64
|
+
* Uses MDK_ACCESS_TOKEN from environment.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* const url = createRenewalSubscriptionUrl({
|
|
68
|
+
* subscriptionId: 'sub_abc123',
|
|
69
|
+
* })
|
|
70
|
+
* // Returns: /api/mdk?action=renewSubscription&subscriptionId=sub_abc123&signature=...
|
|
71
|
+
*/
|
|
72
|
+
export declare function createRenewalSubscriptionUrl(options: CreateRenewalSubscriptionUrlOptions): string;
|
|
73
|
+
/**
|
|
74
|
+
* Generate a signed URL for canceling a subscription.
|
|
75
|
+
* Points directly to the MDK-hosted cancel page.
|
|
76
|
+
* Uses MDK_ACCESS_TOKEN from environment.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* const url = createCancelSubscriptionUrl({
|
|
80
|
+
* subscriptionId: 'sub_abc123',
|
|
81
|
+
* })
|
|
82
|
+
* // Returns: https://www.moneydevkit.com/subscription/cancel?subscriptionId=sub_abc123&signature=...
|
|
83
|
+
*/
|
|
84
|
+
export declare function createCancelSubscriptionUrl(options: CreateCancelSubscriptionUrlOptions): string;
|
|
85
|
+
/**
|
|
86
|
+
* Verify the HMAC signature of subscription URL params.
|
|
87
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
88
|
+
* Uses MDK_ACCESS_TOKEN from environment.
|
|
89
|
+
*/
|
|
90
|
+
export declare function verifySubscriptionSignature(params: URLSearchParams, signature: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Handle a renewal subscription request from a signed URL.
|
|
93
|
+
* Creates a renewal checkout, generates an invoice, and redirects to the checkout page.
|
|
94
|
+
*/
|
|
95
|
+
export declare function handleRenewSubscriptionFromUrl(request: Request, url: URL, params: URLSearchParams): Promise<Response>;
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { createHmac, timingSafeEqual } from 'crypto';
|
|
2
|
+
import { createMoneyDevKitClient, createMoneyDevKitNode } from '../mdk';
|
|
3
|
+
import { sanitizeCheckoutPath } from './checkout';
|
|
4
|
+
/**
|
|
5
|
+
* The base URL for MoneyDevKit hosted pages.
|
|
6
|
+
* In production this is https://www.moneydevkit.com
|
|
7
|
+
* Can be overridden via MDK_HOST environment variable for development.
|
|
8
|
+
*/
|
|
9
|
+
const MDK_HOST = process.env.MDK_HOST ?? 'https://www.moneydevkit.com';
|
|
10
|
+
// ────────────────────────────────────────────────────────────────────────────────
|
|
11
|
+
// Core signature utilities - parameterized versions for use by backend or SDK
|
|
12
|
+
// ────────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
/**
|
|
14
|
+
* Generate an HMAC-SHA256 signature for subscription action URL params.
|
|
15
|
+
* This is the core signing function used by both SDK helpers and backend services.
|
|
16
|
+
*
|
|
17
|
+
* @param action - The action type ('cancelSubscription' or 'renewSubscription')
|
|
18
|
+
* @param subscriptionId - The subscription ID
|
|
19
|
+
* @param secret - The HMAC secret (MDK_ACCESS_TOKEN / app.apiKey)
|
|
20
|
+
* @param additionalParams - Optional additional params to include (e.g., checkoutPath)
|
|
21
|
+
* @returns The hex-encoded HMAC signature
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // Backend usage with app.apiKey from database
|
|
25
|
+
* const signature = generateSubscriptionSignature(
|
|
26
|
+
* 'cancelSubscription',
|
|
27
|
+
* subscriptionId,
|
|
28
|
+
* app.apiKey
|
|
29
|
+
* )
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* // SDK usage with MDK_ACCESS_TOKEN from env
|
|
33
|
+
* const signature = generateSubscriptionSignature(
|
|
34
|
+
* 'renewSubscription',
|
|
35
|
+
* subscriptionId,
|
|
36
|
+
* process.env.MDK_ACCESS_TOKEN!,
|
|
37
|
+
* { checkoutPath: '/checkout' }
|
|
38
|
+
* )
|
|
39
|
+
*/
|
|
40
|
+
export function generateSubscriptionSignature(action, subscriptionId, secret, additionalParams) {
|
|
41
|
+
const urlParams = new URLSearchParams();
|
|
42
|
+
urlParams.set('action', action);
|
|
43
|
+
urlParams.set('subscriptionId', subscriptionId);
|
|
44
|
+
if (additionalParams) {
|
|
45
|
+
for (const [key, value] of Object.entries(additionalParams)) {
|
|
46
|
+
urlParams.set(key, value);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
urlParams.sort();
|
|
50
|
+
const canonicalString = urlParams.toString();
|
|
51
|
+
return createHmac('sha256', secret)
|
|
52
|
+
.update(canonicalString)
|
|
53
|
+
.digest('hex');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Verify an HMAC-SHA256 signature for subscription action URL params.
|
|
57
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
58
|
+
*
|
|
59
|
+
* @param params - The URL params (action, subscriptionId, optionally checkoutPath)
|
|
60
|
+
* @param signature - The signature to verify
|
|
61
|
+
* @param secret - The HMAC secret (MDK_ACCESS_TOKEN / app.apiKey)
|
|
62
|
+
* @returns True if signature is valid
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* // Verify with explicit secret
|
|
66
|
+
* const isValid = verifySubscriptionSignatureWithSecret(params, signature, app.apiKey)
|
|
67
|
+
*/
|
|
68
|
+
export function verifySubscriptionSignatureWithSecret(params, signature, secret) {
|
|
69
|
+
const paramsToVerify = new URLSearchParams(params);
|
|
70
|
+
paramsToVerify.delete('signature');
|
|
71
|
+
paramsToVerify.sort();
|
|
72
|
+
const canonicalString = paramsToVerify.toString();
|
|
73
|
+
const expectedSignature = createHmac('sha256', secret)
|
|
74
|
+
.update(canonicalString)
|
|
75
|
+
.digest('hex');
|
|
76
|
+
try {
|
|
77
|
+
const sigBuffer = Buffer.from(signature, 'hex');
|
|
78
|
+
const expectedBuffer = Buffer.from(expectedSignature, 'hex');
|
|
79
|
+
if (sigBuffer.length !== expectedBuffer.length) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return timingSafeEqual(sigBuffer, expectedBuffer);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// ────────────────────────────────────────────────────────────────────────────────
|
|
89
|
+
// SDK helpers - use MDK_ACCESS_TOKEN from environment
|
|
90
|
+
// ────────────────────────────────────────────────────────────────────────────────
|
|
91
|
+
/**
|
|
92
|
+
* Generate a signed URL for renewing a subscription.
|
|
93
|
+
* When visited, creates a renewal checkout and redirects to the checkout page.
|
|
94
|
+
* Uses MDK_ACCESS_TOKEN from environment.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* const url = createRenewalSubscriptionUrl({
|
|
98
|
+
* subscriptionId: 'sub_abc123',
|
|
99
|
+
* })
|
|
100
|
+
* // Returns: /api/mdk?action=renewSubscription&subscriptionId=sub_abc123&signature=...
|
|
101
|
+
*/
|
|
102
|
+
export function createRenewalSubscriptionUrl(options) {
|
|
103
|
+
const basePath = options.basePath ?? '/api/mdk';
|
|
104
|
+
const accessToken = process.env.MDK_ACCESS_TOKEN;
|
|
105
|
+
if (!accessToken) {
|
|
106
|
+
throw new Error('MDK_ACCESS_TOKEN is required for creating subscription URLs');
|
|
107
|
+
}
|
|
108
|
+
const additionalParams = options.checkoutPath ? { checkoutPath: options.checkoutPath } : undefined;
|
|
109
|
+
const signature = generateSubscriptionSignature('renewSubscription', options.subscriptionId, accessToken, additionalParams);
|
|
110
|
+
const urlParams = new URLSearchParams();
|
|
111
|
+
urlParams.set('action', 'renewSubscription');
|
|
112
|
+
urlParams.set('subscriptionId', options.subscriptionId);
|
|
113
|
+
if (options.checkoutPath) {
|
|
114
|
+
urlParams.set('checkoutPath', options.checkoutPath);
|
|
115
|
+
}
|
|
116
|
+
urlParams.set('signature', signature);
|
|
117
|
+
return `${basePath}?${urlParams.toString()}`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Generate a signed URL for canceling a subscription.
|
|
121
|
+
* Points directly to the MDK-hosted cancel page.
|
|
122
|
+
* Uses MDK_ACCESS_TOKEN from environment.
|
|
123
|
+
*
|
|
124
|
+
* @example
|
|
125
|
+
* const url = createCancelSubscriptionUrl({
|
|
126
|
+
* subscriptionId: 'sub_abc123',
|
|
127
|
+
* })
|
|
128
|
+
* // Returns: https://www.moneydevkit.com/subscription/cancel?subscriptionId=sub_abc123&signature=...
|
|
129
|
+
*/
|
|
130
|
+
export function createCancelSubscriptionUrl(options) {
|
|
131
|
+
const accessToken = process.env.MDK_ACCESS_TOKEN;
|
|
132
|
+
if (!accessToken) {
|
|
133
|
+
throw new Error('MDK_ACCESS_TOKEN is required for creating subscription URLs');
|
|
134
|
+
}
|
|
135
|
+
const signature = generateSubscriptionSignature('cancelSubscription', options.subscriptionId, accessToken);
|
|
136
|
+
const urlParams = new URLSearchParams();
|
|
137
|
+
urlParams.set('subscriptionId', options.subscriptionId);
|
|
138
|
+
urlParams.set('signature', signature);
|
|
139
|
+
return `${MDK_HOST}/subscription/cancel?${urlParams.toString()}`;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Verify the HMAC signature of subscription URL params.
|
|
143
|
+
* Uses constant-time comparison to prevent timing attacks.
|
|
144
|
+
* Uses MDK_ACCESS_TOKEN from environment.
|
|
145
|
+
*/
|
|
146
|
+
export function verifySubscriptionSignature(params, signature) {
|
|
147
|
+
const accessToken = process.env.MDK_ACCESS_TOKEN;
|
|
148
|
+
if (!accessToken)
|
|
149
|
+
return false;
|
|
150
|
+
return verifySubscriptionSignatureWithSecret(params, signature, accessToken);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Safely join a base path with a segment, avoiding double slashes.
|
|
154
|
+
*/
|
|
155
|
+
function joinPath(base, segment) {
|
|
156
|
+
if (base === '/')
|
|
157
|
+
return `/${segment}`;
|
|
158
|
+
return `${base}/${segment}`;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Helper to redirect to checkout error page.
|
|
162
|
+
*/
|
|
163
|
+
function redirectToCheckoutError(origin, checkoutPath, code, message) {
|
|
164
|
+
const errorUrl = new URL(joinPath(checkoutPath, 'error'), origin);
|
|
165
|
+
errorUrl.searchParams.set('error', code);
|
|
166
|
+
errorUrl.searchParams.set('message', message);
|
|
167
|
+
return Response.redirect(errorUrl.toString(), 302);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Get the origin from a request, respecting proxy headers.
|
|
171
|
+
* Uses Host header to handle Docker port mapping correctly.
|
|
172
|
+
*/
|
|
173
|
+
function getRequestOrigin(request, fallbackUrl) {
|
|
174
|
+
const host = request.headers.get('host');
|
|
175
|
+
if (host) {
|
|
176
|
+
const protocol = request.headers.get('x-forwarded-proto') ?? fallbackUrl.protocol.replace(':', '');
|
|
177
|
+
return `${protocol}://${host}`;
|
|
178
|
+
}
|
|
179
|
+
return fallbackUrl.origin;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Handle a renewal subscription request from a signed URL.
|
|
183
|
+
* Creates a renewal checkout, generates an invoice, and redirects to the checkout page.
|
|
184
|
+
*/
|
|
185
|
+
export async function handleRenewSubscriptionFromUrl(request, url, params) {
|
|
186
|
+
const subscriptionId = params.get('subscriptionId');
|
|
187
|
+
const checkoutPath = sanitizeCheckoutPath(params.get('checkoutPath'));
|
|
188
|
+
const origin = getRequestOrigin(request, url);
|
|
189
|
+
if (!subscriptionId) {
|
|
190
|
+
return redirectToCheckoutError(origin, checkoutPath, 'missing_subscription_id', 'Missing subscription ID');
|
|
191
|
+
}
|
|
192
|
+
try {
|
|
193
|
+
const client = createMoneyDevKitClient();
|
|
194
|
+
const node = createMoneyDevKitNode();
|
|
195
|
+
const result = await client.subscriptions.createRenewalCheckout({ subscriptionId });
|
|
196
|
+
const checkout = await client.checkouts.get({ id: result.checkoutId });
|
|
197
|
+
// Renewal checkouts are auto-confirmed - generate invoice if needed
|
|
198
|
+
if (checkout.status === 'CONFIRMED') {
|
|
199
|
+
const invoice = checkout.invoiceScid
|
|
200
|
+
? node.invoices.createWithScid(checkout.invoiceScid, checkout.invoiceAmountSats)
|
|
201
|
+
: node.invoices.create(checkout.invoiceAmountSats);
|
|
202
|
+
await client.checkouts.registerInvoice({
|
|
203
|
+
paymentHash: invoice.paymentHash,
|
|
204
|
+
invoice: invoice.invoice,
|
|
205
|
+
invoiceExpiresAt: invoice.expiresAt,
|
|
206
|
+
checkoutId: checkout.id,
|
|
207
|
+
nodeId: node.id,
|
|
208
|
+
scid: invoice.scid,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const checkoutUrl = new URL(joinPath(checkoutPath, result.checkoutId), origin);
|
|
212
|
+
return Response.redirect(checkoutUrl.toString(), 302);
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
const error = err;
|
|
216
|
+
const code = error.data?.code;
|
|
217
|
+
const message = error.message ?? (err instanceof Error ? err.message : 'Failed to create renewal checkout');
|
|
218
|
+
if (code === 'ALREADY_RENEWED' || code === 'SUBSCRIPTION_CANCELED' || code === 'SUBSCRIPTION_NOT_FOUND') {
|
|
219
|
+
return redirectToCheckoutError(origin, checkoutPath, code.toLowerCase(), message);
|
|
220
|
+
}
|
|
221
|
+
return redirectToCheckoutError(origin, checkoutPath, 'renewal_failed', message);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=subscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/handlers/subscription.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { SubscriptionSchema, SubscriptionWebhookEventSchema, } from "@moneydevkit/api-contract";
|
|
2
3
|
import { log, warn } from "../logging";
|
|
3
4
|
import { createMoneyDevKitClient, createMoneyDevKitNode } from "../mdk";
|
|
4
5
|
import { markPaymentReceived } from "../payment-state";
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
// Incoming payment events - have nodeId, no subscription
|
|
7
|
+
const incomingPaymentEventSchema = z.object({
|
|
8
|
+
handler: z.literal("webhooks"),
|
|
9
|
+
event: z.literal("incoming-payment"),
|
|
7
10
|
nodeId: z.string(),
|
|
8
11
|
});
|
|
12
|
+
// Subscription events - have subscription, no nodeId
|
|
13
|
+
const subscriptionEventSchema = z.object({
|
|
14
|
+
handler: z.literal("webhooks"),
|
|
15
|
+
event: SubscriptionWebhookEventSchema,
|
|
16
|
+
subscription: SubscriptionSchema,
|
|
17
|
+
});
|
|
18
|
+
// Discriminated union - TypeScript will narrow based on `event`
|
|
19
|
+
const webhookSchema = z.union([
|
|
20
|
+
incomingPaymentEventSchema,
|
|
21
|
+
subscriptionEventSchema,
|
|
22
|
+
]);
|
|
9
23
|
// How often to poll for new LDK events
|
|
10
24
|
const POLL_INTERVAL_MS = 100;
|
|
11
25
|
// Minimum time that we'll run the lightning node when handling incoming payments.
|
|
@@ -132,10 +146,15 @@ export async function handleMdkWebhook(request) {
|
|
|
132
146
|
try {
|
|
133
147
|
const body = await request.json();
|
|
134
148
|
const parsed = webhookSchema.parse(body);
|
|
135
|
-
log(`[webhook] Parsed event=${parsed.event} nodeId=${parsed.nodeId}`);
|
|
136
149
|
if (parsed.event === "incoming-payment") {
|
|
150
|
+
log(`[webhook] Parsed event=${parsed.event} nodeId=${parsed.nodeId}`);
|
|
137
151
|
await handleIncomingPaymentEvents();
|
|
138
152
|
}
|
|
153
|
+
else {
|
|
154
|
+
// Subscription events - SDK acknowledges but doesn't handle
|
|
155
|
+
// (merchant handles via their own webhook logic)
|
|
156
|
+
log(`[webhook] Parsed event=${parsed.event} subscriptionId=${parsed.subscription.id}`);
|
|
157
|
+
}
|
|
139
158
|
const duration = Date.now() - requestStartTime;
|
|
140
159
|
log(`[webhook] Response OK in ${duration}ms`);
|
|
141
160
|
return new Response("OK", { status: 200 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/handlers/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/handlers/webhooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CustomerWithSubscriptions, GetCustomerInput } from '@moneydevkit/api-contract';
|
|
2
|
+
import type { MdkError } from '../types';
|
|
3
|
+
export type CustomerIdentifier = GetCustomerInput;
|
|
4
|
+
export interface CustomerData extends CustomerWithSubscriptions {
|
|
5
|
+
hasActiveSubscription: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface UseCustomerOptions {
|
|
8
|
+
/** Include sandbox subscriptions in the response. Defaults to false. */
|
|
9
|
+
includeSandbox?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function useCustomer(identifier: GetCustomerInput | null | undefined, options?: UseCustomerOptions): {
|
|
12
|
+
customer: CustomerData | null;
|
|
13
|
+
isLoading: boolean;
|
|
14
|
+
error: MdkError | null;
|
|
15
|
+
refetch: () => Promise<void>;
|
|
16
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import { clientGetCustomer } from '../client-actions';
|
|
3
|
+
import { log } from '../logging';
|
|
4
|
+
export function useCustomer(identifier, options) {
|
|
5
|
+
const [customer, setCustomer] = useState(null);
|
|
6
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
// Create stable identifier key for dependency tracking
|
|
9
|
+
const identifierKey = identifier
|
|
10
|
+
? 'externalId' in identifier
|
|
11
|
+
? `externalId:${identifier.externalId ?? ''}`
|
|
12
|
+
: 'email' in identifier
|
|
13
|
+
? `email:${identifier.email ?? ''}`
|
|
14
|
+
: 'customerId' in identifier
|
|
15
|
+
? `customerId:${identifier.customerId ?? ''}`
|
|
16
|
+
: null
|
|
17
|
+
: null;
|
|
18
|
+
// Include options in the dependency key
|
|
19
|
+
const optionsKey = options?.includeSandbox ? 'sandbox:true' : 'sandbox:false';
|
|
20
|
+
const fetchCustomer = useCallback(async () => {
|
|
21
|
+
if (!identifier) {
|
|
22
|
+
setCustomer(null);
|
|
23
|
+
setError(null);
|
|
24
|
+
setIsLoading(false);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
setIsLoading(true);
|
|
28
|
+
setError(null);
|
|
29
|
+
const result = await clientGetCustomer(identifier, options);
|
|
30
|
+
if (result.error) {
|
|
31
|
+
log('Customer fetch error:', result.error);
|
|
32
|
+
setError(result.error);
|
|
33
|
+
setCustomer(null);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
setCustomer({
|
|
37
|
+
...result.data,
|
|
38
|
+
// Include 'past_due' because users retain access during the grace period
|
|
39
|
+
hasActiveSubscription: result.data.subscriptions.some((s) => s.status === 'active' || s.status === 'past_due'),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
setIsLoading(false);
|
|
43
|
+
}, [identifierKey, optionsKey]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
fetchCustomer();
|
|
46
|
+
}, [fetchCustomer]);
|
|
47
|
+
return {
|
|
48
|
+
customer,
|
|
49
|
+
isLoading,
|
|
50
|
+
error,
|
|
51
|
+
refetch: fetchCustomer,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=useCustomer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCustomer.js","sourceRoot":"","sources":["../../src/hooks/useCustomer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,mBAAmB,CAAA;AAE9E,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAchC,MAAM,UAAU,WAAW,CACzB,UAA+C,EAC/C,OAA4B;IAE5B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAA;IACnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAA;IAEzD,uDAAuD;IACvD,MAAM,aAAa,GAAG,UAAU;QAC9B,CAAC,CAAC,YAAY,IAAI,UAAU;YAC1B,CAAC,CAAC,cAAc,UAAU,CAAC,UAAU,IAAI,EAAE,EAAE;YAC7C,CAAC,CAAC,OAAO,IAAI,UAAU;gBACrB,CAAC,CAAC,SAAS,UAAU,CAAC,KAAK,IAAI,EAAE,EAAE;gBACnC,CAAC,CAAC,YAAY,IAAI,UAAU;oBAC1B,CAAC,CAAC,cAAc,UAAU,CAAC,UAAU,IAAI,EAAE,EAAE;oBAC7C,CAAC,CAAC,IAAI;QACZ,CAAC,CAAC,IAAI,CAAA;IAER,wCAAwC;IACxC,MAAM,UAAU,GAAG,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAA;IAE7E,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,CAAC,CAAA;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAA;YACd,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,OAAM;QACR,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;QAEd,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAE3D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAC1C,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtB,WAAW,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,WAAW,CAAC;gBACV,GAAG,MAAM,CAAC,IAAI;gBACd,yEAAyE;gBACzE,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CACnD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CACxD;aACF,CAAC,CAAA;QACJ,CAAC;QAED,YAAY,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAA;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,EAAE,CAAA;IACjB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAEnB,OAAO;QACL,QAAQ;QACR,SAAS;QACT,KAAK;QACL,OAAO,EAAE,aAAa;KACvB,CAAA;AACH,CAAC"}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook to fetch available products from the MDK API.
|
|
3
|
+
*
|
|
4
|
+
* @returns Object containing products, loading state, error, and refetch function
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const { products } = useProducts()
|
|
8
|
+
* // USD prices are in cents - divide by 100 for display
|
|
9
|
+
* const displayPrice = (product.prices[0]?.priceAmount ?? 0) / 100
|
|
10
|
+
* // SAT amounts are in satoshis - no conversion needed
|
|
11
|
+
*/
|
|
1
12
|
export declare function useProducts(): {
|
|
2
13
|
products: {
|
|
3
|
-
id: string;
|
|
4
14
|
name: string;
|
|
15
|
+
id: string;
|
|
5
16
|
description: string | null;
|
|
6
17
|
recurringInterval: "MONTH" | "QUARTER" | "YEAR" | null;
|
|
7
18
|
prices: {
|
|
8
|
-
id: string;
|
|
9
19
|
currency: "USD" | "SAT";
|
|
10
|
-
amountType: "FIXED" | "CUSTOM";
|
|
11
20
|
priceAmount: number | null;
|
|
21
|
+
id: string;
|
|
22
|
+
amountType: "FIXED" | "CUSTOM";
|
|
12
23
|
}[];
|
|
13
24
|
}[];
|
|
14
25
|
isLoading: boolean;
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { clientListProducts } from '../client-actions';
|
|
3
3
|
import { log } from '../logging';
|
|
4
|
+
/**
|
|
5
|
+
* Hook to fetch available products from the MDK API.
|
|
6
|
+
*
|
|
7
|
+
* @returns Object containing products, loading state, error, and refetch function
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const { products } = useProducts()
|
|
11
|
+
* // USD prices are in cents - divide by 100 for display
|
|
12
|
+
* const displayPrice = (product.prices[0]?.priceAmount ?? 0) / 100
|
|
13
|
+
* // SAT amounts are in satoshis - no conversion needed
|
|
14
|
+
*/
|
|
4
15
|
export function useProducts() {
|
|
5
16
|
const [products, setProducts] = useState([]);
|
|
6
17
|
const [isLoading, setIsLoading] = useState(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProducts.js","sourceRoot":"","sources":["../../src/hooks/useProducts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAEhC,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC,CAAA;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IAEtD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;YACd,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAA;YACzC,WAAW,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAChF,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAA;YACnC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,EAAE,CAAA;IACjB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAEnB,OAAO;QACL,QAAQ;QACR,SAAS;QACT,KAAK;QACL,OAAO,EAAE,aAAa;KACvB,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"useProducts.js","sourceRoot":"","sources":["../../src/hooks/useProducts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAY,EAAE,CAAC,CAAA;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAA;IAEtD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,IAAI,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,QAAQ,CAAC,IAAI,CAAC,CAAA;YACd,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAA;YACzC,WAAW,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;YAChF,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAA;YACnC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,EAAE,CAAA;IACjB,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAEnB,OAAO;QACL,QAAQ;QACR,SAAS;QACT,KAAK;QACL,OAAO,EAAE,aAAa;KACvB,CAAA;AACH,CAAC"}
|
package/dist/mdk-client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Checkout, CreateCheckout, ConfirmCheckout, RegisterInvoice, PaymentReceived, Product } from '@moneydevkit/api-contract';
|
|
1
|
+
import { Checkout, CreateCheckout, ConfirmCheckout, RegisterInvoice, PaymentReceived, Product, Subscription, CustomerWithSubscriptions, GetCustomerInput } from '@moneydevkit/api-contract';
|
|
2
2
|
export type MoneyDevKitClientOptions = {
|
|
3
3
|
accessToken: string;
|
|
4
4
|
baseUrl: string;
|
|
@@ -33,4 +33,22 @@ export declare class MoneyDevKitClient {
|
|
|
33
33
|
products: Product[];
|
|
34
34
|
}>;
|
|
35
35
|
};
|
|
36
|
+
get subscriptions(): {
|
|
37
|
+
get: (params: {
|
|
38
|
+
subscriptionId: string;
|
|
39
|
+
}) => Promise<Subscription>;
|
|
40
|
+
createRenewalCheckout: (params: {
|
|
41
|
+
subscriptionId: string;
|
|
42
|
+
}) => Promise<{
|
|
43
|
+
checkoutId: string;
|
|
44
|
+
}>;
|
|
45
|
+
cancel: (params: {
|
|
46
|
+
subscriptionId: string;
|
|
47
|
+
}) => Promise<{
|
|
48
|
+
ok: boolean;
|
|
49
|
+
}>;
|
|
50
|
+
};
|
|
51
|
+
get customers(): {
|
|
52
|
+
get: (params: GetCustomerInput) => Promise<CustomerWithSubscriptions>;
|
|
53
|
+
};
|
|
36
54
|
}
|
package/dist/mdk-client.js
CHANGED
|
@@ -42,5 +42,26 @@ export class MoneyDevKitClient {
|
|
|
42
42
|
},
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
+
get subscriptions() {
|
|
46
|
+
return {
|
|
47
|
+
get: async (params) => {
|
|
48
|
+
return await this.client.subscription.get(params);
|
|
49
|
+
},
|
|
50
|
+
createRenewalCheckout: async (params) => {
|
|
51
|
+
return await this.client.subscription.createRenewalCheckout(params);
|
|
52
|
+
},
|
|
53
|
+
cancel: async (params) => {
|
|
54
|
+
return await this.client.subscription.cancel(params);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
get customers() {
|
|
59
|
+
return {
|
|
60
|
+
get: async (params) => {
|
|
61
|
+
// Use getSdk which accepts GetCustomerInput and returns CustomerWithSubscriptions
|
|
62
|
+
return await this.client.customer.getSdk(params);
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
45
66
|
}
|
|
46
67
|
//# sourceMappingURL=mdk-client.js.map
|
package/dist/mdk-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdk-client.js","sourceRoot":"","sources":["../src/mdk-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAsB5C,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAuC;IAErD,YAAY,OAAiC;QAC3C,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC;YACvB,GAAG,EAAE,OAAO,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,GAAG,EAAE,KAAK,EAAE,MAAsB,EAAqB,EAAE;gBACvD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC/C,CAAC;YACD,MAAM,EAAE,KAAK,EACX,MAA6B,EAC7B,MAAc,EACK,EAAE;gBACrB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;gBACnC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACvC,GAAG,IAAI;oBACP,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;oBACzC,MAAM;iBACP,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAuB,EAAqB,EAAE;gBAC5D,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACnD,CAAC;YACD,eAAe,EAAE,KAAK,EAAE,MAAuB,EAAqB,EAAE;gBACpE,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;YAC3D,CAAC;YACD,eAAe,EAAE,KAAK,EAAE,MAAuB,EAA4B,EAAE;gBAC3E,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;YAC3D,CAAC;SACF,CAAA;IACH,CAAC;IAED,IAAI,QAAQ;QACV,OAAO;YACL,IAAI,EAAE,KAAK,IAAsC,EAAE;gBACjD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC5C,CAAC;SACF,CAAA;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"mdk-client.js","sourceRoot":"","sources":["../src/mdk-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAsB5C,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAuC;IAErD,YAAY,OAAiC;QAC3C,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC;YACvB,GAAG,EAAE,OAAO,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC;SACH,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,GAAG,EAAE,KAAK,EAAE,MAAsB,EAAqB,EAAE;gBACvD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC/C,CAAC;YACD,MAAM,EAAE,KAAK,EACX,MAA6B,EAC7B,MAAc,EACK,EAAE;gBACrB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;gBACnC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACvC,GAAG,IAAI;oBACP,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;oBACzC,MAAM;iBACP,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,MAAuB,EAAqB,EAAE;gBAC5D,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;YACnD,CAAC;YACD,eAAe,EAAE,KAAK,EAAE,MAAuB,EAAqB,EAAE;gBACpE,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;YAC3D,CAAC;YACD,eAAe,EAAE,KAAK,EAAE,MAAuB,EAA4B,EAAE;gBAC3E,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;YAC3D,CAAC;SACF,CAAA;IACH,CAAC;IAED,IAAI,QAAQ;QACV,OAAO;YACL,IAAI,EAAE,KAAK,IAAsC,EAAE;gBACjD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC5C,CAAC;SACF,CAAA;IACH,CAAC;IAED,IAAI,aAAa;QACf,OAAO;YACL,GAAG,EAAE,KAAK,EAAE,MAAkC,EAAyB,EAAE;gBACvE,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YACnD,CAAC;YACD,qBAAqB,EAAE,KAAK,EAAE,MAAkC,EAAmC,EAAE;gBACnG,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;YACrE,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,MAAkC,EAA4B,EAAE;gBAC7E,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACtD,CAAC;SACF,CAAA;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAO;YACL,GAAG,EAAE,KAAK,EAAE,MAAwB,EAAsC,EAAE;gBAC1E,kFAAkF;gBAClF,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAClD,CAAC;SACF,CAAA;IACH,CAAC;CACF"}
|