@memberjunction/core 5.51.0 → 6.1.0-edge.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/LICENSE +7 -0
  2. package/dist/generic/baseEngine.d.ts.map +1 -1
  3. package/dist/generic/baseEngine.js +13 -2
  4. package/dist/generic/baseEngine.js.map +1 -1
  5. package/dist/generic/baseEngineRegistry.d.ts +14 -0
  6. package/dist/generic/baseEngineRegistry.d.ts.map +1 -1
  7. package/dist/generic/baseEngineRegistry.js +32 -0
  8. package/dist/generic/baseEngineRegistry.js.map +1 -1
  9. package/dist/generic/baseEntity.d.ts +329 -26
  10. package/dist/generic/baseEntity.d.ts.map +1 -1
  11. package/dist/generic/baseEntity.js +788 -79
  12. package/dist/generic/baseEntity.js.map +1 -1
  13. package/dist/generic/databaseProviderBase.d.ts +54 -17
  14. package/dist/generic/databaseProviderBase.d.ts.map +1 -1
  15. package/dist/generic/databaseProviderBase.js +133 -52
  16. package/dist/generic/databaseProviderBase.js.map +1 -1
  17. package/dist/generic/entityCompanion.d.ts +218 -0
  18. package/dist/generic/entityCompanion.d.ts.map +1 -0
  19. package/dist/generic/entityCompanion.js +170 -0
  20. package/dist/generic/entityCompanion.js.map +1 -0
  21. package/dist/generic/entityInfo.d.ts +146 -0
  22. package/dist/generic/entityInfo.d.ts.map +1 -1
  23. package/dist/generic/entityInfo.js +188 -0
  24. package/dist/generic/entityInfo.js.map +1 -1
  25. package/dist/generic/entitySavePlan.d.ts +199 -0
  26. package/dist/generic/entitySavePlan.d.ts.map +1 -0
  27. package/dist/generic/entitySavePlan.js +213 -0
  28. package/dist/generic/entitySavePlan.js.map +1 -0
  29. package/dist/generic/entityTransactionScope.d.ts +125 -0
  30. package/dist/generic/entityTransactionScope.d.ts.map +1 -0
  31. package/dist/generic/entityTransactionScope.js +115 -0
  32. package/dist/generic/entityTransactionScope.js.map +1 -0
  33. package/dist/generic/interfaces.d.ts +93 -35
  34. package/dist/generic/interfaces.d.ts.map +1 -1
  35. package/dist/generic/interfaces.js +27 -0
  36. package/dist/generic/interfaces.js.map +1 -1
  37. package/dist/generic/providerBase.d.ts +13 -0
  38. package/dist/generic/providerBase.d.ts.map +1 -1
  39. package/dist/generic/providerBase.js +64 -5
  40. package/dist/generic/providerBase.js.map +1 -1
  41. package/dist/generic/relatedRecordBatchLoader.d.ts +39 -0
  42. package/dist/generic/relatedRecordBatchLoader.d.ts.map +1 -0
  43. package/dist/generic/relatedRecordBatchLoader.js +154 -0
  44. package/dist/generic/relatedRecordBatchLoader.js.map +1 -0
  45. package/dist/generic/relatedRecordCollection.d.ts +578 -0
  46. package/dist/generic/relatedRecordCollection.d.ts.map +1 -0
  47. package/dist/generic/relatedRecordCollection.js +1004 -0
  48. package/dist/generic/relatedRecordCollection.js.map +1 -0
  49. package/dist/generic/saveEntityGraphOperation.d.ts +148 -0
  50. package/dist/generic/saveEntityGraphOperation.d.ts.map +1 -0
  51. package/dist/generic/saveEntityGraphOperation.js +157 -0
  52. package/dist/generic/saveEntityGraphOperation.js.map +1 -0
  53. package/dist/generic/securityInfo.d.ts +99 -1
  54. package/dist/generic/securityInfo.d.ts.map +1 -1
  55. package/dist/generic/securityInfo.js +88 -6
  56. package/dist/generic/securityInfo.js.map +1 -1
  57. package/dist/generic/telemetryManager.d.ts +21 -1
  58. package/dist/generic/telemetryManager.d.ts.map +1 -1
  59. package/dist/generic/telemetryManager.js +21 -6
  60. package/dist/generic/telemetryManager.js.map +1 -1
  61. package/dist/index.d.ts +6 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +6 -3
  64. package/dist/index.js.map +1 -1
  65. package/dist/views/runView.d.ts +31 -0
  66. package/dist/views/runView.d.ts.map +1 -1
  67. package/dist/views/runView.js.map +1 -1
  68. package/package.json +13 -13
  69. package/readme.md +159 -1
  70. package/dist/generic/runReport.d.ts +0 -25
  71. package/dist/generic/runReport.d.ts.map +0 -1
  72. package/dist/generic/runReport.js +0 -38
  73. package/dist/generic/runReport.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relatedRecordCollection.js","sourceRoot":"","sources":["../../src/generic/relatedRecordCollection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @fileoverview `MJ.SaveEntityGraph` — the remote operation that lets a client save a parent record
