@memberjunction/core-entities-server 5.49.0 → 5.51.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.
@@ -0,0 +1,31 @@
1
+ import { EntityDeleteOptions } from '@memberjunction/core';
2
+ import { MJListDetailEntityExtended } from '@memberjunction/core-entities';
3
+ /**
4
+ * Server-side List Details entity. Enforces the SAME row-level DELETE authorization as
5
+ * {@link MJListEntityServer}, but scoped through the parent List's owner: a user may delete a
6
+ * List Detail only if they own the List it belongs to, UNLESS they hold the Developer or Integration
7
+ * role (who may delete any). The rule itself lives once in {@link MJListEntityExtended.UserCanDelete}
8
+ * and is shared with the Lists entity and the UI — a single source of truth for "who can delete".
9
+ *
10
+ * Why this is needed: the `EntityPermission` migration grants the UI role entity-wide Delete on BOTH
11
+ * Lists AND List Details (so users can manage their own lists). Lists get owner-scoping in
12
+ * `MJListEntityServer`; without this parallel override a UI user could delete the membership rows of
13
+ * lists they DON'T own, because a List Detail carries no owner of its own — only a `ListID`.
14
+ *
15
+ * The owner is resolved by looking up the parent List's `UserID`. If the parent List can't be found
16
+ * (an orphaned detail, or the parent already deleted during list teardown — `spDeleteList` does not
17
+ * cascade, so details are removed while the parent still exists in the normal path) the rule
18
+ * fails OPEN: there is no owner to protect and the coarse entity permission still applies. Enforcement
19
+ * only bites when a parent List genuinely exists and is owned by someone else.
20
+ */
21
+ export declare class MJListDetailEntityServer extends MJListDetailEntityExtended {
22
+ Delete(options?: EntityDeleteOptions): Promise<boolean>;
23
+ /**
24
+ * Looks up the `UserID` (owner) of this detail's parent List. Returns `null` when it can't be
25
+ * positively determined (no `ListID`, parent not found, or the lookup failed) so the caller can
26
+ * fail open rather than block a legitimate/cascade delete. A read-only `simple` RunView limited to
27
+ * the single `UserID` field keeps this cheap.
28
+ */
29
+ private resolveParentListOwnerUserID;
30
+ }
31
+ //# sourceMappingURL=MJListDetailEntityServer.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJListDetailEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJListDetailEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,mBAAmB,EAAY,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,0BAA0B,EAAwB,MAAM,+BAA+B,CAAC;AAEjG;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,wBAAyB,SAAQ,0BAA0B;IAC9C,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7E;;;;;OAKG;YACW,4BAA4B;CA2B7C"}
@@ -0,0 +1,85 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BaseEntity, BaseEntityResult, LogError } from '@memberjunction/core';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { MJListDetailEntityExtended, MJListEntityExtended } from '@memberjunction/core-entities';
10
+ /**
11
+ * Server-side List Details entity. Enforces the SAME row-level DELETE authorization as
12
+ * {@link MJListEntityServer}, but scoped through the parent List's owner: a user may delete a
13
+ * List Detail only if they own the List it belongs to, UNLESS they hold the Developer or Integration
14
+ * role (who may delete any). The rule itself lives once in {@link MJListEntityExtended.UserCanDelete}
15
+ * and is shared with the Lists entity and the UI — a single source of truth for "who can delete".
16
+ *
17
+ * Why this is needed: the `EntityPermission` migration grants the UI role entity-wide Delete on BOTH
18
+ * Lists AND List Details (so users can manage their own lists). Lists get owner-scoping in
19
+ * `MJListEntityServer`; without this parallel override a UI user could delete the membership rows of
20
+ * lists they DON'T own, because a List Detail carries no owner of its own — only a `ListID`.
21
+ *
22
+ * The owner is resolved by looking up the parent List's `UserID`. If the parent List can't be found
23
+ * (an orphaned detail, or the parent already deleted during list teardown — `spDeleteList` does not
24
+ * cascade, so details are removed while the parent still exists in the normal path) the rule
25
+ * fails OPEN: there is no owner to protect and the coarse entity permission still applies. Enforcement
26
+ * only bites when a parent List genuinely exists and is owned by someone else.
27
+ */
28
+ let MJListDetailEntityServer = class MJListDetailEntityServer extends MJListDetailEntityExtended {
29
+ async Delete(options) {
30
+ const ownerUserID = await this.resolveParentListOwnerUserID();
31
+ // Only enforce when we could positively identify the owning user. A null owner means the
32
+ // parent List wasn't found (orphan / already-deleted parent) — nothing to protect, fall open.
33
+ if (ownerUserID != null &&
34
+ !MJListEntityExtended.UserCanDelete(ownerUserID, this.ContextCurrentUser)) {
35
+ const result = new BaseEntityResult();
36
+ result.StartedAt = new Date();
37
+ result.Success = false;
38
+ result.Type = 'delete';
39
+ result.Message = 'You do not have permission to delete this List item. Only the owner of ' +
40
+ 'the parent List, or a user in the Developer or Integration role, may delete it.';
41
+ result.EndedAt = new Date();
42
+ this.RegisterResultHistoryEntry(result);
43
+ return false;
44
+ }
45
+ return super.Delete(options);
46
+ }
47
+ /**
48
+ * Looks up the `UserID` (owner) of this detail's parent List. Returns `null` when it can't be
49
+ * positively determined (no `ListID`, parent not found, or the lookup failed) so the caller can
50
+ * fail open rather than block a legitimate/cascade delete. A read-only `simple` RunView limited to
51
+ * the single `UserID` field keeps this cheap.
52
+ */
53
+ async resolveParentListOwnerUserID() {
54
+ if (!this.ListID) {
55
+ return null;
56
+ }
57
+ try {
58
+ // Use the provider bound to THIS entity instance (not the global default) so the lookup
59
+ // targets the correct server/tenant in multi-provider setups — mirrors the sibling
60
+ // MJListDetailEntityExtended.Save() and CLAUDE.md's per-provider rule.
61
+ const rv = this.RunViewProviderToUse;
62
+ const result = await rv.RunView({
63
+ EntityName: 'MJ: Lists',
64
+ ExtraFilter: `ID = '${this.ListID}'`,
65
+ Fields: ['ID', 'UserID'],
66
+ MaxRows: 1,
67
+ ResultType: 'simple'
68
+ }, this.ContextCurrentUser);
69
+ if (result.Success && result.Results && result.Results.length > 0) {
70
+ return result.Results[0].UserID ?? null;
71
+ }
72
+ }
73
+ catch (e) {
74
+ // Fail open on a lookup error — don't block deletes on a transient read failure. The
75
+ // security-relevant case (parent exists, owned by someone else) resolves normally.
76
+ LogError(`MJListDetailEntityServer: failed to resolve parent List owner for ListID '${this.ListID}': ${e}`);
77
+ }
78
+ return null;
79
+ }
80
+ };
81
+ MJListDetailEntityServer = __decorate([
82
+ RegisterClass(BaseEntity, 'MJ: List Details')
83
+ ], MJListDetailEntityServer);
84
+ export { MJListDetailEntityServer };
85
+ //# sourceMappingURL=MJListDetailEntityServer.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJListDetailEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJListDetailEntityServer.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAuB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEjG;;;;;;;;;;;;;;;;;GAiBG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,0BAA0B;IACpD,KAAK,CAAC,MAAM,CAAC,OAA6B;QACtD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAE9D,yFAAyF;QACzF,8FAA8F;QAC9F,IAAI,WAAW,IAAI,IAAI;YACnB,CAAC,oBAAoB,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACtC,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;YACvB,MAAM,CAAC,OAAO,GAAG,yEAAyE;gBACtF,iFAAiF,CAAC;YACtF,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,4BAA4B;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC;YACD,wFAAwF;YACxF,mFAAmF;YACnF,uEAAuE;YACvE,MAAM,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAiC;gBAC5D,UAAU,EAAE,WAAW;gBACvB,WAAW,EAAE,SAAS,IAAI,CAAC,MAAM,GAAG;gBACpC,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACxB,OAAO,EAAE,CAAC;gBACV,UAAU,EAAE,QAAQ;aACvB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAE5B,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;YAC5C,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,qFAAqF;YACrF,mFAAmF;YACnF,QAAQ,CAAC,6EAA6E,IAAI,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAA;AAtDY,wBAAwB;IADpC,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC;GACjC,wBAAwB,CAsDpC"}
@@ -0,0 +1,18 @@
1
+ import { EntityDeleteOptions } from '@memberjunction/core';
2
+ import { MJListEntityExtended } from '@memberjunction/core-entities';
3
+ /**
4
+ * Server-side Lists entity. Enforces row-level DELETE authorization: a user may delete a List only
5
+ * if they own it, UNLESS they hold the Developer or Integration role (who may delete any List). The
6
+ * rule itself lives once in {@link MJListEntityExtended.UserCanDelete} and is shared with the UI.
7
+ *
8
+ * This is the security-critical enforcement point. The `EntityPermission` migration grants the UI
9
+ * role entity-wide Delete permission on Lists (so standard users can delete their own); this override
10
+ * narrows that back down to owner-or-privileged at the application layer, since coarse entity
11
+ * permissions can't express row-level ownership. On denial it returns `false` and records a
12
+ * `BaseEntityResult` so callers get `LatestResult.CompleteMessage` (Delete does not throw on a
13
+ * logical rejection — see the CLAUDE.md Save/Delete error-handling contract).
14
+ */
15
+ export declare class MJListEntityServer extends MJListEntityExtended {
16
+ Delete(options?: EntityDeleteOptions): Promise<boolean>;
17
+ }
18
+ //# sourceMappingURL=MJListEntityServer.server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJListEntityServer.server.d.ts","sourceRoot":"","sources":["../../src/custom/MJListEntityServer.server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,qBACa,kBAAmB,SAAQ,oBAAoB;IAClC,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;CAchF"}
@@ -0,0 +1,42 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BaseEntity, BaseEntityResult } from '@memberjunction/core';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { MJListEntityExtended } from '@memberjunction/core-entities';
10
+ /**
11
+ * Server-side Lists entity. Enforces row-level DELETE authorization: a user may delete a List only
12
+ * if they own it, UNLESS they hold the Developer or Integration role (who may delete any List). The
13
+ * rule itself lives once in {@link MJListEntityExtended.UserCanDelete} and is shared with the UI.
14
+ *
15
+ * This is the security-critical enforcement point. The `EntityPermission` migration grants the UI
16
+ * role entity-wide Delete permission on Lists (so standard users can delete their own); this override
17
+ * narrows that back down to owner-or-privileged at the application layer, since coarse entity
18
+ * permissions can't express row-level ownership. On denial it returns `false` and records a
19
+ * `BaseEntityResult` so callers get `LatestResult.CompleteMessage` (Delete does not throw on a
20
+ * logical rejection — see the CLAUDE.md Save/Delete error-handling contract).
21
+ */
22
+ let MJListEntityServer = class MJListEntityServer extends MJListEntityExtended {
23
+ async Delete(options) {
24
+ if (!MJListEntityExtended.UserCanDelete(this.UserID, this.ContextCurrentUser)) {
25
+ const result = new BaseEntityResult();
26
+ result.StartedAt = new Date();
27
+ result.Success = false;
28
+ result.Type = 'delete';
29
+ result.Message = 'You do not have permission to delete this List. Only the List owner, ' +
30
+ 'or a user in the Developer or Integration role, may delete it.';
31
+ result.EndedAt = new Date();
32
+ this.RegisterResultHistoryEntry(result);
33
+ return false;
34
+ }
35
+ return super.Delete(options);
36
+ }
37
+ };
38
+ MJListEntityServer = __decorate([
39
+ RegisterClass(BaseEntity, 'MJ: Lists')
40
+ ], MJListEntityServer);
41
+ export { MJListEntityServer };
42
+ //# sourceMappingURL=MJListEntityServer.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MJListEntityServer.server.js","sourceRoot":"","sources":["../../src/custom/MJListEntityServer.server.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAuB,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;;;;;;;;GAWG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,oBAAoB;IACxC,KAAK,CAAC,MAAM,CAAC,OAA6B;QACtD,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACtC,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;YACvB,MAAM,CAAC,OAAO,GAAG,uEAAuE;gBACpF,gEAAgE,CAAC;YACrE,MAAM,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;CACJ,CAAA;AAfY,kBAAkB;IAD9B,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC;GAC1B,kBAAkB,CAe9B"}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,8 @@ export * from './custom/MJQueryEntityServer.server.js';
8
8
  export * from './custom/MJQuerySQLEntityServer.server.js';
