From 0fd97d2c440d78bbcf372810fad543424ddd9935 Mon Sep 17 00:00:00 2001 From: Sleitnick Date: Sat, 9 Dec 2023 19:47:25 +0000 Subject: [PATCH] Deployed f83f631 with MkDocs version: 1.4.2 --- .nojekyll | 0 404.html | 469 ++ assets/images/favicon.png | Bin 0 -> 1870 bytes assets/javascripts/bundle.51d95adb.min.js | 29 + assets/javascripts/bundle.51d95adb.min.js.map | 8 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.e5c33ebb.min.js | 42 + .../workers/search.e5c33ebb.min.js.map | 8 + assets/stylesheets/main.558e4712.min.css | 1 + assets/stylesheets/main.558e4712.min.css.map | 1 + assets/stylesheets/palette.2505c338.min.css | 1 + .../stylesheets/palette.2505c338.min.css.map | 1 + cli/cli-api-key/index.html | 624 ++ cli/cli-datastore/index.html | 771 ++ cli/cli-experience/index.html | 636 ++ cli/cli-install/index.html | 651 ++ cli/cli-messaging/index.html | 571 ++ cli/cli-ordered-datastore/index.html | 701 ++ img/logo.svg | 5 + img/logo_64.png | Bin 0 -> 3165 bytes index.html | 567 ++ lib/lib-install/index.html | 574 ++ search/search_index.json | 1 + sitemap.xml | 43 + sitemap.xml.gz | Bin 0 -> 278 bytes 52 files changed, 12899 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 assets/images/favicon.png create mode 100644 assets/javascripts/bundle.51d95adb.min.js create mode 100644 assets/javascripts/bundle.51d95adb.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.e5c33ebb.min.js create mode 100644 assets/javascripts/workers/search.e5c33ebb.min.js.map create mode 100644 assets/stylesheets/main.558e4712.min.css create mode 100644 assets/stylesheets/main.558e4712.min.css.map create mode 100644 assets/stylesheets/palette.2505c338.min.css create mode 100644 assets/stylesheets/palette.2505c338.min.css.map create mode 100644 cli/cli-api-key/index.html create mode 100644 cli/cli-datastore/index.html create mode 100644 cli/cli-experience/index.html create mode 100644 cli/cli-install/index.html create mode 100644 cli/cli-messaging/index.html create mode 100644 cli/cli-ordered-datastore/index.html create mode 100644 img/logo.svg create mode 100644 img/logo_64.png create mode 100644 index.html create mode 100644 lib/lib-install/index.html create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..41793a7 --- /dev/null +++ b/404.html @@ -0,0 +1,469 @@ + + + + + + + + + + + + + + + + + + rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c GIT binary patch literal 1870 zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0 zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7 z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9 zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K z^bTyO6>Gar#P_W2gEMwq)ot3; zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8 zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq! zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d; ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV** z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo IM6N<$f(jP3KmY&$ literal 0 HcmV?d00001 diff --git a/assets/javascripts/bundle.51d95adb.min.js b/assets/javascripts/bundle.51d95adb.min.js new file mode 100644 index 0000000..b20ec68 --- /dev/null +++ b/assets/javascripts/bundle.51d95adb.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Hi=Object.create;var xr=Object.defineProperty;var Pi=Object.getOwnPropertyDescriptor;var $i=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,Ii=Object.getPrototypeOf,Er=Object.prototype.hasOwnProperty,an=Object.prototype.propertyIsEnumerable;var on=(e,t,r)=>t in e?xr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))Er.call(t,r)&&on(e,r,t[r]);if(kt)for(var r of kt(t))an.call(t,r)&&on(e,r,t[r]);return e};var sn=(e,t)=>{var r={};for(var n in e)Er.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&an.call(e,n)&&(r[n]=e[n]);return r};var Ht=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Fi=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of $i(t))!Er.call(e,o)&&o!==r&&xr(e,o,{get:()=>t[o],enumerable:!(n=Pi(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Hi(Ii(e)):{},Fi(t||!e||!e.__esModule?xr(r,"default",{value:e,enumerable:!0}):r,e));var fn=Ht((wr,cn)=>{(function(e,t){typeof wr=="object"&&typeof cn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(wr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,a={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function s(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function f(T){var Ke=T.type,We=T.tagName;return!!(We==="INPUT"&&a[Ke]&&!T.readOnly||We==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function c(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(s(r.activeElement)&&c(r.activeElement),n=!0)}function m(T){n=!1}function d(T){s(T.target)&&(n||f(T.target))&&c(T.target)}function h(T){s(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),B())}function B(){document.addEventListener("mousemove",z),document.addEventListener("mousedown",z),document.addEventListener("mouseup",z),document.addEventListener("pointermove",z),document.addEventListener("pointerdown",z),document.addEventListener("pointerup",z),document.addEventListener("touchmove",z),document.addEventListener("touchstart",z),document.addEventListener("touchend",z)}function re(){document.removeEventListener("mousemove",z),document.removeEventListener("mousedown",z),document.removeEventListener("mouseup",z),document.removeEventListener("pointermove",z),document.removeEventListener("pointerdown",z),document.removeEventListener("pointerup",z),document.removeEventListener("touchmove",z),document.removeEventListener("touchstart",z),document.removeEventListener("touchend",z)}function z(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,re())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),B(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var un=Ht(Sr=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(c){return!1}},r=t(),n=function(c){var u={next:function(){var p=c.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(c){return encodeURIComponent(c).replace(/%20/g,"+")},i=function(c){return decodeURIComponent(String(c).replace(/\+/g," "))},a=function(){var c=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof c){var d=this;p.forEach(function(re,z){d.append(z,re)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),c._entries&&(c._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(f,c){typeof f!="string"&&(f=String(f)),c&&typeof c!="string"&&(c=String(c));var u=document,p;if(c&&(e.location===void 0||c!==e.location.href)){c=c.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=c,u.head.appendChild(p);try{if(p.href.indexOf(c)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+c+" due to "+T)}}var m=u.createElement("a");m.href=f,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=f,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!c)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,B=!0,re=this;["append","delete","set"].forEach(function(T){var Ke=h[T];h[T]=function(){Ke.apply(h,arguments),v&&(B=!1,re.search=h.toString(),B=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var z=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==z&&(z=this.search,B&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},a=i.prototype,s=function(f){Object.defineProperty(a,f,{get:function(){return this._anchorElement[f]},set:function(c){this._anchorElement[f]=c},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(f){s(f)}),Object.defineProperty(a,"search",{get:function(){return this._anchorElement.search},set:function(f){this._anchorElement.search=f,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(a,{toString:{get:function(){var f=this;return function(){return f.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(f){this._anchorElement.href=f,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(f){this._anchorElement.pathname=f},enumerable:!0},origin:{get:function(){var f={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],c=this._anchorElement.port!=f&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(c?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(f){},enumerable:!0},username:{get:function(){return""},set:function(f){},enumerable:!0}}),i.createObjectURL=function(f){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(f){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Sr)});var Qr=Ht((Lt,Kr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Lt=="object"&&typeof Kr=="object"?Kr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Lt=="object"?Lt.ClipboardJS=r():t.ClipboardJS=r()})(Lt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return ki}});var a=i(279),s=i.n(a),f=i(370),c=i.n(f),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var w=p()(O);return m("cut"),w},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",w=document.createElement("textarea");w.style.fontSize="12pt",w.style.border="0",w.style.padding="0",w.style.margin="0",w.style.position="absolute",w.style[O?"right":"left"]="-9999px";var k=window.pageYOffset||document.documentElement.scrollTop;return w.style.top="".concat(k,"px"),w.setAttribute("readonly",""),w.value=j,w}var B=function(O,w){var k=v(O);w.container.appendChild(k);var F=p()(k);return m("copy"),k.remove(),F},re=function(O){var w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},k="";return typeof O=="string"?k=B(O,w):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?k=B(O.value,w):(k=p()(O),m("copy")),k},z=re;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(w){return typeof w}:T=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},T(j)}var Ke=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},w=O.action,k=w===void 0?"copy":w,F=O.container,q=O.target,Le=O.text;if(k!=="copy"&&k!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(k==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(k==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Le)return z(Le,{container:F});if(q)return k==="cut"?h(q):z(q,{container:F})},We=Ke;function Ie(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Ie=function(w){return typeof w}:Ie=function(w){return w&&typeof Symbol=="function"&&w.constructor===Symbol&&w!==Symbol.prototype?"symbol":typeof w},Ie(j)}function Ti(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function nn(j,O){for(var w=0;w0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof F.action=="function"?F.action:this.defaultAction,this.target=typeof F.target=="function"?F.target:this.defaultTarget,this.text=typeof F.text=="function"?F.text:this.defaultText,this.container=Ie(F.container)==="object"?F.container:document.body}},{key:"listenClick",value:function(F){var q=this;this.listener=c()(F,"click",function(Le){return q.onClick(Le)})}},{key:"onClick",value:function(F){var q=F.delegateTarget||F.currentTarget,Le=this.action(q)||"copy",Rt=We({action:Le,container:this.container,target:this.target(q),text:this.text(q)});this.emit(Rt?"success":"error",{action:Le,text:Rt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(F){return yr("action",F)}},{key:"defaultTarget",value:function(F){var q=yr("target",F);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(F){return yr("text",F)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(F){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return z(F,q)}},{key:"cut",value:function(F){return h(F)}},{key:"isSupported",value:function(){var F=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof F=="string"?[F]:F,Le=!!document.queryCommandSupported;return q.forEach(function(Rt){Le=Le&&!!document.queryCommandSupported(Rt)}),Le}}]),w}(s()),ki=Ri},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function a(s,f){for(;s&&s.nodeType!==o;){if(typeof s.matches=="function"&&s.matches(f))return s;s=s.parentNode}}n.exports=a},438:function(n,o,i){var a=i(828);function s(u,p,m,d,h){var v=c.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function f(u,p,m,d,h){return typeof u.addEventListener=="function"?s.apply(null,arguments):typeof m=="function"?s.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return s(v,p,m,d,h)}))}function c(u,p,m,d){return function(h){h.delegateTarget=a(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=f},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var a=Object.prototype.toString.call(i);return i!==void 0&&(a==="[object NodeList]"||a==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var a=Object.prototype.toString.call(i);return a==="[object Function]"}},370:function(n,o,i){var a=i(879),s=i(438);function f(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!a.string(d))throw new TypeError("Second argument must be a String");if(!a.fn(h))throw new TypeError("Third argument must be a Function");if(a.node(m))return c(m,d,h);if(a.nodeList(m))return u(m,d,h);if(a.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function c(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return s(document.body,m,d,h)}n.exports=f},817:function(n){function o(i){var a;if(i.nodeName==="SELECT")i.focus(),a=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var s=i.hasAttribute("readonly");s||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),s||i.removeAttribute("readonly"),a=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var f=window.getSelection(),c=document.createRange();c.selectNodeContents(i),f.removeAllRanges(),f.addRange(c),a=f.toString()}return a}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,a,s){var f=this.e||(this.e={});return(f[i]||(f[i]=[])).push({fn:a,ctx:s}),this},once:function(i,a,s){var f=this;function c(){f.off(i,c),a.apply(s,arguments)}return c._=a,this.on(i,c,s)},emit:function(i){var a=[].slice.call(arguments,1),s=((this.e||(this.e={}))[i]||[]).slice(),f=0,c=s.length;for(f;f{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var is=/["'&<>]/;Jo.exports=as;function as(e){var t=""+e,r=is.exec(t);if(!r)return t;var n,o="",i=0,a=0;for(i=r.index;i0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(a)throw a.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||s(m,d)})})}function s(m,d){try{f(n[m](d))}catch(h){p(i[0][3],h)}}function f(m){m.value instanceof Xe?Promise.resolve(m.value.v).then(c,u):p(i[0][2],m)}function c(m){s("next",m)}function u(m){s("throw",m)}function p(m,d){m(d),i.shift(),i.length&&s(i[0][0],i[0][1])}}function mn(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof xe=="function"?xe(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(a){return new Promise(function(s,f){a=e[i](a),o(s,f,a.done,a.value)})}}function o(i,a,s,f){Promise.resolve(f).then(function(c){i({value:c,done:s})},a)}}function A(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var $t=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function De(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Fe=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a)if(this._parentage=null,Array.isArray(a))try{for(var s=xe(a),f=s.next();!f.done;f=s.next()){var c=f.value;c.remove(this)}}catch(v){t={error:v}}finally{try{f&&!f.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}else a.remove(this);var u=this.initialTeardown;if(A(u))try{u()}catch(v){i=v instanceof $t?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=xe(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{dn(h)}catch(v){i=i!=null?i:[],v instanceof $t?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new $t(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)dn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&De(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&De(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Or=Fe.EMPTY;function It(e){return e instanceof Fe||e&&"closed"in e&&A(e.remove)&&A(e.add)&&A(e.unsubscribe)}function dn(e){A(e)?e():e.unsubscribe()}var Ae={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,a=o.isStopped,s=o.observers;return i||a?Or:(this.currentObservers=null,s.push(r),new Fe(function(){n.currentObservers=null,De(s,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,a=n.isStopped;o?r.error(i):a&&r.complete()},t.prototype.asObservable=function(){var r=new U;return r.source=this,r},t.create=function(r,n){return new wn(r,n)},t}(U);var wn=function(e){ne(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Or},t}(E);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ne(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,a=n._infiniteTimeWindow,s=n._timestampProvider,f=n._windowTime;o||(i.push(r),!a&&i.push(s.now()+f)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,a=o._buffer,s=a.slice(),f=0;f0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var a=r.actions;n!=null&&((i=a[a.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Ut);var On=function(e){ne(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Wt);var we=new On(Tn);var R=new U(function(e){return e.complete()});function Dt(e){return e&&A(e.schedule)}function kr(e){return e[e.length-1]}function Qe(e){return A(kr(e))?e.pop():void 0}function Se(e){return Dt(kr(e))?e.pop():void 0}function Vt(e,t){return typeof kr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function zt(e){return A(e==null?void 0:e.then)}function Nt(e){return A(e[ft])}function qt(e){return Symbol.asyncIterator&&A(e==null?void 0:e[Symbol.asyncIterator])}function Kt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ki(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Qt=Ki();function Yt(e){return A(e==null?void 0:e[Qt])}function Gt(e){return ln(this,arguments,function(){var r,n,o,i;return Pt(this,function(a){switch(a.label){case 0:r=e.getReader(),a.label=1;case 1:a.trys.push([1,,9,10]),a.label=2;case 2:return[4,Xe(r.read())];case 3:return n=a.sent(),o=n.value,i=n.done,i?[4,Xe(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,Xe(o)];case 6:return[4,a.sent()];case 7:return a.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Bt(e){return A(e==null?void 0:e.getReader)}function $(e){if(e instanceof U)return e;if(e!=null){if(Nt(e))return Qi(e);if(pt(e))return Yi(e);if(zt(e))return Gi(e);if(qt(e))return _n(e);if(Yt(e))return Bi(e);if(Bt(e))return Ji(e)}throw Kt(e)}function Qi(e){return new U(function(t){var r=e[ft]();if(A(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Yi(e){return new U(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?_(function(o,i){return e(o,i,n)}):me,Oe(1),r?He(t):zn(function(){return new Xt}))}}function Nn(){for(var e=[],t=0;t=2,!0))}function fe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new E}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,a=i===void 0?!0:i,s=e.resetOnRefCountZero,f=s===void 0?!0:s;return function(c){var u,p,m,d=0,h=!1,v=!1,B=function(){p==null||p.unsubscribe(),p=void 0},re=function(){B(),u=m=void 0,h=v=!1},z=function(){var T=u;re(),T==null||T.unsubscribe()};return g(function(T,Ke){d++,!v&&!h&&B();var We=m=m!=null?m:r();Ke.add(function(){d--,d===0&&!v&&!h&&(p=jr(z,f))}),We.subscribe(Ke),!u&&d>0&&(u=new et({next:function(Ie){return We.next(Ie)},error:function(Ie){v=!0,B(),p=jr(re,o,Ie),We.error(Ie)},complete:function(){h=!0,B(),p=jr(re,a),We.complete()}}),$(T).subscribe(u))})(c)}}function jr(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function V(e,t=document){let r=se(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function se(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),N(e===_e()),Y())}function Be(e){return{x:e.offsetLeft,y:e.offsetTop}}function Yn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,we),l(()=>Be(e)),N(Be(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,we),l(()=>rr(e)),N(rr(e)))}var Bn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!zr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),xa?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!zr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=ya.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Jn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Zn=typeof WeakMap!="undefined"?new WeakMap:new Bn,eo=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=Ea.getInstance(),n=new Ra(t,r,this);Zn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){eo.prototype[e]=function(){var t;return(t=Zn.get(this))[e].apply(t,arguments)}});var ka=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:eo}(),to=ka;var ro=new E,Ha=I(()=>H(new to(e=>{for(let t of e)ro.next(t)}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function de(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ge(e){return Ha.pipe(S(t=>t.observe(e)),x(t=>ro.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(()=>de(e)))),N(de(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var no=new E,Pa=I(()=>H(new IntersectionObserver(e=>{for(let t of e)no.next(t)},{threshold:0}))).pipe(x(e=>L(Te,H(e)).pipe(C(()=>e.disconnect()))),J(1));function sr(e){return Pa.pipe(S(t=>t.observe(e)),x(t=>no.pipe(_(({target:r})=>r===e),C(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function oo(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=de(e),o=bt(e);return r>=o.height-n.height-t}),Y())}var cr={drawer:V("[data-md-toggle=drawer]"),search:V("[data-md-toggle=search]")};function io(e){return cr[e].checked}function qe(e,t){cr[e].checked!==t&&cr[e].click()}function je(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),N(t.checked))}function $a(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Ia(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(N(!1))}function ao(){let e=b(window,"keydown").pipe(_(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:io("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),_(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!$a(n,r)}return!0}),fe());return Ia().pipe(x(t=>t?R:e))}function Me(){return new URL(location.href)}function ot(e){location.href=e.href}function so(){return new E}function co(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)co(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)co(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function fo(){return location.hash.substring(1)}function uo(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function Fa(){return b(window,"hashchange").pipe(l(fo),N(fo()),_(e=>e.length>0),J(1))}function po(){return Fa().pipe(l(e=>se(`[id="${e}"]`)),_(e=>typeof e!="undefined"))}function Nr(e){let t=matchMedia(e);return Zt(r=>t.addListener(()=>r(t.matches))).pipe(N(t.matches))}function lo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(N(e.matches))}function qr(e,t){return e.pipe(x(r=>r?t():R))}function ur(e,t={credentials:"same-origin"}){return ve(fetch(`${e}`,t)).pipe(ce(()=>R),x(r=>r.status!==200?Tt(()=>new Error(r.statusText)):H(r)))}function Ue(e,t){return ur(e,t).pipe(x(r=>r.json()),J(1))}function mo(e,t){let r=new DOMParser;return ur(e,t).pipe(x(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function pr(e){let t=M("script",{src:e});return I(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(x(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),C(()=>document.head.removeChild(t)),Oe(1))))}function ho(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function bo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(ho),N(ho()))}function vo(){return{width:innerWidth,height:innerHeight}}function go(){return b(window,"resize",{passive:!0}).pipe(l(vo),N(vo()))}function yo(){return Q([bo(),go()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(X("size")),o=Q([n,r]).pipe(l(()=>Be(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:a,size:s},{x:f,y:c}])=>({offset:{x:a.x-f,y:a.y-c+i},size:s})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(a=>{let s=document.createElement("script");s.src=i,s.onload=a,document.body.appendChild(s)})),Promise.resolve())}var r=class{constructor(n){this.url=n,this.onerror=null,this.onmessage=null,this.onmessageerror=null,this.m=a=>{a.source===this.w&&(a.stopImmediatePropagation(),this.dispatchEvent(new MessageEvent("message",{data:a.data})),this.onmessage&&this.onmessage(a))},this.e=(a,s,f,c,u)=>{if(s===this.url.toString()){let p=new ErrorEvent("error",{message:a,filename:s,lineno:f,colno:c,error:u});this.dispatchEvent(p),this.onerror&&this.onerror(p)}};let o=new EventTarget;this.addEventListener=o.addEventListener.bind(o),this.removeEventListener=o.removeEventListener.bind(o),this.dispatchEvent=o.dispatchEvent.bind(o);let i=document.createElement("iframe");i.width=i.height=i.frameBorder="0",document.body.appendChild(this.iframe=i),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

