@noatgnu/cupcake-core 1.3.1 → 1.3.4

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.
@@ -4,7 +4,7 @@ import * as i1 from '@angular/common/http';
4
4
  import { HttpClient, HttpParams, provideHttpClient, withInterceptors, HttpClientModule } from '@angular/common/http';
5
5
  import { BehaviorSubject, catchError, throwError, switchMap, filter, take, map, tap, Subject, timer, EMPTY, interval, debounceTime, distinctUntilChanged } from 'rxjs';
6
6
  import { Router, ActivatedRoute, RouterModule } from '@angular/router';
7
- import { map as map$1, takeUntil, tap as tap$1, switchMap as switchMap$1, filter as filter$1 } from 'rxjs/operators';
7
+ import { map as map$1, takeUntil, tap as tap$1, switchMap as switchMap$1 } from 'rxjs/operators';
8
8
  import * as i1$1 from '@angular/forms';
9
9
  import { FormBuilder, Validators, ReactiveFormsModule, FormsModule, NonNullableFormBuilder } from '@angular/forms';
10
10
  import * as i2 from '@angular/common';
@@ -1166,7 +1166,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImpor
1166
1166
 
1167
1167
  const WEBSOCKET_ENDPOINT = new InjectionToken('WEBSOCKET_ENDPOINT', {
1168
1168
  providedIn: 'root',
1169
- factory: () => 'notifications'
1169
+ factory: () => 'ccc/notifications'
1170
1170
  });
