@reorderjs/reorder 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/e2e/auth.setup.js +26 -0
- package/.medusa/server/e2e/cancellation-retention.spec.js +133 -0
- package/.medusa/server/e2e/pages/CancellationCaseDetailPage.js +69 -0
- package/.medusa/server/e2e/pages/CancellationsListPage.js +34 -0
- package/.medusa/server/e2e/pages/PlanFormPage.js +89 -0
- package/.medusa/server/e2e/pages/RenewalDetailPage.js +101 -0
- package/.medusa/server/e2e/pages/SubscriptionDetailPage.js +102 -0
- package/.medusa/server/e2e/plans-offers.spec.js +96 -0
- package/.medusa/server/e2e/renewal-force.spec.js +154 -0
- package/.medusa/server/e2e/seed.setup.js +80 -0
- package/.medusa/server/e2e/subscription-status.spec.js +109 -0
- package/.medusa/server/e2e/subscriptions-list.spec.js +84 -0
- package/.medusa/server/playwright.config.js +37 -0
- package/.medusa/server/scripts/reset-subscriptions-test-data.js +279 -0
- package/.medusa/server/scripts/seed-subscriptions-test-data.js +2425 -0
- package/.medusa/server/scripts/wipe-test-data.js +44 -0
- package/.medusa/server/src/admin/index.js +13142 -11709
- package/.medusa/server/src/admin/index.mjs +13136 -11703
- package/.medusa/server/src/admin/types/activity-log.js +2 -1
- package/.medusa/server/src/admin/types/analytics.js +2 -1
- package/.medusa/server/src/api/admin/cancellations/validators.js +2 -2
- package/.medusa/server/src/api/admin/dunning/validators.js +2 -2
- package/.medusa/server/src/api/admin/renewals/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-analytics/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-logs/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-offers/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscription-settings/validators.js +2 -2
- package/.medusa/server/src/api/admin/subscriptions/[id]/payment-method/route.js +19 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/payment-methods/route.js +10 -0
- package/.medusa/server/src/api/admin/subscriptions/middlewares.js +8 -1
- package/.medusa/server/src/api/admin/subscriptions/utils.js +5 -1
- package/.medusa/server/src/api/admin/subscriptions/validators.js +7 -3
- package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/payment-method/route.js +26 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/payment-methods/route.js +15 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/middlewares.js +8 -1
- package/.medusa/server/src/api/store/customers/me/subscriptions/utils.js +72 -1
- package/.medusa/server/src/api/store/customers/me/subscriptions/validators.js +7 -3
- package/.medusa/server/src/api/store/products/validators.js +2 -2
- package/.medusa/server/src/modules/activity-log/__tests__/create-subscription-log-event.spec.js +257 -0
- package/.medusa/server/src/modules/activity-log/__tests__/normalize-log-event.spec.js +231 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260524220933.js +16 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260524225625.js +16 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260818120000.js +16 -0
- package/.medusa/server/src/modules/activity-log/types/index.js +4 -1
- package/.medusa/server/src/modules/activity-log/utils/admin-query.js +15 -1
- package/.medusa/server/src/modules/analytics/__tests__/admin-query.spec.js +560 -0
- package/.medusa/server/src/modules/analytics/index.js +2 -2
- package/.medusa/server/src/modules/analytics/utils/admin-query.js +157 -5
- package/.medusa/server/src/modules/plan-offer/__tests__/service.spec.js +94 -0
- package/.medusa/server/src/modules/renewal/__tests__/service.spec.js +89 -0
- package/.medusa/server/src/modules/settings/__tests__/normalize-settings.spec.js +86 -0
- package/.medusa/server/src/modules/settings/__tests__/service.spec.js +124 -0
- package/.medusa/server/src/modules/subscription/__tests__/payment-methods.spec.js +186 -0
- package/.medusa/server/src/modules/subscription/__tests__/service.spec.js +124 -0
- package/.medusa/server/src/modules/subscription/utils/admin-query.js +196 -14
- package/.medusa/server/src/modules/subscription/utils/payment-methods.js +146 -0
- package/.medusa/server/src/subscription-flows/create-subscription-from-cart.js +55 -2
- package/.medusa/server/src/workflows/__tests__/cancel-subscription.spec.js +20 -0
- package/.medusa/server/src/workflows/__tests__/pause-subscription.spec.js +20 -0
- package/.medusa/server/src/workflows/__tests__/update-subscription-shipping-address.spec.js +49 -0
- package/.medusa/server/src/workflows/cancel-subscription.js +21 -1
- package/.medusa/server/src/workflows/index.js +6 -2
- package/.medusa/server/src/workflows/pause-subscription.js +21 -1
- package/.medusa/server/src/workflows/steps/rebuild-analytics-daily-snapshots.js +33 -10
- package/.medusa/server/src/workflows/steps/update-subscription-payment-method.js +110 -0
- package/.medusa/server/src/workflows/steps/validate-subscription-cart.js +7 -22
- package/.medusa/server/src/workflows/update-subscription-payment-method.js +65 -0
- package/.medusa/server/src/workflows/utils/analytics-incremental.js +1 -1
- package/README.md +89 -36
- package/package.json +25 -23
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.listAdminSubscriptions = listAdminSubscriptions;
|
|
4
4
|
exports.getAdminSubscriptionDetail = getAdminSubscriptionDetail;
|
|
5
|
+
exports.resolveSubscriptionPaymentMethodSummary = resolveSubscriptionPaymentMethodSummary;
|
|
6
|
+
exports.getAdminSubscriptionPaymentMethods = getAdminSubscriptionPaymentMethods;
|
|
5
7
|
exports.getAdminOrderSubscriptionSummary = getAdminOrderSubscriptionSummary;
|
|
6
8
|
const utils_1 = require("@medusajs/framework/utils");
|
|
7
9
|
const subscription_1 = require("../../../admin/types/subscription");
|
|
8
10
|
const effective_next_renewal_1 = require("./effective-next-renewal");
|
|
11
|
+
const payment_methods_1 = require("./payment-methods");
|
|
9
12
|
const errors_1 = require("./errors");
|
|
10
13
|
const listFields = [
|
|
11
14
|
"id",
|
|
@@ -34,6 +37,7 @@ const detailFields = [
|
|
|
34
37
|
"started_at",
|
|
35
38
|
"cancel_effective_at",
|
|
36
39
|
"shipping_address",
|
|
40
|
+
"payment_context",
|
|
37
41
|
"pending_update_data",
|
|
38
42
|
"metadata",
|
|
39
43
|
];
|
|
@@ -94,9 +98,22 @@ function mapPendingUpdateData(pendingUpdateData) {
|
|
|
94
98
|
effective_at: pendingUpdateData.effective_at,
|
|
95
99
|
};
|
|
96
100
|
}
|
|
97
|
-
function mapListItem(record) {
|
|
98
|
-
const
|
|
99
|
-
const
|
|
101
|
+
function mapListItem(record, displayData) {
|
|
102
|
+
const fallbackCustomer = record.customer_snapshot ?? {};
|
|
103
|
+
const fallbackProduct = record.product_snapshot ?? {};
|
|
104
|
+
const customerName = displayData?.customer_name ??
|
|
105
|
+
fallbackCustomer.full_name ??
|
|
106
|
+
"Unknown customer";
|
|
107
|
+
const customerEmail = displayData?.customer_email ??
|
|
108
|
+
fallbackCustomer.email ??
|
|
109
|
+
"";
|
|
110
|
+
const productTitle = displayData?.product_title ??
|
|
111
|
+
fallbackProduct.product_title ??
|
|
112
|
+
"Unknown product";
|
|
113
|
+
const variantTitle = displayData?.variant_title ??
|
|
114
|
+
fallbackProduct.variant_title ??
|
|
115
|
+
"Unknown variant";
|
|
116
|
+
const sku = displayData?.sku ?? fallbackProduct.sku ?? null;
|
|
100
117
|
const frequency = {
|
|
101
118
|
interval: record.frequency_interval === "week"
|
|
102
119
|
? subscription_1.SubscriptionFrequencyInterval.WEEK
|
|
@@ -118,15 +135,15 @@ function mapListItem(record) {
|
|
|
118
135
|
: subscription_1.SubscriptionAdminStatus.PAST_DUE,
|
|
119
136
|
customer: {
|
|
120
137
|
id: record.customer_id,
|
|
121
|
-
full_name:
|
|
122
|
-
email:
|
|
138
|
+
full_name: customerName,
|
|
139
|
+
email: customerEmail,
|
|
123
140
|
},
|
|
124
141
|
product: {
|
|
125
142
|
product_id: record.product_id,
|
|
126
|
-
product_title:
|
|
143
|
+
product_title: productTitle,
|
|
127
144
|
variant_id: record.variant_id,
|
|
128
|
-
variant_title:
|
|
129
|
-
sku
|
|
145
|
+
variant_title: variantTitle,
|
|
146
|
+
sku,
|
|
130
147
|
},
|
|
131
148
|
frequency,
|
|
132
149
|
next_renewal_at: record.next_renewal_at,
|
|
@@ -145,9 +162,9 @@ function mapListItem(record) {
|
|
|
145
162
|
updated_at: record.updated_at,
|
|
146
163
|
};
|
|
147
164
|
}
|
|
148
|
-
function mapDetail(record) {
|
|
165
|
+
function mapDetail(record, displayData) {
|
|
149
166
|
return {
|
|
150
|
-
...mapListItem(record),
|
|
167
|
+
...mapListItem(record, displayData),
|
|
151
168
|
created_at: record.created_at,
|
|
152
169
|
started_at: record.started_at,
|
|
153
170
|
paused_at: record.paused_at,
|
|
@@ -157,6 +174,8 @@ function mapDetail(record) {
|
|
|
157
174
|
pending_update_data: mapPendingUpdateData(record.pending_update_data),
|
|
158
175
|
initial_order: null,
|
|
159
176
|
renewal_orders: [],
|
|
177
|
+
payment_provider_id: record.payment_context?.payment_provider_id ?? null,
|
|
178
|
+
payment_method: null,
|
|
160
179
|
};
|
|
161
180
|
}
|
|
162
181
|
function mapSubscriptionStatus(status) {
|
|
@@ -305,6 +324,92 @@ function matchesSearch(item, search) {
|
|
|
305
324
|
.toLowerCase()
|
|
306
325
|
.includes(value);
|
|
307
326
|
}
|
|
327
|
+
function buildCustomerDisplayName(customer) {
|
|
328
|
+
if (!customer) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
const fullName = [customer.first_name, customer.last_name]
|
|
332
|
+
.filter((part) => typeof part === "string" && part.trim().length > 0)
|
|
333
|
+
.join(" ")
|
|
334
|
+
.trim();
|
|
335
|
+
return fullName || null;
|
|
336
|
+
}
|
|
337
|
+
async function getSubscriptionDisplayDataMap(container, records) {
|
|
338
|
+
if (!records.length) {
|
|
339
|
+
return new Map();
|
|
340
|
+
}
|
|
341
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
342
|
+
const customerIds = [...new Set(records.map((record) => record.customer_id))];
|
|
343
|
+
const productIds = [...new Set(records.map((record) => record.product_id))];
|
|
344
|
+
const variantIds = [...new Set(records.map((record) => record.variant_id))];
|
|
345
|
+
const [customersResult, productsResult, variantsResult] = await Promise.all([
|
|
346
|
+
customerIds.length
|
|
347
|
+
? query.graph({
|
|
348
|
+
entity: "customer",
|
|
349
|
+
fields: ["id", "email", "first_name", "last_name"],
|
|
350
|
+
filters: {
|
|
351
|
+
id: customerIds,
|
|
352
|
+
},
|
|
353
|
+
})
|
|
354
|
+
: Promise.resolve({ data: [] }),
|
|
355
|
+
productIds.length
|
|
356
|
+
? query.graph({
|
|
357
|
+
entity: "product",
|
|
358
|
+
fields: ["id", "title"],
|
|
359
|
+
filters: {
|
|
360
|
+
id: productIds,
|
|
361
|
+
},
|
|
362
|
+
})
|
|
363
|
+
: Promise.resolve({ data: [] }),
|
|
364
|
+
variantIds.length
|
|
365
|
+
? query.graph({
|
|
366
|
+
entity: "variant",
|
|
367
|
+
fields: ["id", "title", "sku", "product.id", "product.title"],
|
|
368
|
+
filters: {
|
|
369
|
+
id: variantIds,
|
|
370
|
+
},
|
|
371
|
+
})
|
|
372
|
+
: Promise.resolve({ data: [] }),
|
|
373
|
+
]);
|
|
374
|
+
const customers = new Map((customersResult.data ?? []).map((customer) => [
|
|
375
|
+
customer.id,
|
|
376
|
+
customer,
|
|
377
|
+
]));
|
|
378
|
+
const products = new Map((productsResult.data ?? []).map((product) => [
|
|
379
|
+
product.id,
|
|
380
|
+
product,
|
|
381
|
+
]));
|
|
382
|
+
const variants = new Map((variantsResult.data ?? []).map((variant) => [
|
|
383
|
+
variant.id,
|
|
384
|
+
variant,
|
|
385
|
+
]));
|
|
386
|
+
return new Map(records.map((record) => {
|
|
387
|
+
const fallbackCustomer = record.customer_snapshot ?? {};
|
|
388
|
+
const fallbackProduct = record.product_snapshot ?? {};
|
|
389
|
+
const customer = customers.get(record.customer_id);
|
|
390
|
+
const product = products.get(record.product_id);
|
|
391
|
+
const variant = variants.get(record.variant_id);
|
|
392
|
+
return [
|
|
393
|
+
record.id,
|
|
394
|
+
{
|
|
395
|
+
customer_name: buildCustomerDisplayName(customer) ??
|
|
396
|
+
fallbackCustomer.full_name ??
|
|
397
|
+
"Unknown customer",
|
|
398
|
+
customer_email: customer?.email ??
|
|
399
|
+
fallbackCustomer.email ??
|
|
400
|
+
"",
|
|
401
|
+
product_title: product?.title ??
|
|
402
|
+
variant?.product?.title ??
|
|
403
|
+
fallbackProduct.product_title ??
|
|
404
|
+
"Unknown product",
|
|
405
|
+
variant_title: variant?.title ??
|
|
406
|
+
fallbackProduct.variant_title ??
|
|
407
|
+
"Unknown variant",
|
|
408
|
+
sku: variant?.sku ?? fallbackProduct.sku ?? null,
|
|
409
|
+
},
|
|
410
|
+
];
|
|
411
|
+
}));
|
|
412
|
+
}
|
|
308
413
|
async function listAdminSubscriptions(container, input) {
|
|
309
414
|
assertSortableField(input.order);
|
|
310
415
|
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
@@ -332,8 +437,10 @@ async function listAdminSubscriptions(container, input) {
|
|
|
332
437
|
: {}),
|
|
333
438
|
},
|
|
334
439
|
});
|
|
440
|
+
const records = data;
|
|
441
|
+
const displayDataMap = await getSubscriptionDisplayDataMap(container, records);
|
|
335
442
|
return {
|
|
336
|
-
subscriptions:
|
|
443
|
+
subscriptions: records.map((record) => mapListItem(record, displayDataMap.get(record.id))),
|
|
337
444
|
count,
|
|
338
445
|
limit: take,
|
|
339
446
|
offset: skip,
|
|
@@ -351,7 +458,9 @@ async function listAdminSubscriptions(container, input) {
|
|
|
351
458
|
}
|
|
352
459
|
: undefined,
|
|
353
460
|
});
|
|
354
|
-
|
|
461
|
+
const records = data;
|
|
462
|
+
const displayDataMap = await getSubscriptionDisplayDataMap(container, records);
|
|
463
|
+
let items = records.map((record) => mapListItem(record, displayDataMap.get(record.id)));
|
|
355
464
|
if (input.q) {
|
|
356
465
|
items = items.filter((item) => matchesSearch(item, input.q));
|
|
357
466
|
}
|
|
@@ -378,6 +487,9 @@ async function getAdminSubscriptionDetail(container, id) {
|
|
|
378
487
|
if (!subscription) {
|
|
379
488
|
throw errors_1.subscriptionErrors.notFound("Subscription", id);
|
|
380
489
|
}
|
|
490
|
+
const displayDataMap = await getSubscriptionDisplayDataMap(container, [
|
|
491
|
+
subscription,
|
|
492
|
+
]);
|
|
381
493
|
const [subscriptionOrderLinksResult, renewalCyclesResult] = await Promise.all([
|
|
382
494
|
query.graph({
|
|
383
495
|
entity: "subscription_order",
|
|
@@ -438,14 +550,84 @@ async function getAdminSubscriptionDetail(container, id) {
|
|
|
438
550
|
const right = b.created_at ? new Date(b.created_at).getTime() : 0;
|
|
439
551
|
return left - right;
|
|
440
552
|
})[0] ?? null;
|
|
553
|
+
const paymentContext = (subscription.payment_context ??
|
|
554
|
+
null);
|
|
441
555
|
return {
|
|
442
556
|
subscription: {
|
|
443
|
-
...mapDetail(subscription),
|
|
557
|
+
...mapDetail(subscription, displayDataMap.get(subscription.id)),
|
|
444
558
|
initial_order: initialOrder,
|
|
445
559
|
renewal_orders: renewalOrders,
|
|
560
|
+
payment_provider_id: paymentContext?.payment_provider_id ?? null,
|
|
561
|
+
payment_method: await resolveSubscriptionPaymentMethodSummary(container, {
|
|
562
|
+
customer_id: subscription.customer_id,
|
|
563
|
+
payment_context: paymentContext,
|
|
564
|
+
}),
|
|
446
565
|
},
|
|
447
566
|
};
|
|
448
567
|
}
|
|
568
|
+
/**
|
|
569
|
+
* Resolves the card details of the payment method a subscription renews with.
|
|
570
|
+
*
|
|
571
|
+
* Best effort: a removed payment method or an unreachable payment provider must
|
|
572
|
+
* not break the Admin subscription detail view.
|
|
573
|
+
*/
|
|
574
|
+
async function resolveSubscriptionPaymentMethodSummary(container, input) {
|
|
575
|
+
const providerId = input.payment_context?.payment_provider_id ?? null;
|
|
576
|
+
const paymentMethodId = input.payment_context?.payment_method_reference ?? null;
|
|
577
|
+
if (!providerId || !paymentMethodId) {
|
|
578
|
+
return null;
|
|
579
|
+
}
|
|
580
|
+
try {
|
|
581
|
+
const resolved = await (0, payment_methods_1.resolveCustomerPaymentMethod)(container, {
|
|
582
|
+
customer_id: input.customer_id,
|
|
583
|
+
provider_id: providerId,
|
|
584
|
+
payment_method_id: paymentMethodId,
|
|
585
|
+
});
|
|
586
|
+
return resolved.summary;
|
|
587
|
+
}
|
|
588
|
+
catch {
|
|
589
|
+
return null;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Lists the payment methods the subscription's customer can renew with, marking
|
|
594
|
+
* the one currently stored on the subscription.
|
|
595
|
+
*/
|
|
596
|
+
async function getAdminSubscriptionPaymentMethods(container, id) {
|
|
597
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
598
|
+
const { data } = await query.graph({
|
|
599
|
+
entity: "subscription",
|
|
600
|
+
fields: ["id", "customer_id", "payment_context"],
|
|
601
|
+
filters: {
|
|
602
|
+
id: [id],
|
|
603
|
+
},
|
|
604
|
+
});
|
|
605
|
+
const subscription = data[0];
|
|
606
|
+
if (!subscription) {
|
|
607
|
+
throw errors_1.subscriptionErrors.notFound("Subscription", id);
|
|
608
|
+
}
|
|
609
|
+
const paymentContext = (subscription.payment_context ??
|
|
610
|
+
null);
|
|
611
|
+
const providerId = paymentContext?.payment_provider_id ?? null;
|
|
612
|
+
const currentPaymentMethodId = paymentContext?.payment_method_reference ?? null;
|
|
613
|
+
if (!providerId) {
|
|
614
|
+
return {
|
|
615
|
+
payment_provider_id: null,
|
|
616
|
+
payment_methods: [],
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
const paymentMethods = await (0, payment_methods_1.listCustomerPaymentMethods)(container, {
|
|
620
|
+
customer_id: subscription.customer_id,
|
|
621
|
+
provider_id: providerId,
|
|
622
|
+
});
|
|
623
|
+
return {
|
|
624
|
+
payment_provider_id: providerId,
|
|
625
|
+
payment_methods: paymentMethods.map((paymentMethod) => ({
|
|
626
|
+
...paymentMethod,
|
|
627
|
+
is_current: paymentMethod.id === currentPaymentMethodId,
|
|
628
|
+
})),
|
|
629
|
+
};
|
|
630
|
+
}
|
|
449
631
|
async function getAdminOrderSubscriptionSummary(container, orderId) {
|
|
450
632
|
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
451
633
|
const { data } = await query.graph({
|
|
@@ -478,4 +660,4 @@ async function getAdminOrderSubscriptionSummary(container, orderId) {
|
|
|
478
660
|
summary: mapOrderSubscriptionSummary(link.subscription),
|
|
479
661
|
};
|
|
480
662
|
}
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zdWJzY3JpcHRpb24vdXRpbHMvYWRtaW4tcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3ZkEsd0RBMkVDO0FBRUQsZ0VBMEdDO0FBRUQsNEVBc0NDO0FBdHRCRCxxREFBcUU7QUFDckUsb0VBZTBDO0FBRTFDLHFFQUFvRTtBQUNwRSxxQ0FBNkM7QUF1RzdDLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUk7SUFDSixXQUFXO0lBQ1gsUUFBUTtJQUNSLGFBQWE7SUFDYixZQUFZO0lBQ1osWUFBWTtJQUNaLG9CQUFvQjtJQUNwQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLFlBQVk7SUFDWixZQUFZO0NBQ0osQ0FBQTtBQUVWLE1BQU0sWUFBWSxHQUFHO0lBQ25CLEdBQUcsVUFBVTtJQUNiLFlBQVk7SUFDWixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLHFCQUFxQjtJQUNyQixVQUFVO0NBQ0YsQ0FBQTtBQUVWLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsWUFBWTtJQUNaLFlBQVk7SUFDWixRQUFRO0lBQ1Isb0JBQW9CO0lBQ3BCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtDQUNsQixDQUFDLENBQUE7QUFFRixNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3JDLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGVBQWU7SUFDZixnQkFBZ0I7Q0FDakIsQ0FBQyxDQUFBO0FBRUYsU0FBUyxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLEtBQWE7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
|
|
663
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zdWJzY3JpcHRpb24vdXRpbHMvYWRtaW4tcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF1cUJBLHdEQW9GQztBQUVELGdFQXNIQztBQVFELDBGQTBCQztBQU1ELGdGQTJDQztBQUVELDRFQXNDQztBQTcrQkQscURBQXFFO0FBQ3JFLG9FQWUwQztBQU0xQyxxRUFBb0U7QUFDcEUsdURBRzBCO0FBQzFCLHFDQUE2QztBQXNJN0MsTUFBTSxVQUFVLEdBQUc7SUFDakIsSUFBSTtJQUNKLFdBQVc7SUFDWCxRQUFRO0lBQ1IsYUFBYTtJQUNiLFlBQVk7SUFDWixZQUFZO0lBQ1osb0JBQW9CO0lBQ3BCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxjQUFjO0lBQ2QsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDVixlQUFlO0lBQ2YsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLFlBQVk7Q0FDSixDQUFBO0FBRVYsTUFBTSxZQUFZLEdBQUc7SUFDbkIsR0FBRyxVQUFVO0lBQ2IsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHFCQUFxQjtJQUNyQixVQUFVO0NBQ0YsQ0FBQTtBQUVWLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsWUFBWTtJQUNaLFlBQVk7SUFDWixRQUFRO0lBQ1Isb0JBQW9CO0lBQ3BCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtDQUNsQixDQUFDLENBQUE7QUFFRixNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3JDLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGVBQWU7SUFDZixnQkFBZ0I7Q0FD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
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toPaymentMethodSummary = toPaymentMethodSummary;
|
|
4
|
+
exports.listCustomerPaymentMethods = listCustomerPaymentMethods;
|
|
5
|
+
exports.resolveCustomerPaymentMethod = resolveCustomerPaymentMethod;
|
|
6
|
+
exports.resolveLatestCustomerPaymentMethod = resolveLatestCustomerPaymentMethod;
|
|
7
|
+
exports.listCustomerAccountHolders = listCustomerAccountHolders;
|
|
8
|
+
exports.sortPaymentMethodSummaries = sortPaymentMethodSummaries;
|
|
9
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
10
|
+
const errors_1 = require("./errors");
|
|
11
|
+
/**
|
|
12
|
+
* Normalizes a payment method returned by a payment provider into a summary that
|
|
13
|
+
* is safe to expose over the Store and Admin APIs.
|
|
14
|
+
*
|
|
15
|
+
* Card details are read defensively because the shape of `data` is provider
|
|
16
|
+
* specific: providers that do not expose card metadata simply yield null fields.
|
|
17
|
+
*/
|
|
18
|
+
function toPaymentMethodSummary(method, providerId) {
|
|
19
|
+
const data = (method.data ?? {});
|
|
20
|
+
const card = (data.card ?? {});
|
|
21
|
+
return {
|
|
22
|
+
id: method.id,
|
|
23
|
+
provider_id: providerId,
|
|
24
|
+
type: readNullableString(data.type),
|
|
25
|
+
brand: readNullableString(card.brand),
|
|
26
|
+
last4: readNullableString(card.last4),
|
|
27
|
+
exp_month: readNullableNumber(card.exp_month),
|
|
28
|
+
exp_year: readNullableNumber(card.exp_year),
|
|
29
|
+
created_at: readNullableNumber(data.created),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Lists the payment methods a customer has saved with the configured payment
|
|
34
|
+
* providers, newest first.
|
|
35
|
+
*
|
|
36
|
+
* Stays provider agnostic: account holders and `listPaymentMethods` are part of
|
|
37
|
+
* the Payment Module interface, so any provider implementing them is supported.
|
|
38
|
+
*/
|
|
39
|
+
async function listCustomerPaymentMethods(container, input) {
|
|
40
|
+
const accountHolders = await listCustomerAccountHolders(container, input.customer_id, input.provider_id ?? null);
|
|
41
|
+
if (!accountHolders.length) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const paymentModule = container.resolve(utils_1.Modules.PAYMENT);
|
|
45
|
+
const summaries = [];
|
|
46
|
+
for (const accountHolder of accountHolders) {
|
|
47
|
+
const methods = (await paymentModule.listPaymentMethods({
|
|
48
|
+
provider_id: accountHolder.provider_id,
|
|
49
|
+
context: {
|
|
50
|
+
account_holder: {
|
|
51
|
+
...accountHolder,
|
|
52
|
+
data: accountHolder.data ?? {},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
}));
|
|
56
|
+
for (const method of methods ?? []) {
|
|
57
|
+
if (!method?.id) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
summaries.push(toPaymentMethodSummary(method, accountHolder.provider_id));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return sortPaymentMethodSummaries(summaries);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resolves a single saved payment method and guarantees it belongs to the given
|
|
67
|
+
* customer, so a subscription can never be pointed at another customer's card.
|
|
68
|
+
*/
|
|
69
|
+
async function resolveCustomerPaymentMethod(container, input) {
|
|
70
|
+
const accountHolders = await listCustomerAccountHolders(container, input.customer_id, input.provider_id);
|
|
71
|
+
if (!accountHolders.length) {
|
|
72
|
+
throw errors_1.subscriptionErrors.invalidData(`Customer '${input.customer_id}' has no saved payment account holder for provider '${input.provider_id}'`);
|
|
73
|
+
}
|
|
74
|
+
const paymentModule = container.resolve(utils_1.Modules.PAYMENT);
|
|
75
|
+
for (const accountHolder of accountHolders) {
|
|
76
|
+
const methods = (await paymentModule.listPaymentMethods({
|
|
77
|
+
provider_id: accountHolder.provider_id,
|
|
78
|
+
context: {
|
|
79
|
+
account_holder: {
|
|
80
|
+
...accountHolder,
|
|
81
|
+
data: accountHolder.data ?? {},
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
}));
|
|
85
|
+
const match = (methods ?? []).find((method) => method?.id === input.payment_method_id);
|
|
86
|
+
if (match) {
|
|
87
|
+
return {
|
|
88
|
+
summary: toPaymentMethodSummary(match, accountHolder.provider_id),
|
|
89
|
+
account_holder: accountHolder,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
throw errors_1.subscriptionErrors.invalidData(`Payment method '${input.payment_method_id}' is not a saved payment method of customer '${input.customer_id}' for provider '${input.provider_id}'`);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Resolves the most recently saved payment method of a customer for a provider.
|
|
97
|
+
*
|
|
98
|
+
* Used by subscription checkout when the payment session itself does not carry a
|
|
99
|
+
* reusable payment method reference.
|
|
100
|
+
*/
|
|
101
|
+
async function resolveLatestCustomerPaymentMethod(container, input) {
|
|
102
|
+
const summaries = await listCustomerPaymentMethods(container, {
|
|
103
|
+
customer_id: input.customer_id,
|
|
104
|
+
provider_id: input.provider_id,
|
|
105
|
+
});
|
|
106
|
+
return summaries[0] ?? null;
|
|
107
|
+
}
|
|
108
|
+
async function listCustomerAccountHolders(container, customerId, providerId) {
|
|
109
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
110
|
+
const { data } = await query.graph({
|
|
111
|
+
entity: "customer",
|
|
112
|
+
fields: ["id", "account_holders.*"],
|
|
113
|
+
filters: {
|
|
114
|
+
id: [customerId],
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
const customer = data[0];
|
|
118
|
+
const accountHolders = customer?.account_holders ?? [];
|
|
119
|
+
return accountHolders.filter((accountHolder) => {
|
|
120
|
+
if (!accountHolder?.id || !accountHolder.provider_id) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return providerId ? accountHolder.provider_id === providerId : true;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function sortPaymentMethodSummaries(summaries) {
|
|
127
|
+
return summaries
|
|
128
|
+
.slice()
|
|
129
|
+
.sort((left, right) => (right.created_at ?? 0) - (left.created_at ?? 0));
|
|
130
|
+
}
|
|
131
|
+
function readNullableString(value) {
|
|
132
|
+
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
133
|
+
}
|
|
134
|
+
function readNullableNumber(value) {
|
|
135
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
136
|
+
return value;
|
|
137
|
+
}
|
|
138
|
+
if (typeof value === "string") {
|
|
139
|
+
const parsed = Number.parseInt(value, 10);
|
|
140
|
+
if (Number.isFinite(parsed)) {
|
|
141
|
+
return parsed;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1tZXRob2RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvc3Vic2NyaXB0aW9uL3V0aWxzL3BheW1lbnQtbWV0aG9kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZCQSx3REFpQkM7QUFTRCxnRUF5Q0M7QUFNRCxvRUFnREM7QUFRRCxnRkFhQztBQUVELGdFQXdCQztBQUVELGdFQU1DO0FBek1ELHFEQUE4RTtBQU05RSxxQ0FBNkM7QUFZN0M7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQ3BDLE1BQXVDLEVBQ3ZDLFVBQWtCO0lBRWxCLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQTRCLENBQUE7SUFDM0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBNEIsQ0FBQTtJQUV6RCxPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQ2IsV0FBVyxFQUFFLFVBQVU7UUFDdkIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0MsUUFBUSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDM0MsVUFBVSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDN0MsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSSxLQUFLLFVBQVUsMEJBQTBCLENBQzlDLFNBQTBCLEVBQzFCLEtBR0M7SUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLDBC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
|