9
9
  export * from './custom/MJTemplateContentEntityServer.server.js';
10
10
  export * from './custom/MJUserViewEntityServer.server.js';
11
+ export * from './custom/MJListEntityServer.server.js';
12
+ export * from './custom/MJListDetailEntityServer.server.js';
11
13
  export * from './custom/MJActionEntityServer.server.js';
12
14
  export * from './custom/MJApplicationEntityServer.server.js';
13
15
  export * from './custom/MJComponentEntityServer.server.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,uCAAuC,CAAC;AACtD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AACtE,cAAc,oDAAoD,CAAC;AACnE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oDAAoD,CAAC;AACnE,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAE9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AAAA,cAAc,+CAA+C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,uCAAuC,CAAC;AACtD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AACtE,cAAc,oDAAoD,CAAC;AACnE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oDAAoD,CAAC;AACnE,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAE9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AAAA,cAAc,+CAA+C,CAAC"}
package/dist/index.js CHANGED
@@ -8,6 +8,8 @@ export * from './custom/MJQueryEntityServer.server.js';
8
8
  export * from './custom/MJQuerySQLEntityServer.server.js';
9
9
  export * from './custom/MJTemplateContentEntityServer.server.js';
10
10
  export * from './custom/MJUserViewEntityServer.server.js';
