diff --git a/docs/assets/icons.js b/docs/assets/icons.js new file mode 100644 index 0000000..b79c9e8 --- /dev/null +++ b/docs/assets/icons.js @@ -0,0 +1,15 @@ +(function(svg) { + svg.innerHTML = ``; + svg.style.display = 'none'; + if (location.protocol === 'file:') { + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); + else updateUseElements() + function updateUseElements() { + document.querySelectorAll('use').forEach(el => { + if (el.getAttribute('href').includes('#icon-')) { + el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); + } + }); + } + } +})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file diff --git a/docs/assets/icons.svg b/docs/assets/icons.svg new file mode 100644 index 0000000..7dead61 --- /dev/null +++ b/docs/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js index d0aa8d5..7352c36 100644 --- a/docs/assets/main.js +++ b/docs/assets/main.js @@ -1,8 +1,8 @@ "use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||this.scrollToHash()}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.updateIndexHeadingVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.updateIndexHeadingVisibility()}updateIndexHeadingVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index af20ceb..0645b2f 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA6WY23LTMBCG3yXXDIUO57v0SIcWMg2FC4YL4WxsTWTJo0NoYXh3JLtJbEdaSemt9/+/lWRptfaPvxMN93ryYXJL+GquiTZq8mzSEF3ZZ8BNrY52keeVrpkNryhfTD68+/ds5zYMFOh97+PzsHM6u9qZCkaUAnVkHw4dL49HnnMphfQa2wjmPgGia9LszJRrkEtSWP9jbGg/fv1m335Gl0taGKYfplpL+stoUBjSpz8wzYU0VGcn61wHprwhnJLcjK3pwIRflMlNZy0HJvtK6ErkpmtNCQnP7zXwBSww/kaTgftOdXVBKNO0xjee13BooseYPdKQMa0IImEwM1KssEwunoJh5KEQhmuUtRElAO8UyHkhJGDArSgB6JZqt0IYdajMRp9WUKyUqW/IfSHqX+j2x50JqSNTSRu/VaWcpZ4sDzpjBj1II2kevLeEmZPwOLHUpxXhJTBRnhjKWvP2CXBbu0B9A6mo4P65ptvzBnHXLIgtmloCqVMzDzxPSDeewSHpx4zIcLTTc2ChVJt4IsYN5wy0LaHBwXukMfgNKEVKf+nqxTHM+RoCxbSNRK3ToqKwhhql9ERRINbc9QWpIPzG8CpT0aGiONJk4KZNI8Xa/0L90gz4GTB7ZaewO2UG+hbWNG3YnTID3R3iFHSnzEIzQfxV3KuMot2HVhjnokmIa6GQjbVRRFGuawljXDQJMTdNI6SeloRyHNdX5qAvqMQmPFbmoC/pMo3shElgTmro7hKcu9Nh2AshTT0Lve9tNIr4KhpahBltGIN8MguhzEeqtJAPXs5AgaGugSwCG68LYeYboovK620jUesVX/ob4W0URdgPRNrYawD7JhiLcoD+y39PhSE/w28V3DCbYAqgbQ2F9XL9maxpSbRtClGq14GlcjcqszvmSkPtJfcFKEgwZjMvaenHbMMYxBVOykv/O9gEUwCnrkkIHJORJgU3b4RmtKz8r3RPhSKF8C+0C2DG8HaP7vFW4LZG+OwOJUmw4OU1UCSjsK7SJ8wFRzpC3IImAyKL6haUrRHhNRmJUoHf6YpGgU6EAtHtm7RttyK3RDMiNS1oQ7gO9+2oA0vVNYnz9pvQS+4LUFDoZcRegIujfxD6glSQWwb3i9/WUlooufczP4D322JJ55QBL/zlohePYraJw6StJB3W3VJt9ZWhfhx15KVC98G+NAbvjSVI7WkycKf2azE80rEwF3wphWnUbr6PbXVyvoD/qcOInoRUQMpAuhYZTdVJMJgrt7PQT51NEO05Ra+s6IfGNZhiXEhevH/78vVxv8OSYmmP7Yn7BSXH/kEwRrJ3XQNjQvsw5izB4m3xnRpdCUn/tP3l3e31DrY0vHAP1VFIO8zx5tW/n/8BgVgsKiIdAAA=" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA6WZTXPbNhCG/4vOblJ7krT1TbHjxK2dauy4OWR8gClIwogCOACo2s34vxcgKRIAgV3QvnLfffC1WGDBHz9nmj7q2ensIyV6R6rZ0awiemM+7MSyLql62xnebPSuNNYt48vZ6bujWbFh5VJSPjv90UPO2WrFirrUT3OtJXuoNVVpYkyd1cyFrJl2wIxrKlekwNitn9/EyfsPz0c9+ZpwRqaDGzeI+7eqp1ONE8T8RthWTKc2bhB3zp8Gqn6qMKDRB7hf//jt+P3J870D/fSoKV/SZToaDoqsCPjO9OaCsFKzHYUDocd6LtD4PWGHUdQagxFktzaGZLd/TR4LsXuA1zne6sF13Ja7MPCWzQyqX46hAY3XHhgDjFqQYgtirAAElOSpEDXXMOWgwtZpWFmQ50vzoWcbWmxVvcuKAtgVjoLYOIINOup4YmuiO92CJm32RVmDIekBrThzgnPi0mNHfOFpndpCLPhd3tmG8DUtxXo8ub0pa0o/1uYbBGkE2am496PcpASq/qFSMcHjqxY2AgGwlbyrlsTkHy0p2eW35nlNaiLs58uaDCnworeut40rtGSuLnvlrppePdh+3ikq06kx0U6KgaQbP/zScwefBvGZQTudscsiadB+zZpW2yinZYLQWbMX6Jxqc6AnA20AOmI8iXj9SxDhub+mSpE1TVM6Abh+JlpuWUl5AXAcEZJs95RH1q35nDXdc/OR7umOJrZAS3JU0NhG9dQIFC2sohD40uLRsm4uyK3FAyL3lUE1ryop9vGFDImdNg98Tktzcc7ittI87A3ds8zuttI8bJtosrCtNBdbChJPmWOslULYG8Ljt+gWZc2Y+5VQUPAcJNjuBxDWjCaPuqqE1PM1YRxBudJM7AWT4CBDaSb2M1tlUq0Sg3Kyo+0xhzAH4cTiv0t7qSrf8+2icM65yUFFkEoDXESb0cINLYxwXmi2ZzrdV1+Gv09cCFlHblfN57wiJbUhWsQC2QzfRMUKwL+xw+fftanJWWXyv7utDgNxjFnDuaJkmdieLqqVwS9qutignEaFYi75Kl4Cj1BWiT0DlEzpS03jN0eX6IrBvCgEDrMiCHJbCBnfyi6lUaGY+K1xxEHui1/pv5FHXPv1dRujIWD7wtqbAlEYR66/kj1bE21KQxgZdYGHaY8sxteRoR4sebd/e/mST9Hu9aBOBC5gJXTJ1pv43PWkXvaik7bHxA/b+3RcHuYmEohAMZNOBi2n16BFeWpEAwe7Pxw00EXdp2Vc2AMpctGO4qF7t7cglMhic0OV2c6RdXGsWcuTnlGXhE/qluEUq0IGN47+fmTxiAeibkGkZgWrCNfpKmrAxlyQFxoVO3LHczX5xbRBTP4xcqtNulOm/0paCk38KvPhcUdklXp9ouuDIP8psU2NMlWihNzA58WJI8bFsyL4wOtNMPya8le9FKr+YtoWibOjgXky8PSIrEx6sHDfnBlOwxxRJutM7KGlCJVTqJ+lqCs1jK8rp/IbSwBe0wd8K+YSsF60QQK302rg2P5OH25FsaU68bDm23OfRnX3uvinSJTsATZwgQbvSE1dknjbSeMbH4zfvWqai2YuffCYWHcHrKzf7PZCZyPG/WFGeb1rr3qtxaf87nqPYrTzjUae6zlfXA5ORUmUMgMwH32P45PA55OUQkYdGwvkDV3bOhuc1jpR89ySrLlC0SteVQcz8rfc323hWw7yf1yUpal7VmwdJQzml5WgjQXuAVy39Fbkxw50SmOn1ZYtUj8mDkbwpUEsw51oPmEvU2ZmKhr6NR8xzzXlVBJN57XeCMn+a0rVu5urAbaqeWE/qrcprd/Gh3fP9/8DFilp3dklAAA=" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 0272299..2eaa879 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index 108428c..98a4377 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -11,6 +11,7 @@ --light-color-text-aside: #6e6e6e; --light-color-link: #1f70c2; + --light-color-ts-keyword: #056bd6; --light-color-ts-project: #b111c9; --light-color-ts-module: var(--light-color-ts-project); --light-color-ts-namespace: var(--light-color-ts-project); @@ -28,7 +29,7 @@ --light-color-ts-constructor-signature: var(--light-color-ts-constructor); --light-color-ts-parameter: var(--light-color-ts-variable); /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); + --light-color-ts-type-parameter: #a55c0e; --light-color-ts-accessor: var(--light-color-ts-property); --light-color-ts-get-signature: var(--light-color-ts-accessor); --light-color-ts-set-signature: var(--light-color-ts-accessor); @@ -50,6 +51,7 @@ --dark-color-text-aside: #dddddd; --dark-color-link: #00aff4; + --dark-color-ts-keyword: #3399ff; --dark-color-ts-project: #e358ff; --dark-color-ts-module: var(--dark-color-ts-project); --dark-color-ts-namespace: var(--dark-color-ts-project); @@ -67,7 +69,7 @@ --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); --dark-color-ts-parameter: var(--dark-color-ts-variable); /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); + --dark-color-ts-type-parameter: #e07d13; --dark-color-ts-accessor: var(--dark-color-ts-property); --dark-color-ts-get-signature: var(--dark-color-ts-accessor); --dark-color-ts-set-signature: var(--dark-color-ts-accessor); @@ -91,6 +93,7 @@ --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); + --color-ts-keyword: var(--light-color-ts-keyword); --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); --color-ts-enum: var(--light-color-ts-enum); @@ -132,6 +135,7 @@ --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); + --color-ts-keyword: var(--dark-color-ts-keyword); --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); --color-ts-enum: var(--dark-color-ts-enum); @@ -180,6 +184,7 @@ body { --color-text-aside: var(--light-color-text-aside); --color-link: var(--light-color-link); + --color-ts-keyword: var(--light-color-ts-keyword); --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); --color-ts-enum: var(--light-color-ts-enum); @@ -219,6 +224,7 @@ body { --color-text-aside: var(--dark-color-text-aside); --color-link: var(--dark-color-link); + --color-ts-keyword: var(--dark-color-ts-keyword); --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); --color-ts-enum: var(--dark-color-ts-enum); @@ -260,12 +266,12 @@ h6 { line-height: 1.2; } -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { +h1 > a:not(.link), +h2 > a:not(.link), +h3 > a:not(.link), +h4 > a:not(.link), +h5 > a:not(.link), +h6 > a:not(.link) { text-decoration: none; color: var(--color-text); } @@ -643,6 +649,28 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { font-weight: bold; } +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + .tsd-panel-group.tsd-index-group { margin-bottom: 0; } @@ -708,12 +736,15 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-navigation > a, .tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); + width: calc(100% - 0.25rem); + display: flex; + align-items: center; } .tsd-navigation a, .tsd-navigation summary > span, .tsd-page-navigation a { - display: inline-flex; + display: flex; + width: calc(100% - 0.25rem); align-items: center; padding: 0.25rem; color: var(--color-text); @@ -753,11 +784,6 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-left: -1.5rem; } -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - .tsd-page-navigation ul { padding-left: 1.75rem; } @@ -984,6 +1010,11 @@ a.tsd-index-link { overflow-x: auto; } +.tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; +} + .tsd-signature-symbol { color: var(--color-text-aside); font-weight: normal; diff --git a/docs/classes/API.html b/docs/classes/API.html index c39ab50..eafb66b 100644 --- a/docs/classes/API.html +++ b/docs/classes/API.html @@ -1,324 +1,328 @@ -API | osu-api-v2-js

You can create an API instance using its createAsync function!

-

Hierarchy

  • API

Constructors

Properties

access_token: string
client: {
    id: number;
    secret: string;
}

Type declaration

  • id: number
  • secret: string
expires: Date
refresh_token?: string

Valid for an unknown amount of time, allows you to get a new token without going through the Authorization Code Grant! Use the API's refreshToken function to do that

-
scopes: Scope[]
server: string

