@reorderjs/reorder 1.0.1
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/scripts/reset-reorder-plugin-data.js +175 -0
- package/.medusa/server/src/admin/index.js +17889 -0
- package/.medusa/server/src/admin/index.mjs +17871 -0
- package/.medusa/server/src/admin/types/activity-log.js +10 -0
- package/.medusa/server/src/admin/types/analytics.js +17 -0
- package/.medusa/server/src/admin/types/cancellation.js +27 -0
- package/.medusa/server/src/admin/types/dunning.js +19 -0
- package/.medusa/server/src/admin/types/plan-offer.js +25 -0
- package/.medusa/server/src/admin/types/renewal.js +23 -0
- package/.medusa/server/src/admin/types/subscription.js +22 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/apply-offer/route.js +30 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/finalize/route.js +31 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/reason/route.js +31 -0
- package/.medusa/server/src/api/admin/cancellations/[id]/route.js +20 -0
- package/.medusa/server/src/api/admin/cancellations/middlewares.js +55 -0
- package/.medusa/server/src/api/admin/cancellations/route.js +20 -0
- package/.medusa/server/src/api/admin/cancellations/utils.js +116 -0
- package/.medusa/server/src/api/admin/cancellations/validators.js +130 -0
- package/.medusa/server/src/api/admin/dunning/[id]/mark-recovered/route.js +27 -0
- package/.medusa/server/src/api/admin/dunning/[id]/mark-unrecovered/route.js +27 -0
- package/.medusa/server/src/api/admin/dunning/[id]/retry-now/route.js +28 -0
- package/.medusa/server/src/api/admin/dunning/[id]/retry-schedule/route.js +29 -0
- package/.medusa/server/src/api/admin/dunning/[id]/route.js +20 -0
- package/.medusa/server/src/api/admin/dunning/middlewares.js +60 -0
- package/.medusa/server/src/api/admin/dunning/route.js +20 -0
- package/.medusa/server/src/api/admin/dunning/utils.js +70 -0
- package/.medusa/server/src/api/admin/dunning/validators.js +81 -0
- package/.medusa/server/src/api/admin/orders/[id]/subscription-summary/route.js +10 -0
- package/.medusa/server/src/api/admin/orders/utils.js +8 -0
- package/.medusa/server/src/api/admin/plugin/route.js +7 -0
- package/.medusa/server/src/api/admin/renewals/[id]/approve-changes/route.js +27 -0
- package/.medusa/server/src/api/admin/renewals/[id]/force/route.js +30 -0
- package/.medusa/server/src/api/admin/renewals/[id]/reject-changes/route.js +27 -0
- package/.medusa/server/src/api/admin/renewals/[id]/route.js +10 -0
- package/.medusa/server/src/api/admin/renewals/middlewares.js +61 -0
- package/.medusa/server/src/api/admin/renewals/route.js +10 -0
- package/.medusa/server/src/api/admin/renewals/utils.js +60 -0
- package/.medusa/server/src/api/admin/renewals/validators.js +62 -0
- package/.medusa/server/src/api/admin/subscription-analytics/export/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-analytics/kpis/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-analytics/middlewares.js +45 -0
- package/.medusa/server/src/api/admin/subscription-analytics/rebuild/route.js +75 -0
- package/.medusa/server/src/api/admin/subscription-analytics/trends/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-analytics/utils.js +81 -0
- package/.medusa/server/src/api/admin/subscription-analytics/validators.js +76 -0
- package/.medusa/server/src/api/admin/subscription-logs/[id]/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-logs/middlewares.js +66 -0
- package/.medusa/server/src/api/admin/subscription-logs/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-logs/utils.js +84 -0
- package/.medusa/server/src/api/admin/subscription-logs/validators.js +32 -0
- package/.medusa/server/src/api/admin/subscription-offers/[id]/route.js +22 -0
- package/.medusa/server/src/api/admin/subscription-offers/[id]/toggle/route.js +17 -0
- package/.medusa/server/src/api/admin/subscription-offers/middlewares.js +58 -0
- package/.medusa/server/src/api/admin/subscription-offers/route.js +20 -0
- package/.medusa/server/src/api/admin/subscription-offers/utils.js +41 -0
- package/.medusa/server/src/api/admin/subscription-offers/validators.js +112 -0
- package/.medusa/server/src/api/admin/subscription-settings/middlewares.js +15 -0
- package/.medusa/server/src/api/admin/subscription-settings/route.js +33 -0
- package/.medusa/server/src/api/admin/subscription-settings/utils.js +109 -0
- package/.medusa/server/src/api/admin/subscription-settings/validators.js +74 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/cancel/route.js +18 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/logs/route.js +20 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/pause/route.js +18 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/resume/route.js +18 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/route.js +10 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/schedule-plan-change/route.js +26 -0
- package/.medusa/server/src/api/admin/subscriptions/[id]/update-shipping-address/route.js +27 -0
- package/.medusa/server/src/api/admin/subscriptions/middlewares.js +79 -0
- package/.medusa/server/src/api/admin/subscriptions/route.js +10 -0
- package/.medusa/server/src/api/admin/subscriptions/utils.js +42 -0
- package/.medusa/server/src/api/admin/subscriptions/validators.js +76 -0
- package/.medusa/server/src/api/middlewares.js +32 -0
- package/.medusa/server/src/api/store/carts/[id]/subscribe/route.js +18 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/[id]/cancellation/route.js +37 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/route.js +10 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/utils.js +104 -0
- package/.medusa/server/src/api/store/customers/me/subscriptions/validators.js +13 -0
- package/.medusa/server/src/api/store/plugin/route.js +7 -0
- package/.medusa/server/src/jobs/process-analytics-daily-snapshots.js +149 -0
- package/.medusa/server/src/jobs/process-cancellation-operational-metrics.js +102 -0
- package/.medusa/server/src/jobs/process-dunning-retries.js +249 -0
- package/.medusa/server/src/jobs/process-renewal-cycles.js +180 -0
- package/.medusa/server/src/links/cancellation-subscription.js +13 -0
- package/.medusa/server/src/links/renewal-order.js +12 -0
- package/.medusa/server/src/links/renewal-subscription.js +13 -0
- package/.medusa/server/src/links/subscription-cart.js +12 -0
- package/.medusa/server/src/links/subscription-customer.js +13 -0
- package/.medusa/server/src/links/subscription-order.js +13 -0
- package/.medusa/server/src/links/subscription-product.js +13 -0
- package/.medusa/server/src/links/subscription-variant.js +13 -0
- package/.medusa/server/src/modules/activity-log/index.js +13 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260401204521.js +24 -0
- package/.medusa/server/src/modules/activity-log/migrations/Migration20260405112500.js +16 -0
- package/.medusa/server/src/modules/activity-log/models/subscription-log.js +52 -0
- package/.medusa/server/src/modules/activity-log/service.js +13 -0
- package/.medusa/server/src/modules/activity-log/types/index.js +33 -0
- package/.medusa/server/src/modules/activity-log/utils/admin-query.js +261 -0
- package/.medusa/server/src/modules/activity-log/utils/normalize-log-event.js +169 -0
- package/.medusa/server/src/modules/analytics/constants.js +8 -0
- package/.medusa/server/src/modules/analytics/index.js +13 -0
- package/.medusa/server/src/modules/analytics/migrations/Migration20260402183116.js +27 -0
- package/.medusa/server/src/modules/analytics/models/subscription-metrics-daily.js +65 -0
- package/.medusa/server/src/modules/analytics/service.js +13 -0
- package/.medusa/server/src/modules/analytics/utils/admin-query.js +632 -0
- package/.medusa/server/src/modules/analytics/utils/data-quality.js +101 -0
- package/.medusa/server/src/modules/analytics/utils/observability.js +127 -0
- package/.medusa/server/src/modules/cancellation/index.js +13 -0
- package/.medusa/server/src/modules/cancellation/migrations/Migration20260401143914.js +34 -0
- package/.medusa/server/src/modules/cancellation/migrations/Migration20260405112000.js +14 -0
- package/.medusa/server/src/modules/cancellation/models/cancellation-case.js +52 -0
- package/.medusa/server/src/modules/cancellation/models/retention-offer-event.js +47 -0
- package/.medusa/server/src/modules/cancellation/service.js +15 -0
- package/.medusa/server/src/modules/cancellation/types/index.js +43 -0
- package/.medusa/server/src/modules/cancellation/utils/admin-query.js +530 -0
- package/.medusa/server/src/modules/cancellation/utils/audit.js +21 -0
- package/.medusa/server/src/modules/cancellation/utils/errors.js +31 -0
- package/.medusa/server/src/modules/cancellation/utils/observability.js +77 -0
- package/.medusa/server/src/modules/cancellation/utils/operational-metrics.js +131 -0
- package/.medusa/server/src/modules/cancellation/utils/retention-offer-policy.js +31 -0
- package/.medusa/server/src/modules/dunning/index.js +13 -0
- package/.medusa/server/src/modules/dunning/migrations/Migration20260330190157.js +36 -0
- package/.medusa/server/src/modules/dunning/models/dunning-attempt.js +48 -0
- package/.medusa/server/src/modules/dunning/models/dunning-case.js +61 -0
- package/.medusa/server/src/modules/dunning/service.js +15 -0
- package/.medusa/server/src/modules/dunning/types/index.js +19 -0
- package/.medusa/server/src/modules/dunning/utils/admin-query.js +548 -0
- package/.medusa/server/src/modules/dunning/utils/errors.js +40 -0
- package/.medusa/server/src/modules/dunning/utils/observability.js +109 -0
- package/.medusa/server/src/modules/dunning/utils/retry-schedule.js +47 -0
- package/.medusa/server/src/modules/dunning/utils/scheduler-query.js +42 -0
- package/.medusa/server/src/modules/plan-offer/index.js +13 -0
- package/.medusa/server/src/modules/plan-offer/migrations/Migration20260329104245.js +22 -0
- package/.medusa/server/src/modules/plan-offer/migrations/Migration20260329153000.js +25 -0
- package/.medusa/server/src/modules/plan-offer/models/plan-offer.js +35 -0
- package/.medusa/server/src/modules/plan-offer/service.js +13 -0
- package/.medusa/server/src/modules/plan-offer/types/index.js +26 -0
- package/.medusa/server/src/modules/plan-offer/utils/admin-query.js +429 -0
- package/.medusa/server/src/modules/plan-offer/utils/effective-config.js +84 -0
- package/.medusa/server/src/modules/plan-offer/utils/errors.js +55 -0
- package/.medusa/server/src/modules/renewal/index.js +13 -0
- package/.medusa/server/src/modules/renewal/migrations/Migration20260329185930.js +34 -0
- package/.medusa/server/src/modules/renewal/models/renewal-attempt.js +49 -0
- package/.medusa/server/src/modules/renewal/models/renewal-cycle.js +56 -0
- package/.medusa/server/src/modules/renewal/service.js +15 -0
- package/.medusa/server/src/modules/renewal/types/index.js +23 -0
- package/.medusa/server/src/modules/renewal/utils/admin-query.js +450 -0
- package/.medusa/server/src/modules/renewal/utils/errors.js +39 -0
- package/.medusa/server/src/modules/renewal/utils/observability.js +89 -0
- package/.medusa/server/src/modules/renewal/utils/scheduler-query.js +48 -0
- package/.medusa/server/src/modules/renewal/utils/upcoming-cycle.js +54 -0
- package/.medusa/server/src/modules/settings/index.js +13 -0
- package/.medusa/server/src/modules/settings/migrations/Migration20260403121004.js +17 -0
- package/.medusa/server/src/modules/settings/migrations/Migration20260403132519.js +17 -0
- package/.medusa/server/src/modules/settings/models/subscription-settings.js +32 -0
- package/.medusa/server/src/modules/settings/service.js +82 -0
- package/.medusa/server/src/modules/settings/types.js +15 -0
- package/.medusa/server/src/modules/settings/utils/audit.js +43 -0
- package/.medusa/server/src/modules/settings/utils/normalize-settings.js +99 -0
- package/.medusa/server/src/modules/subscription/index.js +13 -0
- package/.medusa/server/src/modules/subscription/migrations/Migration20260327143452.js +24 -0
- package/.medusa/server/src/modules/subscription/migrations/Migration20260329194835.js +16 -0
- package/.medusa/server/src/modules/subscription/models/subscription.js +64 -0
- package/.medusa/server/src/modules/subscription/service.js +13 -0
- package/.medusa/server/src/modules/subscription/types/index.js +17 -0
- package/.medusa/server/src/modules/subscription/utils/admin-query.js +465 -0
- package/.medusa/server/src/modules/subscription/utils/errors.js +28 -0
- package/.medusa/server/src/subscription-flows/create-subscription-from-cart.js +178 -0
- package/.medusa/server/src/workflows/apply-retention-offer.js +52 -0
- package/.medusa/server/src/workflows/approve-renewal-changes.js +61 -0
- package/.medusa/server/src/workflows/cancel-subscription.js +64 -0
- package/.medusa/server/src/workflows/create-or-upsert-plan-offer.js +11 -0
- package/.medusa/server/src/workflows/ensure-next-renewal-cycle.js +11 -0
- package/.medusa/server/src/workflows/finalize-cancellation.js +88 -0
- package/.medusa/server/src/workflows/force-renewal-cycle.js +11 -0
- package/.medusa/server/src/workflows/index.js +79 -0
- package/.medusa/server/src/workflows/mark-dunning-recovered.js +11 -0
- package/.medusa/server/src/workflows/mark-dunning-unrecovered.js +11 -0
- package/.medusa/server/src/workflows/pause-subscription.js +61 -0
- package/.medusa/server/src/workflows/process-renewal-cycle.js +43 -0
- package/.medusa/server/src/workflows/rebuild-analytics-daily-snapshots.js +13 -0
- package/.medusa/server/src/workflows/reject-renewal-changes.js +61 -0
- package/.medusa/server/src/workflows/resume-subscription.js +76 -0
- package/.medusa/server/src/workflows/run-dunning-retry.js +23 -0
- package/.medusa/server/src/workflows/schedule-subscription-plan-change.js +57 -0
- package/.medusa/server/src/workflows/start-cancellation-case.js +58 -0
- package/.medusa/server/src/workflows/start-dunning.js +11 -0
- package/.medusa/server/src/workflows/steps/apply-retention-offer.js +200 -0
- package/.medusa/server/src/workflows/steps/approve-renewal-changes.js +48 -0
- package/.medusa/server/src/workflows/steps/cancel-subscription.js +48 -0
- package/.medusa/server/src/workflows/steps/create-initial-renewal-cycle.js +6 -0
- package/.medusa/server/src/workflows/steps/create-subscription-log-event.js +61 -0
- package/.medusa/server/src/workflows/steps/create-subscription-record.js +56 -0
- package/.medusa/server/src/workflows/steps/ensure-next-renewal-cycle.js +151 -0
- package/.medusa/server/src/workflows/steps/finalize-cancellation.js +161 -0
- package/.medusa/server/src/workflows/steps/force-renewal-cycle.js +120 -0
- package/.medusa/server/src/workflows/steps/link-subscription-commerce-entities.js +44 -0
- package/.medusa/server/src/workflows/steps/mark-dunning-recovered.js +72 -0
- package/.medusa/server/src/workflows/steps/mark-dunning-unrecovered.js +53 -0
- package/.medusa/server/src/workflows/steps/normalize-analytics-rebuild-range.js +59 -0
- package/.medusa/server/src/workflows/steps/pause-subscription.js +50 -0
- package/.medusa/server/src/workflows/steps/process-renewal-cycle.js +641 -0
- package/.medusa/server/src/workflows/steps/rebuild-analytics-daily-snapshots.js +519 -0
- package/.medusa/server/src/workflows/steps/reject-renewal-changes.js +48 -0
- package/.medusa/server/src/workflows/steps/resume-subscription.js +45 -0
- package/.medusa/server/src/workflows/steps/run-dunning-retry.js +592 -0
- package/.medusa/server/src/workflows/steps/schedule-subscription-plan-change.js +81 -0
- package/.medusa/server/src/workflows/steps/shared-cancellation-log.js +3 -0
- package/.medusa/server/src/workflows/steps/shared-plan-offer.js +280 -0
- package/.medusa/server/src/workflows/steps/shared-renewal-approval.js +34 -0
- package/.medusa/server/src/workflows/steps/start-cancellation-case.js +147 -0
- package/.medusa/server/src/workflows/steps/start-dunning.js +237 -0
- package/.medusa/server/src/workflows/steps/toggle-plan-offer.js +33 -0
- package/.medusa/server/src/workflows/steps/update-cancellation-reason.js +95 -0
- package/.medusa/server/src/workflows/steps/update-dunning-retry-schedule.js +91 -0
- package/.medusa/server/src/workflows/steps/update-plan-offer.js +51 -0
- package/.medusa/server/src/workflows/steps/update-subscription-settings.js +91 -0
- package/.medusa/server/src/workflows/steps/update-subscription-shipping-address.js +54 -0
- package/.medusa/server/src/workflows/steps/upsert-plan-offer.js +48 -0
- package/.medusa/server/src/workflows/steps/validate-subscription-cart.js +280 -0
- package/.medusa/server/src/workflows/toggle-plan-offer.js +11 -0
- package/.medusa/server/src/workflows/update-cancellation-reason.js +53 -0
- package/.medusa/server/src/workflows/update-dunning-retry-schedule.js +11 -0
- package/.medusa/server/src/workflows/update-plan-offer.js +11 -0
- package/.medusa/server/src/workflows/update-subscription-settings.js +11 -0
- package/.medusa/server/src/workflows/update-subscription-shipping-address.js +99 -0
- package/.medusa/server/src/workflows/utils/analytics-incremental.js +24 -0
- package/.medusa/server/src/workflows/utils/date-output.js +13 -0
- package/.medusa/server/src/workflows/utils/subscription-settings.js +13 -0
- package/LICENSE +21 -0
- package/README.md +200 -0
- package/package.json +73 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveProductSubscriptionConfig = void 0;
|
|
4
|
+
exports.listAdminPlanOffers = listAdminPlanOffers;
|
|
5
|
+
exports.getAdminPlanOfferDetail = getAdminPlanOfferDetail;
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const plan_offer_1 = require("../../../admin/types/plan-offer");
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
const effective_config_1 = require("./effective-config");
|
|
10
|
+
var effective_config_2 = require("./effective-config");
|
|
11
|
+
Object.defineProperty(exports, "resolveProductSubscriptionConfig", { enumerable: true, get: function () { return effective_config_2.resolveProductSubscriptionConfig; } });
|
|
12
|
+
const listFields = [
|
|
13
|
+
"id",
|
|
14
|
+
"name",
|
|
15
|
+
"scope",
|
|
16
|
+
"product_id",
|
|
17
|
+
"variant_id",
|
|
18
|
+
"is_enabled",
|
|
19
|
+
"allowed_frequencies",
|
|
20
|
+
"frequency_intervals",
|
|
21
|
+
"discount_per_frequency",
|
|
22
|
+
"rules",
|
|
23
|
+
"created_at",
|
|
24
|
+
"updated_at",
|
|
25
|
+
];
|
|
26
|
+
const detailFields = [
|
|
27
|
+
...listFields,
|
|
28
|
+
"metadata",
|
|
29
|
+
];
|
|
30
|
+
const productFields = [
|
|
31
|
+
"id",
|
|
32
|
+
"title",
|
|
33
|
+
"variants.id",
|
|
34
|
+
"variants.title",
|
|
35
|
+
"variants.sku",
|
|
36
|
+
];
|
|
37
|
+
const databaseSortableFields = new Set([
|
|
38
|
+
"name",
|
|
39
|
+
"scope",
|
|
40
|
+
"is_enabled",
|
|
41
|
+
"created_at",
|
|
42
|
+
"updated_at",
|
|
43
|
+
]);
|
|
44
|
+
const inMemorySortableFields = new Set([
|
|
45
|
+
"status",
|
|
46
|
+
"product_title",
|
|
47
|
+
"variant_title",
|
|
48
|
+
]);
|
|
49
|
+
function formatFrequencyLabel(interval, value) {
|
|
50
|
+
if (value === 1) {
|
|
51
|
+
return `Every ${interval}`;
|
|
52
|
+
}
|
|
53
|
+
return `Every ${value} ${interval}s`;
|
|
54
|
+
}
|
|
55
|
+
function mapFrequencyOption(frequency) {
|
|
56
|
+
return {
|
|
57
|
+
interval: frequency.interval === "week"
|
|
58
|
+
? plan_offer_1.PlanOfferFrequencyInterval.WEEK
|
|
59
|
+
: frequency.interval === "month"
|
|
60
|
+
? plan_offer_1.PlanOfferFrequencyInterval.MONTH
|
|
61
|
+
: plan_offer_1.PlanOfferFrequencyInterval.YEAR,
|
|
62
|
+
value: frequency.value,
|
|
63
|
+
label: formatFrequencyLabel(frequency.interval, frequency.value),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function mapDiscountValue(discount) {
|
|
67
|
+
const label = discount.discount_type === "percentage"
|
|
68
|
+
? `${discount.discount_value}% off`
|
|
69
|
+
: `${discount.discount_value} off`;
|
|
70
|
+
return {
|
|
71
|
+
interval: discount.interval === "week"
|
|
72
|
+
? plan_offer_1.PlanOfferFrequencyInterval.WEEK
|
|
73
|
+
: discount.interval === "month"
|
|
74
|
+
? plan_offer_1.PlanOfferFrequencyInterval.MONTH
|
|
75
|
+
: plan_offer_1.PlanOfferFrequencyInterval.YEAR,
|
|
76
|
+
frequency_value: discount.value,
|
|
77
|
+
type: discount.discount_type === "percentage"
|
|
78
|
+
? plan_offer_1.PlanOfferDiscountType.PERCENTAGE
|
|
79
|
+
: plan_offer_1.PlanOfferDiscountType.FIXED,
|
|
80
|
+
value: discount.discount_value,
|
|
81
|
+
label,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function mapRules(rules) {
|
|
85
|
+
if (!rules) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
minimum_cycles: rules.minimum_cycles,
|
|
90
|
+
trial_enabled: rules.trial_enabled,
|
|
91
|
+
trial_days: rules.trial_days,
|
|
92
|
+
stacking_policy: rules.stacking_policy,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function getRulesSummary(rules) {
|
|
96
|
+
if (!rules) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const parts = [];
|
|
100
|
+
if (rules.minimum_cycles) {
|
|
101
|
+
parts.push(`Min ${rules.minimum_cycles} cycles`);
|
|
102
|
+
}
|
|
103
|
+
if (rules.trial_enabled && rules.trial_days) {
|
|
104
|
+
parts.push(`${rules.trial_days}-day trial`);
|
|
105
|
+
}
|
|
106
|
+
switch (rules.stacking_policy) {
|
|
107
|
+
case "allowed":
|
|
108
|
+
parts.push("Stacking allowed");
|
|
109
|
+
break;
|
|
110
|
+
case "disallow_all":
|
|
111
|
+
parts.push("No stacking");
|
|
112
|
+
break;
|
|
113
|
+
case "disallow_subscription_discounts":
|
|
114
|
+
parts.push("No subscription discount stacking");
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
return parts.length ? parts.join(" · ") : null;
|
|
118
|
+
}
|
|
119
|
+
function assertSortableField(order) {
|
|
120
|
+
if (!order) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!databaseSortableFields.has(order) &&
|
|
124
|
+
!inMemorySortableFields.has(order)) {
|
|
125
|
+
throw errors_1.planOfferErrors.invalidData(`Unsupported sort field '${order}'`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function buildFilters(input) {
|
|
129
|
+
const filters = {};
|
|
130
|
+
if (typeof input.is_enabled === "boolean") {
|
|
131
|
+
filters.is_enabled = input.is_enabled;
|
|
132
|
+
}
|
|
133
|
+
if (input.scope) {
|
|
134
|
+
filters.scope = input.scope;
|
|
135
|
+
}
|
|
136
|
+
if (input.product_id) {
|
|
137
|
+
filters.product_id = input.product_id;
|
|
138
|
+
}
|
|
139
|
+
if (input.variant_id) {
|
|
140
|
+
filters.variant_id = input.variant_id;
|
|
141
|
+
}
|
|
142
|
+
return filters;
|
|
143
|
+
}
|
|
144
|
+
async function getDisplayDataMap(container, records) {
|
|
145
|
+
const productIds = [...new Set(records.map((record) => record.product_id))];
|
|
146
|
+
if (!productIds.length) {
|
|
147
|
+
return new Map();
|
|
148
|
+
}
|
|
149
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
150
|
+
const { data } = await query.graph({
|
|
151
|
+
entity: "product",
|
|
152
|
+
fields: [...productFields],
|
|
153
|
+
filters: {
|
|
154
|
+
id: productIds,
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
const products = data;
|
|
158
|
+
const productMap = new Map(products.map((product) => [product.id, product]));
|
|
159
|
+
const displayMap = new Map();
|
|
160
|
+
for (const record of records) {
|
|
161
|
+
const product = productMap.get(record.product_id);
|
|
162
|
+
const variant = product?.variants?.find((item) => item.id === record.variant_id);
|
|
163
|
+
displayMap.set(record.id, {
|
|
164
|
+
product_title: product?.title ?? "Unknown product",
|
|
165
|
+
variant_title: record.scope === "product"
|
|
166
|
+
? "All variants"
|
|
167
|
+
: variant?.title ?? "Unknown variant",
|
|
168
|
+
sku: record.scope === "variant" ? variant?.sku ?? null : null,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
return displayMap;
|
|
172
|
+
}
|
|
173
|
+
async function getActiveProductSourceMap(container, records) {
|
|
174
|
+
const productIds = [...new Set(records.map((record) => record.product_id))];
|
|
175
|
+
if (!productIds.length) {
|
|
176
|
+
return new Map();
|
|
177
|
+
}
|
|
178
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
179
|
+
const { data } = await query.graph({
|
|
180
|
+
entity: "plan_offer",
|
|
181
|
+
fields: [...listFields],
|
|
182
|
+
filters: {
|
|
183
|
+
scope: "product",
|
|
184
|
+
product_id: productIds,
|
|
185
|
+
is_enabled: true,
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
const productRecords = data;
|
|
189
|
+
return new Map(productRecords.map((record) => [record.product_id, record]));
|
|
190
|
+
}
|
|
191
|
+
function mapEffectiveConfigSummary(config) {
|
|
192
|
+
return {
|
|
193
|
+
source_scope: config.source_scope,
|
|
194
|
+
source_offer_id: config.source_offer_id,
|
|
195
|
+
allowed_frequencies: config.allowed_frequencies.map(mapFrequencyOption),
|
|
196
|
+
discounts: config.discount_per_frequency.map(mapDiscountValue),
|
|
197
|
+
rules: mapRules(config.rules),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
async function mapListItem(record, displayData, effectiveConfig) {
|
|
201
|
+
return {
|
|
202
|
+
id: record.id,
|
|
203
|
+
name: record.name,
|
|
204
|
+
status: record.is_enabled
|
|
205
|
+
? plan_offer_1.PlanOfferAdminStatus.ENABLED
|
|
206
|
+
: plan_offer_1.PlanOfferAdminStatus.DISABLED,
|
|
207
|
+
is_enabled: record.is_enabled,
|
|
208
|
+
target: {
|
|
209
|
+
scope: record.scope === "product"
|
|
210
|
+
? plan_offer_1.PlanOfferScope.PRODUCT
|
|
211
|
+
: plan_offer_1.PlanOfferScope.VARIANT,
|
|
212
|
+
product_id: record.product_id,
|
|
213
|
+
product_title: displayData.product_title,
|
|
214
|
+
variant_id: record.variant_id,
|
|
215
|
+
variant_title: displayData.variant_title,
|
|
216
|
+
sku: displayData.sku,
|
|
217
|
+
},
|
|
218
|
+
allowed_frequencies: (record.allowed_frequencies ?? []).map(mapFrequencyOption),
|
|
219
|
+
discounts: (record.discount_per_frequency ?? []).map(mapDiscountValue),
|
|
220
|
+
rules_summary: getRulesSummary(record.rules),
|
|
221
|
+
effective_config_summary: mapEffectiveConfigSummary(effectiveConfig),
|
|
222
|
+
updated_at: record.updated_at,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
async function mapListItems(container, records) {
|
|
226
|
+
const displayMap = await getDisplayDataMap(container, records);
|
|
227
|
+
const activeProductSourceMap = await getActiveProductSourceMap(container, records);
|
|
228
|
+
return await Promise.all(records.map((record) => {
|
|
229
|
+
const displayData = displayMap.get(record.id) ?? {
|
|
230
|
+
product_title: "Unknown product",
|
|
231
|
+
variant_title: record.scope === "product" ? "All variants" : "Unknown variant",
|
|
232
|
+
sku: null,
|
|
233
|
+
};
|
|
234
|
+
const effectiveConfig = record.scope === "product"
|
|
235
|
+
? record.is_enabled
|
|
236
|
+
? (0, effective_config_1.mapRecordToEffectiveConfig)(record)
|
|
237
|
+
: (0, effective_config_1.getInactiveEffectiveConfig)({
|
|
238
|
+
product_id: record.product_id,
|
|
239
|
+
})
|
|
240
|
+
: record.is_enabled
|
|
241
|
+
? (0, effective_config_1.mapRecordToEffectiveConfig)(record)
|
|
242
|
+
: activeProductSourceMap.has(record.product_id)
|
|
243
|
+
? {
|
|
244
|
+
...(0, effective_config_1.mapRecordToEffectiveConfig)(activeProductSourceMap.get(record.product_id)),
|
|
245
|
+
variant_id: record.variant_id,
|
|
246
|
+
}
|
|
247
|
+
: (0, effective_config_1.getInactiveEffectiveConfig)({
|
|
248
|
+
product_id: record.product_id,
|
|
249
|
+
variant_id: record.variant_id,
|
|
250
|
+
});
|
|
251
|
+
return mapListItem(record, displayData, effectiveConfig);
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
function matchesSearch(item, search) {
|
|
255
|
+
const value = search.trim().toLowerCase();
|
|
256
|
+
if (!value.length) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
return [
|
|
260
|
+
item.name,
|
|
261
|
+
item.target.product_title,
|
|
262
|
+
item.target.variant_title ?? "",
|
|
263
|
+
item.target.sku ?? "",
|
|
264
|
+
]
|
|
265
|
+
.join(" ")
|
|
266
|
+
.toLowerCase()
|
|
267
|
+
.includes(value);
|
|
268
|
+
}
|
|
269
|
+
function matchesFrequency(item, frequency) {
|
|
270
|
+
if (!frequency) {
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
return item.allowed_frequencies.some((item) => item.interval === frequency);
|
|
274
|
+
}
|
|
275
|
+
function matchesDiscountRange(item, discountMin, discountMax) {
|
|
276
|
+
if (typeof discountMin !== "number" && typeof discountMax !== "number") {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
if (!item.discounts.length) {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
return item.discounts.some((discount) => {
|
|
283
|
+
if (typeof discountMin === "number" && discount.value < discountMin) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
if (typeof discountMax === "number" && discount.value > discountMax) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
return true;
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
function getSortableValue(item, order) {
|
|
293
|
+
switch (order) {
|
|
294
|
+
case "name":
|
|
295
|
+
return item.name ?? "";
|
|
296
|
+
case "scope":
|
|
297
|
+
return item.target.scope ?? "";
|
|
298
|
+
case "status":
|
|
299
|
+
return item.status ?? "";
|
|
300
|
+
case "product_title":
|
|
301
|
+
return item.target.product_title ?? "";
|
|
302
|
+
case "variant_title":
|
|
303
|
+
return item.target.variant_title ?? "";
|
|
304
|
+
case "created_at":
|
|
305
|
+
return "";
|
|
306
|
+
case "updated_at":
|
|
307
|
+
return item.updated_at ?? "";
|
|
308
|
+
default:
|
|
309
|
+
return "";
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
function sortItems(items, order, direction) {
|
|
313
|
+
const multiplier = direction === "asc" ? 1 : -1;
|
|
314
|
+
return [...items].sort((left, right) => {
|
|
315
|
+
const leftValue = getSortableValue(left, order);
|
|
316
|
+
const rightValue = getSortableValue(right, order);
|
|
317
|
+
if (leftValue < rightValue) {
|
|
318
|
+
return -1 * multiplier;
|
|
319
|
+
}
|
|
320
|
+
if (leftValue > rightValue) {
|
|
321
|
+
return 1 * multiplier;
|
|
322
|
+
}
|
|
323
|
+
return 0;
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
async function listAdminPlanOffers(container, input) {
|
|
327
|
+
assertSortableField(input.order);
|
|
328
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
329
|
+
const filters = buildFilters(input);
|
|
330
|
+
const limit = input.limit ?? 20;
|
|
331
|
+
const offset = input.offset ?? 0;
|
|
332
|
+
const direction = input.direction ?? "desc";
|
|
333
|
+
const order = input.order;
|
|
334
|
+
const isInMemorySort = typeof order === "string" && inMemorySortableFields.has(order);
|
|
335
|
+
const requiresInMemoryProcessing = Boolean(input.q) ||
|
|
336
|
+
Boolean(input.frequency) ||
|
|
337
|
+
typeof input.discount_min === "number" ||
|
|
338
|
+
typeof input.discount_max === "number" ||
|
|
339
|
+
isInMemorySort;
|
|
340
|
+
if (!requiresInMemoryProcessing) {
|
|
341
|
+
const { data, metadata: { count = 0, take = limit, skip = offset } = {}, } = await query.graph({
|
|
342
|
+
entity: "plan_offer",
|
|
343
|
+
fields: [...listFields],
|
|
344
|
+
filters,
|
|
345
|
+
pagination: {
|
|
346
|
+
take: limit,
|
|
347
|
+
skip: offset,
|
|
348
|
+
...(order && databaseSortableFields.has(order)
|
|
349
|
+
? {
|
|
350
|
+
order: {
|
|
351
|
+
[order]: direction.toUpperCase(),
|
|
352
|
+
},
|
|
353
|
+
}
|
|
354
|
+
: {}),
|
|
355
|
+
},
|
|
356
|
+
});
|
|
357
|
+
return {
|
|
358
|
+
plan_offers: await mapListItems(container, data),
|
|
359
|
+
count,
|
|
360
|
+
limit: take,
|
|
361
|
+
offset: skip,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
const { data } = await query.graph({
|
|
365
|
+
entity: "plan_offer",
|
|
366
|
+
fields: [...listFields],
|
|
367
|
+
filters,
|
|
368
|
+
pagination: order && databaseSortableFields.has(order)
|
|
369
|
+
? {
|
|
370
|
+
order: {
|
|
371
|
+
[order]: direction.toUpperCase(),
|
|
372
|
+
},
|
|
373
|
+
}
|
|
374
|
+
: undefined,
|
|
375
|
+
});
|
|
376
|
+
let items = await mapListItems(container, data);
|
|
377
|
+
if (input.q) {
|
|
378
|
+
items = items.filter((item) => matchesSearch(item, input.q));
|
|
379
|
+
}
|
|
380
|
+
if (input.frequency) {
|
|
381
|
+
items = items.filter((item) => matchesFrequency(item, input.frequency));
|
|
382
|
+
}
|
|
383
|
+
if (typeof input.discount_min === "number" ||
|
|
384
|
+
typeof input.discount_max === "number") {
|
|
385
|
+
items = items.filter((item) => matchesDiscountRange(item, input.discount_min, input.discount_max));
|
|
386
|
+
}
|
|
387
|
+
if (order && isInMemorySort) {
|
|
388
|
+
items = sortItems(items, order, direction);
|
|
389
|
+
}
|
|
390
|
+
return {
|
|
391
|
+
plan_offers: items.slice(offset, offset + limit),
|
|
392
|
+
count: items.length,
|
|
393
|
+
limit,
|
|
394
|
+
offset,
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
async function getAdminPlanOfferDetail(container, id) {
|
|
398
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
399
|
+
const { data } = await query.graph({
|
|
400
|
+
entity: "plan_offer",
|
|
401
|
+
fields: [...detailFields],
|
|
402
|
+
filters: {
|
|
403
|
+
id: [id],
|
|
404
|
+
},
|
|
405
|
+
});
|
|
406
|
+
const record = data[0];
|
|
407
|
+
if (!record) {
|
|
408
|
+
throw errors_1.planOfferErrors.notFound("PlanOffer", id);
|
|
409
|
+
}
|
|
410
|
+
const displayMap = await getDisplayDataMap(container, [record]);
|
|
411
|
+
const listItem = await mapListItem(record, displayMap.get(record.id) ?? {
|
|
412
|
+
product_title: "Unknown product",
|
|
413
|
+
variant_title: record.scope === "product" ? "All variants" : "Unknown variant",
|
|
414
|
+
sku: null,
|
|
415
|
+
}, await (0, effective_config_1.resolveProductSubscriptionConfig)(container, {
|
|
416
|
+
product_id: record.product_id,
|
|
417
|
+
variant_id: record.scope === "variant" ? record.variant_id : undefined,
|
|
418
|
+
}));
|
|
419
|
+
const detail = {
|
|
420
|
+
...listItem,
|
|
421
|
+
created_at: record.created_at,
|
|
422
|
+
metadata: record.metadata ?? null,
|
|
423
|
+
rules: mapRules(record.rules),
|
|
424
|
+
};
|
|
425
|
+
return {
|
|
426
|
+
plan_offer: detail,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wbGFuLW9mZmVyL3V0aWxzL2FkbWluLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNmQSxrREE0RkM7QUFFRCwwREE2Q0M7QUFob0JELHFEQUFxRTtBQUNyRSxnRUFhd0M7QUFPeEMscUNBQTBDO0FBQzFDLHlEQUkyQjtBQUUzQix1REFBcUU7QUFBNUQsb0lBQUEsZ0NBQWdDLE9BQUE7QUFpRHpDLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUk7SUFDSixNQUFNO0lBQ04sT0FBTztJQUNQLFlBQVk7SUFDWixZQUFZO0lBQ1osWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCxZQUFZO0lBQ1osWUFBWTtDQUNKLENBQUE7QUFFVixNQUFNLFlBQVksR0FBRztJQUNuQixHQUFHLFVBQVU7SUFDYixVQUFVO0NBQ0YsQ0FBQTtBQUVWLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLElBQUk7SUFDSixPQUFPO0lBQ1AsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQixjQUFjO0NBQ04sQ0FBQTtBQUVWLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDckMsTUFBTTtJQUNOLE9BQU87SUFDUCxZQUFZO0lBQ1osWUFBWTtJQUNaLFlBQVk7Q0FDYixDQUFDLENBQUE7QUFFRixNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3JDLFFBQVE7SUFDUixlQUFlO0lBQ2YsZUFBZTtDQUNoQixDQUFDLENBQUE7QUFFRixTQUFTLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsS0FBYTtJQUMzRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQixPQUFPLFNBQVMsUUFBUSxFQUFFLENBQUE7SUFDNUIsQ0FBQztJQUVELE9BQU8sU0FBUyxLQUFLLElBQUks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
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapRecordToEffectiveConfig = mapRecordToEffectiveConfig;
|
|
4
|
+
exports.getInactiveEffectiveConfig = getInactiveEffectiveConfig;
|
|
5
|
+
exports.resolveProductSubscriptionConfig = resolveProductSubscriptionConfig;
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const types_1 = require("../types");
|
|
8
|
+
const effectiveConfigFields = [
|
|
9
|
+
"id",
|
|
10
|
+
"scope",
|
|
11
|
+
"product_id",
|
|
12
|
+
"variant_id",
|
|
13
|
+
"allowed_frequencies",
|
|
14
|
+
"discount_per_frequency",
|
|
15
|
+
"rules",
|
|
16
|
+
];
|
|
17
|
+
function mapRecordToEffectiveConfig(record) {
|
|
18
|
+
return {
|
|
19
|
+
product_id: record.product_id,
|
|
20
|
+
variant_id: record.variant_id,
|
|
21
|
+
source_offer_id: record.id,
|
|
22
|
+
source_scope: record.scope === "product"
|
|
23
|
+
? types_1.PlanOfferScope.PRODUCT
|
|
24
|
+
: types_1.PlanOfferScope.VARIANT,
|
|
25
|
+
is_enabled: true,
|
|
26
|
+
allowed_frequencies: record.allowed_frequencies ?? [],
|
|
27
|
+
discount_per_frequency: record.discount_per_frequency ?? [],
|
|
28
|
+
rules: record.rules,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function getInactiveEffectiveConfig(input) {
|
|
32
|
+
return {
|
|
33
|
+
product_id: input.product_id,
|
|
34
|
+
variant_id: input.variant_id ?? null,
|
|
35
|
+
source_offer_id: null,
|
|
36
|
+
source_scope: null,
|
|
37
|
+
is_enabled: false,
|
|
38
|
+
allowed_frequencies: [],
|
|
39
|
+
discount_per_frequency: [],
|
|
40
|
+
rules: null,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async function resolveProductSubscriptionConfig(container, input) {
|
|
44
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
45
|
+
if (input.variant_id) {
|
|
46
|
+
const { data: variantData } = await query.graph({
|
|
47
|
+
entity: "plan_offer",
|
|
48
|
+
fields: [...effectiveConfigFields],
|
|
49
|
+
filters: {
|
|
50
|
+
scope: "variant",
|
|
51
|
+
variant_id: input.variant_id,
|
|
52
|
+
is_enabled: true,
|
|
53
|
+
},
|
|
54
|
+
pagination: {
|
|
55
|
+
take: 1,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
const variantRecord = variantData[0];
|
|
59
|
+
if (variantRecord) {
|
|
60
|
+
return mapRecordToEffectiveConfig(variantRecord);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const { data: productData } = await query.graph({
|
|
64
|
+
entity: "plan_offer",
|
|
65
|
+
fields: [...effectiveConfigFields],
|
|
66
|
+
filters: {
|
|
67
|
+
scope: "product",
|
|
68
|
+
product_id: input.product_id,
|
|
69
|
+
is_enabled: true,
|
|
70
|
+
},
|
|
71
|
+
pagination: {
|
|
72
|
+
take: 1,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
const productRecord = productData[0];
|
|
76
|
+
if (productRecord) {
|
|
77
|
+
return {
|
|
78
|
+
...mapRecordToEffectiveConfig(productRecord),
|
|
79
|
+
variant_id: input.variant_id ?? null,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return getInactiveEffectiveConfig(input);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0aXZlLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3BsYW4tb2ZmZXIvdXRpbHMvZWZmZWN0aXZlLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQThCQSxnRUFnQkM7QUFFRCxnRUFjQztBQUVELDRFQXFEQztBQXBIRCxxREFBcUU7QUFPckUsb0NBQXlDO0FBWXpDLE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsSUFBSTtJQUNKLE9BQU87SUFDUCxZQUFZO0lBQ1osWUFBWTtJQUNaLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsT0FBTztDQUNDLENBQUE7QUFFVixTQUFnQiwwQkFBMEIsQ0FDeEMsTUFBdUI7SUFFdkIsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1FBQzFCLFlBQVksRUFDVixNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDeEIsQ0FBQyxDQUFDLHNCQUFjLENBQUMsT0FBTztZQUN4QixDQUFDLENBQUMsc0JBQWMsQ0FBQyxPQUFPO1FBQzVCLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxFQUFFO1FBQ3JELHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0IsSUFBSSxFQUFFO1FBQzNELEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztLQUNwQixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLEtBRzFDO0lBQ0MsT0FBTztRQUNMLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJO1FBQ3BDLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsc0JBQXNCLEVBQUUsRUFBRTtRQUMxQixLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUE7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLGdDQUFnQyxDQUNwRCxTQUEwQixFQUMxQixLQUdDO0lBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQixNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM5QyxNQUFNLEVBQUUsWUFBWTtZQUNwQixNQUFNLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1lBQ2xDLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsU0FBUztnQkFDaEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUM1QixVQUFVLEVBQUUsSUFBSTthQUNqQjtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsQ0FBQzthQUNSO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsTUFBTSxhQUFhLEdBQUksV0FBaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUUzRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sMEJBQTBCLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUM5QyxNQUFNLEVBQUUsWUFBWTtRQUNwQixNQUFNLEVBQUUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1FBQ2xDLE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixVQUFVLEVBQUUsSUFBSTtTQUNqQjtRQUNELFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxDQUFDO1NBQ1I7S0FDRixDQUFDLENBQUE7SUFFRixNQUFNLGFBQWEsR0FBSSxXQUFpQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTNELElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsT0FBTztZQUNMLEdBQUcsMEJBQTBCLENBQUMsYUFBYSxDQUFDO1lBQzVDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUk7U0FDckMsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzFDLENBQUMifQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.planOfferErrors = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.planOfferErrors = {
|
|
6
|
+
notFound(entity, id) {
|
|
7
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `${entity} '${id}' was not found`);
|
|
8
|
+
},
|
|
9
|
+
invalidData(message) {
|
|
10
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
|
|
11
|
+
},
|
|
12
|
+
conflict(message) {
|
|
13
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, message);
|
|
14
|
+
},
|
|
15
|
+
invalidScopeTarget(scope) {
|
|
16
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Invalid target configuration for '${scope}' scope`);
|
|
17
|
+
},
|
|
18
|
+
variantScopeRequiresVariantId() {
|
|
19
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Variant-scoped offers require 'variant_id'");
|
|
20
|
+
},
|
|
21
|
+
productScopeDisallowsVariantId() {
|
|
22
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Product-scoped offers can't specify 'variant_id'");
|
|
23
|
+
},
|
|
24
|
+
productNotFound(productId) {
|
|
25
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Product '${productId}' was not found`);
|
|
26
|
+
},
|
|
27
|
+
variantDoesNotBelongToProduct(variantId, productId) {
|
|
28
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Variant '${variantId}' does not belong to product '${productId}'`);
|
|
29
|
+
},
|
|
30
|
+
allowedFrequenciesRequired() {
|
|
31
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "'allowed_frequencies' must contain at least one frequency");
|
|
32
|
+
},
|
|
33
|
+
duplicateFrequency(interval, value) {
|
|
34
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Duplicate frequency '${interval}:${value}' is not allowed`);
|
|
35
|
+
},
|
|
36
|
+
invalidFrequencyMix(message) {
|
|
37
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
|
|
38
|
+
},
|
|
39
|
+
discountFrequencyNotAllowed(interval, value) {
|
|
40
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Discount frequency '${interval}:${value}' is not allowed`);
|
|
41
|
+
},
|
|
42
|
+
duplicateDiscountForFrequency(interval, value) {
|
|
43
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Duplicate discount for frequency '${interval}:${value}' is not allowed`);
|
|
44
|
+
},
|
|
45
|
+
discountOutOfRange(message) {
|
|
46
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
|
|
47
|
+
},
|
|
48
|
+
invalidTrialConfiguration(message) {
|
|
49
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, message);
|
|
50
|
+
},
|
|
51
|
+
conflictingOverrideConfiguration(message) {
|
|
52
|
+
return new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, message);
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcGxhbi1vZmZlci91dGlscy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBRzFDLFFBQUEsZUFBZSxHQUFHO0lBQzdCLFFBQVEsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUNqQyxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixHQUFHLE1BQU0sS0FBSyxFQUFFLGlCQUFpQixDQUNsQyxDQUFBO0lBQ0gsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLE9BQU8sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBQ0QsUUFBUSxDQUFDLE9BQWU7UUFDdEIsT0FBTyxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxLQUE2QztRQUM5RCxPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQ0FBcUMsS0FBSyxTQUFTLENBQ3BELENBQUE7SUFDSCxDQUFDO0lBQ0QsNkJBQTZCO1FBQzNCLE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDRDQUE0QyxDQUM3QyxDQUFBO0lBQ0gsQ0FBQztJQUNELDhCQUE4QjtRQUM1QixPQUFPLElBQUksbUJBQVcsQ0FDcEIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixrREFBa0QsQ0FDbkQsQ0FBQTtJQUNILENBQUM7SUFDRCxlQUFlLENBQUMsU0FBaUI7UUFDL0IsT0FBTyxJQUFJLG1CQUFXLENBQ3BCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsWUFBWSxTQUFTLGlCQUFpQixDQUN2QyxDQUFBO0lBQ0gsQ0FBQztJQUNELDZCQUE2QixDQUFDLFNBQWlCLEVBQUUsU0FBaUI7UUFDaEUsT0FBTyxJQUFJLG1CQUFXLENBQ3BCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsWUFBWSxTQUFTLGlDQUFpQyxTQUFTLEdBQUcsQ0FDbkUsQ0FBQTtJQUNILENBQUM7SUFDRCwwQkFBMEI7UUFDeEIsT0FBTyxJQUFJLG1CQUFXLENBQ3BCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMkRBQTJELENBQzVELENBQUE7SUFDSCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxLQUFhO1FBQ2hELE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHdCQUF3QixRQUFRLElBQUksS0FBSyxrQkFBa0IsQ0FDNUQsQ0FBQTtJQUNILENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxPQUFlO1FBQ2pDLE9BQU8sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBQ0QsMkJBQTJCLENBQUMsUUFBZ0IsRUFBRSxLQUFhO1FBQ3pELE9BQU8sSUFBSSxtQkFBVyxDQUNwQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHVCQUF1QixRQUFRLElBQUksS0FBSyxrQkFBa0IsQ0FDM0QsQ0FBQTtJQUNILENBQUM7SUFDRCw2QkFBNkIsQ0FBQyxRQUFnQixFQUFFLEtBQWE7UUFDM0QsT0FBTyxJQUFJLG1CQUFXLENBQ3BCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUNBQXFDLFFBQVEsSUFBSSxLQUFLLGtCQUFrQixDQUN6RSxDQUFBO0lBQ0gsQ0FBQztJQUNELGtCQUFrQixDQUFDLE9BQWU7UUFDaEMsT0FBTyxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFDRCx5QkFBeUIsQ0FBQyxPQUFlO1FBQ3ZDLE9BQU8sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBQ0QsZ0NBQWdDLENBQUMsT0FBZTtRQUM5QyxPQUFPLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDN0QsQ0FBQztDQUNGLENBQUEifQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
exports.RENEWAL_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.RENEWAL_MODULE = "renewal";
|
|
10
|
+
exports.default = (0, utils_1.Module)(exports.RENEWAL_MODULE, {
|
|
11
|
+
service: service_1.default,
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZW5ld2FsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBNEM7QUFFL0IsUUFBQSxjQUFjLEdBQUcsU0FBUyxDQUFBO0FBRXZDLGtCQUFlLElBQUEsY0FBTSxFQUFDLHNCQUFjLEVBQUU7SUFDcEMsT0FBTyxFQUFFLGlCQUFvQjtDQUM5QixDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260329185930 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260329185930 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "renewal_attempt" drop constraint if exists "renewal_attempt_renewal_cycle_id_attempt_no_unique";`);
|
|
8
|
+
this.addSql(`create table if not exists "renewal_cycle" ("id" text not null, "subscription_id" text not null, "scheduled_for" timestamptz not null, "processed_at" timestamptz null, "status" text check ("status" in ('scheduled', 'processing', 'succeeded', 'failed')) not null default 'scheduled', "approval_required" boolean not null default false, "approval_status" text check ("approval_status" in ('pending', 'approved', 'rejected')) null, "approval_decided_at" timestamptz null, "approval_decided_by" text null, "approval_reason" text null, "generated_order_id" text null, "applied_pending_update_data" jsonb null, "last_error" text null, "attempt_count" integer not null default 0, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "renewal_cycle_pkey" primary key ("id"));`);
|
|
9
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_deleted_at" ON "renewal_cycle" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
10
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_subscription_id" ON "renewal_cycle" ("subscription_id") WHERE deleted_at IS NULL;`);
|
|
11
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_scheduled_for" ON "renewal_cycle" ("scheduled_for") WHERE deleted_at IS NULL;`);
|
|
12
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_status" ON "renewal_cycle" ("status") WHERE deleted_at IS NULL;`);
|
|
13
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_approval_required" ON "renewal_cycle" ("approval_required") WHERE deleted_at IS NULL;`);
|
|
14
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_approval_status" ON "renewal_cycle" ("approval_status") WHERE deleted_at IS NULL;`);
|
|
15
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_generated_order_id" ON "renewal_cycle" ("generated_order_id") WHERE deleted_at IS NULL;`);
|
|
16
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_cycle_scheduled_for_status" ON "renewal_cycle" ("scheduled_for", "status") WHERE deleted_at IS NULL;`);
|
|
17
|
+
this.addSql(`create table if not exists "renewal_attempt" ("id" text not null, "renewal_cycle_id" text not null, "attempt_no" integer not null, "started_at" timestamptz not null, "finished_at" timestamptz null, "status" text check ("status" in ('processing', 'succeeded', 'failed')) not null default 'processing', "error_code" text null, "error_message" text null, "payment_reference" text null, "order_id" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "renewal_attempt_pkey" primary key ("id"));`);
|
|
18
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_attempt_renewal_cycle_id" ON "renewal_attempt" ("renewal_cycle_id") WHERE deleted_at IS NULL;`);
|
|
19
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_attempt_deleted_at" ON "renewal_attempt" ("deleted_at") WHERE deleted_at IS NULL;`);
|
|
20
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_attempt_attempt_no" ON "renewal_attempt" ("attempt_no") WHERE deleted_at IS NULL;`);
|
|
21
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_attempt_status" ON "renewal_attempt" ("status") WHERE deleted_at IS NULL;`);
|
|
22
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_attempt_started_at" ON "renewal_attempt" ("started_at") WHERE deleted_at IS NULL;`);
|
|
23
|
+
this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_renewal_attempt_finished_at" ON "renewal_attempt" ("finished_at") WHERE deleted_at IS NULL;`);
|
|
24
|
+
this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_renewal_attempt_renewal_cycle_id_attempt_no_unique" ON "renewal_attempt" ("renewal_cycle_id", "attempt_no") WHERE deleted_at IS NULL;`);
|
|
25
|
+
this.addSql(`alter table if exists "renewal_attempt" add constraint "renewal_attempt_renewal_cycle_id_foreign" foreign key ("renewal_cycle_id") references "renewal_cycle" ("id") on update cascade;`);
|
|
26
|
+
}
|
|
27
|
+
async down() {
|
|
28
|
+
this.addSql(`alter table if exists "renewal_attempt" drop constraint if exists "renewal_attempt_renewal_cycle_id_foreign";`);
|
|
29
|
+
this.addSql(`drop table if exists "renewal_cycle" cascade;`);
|
|
30
|
+
this.addSql(`drop table if exists "renewal_attempt" cascade;`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.Migration20260329185930 = Migration20260329185930;
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAzMjkxODU5MzAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZW5ld2FsL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjAzMjkxODU5MzAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXFFO0FBRXJFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLHlIQUF5SCxDQUFDLENBQUM7UUFDdkksSUFBSSxDQUFDLE1BQU0sQ0FBQywrMkJBQSsyQixDQUFDLENBQUM7UUFDNzNCLElBQUksQ0FBQyxNQUFNLENBQUMsdUhBQXVILENBQUMsQ0FBQztRQUNySSxJQUFJLENBQUMsTUFBTSxDQUFDLGlJQUFpSSxDQUFDLENBQUM7UUFDL0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyw2SEFBNkgsQ0FBQyxDQUFDO1FBQzNJLElBQUksQ0FBQyxNQUFNLENBQUMsK0dBQStHLENBQUMsQ0FBQztRQUM3SCxJQUFJLENBQUMsTUFBTSxDQUFDLHFJQUFxSSxDQUFDLENBQUM7UUFDbkosSUFBSSxDQUFDLE1BQU0sQ0FBQyxpSUFBaUksQ0FBQyxDQUFDO1FBQy9JLElBQUksQ0FBQyxNQUFNLENBQUMsdUlBQXVJLENBQUMsQ0FBQztRQUNySixJQUFJLENBQUMsTUFBTSxDQUFDLDhJQUE4SSxDQUFDLENBQUM7UUFFNUosSUFBSSxDQUFDLE1BQU0sQ0FBQyxxbUJBQXFtQixDQUFDLENBQUM7UUFDbm5CLElBQUksQ0FBQyxNQUFNLENBQUMsdUlBQXVJLENBQUMsQ0FBQztRQUNySixJQUFJLENBQUMsTUFBTSxDQUFDLDJIQUEySCxDQUFDLENBQUM7UUFDekksSUFBSSxDQUFDLE1BQU0sQ0FBQywySEFBMkgsQ0FBQyxDQUFDO1FBQ3pJLElBQUksQ0FBQyxNQUFNLENBQUMsbUhBQW1ILENBQUMsQ0FBQztRQUNqSSxJQUFJLENBQUMsTUFBTSxDQUFDLDJIQUEySCxDQUFDLENBQUM7UUFDekksSUFBSSxDQUFDLE1BQU0sQ0FBQyw2SEFBNkgsQ0FBQyxDQUFDO1FBQzNJLElBQUksQ0FBQyxNQUFNLENBQUMsOEtBQThLLENBQUMsQ0FBQztRQUU1TCxJQUFJLENBQUMsTUFBTSxDQUFDLHlMQUF5TCxDQUFDLENBQUM7SUFDek0sQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsK0dBQStHLENBQUMsQ0FBQztRQUU3SCxJQUFJLENBQUMsTUFBTSxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FFRjtBQWxDRCwwREFrQ0MifQ==
|