11
+ export * from './custom/MJListEntityServer.server.js';
12
+ export * from './custom/MJListDetailEntityServer.server.js';
11
13
  export * from './custom/MJActionEntityServer.server.js';
12
14
  export * from './custom/MJApplicationEntityServer.server.js';
13
15
  export * from './custom/MJComponentEntityServer.server.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,uCAAuC,CAAC;AACtD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AACtE,cAAc,oDAAoD,CAAC;AACnE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oDAAoD,CAAC;AACnE,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAE9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AAAA,cAAc,+CAA+C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,wCAAwC,CAAC;AACvD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yCAAyC,CAAC;AACxD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,uCAAuC,CAAC;AACtD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,uDAAuD,CAAC;AACtE,cAAc,oDAAoD,CAAC;AACnE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,uDAAuD,CAAC;AACtE,cAAc,iDAAiD,CAAC;AAChE,cAAc,uCAAuC,CAAC;AACtD,cAAc,kDAAkD,CAAC;AACjE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oDAAoD,CAAC;AACnE,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,eAAe,CAAC;AAE9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yCAAyC,CAAC;AAAA,cAAc,+CAA+C,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/core-entities-server",
3
3
  "type": "module",
4
- "version": "5.49.0",
4
+ "version": "5.51.0",
5
5
  "description": "Entity subclasses for the metadata layer of MemberJunction that are only used on server side applications like MJAPI, distributed as part of each release of MemberJunction",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -21,33 +21,33 @@
