@unchainedshop/core-enrollments 3.0.0-rc5 → 3.0.0-rc7

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.
Files changed (45) hide show
  1. package/package.json +8 -5
  2. package/lib/add.d.ts +0 -2
  3. package/lib/add.d.ts.map +0 -1
  4. package/lib/add.js +0 -39
  5. package/lib/add.js.map +0 -1
  6. package/lib/db/EnrollmentStatus.d.ts +0 -7
  7. package/lib/db/EnrollmentStatus.d.ts.map +0 -1
  8. package/lib/db/EnrollmentStatus.js +0 -8
  9. package/lib/db/EnrollmentStatus.js.map +0 -1
  10. package/lib/director/EnrollmentAdapter.d.ts +0 -7
  11. package/lib/director/EnrollmentAdapter.d.ts.map +0 -1
  12. package/lib/director/EnrollmentAdapter.js +0 -73
  13. package/lib/director/EnrollmentAdapter.js.map +0 -1
  14. package/lib/director/EnrollmentDirector.d.ts +0 -3
  15. package/lib/director/EnrollmentDirector.d.ts.map +0 -1
  16. package/lib/director/EnrollmentDirector.js +0 -46
  17. package/lib/director/EnrollmentDirector.js.map +0 -1
  18. package/lib/director/EnrollmentError.d.ts +0 -7
  19. package/lib/director/EnrollmentError.d.ts.map +0 -1
  20. package/lib/director/EnrollmentError.js +0 -8
  21. package/lib/director/EnrollmentError.js.map +0 -1
  22. package/lib/module/add.d.ts +0 -2
  23. package/lib/module/add.d.ts.map +0 -1
  24. package/lib/module/add.js +0 -39
  25. package/lib/module/add.js.map +0 -1
  26. package/lib/module/configureEnrollmentsModule_BACKUP_54085.d.ts +0 -59
  27. package/lib/module/configureEnrollmentsModule_BACKUP_54085.d.ts.map +0 -1
  28. package/lib/module/configureEnrollmentsModule_BACKUP_54085.js +0 -203
  29. package/lib/module/configureEnrollmentsModule_BACKUP_54085.js.map +0 -1
  30. package/lib/module/configureEnrollmentsModule_BASE_54085.d.ts +0 -70
  31. package/lib/module/configureEnrollmentsModule_BASE_54085.d.ts.map +0 -1
  32. package/lib/module/configureEnrollmentsModule_BASE_54085.js +0 -324
  33. package/lib/module/configureEnrollmentsModule_BASE_54085.js.map +0 -1
  34. package/lib/module/configureEnrollmentsModule_LOCAL_54085.d.ts +0 -58
  35. package/lib/module/configureEnrollmentsModule_LOCAL_54085.d.ts.map +0 -1
  36. package/lib/module/configureEnrollmentsModule_LOCAL_54085.js +0 -196
  37. package/lib/module/configureEnrollmentsModule_LOCAL_54085.js.map +0 -1
  38. package/lib/module/configureEnrollmentsModule_REMOTE_54085.d.ts +0 -71
  39. package/lib/module/configureEnrollmentsModule_REMOTE_54085.d.ts.map +0 -1
  40. package/lib/module/configureEnrollmentsModule_REMOTE_54085.js +0 -331
  41. package/lib/module/configureEnrollmentsModule_REMOTE_54085.js.map +0 -1
  42. package/lib/types.d.ts +0 -99
  43. package/lib/types.d.ts.map +0 -1
  44. package/lib/types.js +0 -8
  45. package/lib/types.js.map +0 -1
