@evolver-fi/evolver-basics-admin-components 1.0.0 → 8.2.2-alpha.2

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 (198) hide show
  1. package/dist/EnumSelectFilter-DDWIjz5i.js +35 -0
  2. package/dist/EnumSelectFilter-DDWIjz5i.js.map +1 -0
  3. package/dist/FilterLink-OxQDWR5G.js +29 -0
  4. package/dist/FilterLink-OxQDWR5G.js.map +1 -0
  5. package/dist/Table-IciQttr3.js +79 -0
  6. package/dist/Table-IciQttr3.js.map +1 -0
  7. package/dist/TableMetadataDisplay-BM61EulC.js +49 -0
  8. package/dist/TableMetadataDisplay-BM61EulC.js.map +1 -0
  9. package/dist/TextFilter-CLOKjiSd.js +54 -0
  10. package/dist/TextFilter-CLOKjiSd.js.map +1 -0
  11. package/dist/api-CMiZYkfc.js +32 -0
  12. package/dist/api-CMiZYkfc.js.map +1 -0
  13. package/dist/breadcrumbs/index.js +2 -5
  14. package/dist/breadcrumbs-BAwnKRxL.js +32 -0
  15. package/dist/breadcrumbs-BAwnKRxL.js.map +1 -0
  16. package/dist/breadcrumbs.css +1 -0
  17. package/dist/client/index.js +330 -369
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/configuration-values/index.js +2 -13
  20. package/dist/configuration-values-CjOfmPRq.js +3464 -0
  21. package/dist/configuration-values-CjOfmPRq.js.map +1 -0
  22. package/dist/control-values/index.js +2 -10
  23. package/dist/control-values-CzQOB4WJ.js +144 -0
  24. package/dist/control-values-CzQOB4WJ.js.map +1 -0
  25. package/dist/exhaustiveValues-BYWkg9M1.js +6 -0
  26. package/dist/exhaustiveValues-BYWkg9M1.js.map +1 -0
  27. package/dist/filter/index.js +4 -10
  28. package/dist/formData-BO275hRZ.js +43 -0
  29. package/dist/formData-BO275hRZ.js.map +1 -0
  30. package/dist/jwt-tokens/index.js +2 -9
  31. package/dist/jwt-tokens-DnKsHei4.js +71 -0
  32. package/dist/jwt-tokens-DnKsHei4.js.map +1 -0
  33. package/dist/main/index.js +17 -87
  34. package/dist/message-log/index.js +2 -12
  35. package/dist/message-log-BdrJtbsP.js +337 -0
  36. package/dist/message-log-BdrJtbsP.js.map +1 -0
  37. package/dist/message-sending/index.js +2 -10
  38. package/dist/message-sending-dvTw2fFm.js +181 -0
  39. package/dist/message-sending-dvTw2fFm.js.map +1 -0
  40. package/dist/message-targets/index.js +2 -15
  41. package/dist/message-targets-8EppIJde.js +406 -0
  42. package/dist/message-targets-8EppIJde.js.map +1 -0
  43. package/dist/pagination-C4QUYRMf.js +20 -0
  44. package/dist/pagination-C4QUYRMf.js.map +1 -0
  45. package/dist/scheduled-tasks/index.js +2 -16
  46. package/dist/scheduled-tasks-BtBnBrE7.js +647 -0
  47. package/dist/scheduled-tasks-BtBnBrE7.js.map +1 -0
  48. package/dist/schemas-D-8_LuND.js +2986 -0
  49. package/dist/schemas-D-8_LuND.js.map +1 -0
  50. package/dist/table/index.js +2 -6
  51. package/dist/triggerables/index.js +3 -11
  52. package/dist/triggerables-DgrIeQMi.js +51 -0
  53. package/dist/triggerables-DgrIeQMi.js.map +1 -0
  54. package/dist/types/breadcrumbs.d.ts +1 -0
  55. package/dist/types/client/index.d.ts +5 -0
  56. package/dist/types/client.d.ts +1 -0
  57. package/dist/types/common/exhaustiveValues.d.ts +5 -0
  58. package/dist/types/common/formData.d.ts +20 -0
  59. package/dist/types/common/format.d.ts +1 -0
  60. package/dist/types/common/pagination.d.ts +8 -0
  61. package/dist/types/common/types.d.ts +27 -0
  62. package/dist/types/common/validation.d.ts +5 -0
  63. package/dist/types/components/breadcrumbs/BreadCrumbs.d.ts +10 -0
  64. package/dist/types/components/breadcrumbs/index.d.ts +1 -0
  65. package/dist/types/components/filter/EnumSelectFilter.d.ts +7 -0
  66. package/dist/types/components/filter/FilterHelperTexts.d.ts +4 -0
  67. package/dist/types/components/filter/FilterLink.d.ts +2 -0
  68. package/dist/types/components/filter/TextFilter.d.ts +2 -0
  69. package/dist/types/components/filter/createEnumSelectFilter.d.ts +5 -0
  70. package/dist/types/components/filter/index.d.ts +5 -0
  71. package/dist/types/components/filter/types.d.ts +20 -0
  72. package/dist/types/components/metadata/TableMetadataDisplay.d.ts +2 -0
  73. package/dist/types/components/metadata/utils.d.ts +1 -0
  74. package/dist/types/components/table/Pagination.d.ts +7 -0
  75. package/dist/types/components/table/Table.d.ts +3 -0
  76. package/dist/types/components/table/index.d.ts +3 -0
  77. package/dist/types/components/table/types.d.ts +48 -0
  78. package/dist/types/configuration-values.d.ts +1 -0
  79. package/dist/types/control-values.d.ts +1 -0
  80. package/dist/types/filter.d.ts +1 -0
  81. package/dist/types/index.d.ts +11 -0
  82. package/dist/types/jwt-tokens.d.ts +1 -0
  83. package/dist/types/main.d.ts +1 -0
  84. package/dist/types/message-log.d.ts +1 -0
  85. package/dist/types/message-sending.d.ts +1 -0
  86. package/dist/types/message-targets.d.ts +1 -0
  87. package/dist/types/routes/configuration-values/ConfigurationValueFormRoute.d.ts +2 -0
  88. package/dist/types/routes/configuration-values/ConfigurationValuesRoute.d.ts +2 -0
  89. package/dist/types/routes/configuration-values/action.d.ts +8 -0
  90. package/dist/types/routes/configuration-values/api.d.ts +53 -0
  91. package/dist/types/routes/configuration-values/configurationValueColumns.d.ts +4 -0
  92. package/dist/types/routes/configuration-values/index.d.ts +5 -0
  93. package/dist/types/routes/configuration-values/loader.d.ts +52 -0
  94. package/dist/types/routes/control-values/ControlValuesRoute.d.ts +2 -0
  95. package/dist/types/routes/control-values/SingleControlValueRoute.d.ts +2 -0
  96. package/dist/types/routes/control-values/api.d.ts +43 -0
  97. package/dist/types/routes/control-values/controlValueColumns.d.ts +4 -0
  98. package/dist/types/routes/control-values/index.d.ts +4 -0
  99. package/dist/types/routes/control-values/loader.d.ts +43 -0
  100. package/dist/types/routes/jwt-tokens/JwtTokensRoute.d.ts +6 -0
  101. package/dist/types/routes/jwt-tokens/api.d.ts +41 -0
  102. package/dist/types/routes/jwt-tokens/index.d.ts +3 -0
  103. package/dist/types/routes/jwt-tokens/loader.d.ts +35 -0
  104. package/dist/types/routes/message-log/LogBodyLink.d.ts +6 -0
  105. package/dist/types/routes/message-log/MessageLogRoute.d.ts +2 -0
  106. package/dist/types/routes/message-log/SingleLogMessageRoute.d.ts +6 -0
  107. package/dist/types/routes/message-log/api.d.ts +88 -0
  108. package/dist/types/routes/message-log/index.d.ts +4 -0
  109. package/dist/types/routes/message-log/loader.d.ts +53 -0
  110. package/dist/types/routes/message-log/messageLogColumns.d.ts +3 -0
  111. package/dist/types/routes/message-log/types.d.ts +37 -0
  112. package/dist/types/routes/message-sending/MessageSendingRoute.d.ts +2 -0
  113. package/dist/types/routes/message-sending/SingleMessageRoute.d.ts +2 -0
  114. package/dist/types/routes/message-sending/api.d.ts +92 -0
  115. package/dist/types/routes/message-sending/index.d.ts +4 -0
  116. package/dist/types/routes/message-sending/loader.d.ts +34 -0
  117. package/dist/types/routes/message-sending/messageSendingColumns.d.ts +3 -0
  118. package/dist/types/routes/message-sending/types.d.ts +43 -0
  119. package/dist/types/routes/message-targets/MessageTargetFormRoute.d.ts +2 -0
  120. package/dist/types/routes/message-targets/MessageTargetsRoute.d.ts +2 -0
  121. package/dist/types/routes/message-targets/action.d.ts +8 -0
  122. package/dist/types/routes/message-targets/api.d.ts +12 -0
  123. package/dist/types/routes/message-targets/index.d.ts +5 -0
  124. package/dist/types/routes/message-targets/loader.d.ts +15 -0
  125. package/dist/types/routes/scheduled-tasks/ScheduledTaskFormRoute.d.ts +2 -0
  126. package/dist/types/routes/scheduled-tasks/ScheduledTasksRoute.d.ts +2 -0
  127. package/dist/types/routes/scheduled-tasks/action.d.ts +21 -0
  128. package/dist/types/routes/scheduled-tasks/api.d.ts +75 -0
  129. package/dist/types/routes/scheduled-tasks/index.d.ts +5 -0
  130. package/dist/types/routes/scheduled-tasks/loader.d.ts +57 -0
  131. package/dist/types/routes/scheduled-tasks/parseScheduledTask.d.ts +15 -0
  132. package/dist/types/routes/triggerables/TriggerablesRoute.d.ts +2 -0
  133. package/dist/types/routes/triggerables/action.d.ts +6 -0
  134. package/dist/types/routes/triggerables/api.d.ts +33 -0
  135. package/dist/types/routes/triggerables/index.d.ts +4 -0
  136. package/dist/types/routes/triggerables/loader.d.ts +3 -0
  137. package/dist/types/scheduled-tasks.d.ts +1 -0
  138. package/dist/types/table.d.ts +1 -0
  139. package/dist/types/triggerables.d.ts +1 -0
  140. package/dist/types/types/openapiTypes.d.ts +3321 -0
  141. package/package.json +12 -5
  142. package/dist/ArrowBack-Bifnzxvs.js +0 -6430
  143. package/dist/ArrowBack-Bifnzxvs.js.map +0 -1
  144. package/dist/BreadCrumbs-DMuPCevY.js +0 -19
  145. package/dist/BreadCrumbs-DMuPCevY.js.map +0 -1
  146. package/dist/BreadCrumbs.css +0 -1
  147. package/dist/EnumSelectFilter-BdGla5Yf.js +0 -36
  148. package/dist/EnumSelectFilter-BdGla5Yf.js.map +0 -1
  149. package/dist/ExpandMore-DUn2zrFA.js +0 -1644
  150. package/dist/ExpandMore-DUn2zrFA.js.map +0 -1
  151. package/dist/FilterLink-DIeFjfZX.js +0 -49
  152. package/dist/FilterLink-DIeFjfZX.js.map +0 -1
  153. package/dist/JwtTokensRoute-C74zNV7A.js +0 -2374
  154. package/dist/JwtTokensRoute-C74zNV7A.js.map +0 -1
  155. package/dist/ScheduledTasksRoute-BAetDHqN.js +0 -611
  156. package/dist/ScheduledTasksRoute-BAetDHqN.js.map +0 -1
  157. package/dist/SingleLogMessageRoute-Dl2NFfqG.js +0 -419
  158. package/dist/SingleLogMessageRoute-Dl2NFfqG.js.map +0 -1
  159. package/dist/SingleMessageRoute-fC94BR1C.js +0 -306
  160. package/dist/SingleMessageRoute-fC94BR1C.js.map +0 -1
  161. package/dist/Table-DWiRP1za.js +0 -120
  162. package/dist/Table-DWiRP1za.js.map +0 -1
  163. package/dist/TextFilter-BHWY2B7i.js +0 -67
  164. package/dist/TextFilter-BHWY2B7i.js.map +0 -1
  165. package/dist/TriggerablesRoute-DiEEX1cR.js +0 -3552
  166. package/dist/TriggerablesRoute-DiEEX1cR.js.map +0 -1
  167. package/dist/api-BD_4zyJw.js +0 -38
  168. package/dist/api-BD_4zyJw.js.map +0 -1
  169. package/dist/breadcrumbs/index.js.map +0 -1
  170. package/dist/configuration-values/index.js.map +0 -1
  171. package/dist/control-values/index.js.map +0 -1
  172. package/dist/createSvgIcon-dA_Vj2W0.js +0 -3914
  173. package/dist/createSvgIcon-dA_Vj2W0.js.map +0 -1
  174. package/dist/exhaustiveValues-Dx50G3yz.js +0 -5
  175. package/dist/exhaustiveValues-Dx50G3yz.js.map +0 -1
  176. package/dist/filter/index.js.map +0 -1
  177. package/dist/formData-BH8saYep.js +0 -65
  178. package/dist/formData-BH8saYep.js.map +0 -1
  179. package/dist/jsx-runtime-D858t2LC.js +0 -617
  180. package/dist/jsx-runtime-D858t2LC.js.map +0 -1
  181. package/dist/jwt-tokens/index.js.map +0 -1
  182. package/dist/loader-CrveWlGb.js +0 -375
  183. package/dist/loader-CrveWlGb.js.map +0 -1
  184. package/dist/loader-D-oC32OJ.js +0 -3612
  185. package/dist/loader-D-oC32OJ.js.map +0 -1
  186. package/dist/loader-rVy8Z9xH.js +0 -130
  187. package/dist/loader-rVy8Z9xH.js.map +0 -1
  188. package/dist/main/index.js.map +0 -1
  189. package/dist/message-log/index.js.map +0 -1
  190. package/dist/message-sending/index.js.map +0 -1
  191. package/dist/message-targets/index.js.map +0 -1
  192. package/dist/pagination-Dy4ansKN.js +0 -21
  193. package/dist/pagination-Dy4ansKN.js.map +0 -1
  194. package/dist/scheduled-tasks/index.js.map +0 -1
  195. package/dist/schemas-CBHIJ_eF.js +0 -3059
  196. package/dist/schemas-CBHIJ_eF.js.map +0 -1
  197. package/dist/table/index.js.map +0 -1
  198. package/dist/triggerables/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScheduledTasksRoute-BAetDHqN.js","sources":["../src/routes/scheduled-tasks/api.ts","../src/routes/scheduled-tasks/action.ts","../src/routes/scheduled-tasks/loader.ts","../src/routes/scheduled-tasks/parseScheduledTask.ts","../src/routes/scheduled-tasks/ScheduledTaskFormRoute.tsx","../src/routes/scheduled-tasks/ScheduledTasksRoute.tsx"],"sourcesContent":["import type { ApiClient } from \"../../client\";\nimport type { paths } from \"../../types/openapiTypes\";\n\n// TODO: NonNullable or not?\nexport type ScheduledTaskFilter = paths[\"/schedule\"][\"get\"][\"parameters\"][\"query\"];\nexport type ScheduledTask =\n paths[\"/schedule\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"];\ntype ScheduledTaskState =\n paths[\"/schedule/{id}/state/{state}\"][\"post\"][\"parameters\"][\"path\"][\"state\"];\n\nexport const fetchScheduledTasks = async (query: ScheduledTaskFilter, client: ApiClient) => {\n const result = await client.GET(\"/schedule\", {\n params: {\n query,\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch scheduled tasks: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const fetchScheduledTaskById = async (id: number, client: ApiClient) => {\n const result = await client.GET(\"/schedule/{id}\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to fetch scheduled task: ${result.response.status}`);\n }\n\n return result.data;\n};\n\nexport const saveScheduledTask = async (task: ScheduledTask, client: ApiClient) => {\n const result = await client.POST(\"/schedule\", {\n body: task,\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to save scheduled task: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const deleteScheduledTask = async (id: number, client: ApiClient) => {\n const result = await client.POST(\"/schedule/{id}/delete\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to delete scheduled task: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const runScheduledTask = async (id: number, client: ApiClient) => {\n const result = await client.POST(\"/schedule/{id}/run\", {\n params: {\n path: { id },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to trigger scheduled task: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n\nexport const updateScheduledTaskState = async (\n id: number,\n state: ScheduledTaskState,\n client: ApiClient,\n) => {\n if (!state) {\n throw new Error(\"State is required to update scheduled task state\");\n }\n const result = await client.POST(\"/schedule/{id}/state/{state}\", {\n params: {\n path: { id, state },\n },\n });\n\n if (\"error\" in result) {\n throw new Error(`Failed to update scheduled task state: ${result.response.status}`);\n }\n\n return result.response.status;\n};\n","import { redirect, type ActionFunctionArgs } from \"react-router\";\nimport type { paths } from \"../../types/openapiTypes\";\nimport type { ScheduledTask } from \"./api\";\nimport {\n deleteScheduledTask,\n runScheduledTask,\n saveScheduledTask,\n updateScheduledTaskState,\n} from \"./api\";\nimport type { ApiClient } from \"../../client\";\n\ntype FormActionType = \"save\" | \"delete\";\n\ninterface FormActionPayload {\n type: FormActionType;\n task?: ScheduledTask;\n id?: number;\n}\n\nexport type ScheduledTaskFormActionResult = {\n status: number;\n message: string;\n};\n\nexport const getScheduledTaskFormAction =\n (client: ApiClient) =>\n async ({ request }: ActionFunctionArgs): Promise<ScheduledTaskFormActionResult> => {\n try {\n const payload: FormActionPayload = await request.json();\n\n switch (payload.type) {\n case \"save\": {\n if (!payload.task) {\n return { status: 400, message: \"Task data is required\" };\n }\n\n const status = await saveScheduledTask(payload.task, client);\n\n if (status === 204) {\n const isNew = payload.task.id === undefined || payload.task.id === 0;\n if (isNew) {\n throw redirect(\"/scheduled-tasks\");\n }\n\n return {\n status: 204,\n message: \"Task updated\",\n };\n }\n\n return { status, message: \"Failed to save task\" };\n }\n\n case \"delete\": {\n if (!payload.id) {\n return { status: 400, message: \"Task ID is required\" };\n }\n\n const status = await deleteScheduledTask(payload.id, client);\n\n if (status === 204) {\n throw redirect(\"/scheduled-tasks\");\n }\n\n if (status === 404) {\n return { status: 404, message: \"Task not found\" };\n }\n\n return { status, message: \"Failed to delete task\" };\n }\n\n default:\n return { status: 400, message: \"Invalid action type\" };\n }\n } catch (error) {\n if (error instanceof Response && error.status >= 300 && error.status < 400) {\n throw error;\n }\n\n console.error(error);\n return {\n status: 500,\n message: \"Failed to process request\",\n };\n }\n };\n\nexport type ScheduledTaskFormAction = ReturnType<typeof getScheduledTaskFormAction>;\n\ntype ListActionType = \"trigger\" | \"updateState\";\n\nexport interface ListActionPayload {\n type: ListActionType;\n id?: number;\n state?: NonNullable<\n NonNullable<paths[\"/schedule/{id}/state/{state}\"][\"post\"]>[\"parameters\"]\n >[\"path\"][\"state\"];\n}\n\nexport const getScheduledTasksAction =\n (client: ApiClient) =>\n async ({ request }: ActionFunctionArgs): Promise<{ status: number; message: string }> => {\n try {\n const payload: ListActionPayload = await request.json();\n\n switch (payload.type) {\n case \"trigger\": {\n if (!payload.id) {\n return { status: 400, message: \"Task ID is required\" };\n }\n\n const status = await runScheduledTask(payload.id, client);\n\n if (status === 200 || status === 204) {\n return { status, message: \"Task triggered\" };\n }\n\n return { status, message: \"Failed to trigger task\" };\n }\n\n case \"updateState\": {\n if (!payload.id || !payload.state) {\n return {\n status: 400,\n message: \"Task ID and state are required\",\n };\n }\n\n const status = await updateScheduledTaskState(payload.id, payload.state, client);\n\n if (status === 200 || status === 204) {\n return { status, message: \"Task state updated\" };\n }\n\n return {\n status,\n message: \"Failed to update task state\",\n };\n }\n\n default:\n return { status: 400, message: \"Invalid action type\" };\n }\n } catch (error) {\n console.error(error);\n return {\n status: 500,\n message: \"Failed to process request\",\n };\n }\n };\n\nexport type ScheduledTasksAction = ReturnType<typeof getScheduledTasksAction>\n","import type { LoaderFunctionArgs } from \"react-router\";\nimport type { ScheduledTask } from \"./api\";\nimport { fetchScheduledTaskById, fetchScheduledTasks } from \"./api\";\nimport type { ApiClient } from \"../../client\";\nimport type { components } from \"../../types/openapiTypes\";\nimport { getPagingValuesFromSearchParams } from \"../../common/pagination\";\nimport { fetchTriggerables } from \"../triggerables/api\";\n\nconst getInitialScheduledTask = (): ScheduledTask => ({\n name: \"\",\n state: \"WAITING\",\n cronExpression: \"\",\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone || \"UTC\",\n triggerable: \"\",\n priority: 0,\n timeoutMs: 0,\n missPolicy: \"SKIP_ALL\",\n args: {},\n});\n\nexport type ScheduledTaskFormLoaderData = {\n task: ScheduledTask;\n triggerables: Record<string, components[\"schemas\"][\"ArgObject\"][]>;\n};\n\nexport const getSingleTaskLoader =\n (client: ApiClient) =>\n async ({ params }: LoaderFunctionArgs): Promise<ScheduledTaskFormLoaderData> => {\n const id = params.id;\n const triggerableData = await fetchTriggerables(client);\n\n if (id === \"new\") {\n const newTask = getInitialScheduledTask();\n return {\n task: newTask,\n triggerables: triggerableData,\n };\n }\n\n if ((!id && id !== \"0\") || Number.isNaN(parseInt(id, 10))) {\n throw new Response(\"\", {\n status: 404,\n statusText: \"Not found\",\n });\n }\n\n const taskId = parseInt(id, 10);\n const task = await fetchScheduledTaskById(taskId, client);\n\n return {\n task,\n triggerables: triggerableData,\n };\n };\n\nexport type SingleScheduledTaskLoader = ReturnType<typeof getSingleTaskLoader>;\n\nexport const getScheduledTasksLoader =\n (client: ApiClient) =>\n async ({ request }: LoaderFunctionArgs) => {\n try {\n const requestUrl = new URL(request.url);\n const filter = getPagingValuesFromSearchParams(requestUrl.searchParams);\n\n const scheduledTaskResponse = await fetchScheduledTasks(filter, client);\n\n return scheduledTaskResponse;\n } catch (error) {\n console.error(error);\n throw new Error(\"Failed to fetch scheduled tasks\");\n }\n };\n\nexport type ScheduledTasksLoader = ReturnType<typeof getScheduledTasksLoader>;\n","import cronstrue from \"cronstrue\";\nimport { z } from \"zod\";\nimport { exhaustiveStringValues } from \"../../common/exhaustiveValues\";\nimport type { ScheduledTask } from \"./api\";\n\nexport type ScheduledTaskFormErrors = Partial<Record<keyof ScheduledTask | \"args\", string>>;\nexport type ScheduledTaskState = NonNullable<ScheduledTask[\"state\"]>;\nexport type ScheduledTaskMissPolicy = ScheduledTask[\"missPolicy\"];\ntype ScheduledTaskFormErrorKey = Extract<keyof ScheduledTask, string> | \"args\";\n\nexport const scheduledTaskStates = exhaustiveStringValues<ScheduledTaskState>()([\n \"WAITING\",\n \"RUNNING\",\n \"PAUSED\",\n]);\n\nexport const missPolicies = exhaustiveStringValues<ScheduledTaskMissPolicy>()([\n \"SKIP_ALL\",\n \"RUN_ONCE\",\n \"RUN_ALL\",\n]);\n\nexport const isScheduledTaskState = (value: string): value is ScheduledTaskState =>\n scheduledTaskStates.some((state) => state === value);\n\nexport const isMissPolicy = (value: string): value is ScheduledTaskMissPolicy =>\n missPolicies.some((missPolicy) => missPolicy === value);\n\nconst isCronExpression = (value: string): boolean => {\n const normalized = value.trim();\n\n try {\n cronstrue.toString(normalized, {\n use24HourTimeFormat: true,\n });\n return true;\n } catch {\n return false;\n }\n};\n\nconst isValidTimeZone = (value: string): boolean => {\n try {\n Intl.DateTimeFormat(undefined, { timeZone: value });\n return true;\n } catch {\n return false;\n }\n};\n\nconst argsSchema = z.string().transform((value, context): ScheduledTask[\"args\"] => {\n try {\n const parsed: unknown = JSON.parse(value || \"{}\");\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n context.addIssue({\n code: \"custom\",\n message: \"Args must be a JSON object\",\n });\n return z.NEVER;\n }\n\n return Object.fromEntries(\n Object.entries(parsed).map(([key, argValue]) => [key, String(argValue)]),\n );\n } catch {\n context.addIssue({\n code: \"custom\",\n message: \"Args must be valid JSON\",\n });\n return z.NEVER;\n }\n});\n\nconst scheduledTaskSchema = z\n .object({\n task: z.object({\n id: z.number().optional(),\n name: z.string().trim().min(1, { message: \"Name is required\" }),\n state: z.enum(scheduledTaskStates).optional(),\n cronExpression: z\n .string()\n .trim()\n .min(1, { message: \"Cron expression is required\" })\n .refine(isCronExpression, {\n message: \"Cron expression must be a valid Spring cron expression\",\n }),\n timeZone: z\n .string()\n .trim()\n .min(1, { message: \"Time zone is required\" })\n .refine(isValidTimeZone, { message: \"Invalid IANA time zone\" }),\n lastFiredTime: z.number().optional(),\n lastFinishedTime: z.number().optional(),\n nextFireTime: z.number().optional(),\n triggerable: z.string().trim().min(1, { message: \"Triggerable is required\" }),\n priority: z\n .number()\n .refine(Number.isFinite, { message: \"Priority is required\" })\n .refine(Number.isInteger, { message: \"Priority must be an integer\" }),\n timeoutMs: z\n .number()\n .refine(Number.isFinite, { message: \"Timeout is required\" })\n .refine(Number.isInteger, { message: \"Timeout must be an integer\" })\n .refine((value) => value >= 0, { message: \"Timeout must be zero or greater\" }),\n missPolicy: z.enum(missPolicies),\n lastInitiator: z.string().optional(),\n running: z.string().optional(),\n }),\n argsText: argsSchema,\n })\n .transform(\n ({ task, argsText }): ScheduledTask => ({\n ...task,\n args: argsText,\n }),\n );\n\nconst scheduledTaskFormErrorKeys = exhaustiveStringValues<ScheduledTaskFormErrorKey>()([\n \"id\",\n \"name\",\n \"state\",\n \"cronExpression\",\n \"timeZone\",\n \"lastFiredTime\",\n \"lastFinishedTime\",\n \"nextFireTime\",\n \"triggerable\",\n \"priority\",\n \"timeoutMs\",\n \"missPolicy\",\n \"lastInitiator\",\n \"running\",\n \"args\",\n]);\n\nconst isScheduledTaskFormErrorKey = (value: unknown): value is ScheduledTaskFormErrorKey =>\n typeof value === \"string\" && scheduledTaskFormErrorKeys.some((key) => key === value);\n\nconst getFormErrorKey = (path: Array<PropertyKey>): ScheduledTaskFormErrorKey | undefined => {\n const [scope, field] = path;\n\n if (scope === \"argsText\") {\n return \"args\";\n }\n\n if (scope === \"task\" && isScheduledTaskFormErrorKey(field)) {\n return field;\n }\n\n return undefined;\n};\n\nexport const parseScheduledTask = (\n task: ScheduledTask,\n argsText: string,\n): { ok: true; value: ScheduledTask } | { ok: false; errors: ScheduledTaskFormErrors } => {\n const result = scheduledTaskSchema.safeParse({ task, argsText });\n\n if (result.success) {\n return { ok: true, value: result.data };\n }\n\n const errors: ScheduledTaskFormErrors = {};\n\n result.error.issues.forEach((issue) => {\n const errorKey = getFormErrorKey(issue.path);\n\n if (errorKey !== undefined && !(errorKey in errors)) {\n errors[errorKey] = issue.message;\n }\n });\n\n return { ok: false, errors };\n};\n","import cronstrue from \"cronstrue\";\nimport { useState } from \"react\";\nimport { useActionData, useLoaderData, useNavigate, useParams, useSubmit } from \"react-router\";\n\nimport {\n Alert,\n Box,\n Button,\n Collapse,\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Stack,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport type { ScheduledTaskFormAction } from \"./action\";\nimport type { ScheduledTask } from \"./api\";\nimport type { ScheduledTaskFormLoaderData, SingleScheduledTaskLoader } from \"./loader\";\nimport {\n isMissPolicy,\n isScheduledTaskState,\n missPolicies,\n parseScheduledTask,\n scheduledTaskStates,\n type ScheduledTaskFormErrors,\n} from \"./parseScheduledTask\";\n\n// TODO: the component library needs a reusable toast component\ntype ToastProps = {\n severity: \"success\" | \"error\";\n message: string;\n};\n\nconst formatEpochMillis = (value?: number): string => {\n if (value === undefined) {\n return \"-\";\n }\n\n return new Date(value).toISOString();\n};\n\nconst formatArgs = (args?: ScheduledTask[\"args\"]): string => JSON.stringify(args ?? {}, null, 2);\n\nconst formatTriggerableArg = (\n arg: ScheduledTaskFormLoaderData[\"triggerables\"][string][number],\n): string => {\n const name = arg.name ?? \"(unnamed)\";\n const type = arg.type ? `: ${arg.type}` : \"\";\n const required = arg.required ? \"required\" : \"optional\";\n return `${name}${type} (${required})`;\n};\n\nconst describeCronExpression = (cronExpression: string): string | undefined => {\n if (!cronExpression.trim()) {\n return undefined;\n }\n\n try {\n return cronstrue.toString(cronExpression, {\n use24HourTimeFormat: true,\n });\n } catch {\n return undefined;\n }\n};\n\nconst ScheduledTaskFormRoute = () => {\n const data = useLoaderData<SingleScheduledTaskLoader>();\n const [task, setTask] = useState<ScheduledTask>(data.task);\n const [argsText, setArgsText] = useState(formatArgs(data.task.args));\n const [formErrors, setFormErrors] = useState<ScheduledTaskFormErrors>({});\n const triggerableNames = Object.keys(data.triggerables).sort((a, b) => a.localeCompare(b));\n const triggerableOptions =\n task.triggerable && !triggerableNames.includes(task.triggerable)\n ? [task.triggerable, ...triggerableNames]\n : triggerableNames;\n const selectedTriggerableArgs = data.triggerables[task.triggerable] ?? [];\n const triggerableArgsText = selectedTriggerableArgs.length\n ? selectedTriggerableArgs.map(formatTriggerableArg).join(\", \")\n : \"Selected triggerable does not declare args.\";\n const cronDescription = describeCronExpression(task.cronExpression);\n const params = useParams();\n const { id } = params;\n const navigate = useNavigate();\n const submit = useSubmit();\n\n const actionData = useActionData<ScheduledTaskFormAction>();\n\n const handleDelete = () => {\n if (id === \"new\" || task.id === undefined) return;\n\n const confirmed = window.confirm(`Delete scheduled task \"${task.name || task.id}\"?`);\n\n if (!confirmed) {\n return;\n }\n\n submit(\n { type: \"delete\", id: task.id },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n const handleSave = () => {\n const taskResult = parseScheduledTask(task, argsText);\n\n if (!taskResult.ok) {\n setFormErrors(taskResult.errors);\n return;\n }\n\n setFormErrors({});\n\n let taskToSave: ScheduledTask | Omit<ScheduledTask, \"id\">;\n\n if (id !== \"new\" && taskResult.value.id !== 0) {\n taskToSave = taskResult.value;\n } else {\n const { id: _id, ...newTaskWithoutId } = taskResult.value;\n taskToSave = newTaskWithoutId;\n }\n\n submit(\n { type: \"save\", task: taskToSave },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n const actionToastProps: ToastProps | null = actionData\n ? {\n severity: actionData.status < 300 ? \"success\" : \"error\",\n message: actionData.message,\n }\n : null;\n return (\n <Box component=\"section\" sx={{ p: 2, maxWidth: 1000 }}>\n <Collapse in={actionToastProps !== null} unmountOnExit>\n <Alert severity={actionToastProps?.severity}>{actionToastProps?.message}</Alert>\n </Collapse>\n <Paper sx={{ p: 2, mt: 2 }}>\n <Typography variant=\"h4\" component=\"h1\" sx={{ mb: 2 }}>\n {id === \"new\" ? \"New scheduled task\" : \"Edit scheduled task\"}\n </Typography>\n <Stack gap={2}>\n <TextField\n label=\"Name\"\n required\n value={task.name}\n error={!!formErrors.name}\n helperText={formErrors.name}\n onChange={(event) => setTask({ ...task, name: event.target.value })}\n />\n <FormControl>\n <InputLabel id=\"scheduled-task-state-label\">State</InputLabel>\n <Select\n labelId=\"scheduled-task-state-label\"\n label=\"State\"\n value={task.state ?? \"WAITING\"}\n onChange={(event) => {\n const state = event.target.value;\n\n if (isScheduledTaskState(state)) {\n setTask({\n ...task,\n state,\n });\n }\n }}\n >\n {scheduledTaskStates.map((state) => (\n <MenuItem key={state} value={state}>\n {state}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <TextField\n label=\"Cron expression\"\n required\n value={task.cronExpression}\n error={!!formErrors.cronExpression}\n helperText={\n formErrors.cronExpression ??\n cronDescription ??\n \"Cron preview unavailable. The value will still be submitted to the backend.\"\n }\n onChange={(event) => setTask({ ...task, cronExpression: event.target.value })}\n />\n <TextField\n label=\"Time zone\"\n required\n value={task.timeZone}\n error={!!formErrors.timeZone}\n helperText={\n formErrors.timeZone ?? \"IANA time zone, for example Europe/Helsinki or UTC.\"\n }\n onChange={(event) => setTask({ ...task, timeZone: event.target.value })}\n />\n <FormControl required error={!!formErrors.triggerable}>\n <InputLabel id=\"scheduled-task-triggerable-label\">Triggerable</InputLabel>\n <Select\n labelId=\"scheduled-task-triggerable-label\"\n label=\"Triggerable\"\n value={task.triggerable}\n onChange={(event) => setTask({ ...task, triggerable: event.target.value })}\n >\n <MenuItem value=\"\">\n <em>Select triggerable</em>\n </MenuItem>\n {triggerableOptions.map((triggerable) => (\n <MenuItem key={triggerable} value={triggerable}>\n {triggerable}\n </MenuItem>\n ))}\n </Select>\n <FormHelperText>\n {formErrors.triggerable ?? \"Fetched from the triggerables endpoint.\"}\n </FormHelperText>\n </FormControl>\n <TextField\n type=\"number\"\n label=\"Priority\"\n value={task.priority}\n error={!!formErrors.priority}\n helperText={formErrors.priority}\n onChange={(event) =>\n setTask({\n ...task,\n priority: Number.parseInt(event.target.value, 10),\n })\n }\n />\n <TextField\n type=\"number\"\n label=\"Timeout, ms\"\n value={task.timeoutMs}\n error={!!formErrors.timeoutMs}\n helperText={formErrors.timeoutMs}\n onChange={(event) =>\n setTask({\n ...task,\n timeoutMs: Number.parseInt(event.target.value, 10),\n })\n }\n />\n <FormControl>\n <InputLabel id=\"scheduled-task-miss-policy-label\">Miss policy</InputLabel>\n <Select\n labelId=\"scheduled-task-miss-policy-label\"\n label=\"Miss policy\"\n value={task.missPolicy}\n onChange={(event) => {\n const missPolicy = event.target.value;\n\n if (isMissPolicy(missPolicy)) {\n setTask({\n ...task,\n missPolicy,\n });\n }\n }}\n >\n {missPolicies.map((missPolicy) => (\n <MenuItem key={missPolicy} value={missPolicy}>\n {missPolicy}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <TextField\n label=\"Args\"\n multiline\n minRows={4}\n value={argsText}\n error={!!formErrors.args}\n helperText={formErrors.args ?? \"JSON object. Values are saved as strings.\"}\n onChange={(event) => setArgsText(event.target.value)}\n />\n {task.triggerable && (\n <Box\n sx={{\n mt: -1,\n px: 1.75,\n py: 1,\n bgcolor: \"grey.100\",\n borderRadius: 1,\n }}\n >\n <Typography variant=\"caption\" color=\"text.secondary\" component=\"div\">\n Declared args for {task.triggerable}\n </Typography>\n <Typography variant=\"body2\">{triggerableArgsText}</Typography>\n </Box>\n )}\n {id !== \"new\" && (\n <Box component=\"dl\" sx={{ display: \"grid\", gridTemplateColumns: \"160px 1fr\", gap: 1 }}>\n <Typography component=\"dt\">Last fired</Typography>\n <Typography component=\"dd\" sx={{ m: 0 }}>\n {formatEpochMillis(task.lastFiredTime)}\n </Typography>\n <Typography component=\"dt\">Last finished</Typography>\n <Typography component=\"dd\" sx={{ m: 0 }}>\n {formatEpochMillis(task.lastFinishedTime)}\n </Typography>\n <Typography component=\"dt\">Next fire</Typography>\n <Typography component=\"dd\" sx={{ m: 0 }}>\n {formatEpochMillis(task.nextFireTime)}\n </Typography>\n </Box>\n )}\n <Stack direction=\"row\" gap={1}>\n <Button variant=\"contained\" onClick={handleSave}>\n Save\n </Button>\n {id !== \"new\" && (\n <Button color=\"error\" variant=\"outlined\" onClick={handleDelete}>\n Delete\n </Button>\n )}\n <Button variant=\"outlined\" onClick={() => navigate(\"/scheduled-tasks\")}>\n Cancel\n </Button>\n </Stack>\n </Stack>\n </Paper>\n </Box>\n );\n};\n\nexport default ScheduledTaskFormRoute;\n","import {\n Box,\n Button,\n CircularProgress,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TablePagination,\n TableRow,\n} from \"@mui/material\";\nimport { useLoaderData, useNavigate, useNavigation, useSearchParams, useSubmit } from \"react-router\";\nimport { getPagingValuesFromSearchParams, getSearchParamsWithPage } from \"../../common/pagination\";\nimport type { ScheduledTasksLoader } from \"./loader\";\n\n\nconst formatEpochMillis = (value?: number): string => {\n if (value === undefined) {\n return \"-\";\n }\n\n return new Date(value).toISOString();\n};\n\nconst ScheduledTasksRoute = () => {\n const navigate = useNavigate();\n const navigation = useNavigation();\n const submit = useSubmit();\n const [searchParams, setSearchParams] = useSearchParams();\n const taskFilter = getPagingValuesFromSearchParams(searchParams);\n\n const navigationState = navigation.state;\n\n const scheduledTasksResponse = useLoaderData<ScheduledTasksLoader>();\n const { content: scheduledTasksList, totalElements } = scheduledTasksResponse;\n\n const handlePageChange = (newPage: number) => {\n setSearchParams(getSearchParamsWithPage(searchParams, newPage));\n };\n\n const handleTriggerTask = (id: number) => {\n submit(\n { type: \"trigger\", id },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n const handleUpdateTaskState = (id: number, state: string) => {\n submit(\n { type: \"updateState\", id, state },\n {\n method: \"POST\",\n encType: \"application/json\",\n },\n );\n };\n\n if (navigationState === \"loading\") {\n return <CircularProgress />;\n }\n\n return (\n <>\n <Box sx={{ p: 1 }}>\n <Button variant=\"contained\" onClick={() => navigate(\"./new\", { relative: \"path\" })}>\n New scheduled task\n </Button>\n </Box>\n <TableContainer sx={{ height: \"calc(100vh - 180px)\" }}>\n <Table size=\"small\" stickyHeader>\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>State</TableCell>\n <TableCell>Cron expression</TableCell>\n <TableCell>Time zone</TableCell>\n <TableCell>Last fired</TableCell>\n <TableCell>Last finished</TableCell>\n <TableCell>Next fire</TableCell>\n <TableCell>Triggerable</TableCell>\n <TableCell>Priority</TableCell>\n <TableCell>Timeout, ms</TableCell>\n <TableCell>Miss policy</TableCell>\n <TableCell>Trigger</TableCell>\n <TableCell>State action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {(scheduledTasksList ?? []).map((task) => {\n const taskId = task.id;\n\n return (\n <TableRow\n key={taskId ?? task.name}\n hover\n sx={{ cursor: taskId !== undefined ? \"pointer\" : \"default\" }}\n onClick={() => {\n if (taskId !== undefined) {\n navigate(`/scheduled-tasks/${taskId}`);\n }\n }}\n >\n <TableCell>{task.name}</TableCell>\n <TableCell>{task.state}</TableCell>\n <TableCell>{task.cronExpression}</TableCell>\n <TableCell>{task.timeZone}</TableCell>\n <TableCell>{formatEpochMillis(task.lastFiredTime)}</TableCell>\n <TableCell>{formatEpochMillis(task.lastFinishedTime)}</TableCell>\n <TableCell>{formatEpochMillis(task.nextFireTime)}</TableCell>\n <TableCell>{task.triggerable}</TableCell>\n <TableCell>{task.priority}</TableCell>\n <TableCell>{task.timeoutMs}</TableCell>\n <TableCell>{task.missPolicy}</TableCell>\n <TableCell>\n {taskId !== undefined && task.state !== \"RUNNING\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleTriggerTask(taskId);\n }}\n >\n Trigger\n </Button>\n )}\n </TableCell>\n <TableCell>\n {taskId !== undefined && task.state === \"PAUSED\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleUpdateTaskState(taskId, \"WAITING\");\n }}\n >\n Activate\n </Button>\n )}\n {taskId !== undefined && task.state === \"WAITING\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleUpdateTaskState(taskId, \"PAUSED\");\n }}\n >\n Pause\n </Button>\n )}\n {taskId !== undefined && task.state === \"RUNNING\" && (\n <Button\n size=\"small\"\n onClick={(event) => {\n event.stopPropagation();\n handleUpdateTaskState(taskId, \"WAITING\");\n }}\n >\n Stop\n </Button>\n )}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n component=\"div\"\n count={totalElements ?? 0}\n rowsPerPage={taskFilter.size ?? 100}\n page={taskFilter.page}\n onPageChange={(_, newPage) => handlePageChange(newPage)}\n rowsPerPageOptions={[]}\n showFirstButton\n showLastButton\n />\n </>\n );\n};\n\nexport default ScheduledTasksRoute;\n"],"names":["fetchScheduledTasks","query","client","result","fetchScheduledTaskById","id","saveScheduledTask","task","deleteScheduledTask","runScheduledTask","updateScheduledTaskState","state","getScheduledTaskFormAction","request","payload","status","redirect","error","getScheduledTasksAction","getInitialScheduledTask","getSingleTaskLoader","params","triggerableData","fetchTriggerables","taskId","getScheduledTasksLoader","requestUrl","filter","getPagingValuesFromSearchParams","scheduledTaskStates","exhaustiveStringValues","missPolicies","isScheduledTaskState","value","isMissPolicy","missPolicy","isCronExpression","normalized","cronstrue","isValidTimeZone","argsSchema","z.string","context","parsed","z.NEVER","key","argValue","scheduledTaskSchema","z.object","z.number","z.enum","argsText","scheduledTaskFormErrorKeys","isScheduledTaskFormErrorKey","getFormErrorKey","path","scope","field","parseScheduledTask","errors","issue","errorKey","formatEpochMillis","formatArgs","args","formatTriggerableArg","arg","name","type","required","describeCronExpression","cronExpression","ScheduledTaskFormRoute","data","useLoaderData","setTask","useState","setArgsText","formErrors","setFormErrors","triggerableNames","a","b","triggerableOptions","selectedTriggerableArgs","triggerableArgsText","cronDescription","useParams","navigate","useNavigate","submit","useSubmit","actionData","useActionData","handleDelete","handleSave","taskResult","taskToSave","_id","newTaskWithoutId","actionToastProps","jsxs","Box","jsx","Collapse","Alert","Paper","Typography","Stack","TextField","event","FormControl","InputLabel","Select","MenuItem","triggerable","FormHelperText","Button","ScheduledTasksRoute","navigation","useNavigation","searchParams","setSearchParams","useSearchParams","taskFilter","navigationState","scheduledTasksResponse","scheduledTasksList","totalElements","handlePageChange","newPage","getSearchParamsWithPage","handleTriggerTask","handleUpdateTaskState","CircularProgress","Fragment","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","TablePagination","_"],"mappings":"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"}
