API - Updating documentation

This commit is contained in:
dgtlmoon committed 2023-12-03 10:24:54 +01:00
1 parent c086ec0d68
commit 824748df9e
3 files changed
+12 -12

No files matched your search

+1 -1
View File
@@ -304,7 +304,7 @@ class Import(Resource):
@auth.check_token
def post(self):
"""
@api {post} /api/v1/import - Import a list of watched URLs
@api {post} /api/v1/import Import a list of watched URLs
@apiDescription Accepts a line-feed separated list of URLs to import, additionally with ?tag_uuids=(tag id), ?tag=(name), ?proxy={key}, ?dedupe=true (default true) one URL per line.
@apiExample {curl} Example usage:
curl http://localhost:5000/api/v1/import --data-binary @list-of-sites.txt -H"x-api-key:8a111a21bc2f8f1dd9b9353bbd46049a"
+3 -3
View File
@@ -103,8 +103,8 @@ HTTP/1.0 200
'uptime': 38344.55,
'watch_count': 800,
'version': "0.40.1"
}`,type:"curl"}],name:"Get_Info",group:"System_Information",version:"0.0.0",filename:"api_v1.py",groupTitle:"System_Information"},{type:"post",url:"/api/v1/watch",title:"Create a single watch",description:'<p>Requires atleast <code>url</code> set, can accept the same structure as <a href="#api-Watch-Watch">get single watch information</a> to create.</p>',examples:[{title:"Example usage:",content:`curl http://localhost:4000/api/v1/watch -H"x-api-key:813031b16330fe25e3780cf0325daa45" -H "Content-Type: application/json" -d '{"url": "https://my-nice.com" , "tag": "nice list"}'`,type:"curl"}],name:"Create",group:"Watch",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>Was created</p>"}],500:[{group:"500",type:"String",optional:!1,field:"ERR",description:"<p>Some other error</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"delete",url:"/api/v1/watch/:uuid",title:"Delete a watch and related history",examples:[{title:"Example usage:",content:'curl http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091 -X DELETE -H"x-api-key:813031b16330fe25e3780cf0325daa45"',type:"curl"}],parameter:{fields:{Parameter:[{group:"Parameter",type:"uuid",optional:!1,field:"uuid",description:"<p>Watch unique ID.</p>"}]}},name:"Delete",group:"Watch",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>Was deleted</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"put",url:"/api/v1/watch/:uuid",title:"Update watch information",examples:[{title:"Example usage:",content:`Update (PUT)
curl http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091 -X PUT -H"x-api-key:813031b16330fe25e3780cf0325daa45" -H "Content-Type: application/json" -d '{"url": "https://my-nice.com" , "tag": "new list"}'`,type:"curl"}],description:'<p>Updates an existing watch using JSON, accepts the same structure as returned in <a href="#api-Watch-Watch">get single watch information</a></p>',parameter:{fields:{Parameter:[{group:"Parameter",type:"uuid",optional:!1,field:"uuid",description:"<p>Watch unique ID.</p>"}]}},name:"Update_a_watch",group:"Watch",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>Was updated</p>"}],500:[{group:"500",type:"String",optional:!1,field:"ERR",description:"<p>Some other error</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"get",url:"/api/v1/watch/:uuid",title:"Get a single watch data",description:"<p>Retrieve watch information and set muted/paused status</p>",examples:[{title:"Example usage:",content:`curl http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091 -H"x-api-key:813031b16330fe25e3780cf0325daa45"
}`,type:"curl"}],name:"Get_Info",group:"System_Information",version:"0.0.0",filename:"api_v1.py",groupTitle:"System_Information"},{type:"post",url:"/api/v1/watch",title:"Create a single watch",description:'<p>Requires atleast <code>url</code> set, can accept the same structure as <a href="#api-Watch-Watch">get single watch information</a> to create.</p>',examples:[{title:"Example usage:",content:`curl http://localhost:4000/api/v1/watch -H"x-api-key:813031b16330fe25e3780cf0325daa45" -H "Content-Type: application/json" -d '{"url": "https://my-nice.com" , "tag": "nice list"}'`,type:"curl"}],name:"Create",group:"Watch",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>Was created</p>"}],500:[{group:"500",type:"String",optional:!1,field:"ERR",description:"<p>Some other error</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"delete",url:"/api/v1/watch/:uuid",title:"Delete a watch and related history",examples:[{title:"Example usage:",content:'curl http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091 -X DELETE -H"x-api-key:813031b16330fe25e3780cf0325daa45"',type:"curl"}],parameter:{fields:{Parameter:[{group:"Parameter",type:"uuid",optional:!1,field:"uuid",description:"<p>Watch unique ID.</p>"}]}},name:"Delete",group:"Watch",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>Was deleted</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"post",url:"/api/v1/import",title:"Import a list of watched URLs",description:"<p>Accepts a line-feed separated list of URLs to import, additionally with ?tag_uuids=(tag id), ?tag=(name), ?proxy={key}, ?dedupe=true (default true) one URL per line.</p>",examples:[{title:"Example usage:",content:'curl http://localhost:5000/api/v1/import --data-binary @list-of-sites.txt -H"x-api-key:8a111a21bc2f8f1dd9b9353bbd46049a"',type:"curl"}],name:"Import",group:"Watch",success:{fields:{200:[{group:"200",type:"List",optional:!1,field:"OK",description:"<p>List of watch UUIDs added</p>"}],500:[{group:"500",type:"String",optional:!1,field:"ERR",description:"<p>Some other error</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"put",url:"/api/v1/watch/:uuid",title:"Update watch information",examples:[{title:"Example usage:",content:`Update (PUT)
curl http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091 -X PUT -H"x-api-key:813031b16330fe25e3780cf0325daa45" -H "Content-Type: application/json" -d '{"url": "https://my-nice.com" , "tag": "new list"}'`,type:"curl"}],description:'<p>Updates an existing watch using JSON, accepts the same structure as returned in <a href="#api-Watch-Watch">get single watch information</a></p>',parameter:{fields:{Parameter:[{group:"Parameter",type:"uuid",optional:!1,field:"uuid",description:"<p>Watch unique ID.</p>"}]}},name:"Update_a_watch",group:"Watch",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>Was updated</p>"}],500:[{group:"500",type:"String",optional:!1,field:"ERR",description:"<p>Some other error</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"get",url:"/api/v1/watch/:uuid",title:"Single watch - get data, recheck, pause, mute.",description:"<p>Retrieve watch information and set muted/paused status</p>",examples:[{title:"Example usage:",content:`curl http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091 -H"x-api-key:813031b16330fe25e3780cf0325daa45"
curl "http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091?muted=unmuted" -H"x-api-key:813031b16330fe25e3780cf0325daa45"
curl "http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091?paused=unpaused" -H"x-api-key:813031b16330fe25e3780cf0325daa45"`,type:"curl"}],name:"Watch",group:"Watch",parameter:{fields:{Parameter:[{group:"Parameter",type:"uuid",optional:!1,field:"uuid",description:"<p>Watch unique ID.</p>"}]}},query:[{group:"Query",type:"Boolean",optional:!0,field:"recheck",description:"<p>Recheck this watch <code>recheck=1</code></p>"},{group:"Query",type:"String",optional:!0,field:"paused",description:"<p>=<code>paused</code> or =<code>unpaused</code> , Sets the PAUSED state</p>"},{group:"Query",type:"String",optional:!0,field:"muted",description:"<p>=<code>muted</code> or =<code>unmuted</code> , Sets the MUTE NOTIFICATIONS state</p>"}],success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>When paused/muted/recheck operation OR full JSON object of the watch</p>"},{group:"200",type:"JSON",optional:!1,field:"WatchJSON",description:"<p>JSON Full JSON object of the watch</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch"},{type:"get",url:"/api/v1/watch/<string:uuid>/history",title:"Get a list of all historical snapshots available for a watch",description:"<p>Requires <code>uuid</code>, returns list</p>",examples:[{title:"Example usage:",content:`curl http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091/history -H"x-api-key:813031b16330fe25e3780cf0325daa45" -H "Content-Type: application/json"
{
@@ -127,4 +127,4 @@ curl "http://localhost:4000/api/v1/watch/cc0cfffa-f449-477b-83ea-0caafd1dc091?pa
"title": "QuickLook",
"url": "https://github.com/QL-Win/QuickLook/tags"
}
}`,type:"curl"}],parameter:{fields:{Parameter:[{group:"Parameter",type:"String",optional:!0,field:"recheck_all",description:"<p>Optional Set to =1 to force recheck of all watches</p>"},{group:"Parameter",type:"String",optional:!0,field:"tag",description:"<p>Optional name of tag to limit results</p>"}]}},name:"ListWatches",group:"Watch_Management",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>Was created</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch_Management"}];const lt={name:"changedetection.io API",version:"0.1.0",description:"Manage your changedetection.io watches via API, requires the `x-api-key` header which is found in the settings UI.",title:"changedetection.io API",url:"",sampleUrl:!1,defaultVersion:"0.0.0",apidoc:"0.3.0",generator:{name:"apidoc",time:"Wed Feb 22 2023 23:42:16 GMT+0100 (Central European Standard Time)",url:"https://apidocjs.com",version:"0.54.0"}};kt();const Ct=u().compile(E()("#template-header").html()),It=u().compile(E()("#template-footer").html()),st=u().compile(E()("#template-article").html()),mt=u().compile(E()("#template-compare-article").html()),vt=u().compile(E()("#template-generator").html()),St=u().compile(E()("#template-project").html()),Zt=u().compile(E()("#template-sections").html()),Xt=u().compile(E()("#template-sidenav").html()),jt={aloneDisplay:!1,showRequiredLabels:!1,withGenerator:!0,withCompare:!0};lt.template=Object.assign(jt,(Z=lt.template)!=null?Z:{}),lt.template.forceLanguage&&Ot(lt.template.forceLanguage);const _t=(0,o.groupBy)(Ft,J=>J.group),Gt={};E().each(_t,(J,U)=>{Gt[J]=(0,o.groupBy)(U,q=>q.name)});const Qt=[];E().each(Gt,(J,U)=>{let q=[];E().each(U,(tt,at)=>{const ht=at[0].title;ht&&q.push(ht.toLowerCase()+"#~#"+tt)}),q.sort(),lt.order&&(q=M(q,lt.order,"#~#")),q.forEach(tt=>{const ht=tt.split("#~#")[1];U[ht].forEach(gt=>{Qt.push(gt)})})}),Ft=Qt;let qt={};const He={};let Oe={};Oe[lt.version]=1,E().each(Ft,(J,U)=>{qt[U.group]=1,He[U.group]=U.groupTitle||U.group,Oe[U.version]=1}),qt=Object.keys(qt),qt.sort(),lt.order&&(qt=G(He,lt.order)),Oe=Object.keys(Oe),Oe.sort(r().compare),Oe.reverse();const Ce=[];qt.forEach(J=>{Ce.push({group:J,isHeader:!0,title:He[J]});let U="";Ft.forEach(q=>{q.group===J&&(U!==q.name?Ce.push({title:q.title,group:J,name:q.name,type:q.type,version:q.version,url:q.url}):Ce.push({title:q.title,group:J,hidden:!0,name:q.name,type:q.type,version:q.version,url:q.url}),U=q.name)})});function Tn(J,U,q){let tt=!1;if(!U)return tt;const at=U.match(/<h(1|2).*?>(.+?)<\/h(1|2)>/gi);return at&&at.forEach(function(ht){const gt=ht.substring(2,3),wt=ht.replace(/<.+?>/g,""),Tt=ht.match(/id="api-([^-]+)(?:-(.+))?"/),Lt=Tt?Tt[1]:null,Yt=Tt?Tt[2]:null;gt==="1"&&wt&&Lt&&(J.splice(q,0,{group:Lt,isHeader:!0,title:wt,isFixed:!0}),q++,tt=!0),gt==="2"&&wt&&Lt&&Yt&&(J.splice(q,0,{group:Lt,name:Yt,isHeader:!1,title:wt,isFixed:!1,version:"1.0"}),q++)}),tt}let sn;if(lt.header&&(sn=Tn(Ce,lt.header.content,0),sn||Ce.unshift({group:"_header",isHeader:!0,title:lt.header.title==null?yt("General"):lt.header.title,isFixed:!0})),lt.footer){const J=Ce.length;sn=Tn(Ce,lt.footer.content,Ce.length),!sn&&lt.footer.title!=null&&Ce.splice(J,0,{group:"_footer",isHeader:!0,title:lt.footer.title,isFixed:!0})}const Ue=lt.title?lt.title:"apiDoc: "+lt.name+" - "+lt.version;E()(document).attr("title",Ue),E()("#loader").remove();const dn={nav:Ce};E()("#sidenav").append(Xt(dn)),E()("#generator").append(vt(lt)),(0,o.extend)(lt,{versions:Oe}),E()("#project").append(St(lt)),lt.header&&E()("#header").append(Ct(lt.header)),lt.footer&&(E()("#footer").append(It(lt.footer)),lt.template.aloneDisplay&&document.getElementById("api-_footer").classList.add("hide"));const Me={};let gn="";qt.forEach(function(J){const U=[];let q="",tt={},at=J,ht="";Me[J]={},Ft.forEach(function(gt){J===gt.group&&(q!==gt.name?(Ft.forEach(function(wt){J===wt.group&&gt.name===wt.name&&(Object.prototype.hasOwnProperty.call(Me[gt.group],gt.name)||(Me[gt.group][gt.name]=[]),Me[gt.group][gt.name].push(wt.version))}),tt={article:gt,versions:Me[gt.group][gt.name]}):tt={article:gt,hidden:!0,versions:Me[gt.group][gt.name]},lt.sampleUrl&&lt.sampleUrl===!0&&(lt.sampleUrl=window.location.origin),lt.url&&tt.article.url.substr(0,4).toLowerCase()!=="http"&&(tt.article.url=lt.url+tt.article.url),Cn(tt,gt),gt.groupTitle&&(at=gt.groupTitle),gt.groupDescription&&(ht=gt.groupDescription),U.push({article:st(tt),group:gt.group,name:gt.name,aloneDisplay:lt.template.aloneDisplay}),q=gt.name)}),tt={group:J,title:at,description:ht,articles:U,aloneDisplay:lt.template.aloneDisplay},gn+=Zt(tt)}),E()("#sections").append(gn),lt.template.aloneDisplay||(document.body.dataset.spy="scroll",E()("body").scrollspy({target:"#scrollingNav"})),E()(".form-control").on("focus change",function(){E()(this).removeClass("border-danger")}),E()(".sidenav").find("a").on("click",function(J){J.preventDefault();const U=this.getAttribute("href");if(lt.template.aloneDisplay){const q=document.querySelector(".sidenav > li Line truncated
}`,type:"curl"}],parameter:{fields:{Parameter:[{group:"Parameter",type:"String",optional:!0,field:"recheck_all",description:"<p>Optional Set to =1 to force recheck of all watches</p>"},{group:"Parameter",type:"String",optional:!0,field:"tag",description:"<p>Optional name of tag to limit results</p>"}]}},name:"ListWatches",group:"Watch_Management",success:{fields:{200:[{group:"200",type:"String",optional:!1,field:"OK",description:"<p>JSON dict</p>"}]}},version:"0.0.0",filename:"api_v1.py",groupTitle:"Watch_Management"}];const lt={name:"changedetection.io API",version:"0.1.0",description:"Manage your changedetection.io watches via API, requires the `x-api-key` header which is found in the settings UI.",title:"changedetection.io API",url:"",sampleUrl:!1,defaultVersion:"0.0.0",apidoc:"0.3.0",generator:{name:"apidoc",time:"Sun Dec 03 2023 10:24:43 GMT+0100 (Central European Standard Time)",url:"https://apidocjs.com",version:"0.54.0"}};kt();const Ct=u().compile(E()("#template-header").html()),It=u().compile(E()("#template-footer").html()),st=u().compile(E()("#template-article").html()),mt=u().compile(E()("#template-compare-article").html()),vt=u().compile(E()("#template-generator").html()),St=u().compile(E()("#template-project").html()),Zt=u().compile(E()("#template-sections").html()),Xt=u().compile(E()("#template-sidenav").html()),jt={aloneDisplay:!1,showRequiredLabels:!1,withGenerator:!0,withCompare:!0};lt.template=Object.assign(jt,(Z=lt.template)!=null?Z:{}),lt.template.forceLanguage&&Ot(lt.template.forceLanguage);const _t=(0,o.groupBy)(Ft,J=>J.group),Gt={};E().each(_t,(J,U)=>{Gt[J]=(0,o.groupBy)(U,q=>q.name)});const Qt=[];E().each(Gt,(J,U)=>{let q=[];E().each(U,(tt,at)=>{const ht=at[0].title;ht&&q.push(ht.toLowerCase()+"#~#"+tt)}),q.sort(),lt.order&&(q=M(q,lt.order,"#~#")),q.forEach(tt=>{const ht=tt.split("#~#")[1];U[ht].forEach(gt=>{Qt.push(gt)})})}),Ft=Qt;let qt={};const He={};let Oe={};Oe[lt.version]=1,E().each(Ft,(J,U)=>{qt[U.group]=1,He[U.group]=U.groupTitle||U.group,Oe[U.version]=1}),qt=Object.keys(qt),qt.sort(),lt.order&&(qt=G(He,lt.order)),Oe=Object.keys(Oe),Oe.sort(r().compare),Oe.reverse();const Ce=[];qt.forEach(J=>{Ce.push({group:J,isHeader:!0,title:He[J]});let U="";Ft.forEach(q=>{q.group===J&&(U!==q.name?Ce.push({title:q.title,group:J,name:q.name,type:q.type,version:q.version,url:q.url}):Ce.push({title:q.title,group:J,hidden:!0,name:q.name,type:q.type,version:q.version,url:q.url}),U=q.name)})});function Tn(J,U,q){let tt=!1;if(!U)return tt;const at=U.match(/<h(1|2).*?>(.+?)<\/h(1|2)>/gi);return at&&at.forEach(function(ht){const gt=ht.substring(2,3),wt=ht.replace(/<.+?>/g,""),Tt=ht.match(/id="api-([^-]+)(?:-(.+))?"/),Lt=Tt?Tt[1]:null,Yt=Tt?Tt[2]:null;gt==="1"&&wt&&Lt&&(J.splice(q,0,{group:Lt,isHeader:!0,title:wt,isFixed:!0}),q++,tt=!0),gt==="2"&&wt&&Lt&&Yt&&(J.splice(q,0,{group:Lt,name:Yt,isHeader:!1,title:wt,isFixed:!1,version:"1.0"}),q++)}),tt}let sn;if(lt.header&&(sn=Tn(Ce,lt.header.content,0),sn||Ce.unshift({group:"_header",isHeader:!0,title:lt.header.title==null?yt("General"):lt.header.title,isFixed:!0})),lt.footer){const J=Ce.length;sn=Tn(Ce,lt.footer.content,Ce.length),!sn&&lt.footer.title!=null&&Ce.splice(J,0,{group:"_footer",isHeader:!0,title:lt.footer.title,isFixed:!0})}const Ue=lt.title?lt.title:"apiDoc: "+lt.name+" - "+lt.version;E()(document).attr("title",Ue),E()("#loader").remove();const dn={nav:Ce};E()("#sidenav").append(Xt(dn)),E()("#generator").append(vt(lt)),(0,o.extend)(lt,{versions:Oe}),E()("#project").append(St(lt)),lt.header&&E()("#header").append(Ct(lt.header)),lt.footer&&(E()("#footer").append(It(lt.footer)),lt.template.aloneDisplay&&document.getElementById("api-_footer").classList.add("hide"));const Me={};let gn="";qt.forEach(function(J){const U=[];let q="",tt={},at=J,ht="";Me[J]={},Ft.forEach(function(gt){J===gt.group&&(q!==gt.name?(Ft.forEach(function(wt){J===wt.group&&gt.name===wt.name&&(Object.prototype.hasOwnProperty.call(Me[gt.group],gt.name)||(Me[gt.group][gt.name]=[]),Me[gt.group][gt.name].push(wt.version))}),tt={article:gt,versions:Me[gt.group][gt.name]}):tt={article:gt,hidden:!0,versions:Me[gt.group][gt.name]},lt.sampleUrl&&lt.sampleUrl===!0&&(lt.sampleUrl=window.location.origin),lt.url&&tt.article.url.substr(0,4).toLowerCase()!=="http"&&(tt.article.url=lt.url+tt.article.url),Cn(tt,gt),gt.groupTitle&&(at=gt.groupTitle),gt.groupDescription&&(ht=gt.groupDescription),U.push({article:st(tt),group:gt.group,name:gt.name,aloneDisplay:lt.template.aloneDisplay}),q=gt.name)}),tt={group:J,title:at,description:ht,articles:U,aloneDisplay:lt.template.aloneDisplay},gn+=Zt(tt)}),E()("#sections").append(gn),lt.template.aloneDisplay||(document.body.dataset.spy="scroll",E()("body").scrollspy({target:"#scrollingNav"})),E()(".form-control").on("focus change",function(){E()(this).removeClass("border-danger")}),E()(".sidenav").find("a").on("click",function(J){J.preventDefault();const U=this.getAttribute("href");if(lt.template.aloneDisplay){const q=document.querySelector(".sidenav > li.a Line truncated
+8 -8
View File
@@ -5,13 +5,13 @@
<meta name="description" content="Manage your changedetection.io watches via API, requires the `x-api-key` header which is found in the settings UI.">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="assets/bootstrap.min.css?v=1677105736053" rel="stylesheet" media="screen">
<link href="assets/prism.css?v=1677105736053" rel="stylesheet" />
<link href="assets/main.css?v=1677105736053" rel="stylesheet" media="screen, print">
<link href="assets/favicon.ico?v=1677105736053" rel="icon" type="image/x-icon">
<link href="assets/apple-touch-icon.png?v=1677105736053" rel="apple-touch-icon" sizes="180x180">
<link href="assets/favicon-32x32.png?v=1677105736053" rel="icon" type="image/png" sizes="32x32">
<link href="assets/favicon-16x16.png?v=1677105736053" rel="icon" type="image/png" sizes="16x16">
<link href="assets/bootstrap.min.css?v=1701595483622" rel="stylesheet" media="screen">
<link href="assets/prism.css?v=1701595483622" rel="stylesheet" />
<link href="assets/main.css?v=1701595483622" rel="stylesheet" media="screen, print">
<link href="assets/favicon.ico?v=1701595483622" rel="icon" type="image/x-icon">
<link href="assets/apple-touch-icon.png?v=1701595483622" rel="apple-touch-icon" sizes="180x180">
<link href="assets/favicon-32x32.png?v=1701595483622" rel="icon" type="image/png" sizes="32x32">
<link href="assets/favicon-16x16.png?v=1701595483622" rel="icon" type="image/png" sizes="16x16">
</head>
<body class="container-fluid">
@@ -928,6 +928,6 @@
</div>
</div>
<script src="assets/main.bundle.js?v=1677105736053"></script>
<script src="assets/main.bundle.js?v=1701595483622"></script>
</body>
</html>