@webiny/app-audit-logs 0.0.0-unstable.0156a4c312

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 (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/SecurityPermission.d.ts +2 -0
  4. package/SecurityPermission.js +15 -0
  5. package/SecurityPermission.js.map +1 -0
  6. package/components/Text.d.ts +10 -0
  7. package/components/Text.js +35 -0
  8. package/components/Text.js.map +1 -0
  9. package/config/list/AuditLogsListConfig.d.ts +55 -0
  10. package/config/list/AuditLogsListConfig.js +44 -0
  11. package/config/list/AuditLogsListConfig.js.map +1 -0
  12. package/config/list/Browser/Filter.d.ts +39 -0
  13. package/config/list/Browser/Filter.js +37 -0
  14. package/config/list/Browser/Filter.js.map +1 -0
  15. package/config/list/Browser/FiltersToWhere.d.ts +7 -0
  16. package/config/list/Browser/FiltersToWhere.js +13 -0
  17. package/config/list/Browser/FiltersToWhere.js.map +1 -0
  18. package/config/list/Browser/index.d.ts +37 -0
  19. package/config/list/Browser/index.js +9 -0
  20. package/config/list/Browser/index.js.map +1 -0
  21. package/config/list/Details/PreviewTab.d.ts +15 -0
  22. package/config/list/Details/PreviewTab.js +32 -0
  23. package/config/list/Details/PreviewTab.js.map +1 -0
  24. package/config/list/Details/index.d.ts +8 -0
  25. package/config/list/Details/index.js +7 -0
  26. package/config/list/Details/index.js.map +1 -0
  27. package/config/list/index.d.ts +1 -0
  28. package/config/list/index.js +1 -0
  29. package/constants/index.d.ts +1 -0
  30. package/constants/index.js +4 -0
  31. package/constants/index.js.map +1 -0
  32. package/domain/permissionsSchema.d.ts +4 -0
  33. package/domain/permissionsSchema.js +8 -0
  34. package/domain/permissionsSchema.js.map +1 -0
  35. package/features/listAuditLogs/ListAuditLogsGateway.d.ts +11 -0
  36. package/features/listAuditLogs/ListAuditLogsGateway.js +71 -0
  37. package/features/listAuditLogs/ListAuditLogsGateway.js.map +1 -0
  38. package/features/listAuditLogs/ListAuditLogsRepository.d.ts +11 -0
  39. package/features/listAuditLogs/ListAuditLogsRepository.js +35 -0
  40. package/features/listAuditLogs/ListAuditLogsRepository.js.map +1 -0
  41. package/features/listAuditLogs/ListAuditLogsUseCase.d.ts +10 -0
  42. package/features/listAuditLogs/ListAuditLogsUseCase.js +19 -0
  43. package/features/listAuditLogs/ListAuditLogsUseCase.js.map +1 -0
  44. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.d.ts +20 -0
  45. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js +5 -0
  46. package/features/listAuditLogs/abstractions/ListAuditLogsGateway.js.map +1 -0
  47. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.d.ts +20 -0
  48. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js +5 -0
  49. package/features/listAuditLogs/abstractions/ListAuditLogsRepository.js.map +1 -0
  50. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.d.ts +20 -0
  51. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js +5 -0
  52. package/features/listAuditLogs/abstractions/ListAuditLogsUseCase.js.map +1 -0
  53. package/features/listAuditLogs/abstractions/index.d.ts +6 -0
  54. package/features/listAuditLogs/abstractions/index.js +3 -0
  55. package/features/listAuditLogs/feature.d.ts +3 -0
  56. package/features/listAuditLogs/feature.js +21 -0
  57. package/features/listAuditLogs/feature.js.map +1 -0
  58. package/features/listAuditLogs/index.d.ts +1 -0
  59. package/features/listAuditLogs/index.js +1 -0
  60. package/features/permissions/abstractions.d.ts +17 -0
  61. package/features/permissions/abstractions.js +6 -0
  62. package/features/permissions/abstractions.js.map +1 -0
  63. package/features/permissions/feature.d.ts +14 -0
  64. package/features/permissions/feature.js +7 -0
  65. package/features/permissions/feature.js.map +1 -0
  66. package/graphql.d.ts +1 -0
  67. package/graphql.js +27 -0
  68. package/graphql.js.map +1 -0
  69. package/hooks/graphql.d.ts +9 -0
  70. package/hooks/graphql.js +0 -0
  71. package/hooks/index.d.ts +1 -0
  72. package/hooks/index.js +1 -0
  73. package/hooks/schema.d.ts +35 -0
  74. package/hooks/schema.js +27 -0
  75. package/hooks/schema.js.map +1 -0
  76. package/hooks/useAuditLogsList.d.ts +16 -0
  77. package/hooks/useAuditLogsList.js +101 -0
  78. package/hooks/useAuditLogsList.js.map +1 -0
  79. package/index.d.ts +2 -0
  80. package/index.js +51 -0
  81. package/index.js.map +1 -0
  82. package/package.json +46 -0
  83. package/routes.d.ts +4 -0
  84. package/routes.js +10 -0
  85. package/routes.js.map +1 -0
  86. package/types.d.ts +56 -0
  87. package/types.js +1 -0
  88. package/utils/transformRawAuditLog.d.ts +5 -0
  89. package/utils/transformRawAuditLog.js +26 -0
  90. package/utils/transformRawAuditLog.js.map +1 -0
  91. package/views/Logs/Filters/FilterByAction.d.ts +2 -0
  92. package/views/Logs/Filters/FilterByAction.js +46 -0
  93. package/views/Logs/Filters/FilterByAction.js.map +1 -0
  94. package/views/Logs/Filters/FilterByApp.d.ts +2 -0
  95. package/views/Logs/Filters/FilterByApp.js +38 -0
  96. package/views/Logs/Filters/FilterByApp.js.map +1 -0
  97. package/views/Logs/Filters/FilterByCreatedBy.d.ts +2 -0
  98. package/views/Logs/Filters/FilterByCreatedBy.js +50 -0
  99. package/views/Logs/Filters/FilterByCreatedBy.js.map +1 -0
  100. package/views/Logs/Filters/FilterByCreatedOn.d.ts +2 -0
  101. package/views/Logs/Filters/FilterByCreatedOn.js +38 -0
  102. package/views/Logs/Filters/FilterByCreatedOn.js.map +1 -0
  103. package/views/Logs/Filters/FilterByEntity.d.ts +2 -0
  104. package/views/Logs/Filters/FilterByEntity.js +46 -0
  105. package/views/Logs/Filters/FilterByEntity.js.map +1 -0
  106. package/views/Logs/Filters/FilterByEntityId.d.ts +2 -0
  107. package/views/Logs/Filters/FilterByEntityId.js +26 -0
  108. package/views/Logs/Filters/FilterByEntityId.js.map +1 -0
  109. package/views/Logs/Filters/FilterByInitiator.d.ts +2 -0
  110. package/views/Logs/Filters/FilterByInitiator.js +49 -0
  111. package/views/Logs/Filters/FilterByInitiator.js.map +1 -0
  112. package/views/Logs/Filters/Filters.d.ts +7 -0
  113. package/views/Logs/Filters/Filters.js +69 -0
  114. package/views/Logs/Filters/Filters.js.map +1 -0
  115. package/views/Logs/Filters/index.d.ts +7 -0
  116. package/views/Logs/Filters/index.js +7 -0
  117. package/views/Logs/Filters/types.d.ts +9 -0
  118. package/views/Logs/Filters/types.js +0 -0
  119. package/views/Logs/Header/ButtonFilters/ButtonFilters.d.ts +8 -0
  120. package/views/Logs/Header/ButtonFilters/ButtonFilters.js +27 -0
  121. package/views/Logs/Header/ButtonFilters/ButtonFilters.js.map +1 -0
  122. package/views/Logs/Header/ButtonFilters/index.d.ts +1 -0
  123. package/views/Logs/Header/ButtonFilters/index.js +1 -0
  124. package/views/Logs/Header/Header.d.ts +7 -0
  125. package/views/Logs/Header/Header.js +14 -0
  126. package/views/Logs/Header/Header.js.map +1 -0
  127. package/views/Logs/Header/index.d.ts +1 -0
  128. package/views/Logs/Header/index.js +1 -0
  129. package/views/Logs/LoadMoreButton/LoadMoreButton.d.ts +9 -0
  130. package/views/Logs/LoadMoreButton/LoadMoreButton.js +16 -0
  131. package/views/Logs/LoadMoreButton/LoadMoreButton.js.map +1 -0
  132. package/views/Logs/LoadMoreButton/index.d.ts +1 -0
  133. package/views/Logs/LoadMoreButton/index.js +1 -0
  134. package/views/Logs/LoadMoreButton/styled.d.ts +4 -0
  135. package/views/Logs/LoadMoreButton/styled.js +7 -0
  136. package/views/Logs/LoadMoreButton/styled.js.map +1 -0
  137. package/views/Logs/LoadingMore/index.d.ts +2 -0
  138. package/views/Logs/LoadingMore/index.js +16 -0
  139. package/views/Logs/LoadingMore/index.js.map +1 -0
  140. package/views/Logs/LogsModule.d.ts +2 -0
  141. package/views/Logs/LogsModule.js +26 -0
  142. package/views/Logs/LogsModule.js.map +1 -0
  143. package/views/Logs/LogsView.d.ts +2 -0
  144. package/views/Logs/LogsView.js +73 -0
  145. package/views/Logs/LogsView.js.map +1 -0
  146. package/views/Logs/Preview/AuditLogDetailsPresenter.d.ts +13 -0
  147. package/views/Logs/Preview/AuditLogDetailsPresenter.js +36 -0
  148. package/views/Logs/Preview/AuditLogDetailsPresenter.js.map +1 -0
  149. package/views/Logs/Preview/Preview.d.ts +11 -0
  150. package/views/Logs/Preview/Preview.js +127 -0
  151. package/views/Logs/Preview/Preview.js.map +1 -0
  152. package/views/Logs/Preview/abstractions.d.ts +14 -0
  153. package/views/Logs/Preview/abstractions.js +5 -0
  154. package/views/Logs/Preview/abstractions.js.map +1 -0
  155. package/views/Logs/Preview/feature.d.ts +5 -0
  156. package/views/Logs/Preview/feature.js +22 -0
  157. package/views/Logs/Preview/feature.js.map +1 -0
  158. package/views/Logs/Preview/index.d.ts +3 -0
  159. package/views/Logs/Preview/index.js +2 -0
  160. package/views/Logs/Preview/tabs/AiPromptTabs.d.ts +2 -0
  161. package/views/Logs/Preview/tabs/AiPromptTabs.js +25 -0
  162. package/views/Logs/Preview/tabs/AiPromptTabs.js.map +1 -0
  163. package/views/Logs/Preview/tabs/LlmResponseTab.d.ts +4 -0
  164. package/views/Logs/Preview/tabs/LlmResponseTab.js +41 -0
  165. package/views/Logs/Preview/tabs/LlmResponseTab.js.map +1 -0
  166. package/views/Logs/Preview/tabs/SystemPromptTab.d.ts +4 -0
  167. package/views/Logs/Preview/tabs/SystemPromptTab.js +24 -0
  168. package/views/Logs/Preview/tabs/SystemPromptTab.js.map +1 -0
  169. package/views/Logs/Preview/tabs/UserPromptTab.d.ts +4 -0
  170. package/views/Logs/Preview/tabs/UserPromptTab.js +18 -0
  171. package/views/Logs/Preview/tabs/UserPromptTab.js.map +1 -0
  172. package/views/Logs/Preview/tabs/shared.d.ts +28 -0
  173. package/views/Logs/Preview/tabs/shared.js +16 -0
  174. package/views/Logs/Preview/tabs/shared.js.map +1 -0
  175. package/views/Logs/Table/Table.d.ts +21 -0
  176. package/views/Logs/Table/Table.js +117 -0
  177. package/views/Logs/Table/Table.js.map +1 -0
  178. package/views/Logs/Table/index.d.ts +1 -0
  179. package/views/Logs/Table/index.js +1 -0
  180. package/views/Logs/Table/styled.d.ts +1 -0
  181. package/views/Logs/Table/styled.js +17 -0
  182. package/views/Logs/Table/styled.js.map +1 -0
@@ -0,0 +1,35 @@
1
+ import { ListAuditLogsGateway, ListAuditLogsRepository } from "./abstractions/index.js";
2
+ import { listAuditLogsSchema } from "../../hooks/schema.js";
3
+ import { transformRawAuditLog } from "../../utils/transformRawAuditLog.js";
4
+ class ListAuditLogsRepositoryImpl {
5
+ constructor(gateway){
6
+ this.gateway = gateway;
7
+ }
8
+ async execute(params) {
9
+ const response = await this.gateway.execute(params);
10
+ const parsed = listAuditLogsSchema.safeParse(response.data);
11
+ if (!parsed.success) {
12
+ console.error(parsed.error);
13
+ return {
14
+ records: [],
15
+ meta: response.meta
16
+ };
17
+ }
18
+ const records = parsed.data.map((auditLog)=>transformRawAuditLog({
19
+ auditLog
20
+ }));
21
+ return {
22
+ records,
23
+ meta: response.meta
24
+ };
25
+ }
26
+ }
27
+ const ListAuditLogsRepository_ListAuditLogsRepository = ListAuditLogsRepository.createImplementation({
28
+ implementation: ListAuditLogsRepositoryImpl,
29
+ dependencies: [
30
+ ListAuditLogsGateway
31
+ ]
32
+ });
33
+ export { ListAuditLogsRepository_ListAuditLogsRepository as ListAuditLogsRepository };
34
+
35
+ //# sourceMappingURL=ListAuditLogsRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/listAuditLogs/ListAuditLogsRepository.js","sources":["../../../src/features/listAuditLogs/ListAuditLogsRepository.ts"],"sourcesContent":["import { ListAuditLogsGateway } from \"./abstractions/index.js\";\nimport { ListAuditLogsRepository as RepositoryAbstraction } from \"./abstractions/index.js\";\nimport { listAuditLogsSchema } from \"~/hooks/schema.js\";\nimport { transformRawAuditLog } from \"~/utils/transformRawAuditLog.js\";\n\nclass ListAuditLogsRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(private readonly gateway: ListAuditLogsGateway.Interface) {}\n\n async execute(params: RepositoryAbstraction.Params): Promise<RepositoryAbstraction.Result> {\n const response = await this.gateway.execute(params);\n\n const parsed = listAuditLogsSchema.safeParse(response.data);\n if (!parsed.success) {\n console.error(parsed.error);\n return {\n records: [],\n meta: response.meta\n };\n }\n\n const records = parsed.data.map(auditLog => transformRawAuditLog({ auditLog }));\n\n return {\n records,\n meta: response.meta\n };\n }\n}\n\nexport const ListAuditLogsRepository = RepositoryAbstraction.createImplementation({\n implementation: ListAuditLogsRepositoryImpl,\n dependencies: [ListAuditLogsGateway]\n});\n"],"names":["ListAuditLogsRepositoryImpl","gateway","params","response","parsed","listAuditLogsSchema","console","records","auditLog","transformRawAuditLog","ListAuditLogsRepository","RepositoryAbstraction","ListAuditLogsGateway"],"mappings":";;;AAKA,MAAMA;IACF,YAA6BC,OAAuC,CAAE;aAAzCA,OAAO,GAAPA;IAA0C;IAEvE,MAAM,QAAQC,MAAoC,EAAyC;QACvF,MAAMC,WAAW,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD;QAE5C,MAAME,SAASC,oBAAoB,SAAS,CAACF,SAAS,IAAI;QAC1D,IAAI,CAACC,OAAO,OAAO,EAAE;YACjBE,QAAQ,KAAK,CAACF,OAAO,KAAK;YAC1B,OAAO;gBACH,SAAS,EAAE;gBACX,MAAMD,SAAS,IAAI;YACvB;QACJ;QAEA,MAAMI,UAAUH,OAAO,IAAI,CAAC,GAAG,CAACI,CAAAA,WAAYC,qBAAqB;gBAAED;YAAS;QAE5E,OAAO;YACHD;YACA,MAAMJ,SAAS,IAAI;QACvB;IACJ;AACJ;AAEO,MAAMO,kDAA0BC,wBAAAA,oBAA0C,CAAC;IAC9E,gBAAgBX;IAChB,cAAc;QAACY;KAAqB;AACxC"}
@@ -0,0 +1,10 @@
1
+ import { ListAuditLogsRepository, ListAuditLogsUseCase as UseCaseAbstraction } from "./abstractions/index.js";
2
+ declare class ListAuditLogsUseCaseImpl implements UseCaseAbstraction.Interface {
3
+ private readonly repository;
4
+ constructor(repository: ListAuditLogsRepository.Interface);
5
+ execute(params: UseCaseAbstraction.Params): Promise<UseCaseAbstraction.Result>;
6
+ }
7
+ export declare const ListAuditLogsUseCase: typeof ListAuditLogsUseCaseImpl & {
8
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions/ListAuditLogsUseCase.js").IListAuditLogsUseCase>;
9
+ };
10
+ export {};
@@ -0,0 +1,19 @@
1
+ import { ListAuditLogsRepository, ListAuditLogsUseCase } from "./abstractions/index.js";
2
+ class ListAuditLogsUseCaseImpl {
3
+ constructor(repository){
4
+ this.repository = repository;
5
+ }
6
+ async execute(params) {
7
+ const result = await this.repository.execute(params);
8
+ return result;
9
+ }
10
+ }
11
+ const ListAuditLogsUseCase_ListAuditLogsUseCase = ListAuditLogsUseCase.createImplementation({
12
+ implementation: ListAuditLogsUseCaseImpl,
13
+ dependencies: [
14
+ ListAuditLogsRepository
15
+ ]
16
+ });
17
+ export { ListAuditLogsUseCase_ListAuditLogsUseCase as ListAuditLogsUseCase };
18
+
19
+ //# sourceMappingURL=ListAuditLogsUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/listAuditLogs/ListAuditLogsUseCase.js","sources":["../../../src/features/listAuditLogs/ListAuditLogsUseCase.ts"],"sourcesContent":["import {\n ListAuditLogsRepository,\n ListAuditLogsUseCase as UseCaseAbstraction\n} from \"./abstractions/index.js\";\n\nclass ListAuditLogsUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private readonly repository: ListAuditLogsRepository.Interface) {}\n\n async execute(params: UseCaseAbstraction.Params): Promise<UseCaseAbstraction.Result> {\n const result = await this.repository.execute(params);\n return result;\n }\n}\n\nexport const ListAuditLogsUseCase = UseCaseAbstraction.createImplementation({\n implementation: ListAuditLogsUseCaseImpl,\n dependencies: [ListAuditLogsRepository]\n});\n"],"names":["ListAuditLogsUseCaseImpl","repository","params","result","ListAuditLogsUseCase","UseCaseAbstraction","ListAuditLogsRepository"],"mappings":";AAKA,MAAMA;IACF,YAA6BC,UAA6C,CAAE;aAA/CA,UAAU,GAAVA;IAAgD;IAE7E,MAAM,QAAQC,MAAiC,EAAsC;QACjF,MAAMC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACD;QAC7C,OAAOC;IACX;AACJ;AAEO,MAAMC,4CAAuBC,qBAAAA,oBAAuC,CAAC;IACxE,gBAAgBL;IAChB,cAAc;QAACM;KAAwB;AAC3C"}
@@ -0,0 +1,20 @@
1
+ import type { IAuditLogRaw, IAuditLogsMeta } from "../../../types.js";
2
+ export interface IListAuditLogsGatewayParams {
3
+ where?: Record<string, unknown>;
4
+ after?: string;
5
+ sort?: "ASC" | "DESC";
6
+ limit?: number;
7
+ }
8
+ export interface IListAuditLogsGatewayResult {
9
+ data: IAuditLogRaw[];
10
+ meta: IAuditLogsMeta;
11
+ }
12
+ export interface IListAuditLogsGateway {
13
+ execute(params: IListAuditLogsGatewayParams): Promise<IListAuditLogsGatewayResult>;
14
+ }
15
+ export declare const ListAuditLogsGateway: import("@webiny/di").Abstraction<IListAuditLogsGateway>;
16
+ export declare namespace ListAuditLogsGateway {
17
+ type Interface = IListAuditLogsGateway;
18
+ type Params = IListAuditLogsGatewayParams;
19
+ type Result = IListAuditLogsGatewayResult;
20
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const ListAuditLogsGateway = createAbstraction("ListAuditLogsGateway");
3
+ export { ListAuditLogsGateway };
4
+
5
+ //# sourceMappingURL=ListAuditLogsGateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/listAuditLogs/abstractions/ListAuditLogsGateway.js","sources":["../../../../src/features/listAuditLogs/abstractions/ListAuditLogsGateway.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IAuditLogRaw, IAuditLogsMeta } from \"~/types.js\";\n\nexport interface IListAuditLogsGatewayParams {\n where?: Record<string, unknown>;\n after?: string;\n sort?: \"ASC\" | \"DESC\";\n limit?: number;\n}\n\nexport interface IListAuditLogsGatewayResult {\n data: IAuditLogRaw[];\n meta: IAuditLogsMeta;\n}\n\nexport interface IListAuditLogsGateway {\n execute(params: IListAuditLogsGatewayParams): Promise<IListAuditLogsGatewayResult>;\n}\n\nexport const ListAuditLogsGateway =\n createAbstraction<IListAuditLogsGateway>(\"ListAuditLogsGateway\");\n\nexport namespace ListAuditLogsGateway {\n export type Interface = IListAuditLogsGateway;\n export type Params = IListAuditLogsGatewayParams;\n export type Result = IListAuditLogsGatewayResult;\n}\n"],"names":["ListAuditLogsGateway","createAbstraction"],"mappings":";AAmBO,MAAMA,uBACTC,kBAAyC"}
@@ -0,0 +1,20 @@
1
+ import type { IAuditLog, IAuditLogsMeta } from "../../../types.js";
2
+ export interface IListAuditLogsRepositoryParams {
3
+ where?: Record<string, unknown>;
4
+ after?: string;
5
+ sort?: "ASC" | "DESC";
6
+ limit?: number;
7
+ }
8
+ export interface IListAuditLogsRepositoryResult {
9
+ records: IAuditLog[];
10
+ meta: IAuditLogsMeta;
11
+ }
12
+ export interface IListAuditLogsRepository {
13
+ execute(params: IListAuditLogsRepositoryParams): Promise<IListAuditLogsRepositoryResult>;
14
+ }
15
+ export declare const ListAuditLogsRepository: import("@webiny/di").Abstraction<IListAuditLogsRepository>;
16
+ export declare namespace ListAuditLogsRepository {
17
+ type Interface = IListAuditLogsRepository;
18
+ type Params = IListAuditLogsRepositoryParams;
19
+ type Result = IListAuditLogsRepositoryResult;
20
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const ListAuditLogsRepository = createAbstraction("ListAuditLogsRepository");
3
+ export { ListAuditLogsRepository };
4
+
5
+ //# sourceMappingURL=ListAuditLogsRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/listAuditLogs/abstractions/ListAuditLogsRepository.js","sources":["../../../../src/features/listAuditLogs/abstractions/ListAuditLogsRepository.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IAuditLog, IAuditLogsMeta } from \"~/types.js\";\n\nexport interface IListAuditLogsRepositoryParams {\n where?: Record<string, unknown>;\n after?: string;\n sort?: \"ASC\" | \"DESC\";\n limit?: number;\n}\n\nexport interface IListAuditLogsRepositoryResult {\n records: IAuditLog[];\n meta: IAuditLogsMeta;\n}\n\nexport interface IListAuditLogsRepository {\n execute(params: IListAuditLogsRepositoryParams): Promise<IListAuditLogsRepositoryResult>;\n}\n\nexport const ListAuditLogsRepository =\n createAbstraction<IListAuditLogsRepository>(\"ListAuditLogsRepository\");\n\nexport namespace ListAuditLogsRepository {\n export type Interface = IListAuditLogsRepository;\n export type Params = IListAuditLogsRepositoryParams;\n export type Result = IListAuditLogsRepositoryResult;\n}\n"],"names":["ListAuditLogsRepository","createAbstraction"],"mappings":";AAmBO,MAAMA,0BACTC,kBAA4C"}
@@ -0,0 +1,20 @@
1
+ import type { IAuditLog, IAuditLogsMeta } from "../../../types.js";
2
+ export interface IListAuditLogsUseCaseParams {
3
+ where?: Record<string, unknown>;
4
+ after?: string;
5
+ sort?: "ASC" | "DESC";
6
+ limit?: number;
7
+ }
8
+ export interface IListAuditLogsUseCaseResult {
9
+ records: IAuditLog[];
10
+ meta: IAuditLogsMeta;
11
+ }
12
+ export interface IListAuditLogsUseCase {
13
+ execute(params: IListAuditLogsUseCaseParams): Promise<IListAuditLogsUseCaseResult>;
14
+ }
15
+ export declare const ListAuditLogsUseCase: import("@webiny/di").Abstraction<IListAuditLogsUseCase>;
16
+ export declare namespace ListAuditLogsUseCase {
17
+ type Interface = IListAuditLogsUseCase;
18
+ type Params = IListAuditLogsUseCaseParams;
19
+ type Result = IListAuditLogsUseCaseResult;
20
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/admin";
2
+ const ListAuditLogsUseCase = createAbstraction("ListAuditLogsUseCase");
3
+ export { ListAuditLogsUseCase };
4
+
5
+ //# sourceMappingURL=ListAuditLogsUseCase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/listAuditLogs/abstractions/ListAuditLogsUseCase.js","sources":["../../../../src/features/listAuditLogs/abstractions/ListAuditLogsUseCase.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/admin\";\nimport type { IAuditLog, IAuditLogsMeta } from \"~/types.js\";\n\nexport interface IListAuditLogsUseCaseParams {\n where?: Record<string, unknown>;\n after?: string;\n sort?: \"ASC\" | \"DESC\";\n limit?: number;\n}\n\nexport interface IListAuditLogsUseCaseResult {\n records: IAuditLog[];\n meta: IAuditLogsMeta;\n}\n\nexport interface IListAuditLogsUseCase {\n execute(params: IListAuditLogsUseCaseParams): Promise<IListAuditLogsUseCaseResult>;\n}\n\nexport const ListAuditLogsUseCase =\n createAbstraction<IListAuditLogsUseCase>(\"ListAuditLogsUseCase\");\n\nexport namespace ListAuditLogsUseCase {\n export type Interface = IListAuditLogsUseCase;\n export type Params = IListAuditLogsUseCaseParams;\n export type Result = IListAuditLogsUseCaseResult;\n}\n"],"names":["ListAuditLogsUseCase","createAbstraction"],"mappings":";AAmBO,MAAMA,uBACTC,kBAAyC"}
@@ -0,0 +1,6 @@
1
+ export { ListAuditLogsGateway } from "./ListAuditLogsGateway.js";
2
+ export type { IListAuditLogsGateway } from "./ListAuditLogsGateway.js";
3
+ export { ListAuditLogsRepository } from "./ListAuditLogsRepository.js";
4
+ export type { IListAuditLogsRepository } from "./ListAuditLogsRepository.js";
5
+ export { ListAuditLogsUseCase } from "./ListAuditLogsUseCase.js";
6
+ export type { IListAuditLogsUseCase } from "./ListAuditLogsUseCase.js";
@@ -0,0 +1,3 @@
1
+ export { ListAuditLogsGateway } from "./ListAuditLogsGateway.js";
2
+ export { ListAuditLogsRepository } from "./ListAuditLogsRepository.js";
3
+ export { ListAuditLogsUseCase } from "./ListAuditLogsUseCase.js";
@@ -0,0 +1,3 @@
1
+ export declare const ListAuditLogsFeature: import("@webiny/feature/admin").FeatureDefinition<{
2
+ useCase: import("./abstractions/ListAuditLogsUseCase.js").IListAuditLogsUseCase;
3
+ }, []>;
@@ -0,0 +1,21 @@
1
+ import { createFeature } from "@webiny/feature/admin";
2
+ import { ListAuditLogsUseCase } from "./abstractions/index.js";
3
+ import { ListAuditLogsUseCase as external_ListAuditLogsUseCase_js_ListAuditLogsUseCase } from "./ListAuditLogsUseCase.js";
4
+ import { ListAuditLogsRepository } from "./ListAuditLogsRepository.js";
5
+ import { ListAuditLogsGateway } from "./ListAuditLogsGateway.js";
6
+ const ListAuditLogsFeature = createFeature({
7
+ name: "AuditLogs/ListAuditLogs",
8
+ register (container) {
9
+ container.register(external_ListAuditLogsUseCase_js_ListAuditLogsUseCase);
10
+ container.register(ListAuditLogsRepository).inSingletonScope();
11
+ container.register(ListAuditLogsGateway).inSingletonScope();
12
+ },
13
+ resolve (container) {
14
+ return {
15
+ useCase: container.resolve(ListAuditLogsUseCase)
16
+ };
17
+ }
18
+ });
19
+ export { ListAuditLogsFeature };
20
+
21
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/listAuditLogs/feature.js","sources":["../../../src/features/listAuditLogs/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/admin\";\nimport { ListAuditLogsUseCase as UseCaseAbstraction } from \"./abstractions/index.js\";\nimport { ListAuditLogsUseCase } from \"./ListAuditLogsUseCase.js\";\nimport { ListAuditLogsRepository } from \"./ListAuditLogsRepository.js\";\nimport { ListAuditLogsGateway } from \"./ListAuditLogsGateway.js\";\n\nexport const ListAuditLogsFeature = createFeature({\n name: \"AuditLogs/ListAuditLogs\",\n register(container) {\n container.register(ListAuditLogsUseCase);\n container.register(ListAuditLogsRepository).inSingletonScope();\n container.register(ListAuditLogsGateway).inSingletonScope();\n },\n resolve(container) {\n return {\n useCase: container.resolve(UseCaseAbstraction)\n };\n }\n});\n"],"names":["ListAuditLogsFeature","createFeature","container","ListAuditLogsUseCase","ListAuditLogsRepository","ListAuditLogsGateway","UseCaseAbstraction"],"mappings":";;;;;AAMO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE,yBAAyB,gBAAgB;QAC5DF,UAAU,QAAQ,CAACG,sBAAsB,gBAAgB;IAC7D;IACA,SAAQH,SAAS;QACb,OAAO;YACH,SAASA,UAAU,OAAO,CAACI;QAC/B;IACJ;AACJ"}
@@ -0,0 +1 @@
1
+ export { ListAuditLogsFeature } from "./feature.js";
@@ -0,0 +1 @@
1
+ export { ListAuditLogsFeature } from "./feature.js";
@@ -0,0 +1,17 @@
1
+ import type { Permissions } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { AL_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
3
+ export declare const AuditLogsPermissions: import("@webiny/di").Abstraction<{
4
+ canAccess: (entityId: never) => boolean;
5
+ canAction: (action: string, entityId: never) => boolean;
6
+ } & {
7
+ canRead: (entityId: string) => boolean;
8
+ canCreate: (entityId: string) => boolean;
9
+ canEdit: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
10
+ canDelete: (entityId: string, item?: import("@webiny/app-admin/permissions").OwnableItem) => boolean;
11
+ } & {
12
+ canPublish: (entityId: string) => boolean;
13
+ canUnpublish: (entityId: string) => boolean;
14
+ }>;
15
+ export declare namespace AuditLogsPermissions {
16
+ type Interface = Permissions<typeof AL_PERMISSIONS_SCHEMA>;
17
+ }
@@ -0,0 +1,6 @@
1
+ import { createPermissionsAbstraction } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { AL_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
3
+ const AuditLogsPermissions = createPermissionsAbstraction(AL_PERMISSIONS_SCHEMA);
4
+ export { AuditLogsPermissions };
5
+
6
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/permissions/abstractions.js","sources":["../../../src/features/permissions/abstractions.ts"],"sourcesContent":["import { createPermissionsAbstraction } from \"@webiny/app-admin/exports/admin/security.js\";\nimport type { Permissions } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { AL_PERMISSIONS_SCHEMA } from \"~/domain/permissionsSchema.js\";\n\nexport const AuditLogsPermissions = createPermissionsAbstraction(AL_PERMISSIONS_SCHEMA);\n\nexport namespace AuditLogsPermissions {\n export type Interface = Permissions<typeof AL_PERMISSIONS_SCHEMA>;\n}\n"],"names":["AuditLogsPermissions","createPermissionsAbstraction","AL_PERMISSIONS_SCHEMA"],"mappings":";;AAIO,MAAMA,uBAAuBC,6BAA6BC"}
@@ -0,0 +1,14 @@
1
+ export declare const AlPermissionsFeature: import("@webiny/feature/admin/createFeature.js").FeatureDefinition<{
2
+ permissions: {
3
+ canAccess: (entityId: never) => boolean;
4
+ canAction: (action: string, entityId: never) => boolean;
5
+ } & {
6
+ canRead: (entityId: string) => boolean;
7
+ canCreate: (entityId: string) => boolean;
8
+ canEdit: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
9
+ canDelete: (entityId: string, item?: import("@webiny/app-admin/index.js").OwnableItem) => boolean;
10
+ } & {
11
+ canPublish: (entityId: string) => boolean;
12
+ canUnpublish: (entityId: string) => boolean;
13
+ };
14
+ }, []>;
@@ -0,0 +1,7 @@
1
+ import { createPermissionsFeature } from "@webiny/app-admin/exports/admin/security.js";
2
+ import { AL_PERMISSIONS_SCHEMA } from "../../domain/permissionsSchema.js";
3
+ import { AuditLogsPermissions } from "./abstractions.js";
4
+ const AlPermissionsFeature = createPermissionsFeature(AL_PERMISSIONS_SCHEMA, AuditLogsPermissions);
5
+ export { AlPermissionsFeature };
6
+
7
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/permissions/feature.js","sources":["../../../src/features/permissions/feature.ts"],"sourcesContent":["import { createPermissionsFeature } from \"@webiny/app-admin/exports/admin/security.js\";\nimport { AL_PERMISSIONS_SCHEMA } from \"~/domain/permissionsSchema.js\";\nimport { AuditLogsPermissions } from \"./abstractions.js\";\n\nexport const AlPermissionsFeature = createPermissionsFeature(\n AL_PERMISSIONS_SCHEMA,\n AuditLogsPermissions\n);\n"],"names":["AlPermissionsFeature","createPermissionsFeature","AL_PERMISSIONS_SCHEMA","AuditLogsPermissions"],"mappings":";;;AAIO,MAAMA,uBAAuBC,yBAChCC,uBACAC"}
package/graphql.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare const LIST_USERS = "\n query ListUsers {\n adminUsers {\n users: listUsers {\n data {\n id\n firstName\n lastName\n roles {\n name\n }\n }\n error {\n \n code\n message\n data\n\n }\n }\n }\n }\n";
package/graphql.js ADDED
@@ -0,0 +1,27 @@
1
+ const ERROR_FIELDS = `
2
+ code
3
+ message
4
+ data
5
+ `;
6
+ const LIST_USERS = `
7
+ query ListUsers {
8
+ adminUsers {
9
+ users: listUsers {
10
+ data {
11
+ id
12
+ firstName
13
+ lastName
14
+ roles {
15
+ name
16
+ }
17
+ }
18
+ error {
19
+ ${ERROR_FIELDS}
20
+ }
21
+ }
22
+ }
23
+ }
24
+ `;
25
+ export { LIST_USERS };
26
+
27
+ //# sourceMappingURL=graphql.js.map
package/graphql.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.js","sources":["../src/graphql.ts"],"sourcesContent":["const ERROR_FIELDS = /* GraphQL */ `\n code\n message\n data\n`;\n\nexport const LIST_USERS = /* GraphQL */ `\n query ListUsers {\n adminUsers {\n users: listUsers {\n data {\n id\n firstName\n lastName\n roles {\n name\n }\n }\n error {\n ${ERROR_FIELDS}\n }\n }\n }\n }\n`;\n"],"names":["ERROR_FIELDS","LIST_USERS"],"mappings":"AAAA,MAAMA,eAA6B,CAAC;;;;AAIpC,CAAC;AAEM,MAAMC,aAA2B,CAAC;;;;;;;;;;;;;oBAarB,EAAED,aAAa;;;;;AAKnC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface IListAuditLogsVariablesWhere {
2
+ app?: string;
3
+ action?: string;
4
+ createdBy?: string;
5
+ entity?: string;
6
+ entityId?: string;
7
+ createdOn_gte?: Date;
8
+ createdOn_lte?: Date;
9
+ }
File without changes
@@ -0,0 +1 @@
1
+ export * from "./useAuditLogsList.js";
package/hooks/index.js ADDED
@@ -0,0 +1 @@
1
+ export * from "./useAuditLogsList.js";
@@ -0,0 +1,35 @@
1
+ import zod from "zod";
2
+ export declare const auditLogSchema: zod.ZodObject<{
3
+ id: zod.ZodString;
4
+ createdBy: zod.ZodObject<{
5
+ id: zod.ZodString;
6
+ displayName: zod.ZodOptional<zod.ZodString>;
7
+ type: zod.ZodOptional<zod.ZodString>;
8
+ }, zod.core.$strip>;
9
+ createdOn: zod.ZodPreprocess<zod.ZodDate, unknown>;
10
+ app: zod.ZodString;
11
+ action: zod.ZodString;
12
+ message: zod.ZodString;
13
+ entity: zod.ZodString;
14
+ entityId: zod.ZodString;
15
+ tags: zod.ZodArray<zod.ZodString>;
16
+ expiresAt: zod.ZodPipe<zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodPreprocess<zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodDate>>>, unknown>>>>, zod.ZodTransform<Date | undefined, Date | null | undefined>>;
17
+ content: zod.ZodString;
18
+ }, zod.core.$strip>;
19
+ export declare const listAuditLogsSchema: zod.ZodArray<zod.ZodObject<{
20
+ id: zod.ZodString;
21
+ createdBy: zod.ZodObject<{
22
+ id: zod.ZodString;
23
+ displayName: zod.ZodOptional<zod.ZodString>;
24
+ type: zod.ZodOptional<zod.ZodString>;
25
+ }, zod.core.$strip>;
26
+ createdOn: zod.ZodPreprocess<zod.ZodDate, unknown>;
27
+ app: zod.ZodString;
28
+ action: zod.ZodString;
29
+ message: zod.ZodString;
30
+ entity: zod.ZodString;
31
+ entityId: zod.ZodString;
32
+ tags: zod.ZodArray<zod.ZodString>;
33
+ expiresAt: zod.ZodPipe<zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodPreprocess<zod.ZodOptional<zod.ZodNullable<zod.ZodOptional<zod.ZodDate>>>, unknown>>>>, zod.ZodTransform<Date | undefined, Date | null | undefined>>;
34
+ content: zod.ZodString;
35
+ }, zod.core.$strip>>;
@@ -0,0 +1,27 @@
1
+ import zod from "zod";
2
+ const auditLogSchema = zod.object({
3
+ id: zod.string(),
4
+ createdBy: zod.object({
5
+ id: zod.string(),
6
+ displayName: zod.string().optional(),
7
+ type: zod.string().optional()
8
+ }),
9
+ createdOn: zod.preprocess((value)=>{
10
+ if ("string" == typeof value || value instanceof Date) return new Date(value);
11
+ return value;
12
+ }, zod.date()),
13
+ app: zod.string(),
14
+ action: zod.string(),
15
+ message: zod.string(),
16
+ entity: zod.string(),
17
+ entityId: zod.string(),
18
+ tags: zod.array(zod.string()),
19
+ expiresAt: zod.preprocess((value)=>{
20
+ if ("string" == typeof value || value instanceof Date) return new Date(value);
21
+ }, zod.date().optional().nullish()).optional().nullish().transform((value)=>value || void 0),
22
+ content: zod.string()
23
+ });
24
+ const listAuditLogsSchema = zod.array(auditLogSchema);
25
+ export { auditLogSchema, listAuditLogsSchema };
26
+
27
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/schema.js","sources":["../../src/hooks/schema.ts"],"sourcesContent":["import zod from \"zod\";\n\nexport const auditLogSchema = zod.object({\n id: zod.string(),\n createdBy: zod.object({\n id: zod.string(),\n displayName: zod.string().optional(),\n type: zod.string().optional()\n }),\n createdOn: zod.preprocess(value => {\n if (typeof value === \"string\" || value instanceof Date) {\n return new Date(value);\n }\n return value;\n }, zod.date()),\n app: zod.string(),\n action: zod.string(),\n message: zod.string(),\n entity: zod.string(),\n entityId: zod.string(),\n tags: zod.array(zod.string()),\n expiresAt: zod\n .preprocess(value => {\n if (typeof value === \"string\" || value instanceof Date) {\n return new Date(value);\n }\n return undefined;\n }, zod.date().optional().nullish())\n .optional()\n .nullish()\n .transform(value => {\n return value || undefined;\n }),\n content: zod.string()\n});\n\nexport const listAuditLogsSchema = zod.array(auditLogSchema);\n"],"names":["auditLogSchema","zod","value","Date","undefined","listAuditLogsSchema"],"mappings":";AAEO,MAAMA,iBAAiBC,IAAI,MAAM,CAAC;IACrC,IAAIA,IAAI,MAAM;IACd,WAAWA,IAAI,MAAM,CAAC;QAClB,IAAIA,IAAI,MAAM;QACd,aAAaA,IAAI,MAAM,GAAG,QAAQ;QAClC,MAAMA,IAAI,MAAM,GAAG,QAAQ;IAC/B;IACA,WAAWA,IAAI,UAAU,CAACC,CAAAA;QACtB,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,iBAAiBC,MAC9C,OAAO,IAAIA,KAAKD;QAEpB,OAAOA;IACX,GAAGD,IAAI,IAAI;IACX,KAAKA,IAAI,MAAM;IACf,QAAQA,IAAI,MAAM;IAClB,SAASA,IAAI,MAAM;IACnB,QAAQA,IAAI,MAAM;IAClB,UAAUA,IAAI,MAAM;IACpB,MAAMA,IAAI,KAAK,CAACA,IAAI,MAAM;IAC1B,WAAWA,IAAAA,UACI,CAACC,CAAAA;QACR,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,iBAAiBC,MAC9C,OAAO,IAAIA,KAAKD;IAGxB,GAAGD,IAAI,IAAI,GAAG,QAAQ,GAAG,OAAO,IAC/B,QAAQ,GACR,OAAO,GACP,SAAS,CAACC,CAAAA,QACAA,SAASE;IAExB,SAASH,IAAI,MAAM;AACvB;AAEO,MAAMI,sBAAsBJ,IAAI,KAAK,CAACD"}
@@ -0,0 +1,16 @@
1
+ import type { IListAuditLogsVariablesWhere } from "../hooks/graphql.js";
2
+ import type { IAuditLog, IAuditLogsMeta } from "../types.js";
3
+ import type { OnDataTableSortingChange, DataTableSorting } from "@webiny/admin-ui";
4
+ export interface UseAuditLogs {
5
+ isListLoading: boolean;
6
+ isListLoadingMore: boolean;
7
+ records: IAuditLog[];
8
+ meta: IAuditLogsMeta;
9
+ listMoreRecords: () => void;
10
+ setWhere: (where: Partial<IListAuditLogsVariablesWhere>) => void;
11
+ setLimit: (limit: number) => void;
12
+ after?: string;
13
+ sorting: DataTableSorting;
14
+ setSorting: OnDataTableSortingChange;
15
+ }
16
+ export declare const useAuditLogsList: () => UseAuditLogs;
@@ -0,0 +1,101 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ import { useFeature } from "@webiny/app";
3
+ import { ListAuditLogsFeature } from "../features/listAuditLogs/index.js";
4
+ const useAuditLogsList = ()=>{
5
+ const { useCase } = useFeature(ListAuditLogsFeature);
6
+ const [variables, setVariables] = useState({
7
+ where: {},
8
+ after: void 0,
9
+ sort: "DESC",
10
+ limit: 25
11
+ });
12
+ const [accumulatedRecords, setAccumulatedRecords] = useState([]);
13
+ const [loading, setLoading] = useState(true);
14
+ const [meta, setMeta] = useState({
15
+ hasMoreItems: false,
16
+ cursor: null
17
+ });
18
+ const resetPagination = useCallback(()=>{
19
+ setAccumulatedRecords([]);
20
+ setMeta({
21
+ hasMoreItems: false,
22
+ cursor: null
23
+ });
24
+ }, []);
25
+ const setWhere = useCallback((where)=>{
26
+ setVariables((prev)=>({
27
+ ...prev,
28
+ where,
29
+ after: void 0
30
+ }));
31
+ resetPagination();
32
+ }, []);
33
+ const setSort = useCallback((sort)=>{
34
+ setVariables((prev)=>({
35
+ ...prev,
36
+ sort,
37
+ after: void 0
38
+ }));
39
+ resetPagination();
40
+ }, []);
41
+ const setAfter = useCallback((after)=>{
42
+ setVariables((prev)=>({
43
+ ...prev,
44
+ after
45
+ }));
46
+ }, []);
47
+ const setLimit = useCallback((limit)=>{
48
+ setVariables((prev)=>({
49
+ ...prev,
50
+ limit
51
+ }));
52
+ }, []);
53
+ const [acoSorting, setAcoSorting] = useState([]);
54
+ useEffect(()=>{
55
+ const sort = acoSorting[0];
56
+ if (!sort) return;
57
+ setSort(sort.desc ? "DESC" : "ASC");
58
+ }, [
59
+ acoSorting
60
+ ]);
61
+ const requestIdRef = useRef(0);
62
+ useEffect(()=>{
63
+ setLoading(true);
64
+ const requestId = ++requestIdRef.current;
65
+ useCase.execute(variables).then((result)=>{
66
+ if (requestId !== requestIdRef.current) return;
67
+ variables.after ? setAccumulatedRecords((prev)=>[
68
+ ...prev,
69
+ ...result.records
70
+ ]) : setAccumulatedRecords(result.records);
71
+ setMeta(result.meta);
72
+ setLoading(false);
73
+ });
74
+ }, [
75
+ variables
76
+ ]);
77
+ const sorting = useMemo(()=>[
78
+ {
79
+ id: "createdOn",
80
+ desc: "DESC" === variables.sort
81
+ }
82
+ ], [
83
+ variables.sort
84
+ ]);
85
+ return {
86
+ isListLoading: loading,
87
+ records: accumulatedRecords,
88
+ meta,
89
+ listMoreRecords: ()=>{
90
+ if (!loading && meta.cursor) setAfter(meta.cursor);
91
+ },
92
+ setWhere,
93
+ sorting,
94
+ setSorting: setAcoSorting,
95
+ setLimit,
96
+ isListLoadingMore: loading && !!variables.after
97
+ };
98
+ };
99
+ export { useAuditLogsList };
100
+
101
+ //# sourceMappingURL=useAuditLogsList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useAuditLogsList.js","sources":["../../src/hooks/useAuditLogsList.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useFeature } from \"@webiny/app\";\nimport { ListAuditLogsFeature } from \"~/features/listAuditLogs/index.js\";\nimport type { IListAuditLogsVariablesWhere } from \"~/hooks/graphql.js\";\nimport type { IAuditLog, IAuditLogsMeta } from \"~/types.js\";\nimport type { OnDataTableSortingChange, DataTableSorting } from \"@webiny/admin-ui\";\n\nexport interface UseAuditLogs {\n isListLoading: boolean;\n isListLoadingMore: boolean;\n records: IAuditLog[];\n meta: IAuditLogsMeta;\n listMoreRecords: () => void;\n setWhere: (where: Partial<IListAuditLogsVariablesWhere>) => void;\n setLimit: (limit: number) => void;\n after?: string;\n sorting: DataTableSorting;\n setSorting: OnDataTableSortingChange;\n}\n\ninterface ListVariables {\n where: Record<string, unknown>;\n after: string | undefined;\n sort: \"ASC\" | \"DESC\";\n limit: number;\n}\n\nexport const useAuditLogsList = (): UseAuditLogs => {\n const { useCase } = useFeature(ListAuditLogsFeature);\n\n const [variables, setVariables] = useState<ListVariables>({\n where: {},\n after: undefined,\n sort: \"DESC\",\n limit: 25\n });\n\n const [accumulatedRecords, setAccumulatedRecords] = useState<IAuditLog[]>([]);\n const [loading, setLoading] = useState(true);\n const [meta, setMeta] = useState<IAuditLogsMeta>({\n hasMoreItems: false,\n cursor: null\n });\n\n const resetPagination = useCallback(() => {\n setAccumulatedRecords([]);\n setMeta({ hasMoreItems: false, cursor: null });\n }, []);\n\n const setWhere = useCallback((where: Partial<IListAuditLogsVariablesWhere>) => {\n setVariables(prev => ({ ...prev, where, after: undefined }));\n resetPagination();\n }, []);\n\n const setSort = useCallback((sort: \"ASC\" | \"DESC\") => {\n setVariables(prev => ({ ...prev, sort, after: undefined }));\n resetPagination();\n }, []);\n\n const setAfter = useCallback((after?: string) => {\n setVariables(prev => ({ ...prev, after }));\n }, []);\n\n const setLimit = useCallback((limit: number) => {\n setVariables(prev => ({ ...prev, limit }));\n }, []);\n\n const [acoSorting, setAcoSorting] = useState<DataTableSorting>([]);\n\n useEffect(() => {\n const sort = acoSorting[0];\n if (!sort) {\n return;\n }\n setSort(sort.desc ? \"DESC\" : \"ASC\");\n }, [acoSorting]);\n\n const requestIdRef = useRef(0);\n\n useEffect(() => {\n setLoading(true);\n const requestId = ++requestIdRef.current;\n\n useCase.execute(variables).then(result => {\n if (requestId !== requestIdRef.current) {\n return;\n }\n\n if (variables.after) {\n setAccumulatedRecords(prev => [...prev, ...result.records]);\n } else {\n setAccumulatedRecords(result.records);\n }\n\n setMeta(result.meta);\n setLoading(false);\n });\n }, [variables]);\n\n const sorting = useMemo((): DataTableSorting => {\n return [\n {\n id: \"createdOn\",\n desc: variables.sort === \"DESC\"\n }\n ];\n }, [variables.sort]);\n\n return {\n isListLoading: loading,\n records: accumulatedRecords,\n meta,\n listMoreRecords: () => {\n if (!loading && meta.cursor) {\n setAfter(meta.cursor);\n }\n },\n setWhere,\n sorting,\n setSorting: setAcoSorting,\n setLimit,\n isListLoadingMore: loading && !!variables.after\n };\n};\n"],"names":["useAuditLogsList","useCase","useFeature","ListAuditLogsFeature","variables","setVariables","useState","undefined","accumulatedRecords","setAccumulatedRecords","loading","setLoading","meta","setMeta","resetPagination","useCallback","setWhere","where","prev","setSort","sort","setAfter","after","setLimit","limit","acoSorting","setAcoSorting","useEffect","requestIdRef","useRef","requestId","result","sorting","useMemo"],"mappings":";;;AA2BO,MAAMA,mBAAmB;IAC5B,MAAM,EAAEC,OAAO,EAAE,GAAGC,WAAWC;IAE/B,MAAM,CAACC,WAAWC,aAAa,GAAGC,SAAwB;QACtD,OAAO,CAAC;QACR,OAAOC;QACP,MAAM;QACN,OAAO;IACX;IAEA,MAAM,CAACC,oBAAoBC,sBAAsB,GAAGH,SAAsB,EAAE;IAC5E,MAAM,CAACI,SAASC,WAAW,GAAGL,SAAS;IACvC,MAAM,CAACM,MAAMC,QAAQ,GAAGP,SAAyB;QAC7C,cAAc;QACd,QAAQ;IACZ;IAEA,MAAMQ,kBAAkBC,YAAY;QAChCN,sBAAsB,EAAE;QACxBI,QAAQ;YAAE,cAAc;YAAO,QAAQ;QAAK;IAChD,GAAG,EAAE;IAEL,MAAMG,WAAWD,YAAY,CAACE;QAC1BZ,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAED;gBAAO,OAAOV;YAAU;QACzDO;IACJ,GAAG,EAAE;IAEL,MAAMK,UAAUJ,YAAY,CAACK;QACzBf,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEE;gBAAM,OAAOb;YAAU;QACxDO;IACJ,GAAG,EAAE;IAEL,MAAMO,WAAWN,YAAY,CAACO;QAC1BjB,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEI;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAMC,WAAWR,YAAY,CAACS;QAC1BnB,aAAaa,CAAAA,OAAS;gBAAE,GAAGA,IAAI;gBAAEM;YAAM;IAC3C,GAAG,EAAE;IAEL,MAAM,CAACC,YAAYC,cAAc,GAAGpB,SAA2B,EAAE;IAEjEqB,UAAU;QACN,MAAMP,OAAOK,UAAU,CAAC,EAAE;QAC1B,IAAI,CAACL,MACD;QAEJD,QAAQC,KAAK,IAAI,GAAG,SAAS;IACjC,GAAG;QAACK;KAAW;IAEf,MAAMG,eAAeC,OAAO;IAE5BF,UAAU;QACNhB,WAAW;QACX,MAAMmB,YAAY,EAAEF,aAAa,OAAO;QAExC3B,QAAQ,OAAO,CAACG,WAAW,IAAI,CAAC2B,CAAAA;YAC5B,IAAID,cAAcF,aAAa,OAAO,EAClC;YAGAxB,UAAU,KAAK,GACfK,sBAAsBS,CAAAA,OAAQ;uBAAIA;uBAASa,OAAO,OAAO;iBAAC,IAE1DtB,sBAAsBsB,OAAO,OAAO;YAGxClB,QAAQkB,OAAO,IAAI;YACnBpB,WAAW;QACf;IACJ,GAAG;QAACP;KAAU;IAEd,MAAM4B,UAAUC,QAAQ,IACb;YACH;gBACI,IAAI;gBACJ,MAAM7B,AAAmB,WAAnBA,UAAU,IAAI;YACxB;SACH,EACF;QAACA,UAAU,IAAI;KAAC;IAEnB,OAAO;QACH,eAAeM;QACf,SAASF;QACTI;QACA,iBAAiB;YACb,IAAI,CAACF,WAAWE,KAAK,MAAM,EACvBS,SAAST,KAAK,MAAM;QAE5B;QACAI;QACAgB;QACA,YAAYN;QACZH;QACA,mBAAmBb,WAAW,CAAC,CAACN,UAAU,KAAK;IACnD;AACJ"}
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const AuditLogs: () => React.JSX.Element | null;
package/index.js ADDED
@@ -0,0 +1,51 @@
1
+ import react from "react";
2
+ import { AdminConfig, AdminLayout, HasPermission, RegisterFeature, useFeatureFlags, useRouter } from "@webiny/app-admin";
3
+ import { ReactComponent } from "@webiny/icons/manage_search.svg";
4
+ import { LogsModule } from "./views/Logs/LogsModule.js";
5
+ import { SecurityPermission } from "./SecurityPermission.js";
6
+ import { LogsView } from "./views/Logs/LogsView.js";
7
+ import { AuditLogsListWithConfig } from "./config/list/index.js";
8
+ import { Routes } from "./routes.js";
9
+ import { AlPermissionsFeature } from "./features/permissions/feature.js";
10
+ import { ListAuditLogsFeature } from "./features/listAuditLogs/index.js";
11
+ import { AuditLogDetailsPresenterFeature } from "./views/Logs/Preview/feature.js";
12
+ import { AiPromptPreviewTabs } from "./views/Logs/Preview/tabs/AiPromptTabs.js";
13
+ const { Menu: Menu, Route: Route } = AdminConfig;
14
+ const AuditLogs = ()=>{
15
+ const featureFlags = useFeatureFlags();
16
+ const router = useRouter();
17
+ if (!featureFlags.isEnabled("auditLogs")) return null;
18
+ return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(RegisterFeature, {
19
+ feature: AlPermissionsFeature
20
+ }), /*#__PURE__*/ react.createElement(RegisterFeature, {
21
+ feature: ListAuditLogsFeature
22
+ }), /*#__PURE__*/ react.createElement(RegisterFeature, {
23
+ feature: AuditLogDetailsPresenterFeature
24
+ }), /*#__PURE__*/ react.createElement(LogsModule, null), /*#__PURE__*/ react.createElement(SecurityPermission, null), /*#__PURE__*/ react.createElement(AiPromptPreviewTabs, null), /*#__PURE__*/ react.createElement(AdminConfig, null, /*#__PURE__*/ react.createElement(HasPermission, {
25
+ any: [
26
+ "al.*"
27
+ ]
28
+ }, /*#__PURE__*/ react.createElement(Menu, {
29
+ name: "auditLogs",
30
+ pinnable: true,
31
+ element: /*#__PURE__*/ react.createElement(Menu.Link, {
32
+ text: "Audit Logs",
33
+ icon: /*#__PURE__*/ react.createElement(Menu.Link.Icon, {
34
+ element: /*#__PURE__*/ react.createElement(ReactComponent, null),
35
+ label: "Audit Logs"
36
+ }),
37
+ to: router.getLink(Routes.AuditLogsList)
38
+ })
39
+ }), /*#__PURE__*/ react.createElement(Route, {
40
+ route: Routes.AuditLogsList,
41
+ element: /*#__PURE__*/ react.createElement(AdminLayout, {
42
+ title: "Audit Logs - Logs"
43
+ }, /*#__PURE__*/ react.createElement(AdminConfig.Breadcrumb, {
44
+ name: "auditLogs",
45
+ label: "Audit Logs"
46
+ }), /*#__PURE__*/ react.createElement(AuditLogsListWithConfig, null, /*#__PURE__*/ react.createElement(LogsView, null)))
47
+ }))));
48
+ };
49
+ export { AuditLogs };
50
+
51
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { useRouter } from \"@webiny/app-admin\";\nimport { ReactComponent as Icon } from \"@webiny/icons/manage_search.svg\";\nimport { AdminConfig, AdminLayout, RegisterFeature, useFeatureFlags } from \"@webiny/app-admin\";\nimport { HasPermission } from \"@webiny/app-admin\";\nimport { LogsModule } from \"~/views/Logs/LogsModule.js\";\nimport { SecurityPermission } from \"~/SecurityPermission.js\";\nimport { LogsView } from \"~/views/Logs/LogsView.js\";\nimport { AuditLogsListWithConfig } from \"~/config/list/index.js\";\nimport { Routes } from \"~/routes.js\";\nimport { AlPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { ListAuditLogsFeature } from \"~/features/listAuditLogs/index.js\";\nimport { AuditLogDetailsPresenterFeature } from \"~/views/Logs/Preview/feature.js\";\nimport { AiPromptPreviewTabs } from \"~/views/Logs/Preview/tabs/AiPromptTabs.js\";\n\nconst { Menu, Route } = AdminConfig;\n\nexport const AuditLogs = () => {\n const featureFlags = useFeatureFlags();\n const router = useRouter();\n\n if (!featureFlags.isEnabled(\"auditLogs\")) {\n return null;\n }\n\n return (\n <>\n <RegisterFeature feature={AlPermissionsFeature} />\n <RegisterFeature feature={ListAuditLogsFeature} />\n <RegisterFeature feature={AuditLogDetailsPresenterFeature} />\n <LogsModule />\n <SecurityPermission />\n <AiPromptPreviewTabs />\n <AdminConfig>\n <HasPermission any={[\"al.*\"]}>\n <Menu\n name=\"auditLogs\"\n pinnable\n element={\n <Menu.Link\n text={\"Audit Logs\"}\n icon={<Menu.Link.Icon element={<Icon />} label={\"Audit Logs\"} />}\n to={router.getLink(Routes.AuditLogsList)}\n />\n }\n />\n <Route\n route={Routes.AuditLogsList}\n element={\n <AdminLayout title={\"Audit Logs - Logs\"}>\n <AdminConfig.Breadcrumb name={\"auditLogs\"} label={\"Audit Logs\"} />\n <AuditLogsListWithConfig>\n <LogsView />\n </AuditLogsListWithConfig>\n </AdminLayout>\n }\n />\n </HasPermission>\n </AdminConfig>\n </>\n );\n};\n"],"names":["Menu","Route","AdminConfig","AuditLogs","featureFlags","useFeatureFlags","router","useRouter","RegisterFeature","AlPermissionsFeature","ListAuditLogsFeature","AuditLogDetailsPresenterFeature","LogsModule","SecurityPermission","AiPromptPreviewTabs","HasPermission","Icon","Routes","AdminLayout","AuditLogsListWithConfig","LogsView"],"mappings":";;;;;;;;;;;;AAeA,MAAM,EAAEA,MAAAA,IAAI,EAAEC,OAAAA,KAAK,EAAE,GAAGC;AAEjB,MAAMC,YAAY;IACrB,MAAMC,eAAeC;IACrB,MAAMC,SAASC;IAEf,IAAI,CAACH,aAAa,SAAS,CAAC,cACxB,OAAO;IAGX,OAAO,WAAP,GACI,wDACI,oBAACI,iBAAeA;QAAC,SAASC;sBAC1B,oBAACD,iBAAeA;QAAC,SAASE;sBAC1B,oBAACF,iBAAeA;QAAC,SAASG;sBAC1B,oBAACC,YAAUA,OAAAA,WAAAA,GACX,oBAACC,oBAAkBA,OAAAA,WAAAA,GACnB,oBAACC,qBAAmBA,OAAAA,WAAAA,GACpB,oBAACZ,aAAWA,MAAAA,WAAAA,GACR,oBAACa,eAAaA;QAAC,KAAK;YAAC;SAAO;qBACxB,oBAACf,MAAIA;QACD,MAAK;QACL;QACA,uBACI,oBAACA,KAAK,IAAI;YACN,MAAM;YACN,oBAAM,oBAACA,KAAK,IAAI,CAAC,IAAI;gBAAC,uBAAS,oBAACgB,gBAAIA;gBAAK,OAAO;;YAChD,IAAIV,OAAO,OAAO,CAACW,OAAO,aAAa;;sBAInD,oBAAChB,OAAKA;QACF,OAAOgB,OAAO,aAAa;QAC3B,uBACI,oBAACC,aAAWA;YAAC,OAAO;yBAChB,oBAAChB,YAAY,UAAU;YAAC,MAAM;YAAa,OAAO;0BAClD,oBAACiB,yBAAuBA,MAAAA,WAAAA,GACpB,oBAACC,UAAQA;;AAS7C"}