@@ -1,419 +0,0 @@
1
- import { m as I, d as B, n as j, a as W, T as $, f as H, c as D, b as w, e as A, A as K, g as U } from "./ArrowBack-Bifnzxvs.js";
2
- import { a as G, g as O } from "./pagination-Dy4ansKN.js";
3
- import { j as n } from "./jsx-runtime-D858t2LC.js";
4
- import { useNavigate as N, useSearchParams as Q, useLoaderData as z, Form as J } from "react-router";
5
- import { TableContainer as X, Button as C, Grid as f, TextField as Y } from "@mui/material";
6
- import { T as Z, P as _ } from "./Table-DWiRP1za.js";
7
- import { F as ee } from "./FilterLink-DIeFjfZX.js";
8
- import { T as m } from "./TextFilter-BHWY2B7i.js";
9
- import { g as te, c as se, a as re } from "./ExpandMore-DUn2zrFA.js";
10
- import "react";
11
- import "axios";
12
- const ne = ({
13
- value: e,
14
- null: t,
15
- inverted: s
16
- }) => `${s ? "!" : ""}${t ? "null" : e}`, h = (e, t, s) => {
17
- s?.forEach((r) => {
18
- e.append(t, ne(r));
19
- });
20
- }, u = (e, t, s) => {
21
- s !== void 0 && e.set(t, String(s));
22
- }, oe = (e) => {
23
- const t = new URLSearchParams();
24
- return h(t, "v", e.v), h(t, "srv", e.srv), h(t, "m", e.m), h(t, "p", e.p), h(t, "c", e.c), h(t, "mci", e.mci), h(t, "rqsn", e.rqsn), h(t, "rpsn", e.rpsn), u(t, "s.min", e["s.min"]), u(t, "s.max", e["s.max"]), u(t, "d.min", e["d.min"]), u(t, "d.max", e["d.max"]), u(t, "rqs.min", e["rqs.min"]), u(t, "rqs.max", e["rqs.max"]), u(t, "rps.min", e["rps.min"]), u(t, "rps.max", e["rps.max"]), u(t, "md", e.md), u(t, "page", e.page), u(t, "size", e.size), e.sort?.forEach((s) => {
25
- t.append("sort", s);
26
- }), t.toString();
27
- }, ie = async (e, t) => {
28
- const s = await t.GET("/log", {
29
- params: {
30
- query: e
31
- },
32
- querySerializer: oe
33
- });
34
- if ("error" in s)
35
- throw new Error(`Failed to fetch logs: ${s.response.status}`);
36
- return s.data;
37
- }, ae = async (e, t) => {
38
- const s = await t.GET("/log/{id}", {
39
- params: {
40
- path: { id: e }
41
- }
42
- });
43
- if ("error" in s)
44
- throw new Error(`Failed to fetch log message: ${s.response.status}`);
45
- return s.data;
46
- }, le = (e, t) => `/log/${e}/${t}?pretty=true`, ce = async (e, t, s) => {
47
- if (t === "request") {
48
- const o = await s.GET("/log/{id}/request", {
49
- params: {
50
- path: { id: e },
51
- query: { pretty: !0 }
52
- },
53
- parseAs: "blob"
54
- });
55
- if ("error" in o)
56
- throw new Error(`Failed to download log request: ${o.response.status}`);
57
- return {
58
- blob: o.data,
59
- contentType: o.response.headers.get("content-type") ?? "application/octet-stream"
60
- };
61
- }
62
- const r = await s.GET("/log/{id}/response", {
63
- params: {
64
- path: { id: e },
65
- query: { pretty: !0 }
66
- },
67
- parseAs: "blob"
68
- });
69
- if ("error" in r)
70
- throw new Error(`Failed to download log response: ${r.response.status}`);
71
- return {
72
- blob: r.data,
73
- contentType: r.response.headers.get("content-type") ?? "application/octet-stream"
74
- };
75
- }, l = (e, t) => {
76
- const s = e.get(t)?.trim();
77
- return s || void 0;
78
- }, S = (e) => {
79
- const t = e.replace(/\s+/g, "");
80
- if (!t.includes("-")) {
81
- const p = Number(t);
82
- return Number.isNaN(p) ? {} : { min: p, max: p };
83
- }
84
- const [s, r] = t.split("-", 2), o = s ? Number(s) : void 0, a = r ? Number(r) : void 0;
85
- return {
86
- min: o !== void 0 && !Number.isNaN(o) ? o : void 0,
87
- max: a !== void 0 && !Number.isNaN(a) ? a : void 0
88
- };
89
- }, de = (e) => {
90
- const t = e.split(/\s-\s/, 2);
91
- if (t.length === 2) {
92
- const r = t[0]?.trim(), o = t[1]?.trim();
93
- return {
94
- min: r || void 0,
95
- max: o || void 0
96
- };
97
- }
98
- const s = e.trim();
99
- return s ? { min: s, max: s } : {};
100
- }, P = (e) => {
101
- const t = e.trim(), s = t.length > 1 && t.startsWith("!"), r = s ? t.slice(1) : t;
102
- return {
103
- isInverted: s,
104
- isNull: r.toLowerCase() === "null",
105
- value: r
106
- };
107
- }, me = (e) => {
108
- const { isInverted: t, isNull: s, value: r } = P(e);
109
- return {
110
- ...s ? { null: !0 } : { value: r },
111
- ...t ? { inverted: !0 } : {}
112
- };
113
- }, ue = (e) => {
114
- const { isInverted: t, isNull: s, value: r } = P(e), o = Number(r);
115
- if (!(!s && Number.isNaN(o)))
116
- return {
117
- ...s ? { null: !0 } : { value: o },
118
- ...t ? { inverted: !0 } : {}
119
- };
120
- }, q = (e) => e.split(",").map((t) => t.trim()).filter(Boolean), x = (e) => {
121
- const t = q(e).map(me);
122
- return t.length > 0 ? t : void 0;
123
- }, pe = (e) => {
124
- const t = q(e).flatMap((s) => {
125
- const r = ue(s);
126
- return r ? [r] : [];
127
- });
128
- return t.length > 0 ? t : void 0;
129
- }, ge = (e) => {
130
- const t = {}, s = l(e, "v");
131
- s && (t.v = x(s));
132
- const r = l(e, "srv");
133
- r && (t.srv = x(r));
134
- const o = l(e, "m");
135
- o && (t.m = x(o));
136
- const a = l(e, "p");
137
- a && (t.p = x(a));
138
- const p = l(e, "c");
139
- p && (t.c = x(p));
140
- const y = l(e, "rqsn");
141
- y && (t.rqsn = x(y));
142
- const b = l(e, "rpsn");
143
- b && (t.rpsn = x(b));
144
- const v = l(e, "md");
145
- v && (t.md = v);
146
- const g = l(e, "mci");
147
- g && (t.mci = pe(g));
148
- const T = l(e, "s");
149
- if (T) {
150
- const { min: c, max: d } = de(T);
151
- c && (t["s.min"] = c), d && (t["s.max"] = d);
152
- }
153
- const M = l(e, "d");
154
- if (M) {
155
- const { min: c, max: d } = S(M);
156
- c !== void 0 && (t["d.min"] = c), d !== void 0 && (t["d.max"] = d);
157
- }
158
- const L = l(e, "rqs");
159
- if (L) {
160
- const { min: c, max: d } = S(L);
161
- c !== void 0 && (t["rqs.min"] = c), d !== void 0 && (t["rqs.max"] = d);
162
- }
163
- const R = l(e, "rps");
164
- if (R) {
165
- const { min: c, max: d } = S(R);
166
- c !== void 0 && (t["rps.min"] = c), d !== void 0 && (t["rps.max"] = d);
167
- }
168
- const { page: V, size: E } = G(e);
169
- return t.page = V, t.size = E, t;
170
- }, qe = (e) => async ({ request: t }) => {
171
- try {
172
- const s = new URL(t.url), r = ge(s.searchParams);
173
- return await ie(r, e);
174
- } catch (s) {
175
- throw console.error(s), s;
176
- }
177
- }, Ve = (e) => async ({ params: t }) => {
178
- if (!t.id)
179
- throw new Error("No message id provided");
180
- try {
181
- const s = Number.parseInt(t.id, 10);
182
- if (Number.isNaN(s))
183
- throw new Error("Invalid message id provided");
184
- const r = await ae(s, e);
185
- return I(r);
186
- } catch (s) {
187
- throw console.error(s), s;
188
- }
189
- }, k = ({
190
- size: e,
191
- id: t,
192
- type: s
193
- }) => e && /* @__PURE__ */ n.jsx("a", { href: le(t, s), onClick: (r) => r.stopPropagation(), children: e }), he = [
194
- {
195
- key: "startTime",
196
- title: "Start time",
197
- CellComponent: ({ value: e }) => H(e),
198
- minWidth: 250,
199
- searchKey: "s",
200
- filterHelperText: "yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss",
201
- filterValidator: B,
202
- FilterComponent: m
203
- },
204
- {
205
- key: "durationMs",
206
- title: "Duration, ms",
207
- minWidth: 100,
208
- searchKey: "d",
209
- filterHelperText: "number - ?number",
210
- filterValidator: j,
211
- FilterComponent: m
212
- },
213
- {
214
- key: "messageType",
215
- title: "Type",
216
- minWidth: 100,
217
- searchKey: "m",
218
- filterHelperText: "e.g. ControlValue/list",
219
- FilterComponent: m
220
- },
221
- {
222
- key: "protocol",
223
- title: "Protocol",
224
- minWidth: 100,
225
- searchKey: "p",
226
- filterHelperText: "e.g. http",
227
- FilterComponent: m
228
- },
229
- {
230
- key: "requestingSystem",
231
- title: "Requesting System",
232
- minWidth: 100,
233
- searchKey: "rqsn",
234
- FilterComponent: m
235
- },
236
- {
237
- key: "respondingSystem",
238
- title: "Responding System",
239
- minWidth: 100,
240
- searchKey: "rpsn",
241
- FilterComponent: m
242
- },
243
- {
244
- key: "statusCode",
245
- title: "Status",
246
- minWidth: 100,
247
- searchKey: "c",
248
- filterHelperText: "e.g. 400",
249
- FilterComponent: m
250
- },
251
- {
252
- key: "messageChainId",
253
- title: "Message Chain ID",
254
- CellComponent: ee,
255
- minWidth: 150,
256
- searchKey: "mci",
257
- filterHelperText: "e.g. 123",
258
- filterValidator: W,
259
- FilterComponent: m
260
- },
261
- {
262
- key: "requestSize",
263
- title: "Request size",
264
- CellComponent: ({ value: e, row: t }) => /* @__PURE__ */ n.jsx(k, { size: e, id: t.id, type: "request" }),
265
- minWidth: 150,
266
- searchKey: "rqs",
267
- filterHelperText: "number - ?number",
268
- filterValidator: j,
269
- FilterComponent: m
270
- },
271
- {
272
- key: "responseSize",
273
- title: "Response size",
274
- CellComponent: ({ value: e, row: t }) => /* @__PURE__ */ n.jsx(k, { size: e, id: t.id, type: "response" }),
275
- minWidth: 150,
276
- searchKey: "rps",
277
- filterHelperText: "number - ?number",
278
- filterValidator: j,
279
- FilterComponent: m
280
- },
281
- {
282
- key: "metadata",
283
- title: "Metadata",
284
- CellComponent: $,
285
- minWidth: 150,
286
- searchKey: "md",
287
- filterHelperText: "A=a, B=b",
288
- FilterComponent: m
289
- }
290
- ], fe = ({ id: e }) => e, xe = (e) => ({
291
- appVersion: e.get("v") ?? "",
292
- messageType: e.get("m") ?? "",
293
- protocol: e.get("p") ?? "",
294
- startTime: e.get("s") ?? "",
295
- durationMs: e.get("d") ?? "",
296
- statusCode: e.get("c") ?? "",
297
- messageChainId: e.get("mci") ?? "",
298
- requestSize: e.get("rqs") ?? "",
299
- responseSize: e.get("rps") ?? "",
300
- metadata: e.get("md") ?? "",
301
- requestingSystem: e.get("rqsn") ?? "",
302
- respondingSystem: e.get("rpsn") ?? ""
303
- }), Ee = () => {
304
- const e = N(), [t, s] = Q(), r = z();
305
- return /* @__PURE__ */ n.jsxs(n.Fragment, { children: [
306
- /* @__PURE__ */ n.jsxs(J, { method: "get", children: [
307
- /* @__PURE__ */ n.jsx(X, { sx: { height: "calc(100vh - 130px)" }, children: /* @__PURE__ */ n.jsx(
308
- Z,
309
- {
310
- columns: he,
311
- rows: r.content,
312
- getRowId: fe,
313
- onRowClick: (o) => e(`./${o.id}`, { relative: "path" }),
314
- defaultFilter: xe(t)
315
- }
316
- ) }),
317
- /* @__PURE__ */ n.jsx("input", { type: "submit", hidden: !0 })
318
- ] }),
319
- /* @__PURE__ */ n.jsx(
320
- _,
321
- {
322
- page: r.number,
323
- rowsPerPage: r.size,
324
- total: r.totalElements,
325
- onPageChange: (o) => {
326
- s(O(t, o));
327
- }
328
- }
329
- )
330
- ] });
331
- }, ve = {
332
- s: A,
333
- d: w,
334
- rqs: w,
335
- rps: w
336
- }, ye = (e, t) => {
337
- const s = te(), r = new URLSearchParams();
338
- D(e, ve).forEach((a, p) => r.append(p, a));
339
- const o = r.toString() ? `?${r.toString()}` : "";
340
- return s.get(`log${o}`);
341
- }, F = se("logs/fetchLogs", async (e, t) => {
342
- const s = await ye(e);
343
- return s.status !== 200 ? t.rejectWithValue({
344
- message: "Failed to fetch logs."
345
- }) : s.data;
346
- }), be = {
347
- logMessages: [],
348
- logMessageTotalCount: 0,
349
- status: "loading",
350
- filters: {
351
- page: "0",
352
- size: "100"
353
- }
354
- }, je = re({
355
- name: "log",
356
- initialState: be,
357
- reducers: {
358
- updateLogs(e, { payload: t }) {
359
- e.logMessages = t;
360
- },
361
- updateFilters(e, { payload: t }) {
362
- e.filters = { ...e.filters, ...t };
363
- },
364
- clearFilters(e, { payload: t }) {
365
- const s = { ...e.filters };
366
- t.forEach((r) => {
367
- delete s[r];
368
- }), e.filters = s;
369
- }
370
- },
371
- extraReducers: (e) => {
372
- e.addCase(F.pending, (t) => {
373
- t.status = "loading", t.error = "undefined";
374
- }), e.addCase(F.fulfilled, (t, { payload: s }) => {
375
- t.logMessages = s.content, t.logMessageTotalCount = s.totalElements, t.status = "succeeded";
376
- }), e.addCase(F.rejected, (t, { payload: s }) => {
377
- s && (t.error = s.message), t.status = "failed";
378
- });
379
- }
380
- }), { updateLogs: Ie, updateFilters: Be, clearFilters: We } = je.actions, i = ({ label: e, value: t, isWide: s, isFull: r }) => n.jsx(f, { item: !0, xs: 12, sm: r ? 12 : 6, md: r ? 12 : s ? 6 : 3, children: n.jsx(Y, { label: e, value: t, InputProps: {
381
- readOnly: !0
382
- }, InputLabelProps: {
383
- style: { fontSize: 20 }
384
- }, multiline: !0, fullWidth: !0 }) }), we = ({ message: e, backAction: t, downloadDataAction: s }) => n.jsxs(n.Fragment, { children: [n.jsx(C, { variant: "contained", startIcon: n.jsx(K, {}), onClick: () => t(), sx: {
385
- marginBottom: 0.5,
386
- width: 200,
387
- backgroundColor: "secondary.main"
388
- }, children: "Back" }), e ? n.jsxs(f, { container: !0, direction: "row", justifyContent: "flex-start", spacing: 2, children: [n.jsx(f, { item: !0, xs: 12, md: 12, lg: 12, children: n.jsx("h1", { children: "Message Details" }) }), n.jsx(i, { label: "Sent At", value: U(e.startTime) }), n.jsx(i, { label: "Duration, ms", value: e.durationMs }), n.jsx(i, { label: "App Server", value: e.appServer }), n.jsx(i, { label: "App Version", value: e.appVersion }), n.jsx(i, { label: "Type", value: e.messageType }), n.jsx(i, { label: "Protocol", value: e.protocol }), n.jsx(i, { label: "Requesting system", value: e.requestingSystem }), n.jsx(i, { label: "Responding system", value: e.respondingSystem }), n.jsxs(f, { item: !0, container: !0, xs: 12, spacing: 2, children: [n.jsx(i, { label: "Request headers", value: e.requestHeaders, isWide: !0 }), n.jsx(i, { label: "Response headers", value: e.responseHeaders, isWide: !0 })] }), n.jsx(i, { label: "Address", value: e.address, isFull: !0 }), n.jsx(i, { label: "Status code", value: e.statusCode }), n.jsx(i, { label: "Status message", value: e.statusMessage }), n.jsx(i, { label: "Message chain ID", value: e.messageChainId }), n.jsx(i, { label: "Request Size (B)", value: e.requestSize }), n.jsx(i, { label: "Response Size (B)", value: e.responseSize }), n.jsx(f, { item: !0, container: !0, xs: 12, spacing: 2, children: n.jsx(i, { label: "Metadata", value: Object.entries(e.metadata).map(([r, o]) => `${r} = ${o}`).join(`
389
- `), isFull: !0 }) }), n.jsxs(f, { container: !0, item: !0, direction: "row", xs: 12, spacing: 2, children: [n.jsx(f, { item: !0, xs: 12, md: 3, children: n.jsx(C, { disabled: e.requestSize === 0, variant: "contained", onClick: () => s(e.id, "request"), sx: { margin: 1, width: 200 }, children: "Download Request" }) }), n.jsx(f, { item: !0, xs: 12, md: 3, children: n.jsx(C, { disabled: e.responseSize === 0, variant: "contained", onClick: () => s(e.id, "response"), sx: { margin: 1, width: 200 }, children: "Download Response" }) })] })] }) : n.jsx("p", { children: "No message data found" })] }), $e = ({ client: e }) => {
390
- const t = N(), s = z();
391
- return /* @__PURE__ */ n.jsx(
392
- we,
393
- {
394
- message: s,
395
- backAction: () => t("..", { relative: "path" }),
396
- downloadDataAction: async function(r, o) {
397
- try {
398
- const a = o === "response" ? "response" : "request", { blob: p, contentType: y } = await ce(r, a, e), b = new Blob([p], {
399
- type: y
400
- }), v = window.URL.createObjectURL(b), g = document.createElement("a");
401
- g.href = v, g.download = `log-${r}-${a}.txt`, document.body.appendChild(g), g.click(), document.body.removeChild(g), window.URL.revokeObjectURL(v);
402
- } catch (a) {
403
- console.error("Failed to download log data:", a);
404
- }
405
- }
406
- }
407
- );
408
- };
409
- export {
410
- Ee as M,
411
- $e as S,
412
- ie as a,
413
- qe as b,
414
- Ve as c,
415
- ce as d,
416
- ae as f,
417
- le as g
418
- };
419
- //# sourceMappingURL=SingleLogMessageRoute-Dl2NFfqG.js.map