3
+ * and its companion-contributed children as one atomic unit of work.
4
+ *
5
+ * ## Why a remote operation rather than a wire change
6
+ *
7
+ * A client provider has no transaction to open, so it cannot make several round trips atomic. The
8
+ * options were:
9
+ *
10
+ * 1. Add a `Companions___` field to every generated Create/Update GraphQL input type. That is a
11
+ * CodeGen change touching every entity's published input schema across 100+ packages.
12
+ * 2. Ship **one** framework-level remote operation that carries the whole graph.
13
+ *
14
+ * This is (2). `BaseRemotableOperation` already provides a typed RPC whose `Execute()` is identical
15
+ * on both tiers — marshalled over GraphQL from the browser, dispatched in-process on the server —
16
+ * so a single registration covers every entity, forever, with **zero changes to any generated
17
+ * GraphQL type**. Under MemberJunction's publish-then-no-breaking-changes policy, adding nothing to
18
+ * a published schema is worth a great deal.
19
+ *
20
+ * It is also the pattern the applications reached for on their own: `bizapps-orders` already ships
21
+ * `Orders.SaveOrder`, a hand-written remote operation that hydrates a client draft and hands it to
22
+ * `OrderEntityServer.Save()`. This generalises that.
23
+ *
24
+ * ## What happens server-side
25
+ *
26
+ * The operation rebuilds the root record through `provider.GetEntityObject()`, so it resolves to
27
+ * whatever subclass is registered **on the server** — `OrderEntityServer`, not the shared
28
+ * `OrderEntity`. Companions are deserialised onto it, and then plain `entity.Save()` runs, which
29
+ * takes the ordinary local graph path inside a real transaction. Server-side business logic,
30
+ * `PreSave` hooks, Record Changes, entity actions and events all run exactly as they would for a
31
+ * save initiated on the server.
32
+ *
33
+ * ## Security
34
+ *
35
+ * This is the same API-key bypass surface that `TransactionGroupResolver` had to be patched for
36
+ * (bug-register B1 / SEC1): a restricted key could otherwise perform writes by wrapping them in a
37
+ * batch mutation whose scope ceiling was never consulted. {@link SaveEntityGraphOperation.Authorize}
38
+ * therefore refuses any caller that cannot satisfy the per-record entity permissions, and the
39
+ * server resolver applies the `entity:create` / `entity:update` scope gate before dispatch. Entity
40
+ * permissions still enforce inside `Save()`; the API-key ceiling does not check itself.
41
+ *
42
+ * @module @memberjunction/core
43
+ */
44
+ import { BaseRemotableOperation } from './baseRemotableOperation.js';
45
+ import type { RemoteOpServerContext } from './baseRemotableOperation.js';
46
+ import type { EntityCompanionPayload } from './entityCompanion.js';
47
+ import type { IMetadataProvider } from './interfaces.js';
48
+ import type { UserInfo } from './securityInfo.js';
49
+ /** The stable registry key and wire token for this operation. */
50
+ export declare const SAVE_ENTITY_GRAPH_OPERATION_KEY = "MJ.SaveEntityGraph";
51
+ /**
52
+ * Input payload for {@link SaveEntityGraphOperation}.
53
+ */
54
+ export type SaveEntityGraphInput = {
55
+ /** The root record's entity name, e.g. `'MJ_BizApps_Orders: Orders'`. */
56
+ EntityName: string;
57
+ /** The root record's field values, as produced by `BaseEntity.GetAll()`. */
58
+ Fields: Record<string, unknown>;
59
+ /** Serialised companion payloads to attach to the rebuilt root. */
60
+ Companions: EntityCompanionPayload[];
61
+ /**
62
+ * Whether the root already exists. Drives whether the server loads the record before applying
63
+ * field values (an update) or starts a new one (a create).
64
+ */
65
+ IsExistingRecord: boolean;
66
+ };
67
+ /**
68
+ * Output payload for {@link SaveEntityGraphOperation}.
69
+ */
70
+ export type SaveEntityGraphOutput = {
71
+ /** True when the whole graph committed. */
72
+ Success: boolean;
73
+ /** Failure detail when `Success` is false. */
74
+ ErrorMessage?: string;
75
+ /**
76
+ * The root record's field values **after** the save — server-assigned primary keys, computed
77
+ * columns, sequence numbers, trigger-populated fields.
78
+ */
79
+ Fields: Record<string, unknown>;
80
+ /**
81
+ * The companions re-serialised after the save, so the client can adopt server-assigned child
82
+ * primary keys and computed values.
83
+ *
84
+ * Returning a result *graph* rather than a result *row* is easy to overlook and important: a
85
+ * client that only refreshed the header would be left holding children that look unsaved and
86
+ * would re-insert them on the next save.
87
+ */
88
+ Companions: EntityCompanionPayload[];
89
+ };
90
+ /**
91
+ * Saves a parent record and its companion-contributed children atomically, server-side.
92
+ *
93
+ * Invoked automatically by `BaseEntity.Save()` when the entity has companion work to do and the
94
+ * active provider cannot open a local transaction. Application code does not normally call this
95
+ * directly — the point of the design is that `order.Save()` is the whole API on both tiers.
96
+ */
97
+ export declare class SaveEntityGraphOperation extends BaseRemotableOperation<SaveEntityGraphInput, SaveEntityGraphOutput> {
98
+ /** @inheritdoc */
99
+ readonly OperationKey = "MJ.SaveEntityGraph";
100
+ /**
101
+ * API-key scope required to invoke this operation.
102
+ *
103
+ * `entity:update` is the ceiling applied at the resolver; per-record Create vs Update
104
+ * permissions are enforced inside each node's own `Save()`.
105
+ */
106
+ readonly RequiredScope = "entity:update";
107
+ /**
108
+ * Validates the shape of the incoming payload.
109
+ *
110
+ * Deliberately **not** where entity permissions are checked. Two other layers already own that,
111
+ * and duplicating it here would need a provider this hook is not given:
112
+ *
113
+ * - The server resolver applies the API-key scope ceiling ({@link RequiredScope}) before
114
+ * dispatch, closing the batch-mutation bypass that `TransactionGroupResolver` was patched for.
115
+ * - Every node's own `BaseEntity.Save()` calls `CheckPermissions()` for Create or Update as
116
+ * appropriate, per record, against the acting user — including children the caller never
117
+ * named explicitly.
118
+ *
119
+ * @param input - The graph payload.
120
+ * @param _user - The acting user.
121
+ * @returns True when the payload is well-formed enough to attempt.
122
+ */
123
+ protected Authorize(input: SaveEntityGraphInput, _user: UserInfo): Promise<boolean>;
124
+ /**
125
+ * Rebuilds the graph server-side and saves it.
126
+ *
127
+ * @param input - The graph payload.
128
+ * @param provider - The provider to build entity objects from.
129
+ * @param user - The acting user.
130
+ * @param _context - The server execution context.
131
+ * @returns The post-save root fields and re-serialised companions.
132
+ */
133
+ protected InternalExecute(input: SaveEntityGraphInput, provider: IMetadataProvider, user: UserInfo, _context: RemoteOpServerContext): Promise<SaveEntityGraphOutput>;
134
+ /**
135
+ * Reconstructs the root entity on the server, resolved to its server-side registered subclass.
136
+ *
137
+ * An existing record is loaded first so that unchanged fields keep their database values and
138
+ * the concurrency/old-value bookkeeping is correct; only then are the client's field values
139
+ * applied on top.
140
+ *
141
+ * @param input - The graph payload.
142
+ * @param provider - The provider to build the entity from.
143
+ * @param user - The acting user.
144
+ * @returns The rebuilt root, with companions deserialised onto it.
145
+ */
146
+ private rebuildRoot;
147
+ }
148
+ //# sourceMappingURL=saveEntityGraphOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveEntityGraphOperation.d.ts","sourceRoot":"","sources":["../../src/generic/saveEntityGraphOperation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,iEAAiE;AACjE,eAAO,MAAM,+BAA+B,uBAAuB,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,mEAAmE;IACnE,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC;;;OAGG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAChC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACxC,CAAC;AAEF;;;;;;GAMG;AACH,qBACa,wBAAyB,SAAQ,sBAAsB,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;IAC7G,kBAAkB;IAClB,SAAgB,YAAY,wBAAmC;IAE/D;;;;;OAKG;IACH,SAAyB,aAAa,mBAAmB;IAEzD;;;;;;;;;;;;;;;OAeG;cACsB,SAAS,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlG;;;;;;;;OAQG;cACsB,eAAe,CACpC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,qBAAqB,GAChC,OAAO,CAAC,qBAAqB,CAAC;IAsBjC;;;;;;;;;;;OAWG;YACW,WAAW;CA0B5B"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * @fileoverview `MJ.SaveEntityGraph` — the remote operation that lets a client save a parent record
3
+ * and its companion-contributed children as one atomic unit of work.
4
+ *
5
+ * ## Why a remote operation rather than a wire change
6
+ *
7
+ * A client provider has no transaction to open, so it cannot make several round trips atomic. The
8
+ * options were:
9
+ *
10
+ * 1. Add a `Companions___` field to every generated Create/Update GraphQL input type. That is a
11
+ * CodeGen change touching every entity's published input schema across 100+ packages.
12
+ * 2. Ship **one** framework-level remote operation that carries the whole graph.
13
+ *
14
+ * This is (2). `BaseRemotableOperation` already provides a typed RPC whose `Execute()` is identical
15
+ * on both tiers — marshalled over GraphQL from the browser, dispatched in-process on the server —
16
+ * so a single registration covers every entity, forever, with **zero changes to any generated
17
+ * GraphQL type**. Under MemberJunction's publish-then-no-breaking-changes policy, adding nothing to
18
+ * a published schema is worth a great deal.
19
+ *
20
+ * It is also the pattern the applications reached for on their own: `bizapps-orders` already ships
21
+ * `Orders.SaveOrder`, a hand-written remote operation that hydrates a client draft and hands it to
22
+ * `OrderEntityServer.Save()`. This generalises that.
23
+ *
24
+ * ## What happens server-side
25
+ *
26
+ * The operation rebuilds the root record through `provider.GetEntityObject()`, so it resolves to
27
+ * whatever subclass is registered **on the server** — `OrderEntityServer`, not the shared
28
+ * `OrderEntity`. Companions are deserialised onto it, and then plain `entity.Save()` runs, which
29
+ * takes the ordinary local graph path inside a real transaction. Server-side business logic,
30
+ * `PreSave` hooks, Record Changes, entity actions and events all run exactly as they would for a
31
+ * save initiated on the server.
32
+ *
33
+ * ## Security
34
+ *
35
+ * This is the same API-key bypass surface that `TransactionGroupResolver` had to be patched for
36
+ * (bug-register B1 / SEC1): a restricted key could otherwise perform writes by wrapping them in a
37
+ * batch mutation whose scope ceiling was never consulted. {@link SaveEntityGraphOperation.Authorize}
38
+ * therefore refuses any caller that cannot satisfy the per-record entity permissions, and the
39
+ * server resolver applies the `entity:create` / `entity:update` scope gate before dispatch. Entity
40
+ * permissions still enforce inside `Save()`; the API-key ceiling does not check itself.
41
+ *
42
+ * @module @memberjunction/core
43
+ */
44
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
45
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
46
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
47
+ 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;
48
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
49
+ };
50
+ import { RegisterClass } from '@memberjunction/global';
51
+ import { BaseRemotableOperation } from './baseRemotableOperation.js';
52
+ import { CompositeKey, KeyValuePair } from './compositeKey.js';
53
+ import { LogError } from './logging.js';
54
+ /** The stable registry key and wire token for this operation. */
55
+ export const SAVE_ENTITY_GRAPH_OPERATION_KEY = 'MJ.SaveEntityGraph';
56
+ /**
57
+ * Saves a parent record and its companion-contributed children atomically, server-side.
58
+ *
59
+ * Invoked automatically by `BaseEntity.Save()` when the entity has companion work to do and the
60
+ * active provider cannot open a local transaction. Application code does not normally call this
61
+ * directly — the point of the design is that `order.Save()` is the whole API on both tiers.
62
+ */
63
+ let SaveEntityGraphOperation = class SaveEntityGraphOperation extends BaseRemotableOperation {
64
+ constructor() {
65
+ super(...arguments);
66
+ /** @inheritdoc */
67
+ this.OperationKey = SAVE_ENTITY_GRAPH_OPERATION_KEY;
68
+ /**
69
+ * API-key scope required to invoke this operation.
70
+ *
71
+ * `entity:update` is the ceiling applied at the resolver; per-record Create vs Update
72
+ * permissions are enforced inside each node's own `Save()`.
73
+ */
74
+ this.RequiredScope = 'entity:update';
75
+ }
76
+ /**
77
+ * Validates the shape of the incoming payload.
78
+ *
79
+ * Deliberately **not** where entity permissions are checked. Two other layers already own that,
80
+ * and duplicating it here would need a provider this hook is not given:
81
+ *
82
+ * - The server resolver applies the API-key scope ceiling ({@link RequiredScope}) before
83
+ * dispatch, closing the batch-mutation bypass that `TransactionGroupResolver` was patched for.
84
+ * - Every node's own `BaseEntity.Save()` calls `CheckPermissions()` for Create or Update as
85
+ * appropriate, per record, against the acting user — including children the caller never
86
+ * named explicitly.
87
+ *
88
+ * @param input - The graph payload.
89
+ * @param _user - The acting user.
90
+ * @returns True when the payload is well-formed enough to attempt.
91
+ */
92
+ async Authorize(input, _user) {
93
+ return !!input?.EntityName && !!input.Fields;
94
+ }
95
+ /**
96
+ * Rebuilds the graph server-side and saves it.
97
+ *
98
+ * @param input - The graph payload.
99
+ * @param provider - The provider to build entity objects from.
100
+ * @param user - The acting user.
101
+ * @param _context - The server execution context.
102
+ * @returns The post-save root fields and re-serialised companions.
103
+ */
104
+ async InternalExecute(input, provider, user, _context) {
105
+ const root = await this.rebuildRoot(input, provider, user);
106
+ const saved = await root.Save();
107
+ if (!saved) {
108
+ const detail = root.LatestResult?.CompleteMessage ?? 'unknown error';
109
+ LogError(`${SAVE_ENTITY_GRAPH_OPERATION_KEY} failed for ${input.EntityName}: ${detail}`);
110
+ return {
111
+ Success: false,
112
+ ErrorMessage: detail,
113
+ Fields: root.GetAll(),
114
+ Companions: await root.SerializeCompanions(),
115
+ };
116
+ }
117
+ return {
118
+ Success: true,
119
+ Fields: root.GetAll(),
120
+ Companions: await root.SerializeCompanions(),
121
+ };
122
+ }
123
+ /**
124
+ * Reconstructs the root entity on the server, resolved to its server-side registered subclass.
125
+ *
126
+ * An existing record is loaded first so that unchanged fields keep their database values and
127
+ * the concurrency/old-value bookkeeping is correct; only then are the client's field values
128
+ * applied on top.
129
+ *
130
+ * @param input - The graph payload.
131
+ * @param provider - The provider to build the entity from.
132
+ * @param user - The acting user.
133
+ * @returns The rebuilt root, with companions deserialised onto it.
134
+ */
135
+ async rebuildRoot(input, provider, user) {
136
+ const root = await provider.GetEntityObject(input.EntityName, user);
137
+ if (input.IsExistingRecord) {
138
+ const key = new CompositeKey(root.EntityInfo.PrimaryKeys.map(pk => new KeyValuePair(pk.Name, input.Fields[pk.Name])));
139
+ const loaded = await root.InnerLoad(key);
140
+ if (!loaded) {
141
+ throw new Error(`${SAVE_ENTITY_GRAPH_OPERATION_KEY}: could not load existing ${input.EntityName} ` +
142
+ `record for update.`);
143
+ }
144
+ }
145
+ else {
146
+ root.NewRecord();
147
+ }
148
+ root.SetMany(input.Fields, true);
149
+ await root.DeserializeCompanions(input.Companions ?? []);
150
+ return root;
151
+ }
152
+ };
153
+ SaveEntityGraphOperation = __decorate([
154
+ RegisterClass(BaseRemotableOperation, SAVE_ENTITY_GRAPH_OPERATION_KEY)
155
+ ], SaveEntityGraphOperation);
156
+ export { SaveEntityGraphOperation };
157
+ //# sourceMappingURL=saveEntityGraphOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveEntityGraphOperation.js","sourceRoot":"","sources":["../../src/generic/saveEntityGraphOperation.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,54 @@ export interface MagicLinkScope {
42
42
  /** ResourceType name/id of the shared resource. */
