@memberjunction/core-entities 2.128.0 → 2.129.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/custom/ResourcePermissions/ResourcePermissionEngine.d.ts.map +1 -1
  2. package/dist/custom/ResourcePermissions/ResourcePermissionEngine.js +14 -4
  3. package/dist/custom/ResourcePermissions/ResourcePermissionEngine.js.map +1 -1
  4. package/dist/engines/EncryptionEngineBase.d.ts +246 -0
  5. package/dist/engines/EncryptionEngineBase.d.ts.map +1 -0
  6. package/dist/engines/EncryptionEngineBase.js +355 -0
  7. package/dist/engines/EncryptionEngineBase.js.map +1 -0
  8. package/dist/engines/TypeTablesCache.d.ts.map +1 -1
  9. package/dist/engines/TypeTablesCache.js +2 -1
  10. package/dist/engines/TypeTablesCache.js.map +1 -1
  11. package/dist/engines/UserInfoEngine.d.ts +228 -0
  12. package/dist/engines/UserInfoEngine.d.ts.map +1 -0
  13. package/dist/engines/UserInfoEngine.js +599 -0
  14. package/dist/engines/UserInfoEngine.js.map +1 -0
  15. package/dist/engines/artifacts.d.ts.map +1 -1
  16. package/dist/engines/artifacts.js +2 -1
  17. package/dist/engines/artifacts.js.map +1 -1
  18. package/dist/engines/component-metadata.d.ts.map +1 -1
  19. package/dist/engines/component-metadata.js +10 -5
  20. package/dist/engines/component-metadata.js.map +1 -1
  21. package/dist/engines/dashboards.d.ts.map +1 -1
  22. package/dist/engines/dashboards.js +19 -6
  23. package/dist/engines/dashboards.js.map +1 -1
  24. package/dist/generated/entity_subclasses.d.ts +1504 -418
  25. package/dist/generated/entity_subclasses.d.ts.map +1 -1
  26. package/dist/generated/entity_subclasses.js +2852 -1188
  27. package/dist/generated/entity_subclasses.js.map +1 -1
  28. package/dist/index.d.ts +2 -7
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -7
  31. package/dist/index.js.map +1 -1
  32. package/package.json +5 -5
  33. package/dist/custom/AIAgentExtended.d.ts +0 -13
  34. package/dist/custom/AIAgentExtended.d.ts.map +0 -1
  35. package/dist/custom/AIAgentExtended.js +0 -37
  36. package/dist/custom/AIAgentExtended.js.map +0 -1
  37. package/dist/custom/AIAgentRunExtended.d.ts +0 -32
  38. package/dist/custom/AIAgentRunExtended.d.ts.map +0 -1
  39. package/dist/custom/AIAgentRunExtended.js +0 -136
  40. package/dist/custom/AIAgentRunExtended.js.map +0 -1
  41. package/dist/custom/AIAgentRunStepExtended.d.ts +0 -48
  42. package/dist/custom/AIAgentRunStepExtended.d.ts.map +0 -1
  43. package/dist/custom/AIAgentRunStepExtended.js +0 -149
  44. package/dist/custom/AIAgentRunStepExtended.js.map +0 -1
  45. package/dist/custom/AIModelExtended.d.ts +0 -14
  46. package/dist/custom/AIModelExtended.d.ts.map +0 -1
  47. package/dist/custom/AIModelExtended.js +0 -36
  48. package/dist/custom/AIModelExtended.js.map +0 -1
  49. package/dist/custom/AIPromptCategoryExtended.d.ts +0 -7
  50. package/dist/custom/AIPromptCategoryExtended.d.ts.map +0 -1
  51. package/dist/custom/AIPromptCategoryExtended.js +0 -26
  52. package/dist/custom/AIPromptCategoryExtended.js.map +0 -1
  53. package/dist/custom/AIPromptExtended.d.ts +0 -51
  54. package/dist/custom/AIPromptExtended.d.ts.map +0 -1
  55. package/dist/custom/AIPromptExtended.js +0 -169
  56. package/dist/custom/AIPromptExtended.js.map +0 -1
  57. package/dist/custom/AIPromptRunEntityExtended.d.ts +0 -47
  58. package/dist/custom/AIPromptRunEntityExtended.d.ts.map +0 -1
  59. package/dist/custom/AIPromptRunEntityExtended.js +0 -156
  60. package/dist/custom/AIPromptRunEntityExtended.js.map +0 -1