21
21
  "typescript": "^5.9.3"
22
22
  },
23
23
  "dependencies": {
24
- "@memberjunction/actions-base": "5.49.0",
25
- "@memberjunction/ai": "5.49.0",
26
- "@memberjunction/ai-core-plus": "5.49.0",
27
- "@memberjunction/ai-engine-base": "5.49.0",
28
- "@memberjunction/ai-prompts": "5.49.0",
29
- "@memberjunction/ai-provider-bundle": "5.49.0",
30
- "@memberjunction/ai-vector-dupe": "5.49.0",
31
- "@memberjunction/ai-vectordb": "5.49.0",
32
- "@memberjunction/ai-vectors-memory": "5.49.0",
33
- "@memberjunction/aiengine": "5.49.0",
34
- "@memberjunction/core": "5.49.0",
35
- "@memberjunction/core-entities": "5.49.0",
36
- "@memberjunction/predictive-studio-core": "5.49.0",
37
- "@memberjunction/doc-utils": "5.49.0",
38
- "@memberjunction/generic-database-provider": "5.49.0",
39
- "@memberjunction/global": "5.49.0",
40
- "@memberjunction/integration-engine": "5.49.0",
41
- "@memberjunction/integration-pk-classifier": "5.49.0",
42
- "@memberjunction/scheduling-engine": "5.49.0",
43
- "@memberjunction/sql-converter": "5.49.0",
44
- "@memberjunction/sql-dialect": "5.49.0",
45
- "@memberjunction/sql-parser": "5.49.0",
46
- "@memberjunction/sqlserver-dataprovider": "5.49.0",
47
- "@memberjunction/tag-engine": "5.49.0",
24
+ "@memberjunction/actions-base": "5.51.0",
25
+ "@memberjunction/ai": "5.51.0",
26
+ "@memberjunction/ai-core-plus": "5.51.0",
27
+ "@memberjunction/ai-engine-base": "5.51.0",
28
+ "@memberjunction/ai-prompts": "5.51.0",
29
+ "@memberjunction/ai-provider-bundle": "5.51.0",
30
+ "@memberjunction/ai-vector-dupe": "5.51.0",
31
+ "@memberjunction/ai-vectordb": "5.51.0",
32
+ "@memberjunction/ai-vectors-memory": "5.51.0",
33
+ "@memberjunction/aiengine": "5.51.0",
34
+ "@memberjunction/core": "5.51.0",
35
+ "@memberjunction/core-entities": "5.51.0",
36
+ "@memberjunction/predictive-studio-core": "5.51.0",
37
+ "@memberjunction/doc-utils": "5.51.0",
38
+ "@memberjunction/generic-database-provider": "5.51.0",
39
+ "@memberjunction/global": "5.51.0",
40
+ "@memberjunction/integration-engine": "5.51.0",
41
+ "@memberjunction/integration-pk-classifier": "5.51.0",
42
+ "@memberjunction/scheduling-engine": "5.51.0",
43
+ "@memberjunction/sql-converter": "5.51.0",
44
+ "@memberjunction/sql-dialect": "5.51.0",
45
+ "@memberjunction/sql-parser": "5.51.0",
46
+ "@memberjunction/sqlserver-dataprovider": "5.51.0",
47
+ "@memberjunction/tag-engine": "5.51.0",
48
48
  "nunjucks": "3.2.4",
49
49
  "rxjs": "~7.8.1",
50
- "zod": "~3.24.4"
50
+ "zod": "^3.25.0"
51
51
  },
52
52
  "repository": {
53
53
  "type": "git",