43
43
  ResourceType?: string;
44
44
  }
45
+ /**
46
+ * Per-request acting context for an API-key session, carried on {@link UserInfo}.
47
+ * Consumed by API-key-scoped RLS filters via the `{{Acting*}}` tokens in
48
+ * {@link RowLevelSecurityFilterInfo.MarkupFilterText}.
49
+ *
50
+ * TRUST BOUNDARY: these values MUST be derived server-side from an authenticated
51
+ * identity. The engine binds what it is given and cannot validate provenance —
52
+ * never populate from a client-supplied header, argument, or GraphQL variable,
53
+ * and never expose via a resolver. A client-settable acting context is a total
54
+ * bypass of API-key row filtering.
55
+ *
56
+ * Cardinality is a one-way door, decided per token at registration: the three
57
+ * scalar tokens are scalar forever (moving to a set later changes the token's
58
+ * shape and breaks every filter authored against it), and ActingCompanyIDs is
59
+ * list-capable from day one for exactly that reason.
60
+ */
61
+ export interface APIKeyActingContext {
62
+ /** Organization / tenant the caller is acting on behalf of (GUID, scalar forever). */
63
+ ActingOrganizationID?: string;
64
+ /** Person / contact the caller is acting on behalf of (GUID, scalar forever). */
65
+ ActingPersonID?: string;
66
+ /** Opaque per-integration scope value (bounded identifier, scalar forever). */
67
+ ActingScopeID?: string;
68
+ /**
69
+ * Companies the caller is acting for — LIST-capable. Renders inside
70
+ * `Col IN ({{ActingCompanyIDs}})` as a sorted, per-element-validated,
71
+ * quoted and escaped list; an empty or absent set resolves the whole
72
+ * filter to `(1=0)` (match nothing), same as any unresolved token.
73
+ */
74
+ ActingCompanyIDs?: string[];
75
+ }
76
+ /**
77
+ * One API-key row-filter binding carried on {@link UserInfo}: for the named
78
+ * entity and permission type, the referenced Row Level Security Filter applies
79
+ * IN ADDITION TO (AND-composed with) role RLS — and independently of the
80
+ * role-RLS exemption, because a key ceiling exists precisely to bind
81
+ * principals whose roles are unrestricted. Resolved server-side per request
82
+ * from the validated API key's scope rules; plain data so MJCore can consume
83
+ * it without depending on the APIKeys packages.
84
+ */
85
+ export interface APIKeyRowFilterBinding {
86
+ /** ID of the entity the filtered scope rule targets (exact entity — patterns are rejected at rule save). */
87
+ EntityID: string;
88
+ /** Which operation the binding constrains, resolved from the rule's scope path at stamp time. */
89
+ PermissionType: 'Read' | 'Create' | 'Update' | 'Delete';
90
+ /** FK into the RowLevelSecurityFilter catalog (same catalog role RLS uses). */
91
+ FilterID: string;
92
+ }
45
93
  /**
46
94
  * Returning-visitor context carried on {@link UserInfo} for a public web-widget guest session,
47
95
  * sourced from the verified session token's claims. Lets a server-created conversation (the voice
@@ -180,6 +228,31 @@ export declare class UserInfo extends BaseInfo {
180
228
  */