@@ -1,196 +0,0 @@
1
- import { SortDirection } from '@unchainedshop/utils';
2
- import { EnrollmentStatus, } from '../db/EnrollmentsCollection.js';
3
- import { emit, registerEvents } from '@unchainedshop/events';
4
- import { generateDbFilterById, buildSortOptions, generateDbObjectId, } from '@unchainedshop/mongodb';
5
- import { EnrollmentsCollection } from '../db/EnrollmentsCollection.js';
6
- import { enrollmentsSettings } from '../enrollments-settings.js';
7
- const ENROLLMENT_EVENTS = [
8
- 'ENROLLMENT_ADD_PERIOD',
9
- 'ENROLLMENT_CREATE',
10
- 'ENROLLMENT_REMOVE',
11
- 'ENROLLMENT_UPDATE',
12
- ];
13
- export const buildFindSelector = ({ queryString, status, userId }) => {
14
- const selector = {
15
- deleted: null,
16
- };
17
- if (status)
18
- selector.status = { $in: status };
19
- if (userId)
20
- selector.userId = userId;
21
- if (queryString)
22
- selector.$text = { $search: queryString };
23
- return selector;
24
- };
25
- export const configureEnrollmentsModule = async ({ db, options: enrollmentOptions = {}, }) => {
26
- registerEvents(ENROLLMENT_EVENTS);
27
- enrollmentsSettings.configureSettings(enrollmentOptions);
28
- const Enrollments = await EnrollmentsCollection(db);
29
- const isExpired = (enrollment, { referenceDate }) => {
30
- const relevantDate = referenceDate ? new Date(referenceDate) : new Date();
31
- const expiryDate = new Date(enrollment.expires);
32
- return relevantDate.getTime() > expiryDate.getTime();
33
- };
34
- const findNewEnrollmentNumber = async (enrollment, index = 0) => {
35
- const newHashID = enrollmentsSettings.enrollmentNumberHashFn(enrollment, index);
36
- if ((await Enrollments.countDocuments({ enrollmentNumber: newHashID }, { limit: 1 })) === 0) {
37
- return newHashID;
38
- }
39
- return findNewEnrollmentNumber(enrollment, index + 1);
40
- };
41
- const updateStatus = async (enrollmentId, { status, info = '' }) => {
42
- const selector = generateDbFilterById(enrollmentId);
43
- const enrollment = await Enrollments.findOne(selector, {});
44
- if (enrollment.status === status)
45
- return enrollment;
46
- const date = new Date();
47
- const modifier = {
48
- $set: { status, updated: new Date() },
49
- $push: {
50
- log: {
51
- date,
52
- status,
53
- info,
54
- },
55
- },
56
- };
57
- switch (status) {
58
- case EnrollmentStatus.ACTIVE:
59
- modifier.$set.enrollmentNumber = await findNewEnrollmentNumber(enrollment);
60
- break;
61
- case EnrollmentStatus.TERMINATED:
62
- modifier.$set.expires = enrollment.periods?.pop()?.end || new Date();
63
- break;
64
- default:
65
- break;
66
- }
67
- const updatedEnrollment = await Enrollments.findOneAndUpdate(selector, modifier, {
68
- returnDocument: 'after',
69
- });
70
- await emit('ENROLLMENT_UPDATE', { enrollment, field: 'status' });
71
- return updatedEnrollment;
72
- };
73
- const updateEnrollmentField = (fieldKey) => async (enrollmentId, fieldValue) => {
74
- const enrollment = await Enrollments.findOneAndUpdate(generateDbFilterById(enrollmentId), {
75
- $set: {
76
- updated: new Date(),
77
- [fieldKey]: fieldValue,
78
- },
79
- }, { returnDocument: 'after' });
80
- await emit('ENROLLMENT_UPDATE', { enrollment, field: fieldKey });
81
- return enrollment;
82
- };
83
- return {
84
- // Queries
85
- count: async (query) => {
86
- const enrollmentCount = await Enrollments.countDocuments(buildFindSelector(query));
87
- return enrollmentCount;
88
- },
89
- openEnrollmentWithProduct: async ({ productId }) => {
90
- const selector = { productId };
91
- selector.status = { $in: [EnrollmentStatus.ACTIVE, EnrollmentStatus.PAUSED] };
92
- return Enrollments.findOne(selector);
93
- },
94
- findEnrollment: async ({ enrollmentId, orderId }, options) => {
95
- const selector = enrollmentId
96
- ? generateDbFilterById(enrollmentId)
97
- : { 'periods.orderId': orderId };
98
- return Enrollments.findOne(selector, options);
99
- },
100
- findEnrollments: async ({ limit, offset, sort, ...query }) => {
101
- const defaultSortOption = [{ key: 'created', value: SortDirection.ASC }];
102
- const enrollments = Enrollments.find(buildFindSelector(query), {
103
- skip: offset,
104
- limit,
105
- sort: buildSortOptions(sort || defaultSortOption),
106
- });
107
- return enrollments.toArray();
108
- },
109
- // Transformations
110
- normalizedStatus: (enrollment) => {
111
- return enrollment.status === null
112
- ? EnrollmentStatus.INITIAL
113
- : enrollment.status;
114
- },
115
- isExpired,
116
- // Mutations
117
- addEnrollmentPeriod: async (enrollmentId, period) => {
118
- const { start, end, orderId, isTrial } = period;
119
- const selector = generateDbFilterById(enrollmentId);
120
- const enrollment = await Enrollments.findOneAndUpdate(selector, {
121
- $push: {
122
- periods: {
123
- start,
124
- end,
125
- orderId,
126
- isTrial,
127
- },
128
- },
129
- $set: {
130
- updated: new Date(),
131
- },
132
- }, {
133
- returnDocument: 'after',
134
- });
135
- await emit('ENROLLMENT_ADD_PERIOD', { enrollment });
136
- return enrollment;
137
- },
138
- create: async ({ countryCode, currencyCode, ...enrollmentData }) => {
139
- const { insertedId: enrollmentId } = await Enrollments.insertOne({
140
- _id: generateDbObjectId(),
141
- created: new Date(),
142
- ...enrollmentData,
143
- status: EnrollmentStatus.INITIAL,
144
- periods: [],
145
- currencyCode,
146
- countryCode,
147
- configuration: enrollmentData.configuration || [],
148
- log: [],
149
- });
150
- const enrollment = await Enrollments.findOne({
151
- _id: enrollmentId,
152
- });
153
- await emit('ENROLLMENT_CREATE', { enrollment });
154
- return enrollment;
155
- },
156
- delete: async (enrollmentId) => {
157
- const { modifiedCount: deletedCount } = await Enrollments.updateOne(generateDbFilterById(enrollmentId), {
158
- $set: {
159
- deleted: new Date(),
160
- },
161
- });
162
- await emit('ORDER_REMOVE', { enrollmentId });
163
- return deletedCount;
164
- },
165
- removeEnrollmentPeriodByOrderId: async (enrollmentId, orderId) => {
166
- const selector = generateDbFilterById(enrollmentId);
167
- return Enrollments.findOneAndUpdate(selector, {
168
- $set: {
169
- updated: new Date(),
170
- },
171
- $pull: {
172
- periods: { orderId: { $in: [orderId, undefined, null] } },
173
- },
174
- }, { returnDocument: 'after' });
175
- },
176
- updateBillingAddress: updateEnrollmentField('billingAddress'),
177
- updateContact: updateEnrollmentField('contact'),
178
- updateContext: updateEnrollmentField('meta'),
179
- updateDelivery: updateEnrollmentField('delivery'),
180
- updatePayment: updateEnrollmentField('payment'),
181
- updatePlan: async (enrollmentId, plan) => {
182
- const enrollment = await Enrollments.findOneAndUpdate(generateDbFilterById(enrollmentId), {
183
- $set: {
184
- updated: new Date(),
185
- productId: plan.productId,
186
- quantity: plan.quantity,
187
- configuration: plan.configuration,
188
- },
189
- }, { returnDocument: 'after' });
190
- await emit('ENROLLMENT_UPDATE', { enrollment, field: 'plan' });
191
- return enrollment;
192
- },
193
- updateStatus,
194
- };
195
- };
196
- //# sourceMappingURL=configureEnrollmentsModule_LOCAL_54085.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureEnrollmentsModule_LOCAL_54085.js","sourceRoot":"","sources":["../../src/module/configureEnrollmentsModule_LOCAL_54085.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- import { SortOption } from '@unchainedshop/utils';
2
- import { Enrollment, EnrollmentData, EnrollmentPeriod, EnrollmentPlan, EnrollmentQuery } from '../types.js';
3
- import { mongodb, Address, Contact, ModuleInput } from '@unchainedshop/mongodb';
4
- import { EnrollmentStatus } from '../db/EnrollmentStatus.js';
5
- import { EnrollmentsSettingsOptions } from '../enrollments-settings.js';
6
- import type { Order, OrderPosition } from '@unchainedshop/core-orders';
7
- import type { Product } from '@unchainedshop/core-products';
8
- export interface EnrollmentQueries {
9
- findEnrollment: (params: {
10
- enrollmentId?: string;
11
- orderId?: string;
12
- }, options?: mongodb.FindOptions) => Promise<Enrollment>;
13
- findEnrollments: (params: EnrollmentQuery & {
14
- limit?: number;
15
- offset?: number;
16
- sort?: Array<SortOption>;
17
- }) => Promise<Array<Enrollment>>;
18
- openEnrollmentWithProduct(params: {
19
- productId: string;
20
- }): Promise<Enrollment | null>;
21
- count: (params: EnrollmentQuery) => Promise<number>;
22
- }
23
- export interface EnrollmentTransformations {
24
- normalizedStatus: (enrollment: Enrollment) => string;
25
- isExpired: (enrollment: Enrollment, params: {
26
- referenceDate?: Date;
27
- }) => boolean;
28
- }
29
- export type EnrollmentContextParams = (enrollment: Enrollment, unchainedAPI: any) => Promise<Enrollment>;
30
- export interface EnrollmentProcessing {
31
- terminateEnrollment: EnrollmentContextParams;
32
- activateEnrollment: EnrollmentContextParams;
33
- }
34
- export interface EnrollmentMutations {
35
- addEnrollmentPeriod: (enrollmentId: string, period: EnrollmentPeriod) => Promise<Enrollment>;
36
- create: (doc: EnrollmentData, unchainedAPI: any) => Promise<Enrollment>;
37
- createFromCheckout: (order: Order, params: {
38
- items: Array<{
39
- orderPosition: OrderPosition;
40
- product: Product;
41
- }>;
42
- context: {
43
- paymentContext?: any;
44
- deliveryContext?: any;
45
- };
46
- }, unchainedAPI: any) => Promise<void>;
47
- delete: (enrollmentId: string) => Promise<number>;
48
- removeEnrollmentPeriodByOrderId: (enrollmentId: string, orderId: string) => Promise<Enrollment>;
49
- updateBillingAddress: (enrollmentId: string, billingAddress: Address) => Promise<Enrollment>;
50
- updateContact: (enrollmentId: string, contact: Contact) => Promise<Enrollment>;
51
- updateContext: (enrollmentId: string, context: any) => Promise<Enrollment | null>;
52
- updateDelivery: (enrollmentId: string, delivery: Enrollment['delivery']) => Promise<Enrollment>;
53
- updatePayment: (enrollmentId: string, payment: Enrollment['payment']) => Promise<Enrollment>;
54
- updatePlan: (enrollmentId: string, plan: EnrollmentPlan, unchainedAPI: any) => Promise<Enrollment>;
55
- updateStatus: (enrollmentId: string, params: {
56
- status: EnrollmentStatus;
57
- info?: string;
58
- }, unchainedAPI: any) => Promise<Enrollment>;
59
- deleteInactiveUserEnrollments: (userId: string) => Promise<number>;
60
- }
61
- export type EnrollmentsModule = EnrollmentQueries & EnrollmentTransformations & EnrollmentProcessing & EnrollmentMutations;
62
- export declare const buildFindSelector: ({ queryString, status, userId }: EnrollmentQuery) => {
63
- deleted: Date;
64
- status?: any;
65
- $text?: {
66
- $search: string;
67
- };
68
- userId?: string;
69
- };
70
- export declare const configureEnrollmentsModule: ({ db, options: enrollmentOptions, }: ModuleInput<EnrollmentsSettingsOptions>) => Promise<EnrollmentsModule>;
71
- //# sourceMappingURL=configureEnrollmentsModule_REMOTE_54085.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureEnrollmentsModule_REMOTE_54085.d.ts","sourceRoot":"","sources":["../../src/module/configureEnrollmentsModule_REMOTE_54085.ts"],"names":[],"mappings":"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"}
@@ -1,331 +0,0 @@
1
- import { SortDirection } from '@unchainedshop/utils';
2
- import { emit, registerEvents } from '@unchainedshop/events';
3
- import { generateDbFilterById, buildSortOptions, generateDbObjectId, } from '@unchainedshop/mongodb';
4
- import { EnrollmentsCollection } from '../db/EnrollmentsCollection.js';
5
- import { EnrollmentStatus } from '../db/EnrollmentStatus.js';
6
- import { EnrollmentDirector } from '../enrollments-index.js';
7
- import { enrollmentsSettings } from '../enrollments-settings.js';
8
- import { resolveBestCurrency } from '@unchainedshop/utils';
9
- const ENROLLMENT_EVENTS = [
10
- 'ENROLLMENT_ADD_PERIOD',
11
- 'ENROLLMENT_CREATE',
12
- 'ENROLLMENT_REMOVE',
13
- 'ENROLLMENT_UPDATE',
14
- ];
15
- export const buildFindSelector = ({ queryString, status, userId }) => {
16
- const selector = {
17
- deleted: null,
18
- };
19
- if (status)
20
- selector.status = { $in: status };
21
- if (userId)
22
- selector.userId = userId;
23
- if (queryString)
24
- selector.$text = { $search: queryString };
25
- return selector;
26
- };
27
- export const configureEnrollmentsModule = async ({ db, options: enrollmentOptions = {}, }) => {
28
- registerEvents(ENROLLMENT_EVENTS);
29
- enrollmentsSettings.configureSettings(enrollmentOptions);
30
- const Enrollments = await EnrollmentsCollection(db);
31
- const findNewEnrollmentNumber = async (enrollment, index = 0) => {
32
- const newHashID = enrollmentsSettings.enrollmentNumberHashFn(enrollment, index);
33
- if ((await Enrollments.countDocuments({ enrollmentNumber: newHashID }, { limit: 1 })) === 0) {
34
- return newHashID;
35
- }
36
- return findNewEnrollmentNumber(enrollment, index + 1);
37
- };
38
- const findNextStatus = async (enrollment, unchainedAPI) => {
39
- let status = enrollment.status;
40
- const director = await EnrollmentDirector.actions({ enrollment }, unchainedAPI);
41
- if (status === EnrollmentStatus.INITIAL || status === EnrollmentStatus.PAUSED) {
42
- if (await director.isValidForActivation()) {
43
- status = EnrollmentStatus.ACTIVE;
44
- }
45
- }
46
- else if (status === EnrollmentStatus.ACTIVE) {
47
- if (await director.isOverdue()) {
48
- status = EnrollmentStatus.PAUSED;
49
- }
50
- }
51
- else if (unchainedAPI.modules.enrollments.isExpired(enrollment, {})) {
52
- status = EnrollmentStatus.TERMINATED;
53
- }
54
- return status;
55
- };
56
- const updateStatus = async (enrollmentId, { status, info = '' }) => {
57
- const selector = generateDbFilterById(enrollmentId);
58
- const enrollment = await Enrollments.findOne(selector, {});
59
- if (enrollment.status === status)
60
- return enrollment;
61
- const date = new Date();
62
- const modifier = {
63
- $set: { status, updated: new Date() },
64
- $push: {
65
- log: {
66
- date,
67
- status,
68
- info,
69
- },
70
- },
71
- };
72
- switch (status) {
73
- case EnrollmentStatus.ACTIVE:
74
- modifier.$set.enrollmentNumber = await findNewEnrollmentNumber(enrollment);
75
- break;
76
- case EnrollmentStatus.TERMINATED:
77
- modifier.$set.expires = enrollment.periods?.pop()?.end || new Date();
78
- break;
79
- default:
80
- break;
81
- }
82
- const updatedEnrollment = await Enrollments.findOneAndUpdate(selector, modifier, {
83
- returnDocument: 'after',
84
- });
85
- await emit('ENROLLMENT_UPDATE', { enrollment, field: 'status' });
86
- return updatedEnrollment;
87
- };
88
- const reactivateEnrollment = async (enrollment) => {
89
- return enrollment;
90
- };
91
- const processEnrollment = async (enrollment, unchainedAPI) => {
92
- let status = await findNextStatus(enrollment, unchainedAPI);
93
- if (status === EnrollmentStatus.ACTIVE) {
94
- const nextEnrollment = await reactivateEnrollment(enrollment);
95
- status = await findNextStatus(nextEnrollment, unchainedAPI);
96
- }
97
- return updateStatus(enrollment._id, { status, info: 'enrollment processed' }, unchainedAPI);
98
- };
99
- const initializeEnrollment = async (enrollment, params, unchainedAPI) => {
100
- const { modules } = unchainedAPI;
101
- const director = await EnrollmentDirector.actions({ enrollment }, unchainedAPI);
102
- const period = await director.nextPeriod();
103
- if (period && (params.orderIdForFirstPeriod || period.isTrial)) {
104
- const intializedEnrollment = await modules.enrollments.addEnrollmentPeriod(enrollment._id, {
105
- ...period,
106
- orderId: params.orderIdForFirstPeriod,
107
- });
108
- return processEnrollment(intializedEnrollment, unchainedAPI);
109
- }
110
- return processEnrollment(enrollment, unchainedAPI);
111
- };
112
- const sendStatusToCustomer = async (enrollment, params, unchainedAPI) => {
113
- const { modules } = unchainedAPI;
114
- let { locale } = params;
115
- if (!locale) {
116
- const user = await modules.users.findUserById(enrollment.userId);
117
- locale = modules.users.userLocale(user);
118
- }
119
- await modules.worker.addWork({
120
- type: 'MESSAGE',
121
- retries: 0,
122
- input: {
123
- reason: params.reason || 'status_change',
124
- locale,
125
- template: 'ENROLLMENT_STATUS',
126
- enrollmentId: enrollment._id,
127
- },
128
- });
129
- return enrollment;
130
- };
131
- const updateEnrollmentField = (fieldKey) => async (enrollmentId, fieldValue) => {
132
- const enrollment = await Enrollments.findOneAndUpdate(generateDbFilterById(enrollmentId), {
133
- $set: {
134
- updated: new Date(),
135
- [fieldKey]: fieldValue,
136
- },
137
- }, { returnDocument: 'after' });
138
- await emit('ENROLLMENT_UPDATE', { enrollment, field: fieldKey });
139
- return enrollment;
140
- };
141
- return {
142
- // Queries
143
- count: async (query) => {
144
- const enrollmentCount = await Enrollments.countDocuments(buildFindSelector(query));
145
- return enrollmentCount;
146
- },
147
- openEnrollmentWithProduct: async ({ productId }) => {
148
- const selector = { productId };
149
- selector.status = { $in: [EnrollmentStatus.ACTIVE, EnrollmentStatus.PAUSED] };
150
- return Enrollments.findOne(selector);
151
- },
152
- findEnrollment: async ({ enrollmentId, orderId }, options) => {
153
- const selector = enrollmentId
154
- ? generateDbFilterById(enrollmentId)
155
- : { 'periods.orderId': orderId };
156
- return Enrollments.findOne(selector, options);
157
- },
158
- findEnrollments: async ({ limit, offset, sort, ...query }) => {
159
- const defaultSortOption = [{ key: 'created', value: SortDirection.ASC }];
160
- const enrollments = Enrollments.find(buildFindSelector(query), {
161
- skip: offset,
162
- limit,
163
- sort: buildSortOptions(sort || defaultSortOption),
164
- });
165
- return enrollments.toArray();
166
- },
167
- // Transformations
168
- normalizedStatus: (enrollment) => {
169
- return enrollment.status === null
170
- ? EnrollmentStatus.INITIAL
171
- : enrollment.status;
172
- },
173
- isExpired: (enrollment, { referenceDate }) => {
174
- const relevantDate = referenceDate ? new Date(referenceDate) : new Date();
175
- const expiryDate = new Date(enrollment.expires);
176
- const isExpired = relevantDate.getTime() > expiryDate.getTime();
177
- return isExpired;
178
- },
179
- // Processing
180
- terminateEnrollment: async (enrollment, unchainedAPI) => {
181
- if (enrollment.status === EnrollmentStatus.TERMINATED)
182
- return enrollment;
183
- let updatedEnrollment = await updateStatus(enrollment._id, {
184
- status: EnrollmentStatus.TERMINATED,
185
- info: 'terminated manually',
186
- }, unchainedAPI);
187
- updatedEnrollment = await processEnrollment(updatedEnrollment, unchainedAPI);
188
- return sendStatusToCustomer(updatedEnrollment, {}, unchainedAPI);
189
- },
190
- activateEnrollment: async (enrollment, unchainedAPI) => {
191
- if (enrollment.status === EnrollmentStatus.TERMINATED)
192
- return enrollment;
193
- let updatedEnrollment = await updateStatus(enrollment._id, {
194
- status: EnrollmentStatus.ACTIVE,
195
- info: 'activated manually',
196
- }, unchainedAPI);
197
- updatedEnrollment = await processEnrollment(updatedEnrollment, unchainedAPI);
198
- return sendStatusToCustomer(updatedEnrollment, {}, unchainedAPI);
199
- },
200
- // Mutations
201
- addEnrollmentPeriod: async (enrollmentId, period) => {
202
- const { start, end, orderId, isTrial } = period;
203
- const selector = generateDbFilterById(enrollmentId);
204
- const enrollment = await Enrollments.findOneAndUpdate(selector, {
205
- $push: {
206
- periods: {
207
- start,
208
- end,
209
- orderId,
210
- isTrial,
211
- },
212
- },
213
- $set: {
214
- updated: new Date(),
215
- },
216
- }, {
217
- returnDocument: 'after',
218
- });
219
- await emit('ENROLLMENT_ADD_PERIOD', { enrollment });
220
- return enrollment;
221
- },
222
- create: async ({ countryCode, currencyCode, orderIdForFirstPeriod, ...enrollmentData }, unchainedAPI) => {
223
- const { modules } = unchainedAPI;
224
- const countryObject = await modules.countries.findCountry({ isoCode: countryCode });
225
- const currencies = await modules.currencies.findCurrencies({ includeInactive: false });
226
- const currency = currencyCode || resolveBestCurrency(countryObject.defaultCurrencyCode, currencies);
227
- const { insertedId: enrollmentId } = await Enrollments.insertOne({
228
- _id: generateDbObjectId(),
229
- created: new Date(),
230
- ...enrollmentData,
231
- status: EnrollmentStatus.INITIAL,
232
- periods: [],
233
- currencyCode: currency,
234
- countryCode,
235
- configuration: enrollmentData.configuration || [],
236
- log: [],
237
- });
238
- const newEnrollment = await Enrollments.findOne(generateDbFilterById(enrollmentId), {});
239
- const reason = 'new_enrollment';
240
- const initializedEnrollment = await initializeEnrollment(newEnrollment, {
241
- orderIdForFirstPeriod,
242
- reason,
243
- }, unchainedAPI);
244
- const enrollment = await sendStatusToCustomer(initializedEnrollment, {
245
- reason,
246
- }, unchainedAPI);
247
- await emit('ENROLLMENT_CREATE', { enrollment });
248
- return enrollment;
249
- },
250
- createFromCheckout: async (order, { items, context }, unchainedAPI) => {
251
- const { modules } = unchainedAPI;
252
- const orderId = order._id;
253
- const payment = await modules.orders.payments.findOrderPayment({
254
- orderPaymentId: order.paymentId,
255
- });
256
- const delivery = await modules.orders.deliveries.findDelivery({
257
- orderDeliveryId: order.deliveryId,
258
- });
259
- const template = {
260
- billingAddress: order.billingAddress,
261
- contact: order.contact,
262
- countryCode: order.countryCode,
263
- currencyCode: order.currency,
264
- delivery: {
265
- deliveryProviderId: delivery.deliveryProviderId,
266
- context: delivery.context,
267
- },
268
- orderIdForFirstPeriod: orderId,
269
- payment: {
270
- paymentProviderId: payment.paymentProviderId,
271
- context: payment.context,
272
- },
273
- userId: order.userId,
274
- meta: order.context,
275
- ...context,
276
- };
277
- await Promise.all(items.map(async (item) => {
278
- const enrollmentData = await EnrollmentDirector.transformOrderItemToEnrollment(item, template, unchainedAPI);
279
- return modules.enrollments.create(enrollmentData, unchainedAPI);
280
- }));
281
- },
282
- delete: async (enrollmentId) => {
283
- const { modifiedCount: deletedCount } = await Enrollments.updateOne(generateDbFilterById(enrollmentId), {
284
- $set: {
285
- deleted: new Date(),
286
- },
287
- });
288
- await emit('ENROLLMENT_REMOVE', { enrollmentId });
289
- return deletedCount;
290
- },
291
- removeEnrollmentPeriodByOrderId: async (enrollmentId, orderId) => {
292
- const selector = generateDbFilterById(enrollmentId);
293
- return Enrollments.findOneAndUpdate(selector, {
294
- $set: {
295
- updated: new Date(),
296
- },
297
- $pull: {
298
- periods: { orderId: { $in: [orderId, undefined, null] } },
299
- },
300
- }, { returnDocument: 'after' });
301
- },
302
- updateBillingAddress: updateEnrollmentField('billingAddress'),
303
- updateContact: updateEnrollmentField('contact'),
304
- updateContext: updateEnrollmentField('meta'),
305
- updateDelivery: updateEnrollmentField('delivery'),
306
- updatePayment: updateEnrollmentField('payment'),
307
- updatePlan: async (enrollmentId, plan, unchainedAPI) => {
308
- const enrollment = await Enrollments.findOneAndUpdate(generateDbFilterById(enrollmentId), {
309
- $set: {
310
- updated: new Date(),
311
- productId: plan.productId,
312
- quantity: plan.quantity,
313
- configuration: plan.configuration,
314
- },
315
- }, { returnDocument: 'after' });
316
- await emit('ENROLLMENT_UPDATE', { enrollment, field: 'plan' });
317
- const reason = 'updated_plan';
318
- const initializedEnrollment = await initializeEnrollment(enrollment, { reason }, unchainedAPI);
319
- return sendStatusToCustomer(initializedEnrollment, { reason }, unchainedAPI);
320
- },
321
- updateStatus,
322
- deleteInactiveUserEnrollments: async (userId) => {
323
- const { deletedCount } = await Enrollments.deleteMany({
324
- userId,
325
- status: { $in: [null, EnrollmentStatus.INITIAL, EnrollmentStatus.TERMINATED] },
326
- });
327
- return deletedCount;
328
- },
329
- };
330
- };
331
- //# sourceMappingURL=configureEnrollmentsModule_REMOTE_54085.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureEnrollmentsModule_REMOTE_54085.js","sourceRoot":"","sources":["../../src/module/configureEnrollmentsModule_REMOTE_54085.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAC;AAQjE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAIhB,kBAAkB,GAEnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAA8B,MAAM,4BAA4B,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAuF3D,MAAM,iBAAiB,GAAa;IAClC,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAmB,EAAE,EAAE;IACpF,MAAM,QAAQ,GAKV;QACF,OAAO,EAAE,IAAI;KACd,CAAC;IACF,IAAI,MAAM;QAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAC9C,IAAI,MAAM;QAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IAErC,IAAI,WAAW;QAAE,QAAQ,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAE3D,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,EAAE,EAC/C,EAAE,EACF,OAAO,EAAE,iBAAiB,GAAG,EAAE,GACS,EAA8B,EAAE;IACxE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAElC,mBAAmB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAEpD,MAAM,uBAAuB,GAAG,KAAK,EAAE,UAAsB,EAAE,KAAK,GAAG,CAAC,EAAmB,EAAE;QAC3F,MAAM,SAAS,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAChF,IAAI,CAAC,MAAM,WAAW,CAAC,cAAc,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5F,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,uBAAuB,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,UAAsB,EAAE,YAAY,EAA6B,EAAE;QAC/F,IAAI,MAAM,GAAG,UAAU,CAAC,MAA0B,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;QAEhF,IAAI,MAAM,KAAK,gBAAgB,CAAC,OAAO,IAAI,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC9E,IAAI,MAAM,QAAQ,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAC1C,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACnC,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAC9C,IAAI,MAAM,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC/B,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACnC,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;YACtE,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAsC,KAAK,EAC3D,YAAY,EACZ,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,EACrB,EAAE;QACF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAE3D,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,UAAU,CAAC;QAEpD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,GAGV;YACF,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE;YACrC,KAAK,EAAE;gBACL,GAAG,EAAE;oBACH,IAAI;oBACJ,MAAM;oBACN,IAAI;iBACL;aACF;SACF,CAAC;QAEF,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,gBAAgB,CAAC,MAAM;gBAC1B,QAAQ,CAAC,IAAI,CAAC,gBAAgB,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAC;gBAC3E,MAAM;YACR,KAAK,gBAAgB,CAAC,UAAU;gBAC9B,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;gBACrE,MAAM;YACR;gBACE,MAAM;QACV,CAAC;QAED,MAAM,iBAAiB,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE;YAC/E,cAAc,EAAE,OAAO;SACxB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEjE,OAAO,iBAAiB,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAsB,EAAE,EAAE;QAC5D,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,UAAsB,EAAE,YAAY,EAAE,EAAE;QACvE,IAAI,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE5D,IAAI,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAC9D,MAAM,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,YAAY,CAAC,CAAC;IAC9F,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,KAAK,EAChC,UAAsB,EACtB,MAA0D,EAC1D,YAAY,EACZ,EAAE;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAE3C,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/D,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,UAAU,CAAC,GAAG,EAAE;gBACzF,GAAG,MAAM;gBACT,OAAO,EAAE,MAAM,CAAC,qBAAqB;aACtC,CAAC,CAAC;YAEH,OAAO,iBAAiB,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,KAAK,EAChC,UAAsB,EACtB,MAAiD,EACjD,YAAY,EACZ,EAAE;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QAEjC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACjE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC;YACV,KAAK,EAAE;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,eAAe;gBACxC,MAAM;gBACN,QAAQ,EAAE,mBAAmB;gBAC7B,YAAY,EAAE,UAAU,CAAC,GAAG;aAC7B;SACF,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,KAAK,EAAE,YAAoB,EAAE,UAAe,EAAE,EAAE;QAClG,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,gBAAgB,CACnD,oBAAoB,CAAC,YAAY,CAAC,EAClC;YACE,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI,IAAI,EAAE;gBACnB,CAAC,QAAQ,CAAC,EAAE,UAAU;aACvB;SACF,EACD,EAAE,cAAc,EAAE,OAAO,EAAE,CAC5B,CAAC;QACF,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO;QACL,UAAU;QACV,KAAK,EAAE,KAAK,EAAE,KAAsB,EAAE,EAAE;YACtC,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YACnF,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,yBAAyB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YACjD,MAAM,QAAQ,GAA+B,EAAE,SAAS,EAAE,CAAC;YAC3D,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9E,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE;YAC3D,MAAM,QAAQ,GAAG,YAAY;gBAC3B,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC;gBACpC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;YAEnC,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAED,eAAe,EAAE,KAAK,EAAE,EACtB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,GAAG,KAAK,EACwE,EAAE,EAAE;YACpF,MAAM,iBAAiB,GAAsB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5F,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC7D,IAAI,EAAE,MAAM;gBACZ,KAAK;gBACL,IAAI,EAAE,gBAAgB,CAAC,IAAI,IAAI,iBAAiB,CAAC;aAClD,CAAC,CAAC;YAEH,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;QAED,kBAAkB;QAClB,gBAAgB,EAAE,CAAC,UAAU,EAAE,EAAE;YAC/B,OAAO,UAAU,CAAC,MAAM,KAAK,IAAI;gBAC/B,CAAC,CAAC,gBAAgB,CAAC,OAAO;gBAC1B,CAAC,CAAE,UAAU,CAAC,MAA2B,CAAC;QAC9C,CAAC;QAED,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;YAC3C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1E,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;YAChE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,aAAa;QACb,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;YACtD,IAAI,UAAU,CAAC,MAAM,KAAK,gBAAgB,CAAC,UAAU;gBAAE,OAAO,UAAU,CAAC;YAEzE,IAAI,iBAAiB,GAAG,MAAM,YAAY,CACxC,UAAU,CAAC,GAAG,EACd;gBACE,MAAM,EAAE,gBAAgB,CAAC,UAAU;gBACnC,IAAI,EAAE,qBAAqB;aAC5B,EACD,YAAY,CACb,CAAC;YAEF,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAE7E,OAAO,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QACnE,CAAC;QAED,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE;YACrD,IAAI,UAAU,CAAC,MAAM,KAAK,gBAAgB,CAAC,UAAU;gBAAE,OAAO,UAAU,CAAC;YAEzE,IAAI,iBAAiB,GAAG,MAAM,YAAY,CACxC,UAAU,CAAC,GAAG,EACd;gBACE,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC/B,IAAI,EAAE,oBAAoB;aAC3B,EACD,YAAY,CACb,CAAC;YAEF,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAE7E,OAAO,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;QACnE,CAAC;QAED,YAAY;QACZ,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;YAClD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;YAChD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,gBAAgB,CACnD,QAAQ,EACR;gBACE,KAAK,EAAE;oBACL,OAAO,EAAE;wBACP,KAAK;wBACL,GAAG;wBACH,OAAO;wBACP,OAAO;qBACR;iBACF;gBACD,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI,IAAI,EAAE;iBACpB;aACF,EACD;gBACE,cAAc,EAAE,OAAO;aACxB,CACF,CAAC;YAEF,MAAM,IAAI,CAAC,uBAAuB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAEpD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,MAAM,EAAE,KAAK,EACX,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,GAAG,cAAc,EAAE,EACvE,YAAY,EACZ,EAAE;YACF,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;YAEjC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YACvF,MAAM,QAAQ,GACZ,YAAY,IAAI,mBAAmB,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YAErF,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC;gBAC/D,GAAG,EAAE,kBAAkB,EAAE;gBACzB,OAAO,EAAE,IAAI,IAAI,EAAE;gBACnB,GAAG,cAAc;gBACjB,MAAM,EAAE,gBAAgB,CAAC,OAAO;gBAChC,OAAO,EAAE,EAAE;gBACX,YAAY,EAAE,QAAQ;gBACtB,WAAW;gBACX,aAAa,EAAE,cAAc,CAAC,aAAa,IAAI,EAAE;gBACjD,GAAG,EAAE,EAAE;aACR,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;YAExF,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAEhC,MAAM,qBAAqB,GAAG,MAAM,oBAAoB,CACtD,aAAa,EACb;gBACE,qBAAqB;gBACrB,MAAM;aACP,EACD,YAAY,CACb,CAAC;YAEF,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAC3C,qBAAqB,EACrB;gBACE,MAAM;aACP,EACD,YAAY,CACb,CAAC;YAEF,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAEhD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE;YACpE,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;YACjC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;YAE1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAC7D,cAAc,EAAE,KAAK,CAAC,SAAS;aAChC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;gBAC5D,eAAe,EAAE,KAAK,CAAC,UAAU;aAClC,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG;gBACf,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,YAAY,EAAE,KAAK,CAAC,QAAQ;gBAC5B,QAAQ,EAAE;oBACR,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;oBAC/C,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B;gBACD,qBAAqB,EAAE,OAAO;gBAC9B,OAAO,EAAE;oBACP,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;oBAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB;gBACD,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,OAAO;gBACnB,GAAG,OAAO;aACX,CAAC;YAEF,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,8BAA8B,CAC5E,IAAI,EACJ,QAAQ,EACR,YAAY,CACb,CAAC;gBAEF,OAAO,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAClE,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;YAC7B,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,CACjE,oBAAoB,CAAC,YAAY,CAAC,EAClC;gBACE,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI,IAAI,EAAE;iBACpB;aACF,CACF,CAAC;YACF,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;YAClD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,+BAA+B,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;YAC/D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;YACpD,OAAO,WAAW,CAAC,gBAAgB,CACjC,QAAQ,EACR;gBACE,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI,IAAI,EAAE;iBACpB;gBACD,KAAK,EAAE;oBACL,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE;iBAC1D;aACF,EACD,EAAE,cAAc,EAAE,OAAO,EAAE,CAC5B,CAAC;QACJ,CAAC;QAED,oBAAoB,EAAE,qBAAqB,CAAC,gBAAgB,CAAC;QAC7D,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAC;QAC/C,aAAa,EAAE,qBAAqB,CAAC,MAAM,CAAC;QAC5C,cAAc,EAAE,qBAAqB,CAAC,UAAU,CAAC;QACjD,aAAa,EAAE,qBAAqB,CAAC,SAAS,CAAC;QAE/C,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;YACrD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,gBAAgB,CACnD,oBAAoB,CAAC,YAAY,CAAC,EAClC;gBACE,IAAI,EAAE;oBACJ,OAAO,EAAE,IAAI,IAAI,EAAE;oBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;iBAClC;aACF,EACD,EAAE,cAAc,EAAE,OAAO,EAAE,CAC5B,CAAC;YAEF,MAAM,IAAI,CAAC,mBAAmB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAE/D,MAAM,MAAM,GAAG,cAAc,CAAC;YAC9B,MAAM,qBAAqB,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC;YAE/F,OAAO,oBAAoB,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC;QAC/E,CAAC;QAED,YAAY;QACZ,6BAA6B,EAAE,KAAK,EAAE,MAAc,EAAE,EAAE;YACtD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC;gBACpD,MAAM;gBACN,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAE;aAC/E,CAAC,CAAC;YACH,OAAO,YAAY,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}