OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / media / media-permissions.saga.js

123 lines · javascript ref:
import { put as e, all as i, call as s, select as r, getContext as t } from "redux-saga/effects"
import { taskErrorSaga as o } from "../error"
import { PERMISSIONS as n } from "./media-constraints"
import { ENV_CONTEXT_KEY as c, PLATFORM_CONTEXT_KEY as a } from "../constants"
import {
  checkDevicePermissionCompleted as d,
  getMediaPermissionCamera as m,
  getMediaPermissionMic as l,
  getMediaPermissionShareScreen as y,
  setMediaPermissions as u,
} from "./device.reducer"
import { DEVICE_PERMISSION as h } from "./device.constants"
const p = (e) => e === n.GRANTED || e === n.UNSUPPORTED
export function* isMediaPermissionsSupported() {
  const { isMac: e, isMobile: i } = yield t(c)
  return e || i
}
export function* cacheAllMediaPermissions() {
  if (yield isMediaPermissionsSupported())
    try {
      const { media: r } = yield t(a),
        [o, n] = yield i([s([r.status, r.status.microphone]), s([r.status, r.status.camera])])
      yield e(u({ mic: o, camera: n }))
    } catch (e) {
      yield o("cacheAllMediaPermissions", e)
    }
}
export function* requestMicPermissionSaga() {
  const { media: e } = yield t(a)
  try {
    const i = yield s([e.access, e.access.microphone])
    return p(i)
  } catch (e) {
    yield o("requestMicrophonePermissionSaga", e)
  }
  return !1
}
export function* requestCameraPermissionSaga() {
  const { media: e } = yield t(a)
  try {
    const i = yield s([e.access, e.access.camera])
    return p(i)
  } catch (e) {
    yield o("requestMicrophonePermissionSaga", e)
  }
  return !1
}
export function* requestScreenPermissionSaga() {
  const { media: e } = yield t(a)
  try {
    const i = yield s([e.access, e.access.screen])
    return p(i)
  } catch (e) {
    yield o("requestMicrophonePermissionSaga", e)
  }
  return !1
}
export function* checkMicPermissionGranted(i) {
  const n = yield r(l)
  let c = n
  const { media: m } = yield t(a)
  try {
    c = yield s([m.status, m.status.microphone])
  } catch (e) {
    yield o("checkMicrophonePermission", e)
  }
  c !== n && (yield e(u({ mic: c })))
  let y = p(c)
  return (
    y || (y = yield s(requestMicPermissionSaga)),
    yield e(
      d({
        permission: h.MICROPHONE,
        isGranted: y,
        showPermissionDeniedModal: i?.showPermissionDeniedModal,
      }),
    ),
    y
  )
}
export function* checkCameraPermissionGranted(i) {
  const n = yield r(m)
  let c = n
  const { media: l } = yield t(a)
  try {
    c = yield s([l.status, l.status.camera])
  } catch (e) {
    yield o("checkCameraPermission", e)
  }
  c !== n && (yield e(u({ camera: c })))
  let y = p(c)
  return (
    y || (y = yield s(requestCameraPermissionSaga)),
    yield e(
      d({
        permission: h.CAMERA,
        isGranted: y,
        showPermissionDeniedModal: i?.showPermissionDeniedModal,
      }),
    ),
    y
  )
}
export function* checkScreenSharePermissionGranted() {
  const { isMac: i, isMobile: n } = yield t(c)
  if (!i && !n) return !0
  const m = yield r(y)
  let l = m
  try {
    const { media: e } = yield t(a)
    l = yield s([e.status, e.status.screen])
  } catch (e) {
    yield o("checkScreenShareSaga", e)
  }
  l !== m && (yield e(u({ shareScreen: l })))
  let P = p(l)
  return (
    P || (P = yield s(requestScreenPermissionSaga)),
    yield e(d({ permission: h.SCREEN_SHARE, isGranted: P, showPermissionDeniedModal: !0 })),
    P
  )
}