181
229
  get MagicLinkScope(): MagicLinkScope | undefined;
182
230
  set MagicLinkScope(value: MagicLinkScope | undefined);
231
+ private _APIKeyActingContext?;
232
+ /**
233
+ * Per-request acting context for an API-key session. Set server-side in the
234
+ * API-key auth path from an authenticated identity, ON A CLONED UserInfo
235
+ * (the resolved userRecord may be the shared UserCache instance — stamping
236
+ * it in place leaks one session's scope to every concurrent session of the
237
+ * same user). Consumed by API-key row filters via the {{Acting*}} tokens.
238
+ * Same getter/setter (non-enumerable accessor) rationale as TenantContext —
239
+ * not a DB/GraphQL field, and it must NEVER be exposed via a resolver.
240
+ */
241
+ get APIKeyActingContext(): APIKeyActingContext | undefined;
242
+ set APIKeyActingContext(value: APIKeyActingContext | undefined);
243
+ private _APIKeyRowFilters?;
244
+ /**
245
+ * Row-filter bindings for the API key this session authenticated with,
246
+ * resolved per request from the key's scope rules and stamped on the CLONED
247
+ * per-request UserInfo. Consumed by
248
+ * {@link EntityInfo.GetEffectiveRowFilterWhereClause}, which AND-composes
249
+ * each matching binding's filter with role RLS — outside the role-RLS
250
+ * exemption. Plain data on purpose: MJCore cannot depend on the APIKeys
251
+ * packages, so the bridge is this carrier. Never a DB/GraphQL field; never
252
+ * exposed to or settable by a client.
253
+ */
254
+ get APIKeyRowFilters(): APIKeyRowFilterBinding[] | undefined;
255
+ set APIKeyRowFilters(value: APIKeyRowFilterBinding[] | undefined);
183
256
  private _ReturningVisitorContext?;
