@memberjunction/core-entities 6.2.0-edge.4 → 6.2.0-edge.6

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 (60) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/custom/ConversationWriteAccess.d.ts +5 -0
  3. package/dist/custom/ConversationWriteAccess.d.ts.map +1 -1
  4. package/dist/custom/ConversationWriteAccess.js +6 -6
  5. package/dist/custom/ConversationWriteAccess.js.map +1 -1
  6. package/dist/custom/MJConversationDetailEntityExtended.d.ts +70 -4
  7. package/dist/custom/MJConversationDetailEntityExtended.d.ts.map +1 -1
  8. package/dist/custom/MJConversationDetailEntityExtended.js +268 -28
  9. package/dist/custom/MJConversationDetailEntityExtended.js.map +1 -1
  10. package/dist/custom/MJQueryEntityExtended.d.ts +37 -1
  11. package/dist/custom/MJQueryEntityExtended.d.ts.map +1 -1
  12. package/dist/custom/MJQueryEntityExtended.js +92 -5
  13. package/dist/custom/MJQueryEntityExtended.js.map +1 -1
  14. package/dist/custom/MJThemeEntityExtended.d.ts +13 -0
  15. package/dist/custom/MJThemeEntityExtended.d.ts.map +1 -0
  16. package/dist/custom/MJThemeEntityExtended.js +37 -0
  17. package/dist/custom/MJThemeEntityExtended.js.map +1 -0
  18. package/dist/custom/MJUserViewEntityExtended.d.ts +39 -4
  19. package/dist/custom/MJUserViewEntityExtended.d.ts.map +1 -1
  20. package/dist/custom/MJUserViewEntityExtended.js +111 -18
  21. package/dist/custom/MJUserViewEntityExtended.js.map +1 -1
  22. package/dist/custom/approvals.d.ts +55 -0
  23. package/dist/custom/approvals.d.ts.map +1 -0
  24. package/dist/custom/approvals.js +120 -0
  25. package/dist/custom/approvals.js.map +1 -0
  26. package/dist/engines/InstanceConfigEngine.d.ts.map +1 -1
  27. package/dist/engines/InstanceConfigEngine.js +13 -3
  28. package/dist/engines/InstanceConfigEngine.js.map +1 -1
  29. package/dist/engines/PermissionEngine.d.ts +5 -4
  30. package/dist/engines/PermissionEngine.d.ts.map +1 -1
  31. package/dist/engines/PermissionEngine.js +7 -5
  32. package/dist/engines/PermissionEngine.js.map +1 -1
  33. package/dist/engines/QueryEngine.d.ts +81 -6
  34. package/dist/engines/QueryEngine.d.ts.map +1 -1
  35. package/dist/engines/QueryEngine.js +283 -4
  36. package/dist/engines/QueryEngine.js.map +1 -1
  37. package/dist/engines/UserInfoEngine.d.ts +48 -2
  38. package/dist/engines/UserInfoEngine.d.ts.map +1 -1
  39. package/dist/engines/UserInfoEngine.js +65 -8
  40. package/dist/engines/UserInfoEngine.js.map +1 -1
  41. package/dist/engines/conversations.d.ts +19 -1
  42. package/dist/engines/conversations.d.ts.map +1 -1
  43. package/dist/engines/conversations.js +125 -22
  44. package/dist/engines/conversations.js.map +1 -1
  45. package/dist/engines/knowledgeHubMetadata.d.ts +8 -3
  46. package/dist/engines/knowledgeHubMetadata.d.ts.map +1 -1
  47. package/dist/engines/knowledgeHubMetadata.js +19 -2
  48. package/dist/engines/knowledgeHubMetadata.js.map +1 -1
  49. package/dist/generated/entities/__mj.d.ts +4142 -111
  50. package/dist/generated/entities/__mj.d.ts.map +1 -1
  51. package/dist/generated/entities/__mj.js +5895 -262
  52. package/dist/generated/entities/__mj.js.map +1 -1
  53. package/dist/generated/remote_operations.d.ts +17 -5
  54. package/dist/generated/remote_operations.d.ts.map +1 -1
  55. package/dist/generated/remote_operations.js.map +1 -1
  56. package/dist/index.d.ts +2 -0
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +2 -0
  59. package/dist/index.js.map +1 -1
  60. package/package.json +6 -5
