@unchainedshop/core-enrollments 4.3.3 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +108 -3
  2. package/lib/addToDate.d.ts +0 -1
  3. package/lib/addToDate.js +1 -6
  4. package/lib/db/EnrollmentsCollection.d.ts +8 -8
  5. package/lib/db/EnrollmentsCollection.js +8 -10
  6. package/lib/enrollments-index.d.ts +4 -5
  7. package/lib/enrollments-index.js +4 -5
  8. package/lib/enrollments-settings.d.ts +1 -2
  9. package/lib/enrollments-settings.js +0 -1
  10. package/lib/module/configureEnrollmentsModule.d.ts +4 -5
  11. package/lib/module/configureEnrollmentsModule.js +4 -8
  12. package/package.json +11 -10
  13. package/lib/addToDate.d.ts.map +0 -1
  14. package/lib/addToDate.js.map +0 -1
  15. package/lib/db/EnrollmentStatus.d.ts +0 -7
  16. package/lib/db/EnrollmentStatus.d.ts.map +0 -1
  17. package/lib/db/EnrollmentStatus.js +0 -8
  18. package/lib/db/EnrollmentStatus.js.map +0 -1
  19. package/lib/db/EnrollmentsCollection.d.ts.map +0 -1
  20. package/lib/db/EnrollmentsCollection.js.map +0 -1
  21. package/lib/db/EnrollmentsSchema.d.ts +0 -4
  22. package/lib/db/EnrollmentsSchema.d.ts.map +0 -1
  23. package/lib/db/EnrollmentsSchema.js +0 -46
  24. package/lib/db/EnrollmentsSchema.js.map +0 -1
  25. package/lib/director/EnrollmentAdapter.d.ts +0 -7
  26. package/lib/director/EnrollmentAdapter.d.ts.map +0 -1
  27. package/lib/director/EnrollmentAdapter.js +0 -73
  28. package/lib/director/EnrollmentAdapter.js.map +0 -1
  29. package/lib/director/EnrollmentDirector.d.ts +0 -3
  30. package/lib/director/EnrollmentDirector.d.ts.map +0 -1
  31. package/lib/director/EnrollmentDirector.js +0 -46
  32. package/lib/director/EnrollmentDirector.js.map +0 -1
  33. package/lib/director/EnrollmentError.d.ts +0 -7
  34. package/lib/director/EnrollmentError.d.ts.map +0 -1
  35. package/lib/director/EnrollmentError.js +0 -8
  36. package/lib/director/EnrollmentError.js.map +0 -1
  37. package/lib/enrollments-index.d.ts.map +0 -1
  38. package/lib/enrollments-index.js.map +0 -1
  39. package/lib/enrollments-settings.d.ts.map +0 -1
  40. package/lib/enrollments-settings.js.map +0 -1
  41. package/lib/module/configureEnrollmentsModule.d.ts.map +0 -1
  42. package/lib/module/configureEnrollmentsModule.js.map +0 -1
  43. package/src/addToDate.ts +0 -58
  44. package/src/db/EnrollmentsCollection.ts +0 -99
  45. package/src/enrollments-index.ts +0 -4
  46. package/src/enrollments-settings.ts +0 -22
  47. package/src/module/buildFindSelector.test.ts +0 -43
  48. package/src/module/configureEnrollmentsModule.ts +0 -308
  49. package/tsconfig.json +0 -10
