OverviewFilesCommitsIssuesDocsReleasesPeers

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

1 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");function c(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=class{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 u={profile:i,attestation:a};try{await this.pool.makeRequest("put-record/v2",u,{requestEncoding:s,responseEncoding:e.none})}catch(e){if("REQUEST_ERROR"!==e.code)throw e;throw c(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 c(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 c(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 c(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 c(e)}}reservationData(e){return t.encodeReservation({username:e})}destroy(){this.pool.destroy()}};