@@ -0,0 +1,599 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.UserInfoEngine = void 0;
10
+ const core_1 = require("@memberjunction/core");
11
+ /**
12
+ * UserInfoEngine is a singleton engine that provides centralized access to user-specific data
13
+ * including notifications, workspaces, applications, favorites, and record logs.
14
+ *
15
+ * This engine consolidates multiple user-related RunView calls into a single batched load,
16
+ * improving performance and enabling local caching for faster subsequent access.
17
+ *
18
+ * Usage:
19
+ * ```typescript
20
+ * // Get the instance (auto-configured on startup)
21
+ * const engine = UserInfoEngine.Instance;
22
+ *
23
+ * // Access user data
24
+ * const notifications = engine.UserNotifications;
25
+ * const workspace = engine.CurrentWorkspace;
26
+ * const apps = engine.UserApplications;
27
+ * ```
28
+ *
29
+ * Note: This engine filters all data by the current user's ID automatically.
30
+ * On the server side, you must call Config() with contextUser to specify which user's data to load.
31
+ */
32
+ let UserInfoEngine = class UserInfoEngine extends core_1.BaseEngine {
33
+ constructor() {
34
+ super(...arguments);
35
+ // Private storage for entity data
36
+ this._UserNotifications = [];
37
+ this._Workspaces = [];
38
+ this._UserApplications = [];
39
+ this._UserFavorites = [];
40
+ this._UserRecordLogs = [];
41
+ this._UserSettings = [];
42
+ // Track the user ID we loaded data for
43
+ this._loadedForUserId = null;
44
+ // Track in-progress CreateDefaultApplications call to prevent duplicate execution
45
+ this._createDefaultAppsPromise = null;
46
+ }
47
+ /**
48
+ * Returns the global instance of the class. This is a singleton class, so there is only one instance of it in the application.
49
+ * Do not directly create new instances of it, always use this method to get the instance.
50
+ */
51
+ static get Instance() {
52
+ return super.getInstance();
53
+ }
54
+ /**
55
+ * Configures the engine by loading user-specific metadata from the database.
56
+ * All entities are filtered by the current user's ID and cached locally for performance.
57
+ *
58
+ * @param forceRefresh - If true, forces a refresh from the server even if data is cached
59
+ * @param contextUser - The user context (required for server-side, auto-detected on client)
60
+ * @param provider - Optional custom metadata provider
61
+ */
62
+ async Config(forceRefresh, contextUser, provider) {
63
+ const md = new core_1.Metadata();
64
+ const userId = contextUser?.ID || md.CurrentUser?.ID;
65
+ if (!userId) {
66
+ console.warn('UserInfoEngine: No user context available, skipping configuration');
67
+ return;
68
+ }
69
+ // Check if we need to reload due to user change
70
+ if (this._loadedForUserId && this._loadedForUserId !== userId) {
71
+ forceRefresh = true; // Force refresh if user changed
72
+ }
73
+ // Note: We intentionally do NOT use Filter or OrderBy in configs.
74
+ // This allows BaseEngine to use immediate array mutations for better performance.
75
+ // Filtering by user and sorting is done in the getter methods instead.
76
+ // This also makes the engine reusable for server-side admin scenarios where
77
+ // all users' data might be needed.
78
+ const configs = [
79
+ {
80
+ Type: 'entity',
81
+ EntityName: 'User Notifications',
82
+ PropertyName: '_UserNotifications',
83
+ CacheLocal: true
84
+ },
85
+ {
86
+ Type: 'entity',
87
+ EntityName: 'Workspaces',
88
+ PropertyName: '_Workspaces',
89
+ CacheLocal: true
90
+ },
91
+ {
92
+ Type: 'entity',
93
+ EntityName: 'MJ: User Settings',
94
+ PropertyName: '_UserSettings',
95
+ CacheLocal: true
96
+ },
97
+ {
98
+ Type: 'entity',
99
+ EntityName: 'User Applications',
100
+ PropertyName: '_UserApplications',
101
+ CacheLocal: true
102
+ },
103
+ {
104
+ Type: 'entity',
105
+ EntityName: 'User Favorites',
106
+ PropertyName: '_UserFavorites',
107
+ CacheLocal: true
108
+ },
109
+ {
110
+ Type: 'entity',
111
+ EntityName: 'User Record Logs',
112
+ PropertyName: '_UserRecordLogs',
113
+ CacheLocal: true
114
+ }
115
+ ];
116
+ await super.Load(configs, provider, forceRefresh, contextUser);
117
+ this._loadedForUserId = userId;
118
+ }
119
+ // ========================================================================
120
+ // PUBLIC ACCESSORS
121
+ // ========================================================================
122
+ /**
123
+ * Get all notifications for the current user, ordered by creation date (newest first)
124
+ */
125
+ get UserNotifications() {
126
+ if (!this._loadedForUserId)
127
+ return [];
128
+ return (this._UserNotifications || [])
129
+ .filter(n => n.UserID === this._loadedForUserId)
130
+ .sort((a, b) => new Date(b.Get('__mj_CreatedAt')).getTime() - new Date(a.Get('__mj_CreatedAt')).getTime());
131
+ }
132
+ /**
133
+ * Get all settings for the current user
134
+ */
135
+ get UserSettings() {
136
+ if (!this._loadedForUserId)
137
+ return [];
138
+ return (this._UserSettings || []).filter(s => s.UserID === this._loadedForUserId);
139
+ }
140
+ /**
141
+ * Get unread notifications for the current user
142
+ */
143
+ get UnreadNotifications() {
144
+ return this.UserNotifications.filter(n => n.Unread);
145
+ }
146
+ /**
147
+ * Get the count of unread notifications
148
+ */
149
+ get UnreadNotificationCount() {
150
+ return this.UnreadNotifications.length;
151
+ }
152
+ /**
153
+ * Get all workspaces for the current user
154
+ */
155
+ get Workspaces() {
156
+ if (!this._loadedForUserId)
157
+ return [];
158
+ return (this._Workspaces || []).filter(w => w.UserID === this._loadedForUserId);
159
+ }
160
+ /**
161
+ * Get the current user's primary workspace (first one if multiple exist)
162
+ */
163
+ get CurrentWorkspace() {
164
+ const workspaces = this.Workspaces;
165
+ return workspaces.length > 0 ? workspaces[0] : null;
166
+ }
167
+ /**
168
+ * Get all applications enabled for the current user, ordered by sequence then application name
169
+ */
170
+ get UserApplications() {
171
+ if (!this._loadedForUserId)
172
+ return [];
173
+ return (this._UserApplications || [])
174
+ .filter(ua => ua.UserID === this._loadedForUserId)
175
+ .sort((a, b) => {
176
+ // Sort by Sequence first, then by Application name
177
+ if (a.Sequence !== b.Sequence) {
178
+ return a.Sequence - b.Sequence;
179
+ }
180
+ return (a.Application || '').localeCompare(b.Application || '');
181
+ });
182
+ }
183
+ /**
184
+ * Get all favorites for the current user, ordered by creation date (newest first)
185
+ */
186
+ get UserFavorites() {
187
+ if (!this._loadedForUserId)
188
+ return [];
189
+ return (this._UserFavorites || [])
190
+ .filter(f => f.UserID === this._loadedForUserId)
191
+ .sort((a, b) => new Date(b.Get('__mj_CreatedAt')).getTime() - new Date(a.Get('__mj_CreatedAt')).getTime());
192
+ }
193
+ /**
194
+ * Get all record logs for the current user (recent record access), ordered by LatestAt (most recent first)
195
+ */
196
+ get UserRecordLogs() {
197
+ if (!this._loadedForUserId)
198
+ return [];
199
+ return (this._UserRecordLogs || [])
200
+ .filter(r => r.UserID === this._loadedForUserId)
201
+ .sort((a, b) => new Date(b.LatestAt).getTime() - new Date(a.LatestAt).getTime());
202
+ }
203
+ // ========================================================================
204
+ // RAW DATA ACCESSORS (unfiltered, for admin/server scenarios)
205
+ // ========================================================================
206
+ /**
207
+ * Get ALL notifications in the cache (unfiltered by user).
208
+ * Useful for server-side admin scenarios.
209
+ */
210
+ get AllNotifications() {
211
+ return this._UserNotifications || [];
212
+ }
213
+ /**
214
+ * Get ALL user applications in the cache (unfiltered by user).
215
+ * Useful for server-side admin scenarios.
216
+ */
217
+ get AllUserApplications() {
218
+ return this._UserApplications || [];
219
+ }
220
+ /**
221
+ * Get notifications for a specific user
222
+ * @param userId - The user ID to filter by
223
+ */
224
+ GetNotificationsForUser(userId) {
225
+ return (this._UserNotifications || [])
226
+ .filter(n => n.UserID === userId)
227
+ .sort((a, b) => new Date(b.Get('__mj_CreatedAt')).getTime() - new Date(a.Get('__mj_CreatedAt')).getTime());
228
+ }
229
+ /**
230
+ * Get user applications for a specific user
231
+ * @param userId - The user ID to filter by
232
+ */
233
+ GetUserApplicationsForUser(userId) {
234
+ return (this._UserApplications || [])
235
+ .filter(ua => ua.UserID === userId)
236
+ .sort((a, b) => {
237
+ if (a.Sequence !== b.Sequence) {
238
+ return a.Sequence - b.Sequence;
239
+ }
240
+ return (a.Application || '').localeCompare(b.Application || '');
241
+ });
242
+ }
243
+ // ========================================================================
244
+ // UTILITY METHODS
245
+ // ========================================================================
246
+ /**
247
+ * Get a notification by ID
248
+ * @param notificationId - The notification ID to find
249
+ */
250
+ GetNotificationById(notificationId) {
251
+ return this.UserNotifications.find(n => n.ID === notificationId);
252
+ }
253
+ /**
254
+ * Get a user application by application ID
255
+ * @param applicationId - The application ID to find
256
+ */
257
+ GetUserApplicationByAppId(applicationId) {
258
+ return this.UserApplications.find(ua => ua.ApplicationID === applicationId);
259
+ }
260
+ /**
261
+ * Get favorites for a specific entity
262
+ * @param entityId - The entity ID to filter by
263
+ */
264
+ GetFavoritesForEntity(entityId) {
265
+ return this.UserFavorites.filter(f => f.EntityID === entityId);
266
+ }
267
+ /**
268
+ * Get recent record logs for a specific entity
269
+ * @param entityId - The entity ID to filter by
270
+ * @param maxItems - Maximum number of items to return (default: 10)
271
+ */
272
+ GetRecentRecordsForEntity(entityId, maxItems = 10) {
273
+ return this.UserRecordLogs
274
+ .filter(r => r.EntityID === entityId)
275
+ .slice(0, maxItems);
276
+ }
277
+ /**
278
+ * Check if a record is in the user's favorites
279
+ * @param entityId - The entity ID
280
+ * @param recordId - The record ID
281
+ */
282
+ IsRecordFavorite(entityId, recordId) {
283
+ return this.UserFavorites.some(f => f.EntityID === entityId && f.RecordID === recordId);
284
+ }
285
+ /**
286
+ * Get the user ID this engine was loaded for
287
+ */
288
+ get LoadedForUserId() {
289
+ return this._loadedForUserId;
290
+ }
291
+ // ========================================================================
292
+ // ACCESS CHECKING METHODS
293
+ // ========================================================================
294
+ /**
295
+ * Check the user's access status for an application.
296
+ * @param applicationId - The application ID to check
297
+ * @returns The user's access status for this application
298
+ */
299
+ CheckUserApplicationAccess(applicationId) {
300
+ const userApp = this.GetUserApplicationByAppId(applicationId);
301
+ if (!userApp) {
302
+ return 'not_installed';
303
+ }
304
+ return userApp.IsActive ? 'installed_active' : 'installed_inactive';
305
+ }
306
+ /**
307
+ * Check if an application is inactive in the system metadata.
308
+ * @param applicationId - The application ID to check
309
+ */
310
+ IsApplicationInactive(applicationId) {
311
+ const md = new core_1.Metadata();
312
+ const appInfo = md.Applications.find(a => a.ID === applicationId);
313
+ return appInfo != null && appInfo.Status !== 'Active';
314
+ }
315
+ /**
316
+ * Get application info by ID from metadata.
317
+ * @param applicationId - The application ID to find
318
+ */
319
+ GetApplicationInfo(applicationId) {
320
+ const md = new core_1.Metadata();
321
+ return md.Applications.find(a => a.ID === applicationId);
322
+ }
323
+ /**
324
+ * Find application info by path or name (case-insensitive).
325
+ * @param pathOrName - The path or name to search for
326
+ */
327
+ FindApplicationByPathOrName(pathOrName) {
328
+ const normalized = pathOrName.trim().toLowerCase();
329
+ const md = new core_1.Metadata();
330
+ // First try path match
331
+ const pathMatch = md.Applications.find(a => a.Path?.toLowerCase() === normalized);
332
+ if (pathMatch) {
333
+ return pathMatch;
334
+ }
335
+ // Fallback to name match
336
+ return md.Applications.find(a => a.Name.trim().toLowerCase() === normalized);
337
+ }
338
+ /**
339
+ * Force refresh all user data
340
+ * @param contextUser - Optional user context for server-side use
341
+ */
342
+ async Refresh(contextUser) {
343
+ await this.Config(true, contextUser);
344
+ }
345
+ // ========================================================================
346
+ // APPLICATION MANAGEMENT METHODS
347
+ // ========================================================================
348
+ /**
349
+ * Get only the active user applications (IsActive = true)
350
+ */
351
+ get ActiveUserApplications() {
352
+ return this.UserApplications.filter(ua => ua.IsActive);
353
+ }
354
+ /**
355
+ * Check if user has a specific application installed (has UserApplication record)
356
+ * @param applicationId - The application ID to check
357
+ */
358
+ HasApplication(applicationId) {
359
+ return this.UserApplications.some(ua => ua.ApplicationID === applicationId);
360
+ }
361
+ /**
362
+ * Check if user has a specific application active (installed AND IsActive = true)
363
+ * @param applicationId - The application ID to check
364
+ */
365
+ HasActiveApplication(applicationId) {
366
+ const userApp = this.GetUserApplicationByAppId(applicationId);
367
+ return userApp != null && userApp.IsActive;
368
+ }
369
+ /**
370
+ * Install an application for the current user by creating a UserApplication record.
371
+ * The new record is automatically added to the cached UserApplications array.
372
+ * @param applicationId - The application ID to install
373
+ * @param contextUser - Optional user context for server-side use
374
+ * @returns The newly created UserApplicationEntity, or null if failed
375
+ */
376
+ async InstallApplication(applicationId, contextUser) {
377
+ const md = new core_1.Metadata();
378
+ const userId = contextUser?.ID || md.CurrentUser?.ID;
379
+ if (!userId) {
380
+ console.error('UserInfoEngine.InstallApplication: No user context available');
381
+ return null;
382
+ }
383
+ // Check if already installed
384
+ if (this.HasApplication(applicationId)) {
385
+ console.warn(`UserInfoEngine.InstallApplication: Application ${applicationId} is already installed`);
386
+ return this.GetUserApplicationByAppId(applicationId) || null;
387
+ }
388
+ // Get the next sequence number
389
+ const nextSequence = this.UserApplications.length;
390
+ try {
391
+ const userApp = await md.GetEntityObject('User Applications', contextUser);
392
+ userApp.NewRecord();
393
+ userApp.UserID = userId;
394
+ userApp.ApplicationID = applicationId;
395
+ userApp.Sequence = nextSequence;
396
+ userApp.IsActive = true;
397
+ const saved = await userApp.Save();
398
+ if (saved) {
399
+ // Add to cached array
400
+ this._UserApplications.push(userApp);
401
+ console.log(`UserInfoEngine.InstallApplication: Installed application ${applicationId} for user ${userId}`);
402
+ return userApp;
403
+ }
404
+ else {
405
+ console.error('UserInfoEngine.InstallApplication: Failed to save:', userApp.LatestResult);
406
+ return null;
407
+ }
408
+ }
409
+ catch (error) {
410
+ console.error('UserInfoEngine.InstallApplication: Error:', error instanceof Error ? error.message : String(error));
411
+ return null;
412
+ }
413
+ }
414
+ /**
415
+ * Enable a disabled application for the current user (set IsActive = true).
416
+ * @param applicationId - The application ID to enable
417
+ * @param contextUser - Optional user context for server-side use
418
+ * @returns true if successful, false otherwise
419
+ */
420
+ async EnableApplication(applicationId, contextUser) {
421
+ const userApp = this.GetUserApplicationByAppId(applicationId);
422
+ if (!userApp) {
423
+ console.warn(`UserInfoEngine.EnableApplication: No UserApplication record found for ${applicationId}`);
424
+ return false;
425
+ }
426
+ if (userApp.IsActive) {
427
+ console.log(`UserInfoEngine.EnableApplication: Application ${applicationId} is already active`);
428
+ return true;
429
+ }
430
+ try {
431
+ userApp.IsActive = true;
432
+ const saved = await userApp.Save();
433
+ if (saved) {
434
+ console.log(`UserInfoEngine.EnableApplication: Enabled application ${applicationId}`);
435
+ return true;
436
+ }
437
+ else {
438
+ console.error('UserInfoEngine.EnableApplication: Failed to save:', userApp.LatestResult);
439
+ return false;
440
+ }
441
+ }
442
+ catch (error) {
443
+ console.error('UserInfoEngine.EnableApplication: Error:', error instanceof Error ? error.message : String(error));
444
+ return false;
445
+ }
446
+ }
447
+ /**
448
+ * Disable an application for the current user (set IsActive = false).
449
+ * This does not delete the UserApplication record, just deactivates it.
450
+ * @param applicationId - The application ID to disable
451
+ * @param contextUser - Optional user context for server-side use
452
+ * @returns true if successful, false otherwise
453
+ */
454
+ async DisableApplication(applicationId, contextUser) {
455
+ const userApp = this.GetUserApplicationByAppId(applicationId);
456
+ if (!userApp) {
457
+ console.warn(`UserInfoEngine.DisableApplication: No UserApplication record found for ${applicationId}`);
458
+ return false;
459
+ }
460
+ if (!userApp.IsActive) {
461
+ console.log(`UserInfoEngine.DisableApplication: Application ${applicationId} is already disabled`);
462
+ return true;
463
+ }
464
+ try {
465
+ userApp.IsActive = false;
466
+ const saved = await userApp.Save();
467
+ if (saved) {
468
+ console.log(`UserInfoEngine.DisableApplication: Disabled application ${applicationId}`);
469
+ return true;
470
+ }
471
+ else {
472
+ console.error('UserInfoEngine.DisableApplication: Failed to save:', userApp.LatestResult);
473
+ return false;
474
+ }
475
+ }
476
+ catch (error) {
477
+ console.error('UserInfoEngine.DisableApplication: Error:', error instanceof Error ? error.message : String(error));
478
+ return false;
479
+ }
480
+ }
481
+ /**
482
+ * Uninstall an application by deleting the UserApplication record.
483
+ * @param applicationId - The application ID to uninstall
484
+ * @param contextUser - Optional user context for server-side use
485
+ * @returns true if successful, false otherwise
486
+ */
487
+ async UninstallApplication(applicationId, contextUser) {
488
+ const userApp = this.GetUserApplicationByAppId(applicationId);
489
+ if (!userApp) {
490
+ console.warn(`UserInfoEngine.UninstallApplication: No UserApplication record found for ${applicationId}`);
491
+ return false;
492
+ }
493
+ try {
494
+ const deleted = await userApp.Delete();
495
+ if (deleted) {
496
+ // Remove from cached array
497
+ const index = this._UserApplications.findIndex(ua => ua.ApplicationID === applicationId);
498
+ if (index >= 0) {
499
+ this._UserApplications.splice(index, 1);
500
+ }
501
+ console.log(`UserInfoEngine.UninstallApplication: Uninstalled application ${applicationId}`);
502
+ return true;
503
+ }
504
+ else {
505
+ console.error('UserInfoEngine.UninstallApplication: Failed to delete:', userApp.LatestResult);
506
+ return false;
507
+ }
508
+ }
509
+ catch (error) {
510
+ console.error('UserInfoEngine.UninstallApplication: Error:', error instanceof Error ? error.message : String(error));
511
+ return false;
512
+ }
513
+ }
514
+ /**
515
+ * Create default UserApplication records for apps marked with DefaultForNewUser=true.
516
+ * This is called automatically when a user has no UserApplication records.
517
+ *
518
+ * This method is safe to call multiple times concurrently - it will return the same
519
+ * promise if already in progress, and will skip apps that already have UserApplication records.
520
+ *
521
+ * @param contextUser - Optional user context for server-side use
522
+ * @returns Array of created UserApplicationEntity records
523
+ */
524
+ async CreateDefaultApplications(contextUser) {
525
+ // If already in progress, return the existing promise to prevent duplicate execution
526
+ if (this._createDefaultAppsPromise) {
527
+ console.log('UserInfoEngine.CreateDefaultApplications: Already in progress, returning existing promise');
528
+ return this._createDefaultAppsPromise;
529
+ }
530
+ // Create and store the promise, then clear it when done
531
+ this._createDefaultAppsPromise = this.doCreateDefaultApplications(contextUser);
532
+ try {
533
+ return await this._createDefaultAppsPromise;
534
+ }
535
+ finally {
536
+ // Clear the promise when done (success or failure)
537
+ this._createDefaultAppsPromise = null;
538
+ }
539
+ }
540
+ /**
541
+ * Internal implementation of CreateDefaultApplications.
542
+ * Separated to allow the public method to manage the promise state.
543
+ */
544
+ async doCreateDefaultApplications(contextUser) {
545
+ const md = new core_1.Metadata();
546
+ const userId = contextUser?.ID || md.CurrentUser?.ID;
547
+ if (!userId) {
548
+ console.error('UserInfoEngine.CreateDefaultApplications: No user context available');
549
+ return [];
550
+ }
551
+ // Get existing UserApplication records for this user to prevent duplicates
552
+ const existingAppIds = new Set(this._UserApplications
553
+ .filter(ua => ua.UserID === userId)
554
+ .map(ua => ua.ApplicationID));
555
+ // Filter to Active apps with DefaultForNewUser=true, sorted by DefaultSequence
556
+ // Exclude apps that already have UserApplication records
557
+ const defaultApps = md.Applications
558
+ .filter(a => a.DefaultForNewUser && a.Status === 'Active' && !existingAppIds.has(a.ID))
559
+ .sort((a, b) => (a.DefaultSequence ?? 100) - (b.DefaultSequence ?? 100));
560
+ if (defaultApps.length === 0) {
561
+ console.log('UserInfoEngine.CreateDefaultApplications: No new apps to install (all defaults already exist)');
562
+ return [];
563
+ }
564
+ console.log(`UserInfoEngine.CreateDefaultApplications: Found ${defaultApps.length} default apps to install`);
565
+ const createdUserApps = [];
566
+ // Calculate starting sequence based on existing apps
567
+ const maxExistingSequence = this._UserApplications
568
+ .filter(ua => ua.UserID === userId)
569
+ .reduce((max, ua) => Math.max(max, ua.Sequence), -1);
570
+ for (const [index, appInfo] of defaultApps.entries()) {
571
+ try {
572
+ const userApp = await md.GetEntityObject('User Applications', contextUser);
573
+ userApp.NewRecord();
574
+ userApp.UserID = userId;
575
+ userApp.ApplicationID = appInfo.ID;
576
+ userApp.Sequence = maxExistingSequence + 1 + index;
577
+ userApp.IsActive = true;
578
+ const saved = await userApp.Save();
579
+ if (saved) {
580
+ this._UserApplications.push(userApp);
581
+ createdUserApps.push(userApp);
582
+ console.log(`UserInfoEngine.CreateDefaultApplications: Created UserApplication for ${appInfo.Name}`);
583
+ }
584
+ else {
585
+ console.error(`UserInfoEngine.CreateDefaultApplications: Failed to create for ${appInfo.Name}:`, userApp.LatestResult);
586
+ }
587
+ }
588
+ catch (error) {
589
+ console.error(`UserInfoEngine.CreateDefaultApplications: Error for ${appInfo.Name}:`, error instanceof Error ? error.message : String(error));
590
+ }
591
+ }
592
+ return createdUserApps;
593
+ }
594
+ };
595
+ exports.UserInfoEngine = UserInfoEngine;
596
+ exports.UserInfoEngine = UserInfoEngine = __decorate([
597
+ (0, core_1.RegisterForStartup)()
598
+ ], UserInfoEngine);
599
+ //# sourceMappingURL=UserInfoEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserInfoEngine.js","sourceRoot":"","sources":["../../src/engines/UserInfoEngine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EACH,kBAAkB,EACrB,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,sBAAsB,CAAC;IAC1E;;OAEG;IACH,WAAkB,QAAQ,IAAI,sBAAsB,CAEnD;IAED,OAAO,CAAC,cAAc,CAAuB;IAEhC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAWhG,IAAW,aAAa,IAAI,kBAAkB,EAAE,CAE/C;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;CAOxE"}
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EACH,kBAAkB,EACrB,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CAAC,sBAAsB,CAAC;IAC1E;;OAEG;IACH,WAAkB,QAAQ,IAAI,sBAAsB,CAEnD;IAED,OAAO,CAAC,cAAc,CAAuB;IAEhC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAYhG,IAAW,aAAa,IAAI,kBAAkB,EAAE,CAE/C;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;CAOxE"}
@@ -17,7 +17,8 @@ class ArtifactMetadataEngine extends core_1.BaseEngine {
17
17
  {
18
18
  Type: 'entity',
19
19
  EntityName: 'MJ: Artifact Types',
20
- PropertyName: "_artifactTypes"
20
+ PropertyName: "_artifactTypes",
21
+ CacheLocal: true
21
22
  }
22
23
  ];