1171
1171
  class WebSocketService {
1172
1172
  authService;
@@ -1184,7 +1184,7 @@ class WebSocketService {
1184
1184
  connectionState$ = computed(() => this.connectionState(), ...(ngDevMode ? [{ debugName: "connectionState$" }] : []));
1185
1185
  lastError$ = computed(() => this.lastError(), ...(ngDevMode ? [{ debugName: "lastError$" }] : []));
1186
1186
  config_token = inject(CUPCAKE_CORE_CONFIG);
1187
- endpoint = inject(WEBSOCKET_ENDPOINT, { optional: true }) || 'notifications';
1187
+ endpoint = inject(WEBSOCKET_ENDPOINT, { optional: true }) || 'ccc/notifications';
1188
1188
  constructor(authService) {
1189
1189
  this.authService = authService;
1190
1190
  this.config = {
@@ -1207,14 +1207,14 @@ class WebSocketService {
1207
1207
  const url = new URL(apiUrl);
1208
1208
  const protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
1209
1209
  const host = url.host;
1210
- const endpoint = this.config?.endpoint || 'notifications';
1210
+ const endpoint = this.config?.endpoint || 'ccc/notifications';
1211
1211
  return `${protocol}//${host}/ws/${endpoint}/`;
1212
1212
  }
1213
1213
  catch (error) {
1214
1214
  console.error('Invalid API URL in cupcake config:', apiUrl);
1215
1215
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
1216
1216
  const host = window.location.host;
1217
- const endpoint = this.config?.endpoint || 'notifications';
1217
+ const endpoint = this.config?.endpoint || 'ccc/notifications';
1218
1218
  return `${protocol}//${host}/ws/${endpoint}/`;
1219
1219
  }
1220
1220
  }
@@ -1472,6 +1472,9 @@ class AsyncTaskMonitorService extends BaseApiService {
1472
1472
  tasksSubject = new BehaviorSubject([]);
1473
1473
  isSubscribed = false;
1474
1474
  websocket = inject(WebSocketService);
1475
+ constructor() {
1476
+ super();
1477
+ }
1475
1478
  tasks$ = this.tasksSubject.asObservable();
1476
1479
  activeTasks$ = this.tasks$.pipe(map$1(tasks => {
1477
1480
  const taskArray = Array.isArray(tasks) ? tasks : [];
@@ -1490,21 +1493,16 @@ class AsyncTaskMonitorService extends BaseApiService {
1490
1493
  }
1491
1494
  console.log('AsyncTaskMonitorService: Starting real-time updates');
1492
1495
  this.isSubscribed = true;
1493
- if (!this.websocket.connectionState$() || this.websocket.connectionState$() === 'disconnected') {
1494
- console.log('AsyncTaskMonitorService: WebSocket not connected, connecting now...');
1495
- this.websocket.connect();
1496
- }
1497
- else {
1498
- console.log('AsyncTaskMonitorService: WebSocket already connected');
1499
- }
1500
- this.websocket.isConnected$.pipe(takeUntil(this.destroy$), filter$1(connected => connected)).subscribe(() => {
1501
- console.log('AsyncTaskMonitorService: WebSocket connected, subscribing to async_task_updates');
1502
- this.websocket.subscribe('async_task_updates');
1503
- });
1504
1496
  this.websocket.filterMessages('async_task.update').pipe(takeUntil(this.destroy$)).subscribe((message) => {
1505
1497
  console.log('AsyncTaskMonitorService: Received async_task.update message:', message);
1506
1498
  this.handleTaskUpdate(message);
1507
1499
  });
1500
+ this.websocket.isConnected$.pipe(takeUntil(this.destroy$)).subscribe(isConnected => {
1501
+ if (isConnected) {
1502
+ console.log('AsyncTaskMonitorService: WebSocket connected, subscribing to async_task_updates channel');
1503
+ this.websocket.subscribe('async_task_updates');
1504
+ }
1505
+ });
1508
1506
  this.loadAllTasks();
1509
1507
  }
1510
1508
  stopRealtimeUpdates() {
@@ -1525,6 +1523,9 @@ class AsyncTaskMonitorService extends BaseApiService {
1525
1523
  }
1526
1524
  });
1527
1525
  }
1526
+ cancelTask(taskId) {
1527
+ return this.delete(`${this.apiUrl}/async-tasks/${taskId}/cancel/`);
1528
+ }
1528
1529
  handleTaskUpdate(message) {
1529
1530
  console.log('AsyncTaskMonitorService: handleTaskUpdate called with message:', message);
1530
1531
  const taskId = message.task_id;
@@ -1532,7 +1533,14 @@ class AsyncTaskMonitorService extends BaseApiService {
1532
1533
  console.log('AsyncTaskMonitorService: Current tasks in subject:', currentTasks.length);
1533
1534
  const existingTaskIndex = currentTasks.findIndex(t => t.id === taskId);
1534
1535
  console.log('AsyncTaskMonitorService: Existing task index:', existingTaskIndex);
1535
- if (existingTaskIndex >= 0) {
1536
+ const isTaskCompleted = message.status === TaskStatus.SUCCESS ||
1537
+ message.status === TaskStatus.FAILURE ||
1538
+ message.status === TaskStatus.CANCELLED;
1539
+ if (isTaskCompleted) {
1540
+ console.log('AsyncTaskMonitorService: Task completed, fetching full task details from API');
1541
+ this.loadSingleTask(taskId);
1542
+ }
1543
+ else if (existingTaskIndex >= 0) {
1536
1544
  const existingTask = currentTasks[existingTaskIndex];
1537
1545
  const updatedTask = {
1538
1546
  ...existingTask,
@@ -1552,7 +1560,30 @@ class AsyncTaskMonitorService extends BaseApiService {
1552
1560
  this.loadAllTasks();
1553
1561
  }
1554
1562
  }
1555
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: AsyncTaskMonitorService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
1563
+ loadSingleTask(taskId) {
1564
+ this.get(`${this.apiUrl}/async-tasks/${taskId}/`).subscribe({
1565
+ next: (task) => {
1566
+ console.log('AsyncTaskMonitorService: Loaded single task from API:', task);
1567
+ const currentTasks = this.tasksSubject.value;
1568
+ const existingTaskIndex = currentTasks.findIndex(t => t.id === taskId);
1569
+ if (existingTaskIndex >= 0) {
1570
+ const updatedTasks = [...currentTasks];
1571
+ updatedTasks[existingTaskIndex] = task;
1572
+ console.log('AsyncTaskMonitorService: Updated task in list with full details');
1573
+ this.tasksSubject.next(updatedTasks);
1574
+ }
1575
+ else {
1576
+ console.log('AsyncTaskMonitorService: Adding new task to list');
1577
+ this.tasksSubject.next([task, ...currentTasks]);
1578
+ }
1579
+ },
1580
+ error: (error) => {
1581
+ console.error('AsyncTaskMonitorService: Error loading single task:', error);
1582
+ this.loadAllTasks();
1583
+ }
1584
+ });
1585
+ }
1586
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: AsyncTaskMonitorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1556
1587
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: AsyncTaskMonitorService, providedIn: 'root' });
1557
1588
  }
1558
1589
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: AsyncTaskMonitorService, decorators: [{
@@ -1560,7 +1591,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImpor
1560
1591
  args: [{
1561
1592
  providedIn: 'root'
1562
1593
  }]
1563
- }] });
1594
+ }], ctorParameters: () => [] });
1564
1595
 