API Key

+

rbxcloud requires a Roblox API key to function. These keys can be created and managed on the Credentials Roblox page. Remember to always keep these keys secret.

+

Roblox API keys will auto-expire if not used for over 60 days. Use the Credentials page to regenerate the key if this occurs.

+

Security

+

As a general rule of practice for any API key:

+
    +
  • Use the least number of permissions as needed
  • +
  • Keep the key in a secret location (e.g. GitHub Secrets, AWS Secrets Manager, etc.)
  • +
  • Never commit a key to a source code repository
  • +
  • Use as strict of a CIDR as possible
  • +
  • Use an expiration date to force periodic key rollovers (must be manually regenerated)
  • +
+

Handling Compromised Keys

+

If a key is suspected to have been compromised, use the Credentials page to immediately invalidate the key. This can be done by regenerating or deleting the key. Keys can also be disabled, but re-enabling the key will not change the key, thus is not a safe option to protect from a compromised key. If in doubt, regenerate the key.

+

Storing Keys

+

There are many tools that can be used to securely store a key. GitHub has a Secrets page for each repository, which can then be used by GitHub Actions securely. AWS and GCP have a Secrets Manager service. Azure has the Key Vault service.

+

If a key must be located within a local repository's directory, be sure to add it to the .gitignore file. This is common in some .env file setups.