23
24
  await this.Load(c, provider, forceRefresh, contextUser);
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":";;;AAAA,+CAAyG;AAKzG;;GAEG;AACH,MAAa,sBAAuB,SAAQ,iBAAkC;IAC1E;;OAEG;IACI,MAAM,KAAK,QAAQ;QACvB,OAAO,KAAK,CAAC,WAAW,EAA0B,CAAC;IACtD,CAAC;IAIM,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,CAAC,GAAwC;YAC3C;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,oBAAoB;gBAChC,YAAY,EAAE,gBAAgB;aACjC;SACJ,CAAA;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAY;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACvG,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAnCD,wDAmCC"}
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/engines/artifacts.ts"],"names":[],"mappings":";;;AAAA,+CAAyG;AAKzG;;GAEG;AACH,MAAa,sBAAuB,SAAQ,iBAAkC;IAC1E;;OAEG;IACI,MAAM,KAAK,QAAQ;QACvB,OAAO,KAAK,CAAC,WAAW,EAA0B,CAAC;IACtD,CAAC;IAIM,KAAK,CAAC,MAAM,CAAC,YAAsB,EAAE,WAAsB,EAAE,QAA4B;QAC5F,MAAM,CAAC,GAAwC;YAC3C;gBACI,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,oBAAoB;gBAChC,YAAY,EAAE,gBAAgB;gBAC9B,UAAU,EAAE,IAAI;aACnB;SACJ,CAAA;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,IAAY;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACvG,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AApCD,wDAoCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"component-metadata.d.ts","sourceRoot":"","sources":["../../src/engines/component-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EACH,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EAC5B,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IAC5E;;OAEG;IACH,WAAkB,QAAQ,IAAI,uBAAuB,CAEpD;IAED,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,sBAAsB,CAA+B;IAC7D,OAAO,CAAC,oBAAoB,CAA4B;IACxD,OAAO,CAAC,sBAAsB,CAA8B;IAE/C,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IA+BhG,IAAW,UAAU,IAAI,uBAAuB,EAAE,CAEjD;IAED,IAAW,kBAAkB,IAAI,sBAAsB,EAAE,CAExD;IAED,IAAW,qBAAqB,IAAI,0BAA0B,EAAE,CAE/D;IAED,IAAW,mBAAmB,IAAI,uBAAuB,EAAE,CAE1D;IAED,IAAW,qBAAqB,IAAI,yBAAyB,EAAE,CAE9D;IAED;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;CAMjH"}
1
+ {"version":3,"file":"component-metadata.d.ts","sourceRoot":"","sources":["../../src/engines/component-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzG,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EACH,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,yBAAyB,EAC5B,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,UAAU,CAAC,uBAAuB,CAAC;IAC5E;;OAEG;IACH,WAAkB,QAAQ,IAAI,uBAAuB,CAEpD;IAED,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,sBAAsB,CAA+B;IAC7D,OAAO,CAAC,oBAAoB,CAA4B;IACxD,OAAO,CAAC,sBAAsB,CAA8B;IAE/C,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,iBAAiB;IAoChG,IAAW,UAAU,IAAI,uBAAuB,EAAE,CAEjD;IAED,IAAW,kBAAkB,IAAI,sBAAsB,EAAE,CAExD;IAED,IAAW,qBAAqB,IAAI,0BAA0B,EAAE,CAE/D;IAED,IAAW,mBAAmB,IAAI,uBAAuB,EAAE,CAE1D;IAED,IAAW,qBAAqB,IAAI,yBAAyB,EAAE,CAE9D;IAED;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS;CAMjH"}