1565
1596
  class ToastService {
1566
1597
  toastsSignal = signal([], ...(ngDevMode ? [{ debugName: "toastsSignal" }] : []));
@@ -1936,8 +1967,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImpor
1936
1967
 
1937
1968
  const WEBSOCKET_ENDPOINTS = new InjectionToken('WEBSOCKET_ENDPOINTS');
1938
1969
  class WebSocketEndpoints {
1939
- static CORE_NOTIFICATIONS = 'notifications';
1940
- static CORE_ADMIN = 'admin';
1970
+ static CORE_NOTIFICATIONS = 'ccc/notifications';
1971
+ static CORE_ADMIN = 'ccc/admin';
1941
1972
  }
1942
1973
  class WebSocketConfigService {
1943
1974
  endpoints = new Map();
@@ -1989,6 +2020,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImpor
1989
2020
  }]
1990
2021
  }], ctorParameters: () => [] });
1991
2022
 
2023
+ class AdminWebSocketService extends WebSocketService {
2024
+ constructor(authService) {
2025
+ super(authService);
2026
+ this.endpoint = 'ccc/admin';
2027
+ this.config.endpoint = 'ccc/admin';
2028
+ this.config.url = this.getWebSocketUrl();
2029
+ }
2030
+ getAdminNotifications() {
2031
+ return this.filterMessages('admin.notification');
2032
+ }
2033
+ getSystemNotifications() {
2034
+ return this.filterMessages('system.notification');
2035
+ }
2036
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: AdminWebSocketService, deps: [{ token: AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
2037
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: AdminWebSocketService, providedIn: 'root' });
2038
+ }
2039
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImport: i0, type: AdminWebSocketService, decorators: [{
2040
+ type: Injectable,
2041
+ args: [{
2042
+ providedIn: 'root'
2043
+ }]
2044
+ }], ctorParameters: () => [{ type: AuthService }] });
2045
+
1992
2046
  class LabGroupService extends BaseApiService {
1993
2047
  // LAB GROUPS
1994
2048
  getLabGroups(params) {
@@ -3598,5 +3652,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.7", ngImpor
3598
3652
  * Generated bundle index. Do not edit.
3599
3653
  */
3600
3654
 
3601
- export { AnnotationType, ApiService, AsyncTaskMonitorService, AuthService, BaseApiService, CUPCAKE_CORE_CONFIG, CupcakeCoreModule, InvitationStatus, InvitationStatusLabels, LabGroupService, LabGroupsComponent, LoginComponent, NotificationService, PoweredByFooterComponent, RegisterComponent, ResourceRole, ResourceRoleLabels, ResourceService, ResourceType, ResourceTypeLabels, ResourceVisibility, ResourceVisibilityLabels, SiteConfigComponent, SiteConfigService, TASK_STATUS_COLORS, TASK_STATUS_LABELS, TASK_TYPE_LABELS, TaskStatus, TaskType, ThemeService, ToastContainerComponent, ToastService, UserManagementComponent, UserManagementService, UserProfileComponent, WEBSOCKET_ENDPOINT, WEBSOCKET_ENDPOINTS, WebSocketConfigService, WebSocketEndpoints, WebSocketService, adminGuard, authGuard, authInterceptor, resetRefreshState };
3655
+ export { AdminWebSocketService, AnnotationType, ApiService, AsyncTaskMonitorService, AuthService, BaseApiService, CUPCAKE_CORE_CONFIG, CupcakeCoreModule, InvitationStatus, InvitationStatusLabels, LabGroupService, LabGroupsComponent, LoginComponent, NotificationService, PoweredByFooterComponent, RegisterComponent, ResourceRole, ResourceRoleLabels, ResourceService, ResourceType, ResourceTypeLabels, ResourceVisibility, ResourceVisibilityLabels, SiteConfigComponent, SiteConfigService, TASK_STATUS_COLORS, TASK_STATUS_LABELS, TASK_TYPE_LABELS, TaskStatus, TaskType, ThemeService, ToastContainerComponent, ToastService, UserManagementComponent, UserManagementService, UserProfileComponent, WEBSOCKET_ENDPOINT, WEBSOCKET_ENDPOINTS, WebSocketConfigService, WebSocketEndpoints, WebSocketService, adminGuard, authGuard, authInterceptor, resetRefreshState };
3602
3656
  //# sourceMappingURL=noatgnu-cupcake-core.mjs.map