OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-registry-client / index.js

131 lines · javascript ref:
const e = require("compact-encoding"),
  t = require("@holepunchto/keet-registry"),
  r = require("@holepunchto/keet-registry/lib/errors"),
  o = require("z32"),
  {
    RecordRequest: s,
    ReserveRequest: n,
    BlockRequest: i,
  } = require("@holepunchto/keet-registry-schema"),
  a = require("protomux-rpc-client-pool")
class c {
  constructor(
    e,
    t,
    { nrRetries: r = 3, requestTimeout: o, timeout: s = 1e4, rateLimit: n = {} } = {},
  ) {
    ;(n.capacity || (n.capacity = 2),
      n.intervalMs || (n.intervalMs = 5e3),
      (this.pool = new a(e, t, { nrRetries: r, totalTimeout: s, rpcTimeout: o, rateLimit: n })))
  }
  get keys() {
    return this.pool.keys
  }
  get timeout() {
    return this.totalTimeout
  }
  get totalTimeout() {
    return this.pool.totalTimeout
  }
  get requestTimeout() {
    return this.pool.rpcTimeout
  }
  get chosenKey() {
    return this.pool.chosenKey
  }
  async putRecord(o, { force: n = !1 } = {}) {
    const { profile: i, attestation: a } = o
    if (!t.verifyAttestation({ profile: i, attestation: a })) throw r.INVALID_ATTESTATION()
    const c = { profile: i, attestation: a }
    try {
      await this.pool.makeRequest("put-record/v2", c, {
        requestEncoding: s,
        responseEncoding: e.none,
      })
    } catch (e) {
      if ("REQUEST_ERROR" !== e.code) throw e
      throw u(e)
    }
  }
  async getDbKey() {
    try {
      return await this.pool.makeRequest("get-db-key", null, {
        requestEncoding: e.none,
        responseEncoding: e.fixed32,
      })
    } catch (e) {
      if ("REQUEST_ERROR" !== e.code) throw e
      throw u(e)
    }
  }
  async reserve(t) {
    try {
      return await this.pool.makeRequest("reserve", t, {
        requestEncoding: n,
        responseEncoding: e.bool,
      })
    } catch (e) {
      if ("REQUEST_ERROR" !== e.code) throw e
      throw u(e)
    }
  }
  async getIp(t) {
    "string" == typeof t && (t = o.decode(t))
    try {
      return await this.pool.makeRequest("get-ip", t, {
        requestEncoding: e.buffer,
        responseEncoding: e.ipv4,
      })
    } catch (e) {
      if ("REQUEST_ERROR" !== e.code) throw e
      throw u(e)
    }
  }
  async block({ memberKey: t, reason: r = "" }) {
    try {
      return await this.pool.makeRequest(
        "block",
        { memberKey: t, reason: r },
        { requestEncoding: i, responseEncoding: e.none },
      )
    } catch (e) {
      if ("REQUEST_ERROR" !== e.code) throw e
      throw u(e)
    }
  }
  reservationData(e) {
    return t.encodeReservation({ username: e })
  }
  destroy() {
    this.pool.destroy()
  }
}
function u(e) {
  const t = e.cause
  switch (t.code) {
    case "NAME_UNAVAILABLE":
      return r.NAME_UNAVAILABLE(t.message)
    case "INVALID_NAME":
      return r.INVALID_NAME(t.message)
    case "KEY_EXISTS":
      return r.KEY_EXISTS(t.message)
    case "UNKNOWN_KEY":
      return r.UNKNOWN_KEY(t.message)
    case "INVALID_ATTESTATION":
      return r.INVALID_ATTESTATION(t.message)
    case "OUTDATED_CLOCK":
      return r.OUTDATED_CLOCK(t.message)
    case "INVALID_AVATAR":
      return r.INVALID_AVATAR(t.message)
    case "EXCEEDS_RECORD_LIMIT":
      return r.EXCEEDS_RECORD_LIMIT(t.message)
    case "EXCEEDS_RESERVATION_LIMIT":
      return r.EXCEEDS_RESERVATION_LIMIT(t.message)
    case "NO_ACCESS":
      return new r(t.message, "NO_ACCESS")
    default:
      return new r(t.message, "REQUEST_ERROR")
  }
}
module.exports = c