rl-core-front 0.6.0 → 0.8.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.
package/README.md CHANGED
@@ -85,6 +85,26 @@ export default function RootLayout({ children }: { children: React.ReactNode })
85
85
  }
86
86
  ```
87
87
 
88
+ ### Telas prontas
89
+
90
+ `LoginScreen`, `DashboardScreen`, `UsersScreen`, `RbacScreen`, `LogsScreen`,
91
+ `AuditScreen`, `ProfileScreen`, `QueuesScreen`, mais as de recuperação de senha e
92
+ as de erro (`ForbiddenScreen`, `NotFoundScreen`). Cada uma é uma linha no
93
+ `page.tsx` da rota — a de filas em `/filas`, e ela some do menu sozinha para
94
+ quem não tem `queues:read:any`.
95
+
96
+ ### Acompanhar um job em segundo plano
97
+
98
+ ```tsx
99
+ const job = useJobProgress<ImportSummary>(jobId);
100
+
101
+ <JobProgress {...job} successMessage={`${job.summary?.total} linhas importadas`} />;
102
+ ```
103
+
104
+ O hook usa a conexão de socket que o `SocketProvider` já mantém — não abre uma
105
+ segunda — e relê `GET /jobs/:id` na montagem e a cada reconexão, para o caso de
106
+ o job ter terminado antes de a tela assinar.
107
+
88
108
  ## Identidade do sistema
89
109
 
90
110
  O `BrandProvider` é o que troca o "Core App" pelo nome do projeto. Ele alimenta
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rl-core-front",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Telas e componentes Next.js do core: login com 2FA, usu\u00e1rios, RBAC, auditoria, logs e listagens com filtro din\u00e2mico",
5
5
  "author": "Rodrigo Liberti",
6
6
  "license": "MIT",
@@ -624,6 +624,38 @@ export interface paths {
624
624
  patch?: never;
625
625
  trace?: never;
626
626
  };
627
+ "/rbac/users/{userId}/permissions": {
628
+ parameters: {
629
+ query?: never;
630
+ header?: never;
631
+ path?: never;
632
+ cookie?: never;
633
+ };
634
+ get: operations["RbacController_userPermissions"];
635
+ put: operations["RbacController_setUserPermissions"];
636
+ post?: never;
637
+ delete?: never;
638
+ options?: never;
639
+ head?: never;
640
+ patch?: never;
641
+ trace?: never;
642
+ };
643
+ "/rbac/users/{userId}/permissions/{permissionId}": {
644
+ parameters: {
645
+ query?: never;
646
+ header?: never;
647
+ path?: never;
648
+ cookie?: never;
649
+ };
650
+ get?: never;
651
+ put?: never;
652
+ post: operations["RbacController_grantUserPermission"];
653
+ delete: operations["RbacController_revokeUserPermission"];
654
+ options?: never;
655
+ head?: never;
656
+ patch?: never;
657
+ trace?: never;
658
+ };
627
659
  "/audit/requests": {
628
660
  parameters: {
629
661
  query?: never;
@@ -752,6 +784,86 @@ export interface paths {
752
784
  patch: operations["NotificationsController_markAsRead"];
753
785
  trace?: never;
754
786
  };
787
+ "/jobs/{id}": {
788
+ parameters: {
789
+ query?: never;
790
+ header?: never;
791
+ path?: never;
792
+ cookie?: never;
793
+ };
794
+ get: operations["JobStatusController_status"];
795
+ put?: never;
796
+ post?: never;
797
+ delete?: never;
798
+ options?: never;
799
+ head?: never;
800
+ patch?: never;
801
+ trace?: never;
802
+ };
803
+ "/queues/counts": {
804
+ parameters: {
805
+ query?: never;
806
+ header?: never;
807
+ path?: never;
808
+ cookie?: never;
809
+ };
810
+ get: operations["QueueAdminController_counts"];
811
+ put?: never;
812
+ post?: never;
813
+ delete?: never;
814
+ options?: never;
815
+ head?: never;
816
+ patch?: never;
817
+ trace?: never;
818
+ };
819
+ "/queues/jobs": {
820
+ parameters: {
821
+ query?: never;
822
+ header?: never;
823
+ path?: never;
824
+ cookie?: never;
825
+ };
826
+ get: operations["QueueAdminController_jobs"];
827
+ put?: never;
828
+ post?: never;
829
+ delete?: never;
830
+ options?: never;
831
+ head?: never;
832
+ patch?: never;
833
+ trace?: never;
834
+ };
835
+ "/queues/jobs/{id}/retry": {
836
+ parameters: {
837
+ query?: never;
838
+ header?: never;
839
+ path?: never;
840
+ cookie?: never;
841
+ };
842
+ get?: never;
843
+ put?: never;
844
+ post: operations["QueueAdminController_retry"];
845
+ delete?: never;
846
+ options?: never;
847
+ head?: never;
848
+ patch?: never;
849
+ trace?: never;
850
+ };
851
+ "/queues/jobs/{id}": {
852
+ parameters: {
853
+ query?: never;
854
+ header?: never;
855
+ path?: never;
856
+ cookie?: never;
857
+ };
858
+ get?: never;
859
+ put?: never;
860
+ post?: never;
861
+ delete: operations["QueueAdminController_remove"];
862
+ options?: never;
863
+ head?: never;
864
+ patch?: never;
865
+ trace?: never;
866
+ };
755
867
  }
756
868
  export type webhooks = Record<string, never>;
757
869
  export interface components {
@@ -981,7 +1093,7 @@ export interface components {
981
1093
  };
982
1094
  CreateScopeCommand: {
983
1095
  /**
984
- * @description own | team | department | any
1096
+ * @description own | team | any
985
1097
  * @example own
986
1098
  */
987
1099
  name: string;
@@ -989,7 +1101,7 @@ export interface components {
989
1101
  };
990
1102
  UpdateScopeCommand: {
991
1103
  /**
992
- * @description own | team | department | any
1104
+ * @description own | team | any
993
1105
  * @example own
994
1106
  */
995
1107
  name?: string;
@@ -1114,6 +1226,9 @@ export interface components {
1114
1226
  permissionIds?: string[];
1115
1227
  isActive?: boolean;
1116
1228
  };
1229
+ SetUserPermissionsCommand: {
1230
+ permissionIds: string[];
1231
+ };
1117
1232
  /**
1118
1233
  * @description 0 = sucesso, 1 = erro, 2 = abortada
1119
1234
  * @enum {number}
@@ -1242,6 +1357,79 @@ export interface components {
1242
1357
  /** @description Dado extra. `route` é usado pelo cliente para navegar. */
1243
1358
  payload?: Record<string, never>;
1244
1359
  };
1360
+ JobProgressResponse: {
1361
+ /** @example 120 */
1362
+ processed: number;
1363
+ /** @example 175 */
1364
+ total: number;
1365
+ /**
1366
+ * @description Inteiro de 0 a 100
1367
+ * @example 69
1368
+ */
1369
+ percent: number;
1370
+ /** @example Lendo a planilha */
1371
+ message?: string;
1372
+ };
1373
+ JobErrorResponse: {
1374
+ /** @example INVALID_FILTER */
1375
+ code: string | null;
1376
+ /** @example Falha ao processar. Tente novamente */
1377
+ message: string;
1378
+ };
1379
+ JobStatusResponse: {
1380
+ /** @example 42 */
1381
+ id: string;
1382
+ /** @example funkos:import */
1383
+ name: string;
1384
+ /**
1385
+ * @example active
1386
+ * @enum {string}
1387
+ */
1388
+ state: "waiting" | "active" | "completed" | "failed" | "delayed" | "unknown";
1389
+ progress: components["schemas"]["JobProgressResponse"] | null;
1390
+ /** @description Relatório que o processador devolveu, no formato da feature */
1391
+ summary: Record<string, never> | null;
1392
+ error: components["schemas"]["JobErrorResponse"] | null;
1393
+ /** Format: date-time */
1394
+ createdAt: string;
1395
+ /** Format: date-time */
1396
+ finishedAt: string | null;
1397
+ };
1398
+ QueueCountsResponse: {
1399
+ /** @example 3 */
1400
+ waiting: number;
1401
+ /** @example 1 */
1402
+ active: number;
1403
+ /** @example 128 */
1404
+ completed: number;
1405
+ /** @example 2 */
1406
+ failed: number;
1407
+ /** @example 0 */
1408
+ delayed: number;
1409
+ };
1410
+ QueueJobResponse: {
1411
+ /** @example 42 */
1412
+ id: string;
1413
+ /** @example funkos:import */
1414
+ name: string;
1415
+ /** @example failed */
1416
+ state: string;
1417
+ /** Format: uuid */
1418
+ ownerId: string | null;
1419
+ /** @example 2 */
1420
+ attemptsMade: number;
1421
+ /** @example 69 */
1422
+ percent: number | null;
1423
+ failedReason: string | null;
1424
+ /** Format: date-time */
1425
+ createdAt: string;
1426
+ /** Format: date-time */
1427
+ finishedAt: string | null;
1428
+ };
1429
+ PaginatedQueueJobsResponse: {
1430
+ items: components["schemas"]["QueueJobResponse"][];
1431
+ meta: components["schemas"]["PaginationMetaResponse"];
1432
+ };
1245
1433
  };
1246
1434
  responses: never;
1247
1435
  parameters: never;
@@ -2488,6 +2676,96 @@ export interface operations {
2488
2676
  };
2489
2677
  };
2490
2678
  };
2679
+ RbacController_userPermissions: {
2680
+ parameters: {
2681
+ query?: never;
2682
+ header?: never;
2683
+ path: {
2684
+ userId: string;
2685
+ };
2686
+ cookie?: never;
2687
+ };
2688
+ requestBody?: never;
2689
+ responses: {
2690
+ 200: {
2691
+ headers: {
2692
+ [name: string]: unknown;
2693
+ };
2694
+ content: {
2695
+ "application/json": components["schemas"]["PermissionResponse"][];
2696
+ };
2697
+ };
2698
+ };
2699
+ };
2700
+ RbacController_setUserPermissions: {
2701
+ parameters: {
2702
+ query?: never;
2703
+ header?: never;
2704
+ path: {
2705
+ userId: string;
2706
+ };
2707
+ cookie?: never;
2708
+ };
2709
+ requestBody: {
2710
+ content: {
2711
+ "application/json": components["schemas"]["SetUserPermissionsCommand"];
2712
+ };
2713
+ };
2714
+ responses: {
2715
+ 200: {
2716
+ headers: {
2717
+ [name: string]: unknown;
2718
+ };
2719
+ content: {
2720
+ "application/json": components["schemas"]["PermissionResponse"][];
2721
+ };
2722
+ };
2723
+ };
2724
+ };
2725
+ RbacController_grantUserPermission: {
2726
+ parameters: {
2727
+ query?: never;
2728
+ header?: never;
2729
+ path: {
2730
+ userId: string;
2731
+ permissionId: string;
2732
+ };
2733
+ cookie?: never;
2734
+ };
2735
+ requestBody?: never;
2736
+ responses: {
2737
+ 200: {
2738
+ headers: {
2739
+ [name: string]: unknown;
2740
+ };
2741
+ content: {
2742
+ "application/json": components["schemas"]["PermissionResponse"][];
2743
+ };
2744
+ };
2745
+ };
2746
+ };
2747
+ RbacController_revokeUserPermission: {
2748
+ parameters: {
2749
+ query?: never;
2750
+ header?: never;
2751
+ path: {
2752
+ userId: string;
2753
+ permissionId: string;
2754
+ };
2755
+ cookie?: never;
2756
+ };
2757
+ requestBody?: never;
2758
+ responses: {
2759
+ 200: {
2760
+ headers: {
2761
+ [name: string]: unknown;
2762
+ };
2763
+ content: {
2764
+ "application/json": components["schemas"]["PermissionResponse"][];
2765
+ };
2766
+ };
2767
+ };
2768
+ };
2491
2769
  AuditController_requests: {
2492
2770
  parameters: {
2493
2771
  query?: {
@@ -2688,4 +2966,105 @@ export interface operations {
2688
2966
  };
2689
2967
  };
2690
2968
  };
2969
+ JobStatusController_status: {
2970
+ parameters: {
2971
+ query?: never;
2972
+ header?: never;
2973
+ path: {
2974
+ id: string;
2975
+ };
2976
+ cookie?: never;
2977
+ };
2978
+ requestBody?: never;
2979
+ responses: {
2980
+ 200: {
2981
+ headers: {
2982
+ [name: string]: unknown;
2983
+ };
2984
+ content: {
2985
+ "application/json": components["schemas"]["JobStatusResponse"];
2986
+ };
2987
+ };
2988
+ };
2989
+ };
2990
+ QueueAdminController_counts: {
2991
+ parameters: {
2992
+ query?: never;
2993
+ header?: never;
2994
+ path?: never;
2995
+ cookie?: never;
2996
+ };
2997
+ requestBody?: never;
2998
+ responses: {
2999
+ 200: {
3000
+ headers: {
3001
+ [name: string]: unknown;
3002
+ };
3003
+ content: {
3004
+ "application/json": components["schemas"]["QueueCountsResponse"];
3005
+ };
3006
+ };
3007
+ };
3008
+ };
3009
+ QueueAdminController_jobs: {
3010
+ parameters: {
3011
+ query: {
3012
+ state: "waiting" | "active" | "completed" | "failed" | "delayed";
3013
+ page: string;
3014
+ limit: string;
3015
+ };
3016
+ header?: never;
3017
+ path?: never;
3018
+ cookie?: never;
3019
+ };
3020
+ requestBody?: never;
3021
+ responses: {
3022
+ 200: {
3023
+ headers: {
3024
+ [name: string]: unknown;
3025
+ };
3026
+ content: {
3027
+ "application/json": components["schemas"]["PaginatedQueueJobsResponse"];
3028
+ };
3029
+ };
3030
+ };
3031
+ };
3032
+ QueueAdminController_retry: {
3033
+ parameters: {
3034
+ query?: never;
3035
+ header?: never;
3036
+ path: {
3037
+ id: string;
3038
+ };
3039
+ cookie?: never;
3040
+ };
3041
+ requestBody?: never;
3042
+ responses: {
3043
+ 204: {
3044
+ headers: {
3045
+ [name: string]: unknown;
3046
+ };
3047
+ content?: never;
3048
+ };
3049
+ };
3050
+ };
3051
+ QueueAdminController_remove: {
3052
+ parameters: {
3053
+ query?: never;
3054
+ header?: never;
3055
+ path: {
3056
+ id: string;
3057
+ };
3058
+ cookie?: never;
3059
+ };
3060
+ requestBody?: never;
3061
+ responses: {
3062
+ 204: {
3063
+ headers: {
3064
+ [name: string]: unknown;
3065
+ };
3066
+ content?: never;
3067
+ };
3068
+ };
3069
+ };
2691
3070
  }