@evolver-fi/evolver-basics-admin-components 0.0.20 → 0.0.21

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.
@@ -1,27 +1,27 @@
1
- import { filterFromUrlSearchParams as v, getBackendClient as f } from "@evolver-fi/evolver-basics";
1
+ import { filterFromUrlSearchParams as S, getBackendClient as y } from "@evolver-fi/evolver-basics";
2
2
  import { j as t } from "./jsx-runtime-B6kdoens.js";
3
3
  import "react";
4
- import { g as y, c as w, a as S } from "./evolverClient-B_TZXnpV.js";
5
- import { Button as m, Grid as l, TextField as T, TableContainer as F } from "@mui/material";
4
+ import { g as f, c as v, a as w } from "./evolverClient-B_TZXnpV.js";
5
+ import { Button as m, Grid as l, TextField as F, TableContainer as T } from "@mui/material";
6
6
  import "./parser-Bj3mcA83.js";
7
- import { c as L, f as M, a as g, d as R, b as k, m as P, e as q, g as $, n as p, h as z, T as H } from "./TableMetadataDisplay-C7RP2ZrM.js";
8
- import { Link as B, useNavigate as j, useSearchParams as V, useLoaderData as b, Form as W } from "react-router";
9
- import { T as D, P as I } from "./Table-DgRqEB1x.js";
10
- import { F as K } from "./FilterLink-CHw7-m82.js";
7
+ import { c as R, f as k, a as g, d as L, b as M, m as q, e as P, g as $, n as p, h as z, T as H } from "./TableMetadataDisplay-C7RP2ZrM.js";
8
+ import { Link as W, useNavigate as j, useSearchParams as B, useLoaderData as C, Form as K } from "react-router";
9
+ import { T as V, P as D } from "./Table-DgRqEB1x.js";
10
+ import { F as I } from "./FilterLink-CHw7-m82.js";
11
11
  import { T as i } from "./TextFilter-BKUfkFQe.js";
12
12
  import "axios";