@@ -4,14 +4,29 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
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
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { BaseEngine, RegisterForStartup } from "@memberjunction/core";
8
- import { UUIDsEqual } from "@memberjunction/global";
7
+ var QueryEngine_1;
8
+ import { BaseEngine, LocalCacheManager, LogError, LogStatusEx, RegisterForStartup } from "@memberjunction/core";
9
+ import { GroupByUUID, IndexByUUID, UUIDsEqual } from "@memberjunction/global";
9
10
  /**
10
11
  * Caching of metadata for queries and related data, with auto-refresh on entity changes.
11
12
  * Returns `MJQueryEntityExtended` instances which include child-relationship getters
12
13
  * (QueryFields, QueryParameters, etc.) and business logic (UserCanRun, CategoryPath, etc.).
13
14
  */
14
- let QueryEngine = class QueryEngine extends BaseEngine {
15
+ /**
16
+ * Per entity, the columns whose change can change a query's results. `'all'` means any change.
17
+ * Name and CategoryID are in the cache key rather than in the definition hash: editing them leaves
18
+ * the old slots unreachable, so they are reclaimed too. A parameter's DefaultValue is not here:
19
+ * it is informational, never applied when the query runs (`QueryParameterProcessor`).
20
+ */
21
+ const RESULT_AFFECTING_COLUMNS = {
22
+ 'mj: queries': ['SQL', 'SQLDialectID', 'UsesTemplate', 'ExternalDataSourceID', 'IsMaterialized', 'CacheValidationSQL', 'Name', 'CategoryID'],
23
+ 'mj: query sqls': 'all',
24
+ 'mj: query parameters': ['QueryID', 'Name', 'Type', 'IsRequired', 'ValidationFilters'],
25
+ 'mj: query dependencies': 'all',
26
+ };
27
+ /** Engine properties a query definition is computed from. A change to any of them clears the memo. */
28
+ const DEFINITION_PROPERTIES = new Set(['_queries', '_parameters', '_dependencies', '_querySQLs', '_sqlDialects']);
29
+ let QueryEngine = QueryEngine_1 = class QueryEngine extends BaseEngine {
15
30
  constructor() {
16
31
  super(...arguments);
17
32
  this._queries = [];
@@ -23,6 +38,15 @@ let QueryEngine = class QueryEngine extends BaseEngine {
23
38
  this._dependencies = [];
24
39
  this._querySQLs = [];
25
40
  this._sqlDialects = [];
41
+ // --- Query definition signatures ---
42
+ /** Definition signatures by `queryID|platform`, cleared whenever a definition property changes. */
43
+ this._definitionMemo = new Map();
44
+ /** Lookup indexes for computing signatures, built on first use after the memo was cleared. */
45
+ this._definitionIndexes = null;
46
+ /** Saves seen starting with a result-affecting column dirty; see {@link trackDefinitionEdit}. */
47
+ this._resultAffectingSaves = new WeakSet();
48
+ /** Pending slot invalidations by lowercased query ID; see {@link scheduleSlotInvalidation}. */
49
+ this._pendingSlotInvalidations = new Map();
26
50
  }
27
51
  /**
28
52
  * Returns the global instance of the class. This is a singleton class, so there is only one instance of it in the application.
@@ -152,8 +176,263 @@ let QueryEngine = class QueryEngine extends BaseEngine {
152
176
  const lower = name.trim().toLowerCase();
153
177
  return this._categories.find(c => c.Name.trim().toLowerCase() === lower);
154
178
  }
179
+ /**
180
+ * How long, in milliseconds, a query must go without a result-affecting save on this process
181
+ * before its cached results are deleted. One edit saves the query, then its parameters, fields,
182
+ * entities and dependencies, then the query again, over several seconds; waiting for the burst
183
+ * to settle deletes the slots once instead of once per save.
184
+ */
185
+ get DefinitionEditSettleMs() {
186
+ return 3000;
187
+ }
188
+ /**
189
+ * The signature of what a query's results are computed from on `platform`: a hash of the SQL
190
+ * that runs there (`GetPlatformSQL`), the columns that change how it runs (`UsesTemplate`,
191
+ * `ExternalDataSourceID`, `IsMaterialized`, `SQLDialectID`), its `CacheValidationSQL`, its
192
+ * parameters' names, types, required flags and validation filters, and, recursively, the signatures of the queries it composes (a cycle
193
+ * is hashed as a marker rather than followed). Descriptive columns, parameter default values
194
+ * (informational only), field rows, permissions and cache settings are not part of it.
195
+ *
196
+ * The stamp is the newest `__mj_UpdatedAt` across the same rows. Computed once per query and
197
+ * platform, and again only after this engine's query data changes.
198
+ *
199
+ * @returns The signature, or undefined when the engine does not hold the query
200
+ */
201
+ GetDefinitionSignature(queryID, platform) {
202
+ if (!queryID)
203
+ return undefined;
204
+ return this.definitionSignature(queryID, platform, new Set())?.Signature;
205
+ }
206
+ /**
207
+ * The memoized signature, computing it (and any composed query's) on a miss. A signature whose
208
+ * computation met a cycle is not memoized: its value depends on where the walk entered the
209
+ * cycle, and two processes must agree on every query's hash.
210
+ */
211
+ definitionSignature(queryID, platform, visiting) {
212
+ const key = `${queryID.trim().toLowerCase()}|${platform}`;
213
+ const memo = this._definitionMemo.get(key);
214
+ if (memo)
215
+ return { Signature: memo, Cyclic: false };
216
+ const indexes = this.definitionIndexes();
217
+ const query = indexes.QueriesByID.Get(queryID);
218
+ if (!query)
219
+ return undefined;
220
+ visiting.add(key);
221
+ const parts = this.definitionParts(query, platform, indexes);
222
+ let newest = QueryEngine_1.timestampMs(query.__mj_UpdatedAt);
223
+ for (const row of [...(indexes.ParametersByQuery.Get(query.ID) ?? []), ...(indexes.QuerySQLsByQuery.Get(query.ID) ?? [])]) {
224
+ newest = Math.max(newest, QueryEngine_1.timestampMs(row.__mj_UpdatedAt));
225
+ }
226
+ let cyclic = false;
227
+ for (const dependency of QueryEngine_1.sortedDependencies(indexes.DependenciesByQuery.Get(query.ID))) {
228
+ newest = Math.max(newest, QueryEngine_1.timestampMs(dependency.__mj_UpdatedAt));
229
+ const dependencyID = dependency.DependsOnQueryID.toLowerCase();
230
+ if (visiting.has(`${dependencyID}|${platform}`)) {
231
+ cyclic = true;
232
+ parts.push(`dep:${dependencyID}:cycle`);
233
+ continue;
234
+ }
235
+ const composed = this.definitionSignature(dependency.DependsOnQueryID, platform, visiting);
236
+ cyclic = cyclic || composed?.Cyclic === true;
237
+ parts.push(`dep:${dependencyID}:${composed?.Signature.Hash ?? 'missing'}`);
238
+ newest = Math.max(newest, QueryEngine_1.timestampMs(composed?.Signature.Stamp));
239
+ }
240
+ visiting.delete(key);
241
+ const signature = {
242
+ QueryID: query.ID,
243
+ Hash: QueryEngine_1.hashText(parts.join('\u0001')),
244
+ Stamp: newest > 0 ? new Date(newest).toISOString() : undefined,
245
+ };
246
+ if (!cyclic) {
247
+ this._definitionMemo.set(key, signature);
248
+ }
249
+ return { Signature: signature, Cyclic: cyclic };
250
+ }
251
+ /** The hashed text of one query's own definition, without its composed queries. */
252
+ definitionParts(query, platform, indexes) {
253
+ const parts = [
254
+ `sql:${query.GetPlatformSQL(platform) ?? ''}`,
255
+ `dialect:${(query.SQLDialectID ?? '').toLowerCase()}`,
256
+ `template:${query.UsesTemplate ? 1 : 0}`,
257
+ `external:${(query.ExternalDataSourceID ?? '').toLowerCase()}`,
258
+ `materialized:${query.IsMaterialized ? 1 : 0}`,
259
+ `validation:${query.CacheValidationSQL ?? ''}`,
260
+ ];
261
+ const parameters = [...(indexes.ParametersByQuery.Get(query.ID) ?? [])]
262
+ .sort((a, b) => a.Name.toLowerCase().localeCompare(b.Name.toLowerCase()));
263
+ for (const p of parameters) {
264
+ parts.push(`param:${p.Name.toLowerCase()}\u0002${p.Type}\u0002${p.IsRequired ? 1 : 0}\u0002${p.ValidationFilters ?? ''}`);
265
+ }
266
+ return parts;
267
+ }
268
+ /** Dependency rows in a stable order, so the hash does not depend on load order. */
269
+ static sortedDependencies(rows) {
270
+ return [...(rows ?? [])].sort((a, b) => a.DependsOnQueryID.toLowerCase().localeCompare(b.DependsOnQueryID.toLowerCase()));
271
+ }
272
+ /** Builds (once per memo generation) the lookups signature computation reads. */
273
+ definitionIndexes() {
274
+ if (!this._definitionIndexes) {
275
+ this._definitionIndexes = {
276
+ QueriesByID: IndexByUUID(this.Queries),
277
+ ParametersByQuery: GroupByUUID(this.Parameters, p => p.QueryID),
278
+ DependenciesByQuery: GroupByUUID(this.Dependencies, d => d.QueryID),
279
+ DependentsByQuery: GroupByUUID(this.Dependencies, d => d.DependsOnQueryID),
280
+ QuerySQLsByQuery: GroupByUUID(this.QuerySQLs, q => q.QueryID),
281
+ };
282
+ }
283
+ return this._definitionIndexes;
284
+ }
285
+ /** Forgets every computed signature, so the next request recomputes from current data. */
286
+ clearDefinitionMemo(propertyName) {
287
+ if (DEFINITION_PROPERTIES.has(propertyName)) {
288
+ this._definitionMemo.clear();
289
+ this._definitionIndexes = null;
290
+ }
291
+ }
292
+ NotifyDataChange(config, data, changeType = 'refresh', affectedEntity) {
293
+ this.clearDefinitionMemo(config.PropertyName);
294
+ super.NotifyDataChange(config, data, changeType, affectedEntity);
295
+ }
296
+ emitPropertyChange(propertyName) {
297
+ this.clearDefinitionMemo(propertyName);
298
+ super.emitPropertyChange(propertyName);
299
+ }
300
+ /** Milliseconds since the epoch for a row timestamp, or 0 when absent or unreadable. */
301
+ static timestampMs(value) {
302
+ if (value == null)
303
+ return 0;
304
+ const ms = value instanceof Date ? value.getTime() : Date.parse(value);
305
+ return Number.isNaN(ms) ? 0 : ms;
306
+ }
307
+ /**
308
+ * A 53-bit hash of `text` as hex (cyrb53). Plain JavaScript, so a browser and a server hash the
309
+ * same text to the same value.
310
+ */
311
+ static hashText(text) {
312
+ let h1 = 0xdeadbeef;
313
+ let h2 = 0x41c6ce57;
314
+ for (let i = 0; i < text.length; i++) {
315
+ const ch = text.charCodeAt(i);
316
+ h1 = Math.imul(h1 ^ ch, 2654435761);
317
+ h2 = Math.imul(h2 ^ ch, 1597334677);
318
+ }
319
+ h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
320
+ h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
321
+ return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(16);
322
+ }
323
+ // --- Deleting cached results after an edit ---
324
+ /**
325
+ * Notes result-affecting edits made in this process before the base class applies the event.
326
+ * Only local saves and deletes count: every server's engine also hears about the edit, through
327
+ * the shared cache, but only the server that made it deletes the slots, so a fleet does not
328
+ * delete the same slots once per server while the others refill them.
329
+ */
330
+ async HandleIndividualBaseEntityEvent(event) {
331
+ try {
332
+ this.trackDefinitionEdit(event);
333
+ }
334
+ catch (e) {
335
+ LogError(`QueryEngine: tracking a query edit failed: ${e instanceof Error ? e.message : String(e)}`);
336
+ }
337
+ return super.HandleIndividualBaseEntityEvent(event);
338
+ }
339
+ /**
340
+ * Follows one save or delete of a query definition row. A save is judged when it starts, while
341
+ * the record still knows which columns are dirty, and acted on when it succeeds. A delete
342
+ * always counts. The slots of the affected query and of every query that composes it are then
343
+ * deleted once the edit settles (see {@link DefinitionEditSettleMs}). Deleting them is
344
+ * housekeeping: a read under the new definition already misses them (see
345
+ * {@link GetDefinitionSignature}).
346
+ */
347
+ trackDefinitionEdit(event) {
348
+ const entity = event.baseEntity;
349
+ const columns = entity ? RESULT_AFFECTING_COLUMNS[entity.EntityInfo.Name.trim().toLowerCase()] : undefined;
350
+ if (!entity || !columns)
351
+ return;
352
+ if (event.type === 'save_started') {
353
+ if (QueryEngine_1.isResultAffectingSave(entity, columns)) {
354
+ this._resultAffectingSaves.add(entity);
355
+ }
356
+ return;
357
+ }
358
+ if (event.type === 'save' && this._resultAffectingSaves.has(entity)) {
359
+ this._resultAffectingSaves.delete(entity);
360
+ this.invalidateAfterEdit(QueryEngine_1.editedQueryID(entity, undefined));
361
+ }
362
+ else if (event.type === 'delete') {
363
+ const payload = event.payload;
364
+ this.invalidateAfterEdit(QueryEngine_1.editedQueryID(entity, payload?.OldValues));
365
+ }
366
+ }
367
+ /** True for a create, or an update with any of `columns` dirty. */
368
+ static isResultAffectingSave(entity, columns) {
369
+ if (!entity.IsSaved || columns === 'all')
370
+ return true;
371
+ return columns.some(name => entity.GetFieldByName(name)?.Dirty === true);
372
+ }
373
+ /** The query a definition row belongs to: the row itself for a query, else its QueryID. */
374
+ static editedQueryID(entity, deletedValues) {
375
+ const isQuery = entity.EntityInfo.Name.trim().toLowerCase() === 'mj: queries';
376
+ const field = isQuery ? 'ID' : 'QueryID';
377
+ const value = deletedValues?.[field] ?? entity.GetFieldByName(field)?.Value;
378
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
379
+ }
380
+ /** Schedules slot deletion for `queryID` and every query that composes it, directly or not. */
381
+ invalidateAfterEdit(queryID) {
382
+ if (!queryID)
383
+ return;
384
+ for (const id of this.queryAndDependents(queryID)) {
385
+ this.scheduleSlotInvalidation(id);
386
+ }
387
+ }
388
+ /** `queryID` plus every query that reaches it through composition. Cycles end the walk. */
389
+ queryAndDependents(queryID) {
390
+ const dependents = this.definitionIndexes().DependentsByQuery;
391
+ const seen = new Set();
392
+ const result = [];
393
+ const pending = [queryID];
394
+ while (pending.length > 0) {
395
+ const id = pending.pop();
396
+ const key = id.trim().toLowerCase();
397
+ if (seen.has(key))
398
+ continue;
399
+ seen.add(key);
400
+ result.push(id);
401
+ for (const row of dependents.Get(id) ?? []) {
402
+ pending.push(row.QueryID);
403
+ }
404
+ }
405
+ return result;
406
+ }
407
+ /** (Re)starts the settle timer for one query's slot deletion. */
408
+ scheduleSlotInvalidation(queryID) {
409
+ const key = queryID.trim().toLowerCase();
410
+ const existing = this._pendingSlotInvalidations.get(key);
411
+ if (existing)
412
+ clearTimeout(existing);
413
+ const timer = setTimeout(() => {
414
+ this._pendingSlotInvalidations.delete(key);
415
+ void this.invalidateQuerySlots(queryID);
416
+ }, this.DefinitionEditSettleMs);
417
+ // A pending deletion must not keep a short-lived process (a CLI run) alive.
418
+ timer.unref?.();
419
+ this._pendingSlotInvalidations.set(key, timer);
420
+ }
421
+ /** Deletes one query's cached results. Never throws. */
422
+ async invalidateQuerySlots(queryID) {
423
+ try {
424
+ const cache = LocalCacheManager.Instance;
425
+ if (!cache.IsInitialized)
426
+ return;
427
+ const removed = await cache.InvalidateRunQueryResultsForQuery(queryID);
428
+ LogStatusEx({ message: `QueryEngine: deleted ${removed} cached result slot(s) of query ${queryID} after its definition changed`, verboseOnly: true });
429
+ }
430
+ catch (e) {
431
+ LogError(`QueryEngine: deleting cached results of query ${queryID} failed: ${e instanceof Error ? e.message : String(e)}`);
432
+ }
433
+ }
155
434
  };
156
- QueryEngine = __decorate([
435
+ QueryEngine = QueryEngine_1 = __decorate([
157
436
  RegisterForStartup()
158
437
  ], QueryEngine);
159
438
  export { QueryEngine };
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEngine.js","sourceRoot":"","sources":["../../src/engines/QueryEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryEngine.js","sourceRoot":"","sources":["../../src/engines/QueryEngine.ts"],"names":[],"mappings":"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"}
@@ -85,6 +85,12 @@ export declare class UserInfoEngine extends BaseEngine<UserInfoEngine> {
85
85
  * These are queued and flushed after the debounce period of inactivity.
86
86
  */
87
87
  private _pendingSettings;
88
+ /**
89
+ * Engine properties already reported as permission-constrained by
90
+ * {@link readIfPermitted}, so the notice is logged once per property per process
91
+ * rather than on every read (notification badges re-read on every emission).
92
+ */
93
+ private _permissionNoticesLogged;
88
94
  /**
89
95
  * Timer handle for the debounce flush
90
96
  */
@@ -140,16 +146,45 @@ export declare class UserInfoEngine extends BaseEngine<UserInfoEngine> {
140
146
  * synchronously (e.g. form-variant picker → form reload) depend on
141
147
  * this freshness guarantee.
142
148
  *
149
+ * A user who cannot read `MJ: User Settings` (a permission-constrained session such as an
150
+ * external magic-link user) gets `undefined` — "not set", so callers fall back to their
151
+ * defaults — instead of a thrown `PermissionConstrainedError`. The denial is logged once.
152
+ *
143
153
  * @param settingKey - The setting key to find (e.g., "default-view-setting/Contacts")
144
154
  * @returns The setting value string, or undefined if not found
145
155
  */
146
156
  GetSetting(settingKey: string): string | undefined;
147
157
  /**
148
158
  * Get a user setting entity by key.
159
+ *
160
+ * Like {@link GetSetting}, a user who cannot read `MJ: User Settings` (e.g. an external
161
+ * magic-link session) gets `undefined` — "not set" — instead of a thrown
162
+ * `PermissionConstrainedError`; the denial is logged once.
149
163
  * @param settingKey - The setting key to find
150
164
  * @returns The MJUserSettingEntity, or undefined if not found
151
165
  */
152
166
  GetSettingEntity(settingKey: string): MJUserSettingEntity | undefined;
167
+ /**
168
+ * Reads a permission-gated engine property for a LOOKUP whose empty answer is safe
169
+ * ("no such setting", "no notifications"). When the current user lacks read permission
170
+ * on the property's entity, returns `[]` and logs the denial once per property instead
171
+ * of letting `PermissionConstrainedError` escape.
172
+ *
173
+ * Engines are permission-constrained by design for restricted sessions (external
174
+ * magic-link users hold only 'Magic Link Baseline' plus a granted role), so these
175
+ * lookups run at every boot for such users and must not throw.
176
+ *
177
+ * Also used by the read-only display collections whose empty answer is equally safe —
178
+ * {@link UserFavorites}, {@link NotificationPreferences} and {@link NotificationTypes}: no
179
+ * caller treats an empty one as a cue to create records, and their consumers (Home,
180
+ * profile, notification settings, Data Explorer) run inside a restricted session too.
181
+ *
182
+ * Deliberately NOT used by the raw collection getters whose emptiness means "brand-new
183
+ * user" (`UserSettings`, `Workspaces`, `UserApplications`, ...): those keep throwing,
184
+ * because such a caller would otherwise auto-create records for a user who simply cannot
185
+ * see them. Those callers must check {@link IsPermissionConstrained} first.
186
+ */
187
+ private readIfPermitted;
153
188
  /**
154
189
  * Set a user setting by key. Creates a new setting if it doesn't exist.
155
190
  * @param settingKey - The setting key (e.g., "default-view-setting/Contacts")
@@ -212,6 +247,14 @@ export declare class UserInfoEngine extends BaseEngine<UserInfoEngine> {
212
247
  * Get unread notifications for the current user
213
248
  */
214
249
  get UnreadNotifications(): MJUserNotificationEntity[];
250
+ /**
251
+ * The current user's notifications (same filter and order as {@link UserNotifications}),
252
+ * or `[]` when the user cannot read `MJ: User Notifications` — a permission-constrained
253
+ * session such as an external magic-link user. Never throws `PermissionConstrainedError`;
254
+ * the denial is logged once. Use this for badges, counts and lists that should simply
255
+ * show nothing for such users.
256
+ */
257
+ get UserNotificationsIfPermitted(): MJUserNotificationEntity[];
215
258
  /**
216
259
  * Get the count of unread notifications
217
260
  */
@@ -244,7 +287,8 @@ export declare class UserInfoEngine extends BaseEngine<UserInfoEngine> {
244
287
  */
245
288
  private applicationDefaultSequence;
246
289
  /**
247
- * Get all favorites for the current user, ordered by creation date (newest first)
290
+ * Get all favorites for the current user, ordered by creation date (newest first).
291
+ * Empty (not a thrown `PermissionConstrainedError`) for a session that cannot read them.
248
292
  */
249
293
  get UserFavorites(): MJUserFavoriteEntity[];
250
294
  /**
@@ -470,7 +514,8 @@ export declare class UserInfoEngine extends BaseEngine<UserInfoEngine> {
470
514
  */
471
515
  private doCreateDefaultApplications;
472
516
  /**
473
- * Get all notification preferences for the current user
517
+ * Get all notification preferences for the current user.
518
+ * Empty (not a thrown `PermissionConstrainedError`) for a session that cannot read them.
474
519
  */
475
520
  get NotificationPreferences(): MJUserNotificationPreferenceEntity[];
476
521
  GetUserPreferenceForType(userId: string, typeId: string): MJUserNotificationPreferenceEntity | undefined;
@@ -481,6 +526,7 @@ export declare class UserInfoEngine extends BaseEngine<UserInfoEngine> {
481
526
  /**
482
527
  * Get all notification types.
483
528
  * Notification types are global (not user-specific) and define the available notification categories.
529
+ * Empty (not a thrown `PermissionConstrainedError`) for a session that cannot read them.
484
530
  */
485
531
  get NotificationTypes(): MJUserNotificationTypeEntity[];
486
532
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UserInfoEngine.d.ts","sourceRoot":"","sources":["../../src/engines/UserInfoEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserInfoEngine.d.ts","sourceRoot":"","sources":["../../src/engines/UserInfoEngine.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,12 @@ let UserInfoEngine = UserInfoEngine_1 = class UserInfoEngine extends BaseEngine
67
67
  * These are queued and flushed after the debounce period of inactivity.
68
68
  */
69
69
  this._pendingSettings = new Map();
70
+ /**
71
+ * Engine properties already reported as permission-constrained by
72
+ * {@link readIfPermitted}, so the notice is logged once per property per process
73
+ * rather than on every read (notification badges re-read on every emission).
74
+ */
75
+ this._permissionNoticesLogged = new Set();
70
76
  /**
71
77
  * Timer handle for the debounce flush
72
78
  */
@@ -235,6 +241,10 @@ let UserInfoEngine = UserInfoEngine_1 = class UserInfoEngine extends BaseEngine
235
241
  * synchronously (e.g. form-variant picker → form reload) depend on
236
242
  * this freshness guarantee.
237
243
  *
244
+ * A user who cannot read `MJ: User Settings` (a permission-constrained session such as an
245
+ * external magic-link user) gets `undefined` — "not set", so callers fall back to their
246
+ * defaults — instead of a thrown `PermissionConstrainedError`. The denial is logged once.
247
+ *
238
248
  * @param settingKey - The setting key to find (e.g., "default-view-setting/Contacts")
239
249
  * @returns The setting value string, or undefined if not found
240
250
  */
@@ -242,16 +252,50 @@ let UserInfoEngine = UserInfoEngine_1 = class UserInfoEngine extends BaseEngine
242
252
  const pending = this._pendingSettings.get(settingKey);
243
253
  if (pending !== undefined)
244
254
  return pending.value;
245
- const setting = this.UserSettings.find((s) => s.Setting === settingKey);
255
+ const setting = this.readIfPermitted('_userSettings', () => this.UserSettings).find((s) => s.Setting === settingKey);
246
256
  return setting?.Value ?? undefined;
247
257
  }
248
258
  /**
249
259
  * Get a user setting entity by key.
260
+ *
261
+ * Like {@link GetSetting}, a user who cannot read `MJ: User Settings` (e.g. an external
262
+ * magic-link session) gets `undefined` — "not set" — instead of a thrown
263
+ * `PermissionConstrainedError`; the denial is logged once.
250
264
  * @param settingKey - The setting key to find
251
265
  * @returns The MJUserSettingEntity, or undefined if not found
252
266
  */
253
267
  GetSettingEntity(settingKey) {
254
- return this.UserSettings.find((s) => s.Setting === settingKey);
268
+ return this.readIfPermitted('_userSettings', () => this.UserSettings).find((s) => s.Setting === settingKey);
269
+ }
270
+ /**
271
+ * Reads a permission-gated engine property for a LOOKUP whose empty answer is safe
272
+ * ("no such setting", "no notifications"). When the current user lacks read permission
273
+ * on the property's entity, returns `[]` and logs the denial once per property instead
274
+ * of letting `PermissionConstrainedError` escape.
275
+ *
276
+ * Engines are permission-constrained by design for restricted sessions (external
277
+ * magic-link users hold only 'Magic Link Baseline' plus a granted role), so these
278
+ * lookups run at every boot for such users and must not throw.
279
+ *
280
+ * Also used by the read-only display collections whose empty answer is equally safe —
281
+ * {@link UserFavorites}, {@link NotificationPreferences} and {@link NotificationTypes}: no
282
+ * caller treats an empty one as a cue to create records, and their consumers (Home,
283
+ * profile, notification settings, Data Explorer) run inside a restricted session too.
284
+ *
285
+ * Deliberately NOT used by the raw collection getters whose emptiness means "brand-new
286
+ * user" (`UserSettings`, `Workspaces`, `UserApplications`, ...): those keep throwing,
287
+ * because such a caller would otherwise auto-create records for a user who simply cannot
288
+ * see them. Those callers must check {@link IsPermissionConstrained} first.
289
+ */
290
+ readIfPermitted(propertyName, read) {
291
+ if (!this.IsPropertyPermissionConstrained(propertyName)) {
292
+ return read();
293
+ }
294
+ if (!this._permissionNoticesLogged.has(propertyName)) {
295
+ this._permissionNoticesLogged.add(propertyName);
296
+ LogStatus(`UserInfoEngine: current user cannot read ${propertyName} (permission-constrained session); treating it as empty.`);
297
+ }
298
+ return [];
255
299
  }
256
300
  /**
257
301
  * Set a user setting by key. Creates a new setting if it doesn't exist.
@@ -473,7 +517,17 @@ let UserInfoEngine = UserInfoEngine_1 = class UserInfoEngine extends BaseEngine
473
517
  * Get unread notifications for the current user
474
518
  */
475
519
  get UnreadNotifications() {
476
- return this.UserNotifications.filter((n) => n.Unread);
520
+ return this.UserNotificationsIfPermitted.filter((n) => n.Unread);
521
+ }
522
+ /**
523
+ * The current user's notifications (same filter and order as {@link UserNotifications}),
524
+ * or `[]` when the user cannot read `MJ: User Notifications` — a permission-constrained
525
+ * session such as an external magic-link user. Never throws `PermissionConstrainedError`;
526
+ * the denial is logged once. Use this for badges, counts and lists that should simply
527
+ * show nothing for such users.
528
+ */
529
+ get UserNotificationsIfPermitted() {
530
+ return this.readIfPermitted('_userNotifications', () => this.UserNotifications);
477
531
  }
478
532
  /**
479
533
  * Get the count of unread notifications
@@ -534,12 +588,13 @@ let UserInfoEngine = UserInfoEngine_1 = class UserInfoEngine extends BaseEngine
534
588
  return this.GetApplicationInfo(applicationId)?.DefaultSequence ?? 100;
535
589
  }
536
590
  /**
537
- * Get all favorites for the current user, ordered by creation date (newest first)
591
+ * Get all favorites for the current user, ordered by creation date (newest first).
592
+ * Empty (not a thrown `PermissionConstrainedError`) for a session that cannot read them.
538
593
  */
539
594
  get UserFavorites() {
540
595
  if (!this._loadedForUserId)
541
596
  return [];
542
- return this.GetConfigData('_userFavorites')
597
+ return this.readIfPermitted('_userFavorites', () => this.GetConfigData('_userFavorites'))
543
598
  .filter((f) => UUIDsEqual(f.UserID, this._loadedForUserId))
544
599
  .sort((a, b) => new Date(b.Get('__mj_CreatedAt')).getTime() - new Date(a.Get('__mj_CreatedAt')).getTime());
545
600
  }
@@ -1155,12 +1210,13 @@ let UserInfoEngine = UserInfoEngine_1 = class UserInfoEngine extends BaseEngine
1155
1210
  return createdUserApps;
1156
1211
  }
1157
1212
  /**
1158
- * Get all notification preferences for the current user
1213
+ * Get all notification preferences for the current user.
1214
+ * Empty (not a thrown `PermissionConstrainedError`) for a session that cannot read them.
1159
1215
  */
1160
1216
  get NotificationPreferences() {
1161
1217
  if (!this._loadedForUserId)
1162
1218
  return [];
1163
- return this.GetConfigData('_userNotificationPreferences')
1219
+ return this.readIfPermitted('_userNotificationPreferences', () => this.GetConfigData('_userNotificationPreferences'))
1164
1220
  .filter((p) => UUIDsEqual(p.UserID, this._loadedForUserId));
1165
1221
  }
1166
1222
  GetUserPreferenceForType(userId, typeId) {
@@ -1177,9 +1233,10 @@ let UserInfoEngine = UserInfoEngine_1 = class UserInfoEngine extends BaseEngine
1177
1233
  /**
1178
1234
  * Get all notification types.
1179
1235
  * Notification types are global (not user-specific) and define the available notification categories.
1236
+ * Empty (not a thrown `PermissionConstrainedError`) for a session that cannot read them.
1180
1237
  */
1181
1238
  get NotificationTypes() {
1182
- return this.GetConfigData('_notificationTypes');
1239
+ return this.readIfPermitted('_notificationTypes', () => this.GetConfigData('_notificationTypes'));
1183
1240
  }
1184
1241
  };
1185
1242
  UserInfoEngine = UserInfoEngine_1 = __decorate([