+

Environment Variable

+

All CLI commands expect the --api-key parameter, but can also be set via the RBXCLOUD_API_KEY environment variable. With the environment variable set, the --api-key parameter can be left out.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cli/cli-datastore/index.html b/cli/cli-datastore/index.html new file mode 100644 index 0000000..4bc6a77 --- /dev/null +++ b/cli/cli-datastore/index.html @@ -0,0 +1,771 @@ + + + + + + + + + + + + + + + + + + + + + + + + DataStore - rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

DataStore API

+

List Stores

+

List all DataStores within a given experience. +

USAGE:
+    rbxcloud datastore list-stores [OPTIONS] --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>            Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -c, --cursor <CURSOR>              Cursor for the next set of data
+    -h, --help                         Print help information
+    -l, --limit <LIMIT>                Maximum number of items to return
+    -p, --prefix <PREFIX>              Return only DataStores with this prefix
+    -u, --universe-id <UNIVERSE_ID>    Universe ID of the experience
+

+

List Keys

+

List all keys within a given DataStore. +

USAGE:
+    rbxcloud datastore list [OPTIONS] --datastore-name <DATASTORE_NAME> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -c, --cursor <CURSOR>                    Cursor for the next set of data
+    -d, --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -l, --limit <LIMIT>                      Maximum number of items to return
+    -o, --all-scopes                         If true, return keys from all scopes
+    -p, --prefix <PREFIX>                    Return only DataStores with this prefix
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+