184
257
  /**
185
258
  * Returning-visitor context for a public web-widget guest session. Set at request time from the
@@ -342,7 +415,32 @@ export declare class RowLevelSecurityFilterInfo extends BaseInfo {
342
415
  * @param {UserInfo} user - The user whose properties will be substituted into the filter text
343
416
  * @returns {string} The filter text with all user tokens replaced with actual values
344
417
  */
345
- MarkupFilterText(user: UserInfo): string;
418
+ MarkupFilterText(user: UserInfo, options?: MarkupFilterOptions): string;
419
+ /**
420
+ * Resolves the `{{Acting*}}` token family from {@link UserInfo.APIKeyActingContext}.
421
+ * Scalars substitute escaped; the list token renders as a canonical (sorted),
422
+ * per-element-escaped, quoted list for use inside `IN (...)`. Sorting is not
423
+ * cosmetic: the resolved clause participates in the RunView cache fingerprint,
424
+ * so the same set must always produce the same clause bytes (INV-2). An absent
425
+ * context or empty list leaves tokens unresolved, which the caller's
426
+ * unresolved-token handling turns into a match-nothing filter for key filters.
427
+ */
428
+ private resolveActingTokens;
429
+ }
430
+ /**
431
+ * Options for {@link RowLevelSecurityFilterInfo.MarkupFilterText}.
432
+ */
433
+ export interface MarkupFilterOptions {
434
+ /**
435
+ * How an unresolved token is handled after markup:
436
+ * - `'legacy'` (default): log the error and return the text with the token in
437
+ * place — the resulting SQL fails to match/parse, which is fail-closed but
438
+ * produces an unexplainable result. Role-RLS behavior, unchanged.
439
+ * - `'match-nothing'`: the entire filter resolves to `(1=0)` — required for
440
+ * API-key row filters, where an unresolved token must deny regardless of the
441
+ * expression's operator shapes.
442
+ */
443
+ unresolvedBehavior?: 'legacy' | 'match-nothing';
346
444
  }
