import { call as e } from "redux-saga/effects"
const t = { START: "GET_START", DATA: "GET_DATA", ERROR: "GET_ERROR" }
export function parseData(e, t) {
if (null === e || "object" != typeof e || Array.isArray(e)) return t(e)
const r = {}
return (
Object.keys(e).forEach((o) => {
r[o] = t(e[o])
}),
r
)
}
function r(e) {
return "string" == typeof e
? `String<${e.length}>`
: "number" == typeof e || "boolean" == typeof e
? e
: Array.isArray(e)
? `Array<${e.length}>`
: null === e
? null
: "object" == typeof e
? `Object<${Object.keys(e).length}>`
: void 0 === e
? "undefined"
: "unsupported value"
}
function o(e) {
return "string" == typeof e
? e.length > 6
? `${e.slice(0, 6)}...`
: e
: "number" == typeof e || "boolean" == typeof e
? e
: Array.isArray(e)
? `Array<${e.length}>`
: null === e
? null
: "object" == typeof e
? `Object<${Object.keys(e).length}>`
: void 0 === e
? "undefined"
: "unsupported value"
}
export function parseApiResponse(e) {
return parseData(e, r)
}
export function parseApiRequest(e) {
return Array.isArray(e) && e.length ? e.map((e) => parseData(e, o)) : e
}
export function apiCallWithSyslog(r) {
return function* (o, ...n) {
const a = Date.now(),
s = parseApiRequest(n.map((e) => (e instanceof Uint8Array ? "arrayBuffer" : e)))
r({ method: o.name, startTime: a, args: s, logType: t.START })
try {
const i = yield e(o, ...n),
p = Date.now()
return (
r({
method: o.name,
executionTime: p - a,
endTime: p,
args: s,
response: parseApiResponse(i),
logType: t.DATA,
}),
i
)
} catch (e) {
throw (r({ method: o.name, error: e, startTime: a, logType: t.ERROR }), e)
}
}
}
export function apiCallPromiseWithSyslog(e) {
return async function (r, o) {
const n = Date.now(),
a = parseApiRequest(o)
e({ method: r.name, startTime: n, args: a, logType: t.START })
try {
const s = await r(...o),
i = Date.now()
return (
e({
method: r.name,
executionTime: i - n,
endTime: i,
args: a,
response: parseApiResponse(s),
logType: t.DATA,
}),
s
)
} catch (o) {
throw (e({ method: r.name, error: o, startTime: n, logType: t.ERROR }), o)
}
}
}
const n = "unknown-api-method",
a =
(e) =>
({ method: t, args: r, startTime: o, logType: a }) =>
e({ method: t?.name || n, startTime: o, args: parseApiRequest(r), logType: a }),
s =
(e) =>
({ method: t, startTime: r, endTime: o, logType: a }) =>
e({
method: t?.name || n,
startTime: r,
endTime: o,
passedSinceSubscribe: o - r,
logType: a,
}),
i =
(e) =>
({ method: t, response: r, startTime: o, dataTime: a, args: s, counter: i, logType: p }) =>
e({
method: t?.name || n,
response: parseApiResponse(r),
startTime: o,
dataTime: a,
args: parseApiRequest(s),
passedSinceSubscribe: a - o,
counter: i,
logType: p,
}),
p =
(e) =>
({ method: t, error: r, startTime: o, logType: a }) => {
e({ method: t?.name || n, error: r, startTime: o, logType: a })
}
export const apiSubscriptionLifecycleMethods = (e) => ({
onStart: a(e),
onEnd: s(e),
onData: i(e),
onError: p(e),
})