OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / syslog / syslog.saga.js

138 lines · javascript ref:
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),
})