347
445
  /**
348
446
  * Stores the fundamental permissions and access rights that can be granted to users and roles throughout the system.
@@ -1 +1 @@
1
- {"version":3,"file":"securityInfo.d.ts","sourceRoot":"","sources":["../../src/generic/securityInfo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"securityInfo.d.ts","sourceRoot":"","sources":["../../src/generic/securityInfo.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,37 @@ export class UserInfo extends BaseInfo {
44
44
  set MagicLinkScope(value) {
45
45
  this._MagicLinkScope = value;
46
46
  }
47
+ /**
48
+ * Per-request acting context for an API-key session. Set server-side in the
49
+ * API-key auth path from an authenticated identity, ON A CLONED UserInfo
50
+ * (the resolved userRecord may be the shared UserCache instance — stamping
51
+ * it in place leaks one session's scope to every concurrent session of the
52
+ * same user). Consumed by API-key row filters via the {{Acting*}} tokens.
53
+ * Same getter/setter (non-enumerable accessor) rationale as TenantContext —
54
+ * not a DB/GraphQL field, and it must NEVER be exposed via a resolver.
55
+ */
56
+ get APIKeyActingContext() {
57
+ return this._APIKeyActingContext;
58
+ }
59
+ set APIKeyActingContext(value) {
60
+ this._APIKeyActingContext = value;
61
+ }
62
+ /**
63
+ * Row-filter bindings for the API key this session authenticated with,
64
+ * resolved per request from the key's scope rules and stamped on the CLONED
65
+ * per-request UserInfo. Consumed by
66
+ * {@link EntityInfo.GetEffectiveRowFilterWhereClause}, which AND-composes
67
+ * each matching binding's filter with role RLS — outside the role-RLS
68
+ * exemption. Plain data on purpose: MJCore cannot depend on the APIKeys
69
+ * packages, so the bridge is this carrier. Never a DB/GraphQL field; never
70
+ * exposed to or settable by a client.
71
+ */
72
+ get APIKeyRowFilters() {
73
+ return this._APIKeyRowFilters;
74
+ }
75
+ set APIKeyRowFilters(value) {
76
+ this._APIKeyRowFilters = value;
77
+ }
47
78
  /**
48
79
  * Returning-visitor context for a public web-widget guest session. Set at request time from the
49
80
  * verified session token's claims (the widget mint embeds the resolved VisitorKey / prior
@@ -182,6 +213,8 @@ export class UserInfo extends BaseInfo {
182
213
  this.EmployeeSupervisorEmail = null;
183
214
  this._TenantContext = undefined;
184
215
  this._MagicLinkScope = undefined;
216
+ this._APIKeyActingContext = undefined;
217
+ this._APIKeyRowFilters = undefined;
185
218
  this._ReturningVisitorContext = undefined;
186
219
  this._WidgetGuestContext = undefined;
187
220
  this._IsMagicLinkAnonymous = false;
@@ -327,30 +360,79 @@ export class RowLevelSecurityFilterInfo extends BaseInfo {
327
360
  * @param {UserInfo} user - The user whose properties will be substituted into the filter text
328
361
  * @returns {string} The filter text with all user tokens replaced with actual values
329
362
  */