package/README.md CHANGED
@@ -1,5 +1,110 @@
1
- # Enrollments (Unchained Engine)
1
+ [![npm version](https://img.shields.io/npm/v/@unchainedshop/core-enrollments.svg)](https://npmjs.com/package/@unchainedshop/core-enrollments)
2
+ [![License: EUPL-1.2](https://img.shields.io/badge/License-EUPL--1.2-blue.svg)](https://opensource.org/licenses/EUPL-1.2)
2
3
 
3
- This package contains business logic and database abstraction for enrollments in Unchained.
4
+ # @unchainedshop/core-enrollments
4
5
 
5
- Find documentation of available [settings](https://docs.unchained.shop/config/enrollments/) here
6
+ Enrollment (subscription) management module for the Unchained Engine. Handles recurring subscriptions, subscription periods, and automatic order generation.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @unchainedshop/core-enrollments
12
+ ```
13
+
14
+ ## Usage
15
+
16
+ ```typescript
17
+ import { configureEnrollmentsModule, EnrollmentStatus } from '@unchainedshop/core-enrollments';
18
+
19
+ const enrollmentsModule = await configureEnrollmentsModule({ db });
20
+
21
+ // Create an enrollment
22
+ const enrollmentId = await enrollmentsModule.create({
23
+ userId: 'user-123',
24
+ productId: 'plan-product-456',
25
+ quantity: 1,
26
+ });
27
+
28
+ // Activate enrollment
29
+ await enrollmentsModule.activate(enrollmentId);
30
+
31
+ // Find active enrollments
32
+ const enrollments = await enrollmentsModule.findEnrollments({
33
+ status: EnrollmentStatus.ACTIVE,
34
+ });
35
+ ```
36
+
37
+ ## API Overview
38
+
39
+ ### Module Configuration
40
+
41
+ | Export | Description |
42
+ |--------|-------------|
43
+ | `configureEnrollmentsModule` | Configure and return the enrollments module |
44
+
45
+ ### Queries
46
+
47
+ | Method | Description |
48
+ |--------|-------------|
49
+ | `findEnrollment` | Find enrollment by ID |
50
+ | `findEnrollments` | Find enrollments with filtering and pagination |
51
+ | `count` | Count enrollments matching query |
52
+ | `enrollmentExists` | Check if enrollment exists |
53
+
54
+ ### Mutations
55
+
56
+ | Method | Description |
57
+ |--------|-------------|
58
+ | `create` | Create a new enrollment |
59
+ | `update` | Update enrollment data |
60
+ | `delete` | Delete an enrollment |
61
+ | `activate` | Activate an enrollment |
62
+ | `terminate` | Terminate an enrollment |
63
+
64
+ ### Period Management
65
+
66
+ | Method | Description |
67
+ |--------|-------------|
68
+ | `addPeriod` | Add a billing period |
69
+ | `findPeriod` | Find a specific period |
70
+ | `isExpired` | Check if enrollment is expired |
71
+
72
+ ### Utilities
73
+
74
+ | Export | Description |
75
+ |--------|-------------|
76
+ | `addToDate` | Add time interval to date |
77
+
78
+ ### Constants
79
+
80
+ | Export | Description |
81
+ |--------|-------------|
82
+ | `EnrollmentStatus` | Status values (INITIAL, ACTIVE, PAUSED, TERMINATED) |
83
+
84
+ ### Settings
85
+
86
+ | Export | Description |
87
+ |--------|-------------|
88
+ | `enrollmentsSettings` | Access enrollment module settings |
89
+
90
+ ### Types
91
+
92
+ | Export | Description |
93
+ |--------|-------------|
94
+ | `Enrollment` | Enrollment document type |
95
+ | `EnrollmentPeriod` | Period document type |
96
+ | `EnrollmentsModule` | Module interface type |
97
+
98
+ ## Events
99
+
100
+ | Event | Description |
101
+ |-------|-------------|
102
+ | `ENROLLMENT_CREATE` | Enrollment created |
103
+ | `ENROLLMENT_UPDATE` | Enrollment updated |
104
+ | `ENROLLMENT_REMOVE` | Enrollment deleted |
105
+ | `ENROLLMENT_ACTIVATE` | Enrollment activated |
106
+ | `ENROLLMENT_TERMINATE` | Enrollment terminated |
107
+
108
+ ## License
109
+
110
+ EUPL-1.2
@@ -1,2 +1 @@
1
1
  export declare function addToDate(t: any, o: any, e?: any): any;
2
- //# sourceMappingURL=addToDate.d.ts.map
package/lib/addToDate.js CHANGED
@@ -1,6 +1,3 @@
1
- /* eslint-disable */
2
- // @ts-nocheck
3
- /* esm.sh - esbuild bundle(date-fns@4.1.0/add) es2022 production */
4
1
  const F = Math.pow(10, 8) * 24 * 60 * 60 * 1e3, b = -F;
5
2
  const N = 3600;
6
3
  const a = N * 24, k = a * 7, Y = a * 365.2425, T = Y / 12, w = T * 3, p = Symbol.for('constructDateFrom');
@@ -9,7 +6,7 @@ function r(t, o) {
9
6
  ? t(o)
10
7
  : t && typeof t == 'object' && p in t
11
8
  ? t[p](o)
12
- : t instanceof Date // @ts-ignore
9
+ : t instanceof Date
13
10
  ? new t.constructor(o)
14
11
  : new Date(o);
15
12
  }
@@ -35,5 +32,3 @@ export function addToDate(t, o, e) {
35
32
  let { years: n = 0, months: i = 0, weeks: s = 0, days: m = 0, hours: I = 0, minutes: l = 0, seconds: h = 0, } = o, u = c(t, e?.in), d = i || n ? x(u, i + n * 12) : u, y = m || s ? f(d, m + s * 7) : d, D = l + I * 60, M = (h + D * 60) * 1e3;
36
33
  return r(e?.in || t, +y + M);
37
34
  }
38
- //# sourceMappingURL=add.js.map
39
- //# sourceMappingURL=addToDate.js.map
@@ -1,5 +1,5 @@
1
1
  import { mongodb } from '@unchainedshop/mongodb';
2
- import { TimestampFields, LogFields, Address, Contact } from '@unchainedshop/mongodb';
2
+ import { type TimestampFields, type LogFields, type Address, type Contact } from '@unchainedshop/mongodb';
3
3
  export interface EnrollmentPeriod {
4
4
  start: Date;
5
5
  end: Date;
@@ -14,12 +14,13 @@ export interface EnrollmentPlan {
14
14
  productId: string;
15
15
  quantity: number;
16
16
  }
17
- export declare enum EnrollmentStatus {
18
- INITIAL = "INITIAL",
19
- ACTIVE = "ACTIVE",
20
- PAUSED = "PAUSED",
21
- TERMINATED = "TERMINATED"
22
- }
17
+ export declare const EnrollmentStatus: {
18
+ readonly INITIAL: "INITIAL";
19
+ readonly ACTIVE: "ACTIVE";
20
+ readonly PAUSED: "PAUSED";
21
+ readonly TERMINATED: "TERMINATED";
22
+ };
23
+ export type EnrollmentStatus = (typeof EnrollmentStatus)[keyof typeof EnrollmentStatus];
23
24
  export interface EnrollmentOrderPositionTemplate {
24
25
  context?: any;
25
26
  configuration?: {
@@ -61,4 +62,3 @@ export type Enrollment = {
61
62
  userId: string;
62
63
  } & LogFields & TimestampFields;
63
64
  export declare const EnrollmentsCollection: (db: mongodb.Db) => Promise<mongodb.Collection<Enrollment>>;
64
- //# sourceMappingURL=EnrollmentsCollection.d.ts.map
@@ -1,11 +1,11 @@
1
- import { buildDbIndexes, isDocumentDBCompatModeEnabled } from '@unchainedshop/mongodb';
2
- export var EnrollmentStatus;
3
- (function (EnrollmentStatus) {
4
- EnrollmentStatus["INITIAL"] = "INITIAL";
5
- EnrollmentStatus["ACTIVE"] = "ACTIVE";
6
- EnrollmentStatus["PAUSED"] = "PAUSED";
7
- EnrollmentStatus["TERMINATED"] = "TERMINATED";
8
- })(EnrollmentStatus || (EnrollmentStatus = {}));
1
+ import { mongodb, buildDbIndexes, isDocumentDBCompatModeEnabled } from '@unchainedshop/mongodb';
2
+ import {} from '@unchainedshop/mongodb';
3
+ export const EnrollmentStatus = {
4
+ INITIAL: 'INITIAL',
5
+ ACTIVE: 'ACTIVE',
6
+ PAUSED: 'PAUSED',
7
+ TERMINATED: 'TERMINATED',
8
+ };
9
9
  export const EnrollmentsCollection = async (db) => {
10
10
  const Enrollments = db.collection('enrollments');
11
11
  if (!isDocumentDBCompatModeEnabled()) {
@@ -33,7 +33,6 @@ export const EnrollmentsCollection = async (db) => {
33
33
  },
34
34
  ]);
35
35
  }
36
- // Enrollment Indexes
37
36
  await buildDbIndexes(Enrollments, [
38
37
  { index: { userId: 1 } },
39
38
  { index: { productId: 1 } },
@@ -42,4 +41,3 @@ export const EnrollmentsCollection = async (db) => {
42
41
  ]);
43
42
  return Enrollments;
44
43
  };
45
- //# sourceMappingURL=EnrollmentsCollection.js.map
@@ -1,5 +1,4 @@
1
- export * from './db/EnrollmentsCollection.js';
2
- export * from './module/configureEnrollmentsModule.js';
3
- export * from './enrollments-settings.js';
4
- export * from './addToDate.js';
5
- //# sourceMappingURL=enrollments-index.d.ts.map
1
+ export * from './db/EnrollmentsCollection.ts';
2
+ export * from './module/configureEnrollmentsModule.ts';
3
+ export * from './enrollments-settings.ts';
4
+ export * from './addToDate.ts';
@@ -1,5 +1,4 @@
1
- export * from './db/EnrollmentsCollection.js';
2
- export * from './module/configureEnrollmentsModule.js';
3
- export * from './enrollments-settings.js';
4
- export * from './addToDate.js';
5
- //# sourceMappingURL=enrollments-index.js.map
1
+ export * from "./db/EnrollmentsCollection.js";
2
+ export * from "./module/configureEnrollmentsModule.js";
3
+ export * from "./enrollments-settings.js";
4
+ export * from "./addToDate.js";
@@ -1,5 +1,5 @@
1
1
  import later from '@breejs/later';
2
- import { Enrollment } from './db/EnrollmentsCollection.js';
2
+ import type { Enrollment } from './db/EnrollmentsCollection.ts';
3
3
  export interface EnrollmentSettings {
4
4
  autoSchedulingSchedule: later.ScheduleData;
5
5
  enrollmentNumberHashFn: (enrollment: Enrollment, index: number) => string;
@@ -7,4 +7,3 @@ export interface EnrollmentSettings {
7
7
  }
8
8
  export type EnrollmentsSettingsOptions = Omit<Partial<typeof enrollmentsSettings>, 'configureSettings'>;
9
9
  export declare const enrollmentsSettings: EnrollmentSettings;
10
- //# sourceMappingURL=enrollments-settings.d.ts.map
@@ -9,4 +9,3 @@ export const enrollmentsSettings = {
9
9
  this.enrollmentNumberHashFn = enrollmentNumberHashFn || generateRandomHash;
10
10
  },
11
11
  };
12
- //# sourceMappingURL=enrollments-settings.js.map
@@ -1,7 +1,7 @@
1
- import { SortOption } from '@unchainedshop/utils';
2
- import { Enrollment, EnrollmentPeriod, EnrollmentPlan, EnrollmentStatus } from '../db/EnrollmentsCollection.js';
3
- import { mongodb, Address, Contact, ModuleInput } from '@unchainedshop/mongodb';
4
- import { EnrollmentsSettingsOptions } from '../enrollments-settings.js';
1
+ import { type SortOption } from '@unchainedshop/utils';
2
+ import { type Enrollment, type EnrollmentPeriod, type EnrollmentPlan, EnrollmentStatus } from '../db/EnrollmentsCollection.ts';
3
+ import { mongodb, type Address, type Contact, type ModuleInput } from '@unchainedshop/mongodb';
4
+ import { type EnrollmentsSettingsOptions } from '../enrollments-settings.ts';
5
5
  export interface EnrollmentQuery {
6
6
  status?: EnrollmentStatus[];
7
7
  userId?: string;
@@ -50,4 +50,3 @@ export declare const configureEnrollmentsModule: ({ db, options: enrollmentOptio
50
50
  deleteInactiveUserEnrollments: (userId: string) => Promise<number>;
51
51
  }>;
52
52
  export type EnrollmentsModule = Awaited<ReturnType<typeof configureEnrollmentsModule>>;
53
- //# sourceMappingURL=configureEnrollmentsModule.d.ts.map
@@ -1,9 +1,9 @@
1
1
  import { SortDirection } from '@unchainedshop/utils';
2
- import { EnrollmentStatus, } from '../db/EnrollmentsCollection.js';
2
+ import { EnrollmentStatus, } from "../db/EnrollmentsCollection.js";
3
3
  import { emit, registerEvents } from '@unchainedshop/events';
4
- import { generateDbFilterById, buildSortOptions, generateDbObjectId, assertDocumentDBCompatMode, } from '@unchainedshop/mongodb';
5
- import { EnrollmentsCollection } from '../db/EnrollmentsCollection.js';
6
- import { enrollmentsSettings } from '../enrollments-settings.js';
4
+ import { generateDbFilterById, buildSortOptions, mongodb, generateDbObjectId, assertDocumentDBCompatMode, } from '@unchainedshop/mongodb';
5
+ import { EnrollmentsCollection } from "../db/EnrollmentsCollection.js";
6
+ import { enrollmentsSettings } from "../enrollments-settings.js";
7
7
  const ENROLLMENT_EVENTS = [
8
8
  'ENROLLMENT_ADD_PERIOD',
9
9
  'ENROLLMENT_CREATE',
@@ -87,7 +87,6 @@ export const configureEnrollmentsModule = async ({ db, options: enrollmentOption
87
87
  return enrollment;
88
88
  };
89
89
  return {
90
- // Queries
91
90
  count: async (query) => {
92
91
  const enrollmentCount = await Enrollments.countDocuments(buildFindSelector(query));
93
92
  return enrollmentCount;
@@ -112,14 +111,12 @@ export const configureEnrollmentsModule = async ({ db, options: enrollmentOption
112
111
  });
113
112
  return enrollments.toArray();
114
113
  },
115
- // Transformations
116
114
  normalizedStatus: (enrollment) => {
117
115
  return enrollment.status === null
118
116
  ? EnrollmentStatus.INITIAL
119
117
  : enrollment.status;
120
118
  },
121
119
  isExpired,
122
- // Mutations
123
120
  addEnrollmentPeriod: async (enrollmentId, period) => {
124
121
  const { start, end, orderId, isTrial } = period;
125
122
  const selector = generateDbFilterById(enrollmentId);
@@ -210,4 +207,3 @@ export const configureEnrollmentsModule = async ({ db, options: enrollmentOption
210
207
  },
211
208
  };
212
209
  };
213
- //# sourceMappingURL=configureEnrollmentsModule.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-enrollments",
3
- "version": "4.3.3",
3
+ "version": "4.4.0",
4
4
  "main": "lib/enrollments-index.js",
5
5
  "types": "lib/enrollments-index.d.ts",
6
6
  "type": "module",
@@ -9,8 +9,8 @@
9
9
  "build": "tsc -b",
10
10
  "prepublishOnly": "npm run clean && npm run build",
11
11
  "watch": "tsc -w",
12
- "test": "tsx --test",
13
- "test:watch": "tsx --test --watch"
12
+ "test": "node --test",
13
+ "test:watch": "node --test --watch"
14
14
  },
15
15
  "repository": {
16
16
  "type": "git",
@@ -22,8 +22,10 @@
22
22
  "core"
23
23
  ],
24
24
  "authors": [
25
- "Joël Meiller",
26
- "Pascal Kaufmann"
25
+ "Pascal Kaufmann",
26
+ "Mikael Araya",
27
+ "Vedran Rudelj",
28
+ "Joël Meiller"
27
29
  ],
28
30
  "license": "EUPL-1.2",
29
31
  "bugs": {
@@ -32,14 +34,13 @@
32
34
  "homepage": "https://github.com/unchainedshop/unchained#readme",
33
35
  "dependencies": {
34
36
  "@breejs/later": "^4.2.0",
35
- "@unchainedshop/events": "^4.3.0",
36
- "@unchainedshop/logger": "^4.3.0",
37
- "@unchainedshop/utils": "^4.3.0"
37
+ "@unchainedshop/events": "^4.4.0",
38
+ "@unchainedshop/logger": "^4.4.0",
39
+ "@unchainedshop/utils": "^4.4.0"
38
40
  },
39
41
  "devDependencies": {
40
42
  "@types/breejs__later": "^4.1.5",
41
- "@types/node": "^24.0.13",
42
- "tsx": "^4.20.3",
43
+ "@types/node": "^25.0.0",
43
44
  "typescript": "^5.8.3"
44
45
  }
45
46
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"addToDate.d.ts","sourceRoot":"","sources":["../src/addToDate.ts"],"names":[],"mappings":"AAwCA,wBAAgB,SAAS,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,CAAC,CAAC,EAAE,GAAG,OAgBtC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"addToDate.js","sourceRoot":"","sources":["../src/addToDate.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare enum EnrollmentStatus {
2
- INITIAL = "INITIAL",
3
- ACTIVE = "ACTIVE",
4
- PAUSED = "PAUSED",
5
- TERMINATED = "TERMINATED"
6
- }
7
- //# sourceMappingURL=EnrollmentStatus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentStatus.d.ts","sourceRoot":"","sources":["../../src/db/EnrollmentStatus.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,UAAU,eAAe;CAC1B"}
@@ -1,8 +0,0 @@
1
- export var EnrollmentStatus;
2
- (function (EnrollmentStatus) {
3
- EnrollmentStatus["INITIAL"] = "INITIAL";
4
- EnrollmentStatus["ACTIVE"] = "ACTIVE";
5
- EnrollmentStatus["PAUSED"] = "PAUSED";
6
- EnrollmentStatus["TERMINATED"] = "TERMINATED";
7
- })(EnrollmentStatus || (EnrollmentStatus = {}));
8
- //# sourceMappingURL=EnrollmentStatus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentStatus.js","sourceRoot":"","sources":["../../src/db/EnrollmentStatus.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,6CAAyB,CAAA;AAC3B,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentsCollection.d.ts","sourceRoot":"","sources":["../../src/db/EnrollmentsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiD,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,gBAAgB;IAC1B,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,aAAa,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IACF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE;QACR,iBAAiB,EAAE,MAAM,CAAC;QAC1B,OAAO,CAAC,EAAE,GAAG,CAAC;KACf,CAAC;IACF,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,SAAS,GACX,eAAe,CAAC;AAElB,eAAO,MAAM,qBAAqB,GAAU,IAAI,OAAO,CAAC,EAAE,4CAsCzD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentsCollection.js","sourceRoot":"","sources":["../../src/db/EnrollmentsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,cAAc,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAgBhG,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,6CAAyB,CAAA;AAC3B,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAuCD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EAAE,EAAc,EAAE,EAAE;IAC5D,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAa,aAAa,CAAC,CAAC;IAE7D,IAAI,CAAC,6BAA6B,EAAE,EAAE,CAAC;QACrC,MAAM,cAAc,CAAa,WAAW,EAAE;YAC5C;gBACE,KAAK,EAAE;oBACL,GAAG,EAAE,MAAM;oBACX,MAAM,EAAE,MAAM;oBACd,gBAAgB,EAAE,MAAM;oBACxB,MAAM,EAAE,MAAM;oBACd,mBAAmB,EAAE,MAAM;oBAC3B,sBAAsB,EAAE,MAAM;iBACxB;gBACR,OAAO,EAAE;oBACP,OAAO,EAAE;wBACP,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,CAAC;wBACT,gBAAgB,EAAE,CAAC;wBACnB,mBAAmB,EAAE,CAAC;wBACtB,sBAAsB,EAAE,CAAC;wBACzB,MAAM,EAAE,CAAC;qBACV;oBACD,IAAI,EAAE,4BAA4B;iBACnC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,MAAM,cAAc,CAAa,WAAW,EAAE;QAC5C,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QACxB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;QAC3B,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;QACxB,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,EAAE,EAAE;KACnC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import SimpleSchema from 'simpl-schema';
2
- export declare const PeriodSchema: SimpleSchema;
3
- export declare const EnrollmentsSchema: SimpleSchema;
4
- //# sourceMappingURL=EnrollmentsSchema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentsSchema.d.ts","sourceRoot":"","sources":["../../src/db/EnrollmentsSchema.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,eAAO,MAAM,YAAY,cAUxB,CAAC;AAEF,eAAO,MAAM,iBAAiB,cAqC7B,CAAC"}
@@ -1,46 +0,0 @@
1
- import { Schemas } from '@unchainedshop/utils';
2
- import SimpleSchema from 'simpl-schema';
3
- export const PeriodSchema = new SimpleSchema({
4
- orderId: { type: String },
5
- start: { type: Date, required: true },
6
- end: { type: Date, required: true },
7
- isTrial: { type: Boolean },
8
- }, {
9
- requiredByDefault: false,
10
- });
11
- export const EnrollmentsSchema = new SimpleSchema({
12
- userId: { type: String, required: true },
13
- status: { type: String, required: true },
14
- productId: { type: String, required: true },
15
- quantity: { type: Number },
16
- configuration: Array,
17
- 'configuration.$': {
18
- type: Object,
19
- required: true,
20
- },
21
- 'configuration.$.key': {
22
- type: String,
23
- required: true,
24
- },
25
- 'configuration.$.value': {
26
- type: String,
27
- },
28
- enrollmentNumber: String,
29
- expires: Date,
30
- meta: { type: Object, blackbox: true },
31
- billingAddress: Schemas.Address,
32
- contact: Schemas.Contact,
33
- currencyCode: String,
34
- countryCode: String,
35
- payment: { type: Object },
36
- 'payment.paymentProviderId': String,
37
- 'payment.context': Schemas.contextFields.context,
38
- delivery: { type: Object },
39
- 'delivery.deliveryProviderId': String,
40
- 'delivery.context': Schemas.contextFields.context,
41
- periods: { type: Array },
42
- 'periods.$': { type: PeriodSchema, required: true },
43
- ...Schemas.logFields,
44
- ...Schemas.timestampFields,
45
- }, { requiredByDefault: false });
46
- //# sourceMappingURL=EnrollmentsSchema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentsSchema.js","sourceRoot":"","sources":["../../src/db/EnrollmentsSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,CAC1C;IACE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACzB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IACrC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;CAC3B,EACD;IACE,iBAAiB,EAAE,KAAK;CACzB,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,YAAY,CAC/C;IACE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC3C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC1B,aAAa,EAAE,KAAK;IACpB,iBAAiB,EAAE;QACjB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,MAAM;KACb;IACD,gBAAgB,EAAE,MAAM;IACxB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACtC,cAAc,EAAE,OAAO,CAAC,OAAO;IAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IACzB,2BAA2B,EAAE,MAAM;IACnC,iBAAiB,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO;IAChD,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;IAC1B,6BAA6B,EAAE,MAAM;IACrC,kBAAkB,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO;IACjD,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;IACxB,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnD,GAAG,OAAO,CAAC,SAAS;IACpB,GAAG,OAAO,CAAC,eAAe;CAC3B,EACD,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAC"}
@@ -1,7 +0,0 @@
1
- import { IEnrollmentAdapter } from '@unchainedshop/types/enrollments.js';
2
- export declare const periodForReferenceDate: (referenceDate: Date, intervalCount?: number, interval?: string) => {
3
- start: Date;
4
- end: Date;
5
- };
6
- export declare const EnrollmentAdapter: Omit<IEnrollmentAdapter, 'key' | 'label' | 'version'>;
7
- //# sourceMappingURL=EnrollmentAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentAdapter.d.ts","sourceRoot":"","sources":["../../src/director/EnrollmentAdapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,eAAO,MAAM,sBAAsB,kBAAmB,IAAI;;;CAgBzD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,CA2DnF,CAAC"}
@@ -1,73 +0,0 @@
1
- import { log, LogLevel } from '@unchainedshop/logger';
2
- import * as dateFns from 'date-fns/add';
3
- export const periodForReferenceDate = (referenceDate, intervalCount = 1, interval = 'WEEKS') => {
4
- const lowerCaseInterval = interval.toLowerCase();
5
- const start = new Date(referenceDate);
6
- if (lowerCaseInterval === 'hours') {
7
- start.setMinutes(0, 0, 0);
8
- }
9
- else {
10
- start.setSeconds(0, 0);
11
- }
12
- return {
13
- start,
14
- end: dateFns.add(start, {
15
- [lowerCaseInterval]: intervalCount,
16
- }),
17
- };
18
- };
19
- export const EnrollmentAdapter = {
20
- isActivatedFor: () => {
21
- return false;
22
- },
23
- transformOrderItemToEnrollmentPlan: async (item) => {
24
- return {
25
- configuration: item.configuration,
26
- productId: item.productId,
27
- quantity: item.quantity,
28
- };
29
- },
30
- actions: (context) => {
31
- return {
32
- configurationForOrder: async () => {
33
- throw new Error(`Not implemented on EnrollmentAdapter`);
34
- },
35
- isOverdue: async () => false,
36
- isValidForActivation: async () => false,
37
- nextPeriod: async () => {
38
- const { enrollment } = context;
39
- const product = await context.modules.products.findProduct({
40
- productId: enrollment.productId,
41
- });
42
- const plan = product?.plan;
43
- const referenceDate = new Date();
44
- if (!plan)
45
- return null;
46
- if (plan.trialIntervalCount && !enrollment?.periods?.length) {
47
- return {
48
- ...periodForReferenceDate(referenceDate, plan.trialIntervalCount, plan.trialInterval),
49
- isTrial: true,
50
- };
51
- }
52
- const lastEnd = enrollment?.periods?.reduce((acc, item) => {
53
- if (!acc)
54
- return item.end;
55
- const endDate = new Date(item.end);
56
- if (acc.getTime() < endDate.getTime()) {
57
- return endDate;
58
- }
59
- return acc;
60
- }, referenceDate);
61
- return {
62
- ...periodForReferenceDate(lastEnd, plan.billingIntervalCount, plan.billingInterval),
63
- isTrial: false,
64
- };
65
- },
66
- };
67
- },
68
- // eslint-disable-next-line
69
- log(message, { level = LogLevel.Debug, ...options } = {}) {
70
- return log(message, { level, ...options });
71
- },
72
- };
73
- //# sourceMappingURL=EnrollmentAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentAdapter.js","sourceRoot":"","sources":["../../src/director/EnrollmentAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AAIxC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,aAAmB,EAAE,aAAa,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,EAAE;IACnG,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEjD,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,iBAAiB,KAAK,OAAO,EAAE,CAAC;QAClC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO;QACL,KAAK;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;YACtB,CAAC,iBAAiB,CAAC,EAAE,aAAa;SACnC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA0D;IACtF,cAAc,EAAE,GAAG,EAAE;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kCAAkC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACjD,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;QACnB,OAAO;YACL,qBAAqB,EAAE,KAAK,IAAI,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YAED,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;YAC5B,oBAAoB,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;YAEvC,UAAU,EAAE,KAAK,IAAI,EAAE;gBACrB,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;gBAC/B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACzD,SAAS,EAAE,UAAU,CAAC,SAAS;iBAChC,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;gBAC3B,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAEvB,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;oBAC5D,OAAO;wBACL,GAAG,sBAAsB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC;wBACrF,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;oBACxD,IAAI,CAAC,GAAG;wBAAE,OAAO,IAAI,CAAC,GAAG,CAAC;oBAC1B,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;wBACtC,OAAO,OAAO,CAAC;oBACjB,CAAC;oBACD,OAAO,GAAG,CAAC;gBACb,CAAC,EAAE,aAAa,CAAC,CAAC;gBAElB,OAAO;oBACL,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC;oBACnF,OAAO,EAAE,KAAK;iBACf,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,GAAG,CAAC,OAAe,EAAE,EAAE,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;QAC9D,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC"}
@@ -1,3 +0,0 @@
1
- import { IEnrollmentDirector } from '@unchainedshop/types/enrollments.js';
2
- export declare const EnrollmentDirector: IEnrollmentDirector;
3
- //# sourceMappingURL=EnrollmentDirector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentDirector.d.ts","sourceRoot":"","sources":["../../src/director/EnrollmentDirector.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,mBAAmB,EACpB,MAAM,qCAAqC,CAAC;AAsB7C,eAAO,MAAM,kBAAkB,EAAE,mBAqChC,CAAC"}
@@ -1,46 +0,0 @@
1
- import { log, LogLevel } from '@unchainedshop/logger';
2
- import { BaseDirector } from '@unchainedshop/utils';
3
- const baseDirector = BaseDirector('EnrollmentDirector', {
4
- adapterSortKey: 'orderIndex',
5
- });
6
- const findAppropriateAdapters = (productPlan) => baseDirector.getAdapters({
7
- adapterFilter: (Adapter) => {
8
- const activated = Adapter.isActivatedFor(productPlan);
9
- if (!activated) {
10
- log(`Enrollment Director -> ${Adapter.key} (${Adapter.version}) skipped`, {
11
- level: LogLevel.Warning,
12
- });
13
- }
14
- return activated;
15
- },
16
- });
17
- export const EnrollmentDirector = {
18
- ...baseDirector,
19
- transformOrderItemToEnrollment: async ({ orderPosition, product }, doc, unchainedAPI) => {
20
- const Adapter = findAppropriateAdapters(product.plan)?.[0];
21
- if (!Adapter) {
22
- throw new Error('No suitable enrollment plugin available for this item');
23
- }
24
- const enrollmentPlan = await Adapter.transformOrderItemToEnrollmentPlan(orderPosition, unchainedAPI);
25
- const enrollmentData = {
26
- ...doc,
27
- ...enrollmentPlan,
28
- configuration: [],
29
- };
30
- return enrollmentData;
31
- },
32
- actions: async (enrollmentContext, unchainedAPI) => {
33
- const context = { ...enrollmentContext, ...unchainedAPI };
34
- // Resolve adapter
35
- const product = await context.modules.products.findProduct({
36
- productId: context.enrollment.productId,
37
- });
38
- const Adapter = findAppropriateAdapters(product?.plan)?.[0];
39
- if (!Adapter) {
40
- throw new Error('No suitable enrollment plugin available for this plan configuration');
41
- }
42
- const adapter = Adapter.actions(context);
43
- return adapter;
44
- },
45
- };
46
- //# sourceMappingURL=EnrollmentDirector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentDirector.js","sourceRoot":"","sources":["../../src/director/EnrollmentDirector.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,YAAY,GAAG,YAAY,CAAqB,oBAAoB,EAAE;IAC1E,cAAc,EAAE,YAAY;CAC7B,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,WAAyB,EAAE,EAAE,CAC5D,YAAY,CAAC,WAAW,CAAC;IACvB,aAAa,EAAE,CAAC,OAA2B,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,0BAA0B,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,OAAO,WAAW,EAAE;gBACxE,KAAK,EAAE,QAAQ,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,GAAG,YAAY;IAEf,8BAA8B,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE;QACtF,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,kCAAkC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAErG,MAAM,cAAc,GAAmB;YACrC,GAAG,GAAG;YACN,GAAG,cAAc;YACjB,aAAa,EAAE,EAAE;SAClB,CAAC;QAEF,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,EAAE,GAAG,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAAC;QAE1D,kBAAkB;QAClB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzD,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,SAAS;SACxC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC"}
@@ -1,7 +0,0 @@
1
- export declare enum EnrollmentError {
2
- ADAPTER_NOT_FOUND = "ADAPTER_NOT_FOUND",
3
- NOT_IMPLEMENTED = "NOT_IMPLEMENTED",
4
- INCOMPLETE_CONFIGURATION = "INCOMPLETE_CONFIGURATION",
5
- WRONG_CREDENTIALS = "WRONG_CREDENTIALS"
6
- }
7
- //# sourceMappingURL=EnrollmentError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentError.d.ts","sourceRoot":"","sources":["../../src/director/EnrollmentError.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IACnC,wBAAwB,6BAA6B;IACrD,iBAAiB,sBAAsB;CACxC"}
@@ -1,8 +0,0 @@
1
- export var EnrollmentError;
2
- (function (EnrollmentError) {
3
- EnrollmentError["ADAPTER_NOT_FOUND"] = "ADAPTER_NOT_FOUND";
4
- EnrollmentError["NOT_IMPLEMENTED"] = "NOT_IMPLEMENTED";
5
- EnrollmentError["INCOMPLETE_CONFIGURATION"] = "INCOMPLETE_CONFIGURATION";
6
- EnrollmentError["WRONG_CREDENTIALS"] = "WRONG_CREDENTIALS";
7
- })(EnrollmentError || (EnrollmentError = {}));
8
- //# sourceMappingURL=EnrollmentError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnrollmentError.js","sourceRoot":"","sources":["../../src/director/EnrollmentError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,0DAAuC,CAAA;IACvC,sDAAmC,CAAA;IACnC,wEAAqD,CAAA;IACrD,0DAAuC,CAAA;AACzC,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"enrollments-index.d.ts","sourceRoot":"","sources":["../src/enrollments-index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"enrollments-index.js","sourceRoot":"","sources":["../src/enrollments-index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"enrollments-settings.d.ts","sourceRoot":"","sources":["../src/enrollments-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,MAAM,WAAW,kBAAkB;IACjC,sBAAsB,EAAE,KAAK,CAAC,YAAY,CAAC;IAC3C,sBAAsB,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1E,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,0BAA0B,KAAK,IAAI,CAAC;CACnE;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,mBAAmB,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAExG,eAAO,MAAM,mBAAmB,EAAE,kBAOjC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"enrollments-settings.js","sourceRoot":"","sources":["../src/enrollments-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAU/D,MAAM,CAAC,MAAM,mBAAmB,GAAuB;IACrD,sBAAsB,EAAE,iBAAiB;IACzC,sBAAsB,EAAE,kBAAkB;IAC1C,iBAAiB,CAAC,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,GAAG,EAAE;QACvE,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,IAAI,iBAAiB,CAAC;QAC1E,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,IAAI,kBAAkB,CAAC;IAC7E,CAAC;CACF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureEnrollmentsModule.d.ts","sourceRoot":"","sources":["../../src/module/configureEnrollmentsModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAGL,OAAO,EACP,OAAO,EACP,OAAO,EAEP,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAuB,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7F,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AASD,eAAO,MAAM,iBAAiB,GAAI,iCAAiC,eAAe,+BAYjF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,qCAG9C,WAAW,CAAC,0BAA0B,CAAC;mBAsFjB,eAAe;+CAIa;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;6BAO5D;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,YAC5C,OAAO,CAAC,WAAW;yDAgB5B,eAAe,GAAG;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;KACrB,KAAG,OAAO,CAAC,UAAU,EAAE,CAAC;mCAYM,UAAU,KAAG,gBAAgB;4BA3H/B,UAAU,qBAAqB;QAAE,aAAa,CAAC,EAAE,IAAI,CAAA;KAAE;wCAoI1C,MAAM,UAAU,gBAAgB;+DAgCvE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC,GACnE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,KAAG,OAAO,CAAC,UAAU,CAAC;2BAoBvC,MAAM;oDAamB,MAAM,WAAW,MAAM;yCAxIxD,MAAM;kCAAN,MAAM;kCAAN,MAAM;mCAAN,MAAM;;;;kCAAN,MAAM;;;;+BA8JM,MAAM,QAAQ,cAAc;iCA5M/C,MAAM,oBACG;QAAE,MAAM,EAAE,gBAAgB,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;4CA8NpB,MAAM;EAQvD,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureEnrollmentsModule.js","sourceRoot":"","sources":["../../src/module/configureEnrollmentsModule.ts"],"names":[],"mappings":"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"}
package/src/addToDate.ts DELETED
@@ -1,58 +0,0 @@
1
- /* eslint-disable */
2
- // @ts-nocheck
3
-
4
- /* esm.sh - esbuild bundle(date-fns@4.1.0/add) es2022 production */
5
- const F = Math.pow(10, 8) * 24 * 60 * 60 * 1e3,
6
- b = -F;
7
- const N = 3600;
8
- const a = N * 24,
9
- k = a * 7,
10
- Y = a * 365.2425,
11
- T = Y / 12,
12
- w = T * 3,
13
- p = Symbol.for('constructDateFrom');
14
- function r(t, o) {
15
- return typeof t == 'function'
16
- ? t(o)
17
- : t && typeof t == 'object' && p in t
18
- ? t[p](o)
19
- : t instanceof Date // @ts-ignore
20
- ? new t.constructor(o)
21
- : new Date(o);
22
- }
23
- function c(t, o) {
24
- return r(o || t, t);
25
- }
26
- function f(t, o, e) {
27
- const n = c(t, e?.in);
28
- return isNaN(o) ? r(e?.in || t, NaN) : (o && n.setDate(n.getDate() + o), n);
29
- }
30
- function x(t, o, e) {
31
- const n = c(t, e?.in);
32
- if (isNaN(o)) return r(e?.in || t, NaN);
33
- if (!o) return n;
34
- const i = n.getDate(),
35
- s = r(e?.in || t, n.getTime());
36
- s.setMonth(n.getMonth() + o + 1, 0);
37
- const m = s.getDate();
38
- return i >= m ? s : (n.setFullYear(s.getFullYear(), s.getMonth(), i), n);
39
- }
40
-
41
- export function addToDate(t, o, e?: any) {
42
- let {
43
- years: n = 0,
44
- months: i = 0,
45
- weeks: s = 0,
46
- days: m = 0,
47
- hours: I = 0,
48
- minutes: l = 0,
49
- seconds: h = 0,
50
- } = o,
51
- u = c(t, e?.in),
52
- d = i || n ? x(u, i + n * 12) : u,
53
- y = m || s ? f(d, m + s * 7) : d,
54
- D = l + I * 60,
55
- M = (h + D * 60) * 1e3;
56
- return r(e?.in || t, +y + M);
57
- }
58
- //# sourceMappingURL=add.js.map
@@ -1,99 +0,0 @@
1
- import { mongodb, buildDbIndexes, isDocumentDBCompatModeEnabled } from '@unchainedshop/mongodb';
2
- import { TimestampFields, LogFields, Address, Contact } from '@unchainedshop/mongodb';
3
-
4
- export interface EnrollmentPeriod {
5
- start: Date;
6
- end: Date;
7
- orderId?: string;
8
- isTrial?: boolean;
9
- }
10
-
11
- export interface EnrollmentPlan {
12
- configuration: { key: string; value: string }[] | null;
13
- productId: string;
14
- quantity: number;
15
- }
16
-
17
- export enum EnrollmentStatus {
18
- INITIAL = 'INITIAL',
19
- ACTIVE = 'ACTIVE',
20
- PAUSED = 'PAUSED',
21
- TERMINATED = 'TERMINATED',
22
- }
23
-
24
- export interface EnrollmentOrderPositionTemplate {
25
- context?: any;
26
- configuration?: { key: string; value: string }[];
27
- originalProductId: string;
28
- productId: string;
29
- quantity: number;
30
- quotationId?: string;
31
- }
32
-
33
- export type Enrollment = {
34
- _id: string;
35
- billingAddress: Address;
36
- configuration: { key: string; value: string }[] | null;
37
- contact: Contact;
38
- context?: any;
39
- countryCode: string;
40
- currencyCode: string;
41
- delivery: {
42
- deliveryProviderId?: string;
43
- context?: any;
44
- };
45
- enrollmentNumber?: string;
46
- orderIdForFirstPeriod?: string;
47
- expires?: Date;
48
- meta?: any;
49
- payment?: {
50
- paymentProviderId: string;
51
- context?: any;
52
- };
53
- periods: EnrollmentPeriod[];
54
- productId: string;
55
- quantity?: number;
56
- status: EnrollmentStatus | null;
57
- userId: string;
58
- } & LogFields &
59
- TimestampFields;
60
-
61
- export const EnrollmentsCollection = async (db: mongodb.Db) => {
62
- const Enrollments = db.collection<Enrollment>('enrollments');
63
-
64
- if (!isDocumentDBCompatModeEnabled()) {
65
- await buildDbIndexes<Enrollment>(Enrollments, [
66
- {
67
- index: {
68
- _id: 'text',
69
- userId: 'text',
70
- enrollmentNumber: 'text',
71
- status: 'text',
72
- 'contact.telNumber': 'text',
73
- 'contact.emailAddress': 'text',
74
- } as any,
75
- options: {
76
- weights: {
77
- _id: 8,
78
- userId: 3,
79
- enrollmentNumber: 6,
80
- 'contact.telNumber': 5,
81
- 'contact.emailAddress': 4,
82
- status: 1,
83
- },
84
- name: 'enrollment_fulltext_search',
85
- },
86
- },
87
- ]);
88
- }
89
-
90
- // Enrollment Indexes
91
- await buildDbIndexes<Enrollment>(Enrollments, [
92
- { index: { userId: 1 } },
93
- { index: { productId: 1 } },
94
- { index: { status: 1 } },
95
- { index: { enrollmentNumber: 1 } },
96
- ]);
97
-
98
- return Enrollments;
99
- };
@@ -1,4 +0,0 @@
1
- export * from './db/EnrollmentsCollection.js';
2
- export * from './module/configureEnrollmentsModule.js';
3
- export * from './enrollments-settings.js';
4
- export * from './addToDate.js';
@@ -1,22 +0,0 @@
1
- import later from '@breejs/later';
2
- import { generateRandomHash } from '@unchainedshop/utils';
3
- import { Enrollment } from './db/EnrollmentsCollection.js';
4
-
5
- const everyHourSchedule = later.parse.text('every 59 minutes');
6
-
7
- export interface EnrollmentSettings {
8
- autoSchedulingSchedule: later.ScheduleData;
9
- enrollmentNumberHashFn: (enrollment: Enrollment, index: number) => string;
10
- configureSettings: (options?: EnrollmentsSettingsOptions) => void;
11
- }
12
-
13
- export type EnrollmentsSettingsOptions = Omit<Partial<typeof enrollmentsSettings>, 'configureSettings'>;
14
-
15
- export const enrollmentsSettings: EnrollmentSettings = {
16
- autoSchedulingSchedule: everyHourSchedule,
17
- enrollmentNumberHashFn: generateRandomHash,
18
- configureSettings({ autoSchedulingSchedule, enrollmentNumberHashFn } = {}) {
19
- this.autoSchedulingSchedule = autoSchedulingSchedule || everyHourSchedule;
20
- this.enrollmentNumberHashFn = enrollmentNumberHashFn || generateRandomHash;
21
- },
22
- };
@@ -1,43 +0,0 @@
1
- import { describe, it } from 'node:test';
2
- import assert from 'node:assert';
3
- import { buildFindSelector } from './configureEnrollmentsModule.js';
4
- import { EnrollmentStatus } from '../db/EnrollmentsCollection.js';
5
-
6
- describe('buildFindSelector', () => {
7
- it('Should correct filter when passed status, userId and queryString', () => {
8
- assert.deepStrictEqual(
9
- buildFindSelector({
10
- queryString: 'Hello World',
11
- status: [EnrollmentStatus.ACTIVE],
12
- userId: 'admin-id',
13
- }),
14
- {
15
- deleted: null,
16
- status: { $in: ['ACTIVE'] },
17
- userId: 'admin-id',
18
- $text: { $search: 'Hello World' },
19
- },
20
- );
21
- });
22
-
23
- it('Should correct filter when passed userId and queryString', () => {
24
- assert.deepStrictEqual(buildFindSelector({ queryString: 'Hello World', userId: 'admin-id' }), {
25
- deleted: null,
26
- userId: 'admin-id',
27
- $text: { $search: 'Hello World' },
28
- });
29
- });
30
-
31
- it('Should correct filter when passed queryString', () => {
32
- assert.deepStrictEqual(buildFindSelector({ queryString: 'Hello World' }), {
33
- deleted: null,
34
- $text: { $search: 'Hello World' },
35
- });
36
- });
37
-
38
- it('Should correct filter when passed no argument', () => {
39
- assert.deepStrictEqual(buildFindSelector({}), {
40
- deleted: null,
41
- });
42
- });
43
- });
@@ -1,308 +0,0 @@
1
- import { SortDirection, SortOption } from '@unchainedshop/utils';
2
- import {
3
- Enrollment,
4
- EnrollmentPeriod,
5
- EnrollmentPlan,
6
- EnrollmentStatus,
7
- } from '../db/EnrollmentsCollection.js';
8
- import { emit, registerEvents } from '@unchainedshop/events';
9
- import {
10
- generateDbFilterById,
11
- buildSortOptions,
12
- mongodb,
13
- Address,
14
- Contact,
15
- generateDbObjectId,
16
- ModuleInput,
17
- assertDocumentDBCompatMode,
18
- } from '@unchainedshop/mongodb';
19
- import { EnrollmentsCollection } from '../db/EnrollmentsCollection.js';
20
- import { enrollmentsSettings, EnrollmentsSettingsOptions } from '../enrollments-settings.js';
21
-
22
- export interface EnrollmentQuery {
23
- status?: EnrollmentStatus[];
24
- userId?: string;
25
- queryString?: string;
26
- }
27
-
28
- const ENROLLMENT_EVENTS: string[] = [
29
- 'ENROLLMENT_ADD_PERIOD',
30
- 'ENROLLMENT_CREATE',
31
- 'ENROLLMENT_REMOVE',
32
- 'ENROLLMENT_UPDATE',
33
- ];
34
-
35
- export const buildFindSelector = ({ queryString, status, userId }: EnrollmentQuery) => {
36
- const selector: mongodb.Filter<Enrollment> = {
37
- deleted: null,
38
- };
39
- if (status) selector.status = { $in: status };
40
- if (userId) selector.userId = userId;
41
-
42
- if (queryString) {
43
- assertDocumentDBCompatMode();
44
- selector.$text = { $search: queryString };
45
- }
46
- return selector;
47
- };
48
-
49
- export const configureEnrollmentsModule = async ({
50
- db,
51
- options: enrollmentOptions = {},
52
- }: ModuleInput<EnrollmentsSettingsOptions>) => {
53
- registerEvents(ENROLLMENT_EVENTS);
54
-
55
- enrollmentsSettings.configureSettings(enrollmentOptions);
56
-
57
- const Enrollments = await EnrollmentsCollection(db);
58
-
59
- const isExpired = (enrollment: Enrollment, { referenceDate }: { referenceDate?: Date }) => {
60
- const relevantDate = referenceDate ? new Date(referenceDate) : new Date();
61
- if (!enrollment.expires) return false;
62
- const expiryDate = new Date(enrollment.expires);
63
- return relevantDate.getTime() > expiryDate.getTime();
64
- };
65
-
66
- const findNewEnrollmentNumber = async (enrollment: Enrollment, index = 0): Promise<string> => {
67
- const newHashID = enrollmentsSettings.enrollmentNumberHashFn(enrollment, index);
68
- if ((await Enrollments.countDocuments({ enrollmentNumber: newHashID }, { limit: 1 })) === 0) {
69
- return newHashID;
70
- }
71
- return findNewEnrollmentNumber(enrollment, index + 1);
72
- };
73
-
74
- const updateStatus = async (
75
- enrollmentId: string,
76
- { status, info = '' }: { status: EnrollmentStatus; info?: string },
77
- ) => {
78
- const selector = generateDbFilterById(enrollmentId);
79
- const enrollment = await Enrollments.findOne(selector, {});
80
-
81
- if (!enrollment) return null;
82
- if (enrollment.status === status) return enrollment;
83
-
84
- const date = new Date();
85
- const modifier: {
86
- $set: Partial<Enrollment>;
87
- $push: { log: Enrollment['log'][0] };
88
- } = {
89
- $set: { status, updated: new Date() },
90
- $push: {
91
- log: {
92
- date,
93
- status,
94
- info,
95
- },
96
- },
97
- };
98
-
99
- switch (status) {
100
- case EnrollmentStatus.ACTIVE:
101
- modifier.$set.enrollmentNumber = await findNewEnrollmentNumber(enrollment);
102
- break;
103
- case EnrollmentStatus.TERMINATED:
104
- modifier.$set.expires = enrollment.periods?.pop()?.end || new Date();
105
- break;
106
- default:
107
- break;
108
- }
109
-
110
- const updatedEnrollment = await Enrollments.findOneAndUpdate(selector, modifier, {
111
- returnDocument: 'after',
112
- });
113
-
114
- await emit('ENROLLMENT_UPDATE', { enrollment, field: 'status' });
115
-
116
- return updatedEnrollment;
117
- };
118
-
119
- const updateEnrollmentField =
120
- <T>(fieldKey: string) =>
121
- async (enrollmentId: string, fieldValue: T) => {
122
- const enrollment = await Enrollments.findOneAndUpdate(
123
- generateDbFilterById(enrollmentId),
124
- {
125
- $set: {
126
- updated: new Date(),
127
- [fieldKey]: fieldValue,
128
- },
129
- },
130
- { returnDocument: 'after' },
131
- );
132
- await emit('ENROLLMENT_UPDATE', { enrollment, field: fieldKey });
133
- return enrollment;
134
- };
135
-
136
- return {
137
- // Queries
138
- count: async (query: EnrollmentQuery) => {
139
- const enrollmentCount = await Enrollments.countDocuments(buildFindSelector(query));
140
- return enrollmentCount;
141
- },
142
- openEnrollmentWithProduct: async ({ productId }: { productId: string }) => {
143
- const selector: mongodb.Filter<Enrollment> = { productId };
144
- selector.status = { $in: [EnrollmentStatus.ACTIVE, EnrollmentStatus.PAUSED] };
145
- return Enrollments.findOne(selector);
146
- },
147
-
148
- findEnrollment: async (
149
- params: { enrollmentId: string } | { orderId: string },
150
- options?: mongodb.FindOptions,
151
- ) => {
152
- if ('enrollmentId' in params) {
153
- return Enrollments.findOne(generateDbFilterById(params.enrollmentId), options);
154
- }
155
- return Enrollments.findOne(
156
- { 'periods.orderId': params.orderId, deleted: { $exists: false } },
157
- options,
158
- );
159
- },
160
-
161
- findEnrollments: async ({
162
- limit,
163
- offset,
164
- sort,
165
- ...query
166
- }: EnrollmentQuery & {
167
- limit?: number;
168
- offset?: number;
169
- sort?: SortOption[];
170
- }): Promise<Enrollment[]> => {
171
- const defaultSortOption: SortOption[] = [{ key: 'created', value: SortDirection.ASC }];
172
- const enrollments = Enrollments.find(buildFindSelector(query), {
173
- skip: offset,
174
- limit,
175
- sort: buildSortOptions(sort || defaultSortOption),
176
- });
177
-
178
- return enrollments.toArray();
179
- },
180
-
181
- // Transformations
182
- normalizedStatus: (enrollment: Enrollment): EnrollmentStatus => {
183
- return enrollment.status === null
184
- ? EnrollmentStatus.INITIAL
185
- : (enrollment.status as EnrollmentStatus);
186
- },
187
-
188
- isExpired,
189
-
190
- // Mutations
191
- addEnrollmentPeriod: async (enrollmentId: string, period: EnrollmentPeriod) => {
192
- const { start, end, orderId, isTrial } = period;
193
- const selector = generateDbFilterById(enrollmentId);
194
- const enrollment = await Enrollments.findOneAndUpdate(
195
- selector,
196
- {
197
- $push: {
198
- periods: {
199
- start,
200
- end,
201
- orderId,
202
- isTrial,
203
- },
204
- },
205
- $set: {
206
- updated: new Date(),
207
- },
208
- },
209
- {
210
- returnDocument: 'after',
211
- },
212
- );
213
-
214
- if (!enrollment) return null;
215
- await emit('ENROLLMENT_ADD_PERIOD', { enrollment });
216
- return enrollment;
217
- },
218
-
219
- create: async ({
220
- countryCode,
221
- currencyCode,
222
- ...enrollmentData
223
- }: Omit<Enrollment, 'status' | 'periods' | 'log' | '_id' | 'created'> &
224
- Pick<Partial<Enrollment>, '_id' | 'created'>): Promise<Enrollment> => {
225
- const { insertedId: enrollmentId } = await Enrollments.insertOne({
226
- _id: generateDbObjectId(),
227
- created: new Date(),
228
- ...enrollmentData,
229
- status: EnrollmentStatus.INITIAL,
230
- periods: [],
231
- currencyCode,
232
- countryCode,
233
- configuration: enrollmentData.configuration || [],
234
- log: [],
235
- });
236
-
237
- const enrollment = (await Enrollments.findOne({
238
- _id: enrollmentId,
239
- })) as Enrollment;
240
- await emit('ENROLLMENT_CREATE', { enrollment });
241
- return enrollment;
242
- },
243
-
244
- delete: async (enrollmentId: string) => {
245
- const { modifiedCount: deletedCount } = await Enrollments.updateOne(
246
- generateDbFilterById(enrollmentId),
247
- {
248
- $set: {
249
- deleted: new Date(),
250
- },
251
- },
252
- );
253
- await emit('ENROLLMENT_REMOVE', { enrollmentId });
254
- return deletedCount;
255
- },
256
-
257
- removeEnrollmentPeriodByOrderId: async (enrollmentId: string, orderId: string) => {
258
- const selector = generateDbFilterById(enrollmentId);
259
- return Enrollments.findOneAndUpdate(
260
- selector,
261
- {
262
- $set: {
263
- updated: new Date(),
264
- },
265
- $pull: {
266
- periods: { orderId: { $in: [orderId, undefined] } },
267
- },
268
- },
269
- { returnDocument: 'after' },
270
- );
271
- },
272
-
273
- updateBillingAddress: updateEnrollmentField<Address>('billingAddress'),
274
- updateContact: updateEnrollmentField<Contact>('contact'),
275
- updateContext: updateEnrollmentField<any>('meta'),
276
- updateDelivery: updateEnrollmentField<Enrollment['delivery']>('delivery'),
277
- updatePayment: updateEnrollmentField<Enrollment['payment']>('payment'),
278
-
279
- updatePlan: async (enrollmentId: string, plan: EnrollmentPlan) => {
280
- const enrollment = await Enrollments.findOneAndUpdate(
281
- generateDbFilterById(enrollmentId),
282
- {
283
- $set: {
284
- updated: new Date(),
285
- productId: plan.productId,
286
- quantity: plan.quantity,
287
- configuration: plan.configuration,
288
- },
289
- },
290
- { returnDocument: 'after' },
291
- );
292
- if (!enrollment) return null;
293
- await emit('ENROLLMENT_UPDATE', { enrollment, field: 'plan' });
294
- return enrollment;
295
- },
296
-
297
- updateStatus,
298
- deleteInactiveUserEnrollments: async (userId: string) => {
299
- const { deletedCount } = await Enrollments.deleteMany({
300
- userId,
301
- status: { $in: [null, EnrollmentStatus.INITIAL, EnrollmentStatus.TERMINATED] },
302
- });
303
- return deletedCount;
304
- },
305
- };
306
- };
307
-
308
- export type EnrollmentsModule = Awaited<ReturnType<typeof configureEnrollmentsModule>>;
package/tsconfig.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "../shared/base.tsconfig.json",
3
- "compilerOptions": {
4
- "declarationDir": "./lib",
5
- "rootDir": "./src",
6
- "outDir": "./lib",
7
-
8
- },
9
- "exclude": ["**/*.test.ts", "**/*.test.js", "tests", "lib"]
10
- }