(default https://osu.ppy.sh) The base url of the server where the requests should land

+
scopes: Scope[]
server: string

(default https://osu.ppy.sh) The base url of the server where the requests should land

Remarks

For tokens, requests will be sent to the oauth/token route, other requests will be sent to the api/v2 route

-
token_type: string

Should always be "Bearer"

-
user?: number

The osu! user id of the user who went through the Authorization Code Grant

-
verbose: "all" | "none" | "errors"

(default none) Which events should be logged

-

Methods

  • Create a new announcement!

    -

    Parameters

    • channel: {
          description: string;
          name: string;
      }

      Details of the channel you're creating

      -
      • description: string
      • name: string
    • user_targets: (User | {
          id: number;
      })[]

      The people that will receive your message

      -
    • message: string

      The message to send with the announcement

      -

    Returns Promise<ChatChannel>

    The newly created channel!

    -

    Remarks

    From my understanding, this WILL 403 unless the user is kinda special

    -

    Scope

    chat.write_manage

    -
  • Create/Open/Join a private messages chat channel!

    -

    Parameters

    • user_target: User | {
          id: number;
      }

      The other user able to read and send messages in this channel

      -

    Returns Promise<ChatChannel>

    The newly created channel!

    -

    Scope

    chat.write_manage

    -
  • Create a new ForumTopic in the forum of your choice!

    -

    Parameters

    • forum_id: number

      The id of the forum you're creating your topic in

      -
    • title: string

      The topic's title

      -
    • text: string

      The first post's content/message

      -
    • Optional poll: PollConfig

      If you want to make a poll, specify the parameters of that poll!

      -

    Returns Promise<{
        post: ForumPost;
        topic: ForumTopic;
    }>

    An object with the topic you've made, and its first initial post (which uses your text)

    -

    Remarks

    Some users may not be allowed to do that, such as newly registered users, so this can 403 even with the right scopes

    -

    Scope

    forum.write

    -
  • Edit a ForumPost! Note that it can be the initial one of a ForumTopic!

    -

    Parameters

    • post: ForumPost | {
          id: number;
      }

      An object with the id of the post in question

      -
    • new_text: string

      The new content of the post (replaces the old content)

      -

    Returns Promise<ForumPost>

    The edited ForumPost

    -

    Scope

    forum.write

    -
  • Edit the title of a ForumTopic!

    -

    Parameters

    • topic: ForumTopic | {
          id: number;
      }

      An object with the id of the topic in question

      -
    • new_title: string

      The new title of the topic

      -

    Returns Promise<ForumTopic>

    The edited ForumTopic

    -

    Remarks

    Use editForumPost if you wanna edit the post at the top of the topic

    -

    Scope

    forum.write

    -
  • Get various data about the difficulty of a ctb beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<BeatmapDifficultyAttributesFruits>

  • Get various data about the difficulty of a mania beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<BeatmapDifficultyAttributesMania>

  • Get various data about the difficulty of an osu! beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<BeatmapDifficultyAttributesOsu>

  • Get various data about the difficulty of a taiko beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      -

    Returns Promise<BeatmapDifficultyAttributesTaiko>

  • Get data about a BeatmapPack using its tag!

    -

    Parameters

    • pack: BeatmapPack | {
          tag: string;
      }

      An object with the tag of the beatmappack you're trying to get

      -

    Returns Promise<BeatmapPack>

    Remarks

    Currently in https://osu.ppy.sh/beatmaps/packs, when hovering a pack, its link with its tag should show up on your browser's bottom left

    -
  • Get an Array of up to 100 BeatmapPacks of a specific type!

    -

    Parameters

    • type: "standard" | "loved" | "featured" | "tournament" | "chart" | "theme" | "artist" = "standard"

      The type of the BeatmapPacks, defaults to "standard"

      -

    Returns Promise<BeatmapPack[]>

  • Get the top scores of a beatmap!

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      -
    • Optional ruleset: Rulesets

      The Ruleset used to make the scores, useful if they were made on a convert

      -
    • Optional mods: string[]

      (2023-11-16) Currently doesn't do anything

      -
    • Optional type: string

      (2023-11-16) Currently doesn't do anything

      -

    Returns Promise<ScoreWithUser[]>

  • Get the score on a beatmap made by a specific user (with specific mods and on a specific ruleset if needed)

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap the score was made on

      -
    • user: User | {
          id: number;
      }

      The User who made the score

      -
    • Optional mods: string[]

      The Mods used to make the score, defaults to any, you can use ["NM"] to filter out scores with mods

      -
    • Optional ruleset: Rulesets

      The Ruleset used to make the score, useful if it was made on a convert

      -

    Returns Promise<BeatmapUserScore>

    An Object with the position of the score according to the specified Mods and Ruleset, and with the score itself

    -
  • Get the score on a beatmap made by a specific user (with the possibility to specify if the scores are on a convert)

    -

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap the scores were made on

      -
    • user: User | {
          id: number;
      }

      The User who made the scores

      -
    • Optional ruleset: Rulesets

      The Ruleset used to make the scores, defaults to the Ruleset the Beatmap was made for

      -

    Returns Promise<Score[]>

  • Get extensive beatmap data for up to 50 beatmaps at once!

    -

    Parameters

    • Optional ids: number[]

      An array composed of the ids of the beatmaps you want

      -

    Returns Promise<BeatmapExtended[]>

  • Get up to 21 versions/updates/builds!

    -

    Parameters

    • Optional versions: {
          from?: string;
          to?: string;
      }

      Get builds that were released before/after (and including) those versions (use the name of the versions, e.g. 2023.1109.0)

      -
      • Optional from?: string
      • Optional to?: string
    • Optional max_id: number

      Filter out builds that have an id higher than this (this takes priority over versions.to)

      -
    • Optional stream: string

      Only get builds from a specific stream

      -
    • message_formats: ("html" | "markdown")[] = ...

      Each element of changelog_entries will have a message property if markdown, message_html if html, defaults to both

      -

    Returns Promise<ChangelogBuildWithUpdatestreamsChangelogentries[]>

  • An effective way to get all available streams, as well as their latest version!

    -

    Returns Promise<UpdateStream[]>

    Example

    const names_of_streams = (await api.getChangelogStreams()).map(s => s.name)
    +
token_type: string

Should always be "Bearer"

+
user?: number

The osu! user id of the user who went through the Authorization Code Grant

+
verbose: "all" | "none" | "errors"

(default none) Which events should be logged

+

Methods

  • Create a new announcement!

    +

    Parameters

    • channel: {
          description: string;
          name: string;
      }

      Details of the channel you're creating

      +
      • description: string
      • name: string
    • user_targets: (User | {
          id: number;
      })[]

      The people that will receive your message

      +
    • message: string

      The message to send with the announcement

      +

    Returns Promise<Channel>

    The newly created channel!

    +

    Scope

    "chat.write_manage"

    +

    Remarks

    From my understanding, this WILL 403 unless the user is kinda special

    +
  • Create/Open/Join a private messages chat channel!

    +

    Parameters

    • user_target: User | {
          id: number;
      }

      The other user able to read and send messages in this channel

      +

    Returns Promise<Channel>

    The newly created channel!

    +
  • Create a new ForumTopic in the forum of your choice!

    +

    Parameters

    • forum_id: number

      The id of the forum you're creating your topic in

      +
    • title: string

      The topic's title

      +
    • text: string

      The first post's content/message

      +
    • Optional poll: PollConfig

      If you want to make a poll, specify the parameters of that poll!

      +

    Returns Promise<{
        post: Forum.Post;
        topic: Topic;
    }>

    An object with the topic you've made, and its first initial post (which uses your text)

    +

    Scope

    "forum.write"

    +

    Remarks

    Some users may not be allowed to do that, such as newly registered users, so this can 403 even with the right scopes

    +
  • Edit a ForumPost! Note that it can be the initial one of a ForumTopic!

    +

    Parameters

    • post: Forum.Post | {
          id: number;
      }

      An object with the id of the post in question

      +
    • new_text: string

      The new content of the post (replaces the old content)

      +

    Returns Promise<Forum.Post>

    The edited ForumPost

    +
  • Edit the title of a ForumTopic!

    +

    Parameters

    • topic: Topic | {
          id: number;
      }

      An object with the id of the topic in question

      +
    • new_title: string

      The new title of the topic

      +

    Returns Promise<Topic>

    The edited ForumTopic

    +

    Scope

    "forum.write"

    +

    Remarks

    Use editForumPost if you wanna edit the post at the top of the topic

    +
  • Returns WebSocket

  • Get various data about the difficulty of a beatmap!

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      +
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      +
    • Optional ruleset: Rulesets

      (defaults to the ruleset the beatmap was intended for) Useful to specify if the beatmap is a convert

      +

    Returns Promise<DifficultyAttributes | Beatmap.DifficultyAttributes.Any>

    Remarks

    You may want to use getBeatmapDifficultyAttributesOsu (or Taiko or whatever) instead for better type safety

    +
  • Get various data about the difficulty of a ctb beatmap!

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      +
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      +

    Returns Promise<Fruits>

  • Get various data about the difficulty of a mania beatmap!

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      +
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      +

    Returns Promise<Mania>

  • Get various data about the difficulty of an osu! beatmap!

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      +
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      +

    Returns Promise<Osu>

  • Get various data about the difficulty of a taiko beatmap!

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      +
    • Optional mods: number | string[] | Mod[]

      (defaults to No Mod) (will ignore mod settings) Can be a bitset of mods, an array of mod acronyms ("DT" for DoubleTime), or an array of Mods

      +

    Returns Promise<Taiko>

  • Get data about a BeatmapPack using its tag!

    +

    Parameters

    • pack: Pack | {
          tag: string;
      }

      An object with the tag of the beatmappack you're trying to get

      +

    Returns Promise<Pack>

    Remarks

    Currently in https://osu.ppy.sh/beatmaps/packs, when hovering a pack, its link with its tag should show up on your browser's bottom left

    +
  • Get an Array of up to 100 BeatmapPacks of a specific type!

    +

    Parameters

    • type: "standard" | "loved" | "featured" | "tournament" | "chart" | "theme" | "artist" = "standard"

      The type of the BeatmapPacks, defaults to "standard"

      +

    Returns Promise<Pack[]>

  • Get the top scores of a beatmap!

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap in question

      +
    • Optional ruleset: Rulesets

      The Ruleset used to make the scores, useful if they were made on a convert

      +
    • Optional mods: string[]

      (2023-11-16) Currently doesn't do anything

      +
    • Optional type: string

      (2023-11-16) Currently doesn't do anything

      +

    Returns Promise<Score.WithUser[]>

  • Get the score on a beatmap made by a specific user (with specific mods and on a specific ruleset if needed)

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap the score was made on

      +
    • user: User | {
          id: number;
      }

      The User who made the score

      +
    • Optional mods: string[]

      The Mods used to make the score, defaults to any, you can use ["NM"] to filter out scores with mods

      +
    • Optional ruleset: Rulesets

      The Ruleset used to make the score, useful if it was made on a convert

      +

    Returns Promise<BeatmapUserScore>

    An Object with the position of the score according to the specified Mods and Ruleset, and with the score itself

    +
  • Get the score on a beatmap made by a specific user (with the possibility to specify if the scores are on a convert)

    +

    Parameters

    • beatmap: Beatmap | {
          id: number;
      }

      The Beatmap the scores were made on

      +
    • user: User | {
          id: number;
      }

      The User who made the scores

      +
    • Optional ruleset: Rulesets

      The Ruleset used to make the scores, defaults to the Ruleset the Beatmap was made for

      +

    Returns Promise<Score[]>

  • Get extensive beatmap data for up to 50 beatmaps at once!

    +

    Parameters

    • beatmaps: (Beatmap | {
          id: number;
      })[]

      An array of beatmaps or of objects that have the id of the beatmaps you're trying to get

      +

    Returns Promise<WithFailtimesMaxcombo[]>

  • Get extensive beatmapset data about whichever beatmapset you want!

    +

    Parameters

    • beatmapset: Beatmapset | {
          id: number;
      }

      An object with the id of the beatmapset you're trying to get

      +

    Returns Promise<Plus>

  • Get details about the version/update/build of something related to osu!

    +

    Parameters

    • stream: string

      The name of the thing related to osu!, like lazer, web, cuttingedge, beta40, stable40

      +
    • build: string

      The name of the version! Usually something like 2023.1026.0 for lazer, or 20230326 for stable

      +

    Returns Promise<WithChangelogentriesVersions>

  • Get up to 21 versions/updates/builds!

    +

    Parameters

    • Optional versions: {
          from?: string;
          to?: string;
      }

      Get builds that were released before/after (and including) those versions (use the name of the versions, e.g. 2023.1109.0)

      +
      • Optional from?: string
      • Optional to?: string
    • Optional max_id: number

      Filter out builds that have an id higher than this (this takes priority over versions.to)

      +
    • Optional stream: string

      Only get builds from a specific stream

      +
    • message_formats: ("html" | "markdown")[] = ...

      Each element of changelog_entries will have a message property if markdown, message_html if html, defaults to both

      +

    Returns Promise<WithUpdatestreamsChangelogentries[]>

  • Get a ChatChannel, and the users in it if it is a private channel!

    -

    Parameters

    • channel: ChatChannel | {
          channel_id: number;
      }

      The channel in question

      -

    Returns Promise<ChatChannelWithDetails>

    Remarks

    Will 404 if the user has not joined the channel (use joinChatChannel for that)

    -

    Scope

    chat.read

    -
  • Get the recent messages of a specific ChatChannel!

    -

    Parameters

    • channel: ChatChannel | {
          channel_id: number;
      }

      The Channel you wanna get the messages from

      -
    • limit: number = 20

      (defaults to 20, max 50) The maximum amount of messages you want to get!

      -
    • Optional since: ChatMessage | {
          message_id: number;
      }

      Get the messages sent after this message

      -
    • Optional until: ChatMessage | {
          message_id: number;
      }

      Get the messages sent up to but not including this message

      -

    Returns Promise<ChatMessage[]>

    Scope

    chat.read

    -
  • Get the top countries of a specific ruleset!

    -

    Parameters

    • ruleset: Rulesets

      On which Ruleset should the countries be compared?

      -
    • page: number = 1

      (defaults to 1) Imagine Rankings as a page, it can only have a maximum of 50 countries, while 50 others may be on the next one

      -

    Returns Promise<RankingsCountry>

  • Get a forum topic, as well as its main post (content) and the posts that were sent in it!

    -

    Parameters

    • topic: ForumTopic | {
          id: number;
      }

      An object with the id of the topic in question

      -
    • limit: number = 20

      (defaults to 20, max 50) How many posts maximum?

      -
    • sort: "id_asc" | "id_desc" = "id_asc"

      (defaults to "id_asc") "id_asc" to have the oldest post at the beginning of the posts array, "id_desc" to have the newest instead

      -
    • Optional first_post: ForumPost | {
          id: number;
      }

      (ignored if cursor_string) An Object with the id of the first post to be returned in posts

      -
    • Optional cursor_string: string

      Use a response's cursor_string with the same parameters to get the next "page" of results, so posts in this instance!

      -

    Returns Promise<{
        cursor_string: string;
        posts: ForumPost[];
        topic: ForumTopic;
    }>

    Remarks

    The oldest post of a topic is the text of a topic

    -
  • Get data of a multiplayer lobby from the stable (non-lazer) client that have URLs with community/matches or mp

    -

    Parameters

    • id: number

      Can be found at the end of the URL of said match

      -

    Returns Promise<Match>

  • Gets the info of the 50 most recently created stable (non-lazer) matches, descending order (most recent is at index 0)

    -

    Returns Promise<MatchInfo[]>

  • Get a NewsPost, its content, and the NewsPosts right before and right after it!

    -

    Parameters

    • post: NewsPost | {
          id?: number;
          slug?: string;
      }

      An object with the id or the slug of a NewsPost (the slug being the filename minus the extension, used in its URL)

      -

    Returns Promise<NewsPostWithContentNavigation>

  • Get all the NewsPosts of a specific year!

    -

    Parameters

    • Optional year: number

      (defaults to current year) The year the posts were made

      -

    Returns Promise<NewsPost[]>

    Remarks

    If the specified year is invalid/has no news, it fallbacks to the default year

    -
  • Get the scores on a specific item of a room!

    -

    Parameters

    • item: PlaylistItem | {
          id: number;
          room_id: number;
      }

      An object with the id of the item in question, as well as the id of the room

      -
    • limit: number = 50

      How many scores maximum? Defaults to 50, the maximum the API will return

      -
    • sort: "score_asc" | "score_desc" = "score_desc"

      Sort by scores, ascending or descending? Defaults to descending

      -
    • Optional cursor_string: string

      Use a MultiplayerScores' params and cursor_string to get the next page (scores 51 to 100 for example)

      -

    Returns Promise<MultiplayerScores>

    Remarks

    (2023-11-10) Items are broken for multiplayer (real-time) rooms, not for playlists (like spotlights), that's an osu! bug +

  • Get a ChatChannel, and the users in it if it is a private channel!

    +

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The channel in question

      +

    Returns Promise<WithDetails>

    Scope

    "chat.read"

    +

    Remarks

    Will 404 if the user has not joined the channel (use joinChatChannel for that)

    +
  • Get the recent messages of a specific ChatChannel!

    +

    Parameters

    • channel: Channel | {
          channel_id: number;
      }

      The Channel you wanna get the messages from

      +
    • limit: number = 20

      (defaults to 20, max 50) The maximum amount of messages you want to get!

      +
    • Optional since: Message | {
          message_id: number;
      }

      Get the messages sent after this message

      +
    • Optional until: Message | {
          message_id: number;
      }

      Get the messages sent up to but not including this message

      +

    Returns Promise<Message[]>

  • Get the top countries of a specific ruleset!

    +

    Parameters

    • ruleset: Rulesets

      On which Ruleset should the countries be compared?

      +
    • page: number = 1

      (defaults to 1) Imagine Rankings as a page, it can only have a maximum of 50 countries, while 50 others may be on the next one

      +

    Returns Promise<Country>

  • Get a forum topic, as well as its main post (content) and the posts that were sent in it!

    +

    Parameters

    • topic: Topic | {
          id: number;
      }

      An object with the id of the topic in question

      +
    • limit: number = 20

      (defaults to 20, max 50) How many posts maximum?

      +
    • sort: "id_asc" | "id_desc" = "id_asc"

      (defaults to "id_asc") "id_asc" to have the oldest post at the beginning of the posts array, "id_desc" to have the newest instead

      +
    • Optional first_post: Forum.Post | {
          id: number;
      }

      (ignored if cursor_string) An Object with the id of the first post to be returned in posts

      +
    • Optional cursor_string: string

      Use a response's cursor_string with the same parameters to get the next "page" of results, so posts in this instance!

      +

    Returns Promise<{
        cursor_string: string;
        posts: Forum.Post[];
        topic: Topic;
    }>

    Remarks

    The oldest post of a topic is the text of a topic

    +
  • Get data of a multiplayer lobby from the stable (non-lazer) client that have URLs with community/matches or mp

    +

    Parameters

    • id: number

      Can be found at the end of the URL of said match

      +

    Returns Promise<Match>

  • Gets the info of the 50 most recently created stable (non-lazer) matches, descending order (most recent is at index 0)

    +

    Returns Promise<MatchInfo[]>

  • Get a NewsPost, its content, and the NewsPosts right before and right after it!

    +

    Parameters

    • post: News.Post | {
          id?: number;
          slug?: string;
      }

      An object with the id or the slug of a NewsPost (the slug being the filename minus the extension, used in its URL)

      +

    Returns Promise<PostWithContentNavigation>

  • Get all the NewsPosts of a specific year!

    +

    Parameters

    • Optional year: number

      (defaults to current year) The year the posts were made

      +

    Returns Promise<News.Post[]>

    Remarks

    If the specified year is invalid/has no news, it fallbacks to the default year

    +
  • Get the scores on a specific item of a room!

    +

    Parameters

    • item: PlaylistItem | {
          id: number;
          room_id: number;
      }

      An object with the id of the item in question, as well as the id of the room

      +
    • limit: number = 50

      How many scores maximum? Defaults to 50, the maximum the API will return

      +
    • sort: "score_asc" | "score_desc" = "score_desc"

      Sort by scores, ascending or descending? Defaults to descending

      +
    • Optional cursor_string: string

      Use a MultiplayerScores' params and cursor_string to get the next page (scores 51 to 100 for example)

      +

    Returns Promise<Scores>

    Remarks

    (2024-03-04) This may not work for rooms from before March 5th, use at your own risk https://github.com/ppy/osu-web/issues/10725

    -
  • Get the top players of the game, with some filters!

    -

    Parameters

    • ruleset: Rulesets

      Self-explanatory, is also known as "Gamemode"

      -
    • type: "performance" | "score"

      Rank players by their performance points or by their ranked score?

      -
    • page: number = 1

      (defaults to 1) Imagine Rankings as a page, it can only have a maximum of 50 players, while 50 others may be on the next one

      -
    • filter: "all" | "friends" = "all"

      What kind of players do you want to see? Defaults to all, friends has no effect if no authorized user

      -
    • Optional country: string

      Only get players from a specific country, using its ISO 3166-1 alpha-2 country code! (France would be FR, United States US)

      -
    • Optional variant: "4k" | "7k"

      If type is performance and ruleset is mania, choose between 4k and 7k!

      -

    Returns Promise<Rankings>

  • Get data about a lazer multiplayer room (realtime or playlists)!

    -

    Parameters

    • room: Room | {
          id: number;
      }

      An object with the id of the room, is at the end of its URL (after /multiplayer/rooms/)

      -

    Returns Promise<Room>

  • Get the room stats of all the users of that room!

    -

    Parameters

    • room: Room | {
          id: number;
      }

      An object with the id of the room in question

      -

    Returns Promise<Leader[]>

    Scope

    public

    -
  • Get rooms that are active, that have ended, that the user participated in, that the user made, or just simply any room!

    -

    Parameters

    • mode: "all" | "active" | "ended" | "participated" | "owned" = "active"

      Self-explanatory enough, defaults to active

      -

    Returns Promise<Room[]>

    Scope

    public

    -
  • Get the rankings of a spotlight from 2009 to 2020 on a specific ruleset!

    -

    Parameters

    • ruleset: Rulesets

      Each spotlight has a different ranking (and often maps) depending on the ruleset

      -
    • spotlight: Spotlight | {
          id: number;
      }

      The spotlight in question

      -
    • filter: "all" | "friends" = "all"

      What kind of players do you want to see? Defaults to all, friends has no effect if no authorized user

      -

    Returns Promise<RankingsSpotlight>

  • Get data about a lazer multiplayer room (realtime or playlists)!

    +

    Parameters

    • room: Room | {
          id: number;
      }

      An object with the id of the room, is at the end of its URL (after /multiplayer/rooms/)

      +

    Returns Promise<Room>

  • Get the room stats of all the users of that room!

    +

    Parameters

    • room: Room | {
          id: number;
      }

      An object with the id of the room in question

      +

    Returns Promise<Leader[]>

    Scope

    "public"

    +
  • Get playlists/realtime rooms that are active, that have ended, that the user participated in, that the user made, or just simply any room!

    +

    Parameters

    • type: "realtime" | "playlists"

      Whether the multiplayer rooms are in playlist format (like current spotlights) or realtime

      +
    • mode: "all" | "active" | "ended" | "participated" | "owned"

      The state of the room, or the relation of the authorized user with the room

      +
    • limit: number = 10

      The maximum amount of rooms to return, defaults to 10

      +
    • sort: "ended" | "created" = "created"

      Sort (where most recent is first) by creation date or end date, defaults to the creation date

      +

    Returns Promise<Room[]>

    Scope

    "public"

    +
  • Get the rankings of a spotlight from 2009 to 2020 on a specific ruleset!

    +

    Parameters

    • ruleset: Rulesets

      Each spotlight has a different ranking (and often maps) depending on the ruleset

      +
    • spotlight: Spotlight | {
          id: number;
      }

      The spotlight in question

      +
    • filter: "all" | "friends" = "all"

      What kind of players do you want to see? Defaults to all, friends has no effect if no authorized user

      +

    Returns Promise<Rankings.Spotlight>

  • Get extensive user data about whoever you want!

    -

    Parameters

    • user: User | {
          id?: number;
          username?: string;
      }

      An object with either the id or the username of the user you're trying to get

      -
    • Optional ruleset: Rulesets

      Defaults to the user's default/favourite Ruleset

      -

    Returns Promise<UserExtended>

  • Get beatmaps favourited or made by a user!

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      -
    • type: "pending" | "ranked" | "loved" | "favourite" | "graveyard" | "guest" | "nominated"

      The relation between the user and the beatmaps

      -
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<BeatmapsetExtendedWithBeatmapExtended[]>

  • Get data about the activity of a user kudosu-wise!

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      -
    • Optional limit: number

      (defaults to 5) The maximum amount of activities in the returned array

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<KudosuHistory[]>

  • Get the beatmaps most played by a user!

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user who played the beatmaps

      -
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<BeatmapPlaycount[]>

  • Get "notable" scores from a user

    -

    Parameters

    • user: User | {
          id: number;
      }

      The user who set the scores

      -
    • type: "best" | "firsts" | "recent"

      Do you want scores: in the user's top 100, that are top 1 on a beatmap, that have been recently set?

      -
    • Optional limit: number

      The maximum amount of scores to be returned

      -
    • Optional ruleset: Rulesets

      The Ruleset the scores were made in, defaults to the user's default/favourite Ruleset

      -
    • include_fails: boolean = false

      (defaults to false) Do you want scores where the user didn't survive or quit the map?

      -
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      -

    Returns Promise<ScoreWithUserBeatmapBeatmapset[]>

  • Get a wiki page!

    -

    Parameters

    • path: string

      What's in the page's URL after https://osu.ppy.sh/wiki/ (so the title, after the subtitle if there is a subtitle) +

  • Get extensive user data about whoever you want!

    +

    Parameters

    • user: User | {
          id?: number;
          username?: string;
      }

      An object with either the id or the username of the user you're trying to get

      +
    • Optional ruleset: Rulesets

      Defaults to the user's default/favourite Ruleset

      +

    Returns Promise<User.Extended>

  • Get beatmaps favourited or made by a user!

    +

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      +
    • type: "pending" | "ranked" | "loved" | "favourite" | "graveyard" | "guest" | "nominated"

      The relation between the user and the beatmaps

      +
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      +
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      +

    Returns Promise<WithBeatmapExtended[]>

  • Get data about the activity of a user kudosu-wise!

    +

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      +
    • Optional limit: number

      (defaults to 5) The maximum amount of activities in the returned array

      +
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      +

    Returns Promise<KudosuHistory[]>

  • Get the beatmaps most played by a user!

    +

    Parameters

    • user: User | {
          id: number;
      }

      The user who played the beatmaps

      +
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      +
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      +

    Returns Promise<Playcount[]>

  • Get the top players of the game, with some filters!

    +

    Parameters

    • ruleset: Rulesets

      Self-explanatory, is also known as "Gamemode"

      +
    • type: "performance" | "score"

      Rank players by their performance points or by their ranked score?

      +
    • page: number = 1

      (defaults to 1) Imagine Rankings as a page, it can only have a maximum of 50 players, while 50 others may be on the next one

      +
    • filter: "all" | "friends" = "all"

      What kind of players do you want to see? Defaults to all, friends has no effect if no authorized user

      +
    • Optional country: string

      Only get players from a specific country, using its ISO 3166-1 alpha-2 country code! (France would be FR, United States US)

      +
    • Optional variant: "4k" | "7k"

      If type is performance and ruleset is mania, choose between 4k and 7k!

      +

    Returns Promise<Rankings.User>

  • Get an array of Events of different types that relate to a user's activity during the last 31 days! (or 100 activities, whatever comes first)

    +

    Parameters

    • user: User | {
          id: number;
      }

      The user in question

      +
    • limit: number = 5

      (defaults to 5) The maximum amount of elements returned in the array

      +
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      +

    Returns Promise<AnyRecentActivity[]>

  • Get "notable" scores from a user

    +

    Parameters

    • user: User | {
          id: number;
      }

      The user who set the scores

      +
    • type: "best" | "firsts" | "recent"

      Do you want scores: in the user's top 100, that are top 1 on a beatmap, that have been recently set?

      +
    • Optional limit: number

      The maximum amount of scores to be returned

      +
    • Optional ruleset: Rulesets

      The Ruleset the scores were made in, defaults to the user's default/favourite Ruleset

      +
    • include_fails: boolean = false

      (defaults to false) Do you want scores where the user didn't survive or quit the map?

      +
    • Optional offset: number

      How many elements that would be at the top of the returned array get skipped (while still filling the array up to the limit)

      +

    Returns Promise<WithUserBeatmapBeatmapset[]>

  • Get a wiki page!

    +

    Parameters

    • path: string

      What's in the page's URL after https://osu.ppy.sh/wiki/ (so the title, after the subtitle if there is a subtitle) (An example for https://osu.ppy.sh/wiki/en/Game_mode/osu! would be Game_mode/osu!)

      -
    • locale: string = "en"

      (defaults to "en") The BCP 47 language (sub)tag, lowercase (for example, for the article in french, use "fr")

      -

    Returns Promise<WikiPage>

  • Join a public or multiplayer ChatChannel, allowing you to interact with it!

    -

    Parameters

    • channel: ChatChannel | {
          channel_id: number;
      }

      The channel you wanna join

      -
    • Optional user: User | {
          id: number;
      }

      (defaults to the presumed authorized user) The user joining the channel

      -

    Returns Promise<ChatChannelWithDetails>

    Scope

    chat.write_manage

    -
  • Needs to be done periodically to reset chat activity timeout

    -

    Parameters

    • Optional since: {
          message?: ChatMessage | {
              message_id: number;
          };
          user_silence?: UserSilence | {
              id: number;
          };
      }

      UserSilences that are before that will not be returned!

      -
      • Optional message?: ChatMessage | {
            message_id: number;
        }
      • Optional user_silence?: UserSilence | {
            id: number;
        }

    Returns Promise<UserSilence[]>

    A list of recent silences

    -

    Remarks

    Every 30 seconds is a good idea

    -

    Scope

    chat.read

    -
  • Leave/Close a public ChatChannel!

    -

    Parameters

    • channel: ChatChannel | {
          channel_id: number;
      }

      The channel you wanna join

      -
    • Optional user: User | {
          id: number;
      }

      (defaults to the presumed authorized user) The user joining the channel

      -

    Returns Promise<void>

    Scope

    chat.write_manage

    -
  • Use this instead of console.log to log any information

    -

    Parameters

    • is_error: boolean

      Is the logging happening because of an error?

      -
    • Rest ...to_log: any[]

      Whatever you would put between the parentheses of console.log()

      -

    Returns void

  • Mark a certain channel as read up to a given message!

    -

    Parameters

    • channel: ChatChannel | {
          channel_id: number;
      }

      The channel in question

      -
    • message: ChatMessage | {
          message_id: number;
      }

      You're marking this and all the messages before it as read!

      -

    Returns Promise<void>

    Scope

    chat.read

    -
  • Set most of an api's properties, like tokens, token_type, scopes, expiration_date

    -

    Parameters

    • body: object

      An Object with the client id & secret, grant_type, and stuff that depends of the grant_type

      -
    • api: API

      The api which will see its properties change

      -

    Returns Promise<API>

    api, just in case, because in theory it should modify the original object

    -
  • Returns Promise<boolean>

    Whether or not the token has been refreshed

    -
  • Make and send a ForumPost in a ForumTopic!

    -

    Parameters

    • topic: ForumTopic | {
          id: number;
      }

      An object with the id of the topic you're making your reply in

      -
    • text: string

      Your reply! Your message!

      -

    Returns Promise<ForumPost>

    The reply you've made!

    -

    Scope

    forum.write

    -
  • Parameters

    • method: "get" | "post" | "put" | "delete"

      The type of request, each endpoint uses a specific one (if it uses multiple, the intent and parameters become different)

      -
    • endpoint: string

      What comes in the URL after api/

      -
    • Optional parameters: {
          [k: string]: any;
      }

      The things to specify in the request, such as the beatmap_id when looking for a beatmap

      -
      • [k: string]: any
    • number_try: number = 1

      Attempt number for doing this specific request

      -

    Returns Promise<any>

    A Promise with the API's response

    -
  • Look for a user like you would on the website!

    -

    Parameters

    • query: string

      What you would put in the searchbar

      -
    • page: number = 1

      (defaults to 1) You normally get the first 20 results, but if page is 2, you'd get results 21 to 40 instead for example!

      -

    Returns Promise<SearchResultUser>

  • Look for a wiki page like you would on the website!

    -

    Parameters

    • query: string

      What you would put in the searchbar

      -
    • page: number = 1

      (defaults to 1) You normally get the first 50 results, but if page is 2, you'd get results 51 to 100 instead for example!

      -

    Returns Promise<SearchResultWiki>

  • Send a message in a ChatChannel!

    -

    Parameters

    • channel: ChatChannel | {
          channel_id: number;
      }

      The channel in which you want to send your message

      -
    • message: string

      The message you wanna send

      -
    • is_action: boolean = false

      (defaults to false) Is it a command? Like /me dances

      -

    Returns Promise<ChatMessage>

    The newly sent ChatMessage!

    -

    Scope

    chat.write

    -
  • Send a private message to someone!

    -

    Parameters

    • user_target: User | {
          id: number;
      }

      The User you wanna send your message to!

      -
    • message: string

      The message you wanna send

      -
    • is_action: boolean = false

      (defaults to false) Is it a command? Like /me dances

      -
    • Optional uuid: string

      A client-side message identifier

      -

    Returns Promise<{
        channel: ChatChannel;
        message: ChatMessage;
    }>

    The message you sent

    -

    Remarks

    You don't need to use createChatPrivateChannel before sending a message

    -

    Scope

    chat.write

    -
  • The normal way to create an API instance! Make sure to await it

    -

    Parameters

    • client: {
          id: number;
          secret: string;
      }

      The ID and the secret of your client, can be found on https://osu.ppy.sh/home/account/edit#new-oauth-application

      -
      • id: number
      • secret: string
    • Optional user: {
          code: string;
          redirect_uri: string;
      }

      If the instance is supposed to represent a user, use their Authorization Code and the Application Callback URL of your application!

      -
      • code: string
      • redirect_uri: string
    • verbose: "all" | "none" | "errors" = "none"
    • server: string = "https://osu.ppy.sh"

    Returns Promise<API>

    A promise with an API instance

    -

Generated using TypeDoc

\ No newline at end of file +
  • locale: string = "en"

    (defaults to "en") The BCP 47 language (sub)tag, lowercase (for example, for the article in french, use "fr")

    +
  • Returns Promise<WikiPage>

    • Join a public or multiplayer ChatChannel, allowing you to interact with it!

      +

      Parameters

      • channel: Channel | {
            channel_id: number;
        }

        The channel you wanna join

        +
      • Optional user: User | {
            id: number;
        }

        (defaults to the presumed authorized user) The user joining the channel

        +

      Returns Promise<WithDetails>

    • Needs to be done periodically to reset chat activity timeout

      +

      Parameters

      • Optional since: {
            message?: Message | {
                message_id: number;
            };
            user_silence?: UserSilence | {
                id: number;
            };
        }

        UserSilences that are before that will not be returned!

        +
        • Optional message?: Message | {
              message_id: number;
          }
        • Optional user_silence?: UserSilence | {
              id: number;
          }

      Returns Promise<UserSilence[]>

      A list of recent silences

      +

      Scope

      "chat.read"

      +

      Remarks

      Every 30 seconds is a good idea

      +
    • Leave/Close a public ChatChannel!

      +

      Parameters

      • channel: Channel | {
            channel_id: number;
        }

        The channel you wanna join

        +
      • Optional user: User | {
            id: number;
        }

        (defaults to the presumed authorized user) The user joining the channel

        +

      Returns Promise<void>

    • Use this instead of console.log to log any information

      +

      Parameters

      • is_error: boolean

        Is the logging happening because of an error?

        +
      • Rest ...to_log: any[]

        Whatever you would put between the parentheses of console.log()

        +

      Returns void

    • Mark a certain channel as read up to a given message!

      +

      Parameters

      • channel: Channel | {
            channel_id: number;
        }

        The channel in question

        +
      • message: Message | {
            message_id: number;
        }

        You're marking this and all the messages before it as read!

        +

      Returns Promise<void>

    • Set most of an api's properties, like tokens, token_type, scopes, expiration_date

      +

      Parameters

      • body: object

        An Object with the client id & secret, grant_type, and stuff that depends of the grant_type

        +
      • api: API

        The api which will see its properties change

        +

      Returns Promise<API>

      api, just in case, because in theory it should modify the original object

      +
    • Returns Promise<boolean>

      Whether or not the token has been refreshed

      +
    • Make and send a ForumPost in a ForumTopic!

      +

      Parameters

      • topic: Topic | {
            id: number;
        }

        An object with the id of the topic you're making your reply in

        +
      • text: string

        Your reply! Your message!

        +

      Returns Promise<Forum.Post>

      The reply you've made!

      +
    • Parameters

      • method: "get" | "post" | "put" | "delete"

        The type of request, each endpoint uses a specific one (if it uses multiple, the intent and parameters become different)

        +
      • endpoint: string

        What comes in the URL after api/

        +
      • Optional parameters: {
            [k: string]: any;
        }

        The things to specify in the request, such as the beatmap_id when looking for a beatmap

        +
        • [k: string]: any
      • number_try: number = 1

        Attempt number for doing this specific request

        +

      Returns Promise<any>

      A Promise with the API's response

      +
    • Look for a user like you would on the website!

      +

      Parameters

      • query: string

        What you would put in the searchbar

        +
      • page: number = 1

        (defaults to 1) You normally get the first 20 results, but if page is 2, you'd get results 21 to 40 instead for example!

        +

      Returns Promise<SearchResult.User>

    • Look for a wiki page like you would on the website!

      +

      Parameters

      • query: string

        What you would put in the searchbar

        +
      • page: number = 1

        (defaults to 1) You normally get the first 50 results, but if page is 2, you'd get results 51 to 100 instead for example!

        +

      Returns Promise<Wiki>

    • Send a message in a ChatChannel!

      +

      Parameters

      • channel: Channel | {
            channel_id: number;
        }

        The channel in which you want to send your message

        +
      • message: string

        The message you wanna send

        +
      • is_action: boolean = false

        (defaults to false) Is it a command? Like /me dances

        +

      Returns Promise<Message>

      The newly sent ChatMessage!

      +
    • Send a private message to someone!

      +

      Parameters

      • user_target: User | {
            id: number;
        }

        The User you wanna send your message to!

        +
      • message: string

        The message you wanna send

        +
      • is_action: boolean = false

        (defaults to false) Is it a command? Like /me dances

        +
      • Optional uuid: string

        A client-side message identifier

        +

      Returns Promise<{
          channel: Channel;
          message: Message;
      }>

      The message you sent

      +

      Scope

      "chat.write"

      +

      Remarks

      You don't need to use createChatPrivateChannel before sending a message

      +
    • The normal way to create an API instance! Make sure to await it

      +

      Parameters

      • client: {
            id: number;
            secret: string;
        }

        The ID and the secret of your client, can be found on https://osu.ppy.sh/home/account/edit#new-oauth-application

        +
        • id: number
        • secret: string
      • Optional user: {
            code: string;
            redirect_uri: string;
        }

        If the instance is supposed to represent a user, use their Authorization Code and the Application Callback URL of your application!

        +
        • code: string
        • redirect_uri: string
      • verbose: "all" | "none" | "errors" = "none"
      • server: string = "https://osu.ppy.sh"

      Returns Promise<API>

      A promise with an API instance

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/classes/APIError.html b/docs/classes/APIError.html index 0d18a29..c266b46 100644 --- a/docs/classes/APIError.html +++ b/docs/classes/APIError.html @@ -1,11 +1,11 @@ -APIError | osu-api-v2-js

    Class APIError

    If the API throws an error, it should always be an APIError!

    -

    Hierarchy

    • APIError

    Constructors

    Properties

    Constructors

    • Parameters

      • message: string

        The reason why things didn't go as expected

        -
      • server: string

        The server to which the request was sent

        -
      • endpoint: string

        The type of resource that was requested from the server

        -
      • Optional parameters: object

        The filters that were used to specify what resource was wanted

        -

      Returns APIError

    Properties

    endpoint: string
    message: string
    parameters?: object
    server: string

    Generated using TypeDoc

    \ No newline at end of file +APIError | osu-api-v2-js

    Class APIError

    If the API throws an error, it should always be an APIError!

    +

    Constructors

    Properties

    Constructors

    • Parameters

      • message: string

        The reason why things didn't go as expected

        +
      • server: string

        The server to which the request was sent

        +
      • endpoint: string

        The type of resource that was requested from the server

        +
      • Optional parameters: object

        The filters that were used to specify what resource was wanted

        +

      Returns APIError

    Properties

    endpoint: string
    message: string
    parameters?: object
    server: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/RankStatus.html b/docs/enums/RankStatus.html index 8487f79..388c2c2 100644 --- a/docs/enums/RankStatus.html +++ b/docs/enums/RankStatus.html @@ -1,8 +1,8 @@ -RankStatus | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file +RankStatus | osu-api-v2-js

    Enumeration RankStatus

    Enumeration Members

    Enumeration Members

    Approved: 2
    Graveyard: -2
    Loved: 4
    Pending: 0
    Qualified: 3
    Ranked: 1
    Wip: -1

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/enums/Rulesets.html b/docs/enums/Rulesets.html index 5ee55c3..56c7847 100644 --- a/docs/enums/Rulesets.html +++ b/docs/enums/Rulesets.html @@ -1,5 +1,5 @@ -Rulesets | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file +Rulesets | osu-api-v2-js

    Enumeration Rulesets

    Enumeration Members

    Enumeration Members

    fruits: 2
    mania: 3
    osu: 0
    taiko: 1

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/functions/generateAuthorizationURL.html b/docs/functions/generateAuthorizationURL.html index 7bd81e9..64512b3 100644 --- a/docs/functions/generateAuthorizationURL.html +++ b/docs/functions/generateAuthorizationURL.html @@ -1,7 +1,7 @@ -generateAuthorizationURL | osu-api-v2-js

    Function generateAuthorizationURL

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 0000000..e9d36fe --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1 @@ +osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 4e26c32..830f304 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,4 +1,4 @@ -osu-api-v2-js

    osu-api-v2-js

    osu-api-v2-js

    osu-api-v2-js is a JavaScript & TypeScript package that helps you interact with osu!api (v2).

    +osu-api-v2-js

    osu-api-v2-js

    osu-api-v2-js

    osu-api-v2-js is a JavaScript & TypeScript package that helps you interact with osu!api (v2).

    It is currently a bit unstable as it's under development, but you can find documentation on osu-v2.taevas.xyz if needed!

    How to install and get started

    To install the package, use a command from your package manager:

    npm i osu-api-v2-js # if using npm
    yarn add osu-api-v2-js # if using yarn
    pnpm add osu-api-v2-js # if using pnpm
    bun a osu-api-v2-js # if using bun @@ -95,7 +95,7 @@

    Ranking

    • Get Kudosu Ranking
    • -
    • Get Ranking
    • +
    • Get Ranking // split between getUserRanking(), getCountryRanking(), and getSpotlightRanking()
    • Get Spotlights

    Users

      @@ -117,4 +117,4 @@
    • /scores/{rulesetOrScore}/{score}/download
    • /scores/{rulesetOrScore}/{score?}
    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap-1.html b/docs/interfaces/Beatmap-1.html new file mode 100644 index 0000000..fcd45c9 --- /dev/null +++ b/docs/interfaces/Beatmap-1.html @@ -0,0 +1,10 @@ +Beatmap | osu-api-v2-js

    Interface Beatmap

    Expected from BeatmapPlaycount

    +
    interface Beatmap {
        beatmapset_id: number;
        difficulty_rating: number;
        id: number;
        mode: string;
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: string
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes-1.html b/docs/interfaces/Beatmap.DifficultyAttributes-1.html new file mode 100644 index 0000000..9648667 --- /dev/null +++ b/docs/interfaces/Beatmap.DifficultyAttributes-1.html @@ -0,0 +1,4 @@ +DifficultyAttributes | osu-api-v2-js

    Interface DifficultyAttributes

    interface DifficultyAttributes {
        max_combo: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    max_combo: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Fruits.html b/docs/interfaces/Beatmap.DifficultyAttributes.Fruits.html new file mode 100644 index 0000000..7efbb07 --- /dev/null +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Fruits.html @@ -0,0 +1,5 @@ +Fruits | osu-api-v2-js
    interface Fruits {
        approach_rate: number;
        max_combo: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    approach_rate: number
    max_combo: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Mania.html b/docs/interfaces/Beatmap.DifficultyAttributes.Mania.html new file mode 100644 index 0000000..825bbd3 --- /dev/null +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Mania.html @@ -0,0 +1,7 @@ +Mania | osu-api-v2-js
    interface Mania {
        great_hit_window: number;
        max_combo: number;
        score_multiplier?: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    great_hit_window: number
    max_combo: number
    score_multiplier?: number

    Remarks

    (2023-11-20) Doesn't exist anymore?

    +
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Osu.html b/docs/interfaces/Beatmap.DifficultyAttributes.Osu.html new file mode 100644 index 0000000..2c61c0c --- /dev/null +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Osu.html @@ -0,0 +1,11 @@ +Osu | osu-api-v2-js
    interface Osu {
        aim_difficulty: number;
        approach_rate: number;
        flashlight_difficulty: number;
        max_combo: number;
        overall_difficulty: number;
        slider_factor: number;
        speed_difficulty: number;
        speed_note_count: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    aim_difficulty: number
    approach_rate: number
    flashlight_difficulty: number
    max_combo: number
    overall_difficulty: number
    slider_factor: number
    speed_difficulty: number
    speed_note_count: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.DifficultyAttributes.Taiko.html b/docs/interfaces/Beatmap.DifficultyAttributes.Taiko.html new file mode 100644 index 0000000..8c4aec7 --- /dev/null +++ b/docs/interfaces/Beatmap.DifficultyAttributes.Taiko.html @@ -0,0 +1,9 @@ +Taiko | osu-api-v2-js
    interface Taiko {
        colour_difficulty: number;
        great_hit_window: number;
        max_combo: number;
        peak_difficulty: number;
        rhythm_difficulty: number;
        stamina_difficulty: number;
        star_rating: number;
    }

    Hierarchy (view full)

    Properties

    colour_difficulty: number
    great_hit_window: number
    max_combo: number
    peak_difficulty: number
    rhythm_difficulty: number
    stamina_difficulty: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended-1.html b/docs/interfaces/Beatmap.Extended-1.html new file mode 100644 index 0000000..faeb783 --- /dev/null +++ b/docs/interfaces/Beatmap.Extended-1.html @@ -0,0 +1,29 @@ +Extended | osu-api-v2-js

    Expected from ScoreWithUserBeatmapBeatmapset

    +
    interface Extended {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        mode: string;
        mode_int: number;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: string
    mode_int: number
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithFailtimes.html b/docs/interfaces/Beatmap.Extended.WithFailtimes.html new file mode 100644 index 0000000..ca9d6e4 --- /dev/null +++ b/docs/interfaces/Beatmap.Extended.WithFailtimes.html @@ -0,0 +1,30 @@ +WithFailtimes | osu-api-v2-js

    Expected from BeatmapsetExtendedPlus

    +
    interface WithFailtimes {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        mode: string;
        mode_int: number;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: string
    mode_int: number
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapsetextended.html b/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapsetextended.html new file mode 100644 index 0000000..356ef26 --- /dev/null +++ b/docs/interfaces/Beatmap.Extended.WithFailtimesBeatmapsetextended.html @@ -0,0 +1,32 @@ +WithFailtimesBeatmapsetextended | osu-api-v2-js

    Interface WithFailtimesBeatmapsetextended

    Obtainable From

    API.getBeatmap

    +
    interface WithFailtimesBeatmapsetextended {
        accuracy: number;
        ar: number;
        beatmapset: Beatmapset.Extended;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: string;
        mode_int: number;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy: number
    ar: number
    beatmapset: Beatmapset.Extended
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: string
    mode_int: number
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Extended.WithFailtimesMaxcombo.html b/docs/interfaces/Beatmap.Extended.WithFailtimesMaxcombo.html new file mode 100644 index 0000000..ddf3bc3 --- /dev/null +++ b/docs/interfaces/Beatmap.Extended.WithFailtimesMaxcombo.html @@ -0,0 +1,31 @@ +WithFailtimesMaxcombo | osu-api-v2-js

    Obtainable From

    API.getBeatmaps

    +
    interface WithFailtimesMaxcombo {
        accuracy: number;
        ar: number;
        beatmapset_id: number;
        bpm: number;
        checksum: string;
        convert: boolean;
        count_circles: number;
        count_sliders: number;
        count_spinners: number;
        cs: number;
        deleted_at: null | Date;
        difficulty_rating: number;
        drain: number;
        failtimes: {
            exit: number[];
            fail: number[];
        };
        hit_length: number;
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        max_combo: number;
        mode: string;
        mode_int: number;
        passcount: number;
        playcount: number;
        ranked: RankStatus;
        status: string;
        total_length: number;
        url: string;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    max_combo: number
    mode: string
    mode_int: number
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Pack.html b/docs/interfaces/Beatmap.Pack.html new file mode 100644 index 0000000..6ee38c1 --- /dev/null +++ b/docs/interfaces/Beatmap.Pack.html @@ -0,0 +1,15 @@ +Pack | osu-api-v2-js
    interface Pack {
        author: string;
        beatmapsets?: Beatmapset.Extended[];
        date: Date;
        name: string;
        no_diff_reduction: boolean;
        ruleset_id: null | number;
        tag: string;
        url: string;
        user_completion_data?: {
            beatmapset_ids: number[];
            completed: boolean;
        };
    }

    Properties

    author: string
    beatmapsets?: Beatmapset.Extended[]
    date: Date
    name: string
    no_diff_reduction: boolean

    Are difficulty reduction mods unable to be used to clear this pack? (is false if you can use such mods)

    +
    ruleset_id: null | number
    tag: string
    url: string
    user_completion_data?: {
        beatmapset_ids: number[];
        completed: boolean;
    }

    Type declaration

    • beatmapset_ids: number[]

      IDs of beatmapsets completed by the user (according to the requirements of the pack)

      +
    • completed: boolean

      Whether all beatmapsets are completed by the user or not

      +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.Playcount.html b/docs/interfaces/Beatmap.Playcount.html new file mode 100644 index 0000000..f73a583 --- /dev/null +++ b/docs/interfaces/Beatmap.Playcount.html @@ -0,0 +1,7 @@ +Playcount | osu-api-v2-js

    Obtainable From

    API.getUserMostPlayed

    +
    interface Playcount {
        beatmap: Beatmap;
        beatmap_id: number;
        beatmapset: Beatmapset;
        count: number;
    }

    Properties

    beatmap: Beatmap
    beatmap_id: number
    beatmapset: Beatmapset
    count: number

    Playcount

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.WithBeatmapset.html b/docs/interfaces/Beatmap.WithBeatmapset.html new file mode 100644 index 0000000..c09b940 --- /dev/null +++ b/docs/interfaces/Beatmap.WithBeatmapset.html @@ -0,0 +1,11 @@ +WithBeatmapset | osu-api-v2-js

    Interface WithBeatmapset

    Expected from Match

    +
    interface WithBeatmapset {
        beatmapset: Beatmapset;
        beatmapset_id: number;
        difficulty_rating: number;
        id: number;
        mode: string;
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: string
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.WithBeatmapsetChecksumMaxcombo.html b/docs/interfaces/Beatmap.WithBeatmapsetChecksumMaxcombo.html new file mode 100644 index 0000000..bfabfd1 --- /dev/null +++ b/docs/interfaces/Beatmap.WithBeatmapsetChecksumMaxcombo.html @@ -0,0 +1,13 @@ +WithBeatmapsetChecksumMaxcombo | osu-api-v2-js

    Interface WithBeatmapsetChecksumMaxcombo

    Expected from PlaylistItem

    +
    interface WithBeatmapsetChecksumMaxcombo {
        beatmapset: Beatmapset;
        beatmapset_id: number;
        checksum: string;
        difficulty_rating: number;
        id: number;
        max_combo: number;
        mode: string;
        status: string;
        total_length: number;
        user_id: number;
        version: string;
    }

    Hierarchy (view full)

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    checksum: string
    difficulty_rating: number
    id: number
    max_combo: number
    mode: string
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmap.html b/docs/interfaces/Beatmap.html deleted file mode 100644 index 4fca57b..0000000 --- a/docs/interfaces/Beatmap.html +++ /dev/null @@ -1,10 +0,0 @@ -Beatmap | osu-api-v2-js

    Interface Beatmap

    Expected from BeatmapPlaycount

    -

    Hierarchy

    Properties

    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: string
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapDifficultyAttributes.html b/docs/interfaces/BeatmapDifficultyAttributes.html deleted file mode 100644 index b17d71c..0000000 --- a/docs/interfaces/BeatmapDifficultyAttributes.html +++ /dev/null @@ -1,4 +0,0 @@ -BeatmapDifficultyAttributes | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapDifficultyAttributesFruits.html b/docs/interfaces/BeatmapDifficultyAttributesFruits.html deleted file mode 100644 index 975bcdf..0000000 --- a/docs/interfaces/BeatmapDifficultyAttributesFruits.html +++ /dev/null @@ -1,5 +0,0 @@ -BeatmapDifficultyAttributesFruits | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapDifficultyAttributesMania.html b/docs/interfaces/BeatmapDifficultyAttributesMania.html deleted file mode 100644 index 0875b02..0000000 --- a/docs/interfaces/BeatmapDifficultyAttributesMania.html +++ /dev/null @@ -1,7 +0,0 @@ -BeatmapDifficultyAttributesMania | osu-api-v2-js

    Interface BeatmapDifficultyAttributesMania

    Expected from api.getBeatmapDifficultyAttributesMania()

    -

    Hierarchy

    Properties

    great_hit_window: number
    max_combo: number
    score_multiplier?: number

    Remarks

    (2023-11-20) Doesn't exist anymore?

    -
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapDifficultyAttributesOsu.html b/docs/interfaces/BeatmapDifficultyAttributesOsu.html deleted file mode 100644 index d7a36ca..0000000 --- a/docs/interfaces/BeatmapDifficultyAttributesOsu.html +++ /dev/null @@ -1,11 +0,0 @@ -BeatmapDifficultyAttributesOsu | osu-api-v2-js

    Interface BeatmapDifficultyAttributesOsu

    Expected from api.getBeatmapDifficultyAttributesOsu()

    -

    Hierarchy

    Properties

    aim_difficulty: number
    approach_rate: number
    flashlight_difficulty: number
    max_combo: number
    overall_difficulty: number
    slider_factor: number
    speed_difficulty: number
    speed_note_count: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapDifficultyAttributesTaiko.html b/docs/interfaces/BeatmapDifficultyAttributesTaiko.html deleted file mode 100644 index cc316fa..0000000 --- a/docs/interfaces/BeatmapDifficultyAttributesTaiko.html +++ /dev/null @@ -1,9 +0,0 @@ -BeatmapDifficultyAttributesTaiko | osu-api-v2-js

    Interface BeatmapDifficultyAttributesTaiko

    Expected from api.getBeatmapDifficultyAttributesTaiko()

    -

    Hierarchy

    Properties

    colour_difficulty: number
    great_hit_window: number
    max_combo: number
    peak_difficulty: number
    rhythm_difficulty: number
    stamina_difficulty: number
    star_rating: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapExtended.html b/docs/interfaces/BeatmapExtended.html deleted file mode 100644 index cb1e206..0000000 --- a/docs/interfaces/BeatmapExtended.html +++ /dev/null @@ -1,29 +0,0 @@ -BeatmapExtended | osu-api-v2-js

    Interface BeatmapExtended

    Expected from ScoreWithUserBeatmapBeatmapset

    -

    Hierarchy

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: string
    mode_int: number
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapExtendedWithFailtimes.html b/docs/interfaces/BeatmapExtendedWithFailtimes.html deleted file mode 100644 index 7860ce4..0000000 --- a/docs/interfaces/BeatmapExtendedWithFailtimes.html +++ /dev/null @@ -1,30 +0,0 @@ -BeatmapExtendedWithFailtimes | osu-api-v2-js

    Interface BeatmapExtendedWithFailtimes

    Expected from BeatmapsetExtendedPlus

    -

    Hierarchy

    Properties

    accuracy: number
    ar: number
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: string
    mode_int: number
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapExtendedWithFailtimesBeatmapsetextended.html b/docs/interfaces/BeatmapExtendedWithFailtimesBeatmapsetextended.html deleted file mode 100644 index 4f28083..0000000 --- a/docs/interfaces/BeatmapExtendedWithFailtimesBeatmapsetextended.html +++ /dev/null @@ -1,31 +0,0 @@ -BeatmapExtendedWithFailtimesBeatmapsetextended | osu-api-v2-js

    Interface BeatmapExtendedWithFailtimesBeatmapsetextended

    Expected from api.getBeatmap()

    -

    Hierarchy

    Properties

    accuracy: number
    ar: number
    beatmapset: BeatmapsetExtended
    beatmapset_id: number
    bpm: number
    checksum: string
    convert: boolean
    count_circles: number
    count_sliders: number
    count_spinners: number
    cs: number
    deleted_at: null | Date
    difficulty_rating: number
    drain: number
    failtimes: {
        exit: number[];
        fail: number[];
    }

    Type declaration

    • exit: number[]
    • fail: number[]
    hit_length: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    mode: string
    mode_int: number
    passcount: number
    playcount: number
    ranked: RankStatus
    status: string
    total_length: number
    url: string
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapPack.html b/docs/interfaces/BeatmapPack.html deleted file mode 100644 index db55253..0000000 --- a/docs/interfaces/BeatmapPack.html +++ /dev/null @@ -1,14 +0,0 @@ -BeatmapPack | osu-api-v2-js

    Interface BeatmapPack

    Expected from api.getBeatmapPack(), api.getBeatmapPacks()

    -

    Hierarchy

    • BeatmapPack

    Properties

    author: string
    beatmapsets?: BeatmapsetExtended[]
    date: Date
    name: string
    no_diff_reduction: boolean

    Are difficulty reduction mods unable to be used to clear this pack? (is false if you can use such mods)

    -
    ruleset_id: null | number
    tag: string
    url: string
    user_completion_data?: {
        beatmapset_ids: number[];
        completed: boolean;
    }

    Type declaration

    • beatmapset_ids: number[]

      IDs of beatmapsets completed by the user (according to the requirements of the pack)

      -
    • completed: boolean

      Whether all beatmapsets are completed by the user or not

      -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapPlaycount.html b/docs/interfaces/BeatmapPlaycount.html deleted file mode 100644 index 3fd3dad..0000000 --- a/docs/interfaces/BeatmapPlaycount.html +++ /dev/null @@ -1,7 +0,0 @@ -BeatmapPlaycount | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapUserScore.html b/docs/interfaces/BeatmapUserScore.html index 40b0da4..7421d6d 100644 --- a/docs/interfaces/BeatmapUserScore.html +++ b/docs/interfaces/BeatmapUserScore.html @@ -1,5 +1,5 @@ -BeatmapUserScore | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file +BeatmapUserScore | osu-api-v2-js

    Interface BeatmapUserScore

    Obtainable From

    API.getBeatmapUserScore

    +
    interface BeatmapUserScore {
        position: number;
        score: WithUserBeatmap;
    }

    Properties

    Properties

    position: number

    Value depends on the requested mode and mods!

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapWithBeatmapset.html b/docs/interfaces/BeatmapWithBeatmapset.html deleted file mode 100644 index 713cc41..0000000 --- a/docs/interfaces/BeatmapWithBeatmapset.html +++ /dev/null @@ -1,11 +0,0 @@ -BeatmapWithBeatmapset | osu-api-v2-js

    Interface BeatmapWithBeatmapset

    Expected from Match

    -

    Hierarchy

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    difficulty_rating: number
    id: number
    mode: string
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapWithBeatmapsetChecksumMaxcombo.html b/docs/interfaces/BeatmapWithBeatmapsetChecksumMaxcombo.html deleted file mode 100644 index 445d45a..0000000 --- a/docs/interfaces/BeatmapWithBeatmapsetChecksumMaxcombo.html +++ /dev/null @@ -1,13 +0,0 @@ -BeatmapWithBeatmapsetChecksumMaxcombo | osu-api-v2-js

    Interface BeatmapWithBeatmapsetChecksumMaxcombo

    Expected from PlaylistItem

    -

    Hierarchy

    Properties

    beatmapset: Beatmapset
    beatmapset_id: number
    checksum: string
    difficulty_rating: number
    id: number
    max_combo: number
    mode: string
    status: string
    total_length: number
    user_id: number
    version: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset-1.html b/docs/interfaces/Beatmapset-1.html new file mode 100644 index 0000000..951350a --- /dev/null +++ b/docs/interfaces/Beatmapset-1.html @@ -0,0 +1,23 @@ +Beatmapset | osu-api-v2-js

    Interface Beatmapset

    Expected from BeatmapWithBeatmapset, Score, BeatmapPlaycount

    +
    interface Beatmapset {
        artist: string;
        artist_unicode: string;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        favourite_count: number;
        id: number;
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        source: string;
        spotlight: boolean;
        status: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended-1.html b/docs/interfaces/Beatmapset.Extended-1.html new file mode 100644 index 0000000..1a13314 --- /dev/null +++ b/docs/interfaces/Beatmapset.Extended-1.html @@ -0,0 +1,39 @@ +Extended | osu-api-v2-js

    Expected from RankingsSpotlight, BeatmapExtendedWithFailtimesBeatmapsetextended

    +
    interface Extended {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | string;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      +
    • more_information: null | string
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | string
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended.Plus.html b/docs/interfaces/Beatmapset.Extended.Plus.html new file mode 100644 index 0000000..55471f3 --- /dev/null +++ b/docs/interfaces/Beatmapset.Extended.Plus.html @@ -0,0 +1,55 @@ +Plus | osu-api-v2-js

    Obtainable From

    API.getBeatmapset

    +
    interface Plus {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: WithFailtimes[];
        bpm: number;
        can_be_hyped: boolean;
        converts: WithFailtimes[];
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        current_nominations: {
            beatmapset_id: number;
            reset: boolean;
            rulesets: Rulesets[];
            user_id: number;
        }[];
        deleted_at: null | string;
        description: {
            description: string;
        };
        discussion_locked: boolean;
        favourite_count: number;
        genre: {
            id: number;
            name: string;
        };
        has_favourited?: boolean;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        language: {
            id: number;
            name: string;
        };
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        pack_tags: string[];
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        ratings: number[];
        recent_favourites: User[];
        related_users: User[];
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user: User;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      +
    • more_information: null | string
    beatmaps: WithFailtimes[]

    The different beatmaps/difficulties this beatmapset has

    +
    bpm: number
    can_be_hyped: boolean
    converts: WithFailtimes[]

    The different beatmaps made for osu!, but converted to the other Rulesets

    +
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    current_nominations: {
        beatmapset_id: number;
        reset: boolean;
        rulesets: Rulesets[];
        user_id: number;
    }[]

    Type declaration

    • beatmapset_id: number
    • reset: boolean
    • rulesets: Rulesets[]
    • user_id: number
    deleted_at: null | string
    description: {
        description: string;
    }

    Type declaration

    • description: string

      In HTML

      +
    discussion_locked: boolean
    favourite_count: number
    genre: {
        id: number;
        name: string;
    }

    Type declaration

    • id: number
    • name: string
    has_favourited?: boolean

    Only exists if authorized user

    +
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    language: {
        id: number;
        name: string;
    }

    Type declaration

    • id: number
    • name: string
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    pack_tags: string[]
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    ranked: RankStatus
    ranked_date: null | Date
    ratings: number[]
    recent_favourites: User[]
    related_users: User[]
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user: User
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.Extended.WithBeatmapExtended.html b/docs/interfaces/Beatmapset.Extended.WithBeatmapExtended.html new file mode 100644 index 0000000..29f638c --- /dev/null +++ b/docs/interfaces/Beatmapset.Extended.WithBeatmapExtended.html @@ -0,0 +1,40 @@ +WithBeatmapExtended | osu-api-v2-js

    Obtainable From

    API.getUserBeatmaps

    +
    interface WithBeatmapExtended {
        artist: string;
        artist_unicode: string;
        availability: {
            download_disabled: boolean;
            more_information: null | string;
        };
        beatmaps: Beatmap.Extended[];
        bpm: number;
        can_be_hyped: boolean;
        covers: {
            card: string;
            card@2x: string;
            cover: string;
            cover@2x: string;
            list: string;
            list@2x: string;
            slimcover: string;
            slimcover@2x: string;
        };
        creator: string;
        deleted_at: null | string;
        discussion_locked: boolean;
        favourite_count: number;
        hype: null | {
            current: number;
            required: number;
        };
        id: number;
        is_scoreable: boolean;
        last_updated: Date;
        legacy_thread_url: string;
        nominations_summary: {
            current: number;
            required: number;
        };
        nsfw: boolean;
        offset: number;
        play_count: number;
        preview_url: string;
        ranked: RankStatus;
        ranked_date: null | Date;
        source: string;
        spotlight: boolean;
        status: string;
        storyboard: boolean;
        submitted_date: null | Date;
        tags: string;
        title: string;
        title_unicode: string;
        user_id: number;
        video: boolean;
    }

    Hierarchy (view full)

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      +
    • more_information: null | string
    beatmaps: Beatmap.Extended[]
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | string
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    +
    ranked: RankStatus
    ranked_date: null | Date
    source: string
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    +
    storyboard: boolean
    submitted_date: null | Date
    tags: string
    title: string

    A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese

    +
    title_unicode: string

    Basically the title is the original language, so with hiragana, katakana and kanji if Japanese

    +
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Beatmapset.html b/docs/interfaces/Beatmapset.html deleted file mode 100644 index af55edc..0000000 --- a/docs/interfaces/Beatmapset.html +++ /dev/null @@ -1,24 +0,0 @@ -Beatmapset | osu-api-v2-js

    Interface Beatmapset

    Expected from BeatmapWithBeatmapset, Score, BeatmapPlaycount

    -

    Hierarchy

    Properties

    artist: string
    artist_unicode: string
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    favourite_count: number
    id: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    source: string | 0

    Can be/Is 0 if there is no source

    -
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    title: string

    A title readable by any english-speaking person, so it'd be romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiraganas and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapsetExtended.html b/docs/interfaces/BeatmapsetExtended.html deleted file mode 100644 index ef43d5b..0000000 --- a/docs/interfaces/BeatmapsetExtended.html +++ /dev/null @@ -1,41 +0,0 @@ -BeatmapsetExtended | osu-api-v2-js

    Interface BeatmapsetExtended

    Expected from RankingsSpotlight, BeatmapExtendedWithFailtimesBeatmapsetextended

    -

    Hierarchy

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      -
    • more_information: null | string
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | string
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    ranked: RankStatus
    ranked_date: null | Date
    source: string

    Can be/Is 0 if there is no source

    -
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    storyboard: boolean
    submitted_date: null | Date
    tags: string | 0

    0 if no tags at all, a string with tags separated from each other by a whitespace

    -
    title: string

    A title readable by any english-speaking person, so it'd be romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiraganas and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapsetExtendedPlus.html b/docs/interfaces/BeatmapsetExtendedPlus.html deleted file mode 100644 index 8ea8e21..0000000 --- a/docs/interfaces/BeatmapsetExtendedPlus.html +++ /dev/null @@ -1,57 +0,0 @@ -BeatmapsetExtendedPlus | osu-api-v2-js

    Interface BeatmapsetExtendedPlus

    Expected from api.getBeatmapset()

    -

    Hierarchy

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      -
    • more_information: null | string

    The different beatmaps/difficulties this beatmapset has

    -
    bpm: number
    can_be_hyped: boolean

    The different beatmaps made for osu!, but converted to the other Rulesets

    -
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    current_nominations: {
        beatmapset_id: number;
        reset: boolean;
        rulesets: Rulesets[];
        user_id: number;
    }[]

    Type declaration

    • beatmapset_id: number
    • reset: boolean
    • rulesets: Rulesets[]
    • user_id: number
    deleted_at: null | string
    description: {
        description: string;
    }

    Type declaration

    • description: string

      In HTML

      -
    discussion_locked: boolean
    favourite_count: number
    genre: {
        id: number;
        name: string;
    }

    Type declaration

    • id: number
    • name: string
    has_favourited?: boolean

    Only exists if authorized user

    -
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    language: {
        id: number;
        name: string;
    }

    Type declaration

    • id: number
    • name: string
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    pack_tags: string[]
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    ranked: RankStatus
    ranked_date: null | Date
    ratings: number[]
    recent_favourites: User[]
    related_users: User[]
    source: string

    Can be/Is 0 if there is no source

    -
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    storyboard: boolean
    submitted_date: null | Date
    tags: string | 0

    0 if no tags at all, a string with tags separated from each other by a whitespace

    -
    title: string

    A title readable by any english-speaking person, so it'd be romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiraganas and kanji if Japanese

    -
    user: User
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/BeatmapsetExtendedWithBeatmapExtended.html b/docs/interfaces/BeatmapsetExtendedWithBeatmapExtended.html deleted file mode 100644 index 2ecb951..0000000 --- a/docs/interfaces/BeatmapsetExtendedWithBeatmapExtended.html +++ /dev/null @@ -1,42 +0,0 @@ -BeatmapsetExtendedWithBeatmapExtended | osu-api-v2-js

    Interface BeatmapsetExtendedWithBeatmapExtended

    Expected from api.getUserBeatmaps()

    -

    Hierarchy

    Properties

    artist: string
    artist_unicode: string
    availability: {
        download_disabled: boolean;
        more_information: null | string;
    }

    Type declaration

    • download_disabled: boolean

      So it's false if you can download it

      -
    • more_information: null | string
    beatmaps: BeatmapExtended[]
    bpm: number
    can_be_hyped: boolean
    covers: {
        card: string;
        card@2x: string;
        cover: string;
        cover@2x: string;
        list: string;
        list@2x: string;
        slimcover: string;
        slimcover@2x: string;
    }

    Type declaration

    • card: string
    • card@2x: string
    • cover: string
    • cover@2x: string
    • list: string
    • list@2x: string
    • slimcover: string
    • slimcover@2x: string
    creator: string
    deleted_at: null | string
    discussion_locked: boolean
    favourite_count: number
    hype: null | {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    id: number
    is_scoreable: boolean
    last_updated: Date
    legacy_thread_url: string
    nominations_summary: {
        current: number;
        required: number;
    }

    Type declaration

    • current: number
    • required: number
    nsfw: boolean
    offset: number
    play_count: number
    preview_url: string

    A string like that, where id is the id of the beatmapset: //b.ppy.sh/preview/58951.mp3

    -
    ranked: RankStatus
    ranked_date: null | Date
    source: string

    Can be/Is 0 if there is no source

    -
    spotlight: boolean
    status: string

    Is it ranked, is it graveyarded, etc

    -
    storyboard: boolean
    submitted_date: null | Date
    tags: string | 0

    0 if no tags at all, a string with tags separated from each other by a whitespace

    -
    title: string

    A title readable by any english-speaking person, so it'd be romaji if the song's title is in Japanese

    -
    title_unicode: string

    Basically the title is the original language, so with hiraganas and kanji if Japanese

    -
    user_id: number
    video: boolean

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build-1.html b/docs/interfaces/Changelog.Build-1.html new file mode 100644 index 0000000..c6fd288 --- /dev/null +++ b/docs/interfaces/Changelog.Build-1.html @@ -0,0 +1,11 @@ +Build | osu-api-v2-js
    interface Build {
        created_at: Date;
        display_version: string;
        id: number;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    display_version: string
    id: number
    users: number

    How many users are playing on this version of the game? (if lazer/web, should be 0, lazer doesn't show such stats)

    +
    version: null | string

    The name of the version

    +
    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build.WithChangelogentriesVersions.html b/docs/interfaces/Changelog.Build.WithChangelogentriesVersions.html new file mode 100644 index 0000000..713bf24 --- /dev/null +++ b/docs/interfaces/Changelog.Build.WithChangelogentriesVersions.html @@ -0,0 +1,20 @@ +WithChangelogentriesVersions | osu-api-v2-js

    Interface WithChangelogentriesVersions

    Obtainable From

    API.getChangelogBuild

    +
    interface WithChangelogentriesVersions {
        changelog_entries: {
            category: string;
            created_at: Date;
            github_pull_request_id: null | number;
            github_url: null | string;
            github_user?: {
                display_name: string;
                github_url: null | string;
                github_username: null | string;
                id: null | number;
                osu_username: null | string;
                user_id: null | number;
                user_url: null | string;
            };
            id: null | number;
            major: boolean;
            message?: null | string;
            message_html?: null | string;
            repository: null | string;
            title: null | string;
            type: string;
            url: null | string;
        }[];
        created_at: Date;
        display_version: string;
        id: number;
        users: number;
        version: null | string;
        versions: {
            next: null | WithUpdatestreams;
            previous: null | WithUpdatestreams;
        };
        youtube_id: null | string;
    }

    Hierarchy

    • WithChangelogentries
      • WithChangelogentriesVersions

    Properties

    changelog_entries: {
        category: string;
        created_at: Date;
        github_pull_request_id: null | number;
        github_url: null | string;
        github_user?: {
            display_name: string;
            github_url: null | string;
            github_username: null | string;
            id: null | number;
            osu_username: null | string;
            user_id: null | number;
            user_url: null | string;
        };
        id: null | number;
        major: boolean;
        message?: null | string;
        message_html?: null | string;
        repository: null | string;
        title: null | string;
        type: string;
        url: null | string;
    }[]

    Type declaration

    • category: string
    • created_at: Date

      Remarks

      Can be January 1st 1970!

      +
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Remarks

      Doesn't exist if no github user is associated with who's credited with the change

      +
      • display_name: string
      • github_url: null | string
      • github_username: null | string
      • id: null | number
      • osu_username: null | string
      • user_id: null | number
      • user_url: null | string
    • id: null | number
    • major: boolean
    • Optional message?: null | string

      Entry message in Markdown format, embedded HTML is allowed

      +

      Remarks

      Exists only if Markdown was requested

      +
    • Optional message_html?: null | string

      Entry message in HTML format

      +

      Remarks

      Exists only if HTML was requested

      +
    • repository: null | string
    • title: null | string
    • type: string
    • url: null | string
    created_at: Date
    display_version: string
    id: number
    users: number

    How many users are playing on this version of the game? (if lazer/web, should be 0, lazer doesn't show such stats)

    +
    version: null | string

    The name of the version

    +
    versions: {
        next: null | WithUpdatestreams;
        previous: null | WithUpdatestreams;
    }

    Type declaration

    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build.WithUpdatestreams.html b/docs/interfaces/Changelog.Build.WithUpdatestreams.html new file mode 100644 index 0000000..036e7c8 --- /dev/null +++ b/docs/interfaces/Changelog.Build.WithUpdatestreams.html @@ -0,0 +1,13 @@ +WithUpdatestreams | osu-api-v2-js
    interface WithUpdatestreams {
        created_at: Date;
        display_version: string;
        id: number;
        update_stream: UpdateStream;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if lazer/web, should be 0, lazer doesn't show such stats)

    +
    version: null | string

    The name of the version

    +
    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.Build.WithUpdatestreamsChangelogentries.html b/docs/interfaces/Changelog.Build.WithUpdatestreamsChangelogentries.html new file mode 100644 index 0000000..f7022b3 --- /dev/null +++ b/docs/interfaces/Changelog.Build.WithUpdatestreamsChangelogentries.html @@ -0,0 +1,20 @@ +WithUpdatestreamsChangelogentries | osu-api-v2-js

    Interface WithUpdatestreamsChangelogentries

    Obtainable From

    API.getChangelogBuilds

    +
    interface WithUpdatestreamsChangelogentries {
        changelog_entries: {
            category: string;
            created_at: Date;
            github_pull_request_id: null | number;
            github_url: null | string;
            github_user?: {
                display_name: string;
                github_url: null | string;
                github_username: null | string;
                id: null | number;
                osu_username: null | string;
                user_id: null | number;
                user_url: null | string;
            };
            id: null | number;
            major: boolean;
            message?: null | string;
            message_html?: null | string;
            repository: null | string;
            title: null | string;
            type: string;
            url: null | string;
        }[];
        created_at: Date;
        display_version: string;
        id: number;
        update_stream: UpdateStream;
        users: number;
        version: null | string;
        youtube_id: null | string;
    }

    Hierarchy (view full)

    Properties

    changelog_entries: {
        category: string;
        created_at: Date;
        github_pull_request_id: null | number;
        github_url: null | string;
        github_user?: {
            display_name: string;
            github_url: null | string;
            github_username: null | string;
            id: null | number;
            osu_username: null | string;
            user_id: null | number;
            user_url: null | string;
        };
        id: null | number;
        major: boolean;
        message?: null | string;
        message_html?: null | string;
        repository: null | string;
        title: null | string;
        type: string;
        url: null | string;
    }[]

    Type declaration

    • category: string
    • created_at: Date

      Remarks

      Can be January 1st 1970!

      +
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Remarks

      Doesn't exist if no github user is associated with who's credited with the change

      +
      • display_name: string
      • github_url: null | string
      • github_username: null | string
      • id: null | number
      • osu_username: null | string
      • user_id: null | number
      • user_url: null | string
    • id: null | number
    • major: boolean
    • Optional message?: null | string

      Entry message in Markdown format, embedded HTML is allowed

      +

      Remarks

      Exists only if Markdown was requested

      +
    • Optional message_html?: null | string

      Entry message in HTML format

      +

      Remarks

      Exists only if HTML was requested

      +
    • repository: null | string
    • title: null | string
    • type: string
    • url: null | string
    created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if lazer/web, should be 0, lazer doesn't show such stats)

    +
    version: null | string

    The name of the version

    +
    youtube_id: null | string

    If a video is showcased on the changelog

    +

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.UpdateStream-1.html b/docs/interfaces/Changelog.UpdateStream-1.html new file mode 100644 index 0000000..38d35a6 --- /dev/null +++ b/docs/interfaces/Changelog.UpdateStream-1.html @@ -0,0 +1,6 @@ +UpdateStream | osu-api-v2-js
    interface UpdateStream {
        display_name: null | string;
        id: number;
        is_featured: boolean;
        name: string;
    }

    Hierarchy (view full)

    Properties

    display_name: null | string
    id: number
    is_featured: boolean
    name: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Changelog.UpdateStream.WithLatestbuildUsercount.html b/docs/interfaces/Changelog.UpdateStream.WithLatestbuildUsercount.html new file mode 100644 index 0000000..15f120d --- /dev/null +++ b/docs/interfaces/Changelog.UpdateStream.WithLatestbuildUsercount.html @@ -0,0 +1,10 @@ +WithLatestbuildUsercount | osu-api-v2-js

    Obtainable From

    API.getChangelogStreams

    +
    interface WithLatestbuildUsercount {
        display_name: null | string;
        id: number;
        is_featured: boolean;
        latest_build: null | Build;
        name: string;
        user_count: number;
    }

    Hierarchy (view full)

    Properties

    display_name: null | string
    id: number
    is_featured: boolean
    latest_build: null | Build
    name: string
    user_count: number

    How many users are playing on this?

    +

    Remarks

    Should be 0 if web

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ChangelogBuildWithChangelogentriesVersions.html b/docs/interfaces/ChangelogBuildWithChangelogentriesVersions.html deleted file mode 100644 index fbe4a65..0000000 --- a/docs/interfaces/ChangelogBuildWithChangelogentriesVersions.html +++ /dev/null @@ -1,18 +0,0 @@ -ChangelogBuildWithChangelogentriesVersions | osu-api-v2-js

    Interface ChangelogBuildWithChangelogentriesVersions

    Expected from api.getChangelogBuild()

    -

    Hierarchy

    • ChangelogBuildWithChangelogentries
      • ChangelogBuildWithChangelogentriesVersions

    Properties

    changelog_entries: {
        category: string;
        created_at: Date;
        github_pull_request_id: null | number;
        github_url: null | string;
        github_user?: {
            display_name: string;
            github_url: null | string;
            github_username: null | string;
            id: null | number;
            osu_username: null | string;
            user_id: null | number;
            user_url: null | string;
        };
        id: null | number;
        major: boolean;
        message?: null | string;
        message_html?: null | string;
        repository: null | string;
        title: null | string;
        type: string;
        url: null | string;
    }[]

    Type declaration

    • category: string
    • created_at: Date

      Can be January 1st 1970!

      -
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Doesn't exist if no github user is associated with who's credited with the change

      -
      • display_name: string
      • github_url: null | string
      • github_username: null | string
      • id: null | number
      • osu_username: null | string
      • user_id: null | number
      • user_url: null | string
    • id: null | number
    • major: boolean
    • Optional message?: null | string

      Entry message in Markdown format, embedded HTML is allowed, exists only if Markdown was requested

      -
    • Optional message_html?: null | string

      Entry message in HTML format, exists only if HTML was requested

      -
    • repository: null | string
    • title: null | string
    • type: string
    • url: null | string
    created_at: Date
    display_version: string
    id: number
    users: number

    How many users are playing on this version of the game? (if lazer/web, should be 0, lazer doesn't show such stats)

    -
    version: null | string

    The name of the version

    -
    versions: {
        next: null | ChangelogBuildWithUpdatestreams;
        previous: null | ChangelogBuildWithUpdatestreams;
    }

    Type declaration

    youtube_id: null | string

    If a video is showcased on the changelog

    -

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ChangelogBuildWithUpdatestreams.html b/docs/interfaces/ChangelogBuildWithUpdatestreams.html deleted file mode 100644 index b20c86c..0000000 --- a/docs/interfaces/ChangelogBuildWithUpdatestreams.html +++ /dev/null @@ -1,13 +0,0 @@ -ChangelogBuildWithUpdatestreams | osu-api-v2-js

    Interface ChangelogBuildWithUpdatestreams

    Expected from ChangelogBuildWithChangelogentriesVersions

    -

    Hierarchy

    Properties

    created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if lazer/web, should be 0, lazer doesn't show such stats)

    -
    version: null | string

    The name of the version

    -
    youtube_id: null | string

    If a video is showcased on the changelog

    -

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ChangelogBuildWithUpdatestreamsChangelogentries.html b/docs/interfaces/ChangelogBuildWithUpdatestreamsChangelogentries.html deleted file mode 100644 index 363f8a5..0000000 --- a/docs/interfaces/ChangelogBuildWithUpdatestreamsChangelogentries.html +++ /dev/null @@ -1,18 +0,0 @@ -ChangelogBuildWithUpdatestreamsChangelogentries | osu-api-v2-js

    Interface ChangelogBuildWithUpdatestreamsChangelogentries

    Expected from api.getChangelogBuilds()

    -

    Hierarchy

    Properties

    changelog_entries: {
        category: string;
        created_at: Date;
        github_pull_request_id: null | number;
        github_url: null | string;
        github_user?: {
            display_name: string;
            github_url: null | string;
            github_username: null | string;
            id: null | number;
            osu_username: null | string;
            user_id: null | number;
            user_url: null | string;
        };
        id: null | number;
        major: boolean;
        message?: null | string;
        message_html?: null | string;
        repository: null | string;
        title: null | string;
        type: string;
        url: null | string;
    }[]

    Type declaration

    • category: string
    • created_at: Date

      Can be January 1st 1970!

      -
    • github_pull_request_id: null | number
    • github_url: null | string
    • Optional github_user?: {
          display_name: string;
          github_url: null | string;
          github_username: null | string;
          id: null | number;
          osu_username: null | string;
          user_id: null | number;
          user_url: null | string;
      }

      Doesn't exist if no github user is associated with who's credited with the change

      -
      • display_name: string
      • github_url: null | string
      • github_username: null | string
      • id: null | number
      • osu_username: null | string
      • user_id: null | number
      • user_url: null | string
    • id: null | number
    • major: boolean
    • Optional message?: null | string

      Entry message in Markdown format, embedded HTML is allowed, exists only if Markdown was requested

      -
    • Optional message_html?: null | string

      Entry message in HTML format, exists only if HTML was requested

      -
    • repository: null | string
    • title: null | string
    • type: string
    • url: null | string
    created_at: Date
    display_version: string
    id: number
    update_stream: UpdateStream
    users: number

    How many users are playing on this version of the game? (if lazer/web, should be 0, lazer doesn't show such stats)

    -
    version: null | string

    The name of the version

    -
    youtube_id: null | string

    If a video is showcased on the changelog

    -

    Remarks

    The ID of a Youtube video is whatever comes after /watch?v= in its url

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.Channel-1.html b/docs/interfaces/Chat.Channel-1.html new file mode 100644 index 0000000..2d5aa66 --- /dev/null +++ b/docs/interfaces/Chat.Channel-1.html @@ -0,0 +1,10 @@ +Channel | osu-api-v2-js

    Interface Channel

    interface Channel {
        channel_id: number;
        description: null | string;
        icon: null | string;
        moderated: boolean;
        name: string;
        type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE";
        uuid: null | string;
    }

    Hierarchy (view full)

    Properties

    channel_id: number
    description: null | string
    icon: null | string
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.Channel.WithDetails.html b/docs/interfaces/Chat.Channel.WithDetails.html new file mode 100644 index 0000000..db4318b --- /dev/null +++ b/docs/interfaces/Chat.Channel.WithDetails.html @@ -0,0 +1,18 @@ +WithDetails | osu-api-v2-js
    interface WithDetails {
        channel_id: number;
        current_user_attributes: {
            can_message: boolean;
            can_message_error: null | string;
            last_read_id: null | number;
        };
        description: null | string;
        icon: null | string;
        last_message_id: number;
        moderated: boolean;
        name: string;
        type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE";
        users: number[];
        uuid: null | string;
    }

    Hierarchy (view full)

    Properties

    channel_id: number
    current_user_attributes: {
        can_message: boolean;
        can_message_error: null | string;
        last_read_id: null | number;
    }

    Type declaration

    • can_message: boolean
    • can_message_error: null | string

      The reason why messages can't be sent in this channel

      +

      Remarks

      Is null if messages can be sent

      +
    • last_read_id: null | number

      Remarks

      Is null if no message has been read (I think)

      +
    description: null | string
    icon: null | string
    last_message_id: number
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    users: number[]

    The ids of the users that are in the channel

    +

    Remarks

    Is empty for public channels

    +
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.Message.html b/docs/interfaces/Chat.Message.html new file mode 100644 index 0000000..d3f316e --- /dev/null +++ b/docs/interfaces/Chat.Message.html @@ -0,0 +1,14 @@ +Message | osu-api-v2-js

    Interface Message

    interface Message {
        channel_id: number;
        content: string;
        is_action: boolean;
        message_id: number;
        sender: User;
        sender_id: number;
        timestamp: Date;
        type: string;
        uuid?: null | string;
    }

    Properties

    channel_id: number
    content: string
    is_action: boolean
    message_id: number
    sender: User
    sender_id: number
    timestamp: Date
    type: string

    Like "action", "markdown", "plain"

    +
    uuid?: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Chat.UserSilence.html b/docs/interfaces/Chat.UserSilence.html new file mode 100644 index 0000000..677c1c0 --- /dev/null +++ b/docs/interfaces/Chat.UserSilence.html @@ -0,0 +1,4 @@ +UserSilence | osu-api-v2-js

    Interface UserSilence

    Obtainable From

    API.keepChatAlive

    +
    interface UserSilence {
        id: number;
        user_id: number;
    }

    Properties

    Properties

    id: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ChatChannel.html b/docs/interfaces/ChatChannel.html deleted file mode 100644 index e14667b..0000000 --- a/docs/interfaces/ChatChannel.html +++ /dev/null @@ -1,9 +0,0 @@ -ChatChannel | osu-api-v2-js

    Interface ChatChannel

    Expected from api.sendChatPrivateMessage(), api.createChatPrivateChannel()

    -

    Hierarchy

    Properties

    channel_id: number
    description: null | string
    icon: null | string
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ChatChannelWithDetails.html b/docs/interfaces/ChatChannelWithDetails.html deleted file mode 100644 index d63ed9e..0000000 --- a/docs/interfaces/ChatChannelWithDetails.html +++ /dev/null @@ -1,17 +0,0 @@ -ChatChannelWithDetails | osu-api-v2-js

    Interface ChatChannelWithDetails

    Expected from api.joinChatChannel(), api.getChatChannel()

    -

    Hierarchy

    Properties

    channel_id: number
    current_user_attributes: {
        can_message: boolean;
        can_message_error: null | string;
        last_read_id: null | number;
    }

    Type declaration

    • can_message: boolean
    • can_message_error: null | string

      The reason why messages can't be sent in this channel

      -

      Remarks

      Is null if messages can be sent

      -
    • last_read_id: null | number

      Remarks

      Is null if no message has been read (I think)

      -
    description: null | string
    icon: null | string
    last_message_id: number
    moderated: boolean
    name: string
    type: "PUBLIC" | "PRIVATE" | "MULTIPLAYER" | "SPECTATOR" | "TEMPORARY" | "PM" | "GROUP" | "ANNOUNCE"
    users: number[]

    The ids of the users that are in the channel

    -

    Remarks

    Is empty for public channels

    -
    uuid: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ChatMessage.html b/docs/interfaces/ChatMessage.html deleted file mode 100644 index 2461046..0000000 --- a/docs/interfaces/ChatMessage.html +++ /dev/null @@ -1,12 +0,0 @@ -ChatMessage | osu-api-v2-js

    Interface ChatMessage

    Expected from api.sendChatPrivateMessage(), api.getChatMessages(), api.sendChatMessage()

    -

    Hierarchy

    • ChatMessage

    Properties

    channel_id: number
    content: string
    is_action: boolean
    message_id: number
    sender: User
    sender_id: number
    timestamp: Date
    type: string

    Like "action", "markdown", "plain"

    -
    uuid?: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event-1.html b/docs/interfaces/Event-1.html new file mode 100644 index 0000000..1e78942 --- /dev/null +++ b/docs/interfaces/Event-1.html @@ -0,0 +1,3 @@ +Event | osu-api-v2-js

    Interface Event

    interface Event {
        created_at: Date;
        id: number;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.Achievement.html b/docs/interfaces/Event.Achievement.html new file mode 100644 index 0000000..e0f5a47 --- /dev/null +++ b/docs/interfaces/Event.Achievement.html @@ -0,0 +1,9 @@ +Achievement | osu-api-v2-js

    Interface Achievement

    interface Achievement {
        achievement: {
            description: string;
            grouping: string;
            icon_url: string;
            id: number;
            instructions: string;
            mode: null | string;
            name: string;
            ordering: number;
            slug: string;
        };
        created_at: Date;
        id: number;
        type: "achievement";
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    achievement: {
        description: string;
        grouping: string;
        icon_url: string;
        id: number;
        instructions: string;
        mode: null | string;
        name: string;
        ordering: number;
        slug: string;
    }

    Type declaration

    • description: string
    • grouping: string
    • icon_url: string
    • id: number
    • instructions: string

      Remarks

      May contain HTML (like have the text between )

      +
    • mode: null | string

      If the achievement is for a specific mode only (such as pass a 2* beatmap in taiko)

      +
    • name: string
    • ordering: number
    • slug: string
    created_at: Date
    id: number
    type: "achievement"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.Beatmap.html b/docs/interfaces/Event.Beatmap.html new file mode 100644 index 0000000..fcbe99d --- /dev/null +++ b/docs/interfaces/Event.Beatmap.html @@ -0,0 +1,7 @@ +Beatmap | osu-api-v2-js

    Interface Beatmap

    interface Beatmap {
        created_at: Date;
        id: number;
        title: string;
        url: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title} [{difficulty_name}]

    +
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapPlaycount.html b/docs/interfaces/Event.BeatmapPlaycount.html new file mode 100644 index 0000000..3cb4bf2 --- /dev/null +++ b/docs/interfaces/Event.BeatmapPlaycount.html @@ -0,0 +1,9 @@ +BeatmapPlaycount | osu-api-v2-js

    Interface BeatmapPlaycount

    interface BeatmapPlaycount {
        count: number;
        created_at: Date;
        id: number;
        title: string;
        type: "beatmapPlaycount";
        url: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    count: number
    created_at: Date
    id: number
    title: string

    {artist} - {title} [{difficulty_name}]

    +
    type: "beatmapPlaycount"
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.Beatmapset.html b/docs/interfaces/Event.Beatmapset.html new file mode 100644 index 0000000..06ccd39 --- /dev/null +++ b/docs/interfaces/Event.Beatmapset.html @@ -0,0 +1,7 @@ +Beatmapset | osu-api-v2-js

    Interface Beatmapset

    interface Beatmapset {
        created_at: Date;
        id: number;
        title: string;
        url: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    +
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetApprove.html b/docs/interfaces/Event.BeatmapsetApprove.html new file mode 100644 index 0000000..5ac04f4 --- /dev/null +++ b/docs/interfaces/Event.BeatmapsetApprove.html @@ -0,0 +1,11 @@ +BeatmapsetApprove | osu-api-v2-js

    Interface BeatmapsetApprove

    interface BeatmapsetApprove {
        approval: "ranked" | "approved" | "qualified" | "loved";
        created_at: Date;
        id: number;
        title: string;
        type: "beatmapsetApprove";
        url: string;
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    approval: "ranked" | "approved" | "qualified" | "loved"
    created_at: Date
    id: number
    title: string

    {artist} - {title}

    +
    type: "beatmapsetApprove"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    +
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetDelete.html b/docs/interfaces/Event.BeatmapsetDelete.html new file mode 100644 index 0000000..92069d9 --- /dev/null +++ b/docs/interfaces/Event.BeatmapsetDelete.html @@ -0,0 +1,8 @@ +BeatmapsetDelete | osu-api-v2-js

    Interface BeatmapsetDelete

    interface BeatmapsetDelete {
        created_at: Date;
        id: number;
        title: string;
        type: "beatmapsetDelete";
        url: string;
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    +
    type: "beatmapsetDelete"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetRevive.html b/docs/interfaces/Event.BeatmapsetRevive.html new file mode 100644 index 0000000..0718b6c --- /dev/null +++ b/docs/interfaces/Event.BeatmapsetRevive.html @@ -0,0 +1,10 @@ +BeatmapsetRevive | osu-api-v2-js

    Interface BeatmapsetRevive

    interface BeatmapsetRevive {
        created_at: Date;
        id: number;
        title: string;
        type: "beatmapsetRevive";
        url: string;
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    +
    type: "beatmapsetRevive"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    +
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetUpdate.html b/docs/interfaces/Event.BeatmapsetUpdate.html new file mode 100644 index 0000000..847b478 --- /dev/null +++ b/docs/interfaces/Event.BeatmapsetUpdate.html @@ -0,0 +1,10 @@ +BeatmapsetUpdate | osu-api-v2-js

    Interface BeatmapsetUpdate

    interface BeatmapsetUpdate {
        created_at: Date;
        id: number;
        title: string;
        type: "beatmapsetUpdate";
        url: string;
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    +
    type: "beatmapsetUpdate"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    +
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.BeatmapsetUpload.html b/docs/interfaces/Event.BeatmapsetUpload.html new file mode 100644 index 0000000..edbbbd3 --- /dev/null +++ b/docs/interfaces/Event.BeatmapsetUpload.html @@ -0,0 +1,10 @@ +BeatmapsetUpload | osu-api-v2-js

    Interface BeatmapsetUpload

    interface BeatmapsetUpload {
        created_at: Date;
        id: number;
        title: string;
        type: "beatmapsetUpload";
        url: string;
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    +
    type: "beatmapsetUpload"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    +
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.Rank.html b/docs/interfaces/Event.Rank.html new file mode 100644 index 0000000..f6e03f5 --- /dev/null +++ b/docs/interfaces/Event.Rank.html @@ -0,0 +1,15 @@ +Rank | osu-api-v2-js
    interface Rank {
        created_at: Date;
        id: number;
        mode: Rulesets;
        rank: number;
        scoreRank: string;
        title: string;
        type: "rank";
        url: string;
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    created_at: Date
    id: number
    mode: Rulesets
    rank: number

    The position achieved, like 14

    +
    scoreRank: string

    The grade, like "S"

    +
    title: string

    {artist} - {title} [{difficulty_name}]

    +
    type: "rank"
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    +
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.RankLost.html b/docs/interfaces/Event.RankLost.html new file mode 100644 index 0000000..4ab7d24 --- /dev/null +++ b/docs/interfaces/Event.RankLost.html @@ -0,0 +1,11 @@ +RankLost | osu-api-v2-js

    Interface RankLost

    interface RankLost {
        created_at: Date;
        id: number;
        mode: Rulesets;
        title: string;
        type: "rankLost";
        url: string;
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    mode: Rulesets
    title: string

    {artist} - {title} [{difficulty_name}]

    +
    type: "rankLost"
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    +
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.User.html b/docs/interfaces/Event.User.html new file mode 100644 index 0000000..2f19542 --- /dev/null +++ b/docs/interfaces/Event.User.html @@ -0,0 +1,5 @@ +User | osu-api-v2-js
    interface User {
        created_at: Date;
        id: number;
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UserSupportAgain.html b/docs/interfaces/Event.UserSupportAgain.html new file mode 100644 index 0000000..e455c66 --- /dev/null +++ b/docs/interfaces/Event.UserSupportAgain.html @@ -0,0 +1,6 @@ +UserSupportAgain | osu-api-v2-js

    Interface UserSupportAgain

    interface UserSupportAgain {
        created_at: Date;
        id: number;
        type: "userSupportAgain";
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportAgain"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UserSupportFirst.html b/docs/interfaces/Event.UserSupportFirst.html new file mode 100644 index 0000000..840b63d --- /dev/null +++ b/docs/interfaces/Event.UserSupportFirst.html @@ -0,0 +1,6 @@ +UserSupportFirst | osu-api-v2-js

    Interface UserSupportFirst

    interface UserSupportFirst {
        created_at: Date;
        id: number;
        type: "userSupportFirst";
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportFirst"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UserSupportGift.html b/docs/interfaces/Event.UserSupportGift.html new file mode 100644 index 0000000..b3fb0fa --- /dev/null +++ b/docs/interfaces/Event.UserSupportGift.html @@ -0,0 +1,6 @@ +UserSupportGift | osu-api-v2-js

    Interface UserSupportGift

    interface UserSupportGift {
        created_at: Date;
        id: number;
        type: "userSupportGift";
        user: {
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportGift"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.UsernameChange.html b/docs/interfaces/Event.UsernameChange.html new file mode 100644 index 0000000..6f7b393 --- /dev/null +++ b/docs/interfaces/Event.UsernameChange.html @@ -0,0 +1,6 @@ +UsernameChange | osu-api-v2-js

    Interface UsernameChange

    interface UsernameChange {
        created_at: Date;
        id: number;
        type: "usernameChange";
        user: {
            previousUsername: string;
            url: string;
            username: string;
        };
    }

    Hierarchy (view full)

    Properties

    Properties

    created_at: Date
    id: number
    type: "usernameChange"
    user: {
        previousUsername: string;
        url: string;
        username: string;
    }

    Type declaration

    • previousUsername: string
    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846

      +
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Event.html b/docs/interfaces/Event.html deleted file mode 100644 index 4df40dc..0000000 --- a/docs/interfaces/Event.html +++ /dev/null @@ -1,3 +0,0 @@ -Event | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventAchievement.html b/docs/interfaces/EventAchievement.html deleted file mode 100644 index 580e5f0..0000000 --- a/docs/interfaces/EventAchievement.html +++ /dev/null @@ -1,9 +0,0 @@ -EventAchievement | osu-api-v2-js

    Interface EventAchievement

    Hierarchy

    Properties

    achievement: {
        description: string;
        grouping: string;
        icon_url: string;
        id: number;
        instructions: string;
        mode: null | string;
        name: string;
        ordering: number;
        slug: string;
    }

    Type declaration

    • description: string
    • grouping: string
    • icon_url: string
    • id: number
    • instructions: string

      May contain HTML (like have the text between )

      -
    • mode: null | string

      If the achievement is for a specific mode only (such as pass a 2* beatmap in taiko)

      -
    • name: string
    • ordering: number
    • slug: string
    created_at: Date
    id: number
    type: "achievement"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmap.html b/docs/interfaces/EventBeatmap.html deleted file mode 100644 index 1a74f62..0000000 --- a/docs/interfaces/EventBeatmap.html +++ /dev/null @@ -1,7 +0,0 @@ -EventBeatmap | osu-api-v2-js

    Interface EventBeatmap

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title} [{difficulty_name}]

    -
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmapPlaycount.html b/docs/interfaces/EventBeatmapPlaycount.html deleted file mode 100644 index 9bd1cf9..0000000 --- a/docs/interfaces/EventBeatmapPlaycount.html +++ /dev/null @@ -1,9 +0,0 @@ -EventBeatmapPlaycount | osu-api-v2-js

    Interface EventBeatmapPlaycount

    Hierarchy

    Properties

    Properties

    count: number
    created_at: Date
    id: number
    title: string

    {artist} - {title} [{difficulty_name}]

    -
    type: "beatmapPlaycount"
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmapset.html b/docs/interfaces/EventBeatmapset.html deleted file mode 100644 index 93b749f..0000000 --- a/docs/interfaces/EventBeatmapset.html +++ /dev/null @@ -1,7 +0,0 @@ -EventBeatmapset | osu-api-v2-js

    Interface EventBeatmapset

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    -
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmapsetApprove.html b/docs/interfaces/EventBeatmapsetApprove.html deleted file mode 100644 index 29e5da3..0000000 --- a/docs/interfaces/EventBeatmapsetApprove.html +++ /dev/null @@ -1,11 +0,0 @@ -EventBeatmapsetApprove | osu-api-v2-js

    Interface EventBeatmapsetApprove

    Hierarchy

    Properties

    Properties

    approval: "ranked" | "approved" | "qualified" | "loved"
    created_at: Date
    id: number
    title: string

    {artist} - {title}

    -
    type: "beatmapsetApprove"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    -
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmapsetDelete.html b/docs/interfaces/EventBeatmapsetDelete.html deleted file mode 100644 index fe4819e..0000000 --- a/docs/interfaces/EventBeatmapsetDelete.html +++ /dev/null @@ -1,8 +0,0 @@ -EventBeatmapsetDelete | osu-api-v2-js

    Interface EventBeatmapsetDelete

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    -
    type: "beatmapsetDelete"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmapsetRevive.html b/docs/interfaces/EventBeatmapsetRevive.html deleted file mode 100644 index 25ae857..0000000 --- a/docs/interfaces/EventBeatmapsetRevive.html +++ /dev/null @@ -1,10 +0,0 @@ -EventBeatmapsetRevive | osu-api-v2-js

    Interface EventBeatmapsetRevive

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    -
    type: "beatmapsetRevive"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    -
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmapsetUpdate.html b/docs/interfaces/EventBeatmapsetUpdate.html deleted file mode 100644 index 53a5e50..0000000 --- a/docs/interfaces/EventBeatmapsetUpdate.html +++ /dev/null @@ -1,10 +0,0 @@ -EventBeatmapsetUpdate | osu-api-v2-js

    Interface EventBeatmapsetUpdate

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    -
    type: "beatmapsetUpdate"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    -
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventBeatmapsetUpload.html b/docs/interfaces/EventBeatmapsetUpload.html deleted file mode 100644 index 51b8c15..0000000 --- a/docs/interfaces/EventBeatmapsetUpload.html +++ /dev/null @@ -1,10 +0,0 @@ -EventBeatmapsetUpload | osu-api-v2-js

    Interface EventBeatmapsetUpload

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    title: string

    {artist} - {title}

    -
    type: "beatmapsetUpload"
    url: string

    What goes after the website's URL, like it could be the /s/689155 of https://osu.ppy.sh/s/689155 (/{beatmapset_id})

    -
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventRank.html b/docs/interfaces/EventRank.html deleted file mode 100644 index 53fa631..0000000 --- a/docs/interfaces/EventRank.html +++ /dev/null @@ -1,15 +0,0 @@ -EventRank | osu-api-v2-js

    Interface EventRank

    Hierarchy

    Properties

    created_at: Date
    id: number
    mode: Rulesets
    rank: number

    The position achieved, like 14

    -
    scoreRank: string

    The grade, like "S"

    -
    title: string

    {artist} - {title} [{difficulty_name}]

    -
    type: "rank"
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    -
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventRankLost.html b/docs/interfaces/EventRankLost.html deleted file mode 100644 index 50b08ad..0000000 --- a/docs/interfaces/EventRankLost.html +++ /dev/null @@ -1,11 +0,0 @@ -EventRankLost | osu-api-v2-js

    Interface EventRankLost

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    mode: Rulesets
    title: string

    {artist} - {title} [{difficulty_name}]

    -
    type: "rankLost"
    url: string

    What goes after the website's URL, like it could be the /b/2980857?m=0 of https://osu.ppy.sh/b/2980857?m=0 (/{beatmap_id}?m={ruleset_id})

    -
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventUser.html b/docs/interfaces/EventUser.html deleted file mode 100644 index 915a611..0000000 --- a/docs/interfaces/EventUser.html +++ /dev/null @@ -1,5 +0,0 @@ -EventUser | osu-api-v2-js

    Interface EventUser

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventUserSupportAgain.html b/docs/interfaces/EventUserSupportAgain.html deleted file mode 100644 index 6d2fc54..0000000 --- a/docs/interfaces/EventUserSupportAgain.html +++ /dev/null @@ -1,6 +0,0 @@ -EventUserSupportAgain | osu-api-v2-js

    Interface EventUserSupportAgain

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportAgain"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventUserSupportFirst.html b/docs/interfaces/EventUserSupportFirst.html deleted file mode 100644 index 41e93c5..0000000 --- a/docs/interfaces/EventUserSupportFirst.html +++ /dev/null @@ -1,6 +0,0 @@ -EventUserSupportFirst | osu-api-v2-js

    Interface EventUserSupportFirst

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportFirst"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventUserSupportGift.html b/docs/interfaces/EventUserSupportGift.html deleted file mode 100644 index 4b135e4..0000000 --- a/docs/interfaces/EventUserSupportGift.html +++ /dev/null @@ -1,6 +0,0 @@ -EventUserSupportGift | osu-api-v2-js

    Interface EventUserSupportGift

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    type: "userSupportGift"
    user: {
        url: string;
        username: string;
    }

    Type declaration

    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846 (or users instead of u)

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/EventUsernameChange.html b/docs/interfaces/EventUsernameChange.html deleted file mode 100644 index d697eb1..0000000 --- a/docs/interfaces/EventUsernameChange.html +++ /dev/null @@ -1,6 +0,0 @@ -EventUsernameChange | osu-api-v2-js

    Interface EventUsernameChange

    Hierarchy

    Properties

    Properties

    created_at: Date
    id: number
    type: "usernameChange"
    user: {
        previousUsername: string;
        url: string;
        username: string;
    }

    Type declaration

    • previousUsername: string
    • url: string

      What goes after the website's URL, so for example, it could be the /u/7276846 of https://osu.ppy.sh/u/7276846

      -
    • username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Forum.Post.html b/docs/interfaces/Forum.Post.html new file mode 100644 index 0000000..b4488db --- /dev/null +++ b/docs/interfaces/Forum.Post.html @@ -0,0 +1,16 @@ +Post | osu-api-v2-js
    interface Post {
        body: {
            html: string;
            raw: string;
        };
        created_at: Date;
        deleted_at: null | Date;
        edited_at: null | Date;
        edited_by_id: null | number;
        forum_id: number;
        id: number;
        topic_id: number;
        user_id: number;
    }

    Properties

    body: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string

      Post content in HTML format

      +
    • raw: string

      Post content in BBCode format

      +
    created_at: Date
    deleted_at: null | Date
    edited_at: null | Date
    edited_by_id: null | number
    forum_id: number
    id: number
    topic_id: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Forum.Topic.html b/docs/interfaces/Forum.Topic.html new file mode 100644 index 0000000..ebd58a6 --- /dev/null +++ b/docs/interfaces/Forum.Topic.html @@ -0,0 +1,18 @@ +Topic | osu-api-v2-js
    interface Topic {
        created_at: Date;
        deleted_at: null | Date;
        first_post_id: number;
        forum_id: number;
        id: number;
        is_locked: boolean;
        last_post_id: number;
        poll: null | {
            allow_vote_change: boolean;
            ended_at: null | Date;
            hide_incomplete_results: boolean;
            last_vote_at: null | Date;
            max_votes: number;
            options: {
                id: number;
                text: {
                    bbcode: string;
                    html: string;
                };
                vote_count?: number;
            }[];
            started_at: Date;
            title: {
                bbcode: string;
                html: string;
            };
            total_vote_count: number;
        };
        post_count: number;
        title: string;
        type: "normal" | "sticky" | "announcement";
        updated_at: Date;
        user_id: number;
    }

    Properties

    created_at: Date
    deleted_at: null | Date
    first_post_id: number
    forum_id: number
    id: number
    is_locked: boolean
    last_post_id: number
    poll: null | {
        allow_vote_change: boolean;
        ended_at: null | Date;
        hide_incomplete_results: boolean;
        last_vote_at: null | Date;
        max_votes: number;
        options: {
            id: number;
            text: {
                bbcode: string;
                html: string;
            };
            vote_count?: number;
        }[];
        started_at: Date;
        title: {
            bbcode: string;
            html: string;
        };
        total_vote_count: number;
    }

    Type declaration

    • allow_vote_change: boolean
    • ended_at: null | Date

      Remarks

      Can be in the future

      +
    • hide_incomplete_results: boolean
    • last_vote_at: null | Date
    • max_votes: number
    • options: {
          id: number;
          text: {
              bbcode: string;
              html: string;
          };
          vote_count?: number;
      }[]
    • started_at: Date
    • title: {
          bbcode: string;
          html: string;
      }
      • bbcode: string
      • html: string
    • total_vote_count: number
    post_count: number
    title: string
    type: "normal" | "sticky" | "announcement"
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ForumPost.html b/docs/interfaces/ForumPost.html deleted file mode 100644 index 12df5f5..0000000 --- a/docs/interfaces/ForumPost.html +++ /dev/null @@ -1,13 +0,0 @@ -ForumPost | osu-api-v2-js

    Interface ForumPost

    Expected from api.replyForumTopic(), api.createForumTopic(), api.getForumTopicAndPosts(), api.editForumPost()

    -

    Hierarchy

    • ForumPost

    Properties

    body: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string

      Post content in HTML format

      -
    • raw: string

      Post content in BBCode format

      -
    created_at: Date
    deleted_at: null | Date
    edited_at: null | Date
    edited_by_id: null | number
    forum_id: number
    id: number
    topic_id: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ForumTopic.html b/docs/interfaces/ForumTopic.html deleted file mode 100644 index afc17e6..0000000 --- a/docs/interfaces/ForumTopic.html +++ /dev/null @@ -1,16 +0,0 @@ -ForumTopic | osu-api-v2-js

    Interface ForumTopic

    Expected from api.createForumTopic(), api.getForumTopicAndPosts(), api.editForumTopicTitle()

    -

    Hierarchy

    • ForumTopic

    Properties

    created_at: Date
    deleted_at: null | Date
    first_post_id: number
    forum_id: number
    id: number
    is_locked: boolean
    last_post_id: number
    poll: null | {
        allow_vote_change: boolean;
        ended_at: null | Date;
        hide_incomplete_results: boolean;
        last_vote_at: null | Date;
        max_votes: number;
        options: {
            id: number;
            text: {
                bbcode: string;
                html: string;
            };
            vote_count?: number;
        }[];
        started_at: Date;
        title: {
            bbcode: string;
            html: string;
        };
        total_vote_count: number;
    }

    Type declaration

    • allow_vote_change: boolean
    • ended_at: null | Date

      Can be in the future

      -
    • hide_incomplete_results: boolean
    • last_vote_at: null | Date
    • max_votes: number
    • options: {
          id: number;
          text: {
              bbcode: string;
              html: string;
          };
          vote_count?: number;
      }[]
    • started_at: Date
    • title: {
          bbcode: string;
          html: string;
      }
      • bbcode: string
      • html: string
    • total_vote_count: number
    post_count: number
    title: string
    type: "normal" | "sticky" | "announcement"
    updated_at: Date
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/KudosuHistory.html b/docs/interfaces/KudosuHistory.html deleted file mode 100644 index c6648ac..0000000 --- a/docs/interfaces/KudosuHistory.html +++ /dev/null @@ -1,9 +0,0 @@ -KudosuHistory | osu-api-v2-js

    Interface KudosuHistory

    Expected from api.getUserKudosu()

    -

    Hierarchy

    • KudosuHistory

    Properties

    action: "reset" | "give" | "vote.give" | "vote.reset" | "revoke" | "vote.revoke"
    amount: number
    created_at: Date
    giver: null | {
        url: string;
        username: string;
    }

    Type declaration

    • url: string
    • username: string
    id: number
    model: string
    post: {
        title: string;
        url: null | string;
    }

    Type declaration

    • title: string
    • url: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Leader.html b/docs/interfaces/Leader.html deleted file mode 100644 index dc1c3f4..0000000 --- a/docs/interfaces/Leader.html +++ /dev/null @@ -1,10 +0,0 @@ -Leader | osu-api-v2-js

    Interface Leader

    Hierarchy

    • Leader

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    attempts: number
    completed: number
    pp: number
    room_id: number
    total_score: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Match.html b/docs/interfaces/Match.html deleted file mode 100644 index c538165..0000000 --- a/docs/interfaces/Match.html +++ /dev/null @@ -1,10 +0,0 @@ -Match | osu-api-v2-js

    Interface Match

    Expected from api.getMatch()

    -

    Hierarchy

    • Match

    Properties

    current_game_id: null | number
    events: {
        detail: {
            text?: string;
            type: string;
        };
        game?: {
            beatmap: BeatmapWithBeatmapset;
            beatmap_id: number;
            end_time: null | Date;
            id: number;
            mode: string;
            mode_int: Rulesets;
            mods: string[];
            scores: ScoreWithMatch[];
            scoring_type: string;
            start_time: Date;
            team_type: string;
        };
        id: number;
        timestamp: Date;
        user_id: null | number;
    }[]

    Type declaration

    • detail: {
          text?: string;
          type: string;
      }
      • Optional text?: string

        If detail.type is other, this exists and will be the name of the room

        -
      • type: string
    • Optional game?: {
          beatmap: BeatmapWithBeatmapset;
          beatmap_id: number;
          end_time: null | Date;
          id: number;
          mode: string;
          mode_int: Rulesets;
          mods: string[];
          scores: ScoreWithMatch[];
          scoring_type: string;
          start_time: Date;
          team_type: string;
      }

      If detail.type is other, then this should exist!

      -
    • id: number
    • timestamp: Date
    • user_id: null | number
    first_event_id: number
    latest_event_id: number
    match: MatchInfo

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/MatchInfo.html b/docs/interfaces/MatchInfo.html deleted file mode 100644 index 9419f28..0000000 --- a/docs/interfaces/MatchInfo.html +++ /dev/null @@ -1,6 +0,0 @@ -MatchInfo | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Leader.html b/docs/interfaces/Multiplayer.Leader.html new file mode 100644 index 0000000..33b35d3 --- /dev/null +++ b/docs/interfaces/Multiplayer.Leader.html @@ -0,0 +1,10 @@ +Leader | osu-api-v2-js
    interface Leader {
        accuracy: number;
        attempts: number;
        completed: number;
        pp: number;
        room_id: number;
        total_score: number;
        user: WithCountry;
        user_id: number;
    }

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    +
    attempts: number
    completed: number
    pp: number
    room_id: number
    total_score: number
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Match.html b/docs/interfaces/Multiplayer.Match.html new file mode 100644 index 0000000..f6838f3 --- /dev/null +++ b/docs/interfaces/Multiplayer.Match.html @@ -0,0 +1,10 @@ +Match | osu-api-v2-js

    Obtainable From

    API.getMatch

    +
    interface Match {
        current_game_id: null | number;
        events: {
            detail: {
                text?: string;
                type: string;
            };
            game?: {
                beatmap: WithBeatmapset;
                beatmap_id: number;
                end_time: null | Date;
                id: number;
                mode: string;
                mode_int: Rulesets;
                mods: string[];
                scores: WithMatch[];
                scoring_type: string;
                start_time: Date;
                team_type: string;
            };
            id: number;
            timestamp: Date;
            user_id: null | number;
        }[];
        first_event_id: number;
        latest_event_id: number;
        match: MatchInfo;
        users: WithCountry[];
    }

    Properties

    current_game_id: null | number
    events: {
        detail: {
            text?: string;
            type: string;
        };
        game?: {
            beatmap: WithBeatmapset;
            beatmap_id: number;
            end_time: null | Date;
            id: number;
            mode: string;
            mode_int: Rulesets;
            mods: string[];
            scores: WithMatch[];
            scoring_type: string;
            start_time: Date;
            team_type: string;
        };
        id: number;
        timestamp: Date;
        user_id: null | number;
    }[]

    Type declaration

    • detail: {
          text?: string;
          type: string;
      }
      • Optional text?: string

        If detail.type is other, this exists and will be the name of the room

        +
      • type: string
    • Optional game?: {
          beatmap: WithBeatmapset;
          beatmap_id: number;
          end_time: null | Date;
          id: number;
          mode: string;
          mode_int: Rulesets;
          mods: string[];
          scores: WithMatch[];
          scoring_type: string;
          start_time: Date;
          team_type: string;
      }

      If detail.type is other, then this should exist!

      +
      • beatmap: WithBeatmapset
      • beatmap_id: number
      • end_time: null | Date
      • id: number
      • mode: string
      • mode_int: Rulesets
      • mods: string[]
      • scores: WithMatch[]
      • scoring_type: string
      • start_time: Date
      • team_type: string
    • id: number
    • timestamp: Date
    • user_id: null | number
    first_event_id: number
    latest_event_id: number
    match: MatchInfo
    users: WithCountry[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.MatchInfo.html b/docs/interfaces/Multiplayer.MatchInfo.html new file mode 100644 index 0000000..f5944e1 --- /dev/null +++ b/docs/interfaces/Multiplayer.MatchInfo.html @@ -0,0 +1,6 @@ +MatchInfo | osu-api-v2-js

    Expected from api.getMatches(), Match

    +
    interface MatchInfo {
        end_time: null | Date;
        id: number;
        name: string;
        start_time: Date;
    }

    Properties

    Properties

    end_time: null | Date
    id: number
    name: string
    start_time: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.PlaylistItem.html b/docs/interfaces/Multiplayer.PlaylistItem.html new file mode 100644 index 0000000..9e6db60 --- /dev/null +++ b/docs/interfaces/Multiplayer.PlaylistItem.html @@ -0,0 +1,15 @@ +PlaylistItem | osu-api-v2-js

    Expected from Room

    +
    interface PlaylistItem {
        allowed_mods: Mod[];
        beatmap: WithBeatmapsetChecksumMaxcombo;
        beatmap_id: number;
        expired: boolean;
        id: number;
        owner_id: number;
        played_at: null | Date;
        playlist_order: null | number;
        required_mods: Mod[];
        room_id: number;
        ruleset_id: number;
    }

    Properties

    allowed_mods: Mod[]
    beatmap_id: number
    expired: boolean
    id: number
    owner_id: number
    played_at: null | Date

    Should be null if the room isn't the realtime multiplayer kind

    +
    playlist_order: null | number

    Should be null if the room isn't the realtime multiplayer kind

    +
    required_mods: Mod[]
    room_id: number
    ruleset_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Room.html b/docs/interfaces/Multiplayer.Room.html new file mode 100644 index 0000000..12b62cf --- /dev/null +++ b/docs/interfaces/Multiplayer.Room.html @@ -0,0 +1,23 @@ +Room | osu-api-v2-js

    Obtainable From

    API.getRoom

    +
    interface Room {
        active: boolean;
        auto_skip: boolean;
        category: string;
        channel_id: number;
        current_user_score?: {
            accuracy: number;
            attempts: number;
            completed: number;
            playlist_item_attempts: {
                attempts: number;
                id: number;
            }[];
            pp: number;
            room_id: number;
            total_score: number;
            user_id: number;
        };
        ends_at: null | Date;
        has_password: boolean;
        host: WithCountry;
        id: number;
        max_attempts: null | number;
        name: string;
        participant_count: number;
        playlist: PlaylistItem[];
        queue_mode: string;
        recent_participants: User[];
        starts_at: Date;
        type: string;
        user_id: number;
    }

    Properties

    active: boolean
    auto_skip: boolean
    category: string
    channel_id: number
    current_user_score?: {
        accuracy: number;
        attempts: number;
        completed: number;
        playlist_item_attempts: {
            attempts: number;
            id: number;
        }[];
        pp: number;
        room_id: number;
        total_score: number;
        user_id: number;
    }

    Only exists if authorized user

    +

    Type declaration

    • accuracy: number

      In a format where 96.40% would be 0.9640 (with some numbers after the zero)

      +
    • attempts: number
    • completed: number
    • playlist_item_attempts: {
          attempts: number;
          id: number;
      }[]

      How many (completed (I think)) attempts on each item? Empty array if the multiplayer room is the realtime kind

      +
    • pp: number
    • room_id: number
    • total_score: number
    • user_id: number
    ends_at: null | Date
    has_password: boolean
    id: number
    max_attempts: null | number
    name: string
    participant_count: number
    playlist: PlaylistItem[]
    queue_mode: string
    recent_participants: User[]
    starts_at: Date
    type: string
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Score.html b/docs/interfaces/Multiplayer.Score.html new file mode 100644 index 0000000..ddcc907 --- /dev/null +++ b/docs/interfaces/Multiplayer.Score.html @@ -0,0 +1,28 @@ +Score | osu-api-v2-js

    Expected from MultiplayerScores

    +

    Remarks

    This particular interface seems really unstable, beware

    +
    interface Score {
        accuracy: number;
        beatmap_id: number;
        ended_at: Date;
        id: number;
        max_combo: number;
        maximum_statistics: {
            great?: number;
            ignore_hit?: number;
            large_tick_hit?: number;
            small_tick_hit?: number;
        };
        mods: Mod[];
        passed: boolean;
        playlist_item_id: number;
        pp: null | number;
        rank: string;
        replay: boolean;
        room_id: number;
        ruleset_id: number;
        started_at: Date;
        statistics: {
            great?: number;
            large_bonus?: number;
            large_tick_hit?: number;
            meh?: number;
            miss?: number;
            ok?: number;
            small_bonus?: number;
            small_tick_hit?: number;
            small_tick_miss?: number;
        };
        total_score: number;
        type: string;
        user: WithCountryCover;
        user_id: number;
    }

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (and no number afterwards)

    +
    beatmap_id: number
    ended_at: Date
    id: number
    max_combo: number
    maximum_statistics: {
        great?: number;
        ignore_hit?: number;
        large_tick_hit?: number;
        small_tick_hit?: number;
    }

    All of its properties are optional because instead of being 0, the property actually disappears instead! +(so if the score has no miss, the miss property is simply not there)

    +

    Type declaration

    • Optional great?: number
    • Optional ignore_hit?: number
    • Optional large_tick_hit?: number
    • Optional small_tick_hit?: number
    mods: Mod[]
    passed: boolean
    playlist_item_id: number
    pp: null | number
    rank: string
    replay: boolean
    room_id: number
    ruleset_id: number
    started_at: Date
    statistics: {
        great?: number;
        large_bonus?: number;
        large_tick_hit?: number;
        meh?: number;
        miss?: number;
        ok?: number;
        small_bonus?: number;
        small_tick_hit?: number;
        small_tick_miss?: number;
    }

    All of its properties are optional because instead of being 0, the property actually disappears instead! +(so if the score has no miss, the miss property is simply not there)

    +

    Type declaration

    • Optional great?: number
    • Optional large_bonus?: number
    • Optional large_tick_hit?: number
    • Optional meh?: number
    • Optional miss?: number
    • Optional ok?: number
    • Optional small_bonus?: number
    • Optional small_tick_hit?: number
    • Optional small_tick_miss?: number
    total_score: number
    type: string
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Multiplayer.Scores.html b/docs/interfaces/Multiplayer.Scores.html new file mode 100644 index 0000000..70ff185 --- /dev/null +++ b/docs/interfaces/Multiplayer.Scores.html @@ -0,0 +1,10 @@ +Scores | osu-api-v2-js

    Obtainable From

    API.getPlaylistItemScores

    +
    interface Scores {
        cursor_string: null | string;
        params: {
            limit: number;
            sort: string;
        };
        scores: Multiplayer.Score[];
        total: number;
        user_score: null | Multiplayer.Score;
    }

    Properties

    cursor_string: null | string

    Will be null if there is no next page

    +
    params: {
        limit: number;
        sort: string;
    }

    Type declaration

    • limit: number
    • sort: string
    scores: Multiplayer.Score[]
    total: number

    How many scores there are across all pages, not necessarily scores.length

    +
    user_score: null | Multiplayer.Score

    Will be null if not an authorized user or if the authorized user has no score

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/MultiplayerScore.html b/docs/interfaces/MultiplayerScore.html deleted file mode 100644 index 1167a4e..0000000 --- a/docs/interfaces/MultiplayerScore.html +++ /dev/null @@ -1,26 +0,0 @@ -MultiplayerScore | osu-api-v2-js

    Interface MultiplayerScore

    Expected from MultiplayerScores

    -

    Remarks

    This particular interface seems really unstable, beware

    -

    Hierarchy

    • MultiplayerScore

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (and no number afterwards)

    -
    beatmap_id: number
    ended_at: Date
    id: number
    max_combo: number
    maximum_statistics: {
        great: number;
        ignore_hit: number;
        large_tick_hit: number;
        small_tick_hit: number;
    }

    Type declaration

    • great: number
    • ignore_hit: number
    • large_tick_hit: number
    • small_tick_hit: number
    mods: Mod[]
    passed: boolean
    playlist_item_id: number
    pp: null | number
    rank: string
    replay: boolean
    room_id: number
    ruleset_id: number
    started_at: Date
    statistics: {
        great?: number;
        large_bonus?: number;
        large_tick_hit?: number;
        meh?: number;
        miss?: number;
        ok?: number;
        small_bonus?: number;
        small_tick_hit?: number;
        small_tick_miss?: number;
    }

    All of its properties are optional because instead of being 0, the property actually disappears instead! -(so if the score has no miss, the miss property is simply not there)

    -

    Type declaration

    • Optional great?: number
    • Optional large_bonus?: number
    • Optional large_tick_hit?: number
    • Optional meh?: number
    • Optional miss?: number
    • Optional ok?: number
    • Optional small_bonus?: number
    • Optional small_tick_hit?: number
    • Optional small_tick_miss?: number
    total_score: number
    type: string
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/MultiplayerScores.html b/docs/interfaces/MultiplayerScores.html deleted file mode 100644 index 0f1c6ea..0000000 --- a/docs/interfaces/MultiplayerScores.html +++ /dev/null @@ -1,10 +0,0 @@ -MultiplayerScores | osu-api-v2-js

    Interface MultiplayerScores

    Expected from api.getPlaylistItemScores()

    -

    Hierarchy

    • MultiplayerScores

    Properties

    cursor_string: null | string

    Will be null if there is no next page

    -
    params: {
        limit: number;
        sort: string;
    }

    Type declaration

    • limit: number
    • sort: string
    total: number

    How many scores there are across all pages, not necessarily scores.length

    -
    user_score: null | MultiplayerScore

    Will be null if not an authorized user or if the authorized user has no score

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/News.Post.html b/docs/interfaces/News.Post.html new file mode 100644 index 0000000..abb571b --- /dev/null +++ b/docs/interfaces/News.Post.html @@ -0,0 +1,13 @@ +Post | osu-api-v2-js

    Interface Post

    Expected from api.getNews(), NewsPostWithContentNavigation

    +
    interface Post {
        author: string;
        edit_url: string;
        first_image: null | string;
        id: number;
        published_at: Date;
        slug: string;
        title: string;
        updated_at: Date;
    }

    Hierarchy (view full)

    Properties

    author: string
    edit_url: string

    Link to view the file on GitHub

    +
    first_image: null | string

    Link to the first image in the document

    +
    id: number
    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    +
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/News.PostWithContentNavigation.html b/docs/interfaces/News.PostWithContentNavigation.html new file mode 100644 index 0000000..1e5567a --- /dev/null +++ b/docs/interfaces/News.PostWithContentNavigation.html @@ -0,0 +1,16 @@ +PostWithContentNavigation | osu-api-v2-js

    Interface PostWithContentNavigation

    Obtainable From

    API.getNewsPost

    +
    interface PostWithContentNavigation {
        author: string;
        content: string;
        edit_url: string;
        first_image: null | string;
        id: number;
        navigation: {
            newer?: News.Post;
            older?: News.Post;
        };
        published_at: Date;
        slug: string;
        title: string;
        updated_at: Date;
    }

    Hierarchy (view full)

    Properties

    author: string
    content: string

    With HTML

    +
    edit_url: string

    Link to view the file on GitHub

    +
    first_image: null | string

    Link to the first image in the document

    +
    id: number
    navigation: {
        newer?: News.Post;
        older?: News.Post;
    }

    Type declaration

    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    +
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/NewsPost.html b/docs/interfaces/NewsPost.html deleted file mode 100644 index f575407..0000000 --- a/docs/interfaces/NewsPost.html +++ /dev/null @@ -1,13 +0,0 @@ -NewsPost | osu-api-v2-js

    Interface NewsPost

    Expected from api.getNews(), NewsPostWithContentNavigation

    -

    Hierarchy

    Properties

    author: string
    edit_url: string

    Link to view the file on GitHub

    -
    first_image: null | string

    Link to the first image in the document

    -
    id: number
    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    -
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/NewsPostWithContentNavigation.html b/docs/interfaces/NewsPostWithContentNavigation.html deleted file mode 100644 index 7ddb1db..0000000 --- a/docs/interfaces/NewsPostWithContentNavigation.html +++ /dev/null @@ -1,16 +0,0 @@ -NewsPostWithContentNavigation | osu-api-v2-js

    Interface NewsPostWithContentNavigation

    Expected from api.getNewsPost()

    -

    Hierarchy

    Properties

    author: string
    content: string

    With HTML

    -
    edit_url: string

    Link to view the file on GitHub

    -
    first_image: null | string

    Link to the first image in the document

    -
    id: number
    navigation: {
        newer?: NewsPost;
        older?: NewsPost;
    }

    Type declaration

    published_at: Date
    slug: string

    Filename without the extension, used in URLs

    -
    title: string
    updated_at: Date

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/PlaylistItem.html b/docs/interfaces/PlaylistItem.html deleted file mode 100644 index 5ce15fa..0000000 --- a/docs/interfaces/PlaylistItem.html +++ /dev/null @@ -1,15 +0,0 @@ -PlaylistItem | osu-api-v2-js

    Interface PlaylistItem

    Expected from Room

    -

    Hierarchy

    • PlaylistItem

    Properties

    allowed_mods: Mod[]
    beatmap_id: number
    expired: boolean
    id: number
    owner_id: number
    played_at: null | Date

    Should be null if the room isn't the realtime multiplayer kind

    -
    playlist_order: null | number

    Should be null if the room isn't the realtime multiplayer kind

    -
    required_mods: Mod[]
    room_id: number
    ruleset_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/PollConfig.html b/docs/interfaces/PollConfig.html index a4c9888..6d0caf2 100644 --- a/docs/interfaces/PollConfig.html +++ b/docs/interfaces/PollConfig.html @@ -1,13 +1,13 @@ -PollConfig | osu-api-v2-js

    Interface PollConfig

    Feel free to use this interface to help you create polls with api.createForumTopic()!

    -

    Hierarchy

    • PollConfig

    Properties

    hide_results?: boolean

    (defaults to false) Should the results of the poll be hidden while the voting period is still active?

    -
    length_days: number

    Length of voting period in days, 0 means forever

    -
    max_options?: number

    (defaults to 1) The maximum amount of votes per user!

    -
    options: string[]

    The things the users can vote for

    -
    title: string
    vote_change?: boolean

    (defaults to false) Do you allow users to change their vote?

    -

    Generated using TypeDoc

    \ No newline at end of file +PollConfig | osu-api-v2-js

    Interface PollConfig

    Feel free to use this interface to help you create polls with API.createForumTopic!

    +
    interface PollConfig {
        hide_results?: boolean;
        length_days: number;
        max_options?: number;
        options: string[];
        title: string;
        vote_change?: boolean;
    }

    Properties

    hide_results?: boolean

    (defaults to false) Should the results of the poll be hidden while the voting period is still active?

    +
    length_days: number

    Length of voting period in days, 0 means forever

    +
    max_options?: number

    (defaults to 1) The maximum amount of votes per user!

    +
    options: string[]

    The things the users can vote for

    +
    title: string
    vote_change?: boolean

    defaults to false) Do you allow users to change their vote?

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Rankings.Country.html b/docs/interfaces/Rankings.Country.html new file mode 100644 index 0000000..b274fe2 --- /dev/null +++ b/docs/interfaces/Rankings.Country.html @@ -0,0 +1,9 @@ +Country | osu-api-v2-js

    Expected from api.getCountryRanking()

    +
    interface Country {
        cursor: {
            page: null | number;
        };
        ranking: {
            active_users: number;
            code: string;
            country: {
                code: string;
                name: string;
            };
            performance: number;
            play_count: number;
            ranked_score: number;
        }[];
        total: number;
    }

    Hierarchy

    • RankingsBare
      • Country

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      +
    ranking: {
        active_users: number;
        code: string;
        country: {
            code: string;
            name: string;
        };
        performance: number;
        play_count: number;
        ranked_score: number;
    }[]

    Type declaration

    • active_users: number
    • code: string

      Same as country.code

      +
    • country: {
          code: string;
          name: string;
      }
      • code: string

        The country's ISO 3166-1 alpha-2 code! (France would be FR, United States US)

        +
      • name: string
    • performance: number
    • play_count: number
    • ranked_score: number
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Rankings.Spotlight.html b/docs/interfaces/Rankings.Spotlight.html new file mode 100644 index 0000000..1b983a3 --- /dev/null +++ b/docs/interfaces/Rankings.Spotlight.html @@ -0,0 +1,5 @@ +Spotlight | osu-api-v2-js

    Expected from api.getSpotlightRanking()

    +
    interface Spotlight {
        beatmapsets: Beatmapset.Extended[];
        ranking: User.Statistics.WithUser[];
        spotlight: WithParticipantcount;
    }

    Properties

    beatmapsets: Beatmapset.Extended[]

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Rankings.User.html b/docs/interfaces/Rankings.User.html new file mode 100644 index 0000000..5614bb3 --- /dev/null +++ b/docs/interfaces/Rankings.User.html @@ -0,0 +1,7 @@ +User | osu-api-v2-js

    Expected from api.getRanking()

    +
    interface User {
        cursor: {
            page: null | number;
        };
        ranking: User.Statistics.WithUser[];
        total: number;
    }

    Hierarchy

    • RankingsBare
      • User

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      +
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Rankings.html b/docs/interfaces/Rankings.html deleted file mode 100644 index 7b49d6d..0000000 --- a/docs/interfaces/Rankings.html +++ /dev/null @@ -1,7 +0,0 @@ -Rankings | osu-api-v2-js

    Interface Rankings

    Expected from api.getRanking()

    -

    Hierarchy

    • RankingsBare
      • Rankings

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      -
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/RankingsCountry.html b/docs/interfaces/RankingsCountry.html deleted file mode 100644 index 34a4edd..0000000 --- a/docs/interfaces/RankingsCountry.html +++ /dev/null @@ -1,10 +0,0 @@ -RankingsCountry | osu-api-v2-js

    Interface RankingsCountry

    Expected from api.getCountryRanking()

    -

    Remarks

    Not in the API's documentation

    -

    Hierarchy

    • RankingsBare
      • RankingsCountry

    Properties

    Properties

    cursor: {
        page: null | number;
    }

    Type declaration

    • page: null | number

      The number of the next page, is null if no more results are available

      -
    ranking: {
        active_users: number;
        code: string;
        country: {
            code: string;
            name: string;
        };
        performance: number;
        play_count: number;
        ranked_score: number;
    }[]

    Type declaration

    • active_users: number
    • code: string

      Same as country.code

      -
    • country: {
          code: string;
          name: string;
      }
      • code: string

        The country's ISO 3166-1 alpha-2 code! (France would be FR, United States US)

        -
      • name: string
    • performance: number
    • play_count: number
    • ranked_score: number
    total: number

    Total amount of elements available across all pages, not on this specific page! Maximum of 10000

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/RankingsSpotlight.html b/docs/interfaces/RankingsSpotlight.html deleted file mode 100644 index 6bd8ed0..0000000 --- a/docs/interfaces/RankingsSpotlight.html +++ /dev/null @@ -1,5 +0,0 @@ -RankingsSpotlight | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Room.html b/docs/interfaces/Room.html deleted file mode 100644 index 683b1d1..0000000 --- a/docs/interfaces/Room.html +++ /dev/null @@ -1,23 +0,0 @@ -Room | osu-api-v2-js

    Interface Room

    Expected from api.getRoom()

    -

    Hierarchy

    • Room

    Properties

    active: boolean
    auto_skip: boolean
    category: string
    channel_id: number
    current_user_score?: {
        accuracy: number;
        attempts: number;
        completed: number;
        playlist_item_attempts: {
            attempts: number;
            id: number;
        }[];
        pp: number;
        room_id: number;
        total_score: number;
        user_id: number;
    }

    Only exists if authorized user

    -

    Type declaration

    • accuracy: number

      In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

      -
    • attempts: number
    • completed: number
    • playlist_item_attempts: {
          attempts: number;
          id: number;
      }[]

      How many (completed?) attempts on each item? Empty array if the multiplayer room is the realtime kind

      -
    • pp: number
    • room_id: number
    • total_score: number
    • user_id: number
    ends_at: null | Date
    has_password: boolean
    id: number
    max_attempts: null | number
    name: string
    participant_count: number
    playlist: PlaylistItem[]
    queue_mode: string
    recent_participants: User[]
    starts_at: Date
    type: string
    user_id: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score-1.html b/docs/interfaces/Score-1.html new file mode 100644 index 0000000..0f21de8 --- /dev/null +++ b/docs/interfaces/Score-1.html @@ -0,0 +1,27 @@ +Score | osu-api-v2-js

    Interface Score

    Obtainable From

    API.getBeatmapUserScores

    +
    interface Score {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: string;
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user_id: number;
        weight?: {
            percentage: number;
            pp: number;
        };
    }

    Hierarchy (view full)

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    +
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    +
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithMatch.html b/docs/interfaces/Score.WithMatch.html new file mode 100644 index 0000000..5eb3619 --- /dev/null +++ b/docs/interfaces/Score.WithMatch.html @@ -0,0 +1,28 @@ +WithMatch | osu-api-v2-js

    Interface WithMatch

    Expected from Match

    +
    interface WithMatch {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        match: {
            pass: boolean;
            slot: number;
            team: string;
        };
        max_combo: number;
        mode: string;
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user_id: number;
        weight?: {
            percentage: number;
            pp: number;
        };
    }

    Hierarchy (view full)

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    +
    best_id: null | number
    created_at: Date
    id: null | number
    match: {
        pass: boolean;
        slot: number;
        team: string;
    }

    Type declaration

    • pass: boolean
    • slot: number
    • team: string
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    +
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithUser.html b/docs/interfaces/Score.WithUser.html new file mode 100644 index 0000000..481475c --- /dev/null +++ b/docs/interfaces/Score.WithUser.html @@ -0,0 +1,28 @@ +WithUser | osu-api-v2-js

    Interface WithUser

    Obtainable From

    API.getBeatmapScores

    +
    interface WithUser {
        accuracy: number;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: string;
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: WithCountryCover;
        user_id: number;
        weight?: {
            percentage: number;
            pp: number;
        };
    }

    Hierarchy (view full)

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    +
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    +
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithUserBeatmap.html b/docs/interfaces/Score.WithUserBeatmap.html new file mode 100644 index 0000000..b5cea44 --- /dev/null +++ b/docs/interfaces/Score.WithUserBeatmap.html @@ -0,0 +1,29 @@ +WithUserBeatmap | osu-api-v2-js

    Interface WithUserBeatmap

    Expected from BeatmapUserScore

    +
    interface WithUserBeatmap {
        accuracy: number;
        beatmap: Beatmap.Extended;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: string;
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: User;
        user_id: number;
        weight?: {
            percentage: number;
            pp: number;
        };
    }

    Hierarchy (view full)

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    +
    beatmap: Beatmap.Extended
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    +
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.WithUserBeatmapBeatmapset.html b/docs/interfaces/Score.WithUserBeatmapBeatmapset.html new file mode 100644 index 0000000..1fecf2c --- /dev/null +++ b/docs/interfaces/Score.WithUserBeatmapBeatmapset.html @@ -0,0 +1,30 @@ +WithUserBeatmapBeatmapset | osu-api-v2-js

    Interface WithUserBeatmapBeatmapset

    Expected from api.getUserScores()

    +
    interface WithUserBeatmapBeatmapset {
        accuracy: number;
        beatmap: Beatmap.Extended;
        beatmapset: Beatmapset;
        best_id: null | number;
        created_at: Date;
        id: null | number;
        max_combo: number;
        mode: string;
        mode_int: Rulesets;
        mods: string[];
        passed: boolean;
        perfect: boolean;
        pp: null | number;
        rank: string;
        replay: boolean;
        score: number;
        statistics: {
            count_100: number;
            count_300: number;
            count_50: null | number;
            count_geki: null | number;
            count_katu: null | number;
            count_miss: number;
        };
        type: string;
        user: User;
        user_id: number;
        weight?: {
            percentage: number;
            pp: number;
        };
    }

    Hierarchy (view full)

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    +
    beatmap: Beatmap.Extended
    beatmapset: Beatmapset
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    Remarks

    Is null when Beatmap is Loved (for example)

    +
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    +
    replay: boolean

    Can this score's replay be downloaded from the website?

    +
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: null | number;
        count_geki: null | number;
        count_katu: null | number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: null | number

      Remarks

      Is null if the score's gamemode is Taiko

      +
    • count_geki: null | number
    • count_katu: null | number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    +
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Score.html b/docs/interfaces/Score.html deleted file mode 100644 index d5a9d58..0000000 --- a/docs/interfaces/Score.html +++ /dev/null @@ -1,26 +0,0 @@ -Score | osu-api-v2-js

    Interface Score

    Expected from api.getBeatmapUserScores()

    -

    Hierarchy

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: number;
        count_geki: number;
        count_katu: number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: number
    • count_geki: number
    • count_katu: number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    -
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ScoreWithMatch.html b/docs/interfaces/ScoreWithMatch.html deleted file mode 100644 index 5b2b08c..0000000 --- a/docs/interfaces/ScoreWithMatch.html +++ /dev/null @@ -1,27 +0,0 @@ -ScoreWithMatch | osu-api-v2-js

    Interface ScoreWithMatch

    Expected from Match

    -

    Hierarchy

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    created_at: Date
    id: null | number
    match: {
        pass: boolean;
        slot: number;
        team: string;
    }

    Type declaration

    • pass: boolean
    • slot: number
    • team: string
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: number;
        count_geki: number;
        count_katu: number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: number
    • count_geki: number
    • count_katu: number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    -
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ScoreWithUser.html b/docs/interfaces/ScoreWithUser.html deleted file mode 100644 index c430989..0000000 --- a/docs/interfaces/ScoreWithUser.html +++ /dev/null @@ -1,27 +0,0 @@ -ScoreWithUser | osu-api-v2-js

    Interface ScoreWithUser

    Expected from api.getBeatmapScores()

    -

    Hierarchy

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: number;
        count_geki: number;
        count_katu: number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: number
    • count_geki: number
    • count_katu: number
    • count_miss: number
    type: string
    user_id: number

    The ID of the user who made the score

    -
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ScoreWithUserBeatmap.html b/docs/interfaces/ScoreWithUserBeatmap.html deleted file mode 100644 index 2bcce86..0000000 --- a/docs/interfaces/ScoreWithUserBeatmap.html +++ /dev/null @@ -1,28 +0,0 @@ -ScoreWithUserBeatmap | osu-api-v2-js

    Interface ScoreWithUserBeatmap

    Expected from BeatmapUserScore

    -

    Hierarchy

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: number;
        count_geki: number;
        count_katu: number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: number
    • count_geki: number
    • count_katu: number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    -
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/ScoreWithUserBeatmapBeatmapset.html b/docs/interfaces/ScoreWithUserBeatmapBeatmapset.html deleted file mode 100644 index 1f63647..0000000 --- a/docs/interfaces/ScoreWithUserBeatmapBeatmapset.html +++ /dev/null @@ -1,29 +0,0 @@ -ScoreWithUserBeatmapBeatmapset | osu-api-v2-js

    Interface ScoreWithUserBeatmapBeatmapset

    Expected from api.getUserScores()

    -

    Hierarchy

    Properties

    accuracy: number

    In a format where 96.40% would be 0.9640 (likely with some numbers after the zero)

    -
    beatmapset: Beatmapset
    best_id: null | number
    created_at: Date
    id: null | number
    max_combo: number
    mode: string
    mode_int: Rulesets
    mods: string[]
    passed: boolean
    perfect: boolean
    pp: null | number

    null when Beatmap is Loved (for example)

    -
    rank: string

    Also known as a grade, for example this is X (SS) if accuracy is 1 (100.00%)

    -
    replay: boolean

    Can this score's replay be downloaded from the website?

    -
    score: number
    statistics: {
        count_100: number;
        count_300: number;
        count_50: number;
        count_geki: number;
        count_katu: number;
        count_miss: number;
    }

    Type declaration

    • count_100: number
    • count_300: number
    • count_50: number
    • count_geki: number
    • count_katu: number
    • count_miss: number
    type: string
    user: User
    user_id: number

    The ID of the user who made the score

    -
    weight?: {
        percentage: number;
        pp: number;
    }

    Type declaration

    • percentage: number
    • pp: number

    Remarks

    Only if type is set to best on getUserScores

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/SearchResult.User.html b/docs/interfaces/SearchResult.User.html new file mode 100644 index 0000000..7833058 --- /dev/null +++ b/docs/interfaces/SearchResult.User.html @@ -0,0 +1,6 @@ +User | osu-api-v2-js

    Obtainable From

    API.searchUser

    +
    interface User {
        data: User[];
        total: number;
    }

    Hierarchy

    • SearchResult
      • User

    Properties

    Properties

    data: User[]

    The Users that have been found

    +
    total: number

    How many results there are across all pages

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/SearchResult.Wiki.html b/docs/interfaces/SearchResult.Wiki.html new file mode 100644 index 0000000..c46a168 --- /dev/null +++ b/docs/interfaces/SearchResult.Wiki.html @@ -0,0 +1,6 @@ +Wiki | osu-api-v2-js

    Obtainable From

    API.searchWiki

    +
    interface Wiki {
        data: WikiPage[];
        total: number;
    }

    Hierarchy

    • SearchResult
      • Wiki

    Properties

    Properties

    data: WikiPage[]

    The WikiPages that have been found

    +
    total: number

    How many results there are across all pages

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/SearchResultUser.html b/docs/interfaces/SearchResultUser.html deleted file mode 100644 index a473dfb..0000000 --- a/docs/interfaces/SearchResultUser.html +++ /dev/null @@ -1,6 +0,0 @@ -SearchResultUser | osu-api-v2-js

    Interface SearchResultUser

    Expected from api.searchUser()

    -

    Hierarchy

    • SearchResult
      • SearchResultUser

    Properties

    Properties

    data: User[]

    The Users that have been found

    -
    total: number

    How many results there are across all pages

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/SearchResultWiki.html b/docs/interfaces/SearchResultWiki.html deleted file mode 100644 index 8789518..0000000 --- a/docs/interfaces/SearchResultWiki.html +++ /dev/null @@ -1,6 +0,0 @@ -SearchResultWiki | osu-api-v2-js

    Interface SearchResultWiki

    Expected from api.searchWiki()

    -

    Hierarchy

    • SearchResult
      • SearchResultWiki

    Properties

    Properties

    data: WikiPage[]

    The WikiPages that have been found

    -
    total: number

    How many results there are across all pages

    -

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Spotlight-1.html b/docs/interfaces/Spotlight-1.html new file mode 100644 index 0000000..3b38fbd --- /dev/null +++ b/docs/interfaces/Spotlight-1.html @@ -0,0 +1,9 @@ +Spotlight | osu-api-v2-js

    Interface Spotlight

    Expected from api.getSpotlights()

    +
    interface Spotlight {
        end_date: Date;
        id: number;
        mode_specific: boolean;
        name: string;
        start_date: Date;
        type: string;
    }

    Hierarchy (view full)

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    +
    name: string
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Spotlight.WithParticipantcount.html b/docs/interfaces/Spotlight.WithParticipantcount.html new file mode 100644 index 0000000..056b323 --- /dev/null +++ b/docs/interfaces/Spotlight.WithParticipantcount.html @@ -0,0 +1,10 @@ +WithParticipantcount | osu-api-v2-js

    Interface WithParticipantcount

    Expected from RankingsSpotlight

    +
    interface WithParticipantcount {
        end_date: Date;
        id: number;
        mode_specific: boolean;
        name: string;
        participant_count: number;
        start_date: Date;
        type: string;
    }

    Hierarchy (view full)

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    +
    name: string
    participant_count: number
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/Spotlight.html b/docs/interfaces/Spotlight.html deleted file mode 100644 index de89df0..0000000 --- a/docs/interfaces/Spotlight.html +++ /dev/null @@ -1,9 +0,0 @@ -Spotlight | osu-api-v2-js

    Interface Spotlight

    Expected from api.getSpotlights()

    -

    Hierarchy

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    -
    name: string
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/SpotlightWithParticipantcount.html b/docs/interfaces/SpotlightWithParticipantcount.html deleted file mode 100644 index 5b1c6f5..0000000 --- a/docs/interfaces/SpotlightWithParticipantcount.html +++ /dev/null @@ -1,10 +0,0 @@ -SpotlightWithParticipantcount | osu-api-v2-js

    Interface SpotlightWithParticipantcount

    Expected from RankingsSpotlight

    -

    Hierarchy

    Properties

    end_date: Date
    id: number
    mode_specific: boolean

    Pretty sure this is only true when the spotlight has different beatmaps for each ruleset

    -
    name: string
    participant_count: number
    start_date: Date
    type: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UpdateStream.html b/docs/interfaces/UpdateStream.html deleted file mode 100644 index c5e1297..0000000 --- a/docs/interfaces/UpdateStream.html +++ /dev/null @@ -1,6 +0,0 @@ -UpdateStream | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User-1.html b/docs/interfaces/User-1.html new file mode 100644 index 0000000..a257d0b --- /dev/null +++ b/docs/interfaces/User-1.html @@ -0,0 +1,15 @@ +User | osu-api-v2-js

    Interface User

    Expected from BeatmapsetExtendedPlus, Room, SearchResultUser

    +
    interface User {
        avatar_url: string;
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Extended-1.html b/docs/interfaces/User.Extended-1.html new file mode 100644 index 0000000..6b0b341 --- /dev/null +++ b/docs/interfaces/User.Extended-1.html @@ -0,0 +1,64 @@ +Extended | osu-api-v2-js

    Interface Extended

    Obtainable From

    API.getUser

    +
    interface Extended {
        account_history: {
            description: null | string;
            id: number;
            length: number;
            permanent: boolean;
            timestamp: Date;
            type: "note" | "restriction" | "silence";
        }[];
        active_tournament_banners: {
            id: number;
            image: string;
            tournament_id: number;
        }[];
        avatar_url: string;
        badges: {
            awarded_at: Date;
            description: string;
            image_url: string;
            url: string;
        }[];
        beatmap_playcounts_count: number;
        comments_count: number;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        cover_url: string;
        default_group: string;
        discord: null | string;
        favourite_beatmapset_count: number;
        follower_count: number;
        graveyard_beatmapset_count: number;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | string[];
            short_name: string;
        }[];
        guest_beatmapset_count: number;
        has_supported: boolean;
        id: number;
        interests: null | string;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        join_date: Date;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        location: null | string;
        loved_beatmapset_count: number;
        mapping_follower_count: number;
        max_blocks: number;
        max_friends: number;
        monthly_playcounts: {
            count: number;
            start_date: Date;
        }[];
        nominated_beatmapset_count: number;
        occupation: null | string;
        page: {
            html: string;
            raw: string;
        };
        pending_beatmapset_count: number;
        playmode: string;
        playstyle: string[];
        pm_friends_only: boolean;
        post_count: number;
        previous_usernames: string[];
        profile_colour: null | string;
        profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[];
        rank_highest: null | {
            rank: number;
            updated_at: Date;
        };
        rank_history: null | {
            data: number[];
            mode: string;
        };
        replays_watched_counts: {
            count: number;
            start_date: Date;
        }[];
        scores_best_count: number;
        scores_first_count: number;
        scores_pinned_count: number;
        scores_recent_count: number;
        statistics: WithCountryrank;
        support_level: number;
        title: null | string;
        title_url: null | string;
        twitter: null | string;
        user_achievements: {
            achieved_at: Date;
            achievement_id: number;
        }[];
        username: string;
        website: null | string;
    }

    Hierarchy (view full)

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banners: {
        id: number;
        image: string;
        tournament_id: number;
    }[]

    Type declaration

    • id: number
    • image: string
    • tournament_id: number
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      +
    pending_beatmapset_count: number
    playmode: string
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: string;
    }

    Type declaration

    • data: number[]
    • mode: string
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    +
    scores_recent_count: number
    statistics: WithCountryrank
    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Extended.WithStatisticsrulesets.html b/docs/interfaces/User.Extended.WithStatisticsrulesets.html new file mode 100644 index 0000000..bf65118 --- /dev/null +++ b/docs/interfaces/User.Extended.WithStatisticsrulesets.html @@ -0,0 +1,66 @@ +WithStatisticsrulesets | osu-api-v2-js

    Interface WithStatisticsrulesets

    Obtainable From

    API.getResourceOwner

    +
    interface WithStatisticsrulesets {
        account_history: {
            description: null | string;
            id: number;
            length: number;
            permanent: boolean;
            timestamp: Date;
            type: "note" | "restriction" | "silence";
        }[];
        active_tournament_banners: {
            id: number;
            image: string;
            tournament_id: number;
        }[];
        avatar_url: string;
        badges: {
            awarded_at: Date;
            description: string;
            image_url: string;
            url: string;
        }[];
        beatmap_playcounts_count: number;
        comments_count: number;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        cover_url: string;
        default_group: string;
        discord: null | string;
        favourite_beatmapset_count: number;
        follower_count: number;
        graveyard_beatmapset_count: number;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | string[];
            short_name: string;
        }[];
        guest_beatmapset_count: number;
        has_supported: boolean;
        id: number;
        interests: null | string;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_restricted: boolean;
        is_supporter: boolean;
        join_date: Date;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        location: null | string;
        loved_beatmapset_count: number;
        mapping_follower_count: number;
        max_blocks: number;
        max_friends: number;
        monthly_playcounts: {
            count: number;
            start_date: Date;
        }[];
        nominated_beatmapset_count: number;
        occupation: null | string;
        page: {
            html: string;
            raw: string;
        };
        pending_beatmapset_count: number;
        playmode: string;
        playstyle: string[];
        pm_friends_only: boolean;
        post_count: number;
        previous_usernames: string[];
        profile_colour: null | string;
        profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[];
        rank_highest: null | {
            rank: number;
            updated_at: Date;
        };
        rank_history: null | {
            data: number[];
            mode: string;
        };
        replays_watched_counts: {
            count: number;
            start_date: Date;
        }[];
        scores_best_count: number;
        scores_first_count: number;
        scores_pinned_count: number;
        scores_recent_count: number;
        statistics: WithCountryrank;
        statistics_rulesets: {
            fruits?: Statistics;
            mania?: Statistics;
            osu?: Statistics;
            taiko?: Statistics;
        };
        support_level: number;
        title: null | string;
        title_url: null | string;
        twitter: null | string;
        user_achievements: {
            achieved_at: Date;
            achievement_id: number;
        }[];
        username: string;
        website: null | string;
    }

    Hierarchy (view full)

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banners: {
        id: number;
        image: string;
        tournament_id: number;
    }[]

    Type declaration

    • id: number
    • image: string
    • tournament_id: number
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_restricted: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      +
    pending_beatmapset_count: number
    playmode: string
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: string;
    }

    Type declaration

    • data: number[]
    • mode: string
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    +
    scores_recent_count: number
    statistics: WithCountryrank
    statistics_rulesets: {
        fruits?: Statistics;
        mania?: Statistics;
        osu?: Statistics;
        taiko?: Statistics;
    }

    Type declaration

    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.KudosuHistory.html b/docs/interfaces/User.KudosuHistory.html new file mode 100644 index 0000000..8e138b5 --- /dev/null +++ b/docs/interfaces/User.KudosuHistory.html @@ -0,0 +1,9 @@ +KudosuHistory | osu-api-v2-js

    Interface KudosuHistory

    Obtainable From

    API.getUserKudosu

    +
    interface KudosuHistory {
        action: "reset" | "give" | "vote.give" | "vote.reset" | "revoke" | "vote.revoke";
        amount: number;
        created_at: Date;
        giver: null | {
            url: string;
            username: string;
        };
        id: number;
        model: string;
        post: {
            title: string;
            url: null | string;
        };
    }

    Properties

    action: "reset" | "give" | "vote.give" | "vote.reset" | "revoke" | "vote.revoke"
    amount: number
    created_at: Date
    giver: null | {
        url: string;
        username: string;
    }

    Type declaration

    • url: string
    • username: string
    id: number
    model: string
    post: {
        title: string;
        url: null | string;
    }

    Type declaration

    • title: string
    • url: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Statistics-1.html b/docs/interfaces/User.Statistics-1.html new file mode 100644 index 0000000..7a56e19 --- /dev/null +++ b/docs/interfaces/User.Statistics-1.html @@ -0,0 +1,23 @@ +Statistics | osu-api-v2-js

    Interface Statistics

    Expected from UserWithCountryCoverGroupsStatisticsrulesets, UserWithCountryCoverGroupsStatisticsSupport

    +
    interface Statistics {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
    }

    Hierarchy (view full)

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    +
    is_ranked: boolean

    Hasn't went inactive in the rankings

    +
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Statistics.WithCountryrank.html b/docs/interfaces/User.Statistics.WithCountryrank.html new file mode 100644 index 0000000..6fe8320 --- /dev/null +++ b/docs/interfaces/User.Statistics.WithCountryrank.html @@ -0,0 +1,24 @@ +WithCountryrank | osu-api-v2-js

    Expected from UserExtended

    +
    interface WithCountryrank {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        country_rank: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
    }

    Hierarchy (view full)

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    country_rank: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    +
    is_ranked: boolean

    Hasn't went inactive in the rankings

    +
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.Statistics.WithUser.html b/docs/interfaces/User.Statistics.WithUser.html new file mode 100644 index 0000000..8060186 --- /dev/null +++ b/docs/interfaces/User.Statistics.WithUser.html @@ -0,0 +1,24 @@ +WithUser | osu-api-v2-js

    Expected from Rankings

    +
    interface WithUser {
        count_100: number;
        count_300: number;
        count_50: number;
        count_miss: number;
        global_rank: null | number;
        global_rank_exp: null | number;
        grade_counts: {
            a: number;
            s: number;
            sh: number;
            ss: number;
            ssh: number;
        };
        hit_accuracy: number;
        is_ranked: boolean;
        level: {
            current: number;
            progress: number;
        };
        maximum_combo: number;
        play_count: number;
        play_time: null | number;
        pp: null | number;
        pp_exp: number;
        ranked_score: number;
        replays_watched_by_others: number;
        total_hits: number;
        total_score: number;
        user: WithCountryCover;
    }

    Hierarchy (view full)

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    +
    is_ranked: boolean

    Hasn't went inactive in the rankings

    +
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountry.html b/docs/interfaces/User.WithCountry.html new file mode 100644 index 0000000..e854cd2 --- /dev/null +++ b/docs/interfaces/User.WithCountry.html @@ -0,0 +1,16 @@ +WithCountry | osu-api-v2-js

    Interface WithCountry

    Expected from api.getMatch(), Leader

    +
    interface WithCountry {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountryCover.html b/docs/interfaces/User.WithCountryCover.html new file mode 100644 index 0000000..c8c131f --- /dev/null +++ b/docs/interfaces/User.WithCountryCover.html @@ -0,0 +1,17 @@ +WithCountryCover | osu-api-v2-js

    Interface WithCountryCover

    Expected from UserStatisticsWithUser, MultiplayerScore, ScoreWithUser

    +
    interface WithCountryCover {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountryCoverGroupsStatisticsSupport.html b/docs/interfaces/User.WithCountryCoverGroupsStatisticsSupport.html new file mode 100644 index 0000000..90ad880 --- /dev/null +++ b/docs/interfaces/User.WithCountryCoverGroupsStatisticsSupport.html @@ -0,0 +1,20 @@ +WithCountryCoverGroupsStatisticsSupport | osu-api-v2-js

    Interface WithCountryCoverGroupsStatisticsSupport

    Obtainable From

    API.getFriends

    +
    interface WithCountryCoverGroupsStatisticsSupport {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | string[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        statistics: Statistics;
        support_level: number;
        username: string;
    }

    Hierarchy (view full)

    • WithCountryCoverGroups

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics: Statistics
    support_level: number
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithCountryCoverGroupsStatisticsrulesets.html b/docs/interfaces/User.WithCountryCoverGroupsStatisticsrulesets.html new file mode 100644 index 0000000..a3370b5 --- /dev/null +++ b/docs/interfaces/User.WithCountryCoverGroupsStatisticsrulesets.html @@ -0,0 +1,19 @@ +WithCountryCoverGroupsStatisticsrulesets | osu-api-v2-js

    Interface WithCountryCoverGroupsStatisticsrulesets

    Obtainable From

    API.getUsers

    +
    interface WithCountryCoverGroupsStatisticsrulesets {
        avatar_url: string;
        country: {
            code: string;
            name: string;
        };
        country_code: string;
        cover: {
            custom_url: null | string;
            id: null | number;
            url: string;
        };
        default_group: string;
        groups: {
            colour: null | string;
            has_listing: boolean;
            has_playmodes: boolean;
            id: number;
            identifier: string;
            is_probationary: boolean;
            name: string;
            playmodes: null | string[];
            short_name: string;
        }[];
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        statistics_rulesets: {
            fruits?: Statistics;
            mania?: Statistics;
            osu?: Statistics;
            taiko?: Statistics;
        };
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics_rulesets: {
        fruits?: Statistics;
        mania?: Statistics;
        osu?: Statistics;
        taiko?: Statistics;
    }

    Type declaration

    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.WithKudosu.html b/docs/interfaces/User.WithKudosu.html new file mode 100644 index 0000000..89b8737 --- /dev/null +++ b/docs/interfaces/User.WithKudosu.html @@ -0,0 +1,16 @@ +WithKudosu | osu-api-v2-js

    Interface WithKudosu

    Expected from BeatmapsetExtendedPlus, Room, SearchResultUser

    +
    interface WithKudosu {
        avatar_url: string;
        country_code: string;
        default_group: string;
        id: number;
        is_active: boolean;
        is_bot: boolean;
        is_deleted: boolean;
        is_online: boolean;
        is_supporter: boolean;
        kudosu: {
            available: number;
            total: number;
        };
        last_visit: null | Date;
        pm_friends_only: boolean;
        profile_colour: null | string;
        username: string;
    }

    Hierarchy (view full)

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/User.html b/docs/interfaces/User.html deleted file mode 100644 index 95496b8..0000000 --- a/docs/interfaces/User.html +++ /dev/null @@ -1,15 +0,0 @@ -User | osu-api-v2-js

    Interface User

    Expected from BeatmapsetExtendedPlus, Room, SearchResultUser

    -

    Hierarchy

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserExtended.html b/docs/interfaces/UserExtended.html deleted file mode 100644 index 3e7795a..0000000 --- a/docs/interfaces/UserExtended.html +++ /dev/null @@ -1,66 +0,0 @@ -UserExtended | osu-api-v2-js

    Interface UserExtended

    Expected from api.getUser()

    -

    Hierarchy

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banner: null | ProfileBanner
    active_tournament_banners: ProfileBanner[]

    This is not documented by osu!, likely because support for multiple banners has been recently added (OWC2023)

    -
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      -
    pending_beatmapset_count: number
    playmode: string
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: string;
    }

    Type declaration

    • data: number[]
    • mode: string
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    -
    scores_recent_count: number
    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserExtendedWithStatisticsrulesets.html b/docs/interfaces/UserExtendedWithStatisticsrulesets.html deleted file mode 100644 index 6477106..0000000 --- a/docs/interfaces/UserExtendedWithStatisticsrulesets.html +++ /dev/null @@ -1,68 +0,0 @@ -UserExtendedWithStatisticsrulesets | osu-api-v2-js

    Interface UserExtendedWithStatisticsrulesets

    Expected from api.getResourceOwner()

    -

    Hierarchy

    Properties

    account_history: {
        description: null | string;
        id: number;
        length: number;
        permanent: boolean;
        timestamp: Date;
        type: "note" | "restriction" | "silence";
    }[]

    Type declaration

    • description: null | string
    • id: number
    • length: number
    • permanent: boolean
    • timestamp: Date
    • type: "note" | "restriction" | "silence"
    active_tournament_banner: null | ProfileBanner
    active_tournament_banners: ProfileBanner[]

    This is not documented by osu!, likely because support for multiple banners has been recently added (OWC2023)

    -
    avatar_url: string
    badges: {
        awarded_at: Date;
        description: string;
        image_url: string;
        url: string;
    }[]

    Type declaration

    • awarded_at: Date
    • description: string
    • image_url: string
    • url: string
    beatmap_playcounts_count: number
    comments_count: number
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    cover_url: string
    default_group: string
    discord: null | string
    favourite_beatmapset_count: number
    follower_count: number
    graveyard_beatmapset_count: number
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    guest_beatmapset_count: number
    has_supported: boolean
    id: number
    interests: null | string
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_restricted: boolean
    is_supporter: boolean
    join_date: Date
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    location: null | string
    loved_beatmapset_count: number
    mapping_follower_count: number
    max_blocks: number
    max_friends: number
    monthly_playcounts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    nominated_beatmapset_count: number
    occupation: null | string
    page: {
        html: string;
        raw: string;
    }

    Type declaration

    • html: string
    • raw: string

      Basically the text with the BBCode

      -
    pending_beatmapset_count: number
    playmode: string
    playstyle: string[]
    pm_friends_only: boolean
    post_count: number
    previous_usernames: string[]
    profile_colour: null | string
    profile_order: ("me" | "recent_activity" | "beatmaps" | "historical" | "kudosu" | "top_ranks" | "medals")[]
    rank_highest: null | {
        rank: number;
        updated_at: Date;
    }

    Type declaration

    • rank: number
    • updated_at: Date
    rank_history: null | {
        data: number[];
        mode: string;
    }

    Type declaration

    • data: number[]
    • mode: string
    replays_watched_counts: {
        count: number;
        start_date: Date;
    }[]

    Type declaration

    • count: number
    • start_date: Date
    scores_best_count: number
    scores_first_count: number
    scores_pinned_count: number

    Specific to the Ruleset (playmode)

    -
    scores_recent_count: number
    statistics_rulesets: {
        fruits?: UserStatistics;
        mania?: UserStatistics;
        osu?: UserStatistics;
        taiko?: UserStatistics;
    }

    Type declaration

    support_level: number
    title: null | string
    title_url: null | string
    twitter: null | string
    user_achievements: {
        achieved_at: Date;
        achievement_id: number;
    }[]

    Type declaration

    • achieved_at: Date
    • achievement_id: number
    username: string
    website: null | string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserSilence.html b/docs/interfaces/UserSilence.html deleted file mode 100644 index 4f08efb..0000000 --- a/docs/interfaces/UserSilence.html +++ /dev/null @@ -1,4 +0,0 @@ -UserSilence | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserStatistics.html b/docs/interfaces/UserStatistics.html deleted file mode 100644 index ca5f1f3..0000000 --- a/docs/interfaces/UserStatistics.html +++ /dev/null @@ -1,23 +0,0 @@ -UserStatistics | osu-api-v2-js

    Interface UserStatistics

    Expected from UserWithCountryCoverGroupsStatisticsrulesets, UserWithCountryCoverGroupsStatisticsSupport

    -

    Hierarchy

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    -
    is_ranked: boolean

    Hasn't went inactive in the rankings

    -
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserStatisticsWithCountryrank.html b/docs/interfaces/UserStatisticsWithCountryrank.html deleted file mode 100644 index 029f2d9..0000000 --- a/docs/interfaces/UserStatisticsWithCountryrank.html +++ /dev/null @@ -1,24 +0,0 @@ -UserStatisticsWithCountryrank | osu-api-v2-js

    Interface UserStatisticsWithCountryrank

    Expected from UserExtended

    -

    Hierarchy

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    country_rank: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    -
    is_ranked: boolean

    Hasn't went inactive in the rankings

    -
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserStatisticsWithUser.html b/docs/interfaces/UserStatisticsWithUser.html deleted file mode 100644 index 3ba8879..0000000 --- a/docs/interfaces/UserStatisticsWithUser.html +++ /dev/null @@ -1,24 +0,0 @@ -UserStatisticsWithUser | osu-api-v2-js

    Interface UserStatisticsWithUser

    Expected from Rankings

    -

    Hierarchy

    Properties

    count_100: number
    count_300: number
    count_50: number
    count_miss: number
    global_rank: null | number
    global_rank_exp: null | number
    grade_counts: {
        a: number;
        s: number;
        sh: number;
        ss: number;
        ssh: number;
    }

    Type declaration

    • a: number
    • s: number
    • sh: number
    • ss: number
    • ssh: number
    hit_accuracy: number

    Accuracy in the normal format, where 96.56% would be 96.56

    -
    is_ranked: boolean

    Hasn't went inactive in the rankings

    -
    level: {
        current: number;
        progress: number;
    }

    Type declaration

    • current: number
    • progress: number
    maximum_combo: number
    play_count: number
    play_time: null | number
    pp: null | number
    pp_exp: number
    ranked_score: number
    replays_watched_by_others: number
    total_hits: number
    total_score: number

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserWithCountry.html b/docs/interfaces/UserWithCountry.html deleted file mode 100644 index 43ff932..0000000 --- a/docs/interfaces/UserWithCountry.html +++ /dev/null @@ -1,16 +0,0 @@ -UserWithCountry | osu-api-v2-js

    Interface UserWithCountry

    Expected from api.getMatch(), Leader

    -

    Hierarchy

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserWithCountryCover.html b/docs/interfaces/UserWithCountryCover.html deleted file mode 100644 index 2a23e05..0000000 --- a/docs/interfaces/UserWithCountryCover.html +++ /dev/null @@ -1,17 +0,0 @@ -UserWithCountryCover | osu-api-v2-js

    Interface UserWithCountryCover

    Expected from UserStatisticsWithUser, MultiplayerScore, ScoreWithUser

    -

    Hierarchy

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserWithCountryCoverGroupsStatisticsSupport.html b/docs/interfaces/UserWithCountryCoverGroupsStatisticsSupport.html deleted file mode 100644 index cea803b..0000000 --- a/docs/interfaces/UserWithCountryCoverGroupsStatisticsSupport.html +++ /dev/null @@ -1,20 +0,0 @@ -UserWithCountryCoverGroupsStatisticsSupport | osu-api-v2-js

    Interface UserWithCountryCoverGroupsStatisticsSupport

    Expected from api.getFriends()

    -

    Hierarchy

    • UserWithCountryCoverGroups

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics: UserStatistics
    support_level: number
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserWithCountryCoverGroupsStatisticsrulesets.html b/docs/interfaces/UserWithCountryCoverGroupsStatisticsrulesets.html deleted file mode 100644 index 16d131b..0000000 --- a/docs/interfaces/UserWithCountryCoverGroupsStatisticsrulesets.html +++ /dev/null @@ -1,19 +0,0 @@ -UserWithCountryCoverGroupsStatisticsrulesets | osu-api-v2-js

    Interface UserWithCountryCoverGroupsStatisticsrulesets

    Expected from api.getUsers()

    -

    Hierarchy

    Properties

    avatar_url: string
    country: {
        code: string;
        name: string;
    }

    Type declaration

    • code: string
    • name: string
    country_code: string
    cover: {
        custom_url: null | string;
        id: null | number;
        url: string;
    }

    Type declaration

    • custom_url: null | string
    • id: null | number
    • url: string
    default_group: string
    groups: {
        colour: null | string;
        has_listing: boolean;
        has_playmodes: boolean;
        id: number;
        identifier: string;
        is_probationary: boolean;
        name: string;
        playmodes: null | string[];
        short_name: string;
    }[]

    Type declaration

    • colour: null | string
    • has_listing: boolean
    • has_playmodes: boolean
    • id: number
    • identifier: string
    • is_probationary: boolean
    • name: string
    • playmodes: null | string[]
    • short_name: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    statistics_rulesets: {
        fruits?: UserStatistics;
        mania?: UserStatistics;
        osu?: UserStatistics;
        taiko?: UserStatistics;
    }

    Type declaration

    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/UserWithKudosu.html b/docs/interfaces/UserWithKudosu.html deleted file mode 100644 index ef91f5a..0000000 --- a/docs/interfaces/UserWithKudosu.html +++ /dev/null @@ -1,16 +0,0 @@ -UserWithKudosu | osu-api-v2-js

    Interface UserWithKudosu

    Expected from api.getKudosuRanking()

    -

    Hierarchy

    Properties

    avatar_url: string
    country_code: string
    default_group: string
    id: number
    is_active: boolean
    is_bot: boolean
    is_deleted: boolean
    is_online: boolean
    is_supporter: boolean
    kudosu: {
        available: number;
        total: number;
    }

    Type declaration

    • available: number
    • total: number
    last_visit: null | Date
    pm_friends_only: boolean
    profile_colour: null | string
    username: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WebSocketEvent.ChatChannelJoin.html b/docs/interfaces/WebSocketEvent.ChatChannelJoin.html new file mode 100644 index 0000000..26f59c5 --- /dev/null +++ b/docs/interfaces/WebSocketEvent.ChatChannelJoin.html @@ -0,0 +1,3 @@ +ChatChannelJoin | osu-api-v2-js
    interface ChatChannelJoin {
        data: WithDetails;
        event: "chat.channel.join";
    }

    Properties

    Properties

    event: "chat.channel.join"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WebSocketEvent.ChatChannelLeave.html b/docs/interfaces/WebSocketEvent.ChatChannelLeave.html new file mode 100644 index 0000000..b7e5db8 --- /dev/null +++ b/docs/interfaces/WebSocketEvent.ChatChannelLeave.html @@ -0,0 +1,3 @@ +ChatChannelLeave | osu-api-v2-js
    interface ChatChannelLeave {
        data: WithDetails;
        event: "chat.channel.part";
    }

    Properties

    Properties

    event: "chat.channel.part"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WebSocketEvent.ChatMessageNew.html b/docs/interfaces/WebSocketEvent.ChatMessageNew.html new file mode 100644 index 0000000..e6add35 --- /dev/null +++ b/docs/interfaces/WebSocketEvent.ChatMessageNew.html @@ -0,0 +1,3 @@ +ChatMessageNew | osu-api-v2-js
    interface ChatMessageNew {
        data: {
            messages: Message[];
            users: User[];
        };
        event: "chat.message.new";
    }

    Properties

    Properties

    data: {
        messages: Message[];
        users: User[];
    }

    Type declaration

    event: "chat.message.new"

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/interfaces/WikiPage.html b/docs/interfaces/WikiPage.html index 8a1ced0..109f9c9 100644 --- a/docs/interfaces/WikiPage.html +++ b/docs/interfaces/WikiPage.html @@ -1,14 +1,14 @@ -WikiPage | osu-api-v2-js

    Interface WikiPage

    Expected from api.getWikiPage(), SearchResultWiki

    -

    Hierarchy

    • WikiPage

    Properties

    available_locales: string[]
    layout: string
    locale: string

    BCP 47 language (sub)tag, lowercase (for example, en for english)

    -
    markdown: string
    path: string

    It's what should be after https://osu.ppy.sh/wiki/{locale}/

    -
    subtitle: null | string

    Think of it as the title of the parent wiki page

    +WikiPage | osu-api-v2-js

    Interface WikiPage

    Expected from api.getWikiPage(), SearchResultWiki

    +
    interface WikiPage {
        available_locales: string[];
        layout: string;
        locale: string;
        markdown: string;
        path: string;
        subtitle: null | string;
        tags: string[];
        title: string;
    }

    Properties

    available_locales: string[]
    layout: string
    locale: string

    BCP 47 language (sub)tag, lowercase (for example, en for english)

    +
    markdown: string
    path: string

    It's what should be after https://osu.ppy.sh/wiki/{locale}/

    +
    subtitle: null | string

    Think of it as the title of the parent wiki page

    Remarks

    If the title in the path (assuming it's in it (very unlikely if locale is not en)) is after a slash (/), this is what is before the slash

    -
    tags: string[]
    title: string

    Generated using TypeDoc

    \ No newline at end of file +
    tags: string[]
    title: string

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html index 0609a90..039509e 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -1,89 +1,31 @@ -osu-api-v2-js

    osu-api-v2-js

    Index

    Enumerations

    Classes

    Interfaces

    Beatmap -BeatmapDifficultyAttributes -BeatmapDifficultyAttributesFruits -BeatmapDifficultyAttributesMania -BeatmapDifficultyAttributesOsu -BeatmapDifficultyAttributesTaiko -BeatmapExtended -BeatmapExtendedWithFailtimes -BeatmapExtendedWithFailtimesBeatmapsetextended -BeatmapPack -BeatmapPlaycount -BeatmapUserScore -BeatmapWithBeatmapset -BeatmapWithBeatmapsetChecksumMaxcombo -Beatmapset -BeatmapsetExtended -BeatmapsetExtendedPlus -BeatmapsetExtendedWithBeatmapExtended -ChangelogBuildWithChangelogentriesVersions -ChangelogBuildWithUpdatestreams -ChangelogBuildWithUpdatestreamsChangelogentries -ChatChannel -ChatChannelWithDetails -ChatMessage -Event -EventAchievement -EventBeatmap -EventBeatmapPlaycount -EventBeatmapset -EventBeatmapsetApprove -EventBeatmapsetDelete -EventBeatmapsetRevive -EventBeatmapsetUpdate -EventBeatmapsetUpload -EventRank -EventRankLost -EventUser -EventUserSupportAgain -EventUserSupportFirst -EventUserSupportGift -EventUsernameChange -ForumPost -ForumTopic -KudosuHistory -Leader -Match -MatchInfo -MultiplayerScore -MultiplayerScores -NewsPost -NewsPostWithContentNavigation -PlaylistItem -PollConfig -Rankings -RankingsCountry -RankingsSpotlight -Room -Score -ScoreWithMatch -ScoreWithUser -ScoreWithUserBeatmap -ScoreWithUserBeatmapBeatmapset -SearchResultUser -SearchResultWiki -Spotlight -SpotlightWithParticipantcount -UpdateStream -User -UserExtended -UserExtendedWithStatisticsrulesets -UserSilence -UserStatistics -UserStatisticsWithCountryrank -UserStatisticsWithUser -UserWithCountry -UserWithCountryCover -UserWithCountryCoverGroupsStatisticsSupport -UserWithCountryCoverGroupsStatisticsrulesets -UserWithKudosu -WikiPage -

    Type Aliases

    Functions

    Generated using TypeDoc

    \ No newline at end of file +osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmap.DifficultyAttributes.html b/docs/modules/Beatmap.DifficultyAttributes.html new file mode 100644 index 0000000..d34ca25 --- /dev/null +++ b/docs/modules/Beatmap.DifficultyAttributes.html @@ -0,0 +1,6 @@ +DifficultyAttributes | osu-api-v2-js

    Namespace DifficultyAttributes

    Index

    Interfaces

    Type Aliases

    Any +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmap.Extended.html b/docs/modules/Beatmap.Extended.html new file mode 100644 index 0000000..9acfecf --- /dev/null +++ b/docs/modules/Beatmap.Extended.html @@ -0,0 +1,4 @@ +Extended | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmap.html b/docs/modules/Beatmap.html new file mode 100644 index 0000000..3576e4c --- /dev/null +++ b/docs/modules/Beatmap.html @@ -0,0 +1,9 @@ +Beatmap | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.Extended.html b/docs/modules/Beatmapset.Extended.html new file mode 100644 index 0000000..c7ba55b --- /dev/null +++ b/docs/modules/Beatmapset.Extended.html @@ -0,0 +1,3 @@ +Extended | osu-api-v2-js

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Beatmapset.html b/docs/modules/Beatmapset.html new file mode 100644 index 0000000..f45c430 --- /dev/null +++ b/docs/modules/Beatmapset.html @@ -0,0 +1,3 @@ +Beatmapset | osu-api-v2-js

    Namespace Beatmapset

    Index

    Namespaces

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Changelog.Build.html b/docs/modules/Changelog.Build.html new file mode 100644 index 0000000..49b16f9 --- /dev/null +++ b/docs/modules/Changelog.Build.html @@ -0,0 +1,4 @@ +Build | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Changelog.UpdateStream.html b/docs/modules/Changelog.UpdateStream.html new file mode 100644 index 0000000..3bdffc5 --- /dev/null +++ b/docs/modules/Changelog.UpdateStream.html @@ -0,0 +1,2 @@ +UpdateStream | osu-api-v2-js

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Changelog.html b/docs/modules/Changelog.html new file mode 100644 index 0000000..1a34db6 --- /dev/null +++ b/docs/modules/Changelog.html @@ -0,0 +1,5 @@ +Changelog | osu-api-v2-js

    Namespace Changelog

    Index

    Namespaces

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Chat.Channel.html b/docs/modules/Chat.Channel.html new file mode 100644 index 0000000..f0bf20d --- /dev/null +++ b/docs/modules/Chat.Channel.html @@ -0,0 +1,2 @@ +Channel | osu-api-v2-js

    Namespace Channel

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Chat.html b/docs/modules/Chat.html new file mode 100644 index 0000000..2f8576c --- /dev/null +++ b/docs/modules/Chat.html @@ -0,0 +1,5 @@ +Chat | osu-api-v2-js

    Namespace Chat

    Index

    Namespaces

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Event.html b/docs/modules/Event.html new file mode 100644 index 0000000..babe86e --- /dev/null +++ b/docs/modules/Event.html @@ -0,0 +1,20 @@ +Event | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Forum.html b/docs/modules/Forum.html new file mode 100644 index 0000000..b2124b8 --- /dev/null +++ b/docs/modules/Forum.html @@ -0,0 +1,3 @@ +Forum | osu-api-v2-js

    Namespace Forum

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Multiplayer.html b/docs/modules/Multiplayer.html new file mode 100644 index 0000000..7ad4394 --- /dev/null +++ b/docs/modules/Multiplayer.html @@ -0,0 +1,8 @@ +Multiplayer | osu-api-v2-js

    Namespace Multiplayer

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/News.html b/docs/modules/News.html new file mode 100644 index 0000000..343767d --- /dev/null +++ b/docs/modules/News.html @@ -0,0 +1,3 @@ +News | osu-api-v2-js

    Namespace News

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Rankings.html b/docs/modules/Rankings.html new file mode 100644 index 0000000..ac9db95 --- /dev/null +++ b/docs/modules/Rankings.html @@ -0,0 +1,4 @@ +Rankings | osu-api-v2-js

    Namespace Rankings

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Score.html b/docs/modules/Score.html new file mode 100644 index 0000000..71db93a --- /dev/null +++ b/docs/modules/Score.html @@ -0,0 +1,5 @@ +Score | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/SearchResult.html b/docs/modules/SearchResult.html new file mode 100644 index 0000000..5986399 --- /dev/null +++ b/docs/modules/SearchResult.html @@ -0,0 +1,3 @@ +SearchResult | osu-api-v2-js

    Namespace SearchResult

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/Spotlight.html b/docs/modules/Spotlight.html new file mode 100644 index 0000000..eb97265 --- /dev/null +++ b/docs/modules/Spotlight.html @@ -0,0 +1,2 @@ +Spotlight | osu-api-v2-js

    Namespace Spotlight

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/User.Extended.html b/docs/modules/User.Extended.html new file mode 100644 index 0000000..a1e49ee --- /dev/null +++ b/docs/modules/User.Extended.html @@ -0,0 +1,2 @@ +Extended | osu-api-v2-js

    Namespace Extended

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/User.Statistics.html b/docs/modules/User.Statistics.html new file mode 100644 index 0000000..e2827dc --- /dev/null +++ b/docs/modules/User.Statistics.html @@ -0,0 +1,3 @@ +Statistics | osu-api-v2-js

    Namespace Statistics

    Index

    Interfaces

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/User.html b/docs/modules/User.html new file mode 100644 index 0000000..9b83de5 --- /dev/null +++ b/docs/modules/User.html @@ -0,0 +1,11 @@ +User | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/modules/WebSocketEvent.html b/docs/modules/WebSocketEvent.html new file mode 100644 index 0000000..97d8276 --- /dev/null +++ b/docs/modules/WebSocketEvent.html @@ -0,0 +1,5 @@ +WebSocketEvent | osu-api-v2-js

    Namespace WebSocketEvent

    Index

    Interfaces

    Type Aliases

    Any +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Beatmap.DifficultyAttributes.Any.html b/docs/types/Beatmap.DifficultyAttributes.Any.html new file mode 100644 index 0000000..6bdc557 --- /dev/null +++ b/docs/types/Beatmap.DifficultyAttributes.Any.html @@ -0,0 +1 @@ +Any | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Event.Any.html b/docs/types/Event.Any.html new file mode 100644 index 0000000..8b63bb7 --- /dev/null +++ b/docs/types/Event.Any.html @@ -0,0 +1 @@ +Any | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Event.AnyBeatmapAnnouncement.html b/docs/types/Event.AnyBeatmapAnnouncement.html new file mode 100644 index 0000000..878309b --- /dev/null +++ b/docs/types/Event.AnyBeatmapAnnouncement.html @@ -0,0 +1,2 @@ +AnyBeatmapAnnouncement | osu-api-v2-js

    Type alias AnyBeatmapAnnouncement

    AnyBeatmapAnnouncement: BeatmapPlaycount | BeatmapsetDelete

    This includes everything in this namespace that should be related to what BanchoBot sends in the #announce chat

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Event.AnyRecentActivity.html b/docs/types/Event.AnyRecentActivity.html new file mode 100644 index 0000000..a7f9a39 --- /dev/null +++ b/docs/types/Event.AnyRecentActivity.html @@ -0,0 +1,2 @@ +AnyRecentActivity | osu-api-v2-js

    Type alias AnyRecentActivity

    This includes everything in this namespace, except BeatmapPlaycount and BeatmapsetDelete

    +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Mod.html b/docs/types/Mod.html index c2f6167..d0cb16d 100644 --- a/docs/types/Mod.html +++ b/docs/types/Mod.html @@ -1 +1 @@ -Mod | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file +Mod | osu-api-v2-js

    Type alias Mod

    Mod: {
        acronym: string;
        settings?: {
            [k: string]: any;
        };
    }

    Type declaration

    • acronym: string
    • Optional settings?: {
          [k: string]: any;
      }
      • [k: string]: any

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/ProfileBanner.html b/docs/types/ProfileBanner.html deleted file mode 100644 index e559e6f..0000000 --- a/docs/types/ProfileBanner.html +++ /dev/null @@ -1,2 +0,0 @@ -ProfileBanner | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/Scope.html b/docs/types/Scope.html index 2a2ad2d..c314bae 100644 --- a/docs/types/Scope.html +++ b/docs/types/Scope.html @@ -1,3 +1,4 @@ -Scope | osu-api-v2-js

    Type alias Scope

    Scope: "chat.read" | "chat.write" | "chat.write_manage" | "delegate" | "forum.write" | "friends.read" | "identify" | "public"

    Scopes determine what the API instance can do as a user!

    +Scope | osu-api-v2-js

    Type alias Scope

    Scope: "chat.read" | "chat.write" | "chat.write_manage" | "delegate" | "forum.write" | "friends.read" | "identify" | "public"

    Scopes determine what the API instance can do as a user! +https://osu.ppy.sh/docs/index.html#scopes

    Remarks

    "identify" is always implicity provided, "public" is implicitly needed for almost everything

    -

    Generated using TypeDoc

    \ No newline at end of file +

    Generated using TypeDoc

    \ No newline at end of file diff --git a/docs/types/WebSocketEvent.Any.html b/docs/types/WebSocketEvent.Any.html new file mode 100644 index 0000000..6b1112f --- /dev/null +++ b/docs/types/WebSocketEvent.Any.html @@ -0,0 +1 @@ +Any | osu-api-v2-js

    Generated using TypeDoc

    \ No newline at end of file diff --git a/lib/beatmap.ts b/lib/beatmap.ts index c779af6..7a7ffc5 100644 --- a/lib/beatmap.ts +++ b/lib/beatmap.ts @@ -79,73 +79,57 @@ export namespace Beatmap { } } - /** - * Expected from api.getBeatmaps() - */ + /** @obtainableFrom {@link API.getBeatmaps} */ export interface WithFailtimesMaxcombo extends WithFailtimes { max_combo: number } - /** - * Expected from api.getBeatmap() - */ + /** @obtainableFrom {@link API.getBeatmap} */ export interface WithFailtimesBeatmapsetextended extends WithFailtimesMaxcombo { beatmapset: Beatmapset.Extended } } - /** - * Expected from api.getUserMostPlayed() - */ + /** @obtainableFrom {@link API.getUserMostPlayed} */ export interface Playcount { beatmap_id: number - /** - * Playcount - */ + /** Playcount */ count: number beatmap: Beatmap beatmapset: Beatmapset } /** - * Expected from api.getBeatmapPack(), api.getBeatmapPacks() + * @obtainableFrom + * {@link API.getBeatmapPack} / + * {@link API.getBeatmapPacks} */ export interface Pack { author: string date: Date name: string - /** - * Are difficulty reduction mods unable to be used to clear this pack? (is `false` if you can use such mods) - */ + /** Are difficulty reduction mods unable to be used to clear this pack? (is `false` if you can use such mods) */ no_diff_reduction: boolean ruleset_id: number | null, tag: string, url: string, beatmapsets?: Beatmapset.Extended[], user_completion_data?:{ - /** - * IDs of beatmapsets completed by the user (according to the requirements of the pack) - */ + /** IDs of beatmapsets completed by the user (according to the requirements of the pack) */ beatmapset_ids: number[], - /** - * Whether all beatmapsets are completed by the user or not - */ + /** Whether all beatmapsets are completed by the user or not */ completed: boolean } } - /** - * Expected from api.getBeatmapDifficultyAttributes() - */ + /** @obtainableFrom {@link API.getBeatmapDifficultyAttributes} */ export interface DifficultyAttributes { star_rating: number max_combo: number } export namespace DifficultyAttributes { - /** - * Expected from api.getBeatmapDifficultyAttributesOsu() - */ + /** @obtainableFrom {@link API.getBeatmapDifficultyAttributesOsu} */ export interface Osu extends DifficultyAttributes { aim_difficulty: number speed_difficulty: number @@ -156,9 +140,7 @@ export namespace Beatmap { overall_difficulty: number } - /** - * Expected from api.getBeatmapDifficultyAttributesTaiko() - */ + /** @obtainableFrom {@link API.getBeatmapDifficultyAttributesTaiko} */ export interface Taiko extends DifficultyAttributes { stamina_difficulty: number rhythm_difficulty: number @@ -167,16 +149,12 @@ export namespace Beatmap { great_hit_window: number } - /** - * Expected from api.getBeatmapDifficultyAttributesFruits() - */ + /** @obtainableFrom {@link API.getBeatmapDifficultyAttributesFruits} */ export interface Fruits extends DifficultyAttributes { approach_rate: number } - /** - * Expected from api.getBeatmapDifficultyAttributesMania() - */ + /** @obtainableFrom {@link API.getBeatmapDifficultyAttributesMania} */ export interface Mania extends DifficultyAttributes { great_hit_window: number /** @@ -211,26 +189,15 @@ export interface Beatmapset { nsfw: boolean offset: number play_count: number - /** - * A string like that, where id is the `id` of the beatmapset: `//b.ppy.sh/preview/58951.mp3` - */ + /** A string like that, where id is the `id` of the beatmapset: `//b.ppy.sh/preview/58951.mp3` */ preview_url: string - /** - * Can be/Is 0 if there is no source - */ - source: string | 0 + source: string spotlight: boolean - /** - * Is it ranked, is it graveyarded, etc - */ + /** Is it ranked, is it graveyarded, etc */ status: string - /** - * A title readable by any english-speaking person, so it'd be romaji if the song's title is in Japanese - */ + /** A title readable by any english-speaking person, so it'd be in romaji if the song's title is in Japanese */ title: string - /** - * Basically the title is the original language, so with hiraganas and kanji if Japanese - */ + /** Basically the title is the original language, so with hiragana, katakana and kanji if Japanese */ title_unicode: string user_id: number video: boolean @@ -242,9 +209,7 @@ export namespace Beatmapset { */ export interface Extended extends Beatmapset { availability: { - /** - * So it's `false` if you can download it - */ + /** So it's `false` if you can download it */ download_disabled: boolean more_information: string | null } @@ -269,31 +234,20 @@ export namespace Beatmapset { source: string storyboard: boolean submitted_date: Date | null - /** - * 0 if no tags at all, a string with tags separated from each other by a whitespace - */ - tags: string | 0 + tags: string } export namespace Extended { - /** - * Expected from api.getUserBeatmaps() - */ + /** @obtainableFrom {@link API.getUserBeatmaps} */ export interface WithBeatmapExtended extends Extended { beatmaps: Beatmap.Extended[] } - /** - * Expected from api.getBeatmapset() - */ + /** @obtainableFrom {@link API.getBeatmapset} */ export interface Plus extends Extended { - /** - * The different beatmaps/difficulties this beatmapset has - */ + /** The different beatmaps/difficulties this beatmapset has */ beatmaps: Beatmap.Extended.WithFailtimes[] - /** - * The different beatmaps made for osu!, but converted to the other Rulesets - */ + /** The different beatmaps made for osu!, but converted to the other Rulesets */ converts: Beatmap.Extended.WithFailtimes[] current_nominations: { beatmapset_id: number @@ -302,9 +256,7 @@ export namespace Beatmapset { user_id: number }[] description: { - /** - * In HTML - */ + /** In HTML */ description: string } genre: { @@ -320,9 +272,7 @@ export namespace Beatmapset { recent_favourites: User[] related_users: User[] user: User - /** - * Only exists if authorized user - */ + /** Only exists if authorized user */ has_favourited?: boolean } } diff --git a/lib/chat.ts b/lib/chat.ts index fd6a9cd..0f8e571 100644 --- a/lib/chat.ts +++ b/lib/chat.ts @@ -1,16 +1,16 @@ import { User } from "./user.js"; export namespace Chat { - /** - * Expected from api.keepChatAlive() - */ + /** @obtainableFrom {@link API.keepChatAlive} */ export interface UserSilence { id: number user_id: number } /** - * Expected from api.sendChatPrivateMessage(), api.createChatPrivateChannel() + * @obtainableFrom + * {@link API.sendChatPrivateMessage} / + * {@link API.createChatPrivateChannel} */ export interface Channel { channel_id: number @@ -24,7 +24,9 @@ export namespace Chat { export namespace Channel { /** - * Expected from api.joinChatChannel(), api.getChatChannel() + * @obtainableFrom + * {@link API.sendChatPrivateMessage} / + * {@link API.createChatPrivateChannel} */ export interface WithDetails extends Channel { current_user_attributes: { @@ -49,7 +51,10 @@ export namespace Chat { } /** - * Expected from api.sendChatPrivateMessage(), api.getChatMessages(), api.sendChatMessage() + * @obtainableFrom + * {@link API.sendChatPrivateMessage} / + * {@link API.sendChatMessage} / + * {@link API.getChatMessages} */ export interface Message { channel_id: number @@ -58,9 +63,7 @@ export namespace Chat { message_id: number sender_id: number timestamp: Date - /** - * Like "action", "markdown", "plain" - */ + /** Like "action", "markdown", "plain" */ type: string uuid?: string | null sender: User diff --git a/lib/index.ts b/lib/index.ts index ef86dfc..7311bd8 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -652,12 +652,16 @@ export class API { } /** - * Get rooms that are active, that have ended, that the user participated in, that the user made, or just simply any room! + * Get playlists/realtime rooms that are active, that have ended, that the user participated in, that the user made, or just simply any room! * @scope {@link Scope"public"} - * @param mode Self-explanatory enough, defaults to `active` + * @param type Whether the multiplayer rooms are in playlist format (like current spotlights) or realtime + * @param mode The state of the room, or the relation of the authorized user with the room + * @param limit The maximum amount of rooms to return, defaults to 10 + * @param sort Sort (where most recent is first) by creation date or end date, defaults to the creation date */ - async getRooms(mode: "active" | "all" | "ended" | "participated" | "owned" = "active"): Promise { - return await this.request("get", "rooms", {mode}) + async getRooms(type: "playlists" | "realtime", mode: "active" | "all" | "ended" | "participated" | "owned", + limit: number = 10, sort: "ended" | "created" = "created"): Promise { + return await this.request("get", "rooms", {type_group: type, mode, limit, sort}) } /** @@ -676,10 +680,8 @@ export class API { * @param limit How many scores maximum? Defaults to 50, the maximum the API will return * @param sort Sort by scores, ascending or descending? Defaults to descending * @param cursor_string Use a MultiplayerScores' `params` and `cursor_string` to get the next page (scores 51 to 100 for example) - * @remarks (2023-11-10) Items are broken for multiplayer (real-time) rooms, not for playlists (like spotlights), that's an osu! bug + * @remarks (2024-03-04) This may not work for rooms from before March 5th, use at your own risk * https://github.com/ppy/osu-web/issues/10725 - * @remarks (2024-03-04) Straight up doesn't work anymore, that's an osu! bug - * https://github.com/ppy/osu-web/issues/11064 */ async getPlaylistItemScores(item: {id: number, room_id: number} | Multiplayer.PlaylistItem, limit: number = 50, sort: "score_asc" | "score_desc" = "score_desc", cursor_string?: string): Promise { diff --git a/lib/misc.ts b/lib/misc.ts index de0b6cb..78b2e7f 100644 --- a/lib/misc.ts +++ b/lib/misc.ts @@ -12,6 +12,7 @@ export type Mod = { /** * Scopes determine what the API instance can do as a user! + * https://osu.ppy.sh/docs/index.html#scopes * @remarks "identify" is always implicity provided, "public" is implicitly needed for almost everything */ export type Scope = "chat.read" | "chat.write" | "chat.write_manage" | "delegate" | "forum.write" | "friends.read" | "identify" | "public" diff --git a/lib/multiplayer.ts b/lib/multiplayer.ts index 95ec58d..7568bce 100644 --- a/lib/multiplayer.ts +++ b/lib/multiplayer.ts @@ -4,9 +4,7 @@ import { Score as ScoreInterface } from "./score.js" import { User } from "./user.js" export namespace Multiplayer { - /** - * Expected from api.getRoom() - */ + /** @obtainableFrom {@link API.getRoom} */ export interface Room { active: boolean auto_skip: boolean @@ -68,7 +66,6 @@ export namespace Multiplayer { /** * Expected from MultiplayerScores - * @remarks This particular interface seems really unstable, beware */ export interface Score { /** In a format where `96.40%` would be `0.9640` (and no number afterwards) */ @@ -76,11 +73,16 @@ export namespace Multiplayer { beatmap_id: number ended_at: Date max_combo: number + /** + * All of its properties are optional because instead of being 0, the property actually disappears instead! + * (so if the score has no small_tick_hit, the small_tick_hit property is simply not there) + * @privateRemarks lmao wtf nanaya + */ maximum_statistics: { - great: number - ignore_hit: number - large_tick_hit: number - small_tick_hit: number + great?: number + ignore_hit?: number + large_tick_hit?: number + small_tick_hit?: number } mods: Mod[] passed: boolean @@ -114,9 +116,7 @@ export namespace Multiplayer { user: User.WithCountryCover } - /** - * Expected from api.getPlaylistItemScores() - */ + /** @obtainableFrom {@link API.getPlaylistItemScores} */ export interface Scores { params: { limit: number @@ -155,9 +155,7 @@ export namespace Multiplayer { name: string } - /** - * Expected from api.getMatch() - */ + /** @obtainableFrom {@link API.getMatch} */ export interface Match { match: MatchInfo events: { diff --git a/lib/news.ts b/lib/news.ts index ffb0201..1fe01aa 100644 --- a/lib/news.ts +++ b/lib/news.ts @@ -5,30 +5,20 @@ export namespace News { export interface Post { id: number author: string - /** - * Link to view the file on GitHub - */ + /** Link to view the file on GitHub */ edit_url: string - /** - * Link to the first image in the document - */ + /** Link to the first image in the document */ first_image: string | null published_at: Date updated_at: Date - /** - * Filename without the extension, used in URLs - */ + /** Filename without the extension, used in URLs */ slug: string title: string } - /** - * Expected from api.getNewsPost() - */ + /** @obtainableFrom {@link API.getNewsPost} */ export interface PostWithContentNavigation extends Post { - /** - * With HTML - */ + /** With HTML */ content: string navigation: { newer?: Post diff --git a/lib/ranking.ts b/lib/ranking.ts index b100a20..7aa0329 100644 --- a/lib/ranking.ts +++ b/lib/ranking.ts @@ -1,18 +1,14 @@ import { Beatmapset } from "./beatmap.js" import { User } from "./user.js" -/** - * Expected from api.getSpotlights() - */ +/** @obtainableFrom {@link API.getSpotlights} */ export interface Spotlight { id: number name: string start_date: Date end_date: Date type: string - /** - * Pretty sure this is only `true` when the spotlight has different beatmaps for each ruleset - */ + /** Pretty sure this is only `true` when the spotlight has different beatmaps for each ruleset */ mode_specific: boolean } @@ -27,28 +23,20 @@ export namespace Spotlight { interface RankingsBare { cursor: { - /** - * The number of the next page, is null if no more results are available - */ + /** The number of the next page, is null if no more results are available */ page: number | null } - /** - * Total amount of elements available across all pages, not on this specific page! Maximum of 10000 - */ + /** Total amount of elements available across all pages, not on this specific page! Maximum of 10000 */ total: number } export namespace Rankings { - /** - * Expected from api.getRanking() - */ + /** @obtainableFrom {@link API.getRanking} */ export interface User extends RankingsBare { ranking: User.Statistics.WithUser[] } - /** - * Expected from api.getCountryRanking() - */ + /** @obtainableFrom {@link API.getCountryRanking} */ export interface Country extends RankingsBare { ranking: { /** @@ -69,9 +57,7 @@ export namespace Rankings { }[] } - /** - * Expected from api.getSpotlightRanking() - */ + /** @obtainableFrom {@link API.getSpotlightRanking} */ export interface Spotlight { beatmapsets: Beatmapset.Extended[] ranking: User.Statistics.WithUser[] diff --git a/lib/score.ts b/lib/score.ts index 812649b..0b6dcdf 100644 --- a/lib/score.ts +++ b/lib/score.ts @@ -2,13 +2,9 @@ import { Beatmap, Beatmapset } from "./beatmap.js" import { Rulesets } from "./misc.js" import { User } from "./user.js" -/** - * Expected from api.getBeatmapUserScores() - */ +/** @obtainableFrom {@link API.getBeatmapUserScores} */ export interface Score { - /** - * In a format where `96.40%` would be `0.9640` (likely with some numbers after the zero) - */ + /** In a format where `96.40%` would be `0.9640` (likely with some numbers after the zero) */ accuracy: number best_id: number | null created_at: Date @@ -19,23 +15,15 @@ export interface Score { mods: string[] passed: boolean perfect: boolean - /** - * @remarks Is null when Beatmap is Loved (for example) - */ + /** @remarks Is null when Beatmap is Loved (for example) */ pp: number | null - /** - * Also known as a grade, for example this is `X` (SS) if `accuracy` is `1` (100.00%) - */ + /** Also known as a grade, for example this is `X` (SS) if `accuracy` is `1` (100.00%) */ rank: string - /** - * Can this score's replay be downloaded from the website? - */ + /** Can this score's replay be downloaded from the website? */ replay: boolean score: number statistics: { - /** - * @remarks Is null if the score's gamemode is Taiko - */ + /** @remarks Is null if the score's gamemode is Taiko */ count_50: number | null count_100: number count_300: number @@ -44,13 +32,9 @@ export interface Score { count_miss: number } type: string - /** - * The ID of the user who made the score - */ + /** The ID of the user who made the score */ user_id: number - /** - * @remarks Only if `type` is set to `best` on `getUserScores` - */ + /** @remarks Only if `type` is set to `best` on {@link API.getUserScores} */ weight?: { percentage: number pp: number @@ -69,9 +53,7 @@ export namespace Score { } } - /** - * Expected from api.getBeatmapScores() - */ + /** @obtainableFrom {@link API.getBeatmapScores} */ export interface WithUser extends Score { user: User.WithCountryCover } @@ -85,21 +67,15 @@ export namespace Score { beatmap: Beatmap.Extended } - /** - * Expected from api.getUserScores() - */ + /** @obtainableFrom {@link API.getUserScores} */ export interface WithUserBeatmapBeatmapset extends WithUserBeatmap { beatmapset: Beatmapset } } -/** - * Expected from api.getBeatmapUserScore() - */ +/** @obtainableFrom {@link API.getBeatmapUserScore} */ export interface BeatmapUserScore { - /** - * Value depends on the requested mode and mods! - */ + /** Value depends on the requested mode and mods! */ position: number score: Score.WithUserBeatmap } diff --git a/lib/tests/test.ts b/lib/tests/test.ts index a74337e..5021752 100644 --- a/lib/tests/test.ts +++ b/lib/tests/test.ts @@ -186,21 +186,19 @@ const testChangelogStuff = async (changelog_gen: tsj.SchemaGenerator): Promise => { let okay = true - let d1 = await | false>>attempt("\ngetRoom (realtime): ", api.getRoom({id: 231069})) - if (!isOk(d1, !d1 || (d1.recent_participants.length === 4 && validate(d1, "Multiplayer.Room", multi_gen)))) okay = false - let d2 = await | false>>attempt("getRoom (playlist): ", api.getRoom({id: 499640})) - if (!isOk(d2, !d2 || (d2.participant_count === 70 && validate(d2, "Multiplayer.Room", multi_gen)))) okay = false + let d1 = await | false>>attempt("\ngetRoom (realtime): ", api.getRoom({id: 591993})) + if (!isOk(d1, !d1 || (d1.recent_participants.length === 5 && validate(d1, "Multiplayer.Room", multi_gen)))) okay = false + let d2 = await | false>>attempt("getRoom (playlist): ", api.getRoom({id: 588230})) + if (!isOk(d2, !d2 || (d2.participant_count === 27 && validate(d2, "Multiplayer.Room", multi_gen)))) okay = false if (d1) { let d3 = await | false>>attempt( "getPlaylistItemScores (realtime): ", api.getPlaylistItemScores({id: d1.playlist[0].id, room_id: d1.id})) - !isOk(d3, !d3 || (d3.scores.length > 0 && validate(d3, "Multiplayer.Scores", multi_gen)), 1) ? - console.log("Bug not fixed yet...") : console.log("Bug fixed!!! :partying_face:") + if (!isOk(d3, !d3 || (d3.scores.length > 0 && validate(d3, "Multiplayer.Scores", multi_gen)), 1)) okay = false } if (d2) { let d4 = await | false>>attempt( "getPlaylistItemScores (playlist): ", api.getPlaylistItemScores({id: d2.playlist[0].id, room_id: d2.id})) - !isOk(d4, !d4 || (d4.scores.length >= 50 && validate(d4, "Multiplayer.Scores", multi_gen)), 1) ? - console.log("Bug not fixed yet...") : console.log("Bug fixed!!! :partying_face:") + if (!isOk(d4, !d4 || (d4.scores.length >= 9 && validate(d4, "Multiplayer.Scores", multi_gen)), 1)) okay = false } let d5 = await | false>>attempt("getMatch: ", api.getMatch(62006076)) if (!isOk(d5, !d5 || (d5.match.name === "CWC2020: (Italy) vs (Indonesia)" && validate(d5, "Multiplayer.Match", multi_gen)), 3)) okay = false diff --git a/lib/user.ts b/lib/user.ts index 342722c..585a6a2 100644 --- a/lib/user.ts +++ b/lib/user.ts @@ -60,9 +60,7 @@ export namespace User { }[] } - /** - * Expected from api.getUsers() - */ + /** @obtainableFrom {@link API.getUsers} */ export interface WithCountryCoverGroupsStatisticsrulesets extends WithCountryCoverGroups { statistics_rulesets: { osu?: Statistics @@ -72,17 +70,13 @@ export namespace User { } } - /** - * Expected from api.getFriends() - */ + /** @obtainableFrom {@link API.getFriends} */ export interface WithCountryCoverGroupsStatisticsSupport extends WithCountryCoverGroups { statistics: Statistics support_level: number } - /** - * Expected from api.getUser() - */ + /** @obtainableFrom {@link API.getUser} */ export interface Extended extends User.WithCountryCoverGroupsStatisticsSupport, User.WithKudosu { cover_url: string discord: string | null @@ -109,14 +103,6 @@ export namespace User { timestamp: Date type: "note" | "restriction" | "silence" }[] - active_tournament_banner: { - id: number - tournament_id: number - image: string - } | null - /** - * This is not documented by osu!, likely because support for multiple banners has been recently added (OWC2023) - */ active_tournament_banners: { id: number tournament_id: number @@ -189,9 +175,7 @@ export namespace User { } export namespace Extended { - /** - * Expected from api.getResourceOwner() - */ + /** @obtainableFrom {@link API.getResourceOwner} */ export interface WithStatisticsrulesets extends Extended, User.WithCountryCoverGroupsStatisticsrulesets { is_restricted: boolean } @@ -253,9 +237,7 @@ export namespace User { } } - /** - * Expected from api.getUserKudosu() - */ + /** @obtainableFrom {@link API.getUserKudosu} */ export interface KudosuHistory { id: number action: "give" | "vote.give" | "reset" | "vote.reset" | "revoke" | "vote.revoke" diff --git a/lib/wiki.ts b/lib/wiki.ts index 2c2bf1b..b52be57 100644 --- a/lib/wiki.ts +++ b/lib/wiki.ts @@ -4,14 +4,10 @@ export interface WikiPage { available_locales: string[] layout: string - /** - * BCP 47 language (sub)tag, lowercase (for example, `en` for english) - */ + /** BCP 47 language (sub)tag, lowercase (for example, `en` for english) */ locale: string markdown: string - /** - * It's what should be after `https://osu.ppy.sh/wiki/{locale}/` - */ + /** It's what should be after `https://osu.ppy.sh/wiki/{locale}/` */ path: string /** * Think of it as the title of the parent wiki page diff --git a/package.json b/package.json index ed17d01..cbb3672 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "osu-api-v2-js", - "version": "0.4.2", + "version": "0.5.0", "description": "Package to easily access osu!api version 2.0", "type": "module", "main": "dist/index.js",