330
- MarkupFilterText(user) {
363
+ MarkupFilterText(user, options) {
331
364
  let ret = this.FilterText;
332
365
  if (user) {
333
366
  const keys = Object.keys(user);
334
367
  for (let i = 0; i < keys.length; i++) {
335
368
  const key = keys[i];
336
369
  const val = user[key];
337
- if (val !== null && typeof val !== 'object') {
338
- ret = ret.replace(new RegExp(`{{User${key}}}`, 'g'), String(val));
370
+ // `val != null` deliberately excludes BOTH null and undefined. The old
371
+ // `val !== null` guard let `undefined` through, substituting the literal
372
+ // string "undefined" — which made negation-shaped filters
373
+ // (Col <> '{{UserX}}') match every row. Undefined is unresolved, period.
374
+ if (val != null && typeof val !== 'object') {
375
+ // Escape embedded quotes in the substituted value: a user-sourced value
376
+ // containing an apostrophe must not break (or rewrite) the predicate —
377
+ // the same defect class as the tenant-header injection, in the engine
378
+ // every RLS filter depends on.
379
+ ret = ret.replace(new RegExp(`{{User${key}}}`, 'g'), String(val).replace(/'/g, "''"));
339
380
  }
340
381
  }
341
382
  // Per-session magic-link resource scope. Fail-closed: an absent scope resolves
342
383
  // to '' so a resource-pinned predicate (e.g. ID = '{{ScopeResourceID}}') matches
343
384
  // NO rows rather than leaking — a session without the scope sees nothing.
344
385
  const scope = user.MagicLinkScope;
345
- ret = ret.replace(/\{\{ScopeResourceID\}\}/g, scope?.ResourceID ?? '');
346
- ret = ret.replace(/\{\{ScopeResourceType\}\}/g, scope?.ResourceType ?? '');
386
+ ret = ret.replace(/\{\{ScopeResourceID\}\}/g, (scope?.ResourceID ?? '').replace(/'/g, "''"));
387
+ ret = ret.replace(/\{\{ScopeResourceType\}\}/g, (scope?.ResourceType ?? '').replace(/'/g, "''"));
388
+ ret = this.resolveActingTokens(ret, user);
347
389
  }
348
- const unresolvedMatch = ret.match(/\{\{User\w+\}\}/);
390
+ const unresolvedMatch = ret.match(/\{\{(?:User|Acting)\w+\}\}/);
349
391
  if (unresolvedMatch) {
392
+ if (options?.unresolvedBehavior === 'match-nothing') {
393
+ // API-key row filters fail closed AND diagnosably: '' substitution is only
394
+ // safe for equality shapes (Col <> '' or LIKE '%%' match everything), so an
395
+ // unresolved token collapses the ENTIRE filter to a predicate that matches
396
+ // nothing regardless of the expression's operators.
397
+ LogError('Row filter has unresolved token after markup — resolving filter to (1=0): ' + unresolvedMatch[0] + ' in filter: ' + this.FilterText);
398
+ return '(1=0)';
399
+ }
350
400
  LogError('RLS filter has unresolved token after markup: ' + unresolvedMatch[0] + ' in filter: ' + this.FilterText);
351
401
  }
352
402
  return ret;
353
403
  }
404
+ /**
405
+ * Resolves the `{{Acting*}}` token family from {@link UserInfo.APIKeyActingContext}.
406
+ * Scalars substitute escaped; the list token renders as a canonical (sorted),
407
+ * per-element-escaped, quoted list for use inside `IN (...)`. Sorting is not
408
+ * cosmetic: the resolved clause participates in the RunView cache fingerprint,
409
+ * so the same set must always produce the same clause bytes (INV-2). An absent
410
+ * context or empty list leaves tokens unresolved, which the caller's
411
+ * unresolved-token handling turns into a match-nothing filter for key filters.
412
+ */
413
+ resolveActingTokens(text, user) {
414
+ const acting = user.APIKeyActingContext;
415
+ let ret = text;
416
+ const scalars = [
417
+ ['ActingOrganizationID', acting?.ActingOrganizationID],
418
+ ['ActingPersonID', acting?.ActingPersonID],
419
+ ['ActingScopeID', acting?.ActingScopeID],
420
+ ];
421
+ for (const [token, value] of scalars) {
422
+ if (value != null && value.length > 0) {
423
+ ret = ret.replace(new RegExp(`\\{\\{${token}\\}\\}`, 'g'), value.replace(/'/g, "''"));
424
+ }
425
+ }
426
+ const companies = acting?.ActingCompanyIDs;
427
+ if (companies && companies.length > 0) {
428
+ const rendered = [...companies]
429
+ .sort()
430
+ .map(c => `'${c.replace(/'/g, "''")}'`)
431
+ .join(',');
432
+ ret = ret.replace(/\{\{ActingCompanyIDs\}\}/g, rendered);
433
+ }
434
+ return ret;
435
+ }
354
436
  }
355
437
  /**
356
438
  * Stores the fundamental permissions and access rights that can be granted to users and roles throughout the system.