@reorderjs/reorder 1.0.8 → 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 +11106 -9689
- package/.medusa/server/src/admin/index.mjs +11099 -9682
- 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/Migration20260818120000.js +16 -0
- package/.medusa/server/src/modules/activity-log/types/index.js +2 -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/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
|
@@ -4,6 +4,8 @@ exports.requireStoreCustomer = requireStoreCustomer;
|
|
|
4
4
|
exports.listStoreCustomerSubscriptions = listStoreCustomerSubscriptions;
|
|
5
5
|
exports.retrieveOwnedSubscription = retrieveOwnedSubscription;
|
|
6
6
|
exports.retrieveOwnedSubscriptionDetail = retrieveOwnedSubscriptionDetail;
|
|
7
|
+
exports.resolveSubscriptionPaymentMethod = resolveSubscriptionPaymentMethod;
|
|
8
|
+
exports.getStoreSubscriptionPaymentMethodsResponse = getStoreSubscriptionPaymentMethodsResponse;
|
|
7
9
|
exports.getStoreSubscriptionDetailResponse = getStoreSubscriptionDetailResponse;
|
|
8
10
|
exports.getOwnedSubscriptionForAction = getOwnedSubscriptionForAction;
|
|
9
11
|
exports.getRetryableDunningCaseForSubscription = getRetryableDunningCaseForSubscription;
|
|
@@ -15,6 +17,7 @@ const types_2 = require("../../../../../modules/dunning/types");
|
|
|
15
17
|
const effective_config_1 = require("../../../../../modules/plan-offer/utils/effective-config");
|
|
16
18
|
const types_3 = require("../../../../../modules/subscription/types");
|
|
17
19
|
const effective_next_renewal_1 = require("../../../../../modules/subscription/utils/effective-next-renewal");
|
|
20
|
+
const payment_methods_1 = require("../../../../../modules/subscription/utils/payment-methods");
|
|
18
21
|
const ACTIVE_CANCELLATION_STATUSES = [
|
|
19
22
|
types_1.CancellationCaseStatus.REQUESTED,
|
|
20
23
|
types_1.CancellationCaseStatus.EVALUATING_RETENTION,
|
|
@@ -228,6 +231,70 @@ async function getLatestDunningAttempt(query, dunningCaseId) {
|
|
|
228
231
|
const latest = attempts.sort((left, right) => right.attempt_no - left.attempt_no)[0];
|
|
229
232
|
return latest ?? null;
|
|
230
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Resolves the card details of the payment method a subscription renews with.
|
|
236
|
+
*
|
|
237
|
+
* The provider lookup is best effort so that a removed payment method or an
|
|
238
|
+
* unreachable payment provider never breaks subscription detail rendering.
|
|
239
|
+
*/
|
|
240
|
+
async function resolveSubscriptionPaymentMethod(scope, input) {
|
|
241
|
+
const providerId = input.payment_context?.payment_provider_id ?? null;
|
|
242
|
+
const paymentMethodId = input.payment_context?.payment_method_reference ?? null;
|
|
243
|
+
if (!providerId || !paymentMethodId) {
|
|
244
|
+
return null;
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
const resolved = await (0, payment_methods_1.resolveCustomerPaymentMethod)(scope, {
|
|
248
|
+
customer_id: input.customer_id,
|
|
249
|
+
provider_id: providerId,
|
|
250
|
+
payment_method_id: paymentMethodId,
|
|
251
|
+
});
|
|
252
|
+
return resolved.summary;
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Lists the payment methods the authenticated customer can renew a subscription
|
|
260
|
+
* with, flagging the one the subscription currently uses.
|
|
261
|
+
*/
|
|
262
|
+
async function getStoreSubscriptionPaymentMethodsResponse(scope, input) {
|
|
263
|
+
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
264
|
+
const { data } = await query.graph({
|
|
265
|
+
entity: "subscription",
|
|
266
|
+
fields: ["id", "customer_id", "payment_context"],
|
|
267
|
+
filters: {
|
|
268
|
+
id: [input.subscription_id],
|
|
269
|
+
customer_id: input.customer_id,
|
|
270
|
+
},
|
|
271
|
+
}, {
|
|
272
|
+
throwIfKeyNotFound: true,
|
|
273
|
+
});
|
|
274
|
+
const subscription = data[0];
|
|
275
|
+
if (!subscription) {
|
|
276
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Subscription '${input.subscription_id}' was not found for the authenticated customer.`);
|
|
277
|
+
}
|
|
278
|
+
const providerId = subscription.payment_context?.payment_provider_id ?? null;
|
|
279
|
+
const currentPaymentMethodId = subscription.payment_context?.payment_method_reference ?? null;
|
|
280
|
+
if (!providerId) {
|
|
281
|
+
return {
|
|
282
|
+
payment_provider_id: null,
|
|
283
|
+
payment_methods: [],
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const paymentMethods = await (0, payment_methods_1.listCustomerPaymentMethods)(scope, {
|
|
287
|
+
customer_id: input.customer_id,
|
|
288
|
+
provider_id: providerId,
|
|
289
|
+
});
|
|
290
|
+
return {
|
|
291
|
+
payment_provider_id: providerId,
|
|
292
|
+
payment_methods: paymentMethods.map((paymentMethod) => ({
|
|
293
|
+
...paymentMethod,
|
|
294
|
+
is_current: paymentMethod.id === currentPaymentMethodId,
|
|
295
|
+
})),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
231
298
|
async function getStoreSubscriptionDetailResponse(scope, input) {
|
|
232
299
|
const query = scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
233
300
|
const { data } = await query.graph({
|
|
@@ -288,6 +355,10 @@ async function getStoreSubscriptionDetailResponse(scope, input) {
|
|
|
288
355
|
shipping_address: subscription.shipping_address ?? null,
|
|
289
356
|
payment_status: mapPaymentStatus(subscription.status, dunningCase),
|
|
290
357
|
payment_provider_id: subscription.payment_context?.payment_provider_id ?? null,
|
|
358
|
+
payment_method: await resolveSubscriptionPaymentMethod(scope, {
|
|
359
|
+
customer_id: input.customer_id,
|
|
360
|
+
payment_context: subscription.payment_context ?? null,
|
|
361
|
+
}),
|
|
291
362
|
payment_recovery: mapPaymentRecovery(dunningCase, latestDunningAttempt),
|
|
292
363
|
active_cancellation_case: activeCancellationCase,
|
|
293
364
|
scheduled_plan_change: subscription.pending_update_data
|
|
@@ -422,4 +493,4 @@ async function getStoreProductSubscriptionOfferResponse(req) {
|
|
|
422
493
|
function sendStoreJson(res, body, status = 200) {
|
|
423
494
|
return res.status(status).json(body);
|
|
424
495
|
}
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9zdWJzY3JpcHRpb25zL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUdBLG9EQWFDO0FBRUQsd0VBaUZDO0FBRUQsOERBOEJDO0FBRUQsMEVBU0M7QUF1SUQsZ0ZBZ0lDO0FBRUQsc0VBd0NDO0FBRUQsd0ZBMEJDO0FBRUQsNEZBaUZDO0FBRUQsc0NBRUM7QUFucEJELHFEQUFrRjtBQUNsRixxRUFBa0Y7QUFDbEYsZ0VBQXdFO0FBQ3hFLCtGQUEyRztBQUMzRyxxRUFHa0Q7QUFDbEQsNkdBQTRHO0FBRTVHLE1BQU0sNEJBQTRCLEdBQUc7SUFDbkMsOEJBQXNCLENBQUMsU0FBUztJQUNoQyw4QkFBc0IsQ0FBQyxvQkFBb0I7SUFDM0MsOEJBQXNCLENBQUMsaUJBQWlCO0NBQ2hDLENBQUE7QUE0RVYsU0FBUyxpQkFBaUIsQ0FBQyxLQUF1QztJQUNoRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDakUsQ0FBQztBQUVNLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsR0FBK0I7SUFFL0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUE7SUFFN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFB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
|
|
496
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9zdWJzY3JpcHRpb25zL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBK0dBLG9EQWFDO0FBRUQsd0VBaUZDO0FBRUQsOERBOEJDO0FBRUQsMEVBU0M7QUE2SUQsNEVBNkJDO0FBTUQsZ0dBdURDO0FBRUQsZ0ZBb0lDO0FBRUQsc0VBd0NDO0FBRUQsd0ZBMEJDO0FBRUQsNEZBaUZDO0FBRUQsc0NBRUM7QUEvdkJELHFEQUFrRjtBQUNsRixxRUFBa0Y7QUFDbEYsZ0VBQXdFO0FBQ3hFLCtGQUEyRztBQUMzRyxxRUFJa0Q7QUFDbEQsNkdBQTRHO0FBQzVHLCtGQUdrRTtBQUVsRSxNQUFNLDRCQUE0QixHQUFHO0lBQ25DLDhCQUFzQixDQUFDLFNBQVM7SUFDaEMsOEJBQXNCLENBQUMsb0JBQW9CO0lBQzNDLDhCQUFzQixDQUFDLGlCQUFpQjtDQUNoQyxDQUFBO0FBNkVWLFNBQVMsaUJBQWlCLENBQUMsS0FBdUM7SUFDaEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU1RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQ2pFLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLEdBQStCO0lBRS9CLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFBO0lBRTdDLElB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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PostStoreRetrySubscriptionPaymentSchema = exports.PostStoreSwapSubscriptionProductSchema = exports.PostStoreChangeSubscriptionAddressSchema = exports.PostStoreChangeSubscriptionFrequencySchema = exports.PostStoreResumeSubscriptionSchema = exports.PostStorePauseSubscriptionSchema = exports.PostStoreStartCancellationSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
3
|
+
exports.PostStoreUpdateSubscriptionPaymentMethodSchema = exports.PostStoreRetrySubscriptionPaymentSchema = exports.PostStoreSwapSubscriptionProductSchema = exports.PostStoreChangeSubscriptionAddressSchema = exports.PostStoreChangeSubscriptionFrequencySchema = exports.PostStoreResumeSubscriptionSchema = exports.PostStorePauseSubscriptionSchema = exports.PostStoreStartCancellationSchema = void 0;
|
|
4
|
+
const zod_1 = require("@medusajs/framework/zod");
|
|
5
5
|
const types_1 = require("../../../../../modules/cancellation/types");
|
|
6
6
|
const metadataSchema = zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional();
|
|
7
7
|
const optionalDateTime = zod_1.z.string().datetime().optional();
|
|
@@ -46,4 +46,8 @@ exports.PostStoreSwapSubscriptionProductSchema = zod_1.z.object({
|
|
|
46
46
|
exports.PostStoreRetrySubscriptionPaymentSchema = zod_1.z.object({
|
|
47
47
|
reason: zod_1.z.string().trim().min(1).max(500).optional(),
|
|
48
48
|
});
|
|
49
|
-
|
|
49
|
+
exports.PostStoreUpdateSubscriptionPaymentMethodSchema = zod_1.z.object({
|
|
50
|
+
payment_method_id: zod_1.z.string().trim().min(1),
|
|
51
|
+
provider_id: zod_1.z.string().trim().min(1).optional(),
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL21lL3N1YnNjcmlwdGlvbnMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMkM7QUFDM0MscUVBQXNGO0FBRXRGLE1BQU0sY0FBYyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFBO0FBQ3pELE1BQU0sbUNBQW1DLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUVoRSxRQUFBLGdDQUFnQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdkQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLGVBQWUsRUFBRSxPQUFDLENBQUMsVUFBVSxDQUFDLGtDQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFO0lBQ3BFLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLFFBQVEsRUFBRSxjQUFjO0NBQ3pCLENBQUMsQ0FBQTtBQU1XLFFBQUEsZ0NBQWdDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GetStoreProductSubscriptionOfferSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
4
|
+
const zod_1 = require("@medusajs/framework/zod");
|
|
5
5
|
exports.GetStoreProductSubscriptionOfferSchema = zod_1.z.object({
|
|
6
6
|
variant_id: zod_1.z.string().optional(),
|
|
7
7
|
});
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvcHJvZHVjdHMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpREFBMkM7QUFFOUIsUUFBQSxzQ0FBc0MsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdELFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2xDLENBQUMsQ0FBQSJ9
|
package/.medusa/server/src/modules/activity-log/__tests__/create-subscription-log-event.spec.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const test_utils_1 = require("@medusajs/test-utils");
|
|
7
|
+
const __1 = require("..");
|
|
8
|
+
const subscription_log_1 = __importDefault(require("../models/subscription-log"));
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
const normalize_log_event_1 = require("../utils/normalize-log-event");
|
|
11
|
+
const create_subscription_log_event_1 = require("../../../workflows/steps/create-subscription-log-event");
|
|
12
|
+
(0, test_utils_1.moduleIntegrationTestRunner)({
|
|
13
|
+
moduleName: __1.ACTIVITY_LOG_MODULE,
|
|
14
|
+
moduleModels: [subscription_log_1.default],
|
|
15
|
+
resolve: "./src/modules/activity-log",
|
|
16
|
+
testSuite: ({ service }) => {
|
|
17
|
+
describe("createSubscriptionLogEventStep", () => {
|
|
18
|
+
const stepContext = {
|
|
19
|
+
container: {
|
|
20
|
+
resolve(key) {
|
|
21
|
+
if (key !== __1.ACTIVITY_LOG_MODULE) {
|
|
22
|
+
throw new Error(`Unexpected module resolution: ${key}`);
|
|
23
|
+
}
|
|
24
|
+
return service;
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
it("creates a subscription log record when dedupe_key does not exist", async () => {
|
|
29
|
+
const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
|
|
30
|
+
subscription_id: "sub_001",
|
|
31
|
+
customer_id: "cus_001",
|
|
32
|
+
event_type: types_1.ActivityLogEventType.SUBSCRIPTION_PAUSED,
|
|
33
|
+
actor_type: types_1.ActivityLogActorType.USER,
|
|
34
|
+
actor_id: "user_001",
|
|
35
|
+
display: {
|
|
36
|
+
subscription_reference: "SUB-001",
|
|
37
|
+
customer_name: "Jane Doe",
|
|
38
|
+
product_title: "Coffee Club",
|
|
39
|
+
variant_title: "Monthly",
|
|
40
|
+
},
|
|
41
|
+
previous_state: {
|
|
42
|
+
status: "active",
|
|
43
|
+
},
|
|
44
|
+
new_state: {
|
|
45
|
+
status: "paused",
|
|
46
|
+
},
|
|
47
|
+
reason: "customer requested pause",
|
|
48
|
+
metadata: {
|
|
49
|
+
source: "admin",
|
|
50
|
+
},
|
|
51
|
+
dedupe: {
|
|
52
|
+
scope: "subscription",
|
|
53
|
+
target_id: "sub_001",
|
|
54
|
+
qualifier: "2026-04-01T10:00:00.000Z",
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
const result = await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
|
|
58
|
+
expect(result).toBeDefined();
|
|
59
|
+
const created = await service.listSubscriptionLogs({
|
|
60
|
+
dedupe_key: logEvent.dedupe_key,
|
|
61
|
+
});
|
|
62
|
+
expect(created).toHaveLength(1);
|
|
63
|
+
expect(created[0].subscription_id).toBe("sub_001");
|
|
64
|
+
});
|
|
65
|
+
it("does not create a duplicate record for the same dedupe_key", async () => {
|
|
66
|
+
const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
|
|
67
|
+
subscription_id: "sub_002",
|
|
68
|
+
customer_id: "cus_002",
|
|
69
|
+
event_type: types_1.ActivityLogEventType.RENEWAL_FAILED,
|
|
70
|
+
actor_type: types_1.ActivityLogActorType.SYSTEM,
|
|
71
|
+
display: {
|
|
72
|
+
subscription_reference: "SUB-002",
|
|
73
|
+
},
|
|
74
|
+
metadata: {
|
|
75
|
+
renewal_cycle_id: "renewal_002",
|
|
76
|
+
source: "workflow",
|
|
77
|
+
},
|
|
78
|
+
dedupe: {
|
|
79
|
+
scope: "renewal",
|
|
80
|
+
target_id: "renewal_002",
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
|
|
84
|
+
await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
|
|
85
|
+
const records = await service.listSubscriptionLogs({
|
|
86
|
+
dedupe_key: logEvent.dedupe_key,
|
|
87
|
+
});
|
|
88
|
+
expect(records).toHaveLength(1);
|
|
89
|
+
expect(records[0]).toMatchObject({
|
|
90
|
+
subscription_id: "sub_002",
|
|
91
|
+
event_type: types_1.ActivityLogEventType.RENEWAL_FAILED,
|
|
92
|
+
dedupe_key: logEvent.dedupe_key,
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it("deletes only records created by the current execution during compensation", async () => {
|
|
96
|
+
const createdEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
|
|
97
|
+
subscription_id: "sub_003",
|
|
98
|
+
event_type: types_1.ActivityLogEventType.CANCELLATION_FINALIZED,
|
|
99
|
+
actor_type: types_1.ActivityLogActorType.USER,
|
|
100
|
+
display: {
|
|
101
|
+
subscription_reference: "SUB-003",
|
|
102
|
+
},
|
|
103
|
+
dedupe: {
|
|
104
|
+
scope: "cancellation",
|
|
105
|
+
target_id: "case_003",
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: createdEvent }, stepContext);
|
|
109
|
+
const createdRecord = await service.listSubscriptionLogs({
|
|
110
|
+
dedupe_key: createdEvent.dedupe_key,
|
|
111
|
+
});
|
|
112
|
+
expect(createdRecord).toHaveLength(1);
|
|
113
|
+
await (0, create_subscription_log_event_1.compensateCreateSubscriptionLogEventStep)({
|
|
114
|
+
action: "created",
|
|
115
|
+
subscription_log_id: createdRecord[0].id,
|
|
116
|
+
}, stepContext);
|
|
117
|
+
const afterDelete = await service.listSubscriptionLogs({
|
|
118
|
+
dedupe_key: createdEvent.dedupe_key,
|
|
119
|
+
});
|
|
120
|
+
expect(afterDelete).toHaveLength(0);
|
|
121
|
+
});
|
|
122
|
+
it("does not delete an existing record during compensation", async () => {
|
|
123
|
+
const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
|
|
124
|
+
subscription_id: "sub_004",
|
|
125
|
+
event_type: types_1.ActivityLogEventType.DUNNING_RECOVERED,
|
|
126
|
+
actor_type: types_1.ActivityLogActorType.USER,
|
|
127
|
+
display: {
|
|
128
|
+
subscription_reference: "SUB-004",
|
|
129
|
+
},
|
|
130
|
+
dedupe: {
|
|
131
|
+
scope: "dunning",
|
|
132
|
+
target_id: "dunning_004",
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
await service.createSubscriptionLogs(logEvent);
|
|
136
|
+
await (0, create_subscription_log_event_1.compensateCreateSubscriptionLogEventStep)({
|
|
137
|
+
action: "existing",
|
|
138
|
+
}, stepContext);
|
|
139
|
+
const records = await service.listSubscriptionLogs({
|
|
140
|
+
dedupe_key: logEvent.dedupe_key,
|
|
141
|
+
});
|
|
142
|
+
expect(records).toHaveLength(1);
|
|
143
|
+
});
|
|
144
|
+
it("persists normalized payload fields without leaking sensitive data", async () => {
|
|
145
|
+
const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
|
|
146
|
+
subscription_id: "sub_005",
|
|
147
|
+
customer_id: "cus_005",
|
|
148
|
+
event_type: types_1.ActivityLogEventType.SUBSCRIPTION_SHIPPING_ADDRESS_UPDATED,
|
|
149
|
+
actor_type: types_1.ActivityLogActorType.USER,
|
|
150
|
+
actor_id: "user_005",
|
|
151
|
+
display: {
|
|
152
|
+
subscription_reference: "SUB-005",
|
|
153
|
+
customer_name: "Jane Doe",
|
|
154
|
+
},
|
|
155
|
+
previous_state: {
|
|
156
|
+
city: "Warsaw",
|
|
157
|
+
address_1: "Hidden Street 1",
|
|
158
|
+
},
|
|
159
|
+
new_state: {
|
|
160
|
+
city: "Krakow",
|
|
161
|
+
postal_code: "30-001",
|
|
162
|
+
country_code: "PL",
|
|
163
|
+
},
|
|
164
|
+
metadata: {
|
|
165
|
+
source: "admin",
|
|
166
|
+
provider_payload: {
|
|
167
|
+
unsafe: true,
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
dedupe: {
|
|
171
|
+
scope: "subscription",
|
|
172
|
+
target_id: "sub_005",
|
|
173
|
+
qualifier: "shipping-change",
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
|
|
177
|
+
const records = await service.listSubscriptionLogs({
|
|
178
|
+
dedupe_key: logEvent.dedupe_key,
|
|
179
|
+
});
|
|
180
|
+
expect(records).toHaveLength(1);
|
|
181
|
+
expect(records[0]).toMatchObject({
|
|
182
|
+
subscription_id: "sub_005",
|
|
183
|
+
customer_id: "cus_005",
|
|
184
|
+
actor_id: "user_005",
|
|
185
|
+
previous_state: {
|
|
186
|
+
city: "Warsaw",
|
|
187
|
+
},
|
|
188
|
+
new_state: {
|
|
189
|
+
city: "Krakow",
|
|
190
|
+
country_code: "PL",
|
|
191
|
+
},
|
|
192
|
+
metadata: {
|
|
193
|
+
source: "admin",
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
it("persists store checkout subscription creation events", async () => {
|
|
198
|
+
const logEvent = (0, normalize_log_event_1.normalizeActivityLogEvent)({
|
|
199
|
+
subscription_id: "sub_006",
|
|
200
|
+
customer_id: "cus_006",
|
|
201
|
+
event_type: types_1.ActivityLogEventType.SUBSCRIPTION_CREATED,
|
|
202
|
+
actor_type: types_1.ActivityLogActorType.CUSTOMER,
|
|
203
|
+
actor_id: "cus_006",
|
|
204
|
+
display: {
|
|
205
|
+
subscription_reference: "SUB-006",
|
|
206
|
+
customer_name: "Jane Doe",
|
|
207
|
+
product_title: "Coffee Club",
|
|
208
|
+
variant_title: "Monthly",
|
|
209
|
+
},
|
|
210
|
+
new_state: {
|
|
211
|
+
status: "active",
|
|
212
|
+
started_at: "2026-04-01T10:00:00.000Z",
|
|
213
|
+
next_renewal_at: "2026-05-01T10:00:00.000Z",
|
|
214
|
+
frequency_interval: "month",
|
|
215
|
+
frequency_value: 1,
|
|
216
|
+
},
|
|
217
|
+
metadata: {
|
|
218
|
+
order_id: "order_006",
|
|
219
|
+
source: "store",
|
|
220
|
+
trigger_type: "checkout",
|
|
221
|
+
},
|
|
222
|
+
dedupe: {
|
|
223
|
+
scope: "order",
|
|
224
|
+
target_id: "order_006",
|
|
225
|
+
qualifier: "sub_006",
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
await (0, create_subscription_log_event_1.createSubscriptionLogEventStepHandler)({ log_event: logEvent }, stepContext);
|
|
229
|
+
const records = await service.listSubscriptionLogs({
|
|
230
|
+
dedupe_key: logEvent.dedupe_key,
|
|
231
|
+
});
|
|
232
|
+
expect(records).toHaveLength(1);
|
|
233
|
+
expect(records[0]).toMatchObject({
|
|
234
|
+
subscription_id: "sub_006",
|
|
235
|
+
customer_id: "cus_006",
|
|
236
|
+
event_type: types_1.ActivityLogEventType.SUBSCRIPTION_CREATED,
|
|
237
|
+
actor_type: types_1.ActivityLogActorType.CUSTOMER,
|
|
238
|
+
actor_id: "cus_006",
|
|
239
|
+
metadata: {
|
|
240
|
+
order_id: "order_006",
|
|
241
|
+
source: "store",
|
|
242
|
+
trigger_type: "checkout",
|
|
243
|
+
},
|
|
244
|
+
new_state: {
|
|
245
|
+
status: "active",
|
|
246
|
+
started_at: "2026-04-01T10:00:00.000Z",
|
|
247
|
+
next_renewal_at: "2026-05-01T10:00:00.000Z",
|
|
248
|
+
frequency_interval: "month",
|
|
249
|
+
frequency_value: 1,
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
jest.setTimeout(60 * 1000);
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN1YnNjcmlwdGlvbi1sb2ctZXZlbnQuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2FjdGl2aXR5LWxvZy9fX3Rlc3RzX18vY3JlYXRlLXN1YnNjcmlwdGlvbi1sb2ctZXZlbnQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUFrRTtBQUNsRSwwQkFBd0M7QUFDeEMsa0ZBQXdEO0FBRXhELG9DQUdpQjtBQUNqQixzRUFBd0U7QUFDeEUsMEdBRytEO0FBRS9ELElBQUEsd0NBQTJCLEVBQTJCO0lBQ3BELFVBQVUsRUFBRSx1QkFBbUI7SUFDL0IsWUFBWSxFQUFFLENBQUMsMEJBQWUsQ0FBQztJQUMvQixPQUFPLEVBQUUsNEJBQTRCO0lBQ3JDLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUN6QixRQUFRLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixTQUFTLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLEdBQVc7d0JBQ2pCLElBQUksR0FBRyxLQUFLLHVCQUFtQixFQUFFLENBQUM7NEJBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsRUFBRSxDQUFDLENBQUE7d0JBQ3pELENBQUM7d0JBRUQsT0FBTyxPQUFPLENBQUE7b0JBQ2hCLENBQUM7aUJBQ0Y7YUFDRixDQUFBO1lBRUQsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNoRixNQUFNLFFBQVEsR0FBRyxJQUFBLCtDQUF5QixFQUFDO29CQUN6QyxlQUFlLEVBQUUsU0FBUztvQkFDMUIsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFVBQVUsRUFBRSw0QkFBb0IsQ0FBQyxtQkFBbUI7b0JBQ3BELFVBQVUsRUFBRSw0QkFBb0IsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUUsVUFB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
|