13
13
  const U = {
14
- s: M,
14
+ s: k,
15
15
  d: g,
16
16
  rqs: g,
17
17
  rps: g
18
- }, C = (e, s) => {
19
- const r = s || y(), a = new URLSearchParams();
20
- L(e, U).forEach((d, u) => a.append(u, d));
21
- const n = a.toString() ? `?${a.toString()}` : "";
22
- return r.get(`log${n}`);
23
- }, E = (e, s) => (s || y()).get(`log/${e}`), h = w("logs/fetchLogs", async (e, s) => {
24
- const r = await C(e);
18
+ }, b = (e, s) => {
19
+ const r = s || f(), a = new URLSearchParams();
20
+ R(e, U).forEach((d, u) => a.append(u, d));
21
+ const o = a.toString() ? `?${a.toString()}` : "";
22
+ return r.get(`log${o}`);
23
+ }, E = (e, s) => (s || f()).get(`log/${e}`), h = v("logs/fetchLogs", async (e, s) => {
24
+ const r = await b(e);
25
25
  return r.status !== 200 ? s.rejectWithValue({
26
26
  message: "Failed to fetch logs."
27
27
  }) : r.data;
@@ -34,7 +34,7 @@ const U = {
34
34
  size: "100"
35
35
  }
36
36
  };
37
- S({
37
+ w({
38
38
  name: "log",
39
39
  initialState: A,
40
40
  reducers: {
@@ -61,68 +61,83 @@ S({
61
61
  });
62
62
  }
63
63
  });
64
- const o = ({ label: e, value: s, isWide: r, isFull: a }) => t.jsx(l, { item: !0, xs: 12, sm: a ? 12 : 6, md: a ? 12 : r ? 6 : 3, children: t.jsx(T, { label: e, value: s, InputProps: {
64
+ const n = ({ label: e, value: s, isWide: r, isFull: a }) => t.jsx(l, { item: !0, xs: 12, sm: a ? 12 : 6, md: a ? 12 : r ? 6 : 3, children: t.jsx(F, { label: e, value: s, InputProps: {
65
65
  readOnly: !0
66
66
  }, InputLabelProps: {
67
67
  style: { fontSize: 20 }
68
- }, multiline: !0, fullWidth: !0 }) }), N = ({ message: e, backAction: s, downloadDataAction: r }) => t.jsxs(t.Fragment, { children: [t.jsx(m, { variant: "contained", startIcon: t.jsx(R, {}), onClick: () => s(), sx: {
68
+ }, multiline: !0, fullWidth: !0 }) }), N = ({ message: e, backAction: s, downloadDataAction: r }) => t.jsxs(t.Fragment, { children: [t.jsx(m, { variant: "contained", startIcon: t.jsx(L, {}), onClick: () => s(), sx: {
69
69
  marginBottom: 0.5,
70
70
  width: 200,
71
71
  backgroundColor: "secondary.main"
72
- }, children: "Back" }), e ? t.jsxs(l, { container: !0, direction: "row", justifyContent: "flex-start", spacing: 2, children: [t.jsx(l, { item: !0, xs: 12, md: 12, lg: 12, children: t.jsx("h1", { children: "Message Details" }) }), t.jsx(o, { label: "Sent At", value: k(e.startTime) }), t.jsx(o, { label: "Duration, ms", value: e.durationMs }), t.jsx(o, { label: "App Server", value: e.appServer }), t.jsx(o, { label: "App Version", value: e.appVersion }), t.jsx(o, { label: "Type", value: e.messageType }), t.jsx(o, { label: "Protocol", value: e.protocol }), t.jsx(o, { label: "Requesting system", value: e.requestingSystem }), t.jsx(o, { label: "Responding system", value: e.respondingSystem }), t.jsxs(l, { item: !0, container: !0, xs: 12, spacing: 2, children: [t.jsx(o, { label: "Request headers", value: e.requestHeaders, isWide: !0 }), t.jsx(o, { label: "Response headers", value: e.responseHeaders, isWide: !0 })] }), t.jsx(o, { label: "Address", value: e.address, isFull: !0 }), t.jsx(o, { label: "Status code", value: e.statusCode }), t.jsx(o, { label: "Status message", value: e.statusMessage }), t.jsx(o, { label: "Message chain ID", value: e.messageChainId }), t.jsx(o, { label: "Request Size (B)", value: e.requestSize }), t.jsx(o, { label: "Response Size (B)", value: e.responseSize }), t.jsx(l, { item: !0, container: !0, xs: 12, spacing: 2, children: t.jsx(o, { label: "Metadata", value: Object.entries(e.metadata).map(([a, n]) => `${a} = ${n}`).join(`
73
- `), isFull: !0 }) }), t.jsxs(l, { container: !0, item: !0, direction: "row", xs: 12, spacing: 2, children: [t.jsx(l, { item: !0, xs: 12, md: 3, children: t.jsx(m, { disabled: e.requestSize === 0, variant: "contained", onClick: () => r(e.id, "request"), sx: { margin: 1, width: 200 }, children: "Download Request" }) }), t.jsx(l, { item: !0, xs: 12, md: 3, children: t.jsx(m, { disabled: e.responseSize === 0, variant: "contained", onClick: () => r(e.id, "response"), sx: { margin: 1, width: 200 }, children: "Download Response" }) })] })] }) : t.jsx("p", { children: "No message data found" })] }), O = (e) => async ({ request: s }) => {
72
+ }, children: "Back" }), e ? t.jsxs(l, { container: !0, direction: "row", justifyContent: "flex-start", spacing: 2, children: [t.jsx(l, { item: !0, xs: 12, md: 12, lg: 12, children: t.jsx("h1", { children: "Message Details" }) }), t.jsx(n, { label: "Sent At", value: M(e.startTime) }), t.jsx(n, { label: "Duration, ms", value: e.durationMs }), t.jsx(n, { label: "App Server", value: e.appServer }), t.jsx(n, { label: "App Version", value: e.appVersion }), t.jsx(n, { label: "Type", value: e.messageType }), t.jsx(n, { label: "Protocol", value: e.protocol }), t.jsx(n, { label: "Requesting system", value: e.requestingSystem }), t.jsx(n, { label: "Responding system", value: e.respondingSystem }), t.jsxs(l, { item: !0, container: !0, xs: 12, spacing: 2, children: [t.jsx(n, { label: "Request headers", value: e.requestHeaders, isWide: !0 }), t.jsx(n, { label: "Response headers", value: e.responseHeaders, isWide: !0 })] }), t.jsx(n, { label: "Address", value: e.address, isFull: !0 }), t.jsx(n, { label: "Status code", value: e.statusCode }), t.jsx(n, { label: "Status message", value: e.statusMessage }), t.jsx(n, { label: "Message chain ID", value: e.messageChainId }), t.jsx(n, { label: "Request Size (B)", value: e.requestSize }), t.jsx(n, { label: "Response Size (B)", value: e.responseSize }), t.jsx(l, { item: !0, container: !0, xs: 12, spacing: 2, children: t.jsx(n, { label: "Metadata", value: Object.entries(e.metadata).map(([a, o]) => `${a} = ${o}`).join(`
73
+ `), isFull: !0 }) }), t.jsxs(l, { container: !0, item: !0, direction: "row", xs: 12, spacing: 2, children: [t.jsx(l, { item: !0, xs: 12, md: 3, children: t.jsx(m, { disabled: e.requestSize === 0, variant: "contained", onClick: () => r(e.id, "request"), sx: { margin: 1, width: 200 }, children: "Download Request" }) }), t.jsx(l, { item: !0, xs: 12, md: 3, children: t.jsx(m, { disabled: e.responseSize === 0, variant: "contained", onClick: () => r(e.id, "response"), sx: { margin: 1, width: 200 }, children: "Download Response" }) })] })] }) : t.jsx("p", { children: "No message data found" })] }), O = [
74
+ "v",
75
+ // App version
76
+ "srv",
77
+ // App server
78
+ "m",
79
+ // Message type
80
+ "p",
81
+ // Protocol
82
+ "s",
83
+ // StartTime
84
+ "d",
85
+ // Duration Ms
86
+ "c",
87
+ // Status code
88
+ "mci",
89
+ // Message chain ID
90
+ "rqsn",
91
+ // Requesting system name
92
+ "rpsn",
93
+ // Responding system name
94
+ "rqs",
95
+ // Request size
96
+ "rps",
97
+ // Response size
98
+ "md",
99
+ // Metadata
100
+ "page",
101
+ "size"
102
+ ], G = (e) => async ({ request: s }) => {
74
103
  try {
75
- const r = new URL(s.url), a = v(
104
+ const r = new URL(s.url), a = S(
76
105
  r.searchParams,
77
- [
78
- "c",
79
- "p",
80
- "s",
81
- "page",
82
- "size",
83
- "v",
84
- "m",
85
- "p",
86
- "d",
87
- "mci",
88
- "rqs",
89
- "rps",
90
- "md"
91
- ]
92
- ), n = await C(a, e);
93
- if (n.status !== 200)
94
- throw new Error(`Failed to fetch logs: ${n.data}`);
95
- return n.data;
106
+ [...O]
107
+ ), o = await b(a, e);
108
+ if (o.status !== 200)
109
+ throw new Error(`Failed to fetch logs: ${o.data}`);
110
+ return o.data;
96
111
  } catch (r) {
97
112
  throw console.error(r), r;
98
113
  }
99
- }, de = O(), G = (e) => async ({ params: s }) => {
114
+ }, ce = G(), Q = (e) => async ({ params: s }) => {
100
115
  if (!s.id)
101
116
  throw new Error("No message id provided");
102
117
  try {
103
118
  const { id: r } = s, a = await E(r, e);
104
119
  if (a.status !== 200)
105
120
  throw new Error(`Failed to fetch message: ${a.data}`);
106
- return P(a.data);
121
+ return q(a.data);
107
122
  } catch (r) {
108
123
  throw console.error(r), r;
109
124
  }
110
- }, ce = G(), x = ({
125
+ }, ue = Q(), x = ({
111
126
  size: e,
112
127
  id: s,
113
128
  type: r
114
129
  }) => e && /* @__PURE__ */ t.jsx(
115
- B,
130
+ W,
116
131
  {
117
- to: `${f().defaults.baseURL}/log/${s}/${r}`,
132
+ to: `${y().defaults.baseURL}/log/${s}/${r}?pretty=true`,
118
133
  onClick: (a) => a.stopPropagation(),
119
134
  children: e
120
135
  }
121
- ), Q = [
136
+ ), _ = [
122
137
  {
123
138
  key: "startTime",
124
139
  title: "Start time",
125
- CellComponent: ({ value: e }) => q(e),
140
+ CellComponent: ({ value: e }) => P(e),
126
141
  minWidth: 250,
127
142
  searchKey: "s",
128
143
  filterHelperText: "yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss",
@@ -154,6 +169,20 @@ const o = ({ label: e, value: s, isWide: r, isFull: a }) => t.jsx(l, { item: !0,
154
169
  filterHelperText: "e.g. http",
155
170
  FilterComponent: i
156
171
  },
172
+ {
173
+ key: "requestingSystem",
174
+ title: "Requesting System",
175
+ minWidth: 100,
176
+ searchKey: "rqsn",
177
+ FilterComponent: i
178
+ },
179
+ {
180
+ key: "respondingSystem",
181
+ title: "Responding System",
182
+ minWidth: 100,
183
+ searchKey: "rpsn",
184
+ FilterComponent: i
185
+ },
157
186
  {
158
187
  key: "statusCode",
159
188
  title: "Status",
@@ -165,7 +194,7 @@ const o = ({ label: e, value: s, isWide: r, isFull: a }) => t.jsx(l, { item: !0,
165
194
  {
166
195
  key: "messageChainId",
167
196
  title: "Message Chain ID",
168
- CellComponent: K,
197
+ CellComponent: I,
169
198
  minWidth: 150,
170
199
  searchKey: "mci",
171
200
  filterHelperText: "e.g. 123",
@@ -201,7 +230,7 @@ const o = ({ label: e, value: s, isWide: r, isFull: a }) => t.jsx(l, { item: !0,
201
230
  filterHelperText: "A=a, B=b",
202
231
  FilterComponent: i
203
232
  }
204
- ], _ = ({ id: e }) => e, J = (e) => ({
233
+ ], J = ({ id: e }) => e, X = (e) => ({
205
234
  appVersion: e.get("v") ?? "",
206
235
  messageType: e.get("m") ?? "",
207
236
  protocol: e.get("p") ?? "",
@@ -211,38 +240,40 @@ const o = ({ label: e, value: s, isWide: r, isFull: a }) => t.jsx(l, { item: !0,
211
240
  messageChainId: e.get("mci") ?? "",
212
241
  requestSize: e.get("rqs") ?? "",
213
242
  responseSize: e.get("rps") ?? "",
214
- metadata: e.get("md") ?? ""
215
- }), ue = () => {
216
- const e = j(), [s, r] = V(), a = b();
243
+ metadata: e.get("md") ?? "",
244
+ requestingSystem: e.get("rqsn") ?? "",
245
+ respondingSystem: e.get("rpsn") ?? ""
246
+ }), me = () => {
247
+ const e = j(), [s, r] = B(), a = C();
217
248
  return /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
218
- /* @__PURE__ */ t.jsxs(W, { method: "get", children: [
219
- /* @__PURE__ */ t.jsx(F, { sx: { height: "calc(100vh - 130px)" }, children: /* @__PURE__ */ t.jsx(
220
- D,
249
+ /* @__PURE__ */ t.jsxs(K, { method: "get", children: [
250
+ /* @__PURE__ */ t.jsx(T, { sx: { height: "calc(100vh - 130px)" }, children: /* @__PURE__ */ t.jsx(
251
+ V,
221
252
  {
222
- columns: Q,
253
+ columns: _,
223
254
  rows: a.content,
224
- getRowId: _,
225
- onRowClick: (n) => e(`./${n.id}`, { relative: "path" }),
226
- defaultFilter: J(s)
255
+ getRowId: J,
256
+ onRowClick: (o) => e(`./${o.id}`, { relative: "path" }),
257
+ defaultFilter: X(s)
227
258
  }
228
259
  ) }),
229
260
  /* @__PURE__ */ t.jsx("input", { type: "submit", hidden: !0 })
230
261
  ] }),
231
262
  /* @__PURE__ */ t.jsx(
232
- I,
263
+ D,
233
264
  {
234
265
  page: a.number,
235
266
  rowsPerPage: a.size,
236
267
  total: a.totalElements,
237
- onPageChange: (n) => {
268
+ onPageChange: (o) => {
238
269
  const d = new URLSearchParams(s);
239
- d.set("page", String(n)), r(d);
270
+ d.set("page", String(o)), r(d);
240
271
  }
241
272
  }
242
273
  )
243
274
  ] });
244
- }, me = () => {
245
- const e = j(), s = b();
275
+ }, ge = () => {
276
+ const e = j(), s = C();
246
277
  return /* @__PURE__ */ t.jsx(
247
278
  N,
248
279
  {
@@ -250,25 +281,25 @@ const o = ({ label: e, value: s, isWide: r, isFull: a }) => t.jsx(l, { item: !0,
250
281
  backAction: () => e("..", { relative: "path" }),
251
282
  downloadDataAction: async function(r, a) {
252
283
  try {
253
- const n = await f().get(`/log/${r}/${a}`, {
284
+ const o = await y().get(`/log/${r}/${a}?pretty=true`, {
254
285
  responseType: "blob"
255
- }), d = new Blob([n.data], {
256
- type: n.headers["content-type"] || "application/octet-stream"
286
+ }), d = new Blob([o.data], {
287
+ type: o.headers["content-type"] || "application/octet-stream"
257
288
  }), u = window.URL.createObjectURL(d), c = document.createElement("a");
258
289
  c.href = u, c.download = `log-${r}-${a}.txt`, document.body.appendChild(c), c.click(), document.body.removeChild(c), window.URL.revokeObjectURL(u);
259
- } catch (n) {
260
- console.error("Failed to download log data:", n);
290
+ } catch (o) {
291
+ console.error("Failed to download log data:", o);
261
292
  }
262
293
  }
263
294
  }
264
295
  );
265
296
  };
266
297
  export {
267
- ue as M,
268
- me as S,
269
- G as a,
270
- O as g,
271
- de as l,
272
- ce as s
298
+ me as M,
299
+ ge as S,
300
+ Q as a,
301
+ G as g,
302
+ ce as l,
303
+ ue as s
273
304
  };
274
- //# sourceMappingURL=SingleLogMessageRoute-C9CL51r-.js.map
305
+ //# sourceMappingURL=SingleLogMessageRoute-BT4ghiqv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleLogMessageRoute-BT4ghiqv.js","sources":["../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/utils/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/actions/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/slices/logSlice.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/components/LogMessageComponent.js","../src/routes/message-log/loader.ts","../src/routes/message-log/messageLogColumns.tsx","../src/routes/message-log/MessageLogRoute.tsx","../src/routes/message-log/SingleLogMessageRoute.tsx"],"sourcesContent":["import { formatDatetimeRangeFilter, formatNumberRangeFilter, } from '../../common/components/listUtils';\nimport { getBackendClient } from '../../common/evolverClient';\nimport { createFilterQuery } from '../../common/utils/filterUtils';\nexport const formatterByKey = {\n s: formatDatetimeRangeFilter,\n d: formatNumberRangeFilter,\n rqs: formatNumberRangeFilter,\n rps: formatNumberRangeFilter,\n};\nexport const fetchLogs = (logFilters, backendClient) => {\n const client = backendClient || getBackendClient();\n const searchParams = new URLSearchParams();\n createFilterQuery(logFilters, formatterByKey).forEach((value, key) => searchParams.append(key, value));\n const searchParamsString = searchParams.toString() ? `?${searchParams.toString()}` : '';\n return client.get(`log${searchParamsString}`);\n};\nexport const fetchLogById = (id, backendClient) => {\n const client = backendClient || getBackendClient();\n return client.get(`log/${id}`);\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport { fetchLogs } from '../utils';\nexport const fetchLogsAction = createAsyncThunk('logs/fetchLogs', async (logFilters, thunkApi) => {\n const response = await fetchLogs(logFilters);\n if (response.status !== 200) {\n return thunkApi.rejectWithValue({\n message: 'Failed to fetch logs.',\n });\n }\n return response.data;\n});\n","import { createSlice } from '@reduxjs/toolkit';\nimport { fetchLogsAction } from '../actions';\nconst initialState = {\n logMessages: [],\n logMessageTotalCount: 0,\n status: 'loading',\n filters: {\n page: '0',\n size: '100',\n },\n};\nexport const logSlice = createSlice({\n name: 'log',\n initialState,\n reducers: {\n updateLogs(state, { payload }) {\n state.logMessages = payload;\n },\n updateFilters(state, { payload }) {\n state.filters = { ...state.filters, ...payload };\n },\n clearFilters(state, { payload }) {\n const filters = { ...state.filters };\n payload.forEach((element) => {\n delete filters[element];\n });\n state.filters = filters;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(fetchLogsAction.pending, (state) => {\n state.status = 'loading';\n state.error = 'undefined';\n });\n builder.addCase(fetchLogsAction.fulfilled, (state, { payload }) => {\n state.logMessages = payload.content;\n state.logMessageTotalCount = payload.totalElements;\n state.status = 'succeeded';\n });\n builder.addCase(fetchLogsAction.rejected, (state, { payload }) => {\n if (payload) {\n state.error = payload.message;\n }\n state.status = 'failed';\n });\n },\n});\nexport const { updateLogs, updateFilters, clearFilters } = logSlice.actions;\nexport const selectLogs = (state) => state.logs.logMessages;\nexport const selectLogMessageTotalCount = (state) => state.logs.logMessageTotalCount;\nexport const selectFilters = (state) => state.logs.filters;\nexport const selectStatus = (state) => state.logs.status;\nexport default logSlice.reducer;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { Button, Grid, TextField } from '@mui/material';\nimport { formatDateTime } from '../../common/components/listUtils';\nconst LogMessageField = ({ label, value, isWide, isFull, }) => (_jsx(Grid, { item: true, xs: 12, sm: isFull ? 12 : 6, md: isFull ? 12 : isWide ? 6 : 3, children: _jsx(TextField, { label: label, value: value, InputProps: {\n readOnly: true,\n }, InputLabelProps: {\n style: { fontSize: 20 },\n }, multiline: true, fullWidth: true }) }));\nconst LogMessageComponent = ({ message, backAction, downloadDataAction, }) => {\n return (_jsxs(_Fragment, { children: [_jsx(Button, { variant: \"contained\", startIcon: _jsx(ArrowBackIcon, {}), onClick: () => backAction(), sx: {\n marginBottom: 0.5,\n width: 200,\n backgroundColor: 'secondary.main',\n }, children: \"Back\" }), message ? (_jsxs(Grid, { container: true, direction: \"row\", justifyContent: \"flex-start\", spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, md: 12, lg: 12, children: _jsx(\"h1\", { children: \"Message Details\" }) }), _jsx(LogMessageField, { label: \"Sent At\", value: formatDateTime(message.startTime) }), _jsx(LogMessageField, { label: \"Duration, ms\", value: message.durationMs }), _jsx(LogMessageField, { label: \"App Server\", value: message.appServer }), _jsx(LogMessageField, { label: \"App Version\", value: message.appVersion }), _jsx(LogMessageField, { label: \"Type\", value: message.messageType }), _jsx(LogMessageField, { label: \"Protocol\", value: message.protocol }), _jsx(LogMessageField, { label: \"Requesting system\", value: message.requestingSystem }), _jsx(LogMessageField, { label: \"Responding system\", value: message.respondingSystem }), _jsxs(Grid, { item: true, container: true, xs: 12, spacing: 2, children: [_jsx(LogMessageField, { label: \"Request headers\", value: message.requestHeaders, isWide: true }), _jsx(LogMessageField, { label: \"Response headers\", value: message.responseHeaders, isWide: true })] }), _jsx(LogMessageField, { label: \"Address\", value: message.address, isFull: true }), _jsx(LogMessageField, { label: \"Status code\", value: message.statusCode }), _jsx(LogMessageField, { label: \"Status message\", value: message.statusMessage }), _jsx(LogMessageField, { label: \"Message chain ID\", value: message.messageChainId }), _jsx(LogMessageField, { label: \"Request Size (B)\", value: message.requestSize }), _jsx(LogMessageField, { label: \"Response Size (B)\", value: message.responseSize }), _jsx(Grid, { item: true, container: true, xs: 12, spacing: 2, children: _jsx(LogMessageField, { label: \"Metadata\", value: Object.entries(message.metadata)\n .map(([key, value]) => `${key} = ${value}`)\n .join('\\n'), isFull: true }) }), _jsxs(Grid, { container: true, item: true, direction: \"row\", xs: 12, spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, md: 3, children: _jsx(Button, { disabled: message.requestSize === 0, variant: \"contained\", onClick: () => downloadDataAction(message.id, 'request'), sx: { margin: 1, width: 200 }, children: \"Download Request\" }) }), _jsx(Grid, { item: true, xs: 12, md: 3, children: _jsx(Button, { disabled: message.responseSize === 0, variant: \"contained\", onClick: () => downloadDataAction(message.id, 'response'), sx: { margin: 1, width: 200 }, children: \"Download Response\" }) })] })] })) : (_jsx(\"p\", { children: \"No message data found\" }))] }));\n};\nexport default LogMessageComponent;\n","import { filterFromUrlSearchParams } from \"@evolver-fi/evolver-basics\";\nimport {\n fetchLogById,\n fetchLogs,\n LogMessage,\n LogMessageResponse,\n} from \"@evolver-fi/evolver-basics/message-log\";\nimport { AxiosInstance } from \"axios\";\nimport { LoaderFunction, LoaderFunctionArgs } from \"react-router\";\nimport { mapMetadata } from \"../../components/metadata/utils\";\n\nconst filterKeys = [\n \"v\", // App version\n \"srv\", // App server\n \"m\", // Message type\n \"p\", // Protocol\n \"s\", // StartTime\n \"d\", // Duration Ms\n \"c\", // Status code\n \"mci\", // Message chain ID\n \"rqsn\", // Requesting system name\n \"rpsn\", // Responding system name\n \"rqs\", // Request size\n \"rps\", // Response size\n \"md\", // Metadata\n \"page\",\n \"size\",\n] as const;\n\ntype BackendFilter = {\n [k in (typeof filterKeys)[number]]?: string;\n};\n\nexport const getMessageLogLoader =\n (backendClient?: AxiosInstance) =>\n async ({ request }: LoaderFunctionArgs): Promise<LogMessageResponse> => {\n try {\n const requestUrl = new URL(request.url);\n\n const filter = filterFromUrlSearchParams<BackendFilter>(\n requestUrl.searchParams,\n [...filterKeys],\n );\n\n const logs = await fetchLogs(filter, backendClient);\n\n if (logs.status !== 200) {\n throw new Error(`Failed to fetch logs: ${logs.data}`);\n }\n\n return logs.data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const loader: LoaderFunction = getMessageLogLoader();\n\nexport const getSingleLogMessageLoader =\n (backendClient?: AxiosInstance) =>\n async ({ params }: LoaderFunctionArgs): Promise<LogMessage> => {\n if (!params.id) {\n throw new Error(\"No message id provided\"); // shouldn't route here without an id\n }\n try {\n const { id } = params;\n const response = await fetchLogById(id, backendClient);\n\n if (response.status !== 200) {\n throw new Error(`Failed to fetch message: ${response.data}`);\n }\n\n return mapMetadata(response.data) as LogMessage;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const singleLogMessageLoader: LoaderFunction =\n getSingleLogMessageLoader();\n","import { getBackendClient } from \"@evolver-fi/evolver-basics\";\nimport { Link } from \"react-router\";\nimport { formatDateTime } from \"../../common/format\";\nimport {\n datetimeRangeValidator,\n numberRangeValidator,\n numberValidator,\n} from \"../../common/validation\";\nimport { FilterLink } from \"../../components/filter/FilterLink\";\nimport { TextFilter } from \"../../components/filter/TextFilter\";\nimport { TableMetadataDisplay } from \"../../components/metadata/TableMetadataDisplay\";\nimport { ColumnDefinitions } from \"../../components/table/types\";\nimport { LogFilter, LogMessage } from \"./types\";\n\nconst LogBodyLink = ({\n size,\n id,\n type,\n}: {\n size: number;\n id: number;\n type: string;\n}) =>\n size ? (\n <Link\n to={`${getBackendClient().defaults.baseURL}/log/${id}/${type}?pretty=true`}\n onClick={(e) => e.stopPropagation()}\n >\n {size}\n </Link>\n ) : (\n size\n );\n\nexport const messageLogColumns: ColumnDefinitions<LogMessage, LogFilter> = [\n {\n key: \"startTime\",\n title: \"Start time\",\n CellComponent: ({ value }) => formatDateTime(value),\n minWidth: 250,\n searchKey: \"s\",\n filterHelperText: \"yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss\",\n filterValidator: datetimeRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"durationMs\",\n title: \"Duration, ms\",\n minWidth: 100,\n searchKey: \"d\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"messageType\",\n title: \"Type\",\n minWidth: 100,\n searchKey: \"m\",\n filterHelperText: \"e.g. ControlValue/list\",\n FilterComponent: TextFilter,\n },\n {\n key: \"protocol\",\n title: \"Protocol\",\n minWidth: 100,\n searchKey: \"p\",\n filterHelperText: \"e.g. http\",\n FilterComponent: TextFilter,\n },\n {\n key: \"requestingSystem\",\n title: \"Requesting System\",\n minWidth: 100,\n searchKey: \"rqsn\",\n FilterComponent: TextFilter,\n },\n {\n key: \"respondingSystem\",\n title: \"Responding System\",\n minWidth: 100,\n searchKey: \"rpsn\",\n FilterComponent: TextFilter,\n },\n {\n key: \"statusCode\",\n title: \"Status\",\n minWidth: 100,\n searchKey: \"c\",\n filterHelperText: \"e.g. 400\",\n FilterComponent: TextFilter,\n },\n {\n key: \"messageChainId\",\n title: \"Message Chain ID\",\n CellComponent: FilterLink,\n minWidth: 150,\n searchKey: \"mci\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"requestSize\",\n title: \"Request size\",\n CellComponent: ({ value, row }) => (\n <LogBodyLink size={value} id={row.id} type=\"request\" />\n ),\n minWidth: 150,\n searchKey: \"rqs\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"responseSize\",\n title: \"Response size\",\n CellComponent: ({ value, row }) => (\n <LogBodyLink size={value} id={row.id} type=\"response\" />\n ),\n minWidth: 150,\n searchKey: \"rps\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"metadata\",\n title: \"Metadata\",\n CellComponent: TableMetadataDisplay,\n minWidth: 150,\n searchKey: \"md\",\n filterHelperText: \"A=a, B=b\",\n FilterComponent: TextFilter,\n },\n];\n","import {\n Form,\n useLoaderData,\n useNavigate,\n useSearchParams,\n} from \"react-router\";\n\nimport { TableContainer } from \"@mui/material\";\nimport { Pagination } from \"../../components/table/Pagination\";\nimport { Table } from \"../../components/table/Table\";\nimport { messageLogColumns } from \"./messageLogColumns\";\nimport { LogFilter, LogMessageResponse } from \"./types\";\n\nconst getRowId = ({ id }: { id: number }) => id;\n\nconst searchParamsToFilter = (params: URLSearchParams): LogFilter => ({\n appVersion: params.get(\"v\") ?? \"\",\n messageType: params.get(\"m\") ?? \"\",\n protocol: params.get(\"p\") ?? \"\",\n startTime: params.get(\"s\") ?? \"\",\n durationMs: params.get(\"d\") ?? \"\",\n statusCode: params.get(\"c\") ?? \"\",\n messageChainId: params.get(\"mci\") ?? \"\",\n requestSize: params.get(\"rqs\") ?? \"\",\n responseSize: params.get(\"rps\") ?? \"\",\n metadata: params.get(\"md\") ?? \"\",\n requestingSystem: params.get(\"rqsn\") ?? \"\",\n respondingSystem: params.get(\"rpsn\") ?? \"\",\n});\n\nconst MessageLogRoute = () => {\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const logMessageResponse = useLoaderData() as LogMessageResponse;\n\n return (\n <>\n <Form method=\"get\">\n <TableContainer sx={{ height: \"calc(100vh - 130px)\" }}>\n <Table\n columns={messageLogColumns}\n rows={logMessageResponse.content}\n getRowId={getRowId}\n onRowClick={(row) => navigate(`./${row.id}`, { relative: \"path\" })}\n defaultFilter={searchParamsToFilter(searchParams)}\n />\n </TableContainer>\n <input type=\"submit\" hidden />\n </Form>\n <Pagination\n page={logMessageResponse.number}\n rowsPerPage={logMessageResponse.size}\n total={logMessageResponse.totalElements}\n onPageChange={(page) => {\n const newParams = new URLSearchParams(searchParams);\n newParams.set(\"page\", String(page));\n setSearchParams(newParams);\n }}\n />\n </>\n );\n};\n\nexport default MessageLogRoute;\n","import { getBackendClient } from \"@evolver-fi/evolver-basics\";\nimport {\n LogMessage,\n LogMessageComponent,\n} from \"@evolver-fi/evolver-basics/message-log\";\nimport { useLoaderData, useNavigate } from \"react-router\";\n\nconst SingleMessageRoute = () => {\n const navigate = useNavigate();\n const message = useLoaderData() as LogMessage;\n\n return (\n <LogMessageComponent\n message={message}\n backAction={() => navigate(\"..\", { relative: \"path\" })}\n downloadDataAction={async function (id: number, type: string): Promise<void> {\n try {\n const response = await getBackendClient().get(`/log/${id}/${type}?pretty=true`, {\n responseType: 'blob'\n });\n\n const blob = new Blob([response.data], {\n type: response.headers['content-type'] || 'application/octet-stream'\n });\n const url = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = url;\n link.download = `log-${id}-${type}.txt`;\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n } catch (error) {\n console.error('Failed to download log data:', error);\n }\n }}\n />\n );\n};\n\nexport default SingleMessageRoute;\n"],"names":["formatterByKey","formatDatetimeRangeFilter","formatNumberRangeFilter","fetchLogs","logFilters","backendClient","client","getBackendClient","searchParams","createFilterQuery","value","key","searchParamsString","fetchLogById","id","fetchLogsAction","createAsyncThunk","thunkApi","response","initialState","createSlice","state","payload","filters","element","builder","LogMessageField","label","isWide","isFull","_jsx","Grid","TextField","LogMessageComponent","message","backAction","downloadDataAction","_jsxs","_Fragment","Button","ArrowBackIcon","formatDateTime","filterKeys","getMessageLogLoader","request","requestUrl","filter","filterFromUrlSearchParams","logs","error","loader","getSingleLogMessageLoader","params","mapMetadata","singleLogMessageLoader","LogBodyLink","size","type","jsx","Link","e","messageLogColumns","datetimeRangeValidator","TextFilter","numberRangeValidator","FilterLink","numberValidator","row","TableMetadataDisplay","getRowId","searchParamsToFilter","MessageLogRoute","navigate","useNavigate","setSearchParams","useSearchParams","logMessageResponse","useLoaderData","jsxs","Fragment","Form","TableContainer","Table","Pagination","page","newParams","SingleMessageRoute","blob","url","link"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -4,7 +4,7 @@ import { F as d, T as l } from "../TextFilter-BKUfkFQe.js";
4
4
  import { F as n } from "../FilterLink-CHw7-m82.js";
5
5
  import { P as T, T as c } from "../Table-DgRqEB1x.js";
6
6
  import { J as u, g as S, l as k } from "../JwtTokensRoute-B3SgLM0q.js";
7
- import { M, S as f, g as p, a as F, l as h, s as b } from "../SingleLogMessageRoute-C9CL51r-.js";
7
+ import { M, S as f, g as p, a as F, l as h, s as b } from "../SingleLogMessageRoute-BT4ghiqv.js";
8
8
  import { M as A, S as w, g as E, a as J, m as B, s as P } from "../SingleMessageRoute-DaaWvgfS.js";
9
9
  import { S as C, h as H, g as q, a as v, c as y, d as z, s as D, b as G, e as I, f as K } from "../ScheduledTasksRoute-CNhOAAKd.js";
10
10
  import { T as O, g as Q, a as U, t as V, l as W } from "../TriggerablesRoute-opCAjNCv.js";
@@ -1,4 +1,4 @@
1
- import { M as g, S as a, g as o, a as L, l as r, s as t } from "../SingleLogMessageRoute-C9CL51r-.js";
1
+ import { M as g, S as a, g as o, a as L, l as r, s as t } from "../SingleLogMessageRoute-BT4ghiqv.js";
2
2
  export {
3
3
  g as MessageLogListRoute,
4
4
  a as SingleMessageLogRoute,
@@ -1,4 +1,4 @@
1
- import { LogMessageResponse, LogMessage } from '@evolver-fi/evolver-basics/message-log';
1
+ import { LogMessage, LogMessageResponse } from '@evolver-fi/evolver-basics/message-log';
2
2
  import { AxiosInstance } from 'axios';
3
3
  import { LoaderFunction, LoaderFunctionArgs } from 'react-router';
4
4
  export declare const getMessageLogLoader: (backendClient?: AxiosInstance) => ({ request }: LoaderFunctionArgs) => Promise<LogMessageResponse>;
@@ -32,4 +32,6 @@ export interface LogFilter {
32
32
  requestSize: string;
33
33
  responseSize: string;
34
34
  metadata: string;
35
+ requestingSystem: string;
36
+ respondingSystem: string;
35
37
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evolver-fi/evolver-basics-admin-components",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "type": "module",
5
5
  "license": "APACHE-2.0",
6
6
  "module": "dist/evolver-basics-admin-ui.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"SingleLogMessageRoute-C9CL51r-.js","sources":["../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/utils/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/actions/index.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/slices/logSlice.js","../../node_modules/@evolver-fi/evolver-basics/dist/esm/message-log/components/LogMessageComponent.js","../src/routes/message-log/loader.ts","../src/routes/message-log/messageLogColumns.tsx","../src/routes/message-log/MessageLogRoute.tsx","../src/routes/message-log/SingleLogMessageRoute.tsx"],"sourcesContent":["import { formatDatetimeRangeFilter, formatNumberRangeFilter, } from '../../common/components/listUtils';\nimport { getBackendClient } from '../../common/evolverClient';\nimport { createFilterQuery } from '../../common/utils/filterUtils';\nexport const formatterByKey = {\n s: formatDatetimeRangeFilter,\n d: formatNumberRangeFilter,\n rqs: formatNumberRangeFilter,\n rps: formatNumberRangeFilter,\n};\nexport const fetchLogs = (logFilters, backendClient) => {\n const client = backendClient || getBackendClient();\n const searchParams = new URLSearchParams();\n createFilterQuery(logFilters, formatterByKey).forEach((value, key) => searchParams.append(key, value));\n const searchParamsString = searchParams.toString() ? `?${searchParams.toString()}` : '';\n return client.get(`log${searchParamsString}`);\n};\nexport const fetchLogById = (id, backendClient) => {\n const client = backendClient || getBackendClient();\n return client.get(`log/${id}`);\n};\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport { fetchLogs } from '../utils';\nexport const fetchLogsAction = createAsyncThunk('logs/fetchLogs', async (logFilters, thunkApi) => {\n const response = await fetchLogs(logFilters);\n if (response.status !== 200) {\n return thunkApi.rejectWithValue({\n message: 'Failed to fetch logs.',\n });\n }\n return response.data;\n});\n","import { createSlice } from '@reduxjs/toolkit';\nimport { fetchLogsAction } from '../actions';\nconst initialState = {\n logMessages: [],\n logMessageTotalCount: 0,\n status: 'loading',\n filters: {\n page: '0',\n size: '100',\n },\n};\nexport const logSlice = createSlice({\n name: 'log',\n initialState,\n reducers: {\n updateLogs(state, { payload }) {\n state.logMessages = payload;\n },\n updateFilters(state, { payload }) {\n state.filters = { ...state.filters, ...payload };\n },\n clearFilters(state, { payload }) {\n const filters = { ...state.filters };\n payload.forEach((element) => {\n delete filters[element];\n });\n state.filters = filters;\n },\n },\n extraReducers: (builder) => {\n builder.addCase(fetchLogsAction.pending, (state) => {\n state.status = 'loading';\n state.error = 'undefined';\n });\n builder.addCase(fetchLogsAction.fulfilled, (state, { payload }) => {\n state.logMessages = payload.content;\n state.logMessageTotalCount = payload.totalElements;\n state.status = 'succeeded';\n });\n builder.addCase(fetchLogsAction.rejected, (state, { payload }) => {\n if (payload) {\n state.error = payload.message;\n }\n state.status = 'failed';\n });\n },\n});\nexport const { updateLogs, updateFilters, clearFilters } = logSlice.actions;\nexport const selectLogs = (state) => state.logs.logMessages;\nexport const selectLogMessageTotalCount = (state) => state.logs.logMessageTotalCount;\nexport const selectFilters = (state) => state.logs.filters;\nexport const selectStatus = (state) => state.logs.status;\nexport default logSlice.reducer;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { Button, Grid, TextField } from '@mui/material';\nimport { formatDateTime } from '../../common/components/listUtils';\nconst LogMessageField = ({ label, value, isWide, isFull, }) => (_jsx(Grid, { item: true, xs: 12, sm: isFull ? 12 : 6, md: isFull ? 12 : isWide ? 6 : 3, children: _jsx(TextField, { label: label, value: value, InputProps: {\n readOnly: true,\n }, InputLabelProps: {\n style: { fontSize: 20 },\n }, multiline: true, fullWidth: true }) }));\nconst LogMessageComponent = ({ message, backAction, downloadDataAction, }) => {\n return (_jsxs(_Fragment, { children: [_jsx(Button, { variant: \"contained\", startIcon: _jsx(ArrowBackIcon, {}), onClick: () => backAction(), sx: {\n marginBottom: 0.5,\n width: 200,\n backgroundColor: 'secondary.main',\n }, children: \"Back\" }), message ? (_jsxs(Grid, { container: true, direction: \"row\", justifyContent: \"flex-start\", spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, md: 12, lg: 12, children: _jsx(\"h1\", { children: \"Message Details\" }) }), _jsx(LogMessageField, { label: \"Sent At\", value: formatDateTime(message.startTime) }), _jsx(LogMessageField, { label: \"Duration, ms\", value: message.durationMs }), _jsx(LogMessageField, { label: \"App Server\", value: message.appServer }), _jsx(LogMessageField, { label: \"App Version\", value: message.appVersion }), _jsx(LogMessageField, { label: \"Type\", value: message.messageType }), _jsx(LogMessageField, { label: \"Protocol\", value: message.protocol }), _jsx(LogMessageField, { label: \"Requesting system\", value: message.requestingSystem }), _jsx(LogMessageField, { label: \"Responding system\", value: message.respondingSystem }), _jsxs(Grid, { item: true, container: true, xs: 12, spacing: 2, children: [_jsx(LogMessageField, { label: \"Request headers\", value: message.requestHeaders, isWide: true }), _jsx(LogMessageField, { label: \"Response headers\", value: message.responseHeaders, isWide: true })] }), _jsx(LogMessageField, { label: \"Address\", value: message.address, isFull: true }), _jsx(LogMessageField, { label: \"Status code\", value: message.statusCode }), _jsx(LogMessageField, { label: \"Status message\", value: message.statusMessage }), _jsx(LogMessageField, { label: \"Message chain ID\", value: message.messageChainId }), _jsx(LogMessageField, { label: \"Request Size (B)\", value: message.requestSize }), _jsx(LogMessageField, { label: \"Response Size (B)\", value: message.responseSize }), _jsx(Grid, { item: true, container: true, xs: 12, spacing: 2, children: _jsx(LogMessageField, { label: \"Metadata\", value: Object.entries(message.metadata)\n .map(([key, value]) => `${key} = ${value}`)\n .join('\\n'), isFull: true }) }), _jsxs(Grid, { container: true, item: true, direction: \"row\", xs: 12, spacing: 2, children: [_jsx(Grid, { item: true, xs: 12, md: 3, children: _jsx(Button, { disabled: message.requestSize === 0, variant: \"contained\", onClick: () => downloadDataAction(message.id, 'request'), sx: { margin: 1, width: 200 }, children: \"Download Request\" }) }), _jsx(Grid, { item: true, xs: 12, md: 3, children: _jsx(Button, { disabled: message.responseSize === 0, variant: \"contained\", onClick: () => downloadDataAction(message.id, 'response'), sx: { margin: 1, width: 200 }, children: \"Download Response\" }) })] })] })) : (_jsx(\"p\", { children: \"No message data found\" }))] }));\n};\nexport default LogMessageComponent;\n","import { filterFromUrlSearchParams } from \"@evolver-fi/evolver-basics\";\nimport {\n fetchLogs,\n LogMessageResponse,\n LogFilter,\n fetchLogById,\n LogMessage,\n} from \"@evolver-fi/evolver-basics/message-log\";\nimport { AxiosInstance } from \"axios\";\nimport { LoaderFunction, LoaderFunctionArgs } from \"react-router\";\nimport { mapMetadata } from \"../../components/metadata/utils\";\n\nexport const getMessageLogLoader =\n (backendClient?: AxiosInstance) =>\n async ({ request }: LoaderFunctionArgs): Promise<LogMessageResponse> => {\n try {\n const requestUrl = new URL(request.url);\n\n const filter = filterFromUrlSearchParams<LogFilter>(\n requestUrl.searchParams,\n [\n \"c\",\n \"p\",\n \"s\",\n \"page\",\n \"size\",\n \"v\",\n \"m\",\n \"p\",\n \"d\",\n \"mci\",\n \"rqs\",\n \"rps\",\n \"md\",\n ]\n );\n\n const logs = await fetchLogs(filter, backendClient);\n\n if (logs.status !== 200) {\n throw new Error(`Failed to fetch logs: ${logs.data}`);\n }\n\n return logs.data;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const loader: LoaderFunction = getMessageLogLoader();\n\nexport const getSingleLogMessageLoader =\n (backendClient?: AxiosInstance) =>\n async ({ params }: LoaderFunctionArgs): Promise<LogMessage> => {\n if (!params.id) {\n throw new Error(\"No message id provided\"); // shouldn't route here without an id\n }\n try {\n const { id } = params;\n const response = await fetchLogById(id, backendClient);\n\n if (response.status !== 200) {\n throw new Error(`Failed to fetch message: ${response.data}`);\n }\n\n return mapMetadata(response.data) as LogMessage;\n } catch (error) {\n console.error(error);\n throw error;\n }\n };\n\nexport const singleLogMessageLoader: LoaderFunction =\n getSingleLogMessageLoader();\n","import { getBackendClient } from \"@evolver-fi/evolver-basics\";\nimport { Link } from \"react-router\";\nimport { formatDateTime } from \"../../common/format\";\nimport {\n datetimeRangeValidator,\n numberRangeValidator,\n numberValidator,\n} from \"../../common/validation\";\nimport { FilterLink } from \"../../components/filter/FilterLink\";\nimport { TextFilter } from \"../../components/filter/TextFilter\";\nimport { TableMetadataDisplay } from \"../../components/metadata/TableMetadataDisplay\";\nimport { ColumnDefinitions } from \"../../components/table/types\";\nimport { LogFilter, LogMessage } from \"./types\";\n\nconst LogBodyLink = ({\n size,\n id,\n type,\n}: {\n size: number;\n id: number;\n type: string;\n}) =>\n size ? (\n <Link\n to={`${getBackendClient().defaults.baseURL}/log/${id}/${type}`}\n onClick={(e) => e.stopPropagation()}\n >\n {size}\n </Link>\n ) : (\n size\n );\n\nexport const messageLogColumns: ColumnDefinitions<LogMessage, LogFilter> = [\n {\n key: \"startTime\",\n title: \"Start time\",\n CellComponent: ({ value }) => formatDateTime(value),\n minWidth: 250,\n searchKey: \"s\",\n filterHelperText: \"yyyy-MM-dd HH:mm:ss - ?yyyy-MM-dd HH:mm:ss\",\n filterValidator: datetimeRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"durationMs\",\n title: \"Duration, ms\",\n minWidth: 100,\n searchKey: \"d\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"messageType\",\n title: \"Type\",\n minWidth: 100,\n searchKey: \"m\",\n filterHelperText: \"e.g. ControlValue/list\",\n FilterComponent: TextFilter,\n },\n {\n key: \"protocol\",\n title: \"Protocol\",\n minWidth: 100,\n searchKey: \"p\",\n filterHelperText: \"e.g. http\",\n FilterComponent: TextFilter,\n },\n {\n key: \"statusCode\",\n title: \"Status\",\n minWidth: 100,\n searchKey: \"c\",\n filterHelperText: \"e.g. 400\",\n FilterComponent: TextFilter,\n },\n {\n key: \"messageChainId\",\n title: \"Message Chain ID\",\n CellComponent: FilterLink,\n minWidth: 150,\n searchKey: \"mci\",\n filterHelperText: \"e.g. 123\",\n filterValidator: numberValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"requestSize\",\n title: \"Request size\",\n CellComponent: ({ value, row }) => (\n <LogBodyLink size={value} id={row.id} type=\"request\" />\n ),\n minWidth: 150,\n searchKey: \"rqs\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"responseSize\",\n title: \"Response size\",\n CellComponent: ({ value, row }) => (\n <LogBodyLink size={value} id={row.id} type=\"response\" />\n ),\n minWidth: 150,\n searchKey: \"rps\",\n filterHelperText: \"number - ?number\",\n filterValidator: numberRangeValidator,\n FilterComponent: TextFilter,\n },\n {\n key: \"metadata\",\n title: \"Metadata\",\n CellComponent: TableMetadataDisplay,\n minWidth: 150,\n searchKey: \"md\",\n filterHelperText: \"A=a, B=b\",\n FilterComponent: TextFilter,\n },\n];\n","import {\n Form,\n useLoaderData,\n useNavigate,\n useSearchParams,\n} from \"react-router\";\n\nimport { TableContainer } from \"@mui/material\";\nimport { Pagination } from \"../../components/table/Pagination\";\nimport { Table } from \"../../components/table/Table\";\nimport { messageLogColumns } from \"./messageLogColumns\";\nimport { LogFilter, LogMessageResponse } from \"./types\";\n\nconst getRowId = ({ id }: { id: number }) => id;\n\nconst searchParamsToFilter = (params: URLSearchParams): LogFilter => ({\n appVersion: params.get(\"v\") ?? \"\",\n messageType: params.get(\"m\") ?? \"\",\n protocol: params.get(\"p\") ?? \"\",\n startTime: params.get(\"s\") ?? \"\",\n durationMs: params.get(\"d\") ?? \"\",\n statusCode: params.get(\"c\") ?? \"\",\n messageChainId: params.get(\"mci\") ?? \"\",\n requestSize: params.get(\"rqs\") ?? \"\",\n responseSize: params.get(\"rps\") ?? \"\",\n metadata: params.get(\"md\") ?? \"\",\n});\n\nconst MessageLogRoute = () => {\n const navigate = useNavigate();\n const [searchParams, setSearchParams] = useSearchParams();\n const logMessageResponse = useLoaderData() as LogMessageResponse;\n\n return (\n <>\n <Form method=\"get\">\n <TableContainer sx={{ height: \"calc(100vh - 130px)\" }}>\n <Table\n columns={messageLogColumns}\n rows={logMessageResponse.content}\n getRowId={getRowId}\n onRowClick={(row) => navigate(`./${row.id}`, { relative: \"path\" })}\n defaultFilter={searchParamsToFilter(searchParams)}\n />\n </TableContainer>\n <input type=\"submit\" hidden />\n </Form>\n <Pagination\n page={logMessageResponse.number}\n rowsPerPage={logMessageResponse.size}\n total={logMessageResponse.totalElements}\n onPageChange={(page) => {\n const newParams = new URLSearchParams(searchParams);\n newParams.set(\"page\", String(page));\n setSearchParams(newParams);\n }}\n />\n </>\n );\n};\n\nexport default MessageLogRoute;\n","import { getBackendClient } from \"@evolver-fi/evolver-basics\";\nimport {\n LogMessage,\n LogMessageComponent,\n} from \"@evolver-fi/evolver-basics/message-log\";\nimport { useLoaderData, useNavigate } from \"react-router\";\n\nconst SingleMessageRoute = () => {\n const navigate = useNavigate();\n const message = useLoaderData() as LogMessage;\n\n return (\n <LogMessageComponent\n message={message}\n backAction={() => navigate(\"..\", { relative: \"path\" })}\n downloadDataAction={async function (id: number, type: string): Promise<void> {\n try {\n const response = await getBackendClient().get(`/log/${id}/${type}`, {\n responseType: 'blob'\n });\n\n const blob = new Blob([response.data], {\n type: response.headers['content-type'] || 'application/octet-stream'\n });\n const url = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = url;\n link.download = `log-${id}-${type}.txt`;\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n } catch (error) {\n console.error('Failed to download log data:', error);\n }\n }}\n />\n );\n};\n\nexport default SingleMessageRoute;\n"],"names":["formatterByKey","formatDatetimeRangeFilter","formatNumberRangeFilter","fetchLogs","logFilters","backendClient","client","getBackendClient","searchParams","createFilterQuery","value","key","searchParamsString","fetchLogById","id","fetchLogsAction","createAsyncThunk","thunkApi","response","initialState","createSlice","state","payload","filters","element","builder","LogMessageField","label","isWide","isFull","_jsx","Grid","TextField","LogMessageComponent","message","backAction","downloadDataAction","_jsxs","_Fragment","Button","ArrowBackIcon","formatDateTime","getMessageLogLoader","request","requestUrl","filter","filterFromUrlSearchParams","logs","error","loader","getSingleLogMessageLoader","params","mapMetadata","singleLogMessageLoader","LogBodyLink","size","type","jsx","Link","e","messageLogColumns","datetimeRangeValidator","TextFilter","numberRangeValidator","FilterLink","numberValidator","row","TableMetadataDisplay","getRowId","searchParamsToFilter","MessageLogRoute","navigate","useNavigate","setSearchParams","useSearchParams","logMessageResponse","useLoaderData","jsxs","Fragment","Form","TableContainer","Table","Pagination","page","newParams","SingleMessageRoute","blob","url","link"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}