@evolver-fi/evolver-basics-admin-components 1.0.0 → 8.2.2-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EnumSelectFilter-DDWIjz5i.js +35 -0
- package/dist/EnumSelectFilter-DDWIjz5i.js.map +1 -0
- package/dist/FilterLink-OxQDWR5G.js +29 -0
- package/dist/FilterLink-OxQDWR5G.js.map +1 -0
- package/dist/Table-IciQttr3.js +79 -0
- package/dist/Table-IciQttr3.js.map +1 -0
- package/dist/TableMetadataDisplay-BM61EulC.js +49 -0
- package/dist/TableMetadataDisplay-BM61EulC.js.map +1 -0
- package/dist/TextFilter-CLOKjiSd.js +54 -0
- package/dist/TextFilter-CLOKjiSd.js.map +1 -0
- package/dist/api-CMiZYkfc.js +32 -0
- package/dist/api-CMiZYkfc.js.map +1 -0
- package/dist/breadcrumbs/index.js +2 -5
- package/dist/breadcrumbs-BAwnKRxL.js +32 -0
- package/dist/breadcrumbs-BAwnKRxL.js.map +1 -0
- package/dist/breadcrumbs.css +1 -0
- package/dist/client/index.js +330 -369
- package/dist/client/index.js.map +1 -1
- package/dist/configuration-values/index.js +2 -13
- package/dist/configuration-values-CjOfmPRq.js +3464 -0
- package/dist/configuration-values-CjOfmPRq.js.map +1 -0
- package/dist/control-values/index.js +2 -10
- package/dist/control-values-CzQOB4WJ.js +144 -0
- package/dist/control-values-CzQOB4WJ.js.map +1 -0
- package/dist/exhaustiveValues-BYWkg9M1.js +6 -0
- package/dist/exhaustiveValues-BYWkg9M1.js.map +1 -0
- package/dist/filter/index.js +4 -10
- package/dist/formData-BO275hRZ.js +43 -0
- package/dist/formData-BO275hRZ.js.map +1 -0
- package/dist/jwt-tokens/index.js +2 -9
- package/dist/jwt-tokens-DnKsHei4.js +71 -0
- package/dist/jwt-tokens-DnKsHei4.js.map +1 -0
- package/dist/main/index.js +17 -87
- package/dist/message-log/index.js +2 -12
- package/dist/message-log-BdrJtbsP.js +337 -0
- package/dist/message-log-BdrJtbsP.js.map +1 -0
- package/dist/message-sending/index.js +2 -10
- package/dist/message-sending-dvTw2fFm.js +181 -0
- package/dist/message-sending-dvTw2fFm.js.map +1 -0
- package/dist/message-targets/index.js +2 -15
- package/dist/message-targets-8EppIJde.js +406 -0
- package/dist/message-targets-8EppIJde.js.map +1 -0
- package/dist/pagination-C4QUYRMf.js +20 -0
- package/dist/pagination-C4QUYRMf.js.map +1 -0
- package/dist/scheduled-tasks/index.js +2 -16
- package/dist/scheduled-tasks-BtBnBrE7.js +647 -0
- package/dist/scheduled-tasks-BtBnBrE7.js.map +1 -0
- package/dist/schemas-D-8_LuND.js +2986 -0
- package/dist/schemas-D-8_LuND.js.map +1 -0
- package/dist/table/index.js +2 -6
- package/dist/triggerables/index.js +3 -11
- package/dist/triggerables-DgrIeQMi.js +51 -0
- package/dist/triggerables-DgrIeQMi.js.map +1 -0
- package/dist/types/breadcrumbs.d.ts +1 -0
- package/dist/types/client/index.d.ts +5 -0
- package/dist/types/client.d.ts +1 -0
- package/dist/types/common/exhaustiveValues.d.ts +5 -0
- package/dist/types/common/formData.d.ts +20 -0
- package/dist/types/common/format.d.ts +1 -0
- package/dist/types/common/pagination.d.ts +8 -0
- package/dist/types/common/types.d.ts +27 -0
- package/dist/types/common/validation.d.ts +5 -0
- package/dist/types/components/breadcrumbs/BreadCrumbs.d.ts +10 -0
- package/dist/types/components/breadcrumbs/index.d.ts +1 -0
- package/dist/types/components/filter/EnumSelectFilter.d.ts +7 -0
- package/dist/types/components/filter/FilterHelperTexts.d.ts +4 -0
- package/dist/types/components/filter/FilterLink.d.ts +2 -0
- package/dist/types/components/filter/TextFilter.d.ts +2 -0
- package/dist/types/components/filter/createEnumSelectFilter.d.ts +5 -0
- package/dist/types/components/filter/index.d.ts +5 -0
- package/dist/types/components/filter/types.d.ts +20 -0
- package/dist/types/components/metadata/TableMetadataDisplay.d.ts +2 -0
- package/dist/types/components/metadata/utils.d.ts +1 -0
- package/dist/types/components/table/Pagination.d.ts +7 -0
- package/dist/types/components/table/Table.d.ts +3 -0
- package/dist/types/components/table/index.d.ts +3 -0
- package/dist/types/components/table/types.d.ts +48 -0
- package/dist/types/configuration-values.d.ts +1 -0
- package/dist/types/control-values.d.ts +1 -0
- package/dist/types/filter.d.ts +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/jwt-tokens.d.ts +1 -0
- package/dist/types/main.d.ts +1 -0
- package/dist/types/message-log.d.ts +1 -0
- package/dist/types/message-sending.d.ts +1 -0
- package/dist/types/message-targets.d.ts +1 -0
- package/dist/types/routes/configuration-values/ConfigurationValueFormRoute.d.ts +2 -0
- package/dist/types/routes/configuration-values/ConfigurationValuesRoute.d.ts +2 -0
- package/dist/types/routes/configuration-values/action.d.ts +8 -0
- package/dist/types/routes/configuration-values/api.d.ts +53 -0
- package/dist/types/routes/configuration-values/configurationValueColumns.d.ts +4 -0
- package/dist/types/routes/configuration-values/index.d.ts +5 -0
- package/dist/types/routes/configuration-values/loader.d.ts +52 -0
- package/dist/types/routes/control-values/ControlValuesRoute.d.ts +2 -0
- package/dist/types/routes/control-values/SingleControlValueRoute.d.ts +2 -0
- package/dist/types/routes/control-values/api.d.ts +43 -0
- package/dist/types/routes/control-values/controlValueColumns.d.ts +4 -0
- package/dist/types/routes/control-values/index.d.ts +4 -0
- package/dist/types/routes/control-values/loader.d.ts +43 -0
- package/dist/types/routes/jwt-tokens/JwtTokensRoute.d.ts +6 -0
- package/dist/types/routes/jwt-tokens/api.d.ts +41 -0
- package/dist/types/routes/jwt-tokens/index.d.ts +3 -0
- package/dist/types/routes/jwt-tokens/loader.d.ts +35 -0
- package/dist/types/routes/message-log/LogBodyLink.d.ts +6 -0
- package/dist/types/routes/message-log/MessageLogRoute.d.ts +2 -0
- package/dist/types/routes/message-log/SingleLogMessageRoute.d.ts +6 -0
- package/dist/types/routes/message-log/api.d.ts +88 -0
- package/dist/types/routes/message-log/index.d.ts +4 -0
- package/dist/types/routes/message-log/loader.d.ts +53 -0
- package/dist/types/routes/message-log/messageLogColumns.d.ts +3 -0
- package/dist/types/routes/message-log/types.d.ts +37 -0
- package/dist/types/routes/message-sending/MessageSendingRoute.d.ts +2 -0
- package/dist/types/routes/message-sending/SingleMessageRoute.d.ts +2 -0
- package/dist/types/routes/message-sending/api.d.ts +92 -0
- package/dist/types/routes/message-sending/index.d.ts +4 -0
- package/dist/types/routes/message-sending/loader.d.ts +34 -0
- package/dist/types/routes/message-sending/messageSendingColumns.d.ts +3 -0
- package/dist/types/routes/message-sending/types.d.ts +43 -0
- package/dist/types/routes/message-targets/MessageTargetFormRoute.d.ts +2 -0
- package/dist/types/routes/message-targets/MessageTargetsRoute.d.ts +2 -0
- package/dist/types/routes/message-targets/action.d.ts +8 -0
- package/dist/types/routes/message-targets/api.d.ts +12 -0
- package/dist/types/routes/message-targets/index.d.ts +5 -0
- package/dist/types/routes/message-targets/loader.d.ts +15 -0
- package/dist/types/routes/scheduled-tasks/ScheduledTaskFormRoute.d.ts +2 -0
- package/dist/types/routes/scheduled-tasks/ScheduledTasksRoute.d.ts +2 -0
- package/dist/types/routes/scheduled-tasks/action.d.ts +21 -0
- package/dist/types/routes/scheduled-tasks/api.d.ts +75 -0
- package/dist/types/routes/scheduled-tasks/index.d.ts +5 -0
- package/dist/types/routes/scheduled-tasks/loader.d.ts +57 -0
- package/dist/types/routes/scheduled-tasks/parseScheduledTask.d.ts +15 -0
- package/dist/types/routes/triggerables/TriggerablesRoute.d.ts +2 -0
- package/dist/types/routes/triggerables/action.d.ts +6 -0
- package/dist/types/routes/triggerables/api.d.ts +33 -0
- package/dist/types/routes/triggerables/index.d.ts +4 -0
- package/dist/types/routes/triggerables/loader.d.ts +3 -0
- package/dist/types/scheduled-tasks.d.ts +1 -0
- package/dist/types/table.d.ts +1 -0
- package/dist/types/triggerables.d.ts +1 -0
- package/dist/types/types/openapiTypes.d.ts +3321 -0
- package/package.json +12 -5
- package/dist/ArrowBack-Bifnzxvs.js +0 -6430
- package/dist/ArrowBack-Bifnzxvs.js.map +0 -1
- package/dist/BreadCrumbs-DMuPCevY.js +0 -19
- package/dist/BreadCrumbs-DMuPCevY.js.map +0 -1
- package/dist/BreadCrumbs.css +0 -1
- package/dist/EnumSelectFilter-BdGla5Yf.js +0 -36
- package/dist/EnumSelectFilter-BdGla5Yf.js.map +0 -1
- package/dist/ExpandMore-DUn2zrFA.js +0 -1644
- package/dist/ExpandMore-DUn2zrFA.js.map +0 -1
- package/dist/FilterLink-DIeFjfZX.js +0 -49
- package/dist/FilterLink-DIeFjfZX.js.map +0 -1
- package/dist/JwtTokensRoute-C74zNV7A.js +0 -2374
- package/dist/JwtTokensRoute-C74zNV7A.js.map +0 -1
- package/dist/ScheduledTasksRoute-BAetDHqN.js +0 -611
- package/dist/ScheduledTasksRoute-BAetDHqN.js.map +0 -1
- package/dist/SingleLogMessageRoute-Dl2NFfqG.js +0 -419
- package/dist/SingleLogMessageRoute-Dl2NFfqG.js.map +0 -1
- package/dist/SingleMessageRoute-fC94BR1C.js +0 -306
- package/dist/SingleMessageRoute-fC94BR1C.js.map +0 -1
- package/dist/Table-DWiRP1za.js +0 -120
- package/dist/Table-DWiRP1za.js.map +0 -1
- package/dist/TextFilter-BHWY2B7i.js +0 -67
- package/dist/TextFilter-BHWY2B7i.js.map +0 -1
- package/dist/TriggerablesRoute-DiEEX1cR.js +0 -3552
- package/dist/TriggerablesRoute-DiEEX1cR.js.map +0 -1
- package/dist/api-BD_4zyJw.js +0 -38
- package/dist/api-BD_4zyJw.js.map +0 -1
- package/dist/breadcrumbs/index.js.map +0 -1
- package/dist/configuration-values/index.js.map +0 -1
- package/dist/control-values/index.js.map +0 -1
- package/dist/createSvgIcon-dA_Vj2W0.js +0 -3914
- package/dist/createSvgIcon-dA_Vj2W0.js.map +0 -1
- package/dist/exhaustiveValues-Dx50G3yz.js +0 -5
- package/dist/exhaustiveValues-Dx50G3yz.js.map +0 -1
- package/dist/filter/index.js.map +0 -1
- package/dist/formData-BH8saYep.js +0 -65
- package/dist/formData-BH8saYep.js.map +0 -1
- package/dist/jsx-runtime-D858t2LC.js +0 -617
- package/dist/jsx-runtime-D858t2LC.js.map +0 -1
- package/dist/jwt-tokens/index.js.map +0 -1
- package/dist/loader-CrveWlGb.js +0 -375
- package/dist/loader-CrveWlGb.js.map +0 -1
- package/dist/loader-D-oC32OJ.js +0 -3612
- package/dist/loader-D-oC32OJ.js.map +0 -1
- package/dist/loader-rVy8Z9xH.js +0 -130
- package/dist/loader-rVy8Z9xH.js.map +0 -1
- package/dist/main/index.js.map +0 -1
- package/dist/message-log/index.js.map +0 -1
- package/dist/message-sending/index.js.map +0 -1
- package/dist/message-targets/index.js.map +0 -1
- package/dist/pagination-Dy4ansKN.js +0 -21
- package/dist/pagination-Dy4ansKN.js.map +0 -1
- package/dist/scheduled-tasks/index.js.map +0 -1
- package/dist/schemas-CBHIJ_eF.js +0 -3059
- package/dist/schemas-CBHIJ_eF.js.map +0 -1
- package/dist/table/index.js.map +0 -1
- 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
|