+

List Key Versions

+

List all versions of the specified key. +

USAGE:
+    rbxcloud datastore list-versions [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --sort-order <SORT_ORDER> --limit <LIMIT> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -c, --cursor <CURSOR>                    Cursor for the next set of data
+    -d, --datastore-name <DATASTORE_NAME>    DataStore name
+    -e, --end-time <END_TIME>                End time constraint (ISO UTC Datetime)
+    -h, --help                               Print help information
+    -k, --key <KEY>                          The key of the entry
+    -l, --limit <LIMIT>                      Maximum number of items to return
+    -o, --sort-order <SORT_ORDER>            Sort order [possible values: ascending, descending]
+    -s, --scope <SCOPE>                      DataStore scope
+    -t, --start-time <START_TIME>            Start time constraint (ISO UTC Datetime)
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+

+

Get Key

+

Get the entry value of a specific key. +

USAGE:
+    rbxcloud datastore get [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d, --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -k, --key <KEY>                          The key of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+

+

Set Key

+

Set (or create) the entry value of a specific key. +

USAGE:
+    rbxcloud datastore set [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --data <DATA> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d, --datastore-name <DATASTORE_NAME>    DataStore name
+    -D, --data <DATA>                        JSON-stringified data (up to 4MB)
+    -e, --exclusive-create                   Only create the entry if it does not exist
+    -h, --help                               Print help information
+    -i, --match-version <MATCH_VERSION>      Only update if the current version matches this
+    -k, --key <KEY>                          The key of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -t, --attributes <ATTRIBUTES>            JSON-stringified attributes data
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+    -U, --user-ids <USER_IDS>                Comma-separated list of Roblox user IDs
+

+

Increment Key

+

Increment (or create) the entry value of a specific key. +

USAGE:
+    rbxcloud datastore increment [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --increment-by <INCREMENT_BY> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d, --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -i, --increment-by <INCREMENT_BY>        The amount by which the entry should be incremented
+    -k, --key <KEY>                          The key of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -t, --attributes <ATTRIBUTES>            JSON-stringified attributes data
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+    -U, --user-ids <USER_IDS>                Comma-separated list of Roblox user IDs
+

+

Delete Key

+

Delete the value of a specific key. Per Roblox's documentation, this creates a "tombstone" version for 30 days before being completely deleted. +

USAGE:
+    rbxcloud datastore delete [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d, --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -k, --key <KEY>                          The key of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+

+

Get Key Version

+

Get a specific entry of a key given the version. +

USAGE:
+    rbxcloud datastore get-version [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --version-id <VERSION_ID> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d, --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -i, --version-id <VERSION_ID>            The version of the key
+    -k, --key <KEY>                          The key of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cli/cli-experience/index.html b/cli/cli-experience/index.html new file mode 100644 index 0000000..4d8a317 --- /dev/null +++ b/cli/cli-experience/index.html @@ -0,0 +1,636 @@ + + + + + + + + + + + + + + + + + + + + + + + + Experience - rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Experience API

+

Publish Place

+

Publish a place to a Roblox experience. This takes an *.rbxl file and publishes it to a specific Place ID. +

USAGE:
+    rbxcloud experience publish --filename <FILENAME> --place-id <PLACE_ID> --universe-id <UNIVERSE_ID> --version-type <VERSION_TYPE> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>              Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -f, --filename <FILENAME>            Filename (full or relative) of the RBXL file
+    -h, --help                           Print help information
+    -p, --place-id <PLACE_ID>            Place ID of the experience
+    -u, --universe-id <UNIVERSE_ID>      Universe ID of the experience
+    -t, --version-type <VERSION_TYPE>    Version type [possible values: saved, published]
+

+

Example

+
$ rbxcloud experience publish -f myplace.rbxl -t published -p 12345 -u 98765 -a MY_KEY
+
+

GitHub Action

+

A common practice is to create a CD pipeline to deploy a place automatically. This can be done with GitHub actions. Below is an example GitHub Action workflow. The example assumes that Aftman is being used and that rbxcloud is listed within the aftman.toml file.

+
# Deploy any time code is pushed to the 'main' branch
+name: Deploy
+on:
+  push:
+    branches:
+      - main
+
+jobs:
+  deploy:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v3
+
+      - name: Install Aftman
+        uses: ok-nick/setup-aftman@v0
+
+      - name: Publish
+        shell: bash
+        env:
+          UID: 123456789              # Universe ID
+          PID: 123456789              # Place ID
+          API_KEY: ${{ secrets.key }} # API Key (keep this in your GitHub Repository Secrets)
+          FILE: my_place.rbxl         # Roblox place file (e.g. might have a step before this to build the file with Rojo)
+
+        run: rbxcloud experience publish -a "$API_KEY" -u "$UID" -p "$PID" -t published -f "$FILE"
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cli/cli-install/index.html b/cli/cli-install/index.html new file mode 100644 index 0000000..e78bb42 --- /dev/null +++ b/cli/cli-install/index.html @@ -0,0 +1,651 @@ + + + + + + + + + + + + + + + + + + + + + + + + Install - rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Install

+

Install CLI

+

There are a few different ways to install the rbxcloud CLI.

+

Aftman (Preferred)

+

Run the aftman add command within your project directory. This will add rbxcloud to the project's aftman.toml file (or create one if it doesn't yet exist). +

$ aftman add Sleitnick/rbxcloud@0.6.1
+

+

Next, run aftman install to install rbxcloud.

+

Foreman

+

Add rbxcloud under the [tools] section of your foreman.toml file. +

# foreman.toml
+[tools]
+rbxcloud = { github = "Sleitnick/rbxcloud", version = "0.6.1" }
+

+

Next, run foreman install to install rbxcloud.

+
+Legacy +

Aftman is preferred over Foreman. For more information, see the Aftman GitHub repository.

+
+

Releases

+

A few prebuilt binaries are compiled and attached to each release.

+
    +
  1. Go to the releases page
  2. +
  3. Navigate to the desired version (e.g. the latest version)
  4. +
  5. Download and unzip the desired executable
  6. +
  7. Relocate the executable to a more permanent place
  8. +
  9. Change your OS path variable to point to the executable
  10. +
+

Verify

+

Run the tool with the --version flag to verify the installation succeeded. +

$ rbxcloud --version
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cli/cli-messaging/index.html b/cli/cli-messaging/index.html new file mode 100644 index 0000000..988c3df --- /dev/null +++ b/cli/cli-messaging/index.html @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + + + + + + + + + + Messaging - rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Messaging API

+

Publish Message

+

Publish a message to a Roblox experience. This takes a message and a topic and publishes the message. Experiences can use the MessagingService to subscribe to a topic and listen for messages. +

USAGE:
+    rbxcloud messaging publish --topic <TOPIC> --message <MESSAGE> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>            Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -h, --help                         Print help information
+    -m, --message <MESSAGE>            Message to send
+    -t, --topic <TOPIC>                Message topic
+

+

Example: +

$ rbxcloud messaging publish -t Hello -m "Hello world!" -p 12345 -u 98765 -a MY_KEY
+
+
MessagingService:SubscribeAsync("Hello", function(message)
+    print(message)
+    --> {message: "Hello world!"}
+end)
+

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/cli/cli-ordered-datastore/index.html b/cli/cli-ordered-datastore/index.html new file mode 100644 index 0000000..ff9a895 --- /dev/null +++ b/cli/cli-ordered-datastore/index.html @@ -0,0 +1,701 @@ + + + + + + + + + + + + + + + + + + + + + + + + OrderedDataStore - rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

OrderedDataStore API

+

List Entries

+
USAGE:
+    rbxcloud ordered-datastore list [OPTIONS] --datastore-name <DATASTORE_NAME> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d  --datastore-name <DATASTORE_NAME>    DataStore name
+    -f, --filter <FILTER>                    A range of qualifying values of entries to return
+    -h, --help                               Print help information
+    -m, --max-page-size <MAX_PAGE_SIZE>      Maximum number of items to return per page
+    -o, --order-by <ORDER_BY>                The enumeration direction (Use 'desc' for descending)
+    -p, --page-token <PAGE_TOKEN>            Cursor for the next set of data
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+
+

Get Entry

+
USAGE:
+    rbxcloud ordered-datastore get [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d  --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -i, --id <ID>                            The ID of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+
+

Create Entry

+
USAGE:
+    rbxcloud ordered-datastore create [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --value <VALUE> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d  --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -i, --id <ID>                            The ID of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+    -v, --value <VALUE>                      The value of the entry
+
+

Update Entry

+
USAGE:
+    rbxcloud ordered-datastore update [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --value <VALUE> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d  --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -i, --id <ID>                            The ID of the entry
+    -m, --allow-missing <ALLOW_MISSING>      Create if missing [possible values: true, false]
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+    -v, --value <VALUE>                      The value of the entry
+
+

Increment Entry

+
USAGE:
+    rbxcloud ordered-datastore increment [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --increment <INCREMENT> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d  --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -i, --id <ID>                            The ID of the entry
+    -n, --increment <INCREMENT>              The incremented value of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+
+

Delete Entry

+
USAGE:
+    rbxcloud ordered-datastore delete [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --universe-id <UNIVERSE_ID> --api-key <API_KEY>
+
+OPTIONS:
+    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]
+    -d  --datastore-name <DATASTORE_NAME>    DataStore name
+    -h, --help                               Print help information
+    -i, --id <ID>                            The ID of the entry
+    -s, --scope <SCOPE>                      DataStore scope
+    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience
+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/img/logo.svg b/img/logo.svg new file mode 100644 index 0000000..e2846b5 --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/img/logo_64.png b/img/logo_64.png new file mode 100644 index 0000000000000000000000000000000000000000..90455b6c38510f2d3a1699b1783a517913b33146 GIT binary patch literal 3165 zcmcInc~ld39uKG-0R9Wf6G@bnucdSbvr_Qnz!3r8Kq>`sVl|?+gi(6K z6gxvj*{4Sn_9Q}13POVUK{f?2V4|!z-)1tJS%pn0=(4K-Ywj^D;CG2wlazwVoI`%R zTEh>c8Hz6rL?Hq}5WZ9%D3(YlEg_!3M-dc-5iyL&Aw;S`Q3WdJ_xuFF9YZE6W~m~2 zoPnKEpto8r3K&jFNeN651=5TT7Ru#v7(rnag@6Rarkbs|4KlN%dM&6ZmS7APtARH2 zIg7ZKPPQrq0BUy(CQF}LGuy)xU<|h57FZaFa541?s?~27HJSRPS!?)W;H3xe9~x$( zQ!Nxci(=_yhM>Y1Q)cU^UT3Uz7WI3$@1PFE`;Vq7wGu zwCHIo&FbktA))Ve9~Blw7(?M!nu(@qV{e)@y;k_BC=lb1i!+!>I)xq2h0~)zscy`2&O=gZc#O;A`-Xa?hQ!o&5ml=dk!IG4n+YmXr4#^A zfd&Jq(269e6vruuqHq}`MlcN05~vI!P(&n?iVzuzqFuOvzKSN2Ir=#L?xH7Y0@&zd zNI}TNK$(<55+N#u# zF5+4NSO-x|F|Z(YsXfgVMJ?)C84dididEnQ*C!6lgjc)K4P{(!xA!`ZE$qNjk- zwP#a1C*ij4xsy@mJ@@e9-$q6JHjFbkq z>Oq=~bTSFyEK6CzSS1Juw-_L72}LX4C^S~*HVm`o~%WC#JKej+Kxa0;cw zl(ZMzn=O%?4Eh1X2(6Ulx`{xv5GIm}A(>c=L!hZ}f{;q2GB7>*=aR1%QOkwKM$Ov+N-}Cn8nIxjtvYV=}xPCG+3dt zH&moo3>cR%sV;Nz=$TU|y^oBr4Yu+2`3;RZd>^y)e=*?2u!dowvWxGTpzy+?ir94x zK?mxk^W3wlbX3{VjMh8DV|{&F#)}tL@1MA$_0G~A*#S4^&#g~&Wch5`Wtmhs zYwv};Qn<`FL4Wwz2*3# z)vC)AU|zs8m)e-g$$^!lcC8v-;Jkh1py{O7`gV64tm{0u#x?f7`}&venk8vZo{e62 zeEjX~LC023SlbrlwCjQ1FSoTOr+jU`-MM~q4SG9ufg~e$Ggi>ABdzxMmX-5(hh3|j z{KDKiizDKE%Wfq$SJy~tSW2QiI2=t=0??Q8_S-@HV2<7m{vG*qcmxGOy=>|no!JRJ`<7UbFWHyx@`AA&9}S$aj*8wPgCPOmLISORkvg= zf4;q8z_>?CMc-8gKd(wimvWN6JCXTU<*|o0McwlMDdYUI`11*Qe}k&FL8D znSHu(ZFy^(i_7->^46Bv5Hz*DB;hylY~SWHe*;7YI31{OlLsW6Yjklj$G)zpd+h(b z!h1mc;7Hw(8!^s4yka(XZ{9ht3fQ$`sr%8en$Gb*pGpuMaf;VCf0N~18CvXoaMptx zYwTWXm)IW;>^7baa9XGGeBu8zEMtk?F=yhW!z4Ye4 zq{;I#B$ovX4|zH!mBe@MSvtVcu%Z1#UP+8dFfU_TM(&_v*EdvOeWcvOl=mOL z#=Cjm^E*>^e_k}5*Hp#-<>=r_e{Ie4udlrlh(_p7OwLk{$@!{2KFHNL^Sg*O?icGX zB@8ioIL751mM5mzvhI~%7`q_K?T+T^Bx>2IH1|a%bGN_0@B19mm=)>}r&rYtYozRTb_TPGC_?VAcP0m#-2X#E!G@{?qu$y-jHJ^>n-|<y&Uhz_PIYds&>eZ!Pz6P&$A=U50{w_8p1C@Gn~G0NvJFS)${Co zBMUO{B^eIS1^(+7S{HjUKDLiDpAz>oM*8{Q_n4ZVF7Zfm?N@VYVVj27D9Nn+s^pgP z)>ypdc2H$$v&l_dT@mUw|H}!%zf{G?PkcC_X@hd^(U|tfp>CaNvuj-E?GM>3|?EV>=H0In>&SGvs6 x7JBsjYnNSg_n5E_)a*^$_D}C3y;FEwh+}9XQ5Z7&8utMZ89rTA5xQW-zX7tcv4j8s literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..e23bc46 --- /dev/null +++ b/index.html @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Home

+

About

+

The rbxcloud CLI and library is built for easy access into the Roblox Open Cloud APIs. The CLI can be used by developers and CD pipelines for external deployments, messaging, and datastore management. The Rust library can be used to build tools and applications on top of Roblox's Open Cloud APIs with ease.

+

Documentation

+

For documentation on the CLI, start on the CLI Installation page.

+

For documentation on the Rust library, start on the Rust Library Installation page.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/lib/lib-install/index.html b/lib/lib-install/index.html new file mode 100644 index 0000000..a779250 --- /dev/null +++ b/lib/lib-install/index.html @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + + + + + + + + Install - rbxcloud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + +

Rust Library Installation

+

Add Dependency

+

To use rbxcloud in a Rust project, simply add rbxcloud to the Cargo.toml dependency list. +

[dependencies]
+rbxcloud = "0.6.1"
+

+

Alternatively, use cargo add. +

$ cargo add rbxcloud
+

+

Documentation

+

See the docs.rs page for documentation.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 0000000..b19215d --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":""},{"location":"#about","title":"About","text":"

The rbxcloud CLI and library is built for easy access into the Roblox Open Cloud APIs. The CLI can be used by developers and CD pipelines for external deployments, messaging, and datastore management. The Rust library can be used to build tools and applications on top of Roblox's Open Cloud APIs with ease.

"},{"location":"#documentation","title":"Documentation","text":"

For documentation on the CLI, start on the CLI Installation page.

For documentation on the Rust library, start on the Rust Library Installation page.

"},{"location":"cli/cli-api-key/","title":"API Key","text":"

rbxcloud requires a Roblox API key to function. These keys can be created and managed on the Credentials Roblox page. Remember to always keep these keys secret.

Roblox API keys will auto-expire if not used for over 60 days. Use the Credentials page to regenerate the key if this occurs.

"},{"location":"cli/cli-api-key/#security","title":"Security","text":"

As a general rule of practice for any API key:

  • Use the least number of permissions as needed
  • Keep the key in a secret location (e.g. GitHub Secrets, AWS Secrets Manager, etc.)
  • Never commit a key to a source code repository
  • Use as strict of a CIDR as possible
  • Use an expiration date to force periodic key rollovers (must be manually regenerated)
"},{"location":"cli/cli-api-key/#handling-compromised-keys","title":"Handling Compromised Keys","text":"

If a key is suspected to have been compromised, use the Credentials page to immediately invalidate the key. This can be done by regenerating or deleting the key. Keys can also be disabled, but re-enabling the key will not change the key, thus is not a safe option to protect from a compromised key. If in doubt, regenerate the key.

"},{"location":"cli/cli-api-key/#storing-keys","title":"Storing Keys","text":"

There are many tools that can be used to securely store a key. GitHub has a Secrets page for each repository, which can then be used by GitHub Actions securely. AWS and GCP have a Secrets Manager service. Azure has the Key Vault service.

If a key must be located within a local repository's directory, be sure to add it to the .gitignore file. This is common in some .env file setups.

"},{"location":"cli/cli-api-key/#environment-variable","title":"Environment Variable","text":"

All CLI commands expect the --api-key parameter, but can also be set via the RBXCLOUD_API_KEY environment variable. With the environment variable set, the --api-key parameter can be left out.

"},{"location":"cli/cli-datastore/","title":"DataStore API","text":""},{"location":"cli/cli-datastore/#list-stores","title":"List Stores","text":"

List all DataStores within a given experience.

USAGE:\n    rbxcloud datastore list-stores [OPTIONS] --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>            Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -c, --cursor <CURSOR>              Cursor for the next set of data\n    -h, --help                         Print help information\n    -l, --limit <LIMIT>                Maximum number of items to return\n    -p, --prefix <PREFIX>              Return only DataStores with this prefix\n    -u, --universe-id <UNIVERSE_ID>    Universe ID of the experience\n

"},{"location":"cli/cli-datastore/#list-keys","title":"List Keys","text":"

List all keys within a given DataStore.

USAGE:\n    rbxcloud datastore list [OPTIONS] --datastore-name <DATASTORE_NAME> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -c, --cursor <CURSOR>                    Cursor for the next set of data\n    -d, --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -l, --limit <LIMIT>                      Maximum number of items to return\n    -o, --all-scopes                         If true, return keys from all scopes\n    -p, --prefix <PREFIX>                    Return only DataStores with this prefix\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n

"},{"location":"cli/cli-datastore/#list-key-versions","title":"List Key Versions","text":"

List all versions of the specified key.

USAGE:\n    rbxcloud datastore list-versions [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --sort-order <SORT_ORDER> --limit <LIMIT> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -c, --cursor <CURSOR>                    Cursor for the next set of data\n    -d, --datastore-name <DATASTORE_NAME>    DataStore name\n    -e, --end-time <END_TIME>                End time constraint (ISO UTC Datetime)\n    -h, --help                               Print help information\n    -k, --key <KEY>                          The key of the entry\n    -l, --limit <LIMIT>                      Maximum number of items to return\n    -o, --sort-order <SORT_ORDER>            Sort order [possible values: ascending, descending]\n    -s, --scope <SCOPE>                      DataStore scope\n    -t, --start-time <START_TIME>            Start time constraint (ISO UTC Datetime)\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n

"},{"location":"cli/cli-datastore/#get-key","title":"Get Key","text":"

Get the entry value of a specific key.

USAGE:\n    rbxcloud datastore get [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d, --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -k, --key <KEY>                          The key of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n

"},{"location":"cli/cli-datastore/#set-key","title":"Set Key","text":"

Set (or create) the entry value of a specific key.

USAGE:\n    rbxcloud datastore set [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --data <DATA> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d, --datastore-name <DATASTORE_NAME>    DataStore name\n    -D, --data <DATA>                        JSON-stringified data (up to 4MB)\n    -e, --exclusive-create                   Only create the entry if it does not exist\n    -h, --help                               Print help information\n    -i, --match-version <MATCH_VERSION>      Only update if the current version matches this\n    -k, --key <KEY>                          The key of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -t, --attributes <ATTRIBUTES>            JSON-stringified attributes data\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n    -U, --user-ids <USER_IDS>                Comma-separated list of Roblox user IDs\n

"},{"location":"cli/cli-datastore/#increment-key","title":"Increment Key","text":"

Increment (or create) the entry value of a specific key.

USAGE:\n    rbxcloud datastore increment [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --increment-by <INCREMENT_BY> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d, --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -i, --increment-by <INCREMENT_BY>        The amount by which the entry should be incremented\n    -k, --key <KEY>                          The key of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -t, --attributes <ATTRIBUTES>            JSON-stringified attributes data\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n    -U, --user-ids <USER_IDS>                Comma-separated list of Roblox user IDs\n

"},{"location":"cli/cli-datastore/#delete-key","title":"Delete Key","text":"

Delete the value of a specific key. Per Roblox's documentation, this creates a \"tombstone\" version for 30 days before being completely deleted.

USAGE:\n    rbxcloud datastore delete [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d, --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -k, --key <KEY>                          The key of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n

"},{"location":"cli/cli-datastore/#get-key-version","title":"Get Key Version","text":"

Get a specific entry of a key given the version.

USAGE:\n    rbxcloud datastore get-version [OPTIONS] --datastore-name <DATASTORE_NAME> --key <KEY> --version-id <VERSION_ID> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d, --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -i, --version-id <VERSION_ID>            The version of the key\n    -k, --key <KEY>                          The key of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n

"},{"location":"cli/cli-experience/","title":"Experience API","text":""},{"location":"cli/cli-experience/#publish-place","title":"Publish Place","text":"

Publish a place to a Roblox experience. This takes an *.rbxl file and publishes it to a specific Place ID.

USAGE:\n    rbxcloud experience publish --filename <FILENAME> --place-id <PLACE_ID> --universe-id <UNIVERSE_ID> --version-type <VERSION_TYPE> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>              Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -f, --filename <FILENAME>            Filename (full or relative) of the RBXL file\n    -h, --help                           Print help information\n    -p, --place-id <PLACE_ID>            Place ID of the experience\n    -u, --universe-id <UNIVERSE_ID>      Universe ID of the experience\n    -t, --version-type <VERSION_TYPE>    Version type [possible values: saved, published]\n

"},{"location":"cli/cli-experience/#example","title":"Example","text":"
$ rbxcloud experience publish -f myplace.rbxl -t published -p 12345 -u 98765 -a MY_KEY\n
"},{"location":"cli/cli-experience/#github-action","title":"GitHub Action","text":"

A common practice is to create a CD pipeline to deploy a place automatically. This can be done with GitHub actions. Below is an example GitHub Action workflow. The example assumes that Aftman is being used and that rbxcloud is listed within the aftman.toml file.

# Deploy any time code is pushed to the 'main' branch\nname: Deploy\non:\npush:\nbranches:\n- main\njobs:\ndeploy:\nruns-on: ubuntu-latest\nsteps:\n- uses: actions/checkout@v3\n- name: Install Aftman\nuses: ok-nick/setup-aftman@v0\n- name: Publish\nshell: bash\nenv:\nUID: 123456789              # Universe ID\nPID: 123456789              # Place ID\nAPI_KEY: ${{ secrets.key }} # API Key (keep this in your GitHub Repository Secrets)\nFILE: my_place.rbxl         # Roblox place file (e.g. might have a step before this to build the file with Rojo)\nrun: rbxcloud experience publish -a \"$API_KEY\" -u \"$UID\" -p \"$PID\" -t published -f \"$FILE\"\n
"},{"location":"cli/cli-install/","title":"Install","text":""},{"location":"cli/cli-install/#install-cli","title":"Install CLI","text":"

There are a few different ways to install the rbxcloud CLI.

"},{"location":"cli/cli-install/#aftman-preferred","title":"Aftman (Preferred)","text":"

Run the aftman add command within your project directory. This will add rbxcloud to the project's aftman.toml file (or create one if it doesn't yet exist).

$ aftman add Sleitnick/rbxcloud@0.6.1\n

Next, run aftman install to install rbxcloud.

"},{"location":"cli/cli-install/#foreman","title":"Foreman","text":"

Add rbxcloud under the [tools] section of your foreman.toml file.

# foreman.toml\n[tools]\nrbxcloud = { github = \"Sleitnick/rbxcloud\", version = \"0.6.1\" }\n

Next, run foreman install to install rbxcloud.

Legacy

Aftman is preferred over Foreman. For more information, see the Aftman GitHub repository.

"},{"location":"cli/cli-install/#releases","title":"Releases","text":"

A few prebuilt binaries are compiled and attached to each release.

  1. Go to the releases page
  2. Navigate to the desired version (e.g. the latest version)
  3. Download and unzip the desired executable
  4. Relocate the executable to a more permanent place
  5. Change your OS path variable to point to the executable
"},{"location":"cli/cli-install/#verify","title":"Verify","text":"

Run the tool with the --version flag to verify the installation succeeded.

$ rbxcloud --version\n

"},{"location":"cli/cli-messaging/","title":"Messaging API","text":""},{"location":"cli/cli-messaging/#publish-message","title":"Publish Message","text":"

Publish a message to a Roblox experience. This takes a message and a topic and publishes the message. Experiences can use the MessagingService to subscribe to a topic and listen for messages.

USAGE:\n    rbxcloud messaging publish --topic <TOPIC> --message <MESSAGE> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>            Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -h, --help                         Print help information\n    -m, --message <MESSAGE>            Message to send\n    -t, --topic <TOPIC>                Message topic\n

Example:

$ rbxcloud messaging publish -t Hello -m \"Hello world!\" -p 12345 -u 98765 -a MY_KEY\n
MessagingService:SubscribeAsync(\"Hello\", function(message)\nprint(message)\n--> {message: \"Hello world!\"}\nend)\n

"},{"location":"cli/cli-ordered-datastore/","title":"OrderedDataStore API","text":""},{"location":"cli/cli-ordered-datastore/#list-entries","title":"List Entries","text":"
USAGE:\n    rbxcloud ordered-datastore list [OPTIONS] --datastore-name <DATASTORE_NAME> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d  --datastore-name <DATASTORE_NAME>    DataStore name\n    -f, --filter <FILTER>                    A range of qualifying values of entries to return\n    -h, --help                               Print help information\n    -m, --max-page-size <MAX_PAGE_SIZE>      Maximum number of items to return per page\n    -o, --order-by <ORDER_BY>                The enumeration direction (Use 'desc' for descending)\n    -p, --page-token <PAGE_TOKEN>            Cursor for the next set of data\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n
"},{"location":"cli/cli-ordered-datastore/#get-entry","title":"Get Entry","text":"
USAGE:\n    rbxcloud ordered-datastore get [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d  --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -i, --id <ID>                            The ID of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n
"},{"location":"cli/cli-ordered-datastore/#create-entry","title":"Create Entry","text":"
USAGE:\n    rbxcloud ordered-datastore create [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --value <VALUE> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d  --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -i, --id <ID>                            The ID of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n    -v, --value <VALUE>                      The value of the entry\n
"},{"location":"cli/cli-ordered-datastore/#update-entry","title":"Update Entry","text":"
USAGE:\n    rbxcloud ordered-datastore update [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --value <VALUE> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d  --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -i, --id <ID>                            The ID of the entry\n    -m, --allow-missing <ALLOW_MISSING>      Create if missing [possible values: true, false]\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n    -v, --value <VALUE>                      The value of the entry\n
"},{"location":"cli/cli-ordered-datastore/#increment-entry","title":"Increment Entry","text":"
USAGE:\n    rbxcloud ordered-datastore increment [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --increment <INCREMENT> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d  --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -i, --id <ID>                            The ID of the entry\n    -n, --increment <INCREMENT>              The incremented value of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n
"},{"location":"cli/cli-ordered-datastore/#delete-entry","title":"Delete Entry","text":"
USAGE:\n    rbxcloud ordered-datastore delete [OPTIONS] --datastore-name <DATASTORE_NAME> --id <ID> --universe-id <UNIVERSE_ID> --api-key <API_KEY>\n\nOPTIONS:\n    -a, --api-key <API_KEY>                  Roblox Open Cloud API Key [env: RBXCLOUD_API_KEY=]\n    -d  --datastore-name <DATASTORE_NAME>    DataStore name\n    -h, --help                               Print help information\n    -i, --id <ID>                            The ID of the entry\n    -s, --scope <SCOPE>                      DataStore scope\n    -u, --universe-id <UNIVERSE_ID>          Universe ID of the experience\n
"},{"location":"lib/lib-install/","title":"Rust Library Installation","text":""},{"location":"lib/lib-install/#add-dependency","title":"Add Dependency","text":"

To use rbxcloud in a Rust project, simply add rbxcloud to the Cargo.toml dependency list.

[dependencies]\nrbxcloud = \"0.6.1\"\n

Alternatively, use cargo add.

$ cargo add rbxcloud\n

"},{"location":"lib/lib-install/#documentation","title":"Documentation","text":"

See the docs.rs page for documentation.

"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..b0636a6 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,43 @@ + + + + https://sleitnick.github.io/rbxcloud/ + 2023-12-09 + daily + + + https://sleitnick.github.io/rbxcloud/cli/cli-api-key/ + 2023-12-09 + daily + + + https://sleitnick.github.io/rbxcloud/cli/cli-datastore/ + 2023-12-09 + daily + + + https://sleitnick.github.io/rbxcloud/cli/cli-experience/ + 2023-12-09 + daily + + + https://sleitnick.github.io/rbxcloud/cli/cli-install/ + 2023-12-09 + daily + + + https://sleitnick.github.io/rbxcloud/cli/cli-messaging/ + 2023-12-09 + daily + + + https://sleitnick.github.io/rbxcloud/cli/cli-ordered-datastore/ + 2023-12-09 + daily + + + https://sleitnick.github.io/rbxcloud/lib/lib-install/ + 2023-12-09 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..a61da651f944f5856bd4949007493f21b567b7c1 GIT binary patch literal 278 zcmV+x0qOo9iwFo!#B^l>|8r?{Wo=<_E_iKh0M(R1Zo?oDMfW*{#opk!o2IhKt|w>@ zfMIHng27>M?cBaNi7KzVsKiJkVD$NVix16t9c}RqfzZ2_9eKqHaM~Mmeak*S-pf~Z zmWO5zmLL{M?5Jf!jMJMC%d&972&0;a`_K#0LpqRn4n@UJOdg6UHy27a zWC5c?ec?UEVeUA35xP}dKO51AO}f9SD30F9x~gBwV_jCKBzewuGCe5Q!&iW-Gz#sl z5xdC)N&GVXnNC~Wx>OUE7r13YYg9}KK0qeCuuc###WELQbQG1fnb3|vr26#WGvW2Y cKme0Xj4gIs|6eNZOZu+m51P6DUfu-&0P?_uUjP6A literal 0 HcmV?d00001