diff --git a/404.html b/404.html index 97ff431..d5c0cf3 100644 --- a/404.html +++ b/404.html @@ -10,8 +10,8 @@ - - + + @@ -19,7 +19,7 @@
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/api/index.html b/api/index.html index f85cf4b..295e150 100644 --- a/api/index.html +++ b/api/index.html @@ -54,8 +54,8 @@ - - + + @@ -663,7 +663,7 @@

Request samples

curl https://api.statuscake.com/v1/pagespeed-locations \
   -H "Authorization: Bearer ${API_TOKEN}"
 

Response samples

Content type
application/json
{
  • "data": [
    ]
}
- - + + \ No newline at end of file diff --git a/assets/js/01ae5c4b.a95db0cc.js b/assets/js/01ae5c4b.5d8c4c86.js similarity index 68% rename from assets/js/01ae5c4b.a95db0cc.js rename to assets/js/01ae5c4b.5d8c4c86.js index dff41ae..86221d1 100644 --- a/assets/js/01ae5c4b.a95db0cc.js +++ b/assets/js/01ae5c4b.5d8c4c86.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[343],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),l=p(n),f=o,m=l["".concat(s,".").concat(f)]||l[f]||d[f]||i;return n?r.createElement(m,a(a({ref:t},u),{},{components:n})):r.createElement(m,a({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[l]="string"==typeof e?e:o,a[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const i={id:"introduction",title:"Introduction",description:"Overview of the StatusCake API"},a=void 0,c={unversionedId:"api/introduction",id:"api/introduction",title:"Introduction",description:"Overview of the StatusCake API",source:"@site/guides/api/introduction.md",sourceDirName:"api",slug:"/api/introduction",permalink:"/guides/api/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/introduction.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"introduction",title:"Introduction",description:"Overview of the StatusCake API"},sidebar:"guides",previous:{title:"Examples and Resources",permalink:"/guides/examples"},next:{title:"Authentication",permalink:"/guides/api/authentication"}},s={},p=[{value:"Next Steps",id:"next-steps",level:2}],u={toc:p},l="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(l,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The StatusCake API is organised around the features that we offer, with each\nfeature providing a set of endpoints to perform operations on resources\nassociated with your account."),(0,o.kt)("p",null,"The documentation for the available endpoints along with their respective\nparameters, and responses may be found ",(0,o.kt)("a",{parentName:"p",href:"/api"},"here"),"."),(0,o.kt)("p",null,"The remainder of this section focusses on ancillary documentation supporting the\nfunctionality of the API, concerned primarily with authentication, ratelimiting\nand error handling."),(0,o.kt)("h2",{id:"next-steps"},"Next Steps"),(0,o.kt)("p",null,"The following references describe how to get started using the API and avoid\nsome common mistakes."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[343],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),l=p(n),f=o,m=l["".concat(s,".").concat(f)]||l[f]||d[f]||i;return n?r.createElement(m,a(a({ref:t},u),{},{components:n})):r.createElement(m,a({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[l]="string"==typeof e?e:o,a[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const i={id:"introduction",title:"Introduction",description:"Overview of the StatusCake API"},a=void 0,c={unversionedId:"api/introduction",id:"api/introduction",title:"Introduction",description:"Overview of the StatusCake API",source:"@site/guides/api/introduction.md",sourceDirName:"api",slug:"/api/introduction",permalink:"/guides/api/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/introduction.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"introduction",title:"Introduction",description:"Overview of the StatusCake API"},sidebar:"guides",previous:{title:"Examples and Resources",permalink:"/guides/examples"},next:{title:"Authentication",permalink:"/guides/api/authentication"}},s={},p=[{value:"Next Steps",id:"next-steps",level:2}],u={toc:p},l="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(l,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The StatusCake API is organised around the features that we offer, with each\nfeature providing a set of endpoints to perform operations on resources\nassociated with your account."),(0,o.kt)("p",null,"The documentation for the available endpoints along with their respective\nparameters, and responses may be found ",(0,o.kt)("a",{parentName:"p",href:"/api"},"here"),"."),(0,o.kt)("p",null,"The remainder of this section focusses on ancillary documentation supporting the\nfunctionality of the API, concerned primarily with authentication, ratelimiting\nand error handling."),(0,o.kt)("h2",{id:"next-steps"},"Next Steps"),(0,o.kt)("p",null,"The following references describe how to get started using the API and avoid\nsome common mistakes."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/023627a3.3d8f4d06.js b/assets/js/023627a3.3d8f4d06.js new file mode 100644 index 0000000..ca41f4a --- /dev/null +++ b/assets/js/023627a3.3d8f4d06.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[379],{3905:(e,t,i)=>{i.d(t,{Zo:()=>p,kt:()=>h});var r=i(7294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function l(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var o=r.createContext({}),m=function(e){var t=r.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):l(l({},t),e)),i},p=function(e){var t=m(e.components);return r.createElement(o.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var i=e.components,n=e.mdxType,a=e.originalType,o=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=m(i),d=n,h=u["".concat(o,".").concat(d)]||u[d]||c[d]||a;return i?r.createElement(h,l(l({ref:t},p),{},{components:i})):r.createElement(h,l({ref:t},p))}));function h(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=i.length,l=new Array(a);l[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[u]="string"==typeof e?e:n,l[1]=s;for(var m=2;m{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>m});var r=i(7462),n=(i(7294),i(3905));const a={id:"ratelimiting",title:"Ratelimiting",description:"Learn about how to handle ratelimits imposed by the API"},l=void 0,s={unversionedId:"api/ratelimiting",id:"api/ratelimiting",title:"Ratelimiting",description:"Learn about how to handle ratelimits imposed by the API",source:"@site/guides/api/ratelimiting.md",sourceDirName:"api",slug:"/api/ratelimiting",permalink:"/guides/api/ratelimiting",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/ratelimiting.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"ratelimiting",title:"Ratelimiting",description:"Learn about how to handle ratelimits imposed by the API"},sidebar:"guides",previous:{title:"Authentication",permalink:"/guides/api/authentication"},next:{title:"Errors",permalink:"/guides/api/errors"}},o={},m=[{value:"Response Headers",id:"response-headers",level:2},{value:"x-ratelimit-limit",id:"x-ratelimit-limit",level:3},{value:"x-ratelimit-remaining",id:"x-ratelimit-remaining",level:3},{value:"x-ratelimit-reset",id:"x-ratelimit-reset",level:3},{value:"Next Steps",id:"next-steps",level:2}],p={toc:m},u="wrapper";function c(e){let{components:t,...i}=e;return(0,n.kt)(u,(0,r.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Ratelimits are applied to the API to prevent any one client degrading the\noverall system stability. StatusCake accounts without a subscription, or those\non a free plan, can make a maximum of 60 requests per minute (rpm). Accounts\nwith a paid subscription have no such limit. However all accounts, free or\notherwise, are subject to a burst limit of 5 requests per second (rps)."),(0,n.kt)("p",null,"Requests are associated with the account owning the given bearer token,\nregardless of which token was used. This means that all API clients accessing\nresources belonging to the same account share the same ratelimit quota."),(0,n.kt)("p",null,"When the ratelimit quota is exceeded all future requests will return an HTTP\n",(0,n.kt)("inlineCode",{parentName:"p"},"429")," status code until the ratelimit window is reset."),(0,n.kt)("h2",{id:"response-headers"},"Response Headers"),(0,n.kt)("p",null,"There are 3 HTTP response headers describing the state of the current ratelimits\nin effect. These are as follows:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-limit")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-remaining")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-reset"))),(0,n.kt)("p",null,"Each response will be returned with these headers - an example request may look\nlike the following:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Example response"',title:'"Example','response"':!0},"HTTP/2 200\n...\nx-ratelimit-limit: 5, 60;w=60, 5;w=1\nx-ratelimit-remaining: 4\nx-ratelimit-reset: 1\n")),(0,n.kt)("p",null,"The response may be understood from the following sections."),(0,n.kt)("h3",{id:"x-ratelimit-limit"},"x-ratelimit-limit"),(0,n.kt)("p",null,"This response header describe the ratelimit being applied to the request. In the\nexample above we can see the value of this header is ",(0,n.kt)("inlineCode",{parentName:"p"},"5, 60;w=60, 5;w=1"),". What\nthis is telling us is that:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The first 5 indicates what ratelimit is currently being applied - that of 5\nrps,"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"60;w=60")," indicates there is a 60 request per 60 seconds limit in effect,"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"5;w=1")," indicates there is a 5 request per second limit in effect.")),(0,n.kt)("h3",{id:"x-ratelimit-remaining"},"x-ratelimit-remaining"),(0,n.kt)("p",null,"This response header states how many more requests may be made before the\nratelimit has been reached. When this number returns 0 it indicates that all\nsubsequent requests will be limited and that the API will return an HTTP status\ncode of ",(0,n.kt)("inlineCode",{parentName:"p"},"429")," until the ratelimit window is reset."),(0,n.kt)("p",null,"Because users operating from accounts without a subscription are limited by both\na 5 rps ratelimit and a 60 rpm ratelimit it is difficult to determine how many\nmore request can be made within the current minute as this HTTP response header\nonly returns information regarding the 5 rps ratelimit (because it take higher\npriority). Therefore it is imperative that all applications consuming the\nStatusCake API keep track of the number of calls being made. This may be\naccomplished with some sort of debounce functionality. However it will be\nevident when the 60 rpm ratelimit has been reached because:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The HTTP status code returned from a request will be ",(0,n.kt)("inlineCode",{parentName:"li"},"429"),","),(0,n.kt)("li",{parentName:"ul"},"More accurately the ",(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-limit")," header will return ",(0,n.kt)("inlineCode",{parentName:"li"},"60, 60;w=60,\n5;w=1")," - the first ",(0,n.kt)("inlineCode",{parentName:"li"},"60")," indicating the ratelimit that has been reached.")),(0,n.kt)("h3",{id:"x-ratelimit-reset"},"x-ratelimit-reset"),(0,n.kt)("p",null,"This response header displays the time remaining, in seconds, until the\nratelimint currently being enforced is no longer in effect. This header is most\nuseful for applying a client side ratelimiting strategy."),(0,n.kt)("h2",{id:"next-steps"},"Next Steps"),(0,n.kt)("p",null,"Learn how to handle API errors appropriately."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/023627a3.5c9a4b8a.js b/assets/js/023627a3.5c9a4b8a.js deleted file mode 100644 index 4db6c66..0000000 --- a/assets/js/023627a3.5c9a4b8a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[379],{3905:(e,t,i)=>{i.d(t,{Zo:()=>p,kt:()=>h});var r=i(7294);function n(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function l(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var o=r.createContext({}),m=function(e){var t=r.useContext(o),i=t;return e&&(i="function"==typeof e?e(t):l(l({},t),e)),i},p=function(e){var t=m(e.components);return r.createElement(o.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var i=e.components,n=e.mdxType,a=e.originalType,o=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=m(i),d=n,h=u["".concat(o,".").concat(d)]||u[d]||c[d]||a;return i?r.createElement(h,l(l({ref:t},p),{},{components:i})):r.createElement(h,l({ref:t},p))}));function h(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=i.length,l=new Array(a);l[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[u]="string"==typeof e?e:n,l[1]=s;for(var m=2;m{i.r(t),i.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>m});var r=i(7462),n=(i(7294),i(3905));const a={id:"ratelimiting",title:"Ratelimiting",description:"Learn about how to handle ratelimits imposed by the API"},l=void 0,s={unversionedId:"api/ratelimiting",id:"api/ratelimiting",title:"Ratelimiting",description:"Learn about how to handle ratelimits imposed by the API",source:"@site/guides/api/ratelimiting.md",sourceDirName:"api",slug:"/api/ratelimiting",permalink:"/guides/api/ratelimiting",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/ratelimiting.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"ratelimiting",title:"Ratelimiting",description:"Learn about how to handle ratelimits imposed by the API"},sidebar:"guides",previous:{title:"Authentication",permalink:"/guides/api/authentication"},next:{title:"Errors",permalink:"/guides/api/errors"}},o={},m=[{value:"Response Headers",id:"response-headers",level:2},{value:"x-ratelimit-limit",id:"x-ratelimit-limit",level:3},{value:"x-ratelimit-remaining",id:"x-ratelimit-remaining",level:3},{value:"x-ratelimit-reset",id:"x-ratelimit-reset",level:3},{value:"Next Steps",id:"next-steps",level:2}],p={toc:m},u="wrapper";function c(e){let{components:t,...i}=e;return(0,n.kt)(u,(0,r.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Ratelimits are applied to the API to prevent any one client degrading the\noverall system stability. StatusCake accounts without a subscription, or those\non a free plan, can make a maximum of 60 requests per minute (rpm). Accounts\nwith a paid subscription have no such limit. However all accounts, free or\notherwise, are subject to a burst limit of 5 requests per second (rps)."),(0,n.kt)("p",null,"Requests are associated with the account owning the given bearer token,\nregardless of which token was used. This means that all API clients accessing\nresources belonging to the same account share the same ratelimit quota."),(0,n.kt)("p",null,"When the ratelimit quota is exceeded all future requests will return an HTTP\n",(0,n.kt)("inlineCode",{parentName:"p"},"429")," status code until the ratelimit window is reset."),(0,n.kt)("h2",{id:"response-headers"},"Response Headers"),(0,n.kt)("p",null,"There are 3 HTTP response headers describing the state of the current ratelimits\nin effect. These are as follows:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-limit")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-remaining")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-reset"))),(0,n.kt)("p",null,"Each response will be returned with these headers - an example request may look\nlike the following:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Example response"',title:'"Example','response"':!0},"HTTP/2 200\n...\nx-ratelimit-limit: 5, 60;w=60, 5;w=1\nx-ratelimit-remaining: 4\nx-ratelimit-reset: 1\n")),(0,n.kt)("p",null,"The response may be understood from the following sections."),(0,n.kt)("h3",{id:"x-ratelimit-limit"},"x-ratelimit-limit"),(0,n.kt)("p",null,"This response header describe the ratelimit being applied to the request. In the\nexample above we can see the value of this header is ",(0,n.kt)("inlineCode",{parentName:"p"},"5, 60;w=60, 5;w=1"),". What\nthis is telling us is that:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The first 5 indicates what ratelimit is currently being applied - that of 5\nrps,"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"60;w=60")," indicates there is a 60 request per 60 seconds limit in effect,"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"5;w=1")," indicates there is a 5 request per second limit in effect.")),(0,n.kt)("h3",{id:"x-ratelimit-remaining"},"x-ratelimit-remaining"),(0,n.kt)("p",null,"This response header states how many more requests may be made before the\nratelimit has been reached. When this number returns 0 it indicates that all\nsubsequent requests will be limited and that the API will return an HTTP status\ncode of ",(0,n.kt)("inlineCode",{parentName:"p"},"429")," until the ratelimit window is reset."),(0,n.kt)("p",null,"Because users operating from accounts without a subscription are limited by both\na 5 rps ratelimit and a 60 rpm ratelimit it is difficult to determine how many\nmore request can be made within the current minute as this HTTP response header\nonly returns information regarding the 5 rps ratelimit (because it take higher\npriority). Therefore it is imperative that all applications consuming the\nStatusCake API keep track of the number of calls being made. This may be\naccomplished with some sort of debounce functionality. However it will be\nevident when the 60 rpm ratelimit has been reached because:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The HTTP status code returned from a request will be ",(0,n.kt)("inlineCode",{parentName:"li"},"429"),","),(0,n.kt)("li",{parentName:"ul"},"More accurately the ",(0,n.kt)("inlineCode",{parentName:"li"},"x-ratelimit-limit")," header will return ",(0,n.kt)("inlineCode",{parentName:"li"},"60, 60;w=60,\n5;w=1")," - the first ",(0,n.kt)("inlineCode",{parentName:"li"},"60")," indicating the ratelimit that has been reached.")),(0,n.kt)("h3",{id:"x-ratelimit-reset"},"x-ratelimit-reset"),(0,n.kt)("p",null,"This response header displays the time remaining, in seconds, until the\nratelimint currently being enforced is no longer in effect. This header is most\nuseful for applying a client side ratelimiting strategy."),(0,n.kt)("h2",{id:"next-steps"},"Next Steps"),(0,n.kt)("p",null,"Learn how to handle API errors appropriately."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/133a5cce.bb5f1312.js b/assets/js/133a5cce.3ef8d8f5.js similarity index 78% rename from assets/js/133a5cce.bb5f1312.js rename to assets/js/133a5cce.3ef8d8f5.js index 2fb795c..0ba66a9 100644 --- a/assets/js/133a5cce.bb5f1312.js +++ b/assets/js/133a5cce.3ef8d8f5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[558],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(r),m=i,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,a(a({ref:t},d),{},{components:r})):n.createElement(f,a({ref:t},d))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[u]="string"==typeof e?e:i,a[1]=c;for(var l=2;l{r.d(t,{Z:()=>f});var n=r(7294),i=r(6010),o=r(9960),a=r(3438),c=r(3919),s=r(5999);const l={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){let{href:t,children:r}=e;return n.createElement(o.Z,{href:t,className:(0,i.Z)("card padding--lg",l.cardContainer)},r)}function u(e){let{href:t,icon:r,title:o,description:a}=e;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",l.cardTitle),title:o},r," ",o),a&&n.createElement("p",{className:(0,i.Z)("text--truncate",l.cardDescription),title:a},a))}function p(e){var t;let{item:r}=e;const i=(0,a.Wl)(r);return i?n.createElement(u,{href:i,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,s.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r;let{item:i}=e;const o=(0,c.Z)(i.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",s=(0,a.xz)(null!=(t=i.docId)?t:void 0);return n.createElement(u,{href:i.href,icon:o,title:i.label,description:null!=(r=i.description)?r:null==s?void 0:s.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}},1358:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(7294);const i={cards:"cards_tD_A"};function o(e){let{children:t}=e;return n.createElement("div",{className:i.cards},t)}},3698:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7294),i=r(2263),o=r(1564),a=r(1358);function c(){const{siteConfig:e}=(0,i.Z)(),t=e.customFields.clients;return n.createElement(a.Z,null,t.map((e=>n.createElement(o.Z,{item:{type:"link",label:e.title,href:e.href},key:e.title}))))}},8232:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var n=r(7462),i=(r(7294),r(3905)),o=r(3698);const a={id:"introduction",title:"Introduction",description:"Overview of StatusCake software development kits"},c=void 0,s={unversionedId:"sdks/introduction",id:"sdks/introduction",title:"Introduction",description:"Overview of StatusCake software development kits",source:"@site/guides/sdks/introduction.md",sourceDirName:"sdks",slug:"/sdks/introduction",permalink:"/guides/sdks/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/introduction.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"introduction",title:"Introduction",description:"Overview of StatusCake software development kits"},sidebar:"guides",previous:{title:"Parameters",permalink:"/guides/api/parameters"},next:{title:"Installation",permalink:"/guides/sdks/installation"}},l={},d=[{value:"Next Steps",id:"next-steps",level:2}],u={toc:d},p="wrapper";function m(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Our Software Development Kits (SDKs) provide integrations into several common\nprogramming languages making it simpler to manage monitoring resources using\nidiomatic code. At present we support the following languages:"),(0,i.kt)(o.Z,{mdxType:"DocClients"}),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Some SDK are currently in alpha and will not be given support at this time. We\nare currently working to deliver stable releases for each of these projects.\nRead more about alpha releases ",(0,i.kt)("a",{parentName:"p",href:"/guides/sdks/alpha"},"here"),".")),(0,i.kt)("h2",{id:"next-steps"},"Next Steps"),(0,i.kt)("p",null,"The following references describe the installation process and how to get\nstarted with each of the available SDKs."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[558],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(r),m=i,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,a(a({ref:t},d),{},{components:r})):n.createElement(f,a({ref:t},d))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=m;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[u]="string"==typeof e?e:i,a[1]=c;for(var l=2;l{r.d(t,{Z:()=>f});var n=r(7294),i=r(6010),o=r(9960),a=r(3438),c=r(3919),s=r(5999);const l={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){let{href:t,children:r}=e;return n.createElement(o.Z,{href:t,className:(0,i.Z)("card padding--lg",l.cardContainer)},r)}function u(e){let{href:t,icon:r,title:o,description:a}=e;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",l.cardTitle),title:o},r," ",o),a&&n.createElement("p",{className:(0,i.Z)("text--truncate",l.cardDescription),title:a},a))}function p(e){var t;let{item:r}=e;const i=(0,a.Wl)(r);return i?n.createElement(u,{href:i,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,s.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r;let{item:i}=e;const o=(0,c.Z)(i.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",s=(0,a.xz)(null!=(t=i.docId)?t:void 0);return n.createElement(u,{href:i.href,icon:o,title:i.label,description:null!=(r=i.description)?r:null==s?void 0:s.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}},1358:(e,t,r)=>{r.d(t,{Z:()=>o});var n=r(7294);const i={cards:"cards_tD_A"};function o(e){let{children:t}=e;return n.createElement("div",{className:i.cards},t)}},3698:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7294),i=r(2263),o=r(1564),a=r(1358);function c(){const{siteConfig:e}=(0,i.Z)(),t=e.customFields.clients;return n.createElement(a.Z,null,t.map((e=>n.createElement(o.Z,{item:{type:"link",label:e.title,href:e.href},key:e.title}))))}},8232:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var n=r(7462),i=(r(7294),r(3905)),o=r(3698);const a={id:"introduction",title:"Introduction",description:"Overview of StatusCake software development kits"},c=void 0,s={unversionedId:"sdks/introduction",id:"sdks/introduction",title:"Introduction",description:"Overview of StatusCake software development kits",source:"@site/guides/sdks/introduction.md",sourceDirName:"sdks",slug:"/sdks/introduction",permalink:"/guides/sdks/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/introduction.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"introduction",title:"Introduction",description:"Overview of StatusCake software development kits"},sidebar:"guides",previous:{title:"Parameters",permalink:"/guides/api/parameters"},next:{title:"Installation",permalink:"/guides/sdks/installation"}},l={},d=[{value:"Next Steps",id:"next-steps",level:2}],u={toc:d},p="wrapper";function m(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Our Software Development Kits (SDKs) provide integrations into several common\nprogramming languages making it simpler to manage monitoring resources using\nidiomatic code. At present we support the following languages:"),(0,i.kt)(o.Z,{mdxType:"DocClients"}),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},"Some SDK are currently in alpha and will not be given support at this time. We\nare currently working to deliver stable releases for each of these projects.\nRead more about alpha releases ",(0,i.kt)("a",{parentName:"p",href:"/guides/sdks/alpha"},"here"),".")),(0,i.kt)("h2",{id:"next-steps"},"Next Steps"),(0,i.kt)("p",null,"The following references describe the installation process and how to get\nstarted with each of the available SDKs."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/18a80a4e.86ccc1c0.js b/assets/js/18a80a4e.52648a74.js similarity index 61% rename from assets/js/18a80a4e.86ccc1c0.js rename to assets/js/18a80a4e.52648a74.js index 526c33f..bf9e516 100644 --- a/assets/js/18a80a4e.86ccc1c0.js +++ b/assets/js/18a80a4e.52648a74.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[11],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),p=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),f=n,m=c["".concat(l,".").concat(f)]||c[f]||d[f]||i;return r?a.createElement(m,o(o({ref:t},u),{},{components:r})):a.createElement(m,o({ref:t},u))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:n,o[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const i={id:"alpha",title:"Alpha Releases",description:"Learn about current StatusCake SDK alpha releases"},o=void 0,s={unversionedId:"sdks/alpha",id:"sdks/alpha",title:"Alpha Releases",description:"Learn about current StatusCake SDK alpha releases",source:"@site/guides/sdks/alpha.md",sourceDirName:"sdks",slug:"/sdks/alpha",permalink:"/guides/sdks/alpha",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/alpha.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"alpha",title:"Alpha Releases",description:"Learn about current StatusCake SDK alpha releases"},sidebar:"guides",previous:{title:"Backoff Strategies",permalink:"/guides/sdks/backoff"},next:{title:"StatusCake CLI",permalink:"/guides/cli/introduction"}},l={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Some SDKs are currently in alpha, meaning they are still under development. We\nencourage you to use these packages with caution as some features may not\ncurrently be fully supported. This is an opportunity to provide feedback and\nopen issues so that we may deliver these packages as quickly as possible."),(0,n.kt)("p",null,"We advise that these package not be used for production purposes until they are\nin a general availability stage. That being said the following features are\nsupported in all available SDKs:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Listing and retrieving monitoring resources (uptime, pagespeed, SSL)"),(0,n.kt)("li",{parentName:"ul"},"Listing and retrieving contact groups"),(0,n.kt)("li",{parentName:"ul"},"Listing and retrieving maintenance windows"),(0,n.kt)("li",{parentName:"ul"},"Listing historical data"),(0,n.kt)("li",{parentName:"ul"},"Listing uptime and pagespeed monitoring locations"),(0,n.kt)("li",{parentName:"ul"},"Deleting monitoring resources, contact groups, and maintenance windows.")),(0,n.kt)("p",null,"Most other features of the SDKs may be used for simple use cases, but not all\nfunctionality will be available. For instance supplying inputs where arrays are\nrequired should be avoided."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[11],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),p=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},f=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(r),f=n,m=c["".concat(l,".").concat(f)]||c[f]||d[f]||i;return r?a.createElement(m,o(o({ref:t},u),{},{components:r})):a.createElement(m,o({ref:t},u))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:n,o[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const i={id:"alpha",title:"Alpha Releases",description:"Learn about current StatusCake SDK alpha releases"},o=void 0,s={unversionedId:"sdks/alpha",id:"sdks/alpha",title:"Alpha Releases",description:"Learn about current StatusCake SDK alpha releases",source:"@site/guides/sdks/alpha.md",sourceDirName:"sdks",slug:"/sdks/alpha",permalink:"/guides/sdks/alpha",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/alpha.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"alpha",title:"Alpha Releases",description:"Learn about current StatusCake SDK alpha releases"},sidebar:"guides",previous:{title:"Backoff Strategies",permalink:"/guides/sdks/backoff"},next:{title:"StatusCake CLI",permalink:"/guides/cli/introduction"}},l={},p=[],u={toc:p},c="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Some SDKs are currently in alpha, meaning they are still under development. We\nencourage you to use these packages with caution as some features may not\ncurrently be fully supported. This is an opportunity to provide feedback and\nopen issues so that we may deliver these packages as quickly as possible."),(0,n.kt)("p",null,"We advise that these package not be used for production purposes until they are\nin a general availability stage. That being said the following features are\nsupported in all available SDKs:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Listing and retrieving monitoring resources (uptime, pagespeed, SSL)"),(0,n.kt)("li",{parentName:"ul"},"Listing and retrieving contact groups"),(0,n.kt)("li",{parentName:"ul"},"Listing and retrieving maintenance windows"),(0,n.kt)("li",{parentName:"ul"},"Listing historical data"),(0,n.kt)("li",{parentName:"ul"},"Listing uptime and pagespeed monitoring locations"),(0,n.kt)("li",{parentName:"ul"},"Deleting monitoring resources, contact groups, and maintenance windows.")),(0,n.kt)("p",null,"Most other features of the SDKs may be used for simple use cases, but not all\nfunctionality will be available. For instance supplying inputs where arrays are\nrequired should be avoided."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2957dffb.ac3b8c63.js b/assets/js/2957dffb.58d31664.js similarity index 84% rename from assets/js/2957dffb.ac3b8c63.js rename to assets/js/2957dffb.58d31664.js index a74cdfe..f9f4e83 100644 --- a/assets/js/2957dffb.ac3b8c63.js +++ b/assets/js/2957dffb.58d31664.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[319],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=n.createContext({}),l=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(u.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),s=l(r),f=o,m=s["".concat(u,".").concat(f)]||s[f]||d[f]||i;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c[s]="string"==typeof e?e:o,a[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={id:"introduction",title:"StatusCake CLI",description:"Learn about the StatusCake CLI"},a=void 0,c={unversionedId:"cli/introduction",id:"cli/introduction",title:"StatusCake CLI",description:"Learn about the StatusCake CLI",source:"@site/guides/cli/introduction.md",sourceDirName:"cli",slug:"/cli/introduction",permalink:"/guides/cli/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/cli/introduction.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"introduction",title:"StatusCake CLI",description:"Learn about the StatusCake CLI"},sidebar:"guides",previous:{title:"Alpha Releases",permalink:"/guides/sdks/alpha"},next:{title:"Terraform",permalink:"/guides/terraform/introduction"}},u={},l=[],p={toc:l},s="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Coming soon"))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[319],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=n.createContext({}),l=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(u.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),s=l(r),f=o,m=s["".concat(u,".").concat(f)]||s[f]||d[f]||i;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c[s]="string"==typeof e?e:o,a[1]=c;for(var l=2;l{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={id:"introduction",title:"StatusCake CLI",description:"Learn about the StatusCake CLI"},a=void 0,c={unversionedId:"cli/introduction",id:"cli/introduction",title:"StatusCake CLI",description:"Learn about the StatusCake CLI",source:"@site/guides/cli/introduction.md",sourceDirName:"cli",slug:"/cli/introduction",permalink:"/guides/cli/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/cli/introduction.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"introduction",title:"StatusCake CLI",description:"Learn about the StatusCake CLI"},sidebar:"guides",previous:{title:"Alpha Releases",permalink:"/guides/sdks/alpha"},next:{title:"Terraform",permalink:"/guides/terraform/introduction"}},u={},l=[],p={toc:l},s="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(s,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Coming soon"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/32444541.ae95d8a8.js b/assets/js/32444541.2fc96aa5.js similarity index 55% rename from assets/js/32444541.ae95d8a8.js rename to assets/js/32444541.2fc96aa5.js index ec42d71..83a35bc 100644 --- a/assets/js/32444541.ae95d8a8.js +++ b/assets/js/32444541.2fc96aa5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[769],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,f=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={id:"errors",title:"Errors",description:"Learn how handle API errors"},i=void 0,s={unversionedId:"api/errors",id:"api/errors",title:"Errors",description:"Learn how handle API errors",source:"@site/guides/api/errors.md",sourceDirName:"api",slug:"/api/errors",permalink:"/guides/api/errors",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/errors.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"errors",title:"Errors",description:"Learn how handle API errors"},sidebar:"guides",previous:{title:"Ratelimiting",permalink:"/guides/api/ratelimiting"},next:{title:"Parameters",permalink:"/guides/api/parameters"}},l={},p=[{value:"Handling Errors",id:"handling-errors",level:2},{value:"Next Steps",id:"next-steps",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The StatusCake API uses conventional HTTP response codes to indicate the success\nor failure of an API request. In general: Codes in the ",(0,o.kt)("inlineCode",{parentName:"p"},"2xx")," range indicate\nsuccess; codes in the ",(0,o.kt)("inlineCode",{parentName:"p"},"4xx")," range indicate a request that failed given the\ninformation provided (e.g. a required parameter was omitted or malformed); and\ncodes in the ",(0,o.kt)("inlineCode",{parentName:"p"},"5xx")," range indicate an error with StatusCake servers."),(0,o.kt)("h2",{id:"handling-errors"},"Handling Errors"),(0,o.kt)("p",null,"Errors should be handled appropriately, depending upon the value of the HTTP\nstatus code returned from the API. For example if we wanted to email a member of\nthe DevOps team when an uptime check is missing from our monitoring suite we\ncould write the following script:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Alert on missing uptime check" showLineNumbers',title:'"Alert',on:!0,missing:!0,uptime:!0,'check"':!0,showLineNumbers:!0},'status_code=$(\n curl -s https://api.statuscake.com/v1/uptime/123 \\\n -H "Authorization: Bearer " \\\n --write-out %{http_code} \\\n --output /dev/null\n)\n\nif [[ "$status_code" -eq 404 ]] ; then\n echo "Uptime check (ID: 123) does not exist" | mail -s "Missing uptime check" devops@example.com\nelse\n exit 0\nfi\n')),(0,o.kt)("h2",{id:"next-steps"},"Next Steps"),(0,o.kt)("p",null,"Learn how to handle input parameters and avoid some common pitfalls when\ncreating monitoring resources."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[769],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,f=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={id:"errors",title:"Errors",description:"Learn how handle API errors"},i=void 0,s={unversionedId:"api/errors",id:"api/errors",title:"Errors",description:"Learn how handle API errors",source:"@site/guides/api/errors.md",sourceDirName:"api",slug:"/api/errors",permalink:"/guides/api/errors",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/errors.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"errors",title:"Errors",description:"Learn how handle API errors"},sidebar:"guides",previous:{title:"Ratelimiting",permalink:"/guides/api/ratelimiting"},next:{title:"Parameters",permalink:"/guides/api/parameters"}},l={},p=[{value:"Handling Errors",id:"handling-errors",level:2},{value:"Next Steps",id:"next-steps",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The StatusCake API uses conventional HTTP response codes to indicate the success\nor failure of an API request. In general: Codes in the ",(0,o.kt)("inlineCode",{parentName:"p"},"2xx")," range indicate\nsuccess; codes in the ",(0,o.kt)("inlineCode",{parentName:"p"},"4xx")," range indicate a request that failed given the\ninformation provided (e.g. a required parameter was omitted or malformed); and\ncodes in the ",(0,o.kt)("inlineCode",{parentName:"p"},"5xx")," range indicate an error with StatusCake servers."),(0,o.kt)("h2",{id:"handling-errors"},"Handling Errors"),(0,o.kt)("p",null,"Errors should be handled appropriately, depending upon the value of the HTTP\nstatus code returned from the API. For example if we wanted to email a member of\nthe DevOps team when an uptime check is missing from our monitoring suite we\ncould write the following script:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Alert on missing uptime check" showLineNumbers',title:'"Alert',on:!0,missing:!0,uptime:!0,'check"':!0,showLineNumbers:!0},'status_code=$(\n curl -s https://api.statuscake.com/v1/uptime/123 \\\n -H "Authorization: Bearer " \\\n --write-out %{http_code} \\\n --output /dev/null\n)\n\nif [[ "$status_code" -eq 404 ]] ; then\n echo "Uptime check (ID: 123) does not exist" | mail -s "Missing uptime check" devops@example.com\nelse\n exit 0\nfi\n')),(0,o.kt)("h2",{id:"next-steps"},"Next Steps"),(0,o.kt)("p",null,"Learn how to handle input parameters and avoid some common pitfalls when\ncreating monitoring resources."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/334ea0d1.1ea7f294.js b/assets/js/334ea0d1.1ea7f294.js new file mode 100644 index 0000000..3f3f15b --- /dev/null +++ b/assets/js/334ea0d1.1ea7f294.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[199],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),u=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(a),d=n,g=m["".concat(s,".").concat(d)]||m[d]||c[d]||o;return a?r.createElement(g,i(i({ref:t},p),{},{components:a})):r.createElement(g,i({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:n,i[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=a(7462),n=(a(7294),a(3905));const o={id:"examples",title:"Examples and Resources",description:"Learn how to use StatusCake from guides and examples",slug:"/examples"},i=void 0,l={unversionedId:"overview/examples",id:"overview/examples",title:"Examples and Resources",description:"Learn how to use StatusCake from guides and examples",source:"@site/guides/overview/examples.md",sourceDirName:"overview",slug:"/examples",permalink:"/guides/examples",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/overview/examples.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"examples",title:"Examples and Resources",description:"Learn how to use StatusCake from guides and examples",slug:"/examples"},sidebar:"guides",previous:{title:"Introduction",permalink:"/guides/"},next:{title:"Introduction",permalink:"/guides/api/introduction"}},s={},u=[{value:"Official Examples",id:"official-examples",level:2},{value:"Go",id:"go",level:3},{value:"Terraform",id:"terraform",level:3},{value:"Community",id:"community",level:2},{value:"Tools",id:"tools",level:3},{value:"Guides",id:"guides",level:3}],p={toc:u},m="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(m,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"We have a catalogue a example code and tools to help you get started using the\nStatusCake development platform. This page details examples officially\nmaintained by StatusCake in addition community projects to further extend the\nplatform."),(0,n.kt)("h2",{id:"official-examples"},"Official Examples"),(0,n.kt)("h3",{id:"go"},"Go"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/contact-groups/main.go"},"Managing Contact Groups")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/locations/main.go"},"Fetching Monitoring Locations")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/maintenance-windows/main.go"},"Managing Maintenance Windows")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/pagespeed/main.go"},"Managing Pagespeed Checks")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/ssl/main.go"},"Managing SSL Checks")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/uptime/main.go"},"Managing Uptime Checks"))),(0,n.kt)("h3",{id:"terraform"},"Terraform"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/terraform-statuscake-monitoring-suite"},"Creating a Monitoring Suite"))),(0,n.kt)("h2",{id:"community"},"Community"),(0,n.kt)("p",null,"At StatusCake we have a growing development community. We maintain a curated\nlist of interesting projects that may be useful to others."),(0,n.kt)("h3",{id:"tools"},"Tools"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/labynocle/ansible-statuscake"},"ansible-statuscake")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/vparpoil/status-cake-push-client"},"statuscake-push-client")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/chelnak/status-cake-exporter"},"statuscake-exporter"))),(0,n.kt)("h3",{id:"guides"},"Guides"),(0,n.kt)("p",null,"Coming soon"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/334ea0d1.e5c540c7.js b/assets/js/334ea0d1.e5c540c7.js deleted file mode 100644 index 71bc57e..0000000 --- a/assets/js/334ea0d1.e5c540c7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[199],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),u=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(a),d=n,g=m["".concat(s,".").concat(d)]||m[d]||c[d]||o;return a?r.createElement(g,i(i({ref:t},p),{},{components:a})):r.createElement(g,i({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:n,i[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var r=a(7462),n=(a(7294),a(3905));const o={id:"examples",title:"Examples and Resources",description:"Learn how to use StatusCake from guides and examples",slug:"/examples"},i=void 0,l={unversionedId:"overview/examples",id:"overview/examples",title:"Examples and Resources",description:"Learn how to use StatusCake from guides and examples",source:"@site/guides/overview/examples.md",sourceDirName:"overview",slug:"/examples",permalink:"/guides/examples",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/overview/examples.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"examples",title:"Examples and Resources",description:"Learn how to use StatusCake from guides and examples",slug:"/examples"},sidebar:"guides",previous:{title:"Introduction",permalink:"/guides/"},next:{title:"Introduction",permalink:"/guides/api/introduction"}},s={},u=[{value:"Official Examples",id:"official-examples",level:2},{value:"Go",id:"go",level:3},{value:"Terraform",id:"terraform",level:3},{value:"Community",id:"community",level:2},{value:"Tools",id:"tools",level:3},{value:"Guides",id:"guides",level:3}],p={toc:u},m="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(m,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"We have a catalogue a example code and tools to help you get started using the\nStatusCake development platform. This page details examples officially\nmaintained by StatusCake in addition community projects to further extend the\nplatform."),(0,n.kt)("h2",{id:"official-examples"},"Official Examples"),(0,n.kt)("h3",{id:"go"},"Go"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/contact-groups/main.go"},"Managing Contact Groups")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/locations/main.go"},"Fetching Monitoring Locations")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/maintenance-windows/main.go"},"Managing Maintenance Windows")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/pagespeed/main.go"},"Managing Pagespeed Checks")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/ssl/main.go"},"Managing SSL Checks")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/statuscake-go/blob/master/examples/uptime/main.go"},"Managing Uptime Checks"))),(0,n.kt)("h3",{id:"terraform"},"Terraform"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/StatusCakeDev/terraform-statuscake-monitoring-suite"},"Creating a Monitoring Suite"))),(0,n.kt)("h2",{id:"community"},"Community"),(0,n.kt)("p",null,"At StatusCake we have a growing development community. We maintain a curated\nlist of interesting projects that may be useful to others."),(0,n.kt)("h3",{id:"tools"},"Tools"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/labynocle/ansible-statuscake"},"ansible-statuscake")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/vparpoil/status-cake-push-client"},"statuscake-push-client")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/chelnak/status-cake-exporter"},"statuscake-exporter"))),(0,n.kt)("h3",{id:"guides"},"Guides"),(0,n.kt)("p",null,"Coming soon"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3efcbad0.1944ef47.js b/assets/js/3efcbad0.1944ef47.js deleted file mode 100644 index c7310d4..0000000 --- a/assets/js/3efcbad0.1944ef47.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[355],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),u=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},l=function(e){var t=u(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),p=u(n),m=a,d=p["".concat(c,".").concat(m)]||p[m]||h[m]||i;return n?r.createElement(d,o(o({ref:t},l),{},{components:n})):r.createElement(d,o({ref:t},l))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={id:"authentication",title:"Authentication",description:"Learn how to authentication with the StatusCake API"},o=void 0,s={unversionedId:"api/authentication",id:"api/authentication",title:"Authentication",description:"Learn how to authentication with the StatusCake API",source:"@site/guides/api/authentication.md",sourceDirName:"api",slug:"/api/authentication",permalink:"/guides/api/authentication",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/authentication.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"authentication",title:"Authentication",description:"Learn how to authentication with the StatusCake API"},sidebar:"guides",previous:{title:"Introduction",permalink:"/guides/api/introduction"},next:{title:"Ratelimiting",permalink:"/guides/api/ratelimiting"}},c={},u=[{value:"Cross-Origin Resource Sharing",id:"cross-origin-resource-sharing",level:2},{value:"Next Steps",id:"next-steps",level:2}],l={toc:u},p="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The StatusCake API uses a bearer authentication (also called token\nauthentication) ",(0,a.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication"},"HTTP authentication\nscheme")," that\ninvolves security tokens called bearer tokens. The client must send this token\nin the ",(0,a.kt)("inlineCode",{parentName:"p"},"Authorization")," header when making requests to protected resources:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Authenticated HTTP request"',title:'"Authenticated',HTTP:!0,'request"':!0},"Authorization: Bearer \n")),(0,a.kt)("p",null,"You can view and manage your API tokens from the ",(0,a.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account\npanel"),"."),(0,a.kt)("admonition",{title:"note",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,a.kt)("p",null,"All API requests must be made over HTTPS. Calls made over plain HTTP will be\nredirected to the secure endpoint. API requests without authentication will\nfail, returning ",(0,a.kt)("inlineCode",{parentName:"p"},"401 Unauthorised")," unless otherwise stated in the documentation\nfor the specific endpoint."),(0,a.kt)("p",null,"For example, to make an authenticated request for a list of uptime monitoring\nchecks, the following ",(0,a.kt)("inlineCode",{parentName:"p"},"curl")," command may be issues:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="List uptime checks" {2}',title:'"List',uptime:!0,'checks"':!0,"{2}":!0},'curl "https://api.statuscake.com/v1/uptime" \\\n -H "Authorization: Bearer "\n')),(0,a.kt)("h2",{id:"cross-origin-resource-sharing"},"Cross-Origin Resource Sharing"),(0,a.kt)("p",null,"The StatusCake API features Cross-Origin Resource Sharing (CORS) implemented in\ncompliance with the W3C specification. This allows cross-domain communication\nfrom the browser. All responses have a wildcard same-origin which makes them\ncompletely public and accessible to everyone."),(0,a.kt)("h2",{id:"next-steps"},"Next Steps"),(0,a.kt)("p",null,"Learn how to handle request ratelimiting."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3efcbad0.f48ee146.js b/assets/js/3efcbad0.f48ee146.js new file mode 100644 index 0000000..da81855 --- /dev/null +++ b/assets/js/3efcbad0.f48ee146.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[355],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),u=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},l=function(e){var t=u(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),p=u(n),m=a,d=p["".concat(c,".").concat(m)]||p[m]||h[m]||i;return n?r.createElement(d,o(o({ref:t},l),{},{components:n})):r.createElement(d,o({ref:t},l))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={id:"authentication",title:"Authentication",description:"Learn how to authentication with the StatusCake API"},o=void 0,s={unversionedId:"api/authentication",id:"api/authentication",title:"Authentication",description:"Learn how to authentication with the StatusCake API",source:"@site/guides/api/authentication.md",sourceDirName:"api",slug:"/api/authentication",permalink:"/guides/api/authentication",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/authentication.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"authentication",title:"Authentication",description:"Learn how to authentication with the StatusCake API"},sidebar:"guides",previous:{title:"Introduction",permalink:"/guides/api/introduction"},next:{title:"Ratelimiting",permalink:"/guides/api/ratelimiting"}},c={},u=[{value:"Cross-Origin Resource Sharing",id:"cross-origin-resource-sharing",level:2},{value:"Next Steps",id:"next-steps",level:2}],l={toc:u},p="wrapper";function h(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"The StatusCake API uses a bearer authentication (also called token\nauthentication) ",(0,a.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication"},"HTTP authentication\nscheme")," that\ninvolves security tokens called bearer tokens. The client must send this token\nin the ",(0,a.kt)("inlineCode",{parentName:"p"},"Authorization")," header when making requests to protected resources:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Authenticated HTTP request"',title:'"Authenticated',HTTP:!0,'request"':!0},"Authorization: Bearer \n")),(0,a.kt)("p",null,"You can view and manage your API tokens from the ",(0,a.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account\npanel"),"."),(0,a.kt)("admonition",{title:"note",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,a.kt)("p",null,"All API requests must be made over HTTPS. Calls made over plain HTTP will be\nredirected to the secure endpoint. API requests without authentication will\nfail, returning ",(0,a.kt)("inlineCode",{parentName:"p"},"401 Unauthorised")," unless otherwise stated in the documentation\nfor the specific endpoint."),(0,a.kt)("p",null,"For example, to make an authenticated request for a list of uptime monitoring\nchecks, the following ",(0,a.kt)("inlineCode",{parentName:"p"},"curl")," command may be issues:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="List uptime checks" {2}',title:'"List',uptime:!0,'checks"':!0,"{2}":!0},'curl "https://api.statuscake.com/v1/uptime" \\\n -H "Authorization: Bearer "\n')),(0,a.kt)("h2",{id:"cross-origin-resource-sharing"},"Cross-Origin Resource Sharing"),(0,a.kt)("p",null,"The StatusCake API features Cross-Origin Resource Sharing (CORS) implemented in\ncompliance with the W3C specification. This allows cross-domain communication\nfrom the browser. All responses have a wildcard same-origin which makes them\ncompletely public and accessible to everyone."),(0,a.kt)("h2",{id:"next-steps"},"Next Steps"),(0,a.kt)("p",null,"Learn how to handle request ratelimiting."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5d8281b8.9d17395c.js b/assets/js/5d8281b8.aed1ec5d.js similarity index 65% rename from assets/js/5d8281b8.9d17395c.js rename to assets/js/5d8281b8.aed1ec5d.js index 5b582ad..2def2d4 100644 --- a/assets/js/5d8281b8.9d17395c.js +++ b/assets/js/5d8281b8.aed1ec5d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[473],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=u(a),d=r,m=f["".concat(s,".").concat(d)]||f[d]||p[d]||o;return a?n.createElement(m,l(l({ref:t},c),{},{components:a})):n.createElement(m,l({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[f]="string"==typeof e?e:r,l[1]=i;for(var u=2;u{a.d(t,{Z:()=>l});var n=a(7294),r=a(6010);const o={tabItem:"tabItem_Ymn6"};function l(e){let{children:t,hidden:a,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,l),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),r=a(7294),o=a(6010),l=a(2466),i=a(6775),s=a(1980),u=a(7392),c=a(12);function f(e){return function(e){var t,a;return null!=(t=null==(a=r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function p(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=null!=t?t:f(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const n=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:t,groupId:a});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=p(e),[l,i]=(0,r.useState)((()=>function(e){var t;let{defaultValue:a,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!d({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}const r=null!=(t=n.find((e=>e.default)))?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[s,u]=m({queryString:a,groupId:n}),[f,b]=function(e){let{groupId:t}=e;const a=function(e){return e?"docusaurus.tab."+e:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),k=(()=>{const e=null!=s?s:f;return d({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{k&&i(k)}),[k]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:o}))throw new Error("Can't select invalid tab value="+e);i(e),u(e),b(e)}),[u,b,o]),tabValues:o}}var k=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function h(e){let{className:t,block:a,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:f}=(0,l.o5)(),p=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==i&&(f(t),s(n))},d=e=>{var t;let a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":{var n;const t=c.indexOf(e.currentTarget)+1;a=null!=(n=c[t])?n:c[0];break}case"ArrowLeft":{var r;const t=c.indexOf(e.currentTarget)-1;a=null!=(r=c[t])?r:c[c.length-1];break}}null==(t=a)||t.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:l}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:d,onClick:p},l,{className:(0,o.Z)("tabs__item",g.tabItem,null==l?void 0:l.className,{"tabs__item--active":i===t})}),null!=a?a:t)})))}function v(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=b(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",g.tabList)},r.createElement(h,(0,n.Z)({},e,t)),r.createElement(v,(0,n.Z)({},e,t)))}function w(e){const t=(0,k.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},9682:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>f});var n=a(7462),r=(a(7294),a(3905)),o=a(4866),l=a(5162);const i={id:"backoff",title:"Backoff Strategies",description:"Learn about the available backoff strategies for request retries"},s=void 0,u={unversionedId:"sdks/backoff",id:"sdks/backoff",title:"Backoff Strategies",description:"Learn about the available backoff strategies for request retries",source:"@site/guides/sdks/backoff.md",sourceDirName:"sdks",slug:"/sdks/backoff",permalink:"/guides/sdks/backoff",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/backoff.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"backoff",title:"Backoff Strategies",description:"Learn about the available backoff strategies for request retries"},sidebar:"guides",previous:{title:"Configuration",permalink:"/guides/sdks/configuration"},next:{title:"Alpha Releases",permalink:"/guides/sdks/alpha"}},c={},f=[{value:"Constant Backoff",id:"constant-backoff",level:2},{value:"Exponential Backoff",id:"exponential-backoff",level:2},{value:"Linear Backoff",id:"linear-backoff",level:2}],p={toc:f},d="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"When a request fails it may be desirable to retry the request in the future.\nFor this the SDKs employ a couple of strategies to give the best chance of a\nsuccessful request."),(0,r.kt)("h2",{id:"constant-backoff"},"Constant Backoff"),(0,r.kt)("p",null,"A constant backoff applies a fixed period of time between each failed request."),(0,r.kt)(o.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Constant Backoff" showLineNumbers {4,7,15-17}',title:'"Constant','Backoff"':!0,showLineNumbers:!0,"{4,7,15-17}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Constant{\n BaseDelay: time.Duration(5) * time.Second,\n }),\n )\n}\n')))),(0,r.kt)("h2",{id:"exponential-backoff"},"Exponential Backoff"),(0,r.kt)("p",null,"An exponential backoff applies an exponential function on the time between each\nfailed request."),(0,r.kt)(o.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Exponential Backoff" showLineNumbers {4,7,15-20}',title:'"Exponential','Backoff"':!0,showLineNumbers:!0,"{4,7,15-20}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Exponential{\n BaseDelay: time.Duration(1) * time.Second,\n Multiplier: 2.0,\n Jitter: 0.2,\n MaxDelay: time.Duration(30) * time.Second,\n }),\n )\n}\n')))),(0,r.kt)("h2",{id:"linear-backoff"},"Linear Backoff"),(0,r.kt)("p",null,"Linear backoff applies a linear functions on the time between each failed\nrequest."),(0,r.kt)(o.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Linear Backoff" showLineNumbers {4,7,15-20}',title:'"Linear','Backoff"':!0,showLineNumbers:!0,"{4,7,15-20}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Linear{\n BaseDelay: time.Duration(1) * time.Second,\n Jitter: 0.2,\n MaxDelay: time.Duration(30) * time.Second,\n }),\n )\n}\n')))))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[473],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},f="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),f=u(a),d=r,m=f["".concat(s,".").concat(d)]||f[d]||p[d]||o;return a?n.createElement(m,l(l({ref:t},c),{},{components:a})):n.createElement(m,l({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,l=new Array(o);l[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[f]="string"==typeof e?e:r,l[1]=i;for(var u=2;u{a.d(t,{Z:()=>l});var n=a(7294),r=a(6010);const o={tabItem:"tabItem_Ymn6"};function l(e){let{children:t,hidden:a,className:l}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,l),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),r=a(7294),o=a(6010),l=a(2466),i=a(6775),s=a(1980),u=a(7392),c=a(12);function f(e){return function(e){var t,a;return null!=(t=null==(a=r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function p(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=null!=t?t:f(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function m(e){let{queryString:t=!1,groupId:a}=e;const n=(0,i.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:t,groupId:a});return[(0,s._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=p(e),[l,i]=(0,r.useState)((()=>function(e){var t;let{defaultValue:a,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!d({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}const r=null!=(t=n.find((e=>e.default)))?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[s,u]=m({queryString:a,groupId:n}),[f,b]=function(e){let{groupId:t}=e;const a=function(e){return e?"docusaurus.tab."+e:null}(t),[n,o]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),k=(()=>{const e=null!=s?s:f;return d({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{k&&i(k)}),[k]);return{selectedValue:l,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:o}))throw new Error("Can't select invalid tab value="+e);i(e),u(e),b(e)}),[u,b,o]),tabValues:o}}var k=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function h(e){let{className:t,block:a,selectedValue:i,selectValue:s,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:f}=(0,l.o5)(),p=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==i&&(f(t),s(n))},d=e=>{var t;let a=null;switch(e.key){case"Enter":p(e);break;case"ArrowRight":{var n;const t=c.indexOf(e.currentTarget)+1;a=null!=(n=c[t])?n:c[0];break}case"ArrowLeft":{var r;const t=c.indexOf(e.currentTarget)-1;a=null!=(r=c[t])?r:c[c.length-1];break}}null==(t=a)||t.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:l}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:i===t?0:-1,"aria-selected":i===t,key:t,ref:e=>c.push(e),onKeyDown:d,onClick:p},l,{className:(0,o.Z)("tabs__item",g.tabItem,null==l?void 0:l.className,{"tabs__item--active":i===t})}),null!=a?a:t)})))}function v(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=b(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",g.tabList)},r.createElement(h,(0,n.Z)({},e,t)),r.createElement(v,(0,n.Z)({},e,t)))}function w(e){const t=(0,k.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},9682:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>f});var n=a(7462),r=(a(7294),a(3905)),o=a(4866),l=a(5162);const i={id:"backoff",title:"Backoff Strategies",description:"Learn about the available backoff strategies for request retries"},s=void 0,u={unversionedId:"sdks/backoff",id:"sdks/backoff",title:"Backoff Strategies",description:"Learn about the available backoff strategies for request retries",source:"@site/guides/sdks/backoff.md",sourceDirName:"sdks",slug:"/sdks/backoff",permalink:"/guides/sdks/backoff",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/backoff.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"backoff",title:"Backoff Strategies",description:"Learn about the available backoff strategies for request retries"},sidebar:"guides",previous:{title:"Configuration",permalink:"/guides/sdks/configuration"},next:{title:"Alpha Releases",permalink:"/guides/sdks/alpha"}},c={},f=[{value:"Constant Backoff",id:"constant-backoff",level:2},{value:"Exponential Backoff",id:"exponential-backoff",level:2},{value:"Linear Backoff",id:"linear-backoff",level:2}],p={toc:f},d="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"When a request fails it may be desirable to retry the request in the future.\nFor this the SDKs employ a couple of strategies to give the best chance of a\nsuccessful request."),(0,r.kt)("h2",{id:"constant-backoff"},"Constant Backoff"),(0,r.kt)("p",null,"A constant backoff applies a fixed period of time between each failed request."),(0,r.kt)(o.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Constant Backoff" showLineNumbers {4,7,15-17}',title:'"Constant','Backoff"':!0,showLineNumbers:!0,"{4,7,15-17}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Constant{\n BaseDelay: time.Duration(5) * time.Second,\n }),\n )\n}\n')))),(0,r.kt)("h2",{id:"exponential-backoff"},"Exponential Backoff"),(0,r.kt)("p",null,"An exponential backoff applies an exponential function on the time between each\nfailed request."),(0,r.kt)(o.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Exponential Backoff" showLineNumbers {4,7,15-20}',title:'"Exponential','Backoff"':!0,showLineNumbers:!0,"{4,7,15-20}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Exponential{\n BaseDelay: time.Duration(1) * time.Second,\n Multiplier: 2.0,\n Jitter: 0.2,\n MaxDelay: time.Duration(30) * time.Second,\n }),\n )\n}\n')))),(0,r.kt)("h2",{id:"linear-backoff"},"Linear Backoff"),(0,r.kt)("p",null,"Linear backoff applies a linear functions on the time between each failed\nrequest."),(0,r.kt)(o.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(l.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Linear Backoff" showLineNumbers {4,7,15-20}',title:'"Linear','Backoff"':!0,showLineNumbers:!0,"{4,7,15-20}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Linear{\n BaseDelay: time.Duration(1) * time.Second,\n Jitter: 0.2,\n MaxDelay: time.Duration(30) * time.Second,\n }),\n )\n}\n')))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6dec4991.01a7686e.js b/assets/js/6dec4991.01a7686e.js deleted file mode 100644 index d20f19b..0000000 --- a/assets/js/6dec4991.01a7686e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[38],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),u=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(o.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,o=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=u(a),d=r,h=p["".concat(o,".").concat(d)]||p[d]||m[d]||s;return a?n.createElement(h,i(i({ref:t},c),{},{components:a})):n.createElement(h,i({ref:t},c))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=d;var l={};for(var o in t)hasOwnProperty.call(t,o)&&(l[o]=t[o]);l.originalType=e,l[p]="string"==typeof e?e:r,i[1]=l;for(var u=2;u{a.d(t,{Z:()=>i});var n=a(7294),r=a(6010);const s={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,i),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),r=a(7294),s=a(6010),i=a(2466),l=a(6775),o=a(1980),u=a(7392),c=a(12);function p(e){return function(e){var t,a;return null!=(t=null==(a=r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function m(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=null!=t?t:p(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(n.location.search);t.set(s,e),n.replace({...n.location,search:t.toString()})}),[s,n])]}function k(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,s=m(e),[i,l]=(0,r.useState)((()=>function(e){var t;let{defaultValue:a,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!d({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}const r=null!=(t=n.find((e=>e.default)))?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[o,u]=h({queryString:a,groupId:n}),[p,k]=function(e){let{groupId:t}=e;const a=function(e){return e?"docusaurus.tab."+e:null}(t),[n,s]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:n}),b=(()=>{const e=null!=o?o:p;return d({value:e,tabValues:s})?e:null})();(0,r.useLayoutEffect)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:s}))throw new Error("Can't select invalid tab value="+e);l(e),u(e),k(e)}),[u,k,s]),tabValues:s}}var b=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function f(e){let{className:t,block:a,selectedValue:l,selectValue:o,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,i.o5)(),m=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==l&&(p(t),o(n))},d=e=>{var t;let a=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{var n;const t=c.indexOf(e.currentTarget)+1;a=null!=(n=c[t])?n:c[0];break}case"ArrowLeft":{var r;const t=c.indexOf(e.currentTarget)-1;a=null!=(r=c[t])?r:c[c.length-1];break}}null==(t=a)||t.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:i}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>c.push(e),onKeyDown:d,onClick:m},i,{className:(0,s.Z)("tabs__item",g.tabItem,null==i?void 0:i.className,{"tabs__item--active":l===t})}),null!=a?a:t)})))}function v(e){let{lazy:t,children:a,selectedValue:n}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=k(e);return r.createElement("div",{className:(0,s.Z)("tabs-container",g.tabList)},r.createElement(f,(0,n.Z)({},e,t)),r.createElement(v,(0,n.Z)({},e,t)))}function w(e){const t=(0,b.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},831:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>u,toc:()=>p});var n=a(7462),r=(a(7294),a(3905)),s=a(4866),i=a(5162);const l={id:"installation",title:"Installation",description:"Learn how to get started using StatusCake software development kits"},o=void 0,u={unversionedId:"sdks/installation",id:"sdks/installation",title:"Installation",description:"Learn how to get started using StatusCake software development kits",source:"@site/guides/sdks/installation.md",sourceDirName:"sdks",slug:"/sdks/installation",permalink:"/guides/sdks/installation",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/installation.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"installation",title:"Installation",description:"Learn how to get started using StatusCake software development kits"},sidebar:"guides",previous:{title:"Introduction",permalink:"/guides/sdks/introduction"},next:{title:"Configuration",permalink:"/guides/sdks/configuration"}},c={},p=[{value:"Create a Client",id:"create-a-client",level:2},{value:"List Uptime Checks",id:"list-uptime-checks",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:p},d="wrapper";function h(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Installation of each StatusCake API SDK should be performed through the\nrespective package manager, or directly from GitHub where appropriate. This\nguide will prefer the use of a dependency manager unless otherwise stated."),(0,r.kt)("p",null,"Use the following steps to install the StatusCake API SDK for the desired\nlanguage:"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Some SDK are currently in alpha and will not be given support at this time. We\nare currently working to deliver stable releases for each of these projects.\nRead more about alpha releases ",(0,r.kt)("a",{parentName:"p",href:"/guides/sdks/alpha"},"here"),".")),(0,r.kt)(s.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-go"',title:'"Install','statuscake-go"':!0},"go get github.com/StatusCakeDev/statuscake-go\n"))),(0,r.kt)(i.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-js"',title:'"Install','statuscake-js"':!0},"npm install -D statuscake-js\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-py"',title:'"Install','statuscake-py"':!0},"pip install statuscake-py\n"))),(0,r.kt)(i.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-rb"',title:'"Install','statuscake-rb"':!0},"bundle add statuscake-rb\n")))),(0,r.kt)("h2",{id:"create-a-client"},"Create a Client"),(0,r.kt)("p",null,"Once the desired SDK(s) is installed the next step is to create an authenticated\nAPI client. You can view and manage your API tokens from the ",(0,r.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account\npanel"),"."),(0,r.kt)("admonition",{title:"note",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,r.kt)(s.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\n}\n'))),(0,r.kt)(i.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-typescript",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"import 'isomorphic-fetch';\nimport {\n Configuration,\n} from '@statuscake/statuscake-js';\n\nconst config = new Configuration({\n headers: {\n 'Authorization': `Bearer ${apiToken}`,\n },\n});\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"from statuscake import ApiClient\n\nclient = ApiClient(\n header_name='Authorization',\n header_value='Bearer %s' % api_token,\n)\n"))),(0,r.kt)(i.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ruby",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"require 'statuscake'\n\nclient = StatusCake::ApiClient.new\n\n# Constructing these options is a temporary fix until a client wide\n# authentication mechanism has been realised.\nopts = { header_params: { 'Authorization' => \"Bearer #{api_token}\" } }\n")))),(0,r.kt)("h2",{id:"list-uptime-checks"},"List Uptime Checks"),(0,r.kt)("p",null,"With the API client configured you may make requests to the StatusCake API using\nthe available methods. In this document we will list all uptime checks for the\ngiven workspace."),(0,r.kt)(s.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="List Uptime Checks" showLineNumbers {4-5,15-20}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{4-5,15-20}":!0},'package main\n\nimport (\n "context"\n "fmt"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\n\n res, err := client.ListUptimeTests(context.Background()).Execute()\n if err != nil {\n panic(err)\n }\n\n fmt.Printf("%+v\\n", res.Data)\n}\n'))),(0,r.kt)(i.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-typescript",metastring:'title="List Uptime Checks" showLineNumbers {4,13-16}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{4,13-16}":!0},"import 'isomorphic-fetch';\nimport {\n Configuration,\n UptimeApi,\n} from '@statuscake/statuscake-js';\n\nconst config = new Configuration({\n headers: {\n 'Authorization': `Bearer ${apiToken}`,\n },\n});\n\nconst service = new UptimeApi(config);\nservice.listUptimeTests()\n .then((tests) => console.log(JSON.stringify(tests)))\n .catch(console.log);\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'title="List Uptime Checks" showLineNumbers {2,9-12}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{2,9-12}":!0},"from statuscake import ApiClient\nfrom statuscake.apis import UptimeApi\n\nclient = ApiClient(\n header_name='Authorization',\n header_value='Bearer %s' % api_token,\n)\n\nservice = UptimeApi(api_client=client)\ntests = service.list_uptime_tests()\n\nprint(tests)\n"))),(0,r.kt)(i.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ruby",metastring:'title="List Uptime Checks" showLineNumbers {9-12}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{9-12}":!0},"require 'statuscake'\n\nclient = StatusCake::ApiClient.new\n\n# Constructing these options is a temporary fix until a client wide\n# authentication mechanism has been realised.\nopts = { header_params: { 'Authorization' => \"Bearer #{api_token}\" } }\n\nservice = StatusCake::UptimeApi.new(client)\ntests = service.list_uptime_tests(opts)\n\nputs tests\n")))),(0,r.kt)("h2",{id:"next-steps"},"Next steps"),(0,r.kt)("p",null,"There are many other methods available within each SDK to manage StatusCake\nmonitoring resource that are not covered in this document. See the respective\nSDK GitHub repositories for example usage."),(0,r.kt)("p",null,"Next learn about configuration options available in the SDKs."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6dec4991.da10461d.js b/assets/js/6dec4991.da10461d.js new file mode 100644 index 0000000..1d3e09a --- /dev/null +++ b/assets/js/6dec4991.da10461d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[38],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),u=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(o.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,o=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=u(a),d=r,h=p["".concat(o,".").concat(d)]||p[d]||m[d]||s;return a?n.createElement(h,i(i({ref:t},c),{},{components:a})):n.createElement(h,i({ref:t},c))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=d;var l={};for(var o in t)hasOwnProperty.call(t,o)&&(l[o]=t[o]);l.originalType=e,l[p]="string"==typeof e?e:r,i[1]=l;for(var u=2;u{a.d(t,{Z:()=>i});var n=a(7294),r=a(6010);const s={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(s.tabItem,i),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),r=a(7294),s=a(6010),i=a(2466),l=a(6775),o=a(1980),u=a(7392),c=a(12);function p(e){return function(e){var t,a;return null!=(t=null==(a=r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function m(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=null!=t?t:p(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,l.k6)(),s=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:t,groupId:a});return[(0,o._X)(s),(0,r.useCallback)((e=>{if(!s)return;const t=new URLSearchParams(n.location.search);t.set(s,e),n.replace({...n.location,search:t.toString()})}),[s,n])]}function k(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,s=m(e),[i,l]=(0,r.useState)((()=>function(e){var t;let{defaultValue:a,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!d({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}const r=null!=(t=n.find((e=>e.default)))?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:s}))),[o,u]=h({queryString:a,groupId:n}),[p,k]=function(e){let{groupId:t}=e;const a=function(e){return e?"docusaurus.tab."+e:null}(t),[n,s]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&s.set(e)}),[a,s])]}({groupId:n}),b=(()=>{const e=null!=o?o:p;return d({value:e,tabValues:s})?e:null})();(0,r.useLayoutEffect)((()=>{b&&l(b)}),[b]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:s}))throw new Error("Can't select invalid tab value="+e);l(e),u(e),k(e)}),[u,k,s]),tabValues:s}}var b=a(2389);const g={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function f(e){let{className:t,block:a,selectedValue:l,selectValue:o,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,i.o5)(),m=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==l&&(p(t),o(n))},d=e=>{var t;let a=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{var n;const t=c.indexOf(e.currentTarget)+1;a=null!=(n=c[t])?n:c[0];break}case"ArrowLeft":{var r;const t=c.indexOf(e.currentTarget)-1;a=null!=(r=c[t])?r:c[c.length-1];break}}null==(t=a)||t.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:i}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:l===t?0:-1,"aria-selected":l===t,key:t,ref:e=>c.push(e),onKeyDown:d,onClick:m},i,{className:(0,s.Z)("tabs__item",g.tabItem,null==i?void 0:i.className,{"tabs__item--active":l===t})}),null!=a?a:t)})))}function v(e){let{lazy:t,children:a,selectedValue:n}=e;const s=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=s.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},s.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=k(e);return r.createElement("div",{className:(0,s.Z)("tabs-container",g.tabList)},r.createElement(f,(0,n.Z)({},e,t)),r.createElement(v,(0,n.Z)({},e,t)))}function w(e){const t=(0,b.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},831:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>u,toc:()=>p});var n=a(7462),r=(a(7294),a(3905)),s=a(4866),i=a(5162);const l={id:"installation",title:"Installation",description:"Learn how to get started using StatusCake software development kits"},o=void 0,u={unversionedId:"sdks/installation",id:"sdks/installation",title:"Installation",description:"Learn how to get started using StatusCake software development kits",source:"@site/guides/sdks/installation.md",sourceDirName:"sdks",slug:"/sdks/installation",permalink:"/guides/sdks/installation",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/installation.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"installation",title:"Installation",description:"Learn how to get started using StatusCake software development kits"},sidebar:"guides",previous:{title:"Introduction",permalink:"/guides/sdks/introduction"},next:{title:"Configuration",permalink:"/guides/sdks/configuration"}},c={},p=[{value:"Create a Client",id:"create-a-client",level:2},{value:"List Uptime Checks",id:"list-uptime-checks",level:2},{value:"Next steps",id:"next-steps",level:2}],m={toc:p},d="wrapper";function h(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Installation of each StatusCake API SDK should be performed through the\nrespective package manager, or directly from GitHub where appropriate. This\nguide will prefer the use of a dependency manager unless otherwise stated."),(0,r.kt)("p",null,"Use the following steps to install the StatusCake API SDK for the desired\nlanguage:"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Some SDK are currently in alpha and will not be given support at this time. We\nare currently working to deliver stable releases for each of these projects.\nRead more about alpha releases ",(0,r.kt)("a",{parentName:"p",href:"/guides/sdks/alpha"},"here"),".")),(0,r.kt)(s.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-go"',title:'"Install','statuscake-go"':!0},"go get github.com/StatusCakeDev/statuscake-go\n"))),(0,r.kt)(i.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-js"',title:'"Install','statuscake-js"':!0},"npm install -D statuscake-js\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-py"',title:'"Install','statuscake-py"':!0},"pip install statuscake-py\n"))),(0,r.kt)(i.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Install statuscake-rb"',title:'"Install','statuscake-rb"':!0},"bundle add statuscake-rb\n")))),(0,r.kt)("h2",{id:"create-a-client"},"Create a Client"),(0,r.kt)("p",null,"Once the desired SDK(s) is installed the next step is to create an authenticated\nAPI client. You can view and manage your API tokens from the ",(0,r.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account\npanel"),"."),(0,r.kt)("admonition",{title:"note",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,r.kt)(s.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\n}\n'))),(0,r.kt)(i.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-typescript",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"import 'isomorphic-fetch';\nimport {\n Configuration,\n} from '@statuscake/statuscake-js';\n\nconst config = new Configuration({\n headers: {\n 'Authorization': `Bearer ${apiToken}`,\n },\n});\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"from statuscake import ApiClient\n\nclient = ApiClient(\n header_name='Authorization',\n header_value='Bearer %s' % api_token,\n)\n"))),(0,r.kt)(i.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ruby",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"require 'statuscake'\n\nclient = StatusCake::ApiClient.new\n\n# Constructing these options is a temporary fix until a client wide\n# authentication mechanism has been realised.\nopts = { header_params: { 'Authorization' => \"Bearer #{api_token}\" } }\n")))),(0,r.kt)("h2",{id:"list-uptime-checks"},"List Uptime Checks"),(0,r.kt)("p",null,"With the API client configured you may make requests to the StatusCake API using\nthe available methods. In this document we will list all uptime checks for the\ngiven workspace."),(0,r.kt)(s.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="List Uptime Checks" showLineNumbers {4-5,15-20}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{4-5,15-20}":!0},'package main\n\nimport (\n "context"\n "fmt"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\n\n res, err := client.ListUptimeTests(context.Background()).Execute()\n if err != nil {\n panic(err)\n }\n\n fmt.Printf("%+v\\n", res.Data)\n}\n'))),(0,r.kt)(i.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-typescript",metastring:'title="List Uptime Checks" showLineNumbers {4,13-16}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{4,13-16}":!0},"import 'isomorphic-fetch';\nimport {\n Configuration,\n UptimeApi,\n} from '@statuscake/statuscake-js';\n\nconst config = new Configuration({\n headers: {\n 'Authorization': `Bearer ${apiToken}`,\n },\n});\n\nconst service = new UptimeApi(config);\nservice.listUptimeTests()\n .then((tests) => console.log(JSON.stringify(tests)))\n .catch(console.log);\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'title="List Uptime Checks" showLineNumbers {2,9-12}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{2,9-12}":!0},"from statuscake import ApiClient\nfrom statuscake.apis import UptimeApi\n\nclient = ApiClient(\n header_name='Authorization',\n header_value='Bearer %s' % api_token,\n)\n\nservice = UptimeApi(api_client=client)\ntests = service.list_uptime_tests()\n\nprint(tests)\n"))),(0,r.kt)(i.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ruby",metastring:'title="List Uptime Checks" showLineNumbers {9-12}',title:'"List',Uptime:!0,'Checks"':!0,showLineNumbers:!0,"{9-12}":!0},"require 'statuscake'\n\nclient = StatusCake::ApiClient.new\n\n# Constructing these options is a temporary fix until a client wide\n# authentication mechanism has been realised.\nopts = { header_params: { 'Authorization' => \"Bearer #{api_token}\" } }\n\nservice = StatusCake::UptimeApi.new(client)\ntests = service.list_uptime_tests(opts)\n\nputs tests\n")))),(0,r.kt)("h2",{id:"next-steps"},"Next steps"),(0,r.kt)("p",null,"There are many other methods available within each SDK to manage StatusCake\nmonitoring resource that are not covered in this document. See the respective\nSDK GitHub repositories for example usage."),(0,r.kt)("p",null,"Next learn about configuration options available in the SDKs."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/977e7329.6eed9d28.js b/assets/js/977e7329.6eed9d28.js new file mode 100644 index 0000000..7af8d5c --- /dev/null +++ b/assets/js/977e7329.6eed9d28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[626],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=u(n),d=a,h=m["".concat(l,".").concat(d)]||m[d]||c[d]||i;return n?r.createElement(h,o(o({ref:t},p),{},{components:n})):r.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={id:"introduction",title:"Terraform",description:"Learn how to install and use the StatusCake Terraform provider"},o=void 0,s={unversionedId:"terraform/introduction",id:"terraform/introduction",title:"Terraform",description:"Learn how to install and use the StatusCake Terraform provider",source:"@site/guides/terraform/introduction.md",sourceDirName:"terraform",slug:"/terraform/introduction",permalink:"/guides/terraform/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/terraform/introduction.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"introduction",title:"Terraform",description:"Learn how to install and use the StatusCake Terraform provider"},sidebar:"guides",previous:{title:"StatusCake CLI",permalink:"/guides/cli/introduction"}},l={},u=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Authentication",id:"authentication",level:3},{value:"Request Retries",id:"request-retries",level:3},{value:"Request Throttling",id:"request-throttling",level:3},{value:"Create a Resource",id:"create-a-resource",level:2}],p={toc:u},m="wrapper";function c(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"StatusCake provides a comprehensive ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/providers/StatusCakeDev/statuscake/latest/docs"},"Terraform\nprovider"),"\nto manage monitoring resources declaratively. This guide describes how to setup\nthe Terraform provider and create an uptime check."),(0,a.kt)("admonition",{title:"note",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"It is assumed you are already familiar with Terraform and have it installed. If\nnot check out this ",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/downloads"},"link")," to get started.")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"The examples in this guide work with Terraform 1.x and above.")),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("p",null,"To install the StatusCake Terraform provider it should be declared within a\n",(0,a.kt)("inlineCode",{parentName:"p"},"terraform")," configuration block. Multiple ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform")," blocks can be declared,\neach containing a number of settings related to Terraform's behaviour. For now\nwe are interested only with ",(0,a.kt)("inlineCode",{parentName:"p"},"required_providers"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"required_providers")," block specifies all the providers required by the\ncurrent module, mapping each local provider name to a source address and a\nversion constraint. In this guide the provider we'll use is\n",(0,a.kt)("inlineCode",{parentName:"p"},"StatusCakeDev/statuscake"),"."),(0,a.kt)("p",null,"To begin, create a new file, ",(0,a.kt)("inlineCode",{parentName:"p"},"main.tf"),", and copy the following configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers",title:"main.tf",showLineNumbers:!0},'terraform {\n required_providers {\n statuscake = {\n source = "StatusCakeDev/statuscake"\n version = "~> 2.0.4"\n }\n }\n}\n\nprovider "statuscake" {\n # Configuration options\n}\n')),(0,a.kt)("p",null,"The version constraint, denoted as ",(0,a.kt)("inlineCode",{parentName:"p"},"~> 2.0.4"),", specifies the minimum version of\nthe provider supported by the current module, ensuring that we are always using\nthe latest patch release. This will prevent accidental upgrades to the latest\nminor release in case of breaking changes. For more information on version\nconstraints see the Terraform\n",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/providers/requirements#version-constraints"},"documentation"),"."),(0,a.kt)("p",null,"To have Terraform initialise the current module and fetch the StatusCake\nprovider issue the following command in the terminal from within the directory\ncontaining ",(0,a.kt)("inlineCode",{parentName:"p"},"main.tf"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Initialise Terraform"',title:'"Initialise','Terraform"':!0},"terraform init\n")),(0,a.kt)("p",null,"The Terraform module has been initialised and the StatusCake provider should\nhave been downloaded and stored within the ",(0,a.kt)("inlineCode",{parentName:"p"},".terraform/providers/")," directory.`"),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"With the module initialised, the StatusCake provider can be configured. The\nproviders has a few configuration options that will be discussed in this\nsection."),(0,a.kt)("h3",{id:"authentication"},"Authentication"),(0,a.kt)("p",null,"The StatusCake Terraform provider requires that an API bearer token be included\nin the provider configuration block. You can view and manage your API tokens\nfrom the ",(0,a.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account panel"),"."),(0,a.kt)("admonition",{title:"note",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers",title:"main.tf",showLineNumbers:!0},'provider "statuscake" {\n api_token = "my-api-token"\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Authentication may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_API_TOKEN"),"\nenvironment variable.")),(0,a.kt)("h3",{id:"request-retries"},"Request Retries"),(0,a.kt)("p",null,"If requests to the StatusCake API fail, the provider will attempt to retry the\nrequest up to a maximum of 3 times by default, after which the provider will\nreport on the error returned from the API. The maximum number of attempts can be\ncontrolled from the provider configuration block."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers {3}",title:"main.tf",showLineNumbers:!0,"{3}":!0},'provider "statuscake" {\n api_token = "my-api-token"\n requests = 10\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Request retries may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_RETRIES"),"\nenvironment variable.")),(0,a.kt)("p",null,"Request retry attempts are made using an exponential backoff strategy that may\nalso be configured from the provider configuration block."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers {3-4}",title:"main.tf",showLineNumbers:!0,"{3-4}":!0},'provider "statuscake" {\n api_token = "my-api-token"\n min_backoff = 3\n max_backoff = 10\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Request backoff may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_MIN_BACKOFF")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_MAX_BACKOFF")," environemnt variables respectively.")),(0,a.kt)("h3",{id:"request-throttling"},"Request Throttling"),(0,a.kt)("p",null,"To help alleviate problems with API ratelimiting the provider throttles\nrequests, placing a restriction on the maximum number of requests made per\nsecond. Whilst this value can be increased it may result in an increase of\nerrors returned from the API."),(0,a.kt)("p",null,"If the provider is returning too many errors relating to hitting ratelimits the\nrequests per second can be lowered by configuring throttling within the provider\nconfiguration block."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers {3}",title:"main.tf",showLineNumbers:!0,"{3}":!0},'provider "statuscake" {\n api_token = "my-api-token"\n rps = 3\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Request throttling may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_RPS")," environemnt\nvariables.")),(0,a.kt)("h2",{id:"create-a-resource"},"Create a Resource"),(0,a.kt)("p",null,"With the provider configured you may make requests to the StatusCake API to\nmanage monitoring resources. In this document we will create an uptime check."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers",title:"main.tf",showLineNumbers:!0},'resource "statuscake_uptime_check" "uptime_check" {\n name = "Google"\n check_interval = 30\n trigger_rate = 1800\n\n http_check {\n follow_redirects = true\n validate_ssl = true\n\n status_codes = [\n "202",\n "404",\n "405",\n ]\n }\n\n monitored_resource {\n address = "https://www.google.com"\n }\n}\n')),(0,a.kt)("p",null,"To then have Terraform create this check on the StatusCake platform run the\nfollowing command in the terminal from within the directory containing\n",(0,a.kt)("inlineCode",{parentName:"p"},"main.tf"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Create Resources"',title:'"Create','Resources"':!0},"terraform apply -auto-approve\n")),(0,a.kt)("p",null,"Once this has completed head on over to the StatusCake ",(0,a.kt)("a",{parentName:"p",href:"https://app.statuscake.com"},"web\napplication")," to see the uptime check has been\ncreated."),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"In a production environment you should not use ",(0,a.kt)("inlineCode",{parentName:"p"},"apply -auto-approve")," as this can\nbe dangerous. Instead create a plan with ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform plan -out terraform.tfplan"),"\nfollowed by the command to apply the changes.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/977e7329.876e54bc.js b/assets/js/977e7329.876e54bc.js deleted file mode 100644 index 7dd1bf3..0000000 --- a/assets/js/977e7329.876e54bc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[626],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=u(n),d=a,h=m["".concat(l,".").concat(d)]||m[d]||c[d]||i;return n?r.createElement(h,o(o({ref:t},p),{},{components:n})):r.createElement(h,o({ref:t},p))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={id:"introduction",title:"Terraform",description:"Learn how to install and use the StatusCake Terraform provider"},o=void 0,s={unversionedId:"terraform/introduction",id:"terraform/introduction",title:"Terraform",description:"Learn how to install and use the StatusCake Terraform provider",source:"@site/guides/terraform/introduction.md",sourceDirName:"terraform",slug:"/terraform/introduction",permalink:"/guides/terraform/introduction",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/terraform/introduction.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"introduction",title:"Terraform",description:"Learn how to install and use the StatusCake Terraform provider"},sidebar:"guides",previous:{title:"StatusCake CLI",permalink:"/guides/cli/introduction"}},l={},u=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Authentication",id:"authentication",level:3},{value:"Request Retries",id:"request-retries",level:3},{value:"Request Throttling",id:"request-throttling",level:3},{value:"Create a Resource",id:"create-a-resource",level:2}],p={toc:u},m="wrapper";function c(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"StatusCake provides a comprehensive ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/providers/StatusCakeDev/statuscake/latest/docs"},"Terraform\nprovider"),"\nto manage monitoring resources declaratively. This guide describes how to setup\nthe Terraform provider and create an uptime check."),(0,a.kt)("admonition",{title:"note",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"It is assumed you are already familiar with Terraform and have it installed. If\nnot check out this ",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/downloads"},"link")," to get started.")),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"The examples in this guide work with Terraform 1.x and above.")),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("p",null,"To install the StatusCake Terraform provider it should be declared within a\n",(0,a.kt)("inlineCode",{parentName:"p"},"terraform")," configuration block. Multiple ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform")," blocks can be declared,\neach containing a number of settings related to Terraform's behaviour. For now\nwe are interested only with ",(0,a.kt)("inlineCode",{parentName:"p"},"required_providers"),"."),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"required_providers")," block specifies all the providers required by the\ncurrent module, mapping each local provider name to a source address and a\nversion constraint. In this guide the provider we'll use is\n",(0,a.kt)("inlineCode",{parentName:"p"},"StatusCakeDev/statuscake"),"."),(0,a.kt)("p",null,"To begin, create a new file, ",(0,a.kt)("inlineCode",{parentName:"p"},"main.tf"),", and copy the following configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers",title:"main.tf",showLineNumbers:!0},'terraform {\n required_providers {\n statuscake = {\n source = "StatusCakeDev/statuscake"\n version = "~> 2.0.4"\n }\n }\n}\n\nprovider "statuscake" {\n # Configuration options\n}\n')),(0,a.kt)("p",null,"The version constraint, denoted as ",(0,a.kt)("inlineCode",{parentName:"p"},"~> 2.0.4"),", specifies the minimum version of\nthe provider supported by the current module, ensuring that we are always using\nthe latest patch release. This will prevent accidental upgrades to the latest\nminor release in case of breaking changes. For more information on version\nconstraints see the Terraform\n",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/providers/requirements#version-constraints"},"documentation"),"."),(0,a.kt)("p",null,"To have Terraform initialise the current module and fetch the StatusCake\nprovider issue the following command in the terminal from within the directory\ncontaining ",(0,a.kt)("inlineCode",{parentName:"p"},"main.tf"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Initialise Terraform"',title:'"Initialise','Terraform"':!0},"terraform init\n")),(0,a.kt)("p",null,"The Terraform module has been initialised and the StatusCake provider should\nhave been downloaded and stored within the ",(0,a.kt)("inlineCode",{parentName:"p"},".terraform/providers/")," directory.`"),(0,a.kt)("h2",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"With the module initialised, the StatusCake provider can be configured. The\nproviders has a few configuration options that will be discussed in this\nsection."),(0,a.kt)("h3",{id:"authentication"},"Authentication"),(0,a.kt)("p",null,"The StatusCake Terraform provider requires that an API bearer token be included\nin the provider configuration block. You can view and manage your API tokens\nfrom the ",(0,a.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account panel"),"."),(0,a.kt)("admonition",{title:"note",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers",title:"main.tf",showLineNumbers:!0},'provider "statuscake" {\n api_token = "my-api-token"\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Authentication may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_API_TOKEN"),"\nenvironment variable.")),(0,a.kt)("h3",{id:"request-retries"},"Request Retries"),(0,a.kt)("p",null,"If requests to the StatusCake API fail, the provider will attempt to retry the\nrequest up to a maximum of 3 times by default, after which the provider will\nreport on the error returned from the API. The maximum number of attempts can be\ncontrolled from the provider configuration block."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers {3}",title:"main.tf",showLineNumbers:!0,"{3}":!0},'provider "statuscake" {\n api_token = "my-api-token"\n requests = 10\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Request retries may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_RETRIES"),"\nenvironment variable.")),(0,a.kt)("p",null,"Request retry attempts are made using an exponential backoff strategy that may\nalso be configured from the provider configuration block."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers {3-4}",title:"main.tf",showLineNumbers:!0,"{3-4}":!0},'provider "statuscake" {\n api_token = "my-api-token"\n min_backoff = 3\n max_backoff = 10\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Request backoff may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_MIN_BACKOFF")," and\n",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_MAX_BACKOFF")," environemnt variables respectively.")),(0,a.kt)("h3",{id:"request-throttling"},"Request Throttling"),(0,a.kt)("p",null,"To help alleviate problems with API ratelimiting the provider throttles\nrequests, placing a restriction on the maximum number of requests made per\nsecond. Whilst this value can be increased it may result in an increase of\nerrors returned from the API."),(0,a.kt)("p",null,"If the provider is returning too many errors relating to hitting ratelimits the\nrequests per second can be lowered by configuring throttling within the provider\nconfiguration block."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers {3}",title:"main.tf",showLineNumbers:!0,"{3}":!0},'provider "statuscake" {\n api_token = "my-api-token"\n rps = 3\n}\n')),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Request throttling may also be configured using the ",(0,a.kt)("inlineCode",{parentName:"p"},"STATUSCAKE_RPS")," environemnt\nvariables.")),(0,a.kt)("h2",{id:"create-a-resource"},"Create a Resource"),(0,a.kt)("p",null,"With the provider configured you may make requests to the StatusCake API to\nmanage monitoring resources. In this document we will create an uptime check."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-hcl",metastring:"title=main.tf showLineNumbers",title:"main.tf",showLineNumbers:!0},'resource "statuscake_uptime_check" "uptime_check" {\n name = "Google"\n check_interval = 30\n trigger_rate = 1800\n\n http_check {\n follow_redirects = true\n validate_ssl = true\n\n status_codes = [\n "202",\n "404",\n "405",\n ]\n }\n\n monitored_resource {\n address = "https://www.google.com"\n }\n}\n')),(0,a.kt)("p",null,"To then have Terraform create this check on the StatusCake platform run the\nfollowing command in the terminal from within the directory containing\n",(0,a.kt)("inlineCode",{parentName:"p"},"main.tf"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Create Resources"',title:'"Create','Resources"':!0},"terraform apply -auto-approve\n")),(0,a.kt)("p",null,"Once this has completed head on over to the StatusCake ",(0,a.kt)("a",{parentName:"p",href:"https://app.statuscake.com"},"web\napplication")," to see the uptime check has been\ncreated."),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"In a production environment you should not use ",(0,a.kt)("inlineCode",{parentName:"p"},"apply -auto-approve")," as this can\nbe dangerous. Instead create a plan with ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform plan -out terraform.tfplan"),"\nfollowed by the command to apply the changes.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b27fe35b.4cd15fc1.js b/assets/js/b27fe35b.ae499848.js similarity index 73% rename from assets/js/b27fe35b.4cd15fc1.js rename to assets/js/b27fe35b.ae499848.js index 33b2b1b..a4a11e2 100644 --- a/assets/js/b27fe35b.4cd15fc1.js +++ b/assets/js/b27fe35b.ae499848.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[570],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=s(r),m=i,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||a;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[u]="string"==typeof e?e:i,o[1]=c;for(var s=2;s{r.d(t,{Z:()=>f});var n=r(7294),i=r(6010),a=r(9960),o=r(3438),c=r(3919),l=r(5999);const s={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){let{href:t,children:r}=e;return n.createElement(a.Z,{href:t,className:(0,i.Z)("card padding--lg",s.cardContainer)},r)}function u(e){let{href:t,icon:r,title:a,description:o}=e;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",s.cardTitle),title:a},r," ",a),o&&n.createElement("p",{className:(0,i.Z)("text--truncate",s.cardDescription),title:o},o))}function p(e){var t;let{item:r}=e;const i=(0,o.Wl)(r);return i?n.createElement(u,{href:i,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r;let{item:i}=e;const a=(0,c.Z)(i.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,o.xz)(null!=(t=i.docId)?t:void 0);return n.createElement(u,{href:i.href,icon:a,title:i.label,description:null!=(r=i.description)?r:null==l?void 0:l.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}},1358:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(7294);const i={cards:"cards_tD_A"};function a(e){let{children:t}=e;return n.createElement("div",{className:i.cards},t)}},3698:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7294),i=r(2263),a=r(1564),o=r(1358);function c(){const{siteConfig:e}=(0,i.Z)(),t=e.customFields.clients;return n.createElement(o.Z,null,t.map((e=>n.createElement(a.Z,{item:{type:"link",label:e.title,href:e.href},key:e.title}))))}},4020:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(7462),i=(r(7294),r(3905)),a=r(1564),o=r(3698),c=r(1358);const l={id:"about",title:"Introduction",description:"Welcome to the StatusCake development portal",slug:"/",hide_table_of_contents:!0},s=void 0,d={unversionedId:"overview/about",id:"overview/about",title:"Introduction",description:"Welcome to the StatusCake development portal",source:"@site/guides/overview/introduction.mdx",sourceDirName:"overview",slug:"/",permalink:"/guides/",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/overview/introduction.mdx",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"about",title:"Introduction",description:"Welcome to the StatusCake development portal",slug:"/",hide_table_of_contents:!0},sidebar:"guides",next:{title:"Examples and Resources",permalink:"/guides/examples"}},u={},p=[{value:"API Documentation",id:"api-documentation",level:2},{value:"Begin with an SDK",id:"begin-with-an-sdk",level:2}],m={toc:p},f="wrapper";function h(e){let{components:t,...r}=e;return(0,i.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"StatusCake is a website monitoring platform with a focus on providing\nobservability for the applications you maintain. Here you will find developer\ndocumentation to help integrate StatusCake into your own monitoring suites."),(0,i.kt)("p",null,"Create an ",(0,i.kt)("a",{parentName:"p",href:"https://app.statuscake.com/AddSite.php"},"uptime check")," or use our API\nto automate your experience"),(0,i.kt)("h2",{id:"api-documentation"},"API Documentation"),(0,i.kt)(c.Z,{mdxType:"Cards"},(0,i.kt)(a.Z,{item:{type:"link",label:"Authentication",href:"/guides/api/authentication",docId:"api/authentication"},mdxType:"DocCard"}),(0,i.kt)(a.Z,{item:{type:"link",label:"Ratelimiting",href:"/guides/api/ratelimiting",docId:"api/ratelimiting"},mdxType:"DocCard"}),(0,i.kt)(a.Z,{item:{type:"link",label:"Error Handling",href:"/guides/api/errors",docId:"api/errors"},mdxType:"DocCard"}),(0,i.kt)(a.Z,{item:{type:"link",label:"Parameters",href:"/guides/api/parameters",docId:"api/parameters"},mdxType:"DocCard"})),(0,i.kt)("h2",{id:"begin-with-an-sdk"},"Begin with an SDK"),(0,i.kt)(o.Z,{mdxType:"DocClients"}))}h.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[570],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=s(r),m=i,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||a;return r?n.createElement(f,o(o({ref:t},d),{},{components:r})):n.createElement(f,o({ref:t},d))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[u]="string"==typeof e?e:i,o[1]=c;for(var s=2;s{r.d(t,{Z:()=>f});var n=r(7294),i=r(6010),a=r(9960),o=r(3438),c=r(3919),l=r(5999);const s={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};function d(e){let{href:t,children:r}=e;return n.createElement(a.Z,{href:t,className:(0,i.Z)("card padding--lg",s.cardContainer)},r)}function u(e){let{href:t,icon:r,title:a,description:o}=e;return n.createElement(d,{href:t},n.createElement("h2",{className:(0,i.Z)("text--truncate",s.cardTitle),title:a},r," ",a),o&&n.createElement("p",{className:(0,i.Z)("text--truncate",s.cardDescription),title:o},o))}function p(e){var t;let{item:r}=e;const i=(0,o.Wl)(r);return i?n.createElement(u,{href:i,icon:"\ud83d\uddc3\ufe0f",title:r.label,description:null!=(t=r.description)?t:(0,l.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:r.items.length})}):null}function m(e){var t,r;let{item:i}=e;const a=(0,c.Z)(i.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",l=(0,o.xz)(null!=(t=i.docId)?t:void 0);return n.createElement(u,{href:i.href,icon:a,title:i.label,description:null!=(r=i.description)?r:null==l?void 0:l.description})}function f(e){let{item:t}=e;switch(t.type){case"link":return n.createElement(m,{item:t});case"category":return n.createElement(p,{item:t});default:throw new Error("unknown item type "+JSON.stringify(t))}}},1358:(e,t,r)=>{r.d(t,{Z:()=>a});var n=r(7294);const i={cards:"cards_tD_A"};function a(e){let{children:t}=e;return n.createElement("div",{className:i.cards},t)}},3698:(e,t,r)=>{r.d(t,{Z:()=>c});var n=r(7294),i=r(2263),a=r(1564),o=r(1358);function c(){const{siteConfig:e}=(0,i.Z)(),t=e.customFields.clients;return n.createElement(o.Z,null,t.map((e=>n.createElement(a.Z,{item:{type:"link",label:e.title,href:e.href},key:e.title}))))}},4020:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>s,default:()=>h,frontMatter:()=>l,metadata:()=>d,toc:()=>p});var n=r(7462),i=(r(7294),r(3905)),a=r(1564),o=r(3698),c=r(1358);const l={id:"about",title:"Introduction",description:"Welcome to the StatusCake development portal",slug:"/",hide_table_of_contents:!0},s=void 0,d={unversionedId:"overview/about",id:"overview/about",title:"Introduction",description:"Welcome to the StatusCake development portal",source:"@site/guides/overview/introduction.mdx",sourceDirName:"overview",slug:"/",permalink:"/guides/",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/overview/introduction.mdx",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"about",title:"Introduction",description:"Welcome to the StatusCake development portal",slug:"/",hide_table_of_contents:!0},sidebar:"guides",next:{title:"Examples and Resources",permalink:"/guides/examples"}},u={},p=[{value:"API Documentation",id:"api-documentation",level:2},{value:"Begin with an SDK",id:"begin-with-an-sdk",level:2}],m={toc:p},f="wrapper";function h(e){let{components:t,...r}=e;return(0,i.kt)(f,(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"StatusCake is a website monitoring platform with a focus on providing\nobservability for the applications you maintain. Here you will find developer\ndocumentation to help integrate StatusCake into your own monitoring suites."),(0,i.kt)("p",null,"Create an ",(0,i.kt)("a",{parentName:"p",href:"https://app.statuscake.com/AddSite.php"},"uptime check")," or use our API\nto automate your experience"),(0,i.kt)("h2",{id:"api-documentation"},"API Documentation"),(0,i.kt)(c.Z,{mdxType:"Cards"},(0,i.kt)(a.Z,{item:{type:"link",label:"Authentication",href:"/guides/api/authentication",docId:"api/authentication"},mdxType:"DocCard"}),(0,i.kt)(a.Z,{item:{type:"link",label:"Ratelimiting",href:"/guides/api/ratelimiting",docId:"api/ratelimiting"},mdxType:"DocCard"}),(0,i.kt)(a.Z,{item:{type:"link",label:"Error Handling",href:"/guides/api/errors",docId:"api/errors"},mdxType:"DocCard"}),(0,i.kt)(a.Z,{item:{type:"link",label:"Parameters",href:"/guides/api/parameters",docId:"api/parameters"},mdxType:"DocCard"})),(0,i.kt)("h2",{id:"begin-with-an-sdk"},"Begin with an SDK"),(0,i.kt)(o.Z,{mdxType:"DocClients"}))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c278b702.efcbabbb.js b/assets/js/c278b702.aa9be5f4.js similarity index 53% rename from assets/js/c278b702.efcbabbb.js rename to assets/js/c278b702.aa9be5f4.js index 71bf41c..3bf402a 100644 --- a/assets/js/c278b702.efcbabbb.js +++ b/assets/js/c278b702.aa9be5f4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[445],{3905:(e,t,a)=>{a.d(t,{Zo:()=>l,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=r.createContext({}),c=function(e){var t=r.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},l=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(a),d=n,f=u["".concat(p,".").concat(d)]||u[d]||m[d]||i;return a?r.createElement(f,o(o({ref:t},l),{},{components:a})):r.createElement(f,o({ref:t},l))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=d;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:n,o[1]=s;for(var c=2;c{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const i={id:"parameters",title:"Parameters",description:"Learn about some of the StatusCake API parameters"},o=void 0,s={unversionedId:"api/parameters",id:"api/parameters",title:"Parameters",description:"Learn about some of the StatusCake API parameters",source:"@site/guides/api/parameters.md",sourceDirName:"api",slug:"/api/parameters",permalink:"/guides/api/parameters",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/parameters.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"parameters",title:"Parameters",description:"Learn about some of the StatusCake API parameters"},sidebar:"guides",previous:{title:"Errors",permalink:"/guides/api/errors"},next:{title:"Introduction",permalink:"/guides/sdks/introduction"}},p={},c=[{value:"Accept",id:"accept",level:2},{value:"Arrays",id:"arrays",level:2}],l={toc:c},u="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Some StatusCake API endpoints, namely those that create and update monitoring\nresources, accept input parameters. This document outline the considerations\nthat must be made when interacting with these endpoints."),(0,n.kt)("h2",{id:"accept"},"Accept"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"Accept")," request HTTP header indicates which content types, expressed as\nMIME types, the client is able to understand. The StatusCake API is only capable\nof consuming data that has been URL encoded, meaning that the only viable\n",(0,n.kt)("inlineCode",{parentName:"p"},"Accept")," header be ",(0,n.kt)("inlineCode",{parentName:"p"},"application/x-www-form-urlencoded"),"."),(0,n.kt)("h2",{id:"arrays"},"Arrays"),(0,n.kt)("p",null,"Any API endpoint that accepts an array as input must be formatted as follows:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Array Syntax"',title:'"Array','Syntax"':!0},"field[]=value1&field[]=value2&...\n")),(0,n.kt)("p",null,"For example if creating an uptime check with tags, the tags must be given as\nseparate parameters."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Uptime Check with Tags" {3}',title:'"Uptime',Check:!0,with:!0,'Tags"':!0,"{3}":!0},'curl -X POST "https://api.statuscake.com/v1/uptime" \\\n -H "Authorization: Bearer " \\\n -d "...&tags[]=testing&tags[]=sales"\n')),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"Setting an array of values to be empty can be achieved either by passing a\nsingle array item without a value, i.e. ",(0,n.kt)("inlineCode",{parentName:"p"},"tags[]="),", or by specifying the field\nname without a value, i.e. ",(0,n.kt)("inlineCode",{parentName:"p"},"tags="),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[445],{3905:(e,t,a)=>{a.d(t,{Zo:()=>l,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=r.createContext({}),c=function(e){var t=r.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},l=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(a),d=n,f=u["".concat(p,".").concat(d)]||u[d]||m[d]||i;return a?r.createElement(f,o(o({ref:t},l),{},{components:a})):r.createElement(f,o({ref:t},l))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=d;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:n,o[1]=s;for(var c=2;c{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const i={id:"parameters",title:"Parameters",description:"Learn about some of the StatusCake API parameters"},o=void 0,s={unversionedId:"api/parameters",id:"api/parameters",title:"Parameters",description:"Learn about some of the StatusCake API parameters",source:"@site/guides/api/parameters.md",sourceDirName:"api",slug:"/api/parameters",permalink:"/guides/api/parameters",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/api/parameters.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"parameters",title:"Parameters",description:"Learn about some of the StatusCake API parameters"},sidebar:"guides",previous:{title:"Errors",permalink:"/guides/api/errors"},next:{title:"Introduction",permalink:"/guides/sdks/introduction"}},p={},c=[{value:"Accept",id:"accept",level:2},{value:"Arrays",id:"arrays",level:2}],l={toc:c},u="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Some StatusCake API endpoints, namely those that create and update monitoring\nresources, accept input parameters. This document outline the considerations\nthat must be made when interacting with these endpoints."),(0,n.kt)("h2",{id:"accept"},"Accept"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"Accept")," request HTTP header indicates which content types, expressed as\nMIME types, the client is able to understand. The StatusCake API is only capable\nof consuming data that has been URL encoded, meaning that the only viable\n",(0,n.kt)("inlineCode",{parentName:"p"},"Accept")," header be ",(0,n.kt)("inlineCode",{parentName:"p"},"application/x-www-form-urlencoded"),"."),(0,n.kt)("h2",{id:"arrays"},"Arrays"),(0,n.kt)("p",null,"Any API endpoint that accepts an array as input must be formatted as follows:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Array Syntax"',title:'"Array','Syntax"':!0},"field[]=value1&field[]=value2&...\n")),(0,n.kt)("p",null,"For example if creating an uptime check with tags, the tags must be given as\nseparate parameters."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash",metastring:'title="Uptime Check with Tags" {3}',title:'"Uptime',Check:!0,with:!0,'Tags"':!0,"{3}":!0},'curl -X POST "https://api.statuscake.com/v1/uptime" \\\n -H "Authorization: Bearer " \\\n -d "...&tags[]=testing&tags[]=sales"\n')),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"Setting an array of values to be empty can be achieved either by passing a\nsingle array item without a value, i.e. ",(0,n.kt)("inlineCode",{parentName:"p"},"tags[]="),", or by specifying the field\nname without a value, i.e. ",(0,n.kt)("inlineCode",{parentName:"p"},"tags="),".")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f28197bb.847068a8.js b/assets/js/f28197bb.889986f4.js similarity index 53% rename from assets/js/f28197bb.847068a8.js rename to assets/js/f28197bb.889986f4.js index 2b7c8bd..6d25226 100644 --- a/assets/js/f28197bb.847068a8.js +++ b/assets/js/f28197bb.889986f4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[145],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),p=u(a),d=r,f=p["".concat(l,".").concat(d)]||p[d]||m[d]||i;return a?n.createElement(f,s(s({ref:t},c),{},{components:a})):n.createElement(f,s({ref:t},c))}));function f(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,s=new Array(i);s[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[p]="string"==typeof e?e:r,s[1]=o;for(var u=2;u{a.d(t,{Z:()=>s});var n=a(7294),r=a(6010);const i={tabItem:"tabItem_Ymn6"};function s(e){let{children:t,hidden:a,className:s}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,s),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),r=a(7294),i=a(6010),s=a(2466),o=a(6775),l=a(1980),u=a(7392),c=a(12);function p(e){return function(e){var t,a;return null!=(t=null==(a=r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function m(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=null!=t?t:p(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const n=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:t,groupId:a});return[(0,l._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(n.location.search);t.set(i,e),n.replace({...n.location,search:t.toString()})}),[i,n])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,i=m(e),[s,o]=(0,r.useState)((()=>function(e){var t;let{defaultValue:a,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!d({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}const r=null!=(t=n.find((e=>e.default)))?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:i}))),[l,u]=f({queryString:a,groupId:n}),[p,b]=function(e){let{groupId:t}=e;const a=function(e){return e?"docusaurus.tab."+e:null}(t),[n,i]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:n}),k=(()=>{const e=null!=l?l:p;return d({value:e,tabValues:i})?e:null})();(0,r.useLayoutEffect)((()=>{k&&o(k)}),[k]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:i}))throw new Error("Can't select invalid tab value="+e);o(e),u(e),b(e)}),[u,b,i]),tabValues:i}}var k=a(2389);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){let{className:t,block:a,selectedValue:o,selectValue:l,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,s.o5)(),m=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==o&&(p(t),l(n))},d=e=>{var t;let a=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{var n;const t=c.indexOf(e.currentTarget)+1;a=null!=(n=c[t])?n:c[0];break}case"ArrowLeft":{var r;const t=c.indexOf(e.currentTarget)-1;a=null!=(r=c[t])?r:c[c.length-1];break}}null==(t=a)||t.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:s}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>c.push(e),onKeyDown:d,onClick:m},s,{className:(0,i.Z)("tabs__item",h.tabItem,null==s?void 0:s.className,{"tabs__item--active":o===t})}),null!=a?a:t)})))}function v(e){let{lazy:t,children:a,selectedValue:n}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=b(e);return r.createElement("div",{className:(0,i.Z)("tabs-container",h.tabList)},r.createElement(g,(0,n.Z)({},e,t)),r.createElement(v,(0,n.Z)({},e,t)))}function w(e){const t=(0,k.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},2124:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>o,metadata:()=>u,toc:()=>p});var n=a(7462),r=(a(7294),a(3905)),i=a(4866),s=a(5162);const o={id:"configuration",title:"Configuration",description:"Learn how configure StatusCake software development kits"},l=void 0,u={unversionedId:"sdks/configuration",id:"sdks/configuration",title:"Configuration",description:"Learn how configure StatusCake software development kits",source:"@site/guides/sdks/configuration.md",sourceDirName:"sdks",slug:"/sdks/configuration",permalink:"/guides/sdks/configuration",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/configuration.md",tags:[],version:"current",lastUpdatedAt:1698674531,formattedLastUpdatedAt:"Oct 30, 2023",frontMatter:{id:"configuration",title:"Configuration",description:"Learn how configure StatusCake software development kits"},sidebar:"guides",previous:{title:"Installation",permalink:"/guides/sdks/installation"},next:{title:"Backoff Strategies",permalink:"/guides/sdks/backoff"}},c={},p=[{value:"Authentication",id:"authentication",level:2},{value:"Request Retries",id:"request-retries",level:2},{value:"Backoff",id:"backoff",level:3},{value:"Disable Retries",id:"disable-retries",level:3},{value:"Next Steps",id:"next-steps",level:2}],m={toc:p},d="wrapper";function f(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With the module initialised, the StatusCake provider can be configured."),(0,r.kt)("h2",{id:"authentication"},"Authentication"),(0,r.kt)("p",null,"The StatusCake Terraform provider requires that an API bearer token be included\nin the provider configuration block. You can view and manage your API tokens\nfrom the ",(0,r.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account panel"),"."),(0,r.kt)("admonition",{title:"note",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\n}\n'))),(0,r.kt)(s.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-typescript",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"import 'isomorphic-fetch';\nimport {\n Configuration,\n} from '@statuscake/statuscake-js';\n\nconst config = new Configuration({\n headers: {\n 'Authorization': `Bearer ${apiToken}`,\n },\n});\n"))),(0,r.kt)(s.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"from statuscake import ApiClient\n\nclient = ApiClient(\n header_name='Authorization',\n header_value='Bearer %s' % api_token,\n)\n"))),(0,r.kt)(s.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ruby",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"require 'statuscake'\n\nclient = StatusCake::ApiClient.new\n\n# Constructing these options is a temporary fix until a client wide\n# authentication mechanism has been realised.\nopts = { header_params: { 'Authorization' => \"Bearer #{api_token}\" } }\n")))),(0,r.kt)("h2",{id:"request-retries"},"Request Retries"),(0,r.kt)("p",null,"When a request results in a transient error - an error that will resolve itself,\ni.e. connection error, or rate limit being hit - it may be desirable to retry\nthe request in the future. For this the SDKs allow for each request to be\nretired up to some maximum number of times to give thea greater chance for\nsuccess."),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Retry Attempts" showLineNumbers {12}',title:'"Retry','Attempts"':!0,showLineNumbers:!0,"{12}":!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithMaxRetries(3),\n )\n}\n')))),(0,r.kt)("h3",{id:"backoff"},"Backoff"),(0,r.kt)("p",null,"By default request retry attempts are made using a constant backoff strategy\nwith a backoff period of 1 second. This may be configured to support alternate\nbackoff periods."),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Constant Backoff" showLineNumbers {4,7,15-17}',title:'"Constant','Backoff"':!0,showLineNumbers:!0,"{4,7,15-17}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Constant{\n BaseDelay: time.Duration(5) * time.Second,\n }),\n )\n}\n')))),(0,r.kt)("p",null,"The SDKs support other backoff strategies. These are detailed further in the\n",(0,r.kt)("a",{parentName:"p",href:"/guides/sdks/backoff"},"backoff strategies")," guide."),(0,r.kt)("h3",{id:"disable-retries"},"Disable Retries"),(0,r.kt)("p",null,"Request retries can be disabled entirely for applications that do not require\nit."),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Disbale Retries" showLineNumbers {12}',title:'"Disbale','Retries"':!0,showLineNumbers:!0,"{12}":!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithDisableRetry(),\n )\n}\n')))),(0,r.kt)("h2",{id:"next-steps"},"Next Steps"),(0,r.kt)("p",null,"Next learn about the different request retry backoff strategies the SDKs\nsupport."))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkportal=self.webpackChunkportal||[]).push([[145],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),p=u(a),d=r,f=p["".concat(l,".").concat(d)]||p[d]||m[d]||i;return a?n.createElement(f,s(s({ref:t},c),{},{components:a})):n.createElement(f,s({ref:t},c))}));function f(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,s=new Array(i);s[0]=d;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[p]="string"==typeof e?e:r,s[1]=o;for(var u=2;u{a.d(t,{Z:()=>s});var n=a(7294),r=a(6010);const i={tabItem:"tabItem_Ymn6"};function s(e){let{children:t,hidden:a,className:s}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(i.tabItem,s),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>w});var n=a(7462),r=a(7294),i=a(6010),s=a(2466),o=a(6775),l=a(1980),u=a(7392),c=a(12);function p(e){return function(e){var t,a;return null!=(t=null==(a=r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error("Docusaurus error: Bad child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})))?void 0:a.filter(Boolean))?t:[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function m(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=null!=t?t:p(a);return function(e){const t=(0,u.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error('Docusaurus error: Duplicate values "'+t.map((e=>e.value)).join(", ")+'" found in . Every value needs to be unique.')}(e),e}),[t,a])}function d(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function f(e){let{queryString:t=!1,groupId:a}=e;const n=(0,o.k6)(),i=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return null!=a?a:null}({queryString:t,groupId:a});return[(0,l._X)(i),(0,r.useCallback)((e=>{if(!i)return;const t=new URLSearchParams(n.location.search);t.set(i,e),n.replace({...n.location,search:t.toString()})}),[i,n])]}function b(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,i=m(e),[s,o]=(0,r.useState)((()=>function(e){var t;let{defaultValue:a,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(a){if(!d({value:a,tabValues:n}))throw new Error('Docusaurus error: The has a defaultValue "'+a+'" but none of its children has the corresponding value. Available values are: '+n.map((e=>e.value)).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");return a}const r=null!=(t=n.find((e=>e.default)))?t:n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:i}))),[l,u]=f({queryString:a,groupId:n}),[p,b]=function(e){let{groupId:t}=e;const a=function(e){return e?"docusaurus.tab."+e:null}(t),[n,i]=(0,c.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&i.set(e)}),[a,i])]}({groupId:n}),k=(()=>{const e=null!=l?l:p;return d({value:e,tabValues:i})?e:null})();(0,r.useLayoutEffect)((()=>{k&&o(k)}),[k]);return{selectedValue:s,selectValue:(0,r.useCallback)((e=>{if(!d({value:e,tabValues:i}))throw new Error("Can't select invalid tab value="+e);o(e),u(e),b(e)}),[u,b,i]),tabValues:i}}var k=a(2389);const h={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function g(e){let{className:t,block:a,selectedValue:o,selectValue:l,tabValues:u}=e;const c=[],{blockElementScrollPositionUntilNextRender:p}=(0,s.o5)(),m=e=>{const t=e.currentTarget,a=c.indexOf(t),n=u[a].value;n!==o&&(p(t),l(n))},d=e=>{var t;let a=null;switch(e.key){case"Enter":m(e);break;case"ArrowRight":{var n;const t=c.indexOf(e.currentTarget)+1;a=null!=(n=c[t])?n:c[0];break}case"ArrowLeft":{var r;const t=c.indexOf(e.currentTarget)-1;a=null!=(r=c[t])?r:c[c.length-1];break}}null==(t=a)||t.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":a},t)},u.map((e=>{let{value:t,label:a,attributes:s}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:o===t?0:-1,"aria-selected":o===t,key:t,ref:e=>c.push(e),onKeyDown:d,onClick:m},s,{className:(0,i.Z)("tabs__item",h.tabItem,null==s?void 0:s.className,{"tabs__item--active":o===t})}),null!=a?a:t)})))}function v(e){let{lazy:t,children:a,selectedValue:n}=e;const i=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=i.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},i.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=b(e);return r.createElement("div",{className:(0,i.Z)("tabs-container",h.tabList)},r.createElement(g,(0,n.Z)({},e,t)),r.createElement(v,(0,n.Z)({},e,t)))}function w(e){const t=(0,k.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},2124:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>o,metadata:()=>u,toc:()=>p});var n=a(7462),r=(a(7294),a(3905)),i=a(4866),s=a(5162);const o={id:"configuration",title:"Configuration",description:"Learn how configure StatusCake software development kits"},l=void 0,u={unversionedId:"sdks/configuration",id:"sdks/configuration",title:"Configuration",description:"Learn how configure StatusCake software development kits",source:"@site/guides/sdks/configuration.md",sourceDirName:"sdks",slug:"/sdks/configuration",permalink:"/guides/sdks/configuration",draft:!1,editUrl:"https://github.com/StatusCakeDev/portal/edit/master/guides/sdks/configuration.md",tags:[],version:"current",lastUpdatedAt:1701548811,formattedLastUpdatedAt:"Dec 2, 2023",frontMatter:{id:"configuration",title:"Configuration",description:"Learn how configure StatusCake software development kits"},sidebar:"guides",previous:{title:"Installation",permalink:"/guides/sdks/installation"},next:{title:"Backoff Strategies",permalink:"/guides/sdks/backoff"}},c={},p=[{value:"Authentication",id:"authentication",level:2},{value:"Request Retries",id:"request-retries",level:2},{value:"Backoff",id:"backoff",level:3},{value:"Disable Retries",id:"disable-retries",level:3},{value:"Next Steps",id:"next-steps",level:2}],m={toc:p},d="wrapper";function f(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"With the module initialised, the StatusCake provider can be configured."),(0,r.kt)("h2",{id:"authentication"},"Authentication"),(0,r.kt)("p",null,"The StatusCake Terraform provider requires that an API bearer token be included\nin the provider configuration block. You can view and manage your API tokens\nfrom the ",(0,r.kt)("a",{parentName:"p",href:"https://app.statuscake.com/User.php"},"StatusCake account panel"),"."),(0,r.kt)("admonition",{title:"note",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"API tokens must be kept private. In the event that one is exposed a new one\nshould be generated.")),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\n}\n'))),(0,r.kt)(s.Z,{value:"javascript",label:"JavaScript (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-typescript",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"import 'isomorphic-fetch';\nimport {\n Configuration,\n} from '@statuscake/statuscake-js';\n\nconst config = new Configuration({\n headers: {\n 'Authorization': `Bearer ${apiToken}`,\n },\n});\n"))),(0,r.kt)(s.Z,{value:"python",label:"Python (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"from statuscake import ApiClient\n\nclient = ApiClient(\n header_name='Authorization',\n header_value='Bearer %s' % api_token,\n)\n"))),(0,r.kt)(s.Z,{value:"ruby",label:"Ruby (alpha)",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-ruby",metastring:'title="Create a Client" showLineNumbers',title:'"Create',a:!0,'Client"':!0,showLineNumbers:!0},"require 'statuscake'\n\nclient = StatusCake::ApiClient.new\n\n# Constructing these options is a temporary fix until a client wide\n# authentication mechanism has been realised.\nopts = { header_params: { 'Authorization' => \"Bearer #{api_token}\" } }\n")))),(0,r.kt)("h2",{id:"request-retries"},"Request Retries"),(0,r.kt)("p",null,"When a request results in a transient error - an error that will resolve itself,\ni.e. connection error, or rate limit being hit - it may be desirable to retry\nthe request in the future. For this the SDKs allow for each request to be\nretired up to some maximum number of times to give thea greater chance for\nsuccess."),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Retry Attempts" showLineNumbers {12}',title:'"Retry','Attempts"':!0,showLineNumbers:!0,"{12}":!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithMaxRetries(3),\n )\n}\n')))),(0,r.kt)("h3",{id:"backoff"},"Backoff"),(0,r.kt)("p",null,"By default request retry attempts are made using a constant backoff strategy\nwith a backoff period of 1 second. This may be configured to support alternate\nbackoff periods."),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Constant Backoff" showLineNumbers {4,7,15-17}',title:'"Constant','Backoff"':!0,showLineNumbers:!0,"{4,7,15-17}":!0},'package main\n\nimport (\n "time"\n\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/backoff"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithBackoff(backoff.Constant{\n BaseDelay: time.Duration(5) * time.Second,\n }),\n )\n}\n')))),(0,r.kt)("p",null,"The SDKs support other backoff strategies. These are detailed further in the\n",(0,r.kt)("a",{parentName:"p",href:"/guides/sdks/backoff"},"backoff strategies")," guide."),(0,r.kt)("h3",{id:"disable-retries"},"Disable Retries"),(0,r.kt)("p",null,"Request retries can be disabled entirely for applications that do not require\nit."),(0,r.kt)(i.Z,{groupId:"languages",mdxType:"Tabs"},(0,r.kt)(s.Z,{value:"go",label:"Go",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-go",metastring:'title="Disbale Retries" showLineNumbers {12}',title:'"Disbale','Retries"':!0,showLineNumbers:!0,"{12}":!0},'package main\n\nimport (\n "github.com/StatusCakeDev/statuscake-go"\n "github.com/StatusCakeDev/statuscake-go/credentials"\n)\n\nfunc main() {\n bearer := credentials.NewBearerWithStaticToken("my-api-token")\n client := statuscake.NewClient(\n statuscake.WithRequestCredentials(bearer),\n statuscake.WithDisableRetry(),\n )\n}\n')))),(0,r.kt)("h2",{id:"next-steps"},"Next Steps"),(0,r.kt)("p",null,"Next learn about the different request retry backoff strategies the SDKs\nsupport."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.958843c0.js b/assets/js/main.48672ebe.js similarity index 78% rename from assets/js/main.958843c0.js rename to assets/js/main.48672ebe.js index 5e3a497..ca9fa39 100644 --- a/assets/js/main.958843c0.js +++ b/assets/js/main.48672ebe.js @@ -1,2 +1,2 @@ -/*! For license information please see main.958843c0.js.LICENSE.txt */ -(self.webpackChunkportal=self.webpackChunkportal||[]).push([[179],{830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(7294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(7462),i=n(8356),o=n.n(i),s=n(6887);const l={"01ae5c4b":[()=>n.e(343).then(n.bind(n,3434)),"@site/guides/api/introduction.md",3434],"023627a3":[()=>n.e(379).then(n.bind(n,9769)),"@site/guides/api/ratelimiting.md",9769],"133a5cce":[()=>Promise.all([n.e(532),n.e(558)]).then(n.bind(n,8232)),"@site/guides/sdks/introduction.md",8232],17896441:[()=>Promise.all([n.e(532),n.e(918)]).then(n.bind(n,4700)),"@theme/DocItem",4700],"18a80a4e":[()=>n.e(11).then(n.bind(n,9096)),"@site/guides/sdks/alpha.md",9096],"1a4e3797":[()=>Promise.all([n.e(532),n.e(920)]).then(n.bind(n,6675)),"@theme/SearchPage",6675],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1df93b7f":[()=>Promise.all([n.e(532),n.e(237)]).then(n.bind(n,4192)),"@site/src/pages/index.tsx",4192],"2957dffb":[()=>n.e(319).then(n.bind(n,9570)),"@site/guides/cli/introduction.md",9570],32444541:[()=>n.e(769).then(n.bind(n,7147)),"@site/guides/api/errors.md",7147],"334ea0d1":[()=>n.e(199).then(n.bind(n,8693)),"@site/guides/overview/examples.md",8693],"3e78158f":[()=>n.e(85).then(n.t.bind(n,1837,19)),"/home/runner/work/portal/portal/.docusaurus/docusaurus-plugin-redoc/plugin-redoc-0/redocApiSpecV1.2-plugin-redoc-0.json",1837],"3efcbad0":[()=>n.e(355).then(n.bind(n,6976)),"@site/guides/api/authentication.md",6976],"51e30599":[()=>n.e(260).then(n.t.bind(n,1294,19)),"/home/runner/work/portal/portal/.docusaurus/docusaurus-plugin-redoc/plugin-redoc-0/redocApiLayoutV1-plugin-redoc-0.json",1294],"5d8281b8":[()=>Promise.all([n.e(532),n.e(473)]).then(n.bind(n,9682)),"@site/guides/sdks/backoff.md",9682],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"6dec4991":[()=>Promise.all([n.e(532),n.e(38)]).then(n.bind(n,831)),"@site/guides/sdks/installation.md",831],"9315e6e2":[()=>n.e(340).then(n.t.bind(n,5745,19)),"/home/runner/work/portal/portal/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"977e7329":[()=>n.e(626).then(n.bind(n,1437)),"@site/guides/terraform/introduction.md",1437],a4e89c81:[()=>n.e(974).then(n.t.bind(n,3769,19)),"/home/runner/work/portal/portal/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],b27fe35b:[()=>Promise.all([n.e(532),n.e(570)]).then(n.bind(n,4020)),"@site/guides/overview/introduction.mdx",4020],c278b702:[()=>n.e(445).then(n.bind(n,5946)),"@site/guides/api/parameters.md",5946],d3feddb9:[()=>n.e(568).then(n.t.bind(n,9162,19)),"/home/runner/work/portal/portal/.docusaurus/docusaurus-plugin-redoc/plugin-redoc-0/plugin-route-context-module-100.json",9162],f0ad3fbb:[()=>Promise.all([n.e(532),n.e(679),n.e(612)]).then(n.bind(n,5679)),"@theme/ApiDoc",5679],f1dcd5ac:[()=>n.e(980).then(n.t.bind(n,7085,19)),"/home/runner/work/portal/portal/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],f28197bb:[()=>Promise.all([n.e(532),n.e(145)]).then(n.bind(n,2124)),"@site/guides/sdks/configuration.md",2124]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function p(e,t){if("*"===e)return o()({loading:c,loader:()=>n.e(972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const i=s[e+"-"+t],p={},f=[],m=[],h=(0,u.Z)(i);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=l[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),o().Map({loading:c,loader:p,modules:f,webpack:()=>m,render(t,n){const o=JSON.parse(JSON.stringify(i));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error("The page component at "+e+" doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.");"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const s=o.__comp;delete o.__comp;const l=o.__context;return delete o.__context,r.createElement(d.z,{value:l},r.createElement(s,(0,a.Z)({},o,n)))}})}const f=[{path:"/api/",component:p("/api/","3c4"),exact:!0},{path:"/search",component:p("/search","80c"),exact:!0},{path:"/guides",component:p("/guides","d9f"),routes:[{path:"/guides/",component:p("/guides/","b77"),exact:!0,sidebar:"guides"},{path:"/guides/api/authentication",component:p("/guides/api/authentication","b08"),exact:!0,sidebar:"guides"},{path:"/guides/api/errors",component:p("/guides/api/errors","e8c"),exact:!0,sidebar:"guides"},{path:"/guides/api/introduction",component:p("/guides/api/introduction","7af"),exact:!0,sidebar:"guides"},{path:"/guides/api/parameters",component:p("/guides/api/parameters","653"),exact:!0,sidebar:"guides"},{path:"/guides/api/ratelimiting",component:p("/guides/api/ratelimiting","eca"),exact:!0,sidebar:"guides"},{path:"/guides/cli/introduction",component:p("/guides/cli/introduction","9b2"),exact:!0,sidebar:"guides"},{path:"/guides/examples",component:p("/guides/examples","6b2"),exact:!0,sidebar:"guides"},{path:"/guides/sdks/alpha",component:p("/guides/sdks/alpha","6fd"),exact:!0,sidebar:"guides"},{path:"/guides/sdks/backoff",component:p("/guides/sdks/backoff","c4e"),exact:!0,sidebar:"guides"},{path:"/guides/sdks/configuration",component:p("/guides/sdks/configuration","3bf"),exact:!0,sidebar:"guides"},{path:"/guides/sdks/installation",component:p("/guides/sdks/installation","56e"),exact:!0,sidebar:"guides"},{path:"/guides/sdks/introduction",component:p("/guides/sdks/introduction","30a"),exact:!0,sidebar:"guides"},{path:"/guides/terraform/introduction",component:p("/guides/terraform/introduction","8bc"),exact:!0,sidebar:"guides"}]},{path:"/",component:p("/","f77"),exact:!0},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(7294);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),i=n(3727),o=n(405),s=n(412);const l=[n(2497),n(3310),n(8320),n(2295),n(1304),n(4750)];var c=n(723),u=n(6775),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(5742),h=n(2263),g=n(4996),b=n(6668),y=n(833),v=n(4711),k=n(9727),w=n(3320),E=n(8780),S=n(197);function x(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,v.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),a=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),i=t?""+n+t:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:i}),r.createElement("link",{rel:"canonical",href:i}))}function T(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:k.h})),n&&r.createElement(y.d,{image:n}),r.createElement(_,null),r.createElement(x,null),r.createElement(S.Z,{tag:w.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function P(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),A=n(8940);function I(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{var r,a;const i=null!=(r=null==(a=t.default)?void 0:a[e])?r:t[e];return null==i?void 0:i(...n)}));return()=>a.forEach((e=>null==e?void 0:e()))}const R=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,i=t.search===n.search;if(r&&a&&!i)return;const{hash:o}=t;if(o){const e=decodeURIComponent(o.substring(1)),t=document.getElementById(e);null==t||t.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),I("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class O extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=s.default.canUseDOM?I("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=I("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(R,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const D=O,M="__docusaurus-base-url-issue-banner-container",U="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function j(e){return"\nwindow['"+F+"'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['"+F+"'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('"+M+"');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = "+JSON.stringify(function(e){return'\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = '+e+" "+("/"===e?" (default value)":"")+'

\n

We suggest trying baseUrl =

\n
\n'}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!s.default.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,j(e))),r.createElement("div",{id:M}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement($,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:i}}=(0,h.Z)(),o=(0,g.Z)(e),{htmlLang:s,direction:l}=i[a];return r.createElement(m.Z,null,r.createElement("html",{lang:s,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:o}))}var W=n(4763),q=n(2389);function G(){const e=(0,q.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function Z(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(W.Z,null,r.createElement(A.M,null,r.createElement(L.t,null,r.createElement(p,null,r.createElement(H,null),r.createElement(T,null),r.createElement(z,null),r.createElement(D,{location:P(t)},e)),r.createElement(G,null))))}var V=n(6887);const K=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var r,a;if("undefined"==typeof document)return void n();const i=document.createElement("link");i.setAttribute("rel","prefetch"),i.setAttribute("href",e),i.onload=()=>t(),i.onerror=()=>n();const o=null!=(r=document.getElementsByTagName("head")[0])?r:null==(a=document.getElementsByName("script")[0])?void 0:a.parentNode;null==o||o.appendChild(i)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var X=n(9670);const Y=new Set,Q=new Set,J=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},ee={prefetch(e){if(!(e=>!J()&&!Q.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Q.has(e))(e)&&(Q.add(e),N(e))},te=Object.freeze(ee);if(s.default.canUseDOM){window.docusaurus=te;const e=a.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(o.B6,null,r.createElement(i.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const i=JSON.parse('{"docusaurus-plugin-google-tag-manager":{"default":{"containerId":"GTM-PD4P397","id":"default"}},"docusaurus-plugin-redoc":{"plugin-redoc-0":{"url":"redocusaurus/plugin-redoc-0.yaml","themeId":"theme-redoc","isSpecFile":true,"spec":{"openapi":"3.0.0","info":{"title":"StatusCake API","description":"StatusCake API endpoints to manage monitoring resources.\\n\\n# Authentication\\n\\nDocumentation on API authentication can be found\\n[here](https://developers.statuscake.com/guides/api/authentication).\\n\\n# Ratelimiting\\n\\nDocumentation on API ratelimiting can be found\\n[here](https://developers.statuscake.com/guides/api/ratelimiting).\\n\\n# Errors\\n\\nDocumentation on error handling can be found\\n[here](https://developers.statuscake.com/guides/api/errors).\\n\\n# Handling Input Parameters\\n\\nDocumentation on input parameters, including how to pass arrays to API\\nendpoints can be found\\n[here](https://developers.statuscake.com/guides/api/parameters).\\n","version":"1.2.0","termsOfService":"https://www.statuscake.com/terms-and-conditions/","contact":{"name":"Support","email":"support@statuscake.com","url":"https://www.statuscake.com"},"license":{"name":"Apache-2.0","url":"http://www.apache.org/licenses/LICENSE-2.0.html"}},"tags":[{"name":"contact groups","description":"The Contact Groups API provides methods to configure how StatusCake alerts\\nare forwarded to the people that need to see them.\\n"},{"name":"heartbeat","description":"The Heartbeat API provides methods to operate on heartbeat resources,\\neffectively allowing checks to be read and listed.\\n"},{"name":"maintenance windows","description":"The Maintenance Windows API provides methods to pause alerts from being\\nsent for scheduled maintenance periods.\\n\\n**NOTE**: the API endpoints concerned with maintenance windows will only\\nwork with accounts registed to use the newer version of maintenance\\nwindows. This version of maintenance windows is incompatible with the\\noriginal version and all existing windows will require migrating to be\\nfurther used. Presently a tool to automate the migration of maintenance\\nwindows is under development.\\n"},{"name":"pagespeed","description":"The Pagespeed API provides methods to operate on pagespeed resources,\\neffectively allowing checks to be created, read, updated, and deleted.\\nIn addition the history of a specific pagespeed check can be returned for a\\ngiven period.\\n"},{"name":"ssl","description":"The SSL API provides methods to operate on SSL resources, effectively\\nallowing checks to be created, read, updated, and deleted.\\n"},{"name":"uptime","description":"The Uptime API provides methods to operate on uptime resources, effectively\\nallowing checks to be created, read, updated, and deleted. In addition the\\nUptime API is able to return a history of uptime status for a given period;\\nand return a history of alerts since a given date.\\n"},{"name":"locations","description":"The Locations API returns details of our testing infrastructure. This may\\nbe used to gather information regarding IP addresses that may need to be\\nallowed through firewalls for checks to be succesful.\\n"}],"x-tagGroups":[{"name":"Features","tags":["heartbeat","pagespeed","ssl","uptime"]},{"name":"Alerting","tags":["contact groups","maintenance windows"]},{"name":"Monitoring Locations","tags":["locations"]}],"paths":{"/contact-groups":{"get":{"operationId":"list-contact-groups","summary":"Get all contact groups","description":"Returns a list of contact groups for an account.","tags":["contact groups"],"parameters":[{"name":"page","description":"Page of results","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"default":1}},{"name":"limit","description":"The number of contact groups to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroups"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/contact-groups \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListContactGroups(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"post":{"operationId":"create-contact-group","summary":"Create a contact group","description":"Creates a contact group with the given parameters.","tags":["contact groups"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ContactGroupCreateRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/contact-groups \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Operations%20Team&email_addresses[]=johnsmith@example.com&email_addresses[]=janesmith@example.com\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.CreateContactGroup(context.Background()).\\n Name(\\"Operations Team\\").\\n EmailAddresses([]string{\\n \\"johnsmit@example.com\\",\\n \\"janesmit@example.com\\",\\n }).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data.NewID)\\n}\\n"}]}},"/contact-groups/{group_id}":{"get":{"operationId":"get-contact-group","summary":"Retrieve a contact group","description":"Returns a contact group with the given id.","tags":["contact groups"],"parameters":[{"name":"group_id","description":"Contact group ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroupResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/contact-groups/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.GetContactGroup(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"put":{"operationId":"update-contact-group","summary":"Update a contact group","description":"Updates a contact group with the given parameters.","tags":["contact groups"],"parameters":[{"name":"group_id","description":"Contact group ID","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ContactGroupUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X PUT https://api.statuscake.com/v1/contact-groups/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Operations%20Team&email_addresses[]johnsmith@example.com&email_addresses[]=janesmith@example.com\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.UpdateContactGroup(context.Background(), \\"123\\").\\n Name(\\"Operations Team\\").\\n EmailAddresses([]string{\\n \\"johnsmit@example.com\\",\\n \\"janesmit@example.com\\",\\n }).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]},"delete":{"operationId":"delete-contact-group","summary":"Delete a contact group","description":"Deletes a contact group with the given id.","tags":["contact groups"],"parameters":[{"name":"group_id","description":"Contact group ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X DELETE https://api.statuscake.com/v1/contact-groups/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.DeleteContactGroup(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]}},"/heartbeat":{"get":{"operationId":"list-heartbeat-tests","summary":"Get all heartbeat checks","description":"Returns a list of heartbeat checks for an account.","tags":["heartbeat"],"parameters":[{"name":"status","description":"Heartbeat check status","in":"query","schema":{"type":"string","enum":["down","up"]}},{"name":"page","description":"Page of results","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"default":1}},{"name":"limit","description":"The number of heartbeat checks to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}},{"name":"tags","description":"Comma separated list of tags assocaited with a check","in":"query","schema":{"type":"string"}},{"name":"matchany","description":"Include heartbeat checks in response that match any specified tag or\\nall tags. This parameter does not take a value. The absence of this\\nparatemer equates to `false` whilst the presence of thie paramerter\\nequates to `true`.","in":"query","schema":{"type":"boolean","default":false}},{"name":"nouptime","description":"Do not calculate uptime percentages for results. This parameter does\\nnot take a value. The absence of this paratemer equates to `false`\\nwhilst the presence of thie paramerter equates to `true`.","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeartbeatTests"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/heartbeat \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListHeartbeatTests(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"post":{"operationId":"create-heartbeat-test","summary":"Create a heartbeat check","description":"Creates a heartbeat check with the given parameters.","tags":["heartbeat"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/HeartbeatTestCreateRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/heartbeat \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Example%20Heartbeat&period=1800\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.CreateHeartbeatTest(context.Background()).\\n Name(\\"Example Heartbeat\\").\\n Period(1800).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data.NewID)\\n}\\n"}]}},"/heartbeat/{test_id}":{"get":{"operationId":"get-heartbeat-test","summary":"Retrieve a heartbeat check","description":"Returns a heartbeat check with the given id.","tags":["heartbeat"],"parameters":[{"name":"test_id","description":"Heartbeat check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HeartbeatTestResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/heartbeat/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.GetHeartbeatTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"put":{"operationId":"update-heartbeat-test","summary":"Update a heartbeat check","description":"Updates a heartbeat check with the given parameters.","tags":["heartbeat"],"parameters":[{"name":"test_id","description":"Heartbeat check ID","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/HeartbeatTestUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X PUT https://api.statuscake.com/v1/heartbeat/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Example%20Heartbeat&period=1800\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.UpdateHeartbeatTest(context.Background(), \\"123\\").\\n Name(\\"Example HTTP\\").\\n Period(1800).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]},"delete":{"operationId":"delete-heartbeat-test","summary":"Delete a heartbeat check","description":"Deletes a heartbeat check with the given id.","tags":["heartbeat"],"parameters":[{"name":"test_id","description":"Heartbeat check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X DELETE https://api.statuscake.com/v1/heartbeat/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.DeletHeartbeatTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]}},"/maintenance-windows":{"get":{"operationId":"list-maintenance-windows","summary":"Get all maintenance windows","description":"Returns a list of maintenance windows for an account.","tags":["maintenance windows"],"parameters":[{"name":"page","description":"Page of results","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"default":1}},{"name":"limit","description":"The number of maintenance windows to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}},{"name":"state","description":"Maintenance window state","in":"query","schema":{"type":"string","enum":["active","paused","pending"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindows"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/maintenance-windows \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListMaintenanceWindows(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"post":{"operationId":"create-maintenance-window","summary":"Create a maintenance window","description":"Creates a maintenance window with the given parameters.","tags":["maintenance windows"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MaintenanceWindowCreateRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/maintenance-windows \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Weekends&start_at=2021-12-06T01:30:00Z&end_at=2021-07-11T06:00:00Z&repeat_interval=1w&tags[]=production&timezone=UTC\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.CreateMaintenanceWindow(context.Background()).\\n Name(\\"Weekends\\").\\n End(time.Date(2021, 7, 11, 6, 0, 0, 0, time.UTC)).\\n RepeatInterval(statuscake.MaintenanceWindowRepeatIntervalWeekly).\\n Start(time.Date(2021, 12, 6, 1, 30, 0, 0, time.UTC)).\\n Tags([]string{\\"production\\"}).\\n Timezone(\\"UTC\\").\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data.NewID)\\n}\\n"}]}},"/maintenance-windows/{window_id}":{"get":{"operationId":"get-maintenance-window","summary":"Retrieve a maintenance window","description":"Returns a maintenance window with the given id.","tags":["maintenance windows"],"parameters":[{"name":"window_id","description":"Maintenance window ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindowResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/maintenance-windows/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.GetMaintenanceWindow(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"put":{"operationId":"update-maintenance-window","summary":"Update a maintenance window","description":"Updates a maintenance window with the given parameters.","tags":["maintenance windows"],"parameters":[{"name":"window_id","description":"Maintenance window ID","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/MaintenanceWindowUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/maintenance-windows/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Weekends&start_at=2021-12-06T01:30:00Z&end_at=2021-07-11T06:00:00Z&repeat_interval=1w&tags[]=production&timezone=UTC\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.UpdateMaintenanceWindow(context.Background(), \\"123\\").\\n Name(\\"Weekends\\").\\n End(time.Date(2021, 7, 11, 6, 0, 0, 0, time.UTC)).\\n RepeatInterval(statuscake.MaintenanceWindowRepeatIntervalWeekly).\\n Start(time.Date(2021, 12, 6, 1, 30, 0, 0, time.UTC)).\\n Tags([]string{\\"production\\"}).\\n Timezone(\\"UTC\\").\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]},"delete":{"operationId":"delete-maintenance-window","summary":"Delete a maintenance window","description":"Deletes a maintenance window with the given id.","tags":["maintenance windows"],"parameters":[{"name":"window_id","description":"Maintenance window ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X DELETE https://api.statuscake.com/v1/maintenance-windows/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.DeleteMaintenanceWindow(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]}},"/pagespeed":{"get":{"operationId":"list-pagespeed-tests","summary":"Get all pagespeed checks","description":"Returns a list of pagespeed checks for an account.","tags":["pagespeed"],"parameters":[{"name":"page","description":"Page of results","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"default":1}},{"name":"limit","description":"The number of pagespeed checks to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagespeedTests"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/pagespeed \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListPagespeedTests(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"post":{"operationId":"create-pagespeed-test","summary":"Create a pagespeed check","description":"Creates a pagespeed check with the given parameters.","tags":["pagespeed"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PagespeedTestCreateRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/pagespeed \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Example&website_url=https://www.example.com®ion=UK&check_rate=10\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.CreatePagespeedTest(context.Background()).\\n Name(\\"Example\\").\\n WebsiteURL(\\"https://www.example.com\\").\\n CheckRate(statuscake.PagespeedTestCheckRateTenMinutes).\\n Region(statuscake.PagespeedTestRegionUnitedKingdom).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data.NewID)\\n}\\n"}]}},"/pagespeed/{test_id}":{"get":{"operationId":"get-pagespeed-test","summary":"Retrieve a pagespeed check","description":"Returns a pagespeed check with the given id.","tags":["pagespeed"],"parameters":[{"name":"test_id","description":"Pagespeed check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagespeedTestResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/pagespeed/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.GetPagespeedTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"put":{"operationId":"update-pagespeed-test","summary":"Update a pagespeed check","description":"Updates a pagespeed check with the given parameters.","tags":["pagespeed"],"parameters":[{"name":"test_id","description":"Pagespeed check ID","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PagespeedTestUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X PUT https://api.statuscake.com/v1/pagespeed/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Example®ion=UK&check_rate=10\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.UpdatePagespeedTest(context.Background(), \\"123\\").\\n Name(\\"Example\\").\\n CheckRate(statuscake.PagespeedTestCheckRateTenMinutes).\\n Region(statuscake.PagespeedTestRegionUnitedKingdom).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]},"delete":{"operationId":"delete-pagespeed-test","summary":"Delete a pagespeed check","description":"Deletes a pagespeed check with the given id.","tags":["pagespeed"],"parameters":[{"name":"test_id","description":"Pagespeed check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X DELETE https://api.statuscake.com/v1/pagespeed/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.DeletePagespeedTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]}},"/pagespeed/{test_id}/history":{"get":{"operationId":"list-pagespeed-test-history","summary":"Get all pagespeed check history","description":"Returns a list of pagespeed check history results for a given id,\\ndetailing the runs performed on the StatusCake testing infrastruture.\\n\\nThe returned results are a paginated series. Alongside the response\\ndata is a `links` object referencing the current response document,\\n`self`, and the next page in the series, `next`.\\n\\nAggregated data over the specified duration is returned in the root\\nlevel `metadata` field.","tags":["pagespeed"],"parameters":[{"name":"test_id","description":"Pagespeed check ID","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","description":"The number of results to return from the series","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}},{"name":"before","description":"Only results created before this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}},{"name":"after","description":"Only results created after this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagespeedTestHistory"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/pagespeed/123/history \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListPagespeedTestHistory(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]}},"/ssl":{"get":{"operationId":"list-ssl-tests","summary":"Get all SSL checks","description":"Returns a list of SSL checks for an account.","tags":["ssl"],"parameters":[{"name":"page","description":"Page of results","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"default":1}},{"name":"limit","description":"The number of SSL checks to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSLTests"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/ssl \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListSslTests(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"post":{"operationId":"create-ssl-test","summary":"Create an SSL check","description":"Creates an SSL check with the given parameters.","tags":["ssl"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SSLTestCreateRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/ssl \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"website_url=https://www.example.com&check_rate=1800&alert_at[]=1&alert_at[]=2&alert_at[]=3&alert_reminder=true&alert_expiry=true&alert_broken=true&alert_mixed=true\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.CreateSslTest(context.Background()).\\n WebsiteURL(\\"https://www.example.com\\").\\n CheckRate(statuscake.SSLTestCheckRateThirtyMinutes).\\n AlertAt([]int32{1, 2, 3}).\\n AlertBroken(true).\\n AlertExpiry(true).\\n AlertMixed(true).\\n AlertReminder(true).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data.NewID)\\n}\\n"}]}},"/ssl/{test_id}":{"get":{"operationId":"get-ssl-test","summary":"Retrieve an SSL check","description":"Returns an SSL check with the given id.","tags":["ssl"],"parameters":[{"name":"test_id","description":"SSL check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSLTestResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/ssl/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.GetSslTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"put":{"operationId":"update-ssl-test","summary":"Update an SSL check","description":"Updates an SSL check with the given parameters.","tags":["ssl"],"parameters":[{"name":"test_id","description":"SSL check ID","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/SSLTestUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X PUT https://api.statuscake.com/v1/ssl/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"check_rate=1800&alert_at[]=1&alert_at[]=2&alert_at[]=3&alert_reminder=true&alert_expiry=true&alert_broken=true&alert_mixed=true\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.UpdateSslTest(context.Background(), \\"123\\").\\n CheckRate(statuscake.SSLTestCheckRateThirtyMinutes).\\n AlertAt([]int32{1, 2, 3}).\\n AlertBroken(true).\\n AlertExpiry(true).\\n AlertMixed(true).\\n AlertReminder(true).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]},"delete":{"operationId":"delete-ssl-test","summary":"Delete an SSL check","description":"Deletes an SSL check with the given id.","tags":["ssl"],"parameters":[{"name":"test_id","description":"Pagespeed check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X DELETE https://api.statuscake.com/v1/ssl/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.DeleteSslTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]}},"/uptime":{"get":{"operationId":"list-uptime-tests","summary":"Get all uptime checks","description":"Returns a list of uptime checks for an account.","tags":["uptime"],"parameters":[{"name":"status","description":"Uptime check status","in":"query","schema":{"type":"string","enum":["down","up"]}},{"name":"page","description":"Page of results","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"default":1}},{"name":"limit","description":"The number of uptime checks to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}},{"name":"tags","description":"Comma separated list of tags assocaited with a check","in":"query","schema":{"type":"string"}},{"name":"matchany","description":"Include uptime checks in response that match any specified tag or all\\ntags. This parameter does not take a value. The absence of this\\nparatemer equates to `false` whilst the presence of thie paramerter\\nequates to `true`.","in":"query","schema":{"type":"boolean","default":false}},{"name":"nouptime","description":"Do not calculate uptime percentages for results. This parameter does\\nnot take a value. The absence of this paratemer equates to `false`\\nwhilst the presence of thie paramerter equates to `true`.","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeTests"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/uptime \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListUptimeTests(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"post":{"operationId":"create-uptime-test","summary":"Create an uptime check","description":"Creates an uptime check with the given parameters.","tags":["uptime"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/UptimeTestCreateRequest"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X POST https://api.statuscake.com/v1/uptime \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Example%20HTTP&test_type=HTTP&website_url=https://www.example.com&check_rate=1800®ions[]=london®ions[]=paris\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.CreateUptimeTest(context.Background()).\\n Name(\\"Example HTTP\\").\\n TestType(statuscake.UptimeTestTypeHTTP).\\n WebsiteURL(\\"https://www.example.com\\").\\n CheckRate(statuscake.UptimeTestCheckRateThirtyMinutes).\\n Regions([]string{\\"london\\", \\"paris\\"}).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data.NewID)\\n}\\n"}]}},"/uptime/{test_id}":{"get":{"operationId":"get-uptime-test","summary":"Retrieve an uptime check","description":"Returns an uptime check with the given id.","tags":["uptime"],"parameters":[{"name":"test_id","description":"Uptime check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeTestResponse"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/uptime/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.GetUptimeTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]},"put":{"operationId":"update-uptime-test","summary":"Update an uptime check","description":"Updates an uptime check with the given parameters.","tags":["uptime"],"parameters":[{"name":"test_id","description":"Uptime check ID","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/UptimeTestUpdateRequest"}}},"required":true},"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X PUT https://api.statuscake.com/v1/uptime/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\" \\\\\\n -d \\"name=Example%20HTTP&check_rate=1800®ions[]=london®ions[]=paris\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.UpdateUptimeTest(context.Background(), \\"123\\").\\n Name(\\"Example HTTP\\").\\n CheckRate(statuscake.UptimeTestCheckRateThirtyMinutes).\\n Regions([]string{\\"london\\", \\"paris\\"}).\\n Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]},"delete":{"operationId":"delete-uptime-test","summary":"Delete an uptime check","description":"Deletes an uptime check with the given id.","tags":["uptime"],"parameters":[{"name":"test_id","description":"Uptime check ID","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl -X DELETE https://api.statuscake.com/v1/uptime/123 \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n err := client.DeleteUptimeTest(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n}\\n"}]}},"/uptime/{test_id}/history":{"get":{"operationId":"list-uptime-test-history","summary":"Get all uptime check history","description":"Returns a list of uptime check history results for a given id,\\ndetailing the runs performed on the StatusCake testing infrastruture.\\n\\nThe returned results are a paginated series. Alongside the response\\ndata is a `links` object referencing the current response document,\\n`self`, and the next page in the series, `next`.","tags":["uptime"],"parameters":[{"name":"test_id","description":"Uptime check ID","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","description":"The number of results to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}},{"name":"before","description":"Only results created before this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}},{"name":"after","description":"Only results created after this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeTestHistory"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/uptime/123/history \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListUptimeTestHistory(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]}},"/uptime/{test_id}/periods":{"get":{"operationId":"list-uptime-test-periods","summary":"Get all uptime check periods","description":"Returns a list of uptime check periods for a given id, detailing the\\ncreation time of the period, when it ended and the duration.\\n\\nThe returned results are a paginated series. Alongside the response\\ndata is a `links` object referencing the current response document,\\n`self`, and the next page in the series, `next`.","tags":["uptime"],"parameters":[{"name":"test_id","description":"Uptime check ID","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","description":"The number of uptime check periods to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}},{"name":"before","description":"Only check periods created before this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}},{"name":"after","description":"Only check periods created after this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeTestPeriods"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/uptime/123/periods \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListUptimeTestPeriods(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]}},"/uptime/{test_id}/alerts":{"get":{"operationId":"list-uptime-test-alerts","summary":"Get all uptime check alerts","description":"Returns a list of uptime check alerts for a given id.\\n\\nThe returned results are a paginated series. Alongside the response\\ndata is a `links` object referencing the current response document,\\n`self`, and the next page in the series, `next`.","tags":["uptime"],"parameters":[{"name":"test_id","description":"Uptime check ID","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","description":"The number of uptime alerts to return per page","in":"query","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25}},{"name":"before","description":"Only alerts triggered before this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}},{"name":"after","description":"Only alerts triggered after this UNIX timestamp will be returned","in":"query","schema":{"type":"integer","format":"int64","minimum":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeTestAlerts"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/uptime/123/alerts \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListSentAlerts(context.Background(), \\"123\\").Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]}},"/uptime-locations":{"get":{"operationId":"list-uptime-monitoring-locations","summary":"Get all uptime monitoring locations","description":"Returns a list of locations detailing server information for uptime\\nmonitoring servers. This information can be used to create further\\nchecks using the API.","tags":["locations"],"parameters":[{"name":"region_code","description":"Server region code","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringLocations"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/uptime-locations \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListUptimeMonitoringLocations(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]}},"/pagespeed-locations":{"get":{"operationId":"list-pagespeed-monitoring-locations","summary":"Get all pagespeed monitoring locations","description":"Returns a list of locations detailing server information for pagespeed\\nmonitoring servers. This information can be used to create further\\nchecks using the API.","tags":["locations"],"parameters":[{"name":"location","description":"Alpha-2 ISO 3166-1 country code","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitoringLocations"}}}},"default":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIError"}}}}},"x-codeSamples":[{"lang":"cURL","source":"curl https://api.statuscake.com/v1/pagespeed-locations \\\\\\n -H \\"Authorization: Bearer ${API_TOKEN}\\"\\n"},{"lang":"Go","source":"package main\\n\\nimport (\\n \\"context\\"\\n \\"fmt\\"\\n\\n \\"github.com/StatusCakeDev/statuscake-go\\"\\n \\"github.com/StatusCakeDev/statuscake-go/credentials\\"\\n)\\n\\nfunc main() {\\n bearer := credentials.NewBearerWithStaticToken(\\"my-api-token\\")\\n client := statuscake.NewClient(statuscake.WithRequestCredentials(bearer))\\n\\n res, err := client.ListPagespeedMonitoringLocations(context.Background()).Execute()\\n if err != nil {\\n panic(err)\\n }\\n\\n fmt.Printf(\\"%+v\\\\n\\", res.Data)\\n}\\n"}]}}},"servers":[{"url":"https://api.statuscake.com/v1"}],"components":{"schemas":{"APIResponse":{"required":["data"],"type":"object","properties":{"data":{"description":"Response body","required":["new_id"],"type":"object","properties":{"new_id":{"description":"ID of newly created resource.","type":"string","x-export-param-name-override":"NewID"}}}},"example":{"data":{"new_id":"123"}}},"APIError":{"type":"object","properties":{"message":{"description":"Additional message","type":"string"},"errors":{"description":"List of error messages","type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"example":{"message":"Something went wrong","errors":{"field_name":["field name is required","field name is not a valid URL"]}}},"Links":{"required":["self"],"type":"object","properties":{"self":{"description":"The URL that created the current response document","type":"string","format":"uri"}},"additionalProperties":{"description":"Additional links. The nature of these fields is described in the\\nendpoint description"}},"Metadata":{"type":"object","additionalProperties":{"description":"Additional metadata. The nature of these fields is described in the\\nendpoint description"},"x-allow-empty":true},"Pagination":{"required":["page","per_page","page_count","total_count"],"type":"object","properties":{"page":{"description":"The current page of results","type":"integer","format":"int32","minimum":1},"per_page":{"description":"The number of results per page","type":"integer","format":"int32","minimum":1},"page_count":{"description":"The total number of pages","type":"integer","format":"int32","minimum":1},"total_count":{"description":"The total number of results","type":"integer","format":"int32","minimum":1}}},"ContactGroups":{"required":["data","metadata"],"type":"object","properties":{"data":{"description":"List of contact groups","type":"array","items":{"$ref":"#/components/schemas/ContactGroup"}},"metadata":{"$ref":"#/components/schemas/Pagination"}},"example":{"data":[{"id":"123","name":"Operations Team","email_addresses":["johnsmith@example.com","janesmith@example.com"],"integrations":["1","2","3"],"mobile_numbers":["447712345678","447987462344"],"ping_url":"https://www.example.com/notifications"}],"metadata":{"page":1,"per_page":25,"page_count":10,"total_count":230}}},"ContactGroup":{"required":["id","name","email_addresses","mobile_numbers","integrations"],"type":"object","properties":{"id":{"description":"Contact group ID","type":"string","x-export-param-name-override":"ID"},"name":{"description":"Name of the contact group","type":"string"},"email_addresses":{"description":"List of email addresses","type":"array","items":{"type":"string"}},"integrations":{"description":"List of configured integration IDs","type":"array","items":{"type":"string"}},"mobile_numbers":{"description":"List of international format mobile phone numbers","type":"array","items":{"type":"string"}},"ping_url":{"description":"URL or IP address of an endpoint to push uptime events. Currently\\nthis only supports HTTP GET endpoints","type":"string","format":"uri","x-export-param-name-override":"PingURL"}}},"ContactGroupCreateRequest":{"required":["name"],"type":"object","properties":{"name":{"description":"Name of the contact group","type":"string"},"email_addresses":{"description":"List of email addresses","type":"array","items":{"type":"string"}},"integrations":{"description":"List of integration IDs","type":"array","items":{"type":"string"}},"mobile_numbers":{"description":"List of international format mobile phone numbers","type":"array","items":{"type":"string"}},"ping_url":{"description":"URL or IP address of an endpoint to push uptime events. Currently\\nthis only supports HTTP GET endpoints","type":"string","format":"uri","x-export-param-name-override":"PingURL"}}},"ContactGroupResponse":{"required":["data"],"type":"object","properties":{"data":{"$ref":"#/components/schemas/ContactGroup"}},"example":{"data":{"id":"123","name":"Operations Team","email_addresses":["johnsmith@example.com","janesmith@example.com"],"integrations":["1","2","3"],"mobile_numbers":["447712345678","447987462344"],"ping_url":"https://www.example.com/notifications"}}},"ContactGroupUpdateRequest":{"type":"object","properties":{"name":{"description":"Name of the contact group","type":"string"},"email_addresses":{"description":"List of email addresses","type":"array","items":{"type":"string"}},"integrations":{"description":"List of integration IDs","type":"array","items":{"type":"string"}},"mobile_numbers":{"description":"List of international format mobile phone numbers","type":"array","items":{"type":"string"}},"ping_url":{"description":"URL or IP address of an endpoint to push uptime events. Currently\\nthis only supports HTTP GET endpoints","type":"string","format":"uri","x-export-param-name-override":"PingURL"}}},"HeartbeatTests":{"required":["data","metadata"],"type":"object","properties":{"data":{"description":"List of heartbeat checks","type":"array","items":{"$ref":"#/components/schemas/HeartbeatTestOverview"}},"metadata":{"$ref":"#/components/schemas/Pagination"}},"example":{"data":[{"id":"123","name":"example Heartbeat check","url":"https://push.statuscake.com/?PK=61e7ca9c88f06d0&TestID=123&time=0","period":1800,"contact_groups":["1","2","3"],"paused":false,"status":"up","tags":["tag1","tag2"],"uptime":99.9}],"metadata":{"page":1,"per_page":25,"page_count":10,"total_count":230}}},"HeartbeatTest":{"required":["id","name","url","period","contact_groups","paused","status","tags","uptime"],"type":"object","properties":{"id":{"description":"Heartbeat check ID","type":"string","x-export-param-name-override":"ID"},"name":{"description":"Name of the check","type":"string"},"url":{"description":"URL of the check","type":"string","format":"uri"},"period":{"description":"Number of seconds since the last ping before the check is considered down","type":"integer","format":"int32","minimum":30,"maximum":172800},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"host":{"description":"Name of the hosting provider","type":"string"},"last_tested_at":{"description":"When the check was last run (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"LastTested"},"paused":{"description":"Whether the check should be run","type":"boolean"},"status":{"$ref":"#/components/schemas/HeartbeatTestStatus"},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}},"uptime":{"description":"Uptime percentage for a check","type":"number","format":"float","minimum":0}}},"HeartbeatTestCreateRequest":{"required":["name","period"],"type":"object","properties":{"name":{"description":"Name of the check","type":"string"},"period":{"description":"Number of seconds since the last ping before the check is considered down","type":"integer","format":"int32","minimum":30,"maximum":172800,"default":1800},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"host":{"description":"Name of the hosting provider","type":"string"},"paused":{"description":"Whether the check should be run","type":"boolean","default":false},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}}}},"HeartbeatTestOverview":{"required":["id","name","url","period","contact_groups","paused","status","tags"],"type":"object","properties":{"id":{"description":"Heartbeat check ID","type":"string","x-export-param-name-override":"ID"},"name":{"description":"Name of the check","type":"string"},"url":{"description":"URL of the check","type":"string","format":"uri"},"period":{"description":"Number of seconds since the last ping before the check is considered down","type":"integer","format":"int32","minimum":30,"maximum":172800},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"paused":{"description":"Whether the check should be run","type":"boolean"},"status":{"$ref":"#/components/schemas/HeartbeatTestStatus"},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}},"uptime":{"description":"Uptime percentage for a check","type":"number","format":"float","minimum":0}}},"HeartbeatTestResponse":{"required":["data"],"type":"object","properties":{"data":{"$ref":"#/components/schemas/HeartbeatTest"}},"example":{"data":{"id":"123","name":"example Heartbeat check","url":"https://push.statuscake.com/?PK=61e7ca9c88f06d0&TestID=123&time=0","period":1800,"contact_groups":["1","2","3"],"last_tested_at":"2013-01-20T14:38:18+00:00","paused":false,"status":"up","tags":["tag1","tag2"],"uptime":99.9}}},"HeartbeatTestUpdateRequest":{"type":"object","properties":{"name":{"description":"Name of the check","type":"string"},"period":{"description":"Number of seconds since the last ping before the check is considered down","type":"integer","format":"int32","minimum":30,"maximum":172800},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"host":{"description":"Name of the hosting provider","type":"string"},"paused":{"description":"Whether the check should be run","type":"boolean"},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}}}},"MaintenanceWindows":{"required":["data","metadata"],"type":"object","properties":{"data":{"description":"List of maintenance windows","type":"array","items":{"$ref":"#/components/schemas/MaintenanceWindow"}},"metadata":{"$ref":"#/components/schemas/Pagination"}},"example":{"data":[{"id":"123","name":"Weekends","end_at":"2020-10-25T23:59:59+00:00","repeat_interval":"1w","start_at":"2020-10-24T00:00:00+00:00","state":"active","tags":["tag1","tag2"],"tests":["1","2","3","4"],"timezone":"UTC"}],"metadata":{"page":1,"per_page":25,"page_count":10,"total_count":230}}},"MaintenanceWindow":{"required":["id","name","end_at","repeat_interval","start_at","state","tags","tests","timezone"],"type":"object","properties":{"id":{"description":"Maintenance window ID","type":"string","x-export-param-name-override":"ID"},"name":{"description":"Name of the maintenance window","type":"string"},"end_at":{"description":"End of the maintenance window (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"End"},"repeat_interval":{"$ref":"#/components/schemas/MaintenanceWindowRepeatInterval"},"start_at":{"description":"Start of the maintenance window (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Start"},"state":{"$ref":"#/components/schemas/MaintenanceWindowState"},"tags":{"description":"List of tags used to include matching uptime checks in this\\nmaintenance window","type":"array","items":{"type":"string"}},"tests":{"description":"List of uptime check IDs explicitly included in this maintenance\\nwindow","type":"array","items":{"type":"string"}},"timezone":{"description":"Standard [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) associated with this maintenance window","type":"string"}}},"MaintenanceWindowCreateRequest":{"required":["name","end_at","start_at","timezone"],"type":"object","properties":{"name":{"description":"Name of the maintenance window","type":"string"},"end_at":{"description":"End of the maintenance window (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"End"},"repeat_interval":{"$ref":"#/components/schemas/MaintenanceWindowRepeatInterval"},"start_at":{"description":"Start of the maintenance window (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Start"},"tags":{"description":"List of tags used to include matching uptime checks in this\\nmaintenance window. At least one of `tests` and `tags` must be\\npresent in the request","type":"array","items":{"type":"string"}},"tests":{"description":"List of uptime check IDs explicitly included in this maintenance\\nwindow. At least one of `tests` and `tags` must be present in the\\nrequest","type":"array","items":{"type":"string"}},"timezone":{"description":"Standard [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) associated with this maintenance window","type":"string"}}},"MaintenanceWindowResponse":{"required":["data"],"type":"object","properties":{"data":{"$ref":"#/components/schemas/MaintenanceWindow"}},"example":{"data":{"id":"123","name":"Weekends","end_at":"2020-10-25T23:59:59+00:00","repeat_interval":"1w","start_at":"2020-10-24T00:00:00+00:00","state":"active","tags":["tag1","tag2"],"tests":["1","2","3","4"],"timezone":"UTC"}}},"MaintenanceWindowUpdateRequest":{"type":"object","properties":{"name":{"description":"Name of the maintenance window","type":"string"},"end_at":{"description":"End of the maintenance window (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"End"},"repeat_interval":{"$ref":"#/components/schemas/MaintenanceWindowRepeatInterval"},"start_at":{"description":"Start of the maintenance window (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Start"},"tags":{"description":"List of tags used to include matching uptime checks in this\\nmaintenance window","type":"array","items":{"type":"string"}},"tests":{"description":"List of uptime check IDs explicitly included in this maintenance\\nwindow","type":"array","items":{"type":"string"}},"timezone":{"description":"Standard [timezone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List) associated with this maintenance window","type":"string"}}},"MonitoringLocations":{"required":["data"],"type":"object","properties":{"data":{"description":"List of monitoring locations","type":"array","items":{"$ref":"#/components/schemas/MonitoringLocation"}}},"example":{"data":[{"description":"United Kingdom, London - 5","ipv4":"178.62.78.199","ipv6":"2a03:b0c0:1:d0::5e:f001","region":"United Kingdom / London","region_code":"london","status":"up"}]}},"MonitoringLocation":{"required":["description","region","region_code","status"],"type":"object","properties":{"description":{"description":"Server description","type":"string"},"ipv4":{"description":"Server IPv4 address","type":"string","format":"ipv4","x-export-param-name-override":"IPv4"},"ipv6":{"description":"Server IPv6 address","type":"string","format":"ipv6","x-export-param-name-override":"IPv6"},"region":{"description":"Server region","type":"string"},"region_code":{"description":"Server region code","type":"string"},"status":{"$ref":"#/components/schemas/MonitoringLocationStatus"}}},"PagespeedTests":{"required":["data","metadata"],"type":"object","properties":{"data":{"description":"List of pagespeed checks","type":"array","items":{"$ref":"#/components/schemas/PagespeedTest"}},"metadata":{"$ref":"#/components/schemas/Pagination"}},"example":{"data":[{"id":"123","name":"Example","website_url":"https://www.example.com","check_rate":1800,"alert_bigger":0,"alert_slower":0,"alert_smaller":0,"contact_groups":["1","2","3"],"latest_stats":{"loadtime":209,"filesize":160.513,"requests":5,"has_issue":true,"latest_issue":"The Total Load Time of the Page (4841/ms) is longer than the alert\\nthreshold of 0/ms"},"location":"PAGESPD-UK5","paused":false}],"metadata":{"page":1,"per_page":25,"page_count":10,"total_count":230}}},"PagespeedTest":{"required":["id","name","website_url","check_rate","alert_bigger","alert_slower","alert_smaller","contact_groups","location","paused"],"type":"object","properties":{"id":{"description":"Pagespeed check ID","type":"string","x-export-param-name-override":"ID"},"name":{"description":"Name of the check","type":"string"},"website_url":{"description":"URL, FQDN, or IP address of the website under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/PagespeedTestCheckRate"},"alert_bigger":{"description":"An alert will be sent if the size of the page is larger than this\\nvalue (kb). A value of 0 prevents alerts being sent.","type":"integer","format":"int32","minimum":0},"alert_slower":{"description":"An alert will be sent if the load time of the page exceeds this value\\n(ms). A value of 0 prevents alerts being sent","type":"integer","format":"int64","minimum":0},"alert_smaller":{"description":"An alert will be sent if the size of the page is smaller than this\\nvalue (kb). A value of 0 prevents alerts being sent","type":"integer","format":"int32","minimum":0},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"latest_stats":{"$ref":"#/components/schemas/PagespeedTestStats"},"location":{"description":"Assigned monitoring location on which checks will be run","type":"string"},"paused":{"description":"Whether the check should be run","type":"boolean"}}},"PagespeedTestCreateRequest":{"required":["name","website_url","check_rate","region"],"type":"object","properties":{"name":{"description":"Name of the check","type":"string"},"website_url":{"description":"URL, FQDN, or IP address of the website under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/PagespeedTestCheckRate"},"alert_bigger":{"description":"An alert will be sent if the size of the page is larger than this\\nvalue (kb). A value of 0 prevents alerts being sent.","type":"integer","format":"int32","minimum":0,"default":0},"alert_slower":{"description":"An alert will be sent if the load time of the page exceeds this value\\n(ms). A value of 0 prevents alerts being sent","type":"integer","format":"int64","minimum":0,"default":0},"alert_smaller":{"description":"An alert will be sent if the size of the page is smaller than this\\nvalue (kb). A value of 0 prevents alerts being sent","type":"integer","format":"int32","minimum":0,"default":0},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"paused":{"description":"Whether the check should be run","type":"boolean","default":false},"region":{"$ref":"#/components/schemas/PagespeedTestRegion"}}},"PagespeedTestHistory":{"required":["data","links"],"type":"object","properties":{"data":{"description":"List of pagespeed check history results","type":"array","items":{"$ref":"#/components/schemas/PagespeedTestHistoryResult"}},"links":{"$ref":"#/components/schemas/Links"},"metadata":{"$ref":"#/components/schemas/Metadata"}},"example":{"data":[{"created_at":"2017-11-04T11:58:23+00:00","filesize":169.342,"har_location":"https://16a0fd6b5b5bece1d29a-7aa19249e604542958e6a694f67d0bbf.ssl.cf5.rackcdn.com/b8f1cc4f-d6f0-495b-a478-7577d174f9fe.json","loadtime":361,"requests":9,"throttling":"4G"}],"links":{"self":"https://api.statuscake.com/v1/pagespeed/1/history?before=1509796803","next":"https://api.statuscake/com/v1/pagespeed/1/history?before=1509796703"},"metadata":{"aggregates":{"filesize":{"min":8,"max":9,"avg":8.129},"loadtime":{"min":162,"max":3344,"avg":410.292},"requests":{"min":160,"max":169,"avg":161.654}}}}},"PagespeedTestHistoryResult":{"required":["created_at","filesize","har_location","loadtime","requests","throttling"],"type":"object","properties":{"created_at":{"description":"Creation time of the result (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Created"},"filesize":{"description":"Recorded filesize (kb)","type":"number","format":"float","minimum":0},"har_location":{"description":"Location of the saved HAR file","type":"string","x-export-param-name-override":"HARLocation"},"loadtime":{"description":"Recorded loadtime (ms)","type":"integer","format":"int64","minimum":0},"requests":{"description":"Recorded request count","type":"integer","format":"int32","minimum":0},"throttling":{"$ref":"#/components/schemas/PagespeedTestThrottling"}}},"PagespeedTestResponse":{"required":["data"],"type":"object","properties":{"data":{"$ref":"#/components/schemas/PagespeedTest"}},"example":{"data":{"id":"123","name":"Example","website_url":"https://www.example.com","check_rate":1800,"alert_bigger":0,"alert_slower":0,"alert_smaller":0,"contact_groups":["1","2","3"],"latest_stats":{"loadtime":209,"filesize":160.513,"requests":5,"has_issue":true,"latest_issue":"The Total Load Time of the Page (4841/ms) is longer than the alert\\nthreshold of 0/ms"},"location":"PAGESPD-UK5","paused":false}}},"PagespeedTestStats":{"required":["filesize","has_issue","loadtime","requests"],"type":"object","properties":{"filesize":{"description":"Latest recorded filesize (kb)","type":"number","format":"float","minimum":0},"has_issue":{"description":"Whether the latest check has an issue","type":"boolean"},"loadtime":{"description":"Latest recorded loadtime (ms)","type":"integer","format":"int32","minimum":0},"requests":{"description":"Latest recorded request count","type":"integer","format":"int32","minimum":0},"latest_issue":{"description":"Latest recorded issue","type":"string"}}},"PagespeedTestUpdateRequest":{"type":"object","properties":{"name":{"description":"Name of the check","type":"string"},"website_url":{"description":"URL, FQDN, or IP address of the website under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/PagespeedTestCheckRate"},"alert_bigger":{"description":"An alert will be sent if the size of the page is larger than this\\nvalue (kb). A value of 0 prevents alerts being sent.","type":"integer","format":"int32","minimum":0},"alert_slower":{"description":"An alert will be sent if the load time of the page exceeds this value\\n(ms). A value of 0 prevents alerts being sent","type":"integer","format":"int64","minimum":0},"alert_smaller":{"description":"An alert will be sent if the size of the page is smaller than this\\nvalue (kb). A value of 0 prevents alerts being sent","type":"integer","format":"int32","minimum":0},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"paused":{"description":"Whether the check should be run","type":"boolean"},"region":{"$ref":"#/components/schemas/PagespeedTestRegion"}}},"SSLTests":{"required":["data","metadata"],"type":"object","properties":{"data":{"description":"List of SSL checks","type":"array","items":{"$ref":"#/components/schemas/SSLTest"}},"metadata":{"$ref":"#/components/schemas/Pagination"}},"example":{"data":[{"id":"123","website_url":"https://www.example.com","check_rate":1800,"alert_at":[1,7,30],"alert_broken":true,"alert_expiry":true,"alert_mixed":true,"alert_reminder":true,"certificate_score":55,"certificate_status":"CERT_OK","cipher":"TLS_RSA_WITH_AES_128_GCM_SHA256","cipher_score":70,"contact_groups":["1","2","3"],"issuer_common_name":"Let\'s Encrypt Authority X3","flags":{"follow_redirects":true,"has_mixed":true,"has_pfs":true,"is_broken":false,"is_expired":false,"is_extended":true,"is_missing":false,"is_revoked":false},"follow_redirects":true,"hostname":"svc.example.com","last_reminder":0,"mixed_content":[{"src":"http://www.example.com/public/images/teapot.png","type":"img"},{"src":"http://www.example.com/public/css/style.css","type":"link"}],"paused":false,"updated_at":"2017-10-24T09:02:25+00:00","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.51 mycustomstring","valid_from":"2017-10-10T14:06:00+00:00","valid_until":"2017-12-29T00:00:00+00:00"}],"metadata":{"page":1,"per_page":25,"page_count":10,"total_count":230}}},"SSLTest":{"required":["id","website_url","check_rate","alert_at","alert_reminder","alert_expiry","alert_broken","alert_mixed","contact_groups","follow_redirects","mixed_content","paused"],"type":"object","properties":{"id":{"description":"SSL check ID","type":"string","x-export-param-name-override":"ID"},"website_url":{"description":"URL of the server under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/SSLTestCheckRate"},"alert_at":{"description":"List representing when alerts should be sent (days).","type":"array","items":{"type":"integer","format":"int32"}},"alert_broken":{"description":"Whether to enable alerts when SSL certificate issues are found","type":"boolean"},"alert_expiry":{"description":"Whether to enable alerts when the SSL certificate is to expire","type":"boolean"},"alert_mixed":{"description":"Whether to enable alerts when mixed content is found","type":"boolean"},"alert_reminder":{"description":"Whether to enable alert reminders","type":"boolean"},"certificate_score":{"description":"SSL certificate score (%)","type":"integer","format":"int32","minimum":0,"maximum":100},"certificate_status":{"description":"SSL certificate status","type":"string"},"cipher":{"description":"SSL/TLS cipher suite belonging to the SSL certificate","type":"string"},"cipher_score":{"description":"SSL certificate cipher strength (%)","type":"integer","format":"int32","minimum":0,"maximum":100},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"issuer_common_name":{"description":"Issuer of the SSL certificate","type":"string"},"flags":{"$ref":"#/components/schemas/SSLTestFlags"},"follow_redirects":{"description":"Whether to follow redirects when testing. Disabled by default","type":"boolean"},"hostname":{"description":"Hostname of the server under test","type":"string"},"last_reminder":{"description":"The last reminder to have been sent (days)","type":"integer","format":"int32","minimum":0},"mixed_content":{"description":"List of mixed content resources","type":"array","items":{"$ref":"#/components/schemas/SSLTestMixedContent"}},"paused":{"description":"Whether the check should be run","type":"boolean"},"updated_at":{"description":"When the SSL certificate was last updated (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Updated"},"user_agent":{"description":"Custom user agent string set when testing","type":"string"},"valid_from":{"description":"SSL certificate validity start (RFC3339 format)","type":"string","format":"date-time"},"valid_until":{"description":"SSL certificate validity end (RFC3339 format)","type":"string","format":"date-time"}}},"SSLTestCreateRequest":{"required":["website_url","check_rate","alert_at"],"type":"object","properties":{"website_url":{"description":"URL of the server under test. Must begin with https://","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/SSLTestCheckRate"},"alert_at":{"description":"List representing when alerts should be sent (days). Must be exactly\\n3 numerical values","type":"array","items":{"type":"integer","format":"int32"}},"alert_broken":{"description":"Whether to enable alerts when SSL certificate issues are found","type":"boolean","default":false},"alert_expiry":{"description":"Whether to enable alerts when the SSL certificate is to expire","type":"boolean","default":false},"alert_mixed":{"description":"Whether to enable alerts when mixed content is found","type":"boolean","default":false},"alert_reminder":{"description":"Whether to enable alert reminders","type":"boolean","default":false},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"follow_redirects":{"description":"Whether to follow redirects when testing. Disabled by default","type":"boolean","default":false},"hostname":{"description":"Hostname of the server under test","type":"string"},"paused":{"description":"Whether the check should be run","type":"boolean","default":false},"user_agent":{"description":"Custom user agent string set when testing","type":"string"}}},"SSLTestFlags":{"required":["follow_redirects","has_mixed","has_pfs","is_broken","is_expired","is_extended","is_missing","is_revoked"],"type":"object","properties":{"follow_redirects":{"description":"Wherher follow redirects has been enabled for the SSL check","type":"boolean"},"has_mixed":{"description":"Whether the requested page has mixed content","type":"boolean"},"has_pfs":{"description":"Whether the SSL certificate has Perfect Forward Security enabled","type":"boolean","x-export-param-name-override":"HasPFS"},"is_broken":{"description":"Whether the SSL certificate has errors","type":"boolean"},"is_expired":{"description":"Whether the SSL certificate has expired","type":"boolean"},"is_extended":{"description":"Whether the SSL certificate has Extended Validation (EV)","type":"boolean"},"is_missing":{"description":"Whether the SSL certificate is missing","type":"boolean"},"is_revoked":{"description":"Whether the SSL certificate has been revoked by the certificate authority","type":"boolean"}}},"SSLTestMixedContent":{"required":["src","type"],"type":"object","properties":{"src":{"description":"Full path to the content resource","type":"string","x-export-param-name-override":"URL"},"type":{"description":"Type of the content","type":"string"}}},"SSLTestResponse":{"required":["data"],"type":"object","properties":{"data":{"$ref":"#/components/schemas/SSLTest"}},"example":{"data":{"id":"123","website_url":"https://www.example.com","check_rate":1800,"alert_at":[1,7,30],"alert_broken":true,"alert_expiry":true,"alert_mixed":true,"alert_reminder":true,"certificate_score":55,"certificate_status":"CERT_OK","cipher":"TLS_RSA_WITH_AES_128_GCM_SHA256","cipher_score":70,"contact_groups":["1","2","3"],"issuer_common_name":"Let\'s Encrypt Authority X3","flags":{"follow_redirects":true,"has_mixed":true,"has_pfs":true,"is_broken":false,"is_expired":false,"is_extended":true,"is_missing":false,"is_revoked":false},"follow_redirects":true,"hostname":"svc.example.com","last_reminder":0,"mixed_content":[{"src":"http://www.example.com/public/images/teapot.png","type":"img"},{"src":"http://www.example.com/public/css/style.css","type":"link"}],"paused":false,"updated_at":"2017-10-24T09:02:25+00:00","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.51 mycustomstring","valid_from":"2017-10-10T14:06:00+00:00","valid_until":"2017-12-29T00:00:00+00:00"}}},"SSLTestUpdateRequest":{"type":"object","properties":{"website_url":{"description":"URL of the server under test. Must begin with https://","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/SSLTestCheckRate"},"alert_at":{"description":"List representing when alerts should be sent (days). Must be exactly\\n3 numerical values","type":"array","items":{"type":"integer","format":"int32"}},"alert_broken":{"description":"Whether to enable alerts when SSL certificate issues are found","type":"boolean"},"alert_expiry":{"description":"Whether to enable alerts when the SSL certificate is to expire","type":"boolean"},"alert_mixed":{"description":"Whether to enable alerts when mixed content is found","type":"boolean"},"alert_reminder":{"description":"Whether to enable alert reminders","type":"boolean"},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"follow_redirects":{"description":"Whether to follow redirects when testing. Disabled by default","type":"boolean"},"hostname":{"description":"Hostname of the server under test","type":"string"},"paused":{"description":"Whether the check should be run","type":"boolean"},"user_agent":{"description":"Custom user agent string set when testing","type":"string"}}},"UptimeTests":{"required":["data","metadata"],"type":"object","properties":{"data":{"description":"List of uptime checks","type":"array","items":{"$ref":"#/components/schemas/UptimeTestOverview"}},"metadata":{"$ref":"#/components/schemas/Pagination"}},"example":{"data":[{"id":"123","name":"example HTTP check","website_url":"https://www.example.com","test_type":"HTTP","check_rate":1800,"contact_groups":["1","2","3"],"paused":false,"status":"up","tags":["tag1","tag2"],"uptime":99.9}],"metadata":{"page":1,"per_page":25,"page_count":10,"total_count":230}}},"UptimeTest":{"required":["id","name","test_type","website_url","check_rate","confirmation","contact_groups","dns_ips","do_not_find","enable_ssl_alert","follow_redirects","include_header","paused","processing","servers","status","status_codes","tags","timeout","trigger_rate","uptime","use_jar"],"type":"object","properties":{"id":{"description":"Uptime check ID","type":"string","x-export-param-name-override":"ID"},"name":{"description":"Name of the check","type":"string"},"test_type":{"$ref":"#/components/schemas/UptimeTestType"},"website_url":{"description":"URL, FQDN, or IP address of the server under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/UptimeTestCheckRate"},"confirmation":{"description":"Number of confirmation servers to confirm downtime before an alert is\\ntriggered","type":"integer","format":"int32","minimum":0,"maximum":3},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"custom_header":{"description":"JSON object. Represents headers to be sent when making requests","type":"string"},"dns_ips":{"description":"List of IP addresses to compare against returned DNS records","type":"array","items":{"type":"string"},"x-export-param-name-override":"DNSIPs"},"dns_server":{"description":"FQDN or IP address of the nameserver to query","type":"string","x-export-param-name-override":"DNSServer"},"do_not_find":{"description":"Whether to consider the check as down if the content is present\\nwithin the response","type":"boolean"},"enable_ssl_alert":{"description":"Whether to send an alert if the SSL certificate is soon to expire","type":"boolean","x-export-param-name-override":"EnableSSLAlert"},"final_endpoint":{"description":"Specify where the redirect chain should end","type":"string"},"find_string":{"description":"String to look for within the response. Considered down if not found","type":"string"},"follow_redirects":{"description":"Whether to follow redirects when testing. Disabled by default","type":"boolean"},"include_header":{"description":"Include header content in string match search","type":"boolean"},"host":{"description":"Name of the hosting provider","type":"string"},"last_tested_at":{"description":"When the check was last run (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"LastTested"},"next_location":{"description":"The server location the check will run next","type":"string"},"paused":{"description":"Whether the check should be run","type":"boolean"},"port":{"description":"Destination port for TCP checks","type":"integer","format":"int32","minimum":0},"post_body":{"description":"JSON object. Payload submitted with the request. Setting this updates the check to use the HTTP POST verb","type":"string"},"post_raw":{"description":"Raw HTTP POST string to send to the server","type":"string"},"processing":{"description":"Whether the check is currently being processed","type":"boolean"},"processing_on":{"description":"The server location the check is currently being run","type":"string"},"processing_state":{"$ref":"#/components/schemas/UptimeTestProcessingState"},"servers":{"description":"List of assigned monitoring locations on which to run checks","type":"array","items":{"$ref":"#/components/schemas/MonitoringLocation"}},"status":{"$ref":"#/components/schemas/UptimeTestStatus"},"status_codes":{"description":"List of status codes that trigger an alert","type":"array","items":{"type":"string"}},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}},"timeout":{"description":"The number of seconds to wait to receive the first byte","type":"integer","format":"int32","minimum":5,"maximum":75},"trigger_rate":{"description":"The number of minutes to wait before sending an alert","type":"integer","format":"int32","minimum":0,"maximum":60},"uptime":{"description":"Uptime percentage for a check","type":"number","format":"float","minimum":0},"use_jar":{"description":"Whether to enable cookie storage","type":"boolean","x-export-param-name-override":"UseJAR"},"user_agent":{"description":"Custom user agent string set when testing","type":"string"}}},"UptimeTestAlerts":{"required":["data","links"],"type":"object","properties":{"data":{"description":"List of uptime check alerts","type":"array","items":{"$ref":"#/components/schemas/UptimeTestAlert"}},"links":{"$ref":"#/components/schemas/Links"},"metadata":{"$ref":"#/components/schemas/Metadata"}},"example":{"data":[{"id":"123","status":"down","status_code":404,"triggered_at":"2013-02-25T14:42:41+00:00"}],"links":{"self":"https://api.statuscake.com/v1/uptime/1/alerts?before=1361803461","next":"https://api.statuscake.com/v1/uptime/1/alerts?before=1361803361"}}},"UptimeTestAlert":{"required":["id","status","status_code"],"type":"object","properties":{"id":{"description":"Uptime check ID","type":"string","x-export-param-name-override":"ID"},"status":{"$ref":"#/components/schemas/UptimeTestStatus"},"status_code":{"description":"Uptime check status code","type":"integer","format":"int32","minimum":0},"triggered_at":{"description":"When the alert was triggered (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Triggered"}}},"UptimeTestCreateRequest":{"required":["name","test_type","website_url","check_rate"],"type":"object","properties":{"name":{"description":"Name of the check","type":"string"},"test_type":{"$ref":"#/components/schemas/UptimeTestType"},"website_url":{"description":"URL or IP address of the server under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/UptimeTestCheckRate"},"basic_username":{"description":"Basic authentication username","type":"string"},"basic_password":{"description":"Basic authentication password","type":"string"},"confirmation":{"description":"Number of confirmation servers to confirm downtime before an alert is\\ntriggered","type":"integer","format":"int32","minimum":0,"maximum":3,"default":2},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"custom_header":{"description":"JSON object. Represents headers to be sent when making requests","type":"string"},"do_not_find":{"description":"Whether to consider the check as down if the content is present\\nwithin the response","type":"boolean","default":false},"dns_ips":{"description":"List of IP addresses to compare against returned DNS records","type":"array","items":{"type":"string"},"x-export-param-name-override":"DNSIPs"},"dns_server":{"description":"FQDN or IP address of the nameserver to query","type":"string","x-export-param-name-override":"DNSServer"},"enable_ssl_alert":{"description":"Whether to send an alert if the SSL certificate is soon to expire","type":"boolean","default":false,"x-export-param-name-override":"EnableSSLAlert"},"final_endpoint":{"description":"Specify where the redirect chain should end","type":"string"},"find_string":{"description":"String to look for within the response. Considered down if not found","type":"string"},"follow_redirects":{"description":"Whether to follow redirects when testing. Disabled by default","type":"boolean","default":false},"host":{"description":"Name of the hosting provider","type":"string"},"include_header":{"description":"Include header content in string match search","type":"boolean","default":false},"paused":{"description":"Whether the check should be run","type":"boolean","default":false},"port":{"description":"Destination port for TCP checks","type":"integer","format":"int32","minimum":0},"post_body":{"description":"JSON object. Payload submitted with the request. Setting this updates the check to use the HTTP POST verb","type":"string"},"post_raw":{"description":"Raw HTTP POST string to send to the server","type":"string"},"regions":{"description":"List of regions on which to run checks. The values required for this\\nparameter can be retrieved from the `GET /v1/uptime-locations`\\nendpoint.","type":"array","items":{"type":"string"}},"status_codes_csv":{"description":"Comma separated list of status codes that trigger an alert","type":"string","x-param-string-array":"StatusCodes"},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}},"timeout":{"description":"The number of seconds to wait to receive the first byte","type":"integer","format":"int32","minimum":5,"maximum":75,"default":15},"trigger_rate":{"description":"The number of minutes to wait before sending an alert","type":"integer","format":"int32","minimum":0,"maximum":60,"default":0},"use_jar":{"description":"Whether to enable cookie storage","type":"boolean","default":false,"x-export-param-name-override":"UseJAR"},"user_agent":{"description":"Custom user agent string set when testing","type":"string"}}},"UptimeTestHistory":{"required":["data","links"],"type":"object","properties":{"data":{"description":"List of uptime check history results","type":"array","items":{"$ref":"#/components/schemas/UptimeTestHistoryResult"}},"links":{"$ref":"#/components/schemas/Links"},"metadata":{"$ref":"#/components/schemas/Metadata"}},"example":{"data":[{"created_at":"2017-11-04T11:58:23+00:00","location":"UKCON2","performance":579,"status_code":200}],"links":{"self":"https://api.statuscake.com/v1/uptime/1/history?before=1509796803","next":"https://api.statuscake.com/v1/uptime/1/history?before=1509796703"}}},"UptimeTestHistoryResult":{"required":["created_at"],"type":"object","properties":{"created_at":{"description":"Creation time of the result (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Created"},"location":{"description":"The server location the check ran","type":"string"},"performance":{"description":"Recorded loadtime (ms)","type":"integer","format":"int64","minimum":0},"status_code":{"description":"Uptime check status code","type":"integer","format":"int32","minimum":0}}},"UptimeTestOverview":{"required":["id","name","website_url","test_type","check_rate","contact_groups","paused","status","tags"],"type":"object","properties":{"id":{"description":"Uptime check ID","type":"string","x-export-param-name-override":"ID"},"name":{"description":"Name of the check","type":"string"},"website_url":{"description":"URL or IP address of the server under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"test_type":{"$ref":"#/components/schemas/UptimeTestType"},"check_rate":{"$ref":"#/components/schemas/UptimeTestCheckRate"},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"paused":{"description":"Whether the check should be run","type":"boolean"},"status":{"$ref":"#/components/schemas/UptimeTestStatus"},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}},"uptime":{"description":"Uptime percentage for a check","type":"number","format":"float","minimum":0}}},"UptimeTestPeriods":{"required":["data","links"],"type":"object","properties":{"data":{"description":"List of uptime check periods","type":"array","items":{"$ref":"#/components/schemas/UptimeTestPeriod"}},"links":{"$ref":"#/components/schemas/Links"},"metadata":{"$ref":"#/components/schemas/Metadata"}},"example":{"data":[{"created_at":"2013-02-25T14:42:41+00:00","duration":189000,"ended_at":"2013-02-25T14:45:50+00:00","status":"down"}],"links":{"self":"https://api.statuscake.com/v1/uptime/1/periods?before=1361803461","next":"https://api.statuscake.com/v1/uptime/1/periods?before=1361803361"}}},"UptimeTestPeriod":{"required":["created_at","status"],"type":"object","properties":{"created_at":{"description":"When the status period was created (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Created"},"duration":{"description":"Status period duration (ms)","type":"integer","format":"int64","minimum":0},"ended_at":{"description":"When the status period ended (RFC3339 format)","type":"string","format":"date-time","x-export-param-name-override":"Ended"},"status":{"$ref":"#/components/schemas/UptimeTestStatus"}}},"UptimeTestResponse":{"required":["data"],"type":"object","properties":{"data":{"$ref":"#/components/schemas/UptimeTest"}},"example":{"data":{"id":"123","name":"example HTTP check","test_type":"HTTP","website_url":"https://www.example.com","check_rate":1800,"confirmation":3,"contact_groups":["1","2","3"],"dns_ips":[],"do_not_find":false,"enable_ssl_alert":true,"follow_redirects":false,"host":"AWS","include_header":false,"last_tested_at":"2013-01-20T14:38:18+00:00","next_location":"UK","paused":false,"processing":true,"processing_on":"UKCON2","processing_state":"pretest","servers":[{"description":"United Kingdom, London - 5","ipv4":"178.62.78.199","ipv6":"2a03:b0c0:1:d0::5e:f001","region":"United Kingdom / London","region_code":"london","status":"up"}],"status":"up","status_codes":["400","401","402","403","404","405","406","407","408","409","410","411","412","413","414","415","416","417","500"],"tags":["tag1","tag2"],"timeout":15,"trigger_rate":0,"uptime":99.9,"use_jar":true}}},"UptimeTestUpdateRequest":{"type":"object","properties":{"name":{"description":"Name of the check","type":"string"},"website_url":{"description":"URL or IP address of the server under test","type":"string","format":"uri","x-export-param-name-override":"WebsiteURL"},"check_rate":{"$ref":"#/components/schemas/UptimeTestCheckRate"},"basic_username":{"description":"Basic authentication username","type":"string"},"basic_password":{"description":"Basic authentication password","type":"string"},"confirmation":{"description":"Number of confirmation servers to confirm downtime before an alert is\\ntriggered","type":"integer","format":"int32","minimum":0,"maximum":3},"contact_groups":{"description":"List of contact group IDs","type":"array","items":{"type":"string"}},"custom_header":{"description":"JSON object. Represents headers to be sent when making requests","type":"string"},"do_not_find":{"description":"Whether to consider the check as down if the content is present\\nwithin the response","type":"boolean"},"dns_ips":{"description":"List of IP addresses to compare against returned DNS records","type":"array","items":{"type":"string"},"x-export-param-name-override":"DNSIPs"},"dns_server":{"description":"FQDN or IP address of the nameserver to query","type":"string","x-export-param-name-override":"DNSServer"},"enable_ssl_alert":{"description":"Whether to send an alert if the SSL certificate is soon to expire","type":"boolean","x-export-param-name-override":"EnableSSLAlert"},"final_endpoint":{"description":"Specify where the redirect chain should end","type":"string"},"find_string":{"description":"String to look for within the response. Considered down if not found","type":"string"},"follow_redirects":{"description":"Whether to follow redirects when testing. Disabled by default","type":"boolean"},"host":{"description":"Name of the hosting provider","type":"string"},"include_header":{"description":"Include header content in string match search","type":"boolean"},"paused":{"description":"Whether the check should be run","type":"boolean"},"port":{"description":"Destination port for TCP checks","type":"integer","format":"int32","minimum":0},"post_body":{"description":"JSON object. Payload submitted with the request. Setting this updates the check to use the HTTP POST verb","type":"string"},"post_raw":{"description":"Raw HTTP POST string to send to the server","type":"string"},"regions":{"description":"List of regions on which to run checks. The values required for this\\nparameter can be retrieved from the `GET /v1/uptime-locations`\\nendpoint.","type":"array","items":{"type":"string"}},"status_codes_csv":{"description":"Comma separated list of status codes that trigger an alert","type":"string","x-param-string-array":"StatusCodes"},"tags":{"description":"List of tags","type":"array","items":{"type":"string"}},"timeout":{"description":"The number of seconds to wait to receive the first byte","type":"integer","format":"int32","minimum":5,"maximum":75},"trigger_rate":{"description":"The number of minutes to wait before sending an alert","type":"integer","format":"int32","minimum":0,"maximum":60},"use_jar":{"description":"Whether to enable cookie storage","type":"boolean","x-export-param-name-override":"UseJAR"},"user_agent":{"description":"Custom user agent string set when testing","type":"string"}}},"HeartbeatTestStatus":{"description":"The returned status of a heartbeat check","type":"string","enum":["down","up"],"x-enum-descriptions":["a heartbeat check with a down status","a heartbeat check with an up status"],"x-enum-varnames":["Down","Up"]},"MaintenanceWindowRepeatInterval":{"description":"How often the maintenance window should occur","type":"string","enum":["never","1d","1w","2w","1m"],"x-enum-descriptions":["a maintenance window that never reoccurs","a maintenance window occuring daily","a maintenance window occuring weekly","a maintenance window occuring biweekly","a maintenance window occuring monthly"],"x-enum-varnames":["Never","Daily","Weekly","Biweekly","Monthly"]},"MaintenanceWindowState":{"description":"Maintenance window state","type":"string","enum":["active","paused","pending"],"x-enum-descriptions":["a maintenance window in an active state","a maintenance window in a paused state","a maintenance window in a pending state"],"x-enum-varnames":["Active","Paused","Pending"]},"MonitoringLocationStatus":{"description":"Server status","type":"string","enum":["down","up"],"x-enum-descriptions":["a monitoring location with a down status","a monitoring location with an up status"],"x-enum-varnames":["Down","Up"]},"PagespeedTestCheckRate":{"description":"Number of seconds between checks","type":"integer","enum":[60,300,600,900,1800,3600,86400],"x-enum-descriptions":["a check rate of 1 minute","a check rate of 5 minutes","a check rate of 10 minutes","a check rate of 15 minutes","a check rate of 30 minutes","a check rate of 1 hour","a check rate of 1 day"],"x-enum-varnames":["OneMinute","FiveMinutes","TenMinutes","FifteenMinutes","ThirtyMinutes","OneHour","OneDay"]},"PagespeedTestRegion":{"description":"Region on which to run checks","type":"string","enum":["AU","CA","DE","FR","IN","JP","NL","SG","UK","US","USW"],"x-enum-descriptions":["a testing region based in Australia","a testing region based in Canada","a testing region based in Germany","a testing region based in France","a testing region based in India","a testing region based in Japan","a testing region based in the Netherlands","a testing region based in Singapore","a testing region based in the United Kingdom","a testing region based in the United States of America (East)","a testing region based in the United States of America (West)"],"x-enum-varnames":["Australia","Canada","Germany","France","India","Japan","Netherlands","Singapore","UnitedKingdom","AmericaEast","AmericaWest"]},"PagespeedTestThrottling":{"description":"Simulated throttling speed","type":"string","enum":["NONE","3G_FAST","3G_SLOW","4G","EDGE","GPRS"],"x-enum-descriptions":["no throttling","fast 3G","slow 3G","4G","EDGE","GPRS"],"x-enum-varnames":["None","Fast3G","Slow3G","_4G","EDGE","GPRS"]},"SSLTestCheckRate":{"description":"Number of seconds between checks","type":"integer","enum":[300,600,1800,3600,86400,2073600],"x-enum-descriptions":["a check rate of 5 minutes","a check rate of 10 minutes","a check rate of 30 minutes","a check rate of 1 hour","a check rate of 1 day","a check rate of 1 week"],"x-enum-varnames":["FiveMinutes","TenMinutes","ThirtyMinutes","OneHour","OneDay","OneWeek"]},"UptimeTestCheckRate":{"description":"Number of seconds between checks","type":"integer","enum":[0,30,60,300,900,1800,3600,86400],"x-enum-descriptions":["a constant check rate","a check rate of 30 seconds","a check rate of 1 minute","a check rate of 5 minutes","a check rate of 15 minutes","a check rate of 30 minutes","a check rate of 1 hour","a check rate of 1 day"],"x-enum-varnames":["Constant","ThirtySeconds","OneMinute","FiveMinutes","FifteenMinutes","ThirtyMinutes","OneHour","OneDay"]},"UptimeTestProcessingState":{"description":"Uptime check proccessing state","type":"string","enum":["complete","pretest","retest","up_retest"],"x-enum-descriptions":["a completed check state","a pretest check state","a retest check state","an up retest check state"],"x-enum-varnames":["Complete","Pretest","Retest","UpRetest"]},"UptimeTestStatus":{"description":"The returned status of an uptime check","type":"string","enum":["down","up"],"x-enum-descriptions":["an uptime check with a down status","an uptime check with an up status"],"x-enum-varnames":["Down","Up"]},"UptimeTestType":{"description":"Uptime check type","type":"string","enum":["DNS","HEAD","HTTP","PING","SMTP","SSH","TCP"],"x-enum-descriptions":["a DNS uptime check","an HTTP uptime check (HEAD verb)","an HTTP uptime check (GET or POST verbs)","an PING uptime check","an SMTP uptime check","an SSH uptime check","a TCP uptime check"]}}}}}},"docusaurus-theme-redoc":{"theme-redoc":{"lightTheme":{"typography":{"fontFamily":"var(--ifm-font-family-base)","fontSize":"var(--ifm-font-size-base)","lineHeight":"var(--ifm-line-height-base)","fontWeightLight":"var(--ifm-font-weight-light)","fontWeightRegular":"var(--ifm-font-weight-base)","fontWeightBold":"var(--ifm-font-weight-bold)","headings":{"fontFamily":"var(--ifm-heading-font-family)","fontWeight":"var(--ifm-heading-font-weight)","lineHeight":"var(--ifm-heading-line-height)"},"code":{"fontFamily":"var(--ifm-font-family-monospace)","lineHeight":"var(--ifm-pre-line-height)"}},"sidebar":{"width":"300px","backgroundColor":"#ffffff"},"rightPanel":{"backgroundColor":"#303846"},"colors":{"primary":{"main":"#1890ff"}},"theme":{"prism":{"additionalLanguages":["scala"]}}},"darkTheme":{"typography":{"fontFamily":"var(--ifm-font-family-base)","fontSize":"var(--ifm-font-size-base)","lineHeight":"var(--ifm-line-height-base)","fontWeightLight":"var(--ifm-font-weight-light)","fontWeightRegular":"var(--ifm-font-weight-base)","fontWeightBold":"var(--ifm-font-weight-bold)","headings":{"fontFamily":"var(--ifm-heading-font-family)","fontWeight":"var(--ifm-heading-font-weight)","lineHeight":"var(--ifm-heading-line-height)"},"code":{"fontFamily":"var(--ifm-font-family-monospace)","lineHeight":"var(--ifm-pre-line-height)"}},"sidebar":{"width":"300px","backgroundColor":"rgb(24, 25, 26)","textColor":"#f5f6f7","arrow":{"color":"#f5f6f7"}},"colors":{"text":{"primary":"#f5f6f7","secondary":"rgba(255, 255, 255, 1)"},"gray":{"50":"#FAFAFA","100":"#F5F5F5"},"border":{"dark":"#ffffff","light":"rgba(0,0,0, 0.1)"},"primary":{"main":"#1890ff"}},"schema":{"nestedBackground":"rgb(24, 25, 26)","typeNameColor":"rgba(255, 255, 255, 1)","typeTitleColor":"rgba(255, 255, 255, 1)"},"theme":{"prism":{"additionalLanguages":["scala"]}}},"options":{"scrollYOffset":"nav.navbar","expandSingleSchemaField":true,"menuToggle":true,"suppressWarnings":true,"disableSearch":true,"expandResponses":"200","hideFab":true,"hideLoading":true,"hideSingleRequestSampleTab":true,"nativeScrollbars":true}}},"docusaurus-plugin-content-docs":{"default":{"path":"/guides","versions":[{"name":"current","label":"Next","isLast":true,"path":"/guides","mainDocId":"overview/about","docs":[{"id":"api/authentication","path":"/guides/api/authentication","sidebar":"guides"},{"id":"api/errors","path":"/guides/api/errors","sidebar":"guides"},{"id":"api/introduction","path":"/guides/api/introduction","sidebar":"guides"},{"id":"api/parameters","path":"/guides/api/parameters","sidebar":"guides"},{"id":"api/ratelimiting","path":"/guides/api/ratelimiting","sidebar":"guides"},{"id":"cli/introduction","path":"/guides/cli/introduction","sidebar":"guides"},{"id":"overview/about","path":"/guides/","sidebar":"guides"},{"id":"overview/examples","path":"/guides/examples","sidebar":"guides"},{"id":"sdks/alpha","path":"/guides/sdks/alpha","sidebar":"guides"},{"id":"sdks/backoff","path":"/guides/sdks/backoff","sidebar":"guides"},{"id":"sdks/configuration","path":"/guides/sdks/configuration","sidebar":"guides"},{"id":"sdks/installation","path":"/guides/sdks/installation","sidebar":"guides"},{"id":"sdks/introduction","path":"/guides/sdks/introduction","sidebar":"guides"},{"id":"terraform/introduction","path":"/guides/terraform/introduction","sidebar":"guides"}],"draftIds":[],"sidebars":{"guides":{"link":{"path":"/guides/","label":"overview/about"}}}}],"breadcrumbs":false}}}'),o=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-tag-manager":{"type":"package","name":"@docusaurus/plugin-google-tag-manager","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-plugin-redoc":{"type":"package","name":"docusaurus-plugin-redoc","version":"1.6.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"2.4.3"},"docusaurus-theme-redoc":{"type":"package","name":"docusaurus-theme-redoc","version":"1.6.4"}}}'),c={siteConfig:a.default,siteMetadata:l,globalData:i,i18n:o,codeTranslations:s},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(412),i=n(5742),o=n(8780),s=n(821);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,o.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(i.Z,null,r.createElement("title",null,"Page Error")),r.createElement(s.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.default.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){var n;const e={error:t,tryAgain:()=>this.setState({error:null})};return(null!=(n=this.props.fallback)?n:d)(e)}return null!=e?e:null}}},412:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),a=n(405);function i(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),a=n(7294),i=n(3727),o=n(8780),s=n(2263),l=n(3919),c=n(412);const u=a.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){var n,p;let{isNavLink:f,to:m,href:h,activeClassName:g,isActive:b,"data-noBrokenLinkCheck":y,autoAddBaseUrl:v=!0,...k}=e;const{siteConfig:{trailingSlash:w,baseUrl:E}}=(0,s.Z)(),{withBaseUrl:S}=(0,d.C)(),x=(0,a.useContext)(u),_=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>_.current));const T=m||h;const C=(0,l.Z)(T),P=null==T?void 0:T.replace("pathname://","");let L=void 0!==P?(A=P,v&&(e=>e.startsWith("/"))(A)?S(A):A):void 0;var A;L&&C&&(L=(0,o.applyTrailingSlash)(L,{trailingSlash:w,baseUrl:E}));const I=(0,a.useRef)(!1),R=f?i.OL:i.rU,N=c.default.canUseIntersectionObserver,O=(0,a.useRef)(),D=()=>{I.current||null==L||(window.docusaurus.preload(L),I.current=!0)};(0,a.useEffect)((()=>(!N&&C&&null!=L&&window.docusaurus.prefetch(L),()=>{N&&O.current&&O.current.disconnect()})),[O,L,N,C]);const M=null!=(n=null==(p=L)?void 0:p.startsWith("#"))&&n,U=!L||!C||M;return U||y||x.collectLink(L),U?a.createElement("a",(0,r.Z)({ref:_,href:L},T&&!C&&{target:"_blank",rel:"noopener noreferrer"},k)):a.createElement(R,(0,r.Z)({},k,{onMouseEnter:D,onTouchStart:D,innerRef:e=>{_.current=e,N&&e&&C&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=L&&window.docusaurus.prefetch(L))}))})),O.current.observe(e))},to:L},f&&{isActive:b,activeClassName:g}))}const f=a.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=null==t?void 0:t[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function o(e){var t,n;let{id:r,message:a}=e;if(void 0===r&&void 0===a)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(t=null!=(n=i[null!=r?r:a])?n:a)?t:r}function s(e,t){let{message:n,id:r}=e;return a(o({message:n,id:r}),t)}function l(e){let{children:t,id:n,values:i}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const s=o({message:t,id:n});return r.createElement(r.Fragment,null,a(s,i))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>o,Z:()=>s});var r=n(7294),a=n(2263),i=n(3919);function o(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:o=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,i.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return o?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=o();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),a=n(8940);function i(){return(0,r.useContext)(a._)}},8084:(e,t,n)=>{"use strict";n.d(t,{OD:()=>i,eZ:()=>o});var r=n(2263),a=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin.');return n}function o(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=null==r?void 0:r[t];if(!o&&n.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin with id "'+t+'".');return o}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),a=n(8934);function i(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[i,o]=n;const s=a?a+"."+i:i;r(o)?e(o,s):t[s]=o}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var r=n(7294);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),o=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...null==n?void 0:n.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return r.createElement(a.Provider,{value:o},t)}},4104:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>p,_r:()=>c,Jo:()=>g,zh:()=>u,yW:()=>m,gB:()=>f});var r=n(6775),a=n(8084);const i=e=>e.versions.find((e=>e.isLast));function o(e,t){const n=i(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function s(e,t){const n=o(e,t),a=null==n?void 0:n.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const l={},c=()=>{var e;return null!=(e=(0,a.OD)("docusaurus-plugin-content-docs"))?e:l},u=e=>(0,a.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),i=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!i&&n.failfast)throw new Error("Can't find active docs plugin for \""+t+'" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: '+Object.values(e).map((e=>e.path)).join(", "));return i}(t,n,e)}function p(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:o(t.pluginData,n)}}function f(e){return u(e).versions}function m(e){const t=u(e);return i(t)}function h(e){const t=u(e),{pathname:n}=(0,r.TH)();return s(t,n)}function g(e){const t=u(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=i(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const i={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(1114)("./prism-"+e)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function i(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},821:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Tt});var r=n(7294),a=n(6010),i=n(4763),o=n(833),s=n(7462),l=n(6775),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=null!=(n=document.querySelector("main:first-of-type"))?n:document.getElementById(d);var n;t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){var t;const n=null!=(t=e.children)?t:m,{containerRef:a,onClick:i}=f();return r.createElement("div",{ref:a,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:"#"+d,onClick:i}),n))}var g=n(5281),b=n(9727);const y={skipToContent:"skipToContent_fXgn"};function v(){return r.createElement(h,{className:y.skipToContent})}var k=n(6668),w=n(9689);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:i=1.2,className:o,...l}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:a,strokeWidth:i},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={announcementBar:"announcementBar_s0pr",announcementBarPlaceholder:"announcementBarPlaceholder_qxfj",announcementBarClose:"announcementBarClose_iXyO",announcementBarContent:"announcementBarContent_dpRF"};function x(){const{isActive:e,close:t}=(0,w.nT)(),{announcementBar:n}=(0,k.L)();if(!e)return null;const{content:i,isCloseable:o}=n;return r.createElement("div",{className:S.announcementBar,role:"banner"},o&&r.createElement("div",{className:S.announcementBarPlaceholder}),r.createElement("div",{className:S.announcementBarContent,dangerouslySetInnerHTML:{__html:i}}),o?r.createElement("button",{type:"button",className:(0,a.Z)("clean-btn close",S.announcementBarClose),onClick:t,"aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},r.createElement(E,{width:14,height:14,strokeWidth:3.1})):null)}var _=n(3163),T=n(2466);var C=n(902),P=n(3102);const L=r.createContext(null);function A(e){let{children:t}=e;const n=function(){const e=(0,_.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),i=null!==t.component,o=(0,C.D9)(i);return(0,r.useEffect)((()=>{i&&!o&&a(!0)}),[i,o]),(0,r.useEffect)((()=>{i?e.shown||a(!0):a(!1)}),[e.shown,i]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(L.Provider,{value:n},t)}function I(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function R(){const e=(0,r.useContext)(L);if(!e)throw new C.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),i=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:I(i)})),[a,i,t])}function N(e){let{header:t,primaryMenu:n,secondaryMenu:i}=e;const{shown:o}=R();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},i)))}var O=n(2949),D=n(2389);function M(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const B={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function F(e){let{className:t,buttonClassName:n,value:i,onChange:o}=e;const s=(0,D.Z)(),l=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===i?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(B.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",B.toggleButton,!s&&B.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===i?"light":"dark"),disabled:!s,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(M,{className:(0,a.Z)(B.toggleIcon,B.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)(B.toggleIcon,B.darkToggleIcon)})))}const j=r.memo(F),$={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function z(e){let{className:t}=e;const n=(0,k.L)().navbar.style,a=(0,k.L)().colorMode.disableSwitch,{colorMode:i,setColorMode:o}=(0,O.I)();return a?null:r.createElement(j,{className:t,buttonClassName:"dark"===n?$.darkNavbarColorModeToggle:void 0,value:i,onChange:o})}var H=n(1327);function W(){return r.createElement(H.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function q(){const e=(0,_.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function G(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(W,null),r.createElement(z,{className:"margin-right--md"}),r.createElement(q,null))}var Z=n(9960),V=n(4996),K=n(3919),X=n(8022),Y=n(9471);function Q(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:i,label:o,html:l,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const p=(0,V.Z)(a),f=(0,V.Z)(t),m=(0,V.Z)(i,{forcePrependBaseUrl:!0}),h=o&&i&&!(0,K.Z)(i),g=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,o,h&&r.createElement(Y.Z,c&&{width:12,height:12}))};return i?r.createElement(Z.Z,(0,s.Z)({href:u?m:i},d,g)):r.createElement(Z.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?(0,X.F)(n,t.pathname):t.pathname.startsWith(f)},d,g))}function J(e){let{className:t,isDropdownItem:n=!1,...i}=e;const o=r.createElement(Q,(0,s.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},i));return n?r.createElement("li",null,o):o}function ee(e){let{className:t,isDropdownItem:n,...i}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(Q,(0,s.Z)({className:(0,a.Z)("menu__link",t)},i)))}function te(e){var t;let{mobile:n=!1,position:a,...i}=e;const o=n?ee:J;return r.createElement(o,(0,s.Z)({},i,{activeClassName:null!=(t=i.activeClassName)?t:n?"menu__link--active":"navbar__link--active"}))}var ne=n(6043),re=n(8596),ae=n(2263);function ie(e,t){return e.some((e=>function(e,t){return!!(0,re.Mg)(e.to,t)||!!(0,X.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function oe(e){var t;let{items:n,position:i,className:o,onClick:l,...c}=e;const u=(0,r.useRef)(null),[d,p]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&p(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===i,"dropdown--show":d})},r.createElement(Q,(0,s.Z)({"aria-haspopup":"true","aria-expanded":d,role:"button",href:c.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},c,{onClick:c.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),p(!d))}}),null!=(t=c.children)?t:c.label),r.createElement("ul",{className:"dropdown__menu"},n.map(((e,t)=>r.createElement(Fe,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function se(e){var t;let{items:n,className:i,position:o,onClick:c,...u}=e;const d=function(){const{siteConfig:{baseUrl:e}}=(0,ae.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),p=ie(n,d),{collapsed:f,toggleCollapsed:m,setCollapsed:h}=(0,ne.u)({initialState:()=>!p});return(0,r.useEffect)((()=>{p&&h(!p)}),[d,p,h]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(Q,(0,s.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",i)},u,{onClick:e=>{e.preventDefault(),m()}}),null!=(t=u.children)?t:u.label),r.createElement(ne.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},n.map(((e,t)=>r.createElement(Fe,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:c,activeClassName:"menu__link--active"},e,{key:t}))))))}function le(e){let{mobile:t=!1,...n}=e;const a=t?se:oe;return r.createElement(a,n)}var ce=n(4711);function ue(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const de="iconLanguage_nlXk";function pe(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var fe=n(830),me=["translations"];function he(){return he=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var ve="Ctrl";var ke=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,i=ye(e,me),o=a.buttonText,s=void 0===o?"Search":o,l=a.buttonAriaLabel,c=void 0===l?"Search":l,u=ge((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(ve))}),[]),r.createElement("button",he({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},i,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(fe.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===ve?r.createElement(pe,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),we=n(5742),Ee=n(6177),Se=n(239),xe=n(3320);var _e=n(3935);const Te={button:{buttonText:(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,c.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,c.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,c.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,c.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,c.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,c.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,c.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,c.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,c.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,c.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,c.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,c.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,c.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,c.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,c.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,c.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,c.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,c.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Ce=null;function Pe(e){let{hit:t,children:n}=e;return r.createElement(Z.Z,{to:t.url},n)}function Le(e){let{state:t,onClose:n}=e;const a=(0,Ee.M)();return r.createElement(Z.Z,{to:a(t.query),onClick:n},r.createElement(c.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits}},"See all {count} results"))}function Ae(e){var t,a;let{contextualSearch:i,externalUrlRegex:o,...c}=e;const{siteMetadata:u}=(0,ae.Z)(),d=(0,Se.l)(),p=function(){const{locale:e,tags:t}=(0,xe._q)();return["language:"+e,t.map((e=>"docusaurus_tag:"+e))]}(),f=null!=(t=null==(a=c.searchParameters)?void 0:a.facetFilters)?t:[],m=i?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(p,f):f,h={...c.searchParameters,facetFilters:m},g=(0,l.k6)(),b=(0,r.useRef)(null),y=(0,r.useRef)(null),[v,k]=(0,r.useState)(!1),[w,E]=(0,r.useState)(void 0),S=(0,r.useCallback)((()=>Ce?Promise.resolve():Promise.all([n.e(780).then(n.bind(n,6780)),Promise.all([n.e(532),n.e(945)]).then(n.bind(n,6945)),Promise.all([n.e(532),n.e(894)]).then(n.bind(n,8894))]).then((e=>{let[{DocSearchModal:t}]=e;Ce=t}))),[]),x=(0,r.useCallback)((()=>{S().then((()=>{b.current=document.createElement("div"),document.body.insertBefore(b.current,document.body.firstChild),k(!0)}))}),[S,k]),_=(0,r.useCallback)((()=>{var e;k(!1),null==(e=b.current)||e.remove()}),[k]),T=(0,r.useCallback)((e=>{S().then((()=>{k(!0),E(e.key)}))}),[S,k,E]),C=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,X.F)(o,t)?window.location.href=t:g.push(t)}}).current,P=(0,r.useRef)((e=>c.transformItems?c.transformItems(e):e.map((e=>({...e,url:d(e.url)}))))).current,L=(0,r.useMemo)((()=>e=>r.createElement(Le,(0,s.Z)({},e,{onClose:_}))),[_]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",u.docusaurusVersion),e)),[u.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,i=e.onInput,o=e.searchButtonRef;r.useEffect((function(){function e(e){(27===e.keyCode&&t||"k"===e.key&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),o&&o.current===document.activeElement&&i&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&i(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,i,o])}({isOpen:v,onOpen:x,onClose:_,onInput:T,searchButtonRef:y}),r.createElement(r.Fragment,null,r.createElement(we.Z,null,r.createElement("link",{rel:"preconnect",href:"https://"+c.appId+"-dsn.algolia.net",crossOrigin:"anonymous"})),r.createElement(ke,{onTouchStart:S,onFocus:S,onMouseOver:S,onClick:x,ref:y,translations:Te.button}),v&&Ce&&b.current&&(0,_e.createPortal)(r.createElement(Ce,(0,s.Z)({onClose:_,initialScrollY:window.scrollY,initialQuery:w,navigator:C,transformItems:P,hitComponent:Pe,transformSearchClient:A},c.searchPagePath&&{resultsFooterComponent:L},c,{searchParameters:h,placeholder:Te.placeholder,translations:Te.modal})),b.current))}function Ie(){const{siteConfig:e}=(0,ae.Z)();return r.createElement(Ae,e.themeConfig.algolia)}const Re={searchBox:"searchBox_ZlJk"};function Ne(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,Re.searchBox)},t)}var Oe=n(4104),De=n(3438);var Me=n(373);const Ue=e=>e.docs.find((t=>t.id===e.mainDocId));const Be={default:te,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...i}=e;const{i18n:{currentLocale:o,locales:u,localeConfigs:d}}=(0,ae.Z)(),p=(0,ce.l)(),{search:f,hash:m}=(0,l.TH)(),h=[...n,...u.map((e=>{const n=""+("pathname://"+p.createUrl({locale:e,fullyQualified:!1}))+f+m;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===o?t?"menu__link--active":"dropdown__link--active":""}})),...a],g=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[o].label;return r.createElement(le,(0,s.Z)({},i,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(ue,{className:de}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(Ne,{className:n},r.createElement(Ie,null))},dropdown:le,html:function(e){let{value:t,className:n,mobile:i=!1,isDropdownItem:o=!1}=e;const s=o?"li":"div";return r.createElement(s,{className:(0,a.Z)({navbar__item:!i&&!o,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:o}=(0,Oe.Iw)(a),l=(0,De.vY)(t,a);return null===l?null:r.createElement(te,(0,s.Z)({exact:!0},i,{isActive:()=>(null==o?void 0:o.path)===l.path||!(null==o||!o.sidebar)&&o.sidebar===l.sidebar,label:null!=n?n:l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:o}=(0,Oe.Iw)(a),l=(0,De.oz)(t,a).link;if(!l)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+t+"\" doesn't have anything to be linked to.");return r.createElement(te,(0,s.Z)({exact:!0},i,{isActive:()=>(null==o?void 0:o.sidebar)===t,label:null!=n?n:l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...i}=e;const o=(0,De.lO)(a)[0],l=null!=t?t:o.label,c=null!=n?n:(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return r.createElement(te,(0,s.Z)({},i,{label:l,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:i,dropdownItemsAfter:o,...u}=e;const{search:d,hash:p}=(0,l.TH)(),f=(0,Oe.Iw)(n),m=(0,Oe.gB)(n),{savePreferredVersionName:h}=(0,Me.J)(n),g=[...i,...m.map((e=>{var t;const n=null!=(t=f.alternateDocVersions[e.name])?t:Ue(e);return{label:e.label,to:""+n.path+d+p,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...o],b=(0,De.lO)(n)[0],y=t&&g.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,v=t&&g.length>1?void 0:Ue(b).path;return g.length<=1?r.createElement(te,(0,s.Z)({},u,{mobile:t,label:y,to:v,isActive:a?()=>!1:void 0})):r.createElement(le,(0,s.Z)({},u,{mobile:t,label:y,to:v,items:g,isActive:a?()=>!1:void 0}))}};function Fe(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),i=Be[a];if(!i)throw new Error('No NavbarItem component found for type "'+t+'".');return r.createElement(i,n)}function je(){const e=(0,_.e)(),t=(0,k.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Fe,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function $e(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function ze(){const e=0===(0,k.L)().navbar.items.length,t=R();return r.createElement(r.Fragment,null,!e&&r.createElement($e,{onClick:()=>t.hide()}),t.content)}function He(){const e=(0,_.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(N,{header:r.createElement(G,null),primaryMenu:r.createElement(je,null),secondaryMenu:r.createElement(ze,null)}):null}const We={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function qe(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ge(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:i}}=(0,k.L)(),o=(0,_.e)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),i=(0,r.useRef)(0),o=(0,r.useCallback)((e=>{null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,T.RF)(((t,r)=>{let{scrollY:o}=t;if(!e)return;if(o=s?n(!1):o+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:o,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:s,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[We.navbarHideable,!l&&We.navbarHidden],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":o.shown})},t,r.createElement(qe,{onClick:o.toggle}),r.createElement(He,null))}var Ze=n(8780);const Ve={errorBoundaryError:"errorBoundaryError_a6uf"};function Ke(e){return r.createElement("button",(0,s.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Xe(e){let{error:t}=e;const n=(0,Ze.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Ve.errorBoundaryError},n)}class Ye extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Qe="right";function Je(e){let{width:t=30,height:n=30,className:a,...i}=e;return r.createElement("svg",(0,s.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},i),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function et(){const{toggle:e,shown:t}=(0,_.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Je,null))}const tt={colorModeToggle:"colorModeToggle_DEke"};function nt(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ye,{key:t,onError:t=>new Error("A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n"+JSON.stringify(e,null,2),{cause:t})},r.createElement(Fe,e)))))}function rt(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function at(){const e=(0,_.e)(),t=(0,k.L)().navbar.items,[n,a]=function(e){function t(e){var t;return"left"===(null!=(t=e.position)?t:Qe)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),i=t.find((e=>"search"===e.type));return r.createElement(rt,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(et,null),r.createElement(W,null),r.createElement(nt,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(nt,{items:a}),r.createElement(z,{className:tt.colorModeToggle}),!i&&r.createElement(Ne,null,r.createElement(Ie,null)))})}function it(){return r.createElement(Ge,null,r.createElement(at,null))}function ot(e){let{item:t}=e;const{to:n,href:a,label:i,prependBaseUrlToHref:o,...l}=t,c=(0,V.Z)(n),u=(0,V.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(Z.Z,(0,s.Z)({className:"footer__link-item"},a?{href:o?u:a}:{to:c},l),i,a&&!(0,K.Z)(a)&&r.createElement(Y.Z,null))}function st(e){var t;let{item:n}=e;return n.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):r.createElement("li",{key:null!=(t=n.href)?t:n.to,className:"footer__item"},r.createElement(ot,{item:n}))}function lt(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(st,{key:t,item:e})))))}function ct(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(lt,{key:t,column:e}))))}function ut(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function dt(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(ot,{item:t})}function pt(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(dt,{item:e}),t.length!==n+1&&r.createElement(ut,null))))))}function ft(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(ct,{columns:t}):r.createElement(pt,{links:t})}var mt=n(941);const ht={footerLogoLink:"footerLogoLink_BH7S"};function gt(e){var t;let{logo:n}=e;const{withBaseUrl:i}=(0,V.C)(),o={light:i(n.src),dark:i(null!=(t=n.srcDark)?t:n.src)};return r.createElement(mt.Z,{className:(0,a.Z)("footer__logo",n.className),alt:n.alt,sources:o,width:n.width,height:n.height,style:n.style})}function bt(e){let{logo:t}=e;return t.href?r.createElement(Z.Z,{href:t.href,className:ht.footerLogoLink,target:t.target},r.createElement(gt,{logo:t})):r.createElement(gt,{logo:t})}function yt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function vt(e){let{style:t,links:n,logo:i,copyright:o}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(i||o)&&r.createElement("div",{className:"footer__bottom text--center"},i&&r.createElement("div",{className:"margin-bottom--sm"},i),o)))}function kt(){const{footer:e}=(0,k.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:i}=e;return r.createElement(vt,{style:i,links:n&&n.length>0&&r.createElement(ft,{links:n}),logo:a&&r.createElement(bt,{logo:a}),copyright:t&&r.createElement(yt,{copyright:t})})}const wt=r.memo(kt),Et=(0,C.Qc)([O.S,w.pl,T.OC,Me.L5,o.VC,function(e){let{children:t}=e;return r.createElement(P.n2,null,r.createElement(_.M,null,r.createElement(A,null,t)))}]);function St(e){let{children:t}=e;return r.createElement(Et,null,t)}function xt(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ke,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Xe,{error:t})))))}const _t={mainWrapper:"mainWrapper_z2l0"};function Tt(e){const{children:t,noFooter:n,wrapperClassName:s,title:l,description:c}=e;return(0,b.t)(),r.createElement(St,null,r.createElement(o.d,{title:l,description:c}),r.createElement(v,null),r.createElement(x,null),r.createElement(it,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,_t.mainWrapper,s)},r.createElement(i.Z,{fallback:e=>r.createElement(xt,e)},t)),!n&&r.createElement(wt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),i=n(9960),o=n(4996),s=n(2263),l=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const i={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},s=a.createElement(c.Z,{className:t.className,sources:i,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},s):s}function d(e){var t;const{siteConfig:{title:n}}=(0,s.Z)(),{navbar:{title:c,logo:d}}=(0,l.L)(),{imageClassName:p,titleClassName:f,...m}=e,h=(0,o.Z)((null==d?void 0:d.href)||"/"),g=c?"":n,b=null!=(t=null==d?void 0:d.alt)?t:g;return a.createElement(i.Z,(0,r.Z)({to:h},m,(null==d?void 0:d.target)&&{target:d.target}),d&&a.createElement(u,{logo:d,alt:b,imageClassName:p}),null!=c&&a.createElement("b",{className:f},c))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294),a=n(5742);function i(e){let{locale:t,version:n,tag:i}=e;const o=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),i&&r.createElement("meta",{name:"docusaurus_tag",content:i}),o&&r.createElement("meta",{name:"docsearch:language",content:o}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),i&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:i}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),i=n(6010),o=n(2389),s=n(2949);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,o.Z)(),{colorMode:n}=(0,s.I)(),{sources:c,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,f.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,i.Z)(l.themedImage,l["themedImage--"+e],u)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>g});var r=n(7462),a=n(7294),i=n(412),o=n(1442);const s="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(null!=t&&t),i=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:i}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const i=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){var t,n;const a=e.scrollHeight,i=null!=(t=null==r?void 0:r.duration)?t:function(e){if((0,o.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(a);return{transition:"height "+i+"ms "+(null!=(n=null==r?void 0:r.easing)?n:s),height:a+"px"}}function l(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!i.current)return d(e,n),void(i.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!i.default.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:i,onCollapseTransitionEnd:o,className:s,disableSSRStyle:l}=e;const c=(0,a.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:i}),a.createElement(t,{ref:c,style:l?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),null==o||o(n))},className:s},r)}function h(e){let{collapsed:t,...n}=e;const[i,o]=(0,a.useState)(!t),[s,l]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||o(!0)}),[t]),(0,a.useLayoutEffect)((()=>{i&&l(t)}),[i,t]),i?a.createElement(m,(0,r.Z)({},n,{collapsed:s})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),a=n(2389),i=n(12),o=n(902),s=n(6668);const l=(0,i.WA)("docusaurus.announcement.dismiss"),c=(0,i.WA)("docusaurus.announcement.id"),u=()=>"true"===l.get(),d=e=>l.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,i]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{i(u())}),[]);const o=(0,r.useCallback)((()=>{d(!0),i(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||i(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:o})),[e,n,o])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new o.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),a=n(412),i=n(902),o=n(12),s=n(6668);const l=r.createContext(void 0),c="theme",u=(0,o.WA)(c),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>a.default.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{u.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,i]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const o=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(i(t),a&&m(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&o(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,o]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:o(null)};return e.addListener(r),()=>e.removeListener(r)}),[o,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:o,get isDarkTheme(){return a===d.dark},setLightTheme(){o(d.light)},setDarkTheme(){o(d.dark)}})),[a,o])}();return r.createElement(l.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>g,Oh:()=>v});var r=n(7294),a=n(4104),i=n(9935),o=n(6668),s=n(3438),l=n(902),c=n(12);const u=e=>"docs-preferred-version-"+e,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,o.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[i,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[i,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function g(e){let{children:t}=e;return s.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function y(e){var t;void 0===e&&(e=i.m);const n=(0,a.zh)(e),[o,s]=b(),{preferredVersionName:l}=o[e];return{preferredVersion:null!=(t=n.versions.find((e=>e.name===l)))?t:null,savePreferredVersionName:(0,r.useCallback)((t=>{s.savePreferredVersion(e,t)}),[s,e])}}function v(){const e=(0,a._r)(),[t]=b();function n(n){var r;const a=e[n],{preferredVersionName:i}=t[n];return null!=(r=a.versions.find((e=>e.name===i)))?r:null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var r=n(7294),a=n(902);const i=Symbol("EmptyContext"),o=r.createContext(i);function s(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(o.Provider,{value:i},t)}function l(){const e=(0,r.useContext)(o);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>o});var r=n(7294),a=n(902);const i=r.createContext(null);function o(e){let{children:t,version:n}=e;return r.createElement(i.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>p});var r=n(7294),a=n(3102),i=n(7524),o=n(1980),s=n(6668),l=n(902);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,i.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,o.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>o});var r=n(7294),a=n(902);const i=r.createContext(null);function o(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(i.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>i});var r=n(7294);const a="navigation-with-keyboard";function i(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},6177:(e,t,n)=>{"use strict";n.d(t,{K:()=>s,M:()=>l});var r=n(7294),a=n(2263),i=n(1980);const o="q";function s(){return(0,i.Nc)(o)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>""+e+n+"?"+o+"="+encodeURIComponent(t)),[e,n])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(412);const i={desktop:"desktop",mobile:"mobile",ssr:"ssr"},o=996;function s(){return a.default.canUseDOM?window.innerWidth>o?i.desktop:i.mobile:i.ssr}const l=!1;function c(){const[e,t]=(0,r.useState)((()=>l?"ssr":s()));return(0,r.useEffect)((()=>{function e(){t(s())}const n=l?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>"theme-admonition-"+e},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>"theme-doc-sidebar-item-category-level-"+e,docSidebarItemLinkLevel:e=>"theme-doc-sidebar-item-link-level-"+e},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>m,_F:()=>b,cE:()=>p,hI:()=>S,lO:()=>k,oz:()=>w,s1:()=>v,vY:()=>E,xz:()=>f});var r=n(7294),a=n(6775),i=n(8790),o=n(4104),s=n(373),l=n(4477),c=n(1116),u=n(7392),d=n(8596);const p=!!o._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error("no version doc found by id="+e);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),g=(e,t)=>e.some((e=>b(e,t)));function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||g(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const i of t)if("category"===i.type&&((0,d.Mg)(i.href,n)||e(i.items))||"link"===i.type&&(0,d.Mg)(i.href,n)){return r&&"category"!==i.type||a.unshift(i),!0}return!1}(t),a}function v(){var e;const t=(0,c.V)(),{pathname:n}=(0,a.TH)();return!1!==(null==(e=(0,o.gA)())?void 0:e.pluginData.breadcrumbs)&&t?y({sidebarItems:t.items,pathname:n}):null}function k(e){const{activeVersion:t}=(0,o.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,o.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function w(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error("Can't find any sidebar with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((e=>e.name)).join(", ")+'".\nAvailable sidebar ids are:\n- '+t.map((e=>e[0])).join("\n- "));return r[1]}),[e,n])}function E(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error("Couldn't find any doc with id \""+e+'" in version'+(n.length>1?"s":"")+' "'+n.map((e=>e.name)).join(", ")+'".\nAvailable doc ids are:\n- '+(0,u.j)(t.map((e=>e.id))).join("\n- "))}return r}),[e,n])}function S(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),o=t.routes,s=o.find((e=>(0,a.LX)(r.pathname,e)));if(!s)return null;const l=s.sidebar,c=l?n.docsSidebars[l]:void 0;return{docElement:(0,i.H)(o),sidebarName:l,sidebarItems:c}}},2128:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(2263);function a(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:a}=t;return null!=e&&e.trim().length?e.trim()+" "+a+" "+n:n}},1980:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>c,Rb:()=>s,_X:()=>l});var r=n(7294),a=n(6775),i=n(1688),o=n(902);function s(e){!function(e){const t=(0,a.k6)(),n=(0,o.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function l(e){return function(e){const t=(0,a.k6)();return(0,i.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function c(e){var t;const n=null!=(t=l(e))?t:"",i=function(){const e=(0,a.k6)();return(0,r.useCallback)(((t,n,r)=>{const a=new URLSearchParams(e.location.search);n?a.set(t,n):a.delete(t),(null!=r&&r.push?e.push:e.replace)({search:a.toString()})}),[e])}();return[n,(0,r.useCallback)(((t,n)=>{i(e,t,n)}),[i,e])]}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},833:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(7294),a=n(6010),i=n(5742),o=n(226);function s(){const e=r.useContext(o._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4996),c=n(2128);function u(e){let{title:t,description:n,keywords:a,image:o,children:s}=e;const u=(0,c.p)(t),{withBaseUrl:d}=(0,l.C)(),p=o?d(o,{absolute:!0}):void 0;return r.createElement(i.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),s)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const o=r.useContext(d),s=(0,a.Z)(o,t);return r.createElement(d.Provider,{value:s},r.createElement(i.Z,null,r.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),i="plugin-"+n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"");const o="plugin-id-"+n.plugin.id;return r.createElement(p,{className:(0,a.Z)(i,o)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>o,Qc:()=>c,Ql:()=>l,i6:()=>s,zX:()=>i});var r=n(7294);const a=n(412).default.canUseDOM?r.useLayoutEffect:r.useEffect;function i(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function o(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){var n,r,a,i;super(),this.name="ReactContextError",this.message="Hook "+(null!=(n=null==(r=this.stack)||null==(a=r.split("\n")[1])||null==(i=a.match(/at (?:\w+\.)?(?\w+)/))?void 0:i.groups.name)?n:"")+" is called outside the <"+e+">. "+(null!=t?t:"")}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8022:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>o,Ns:()=>s});var r=n(7294),a=n(723),i=n(2263);function o(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:e+"/")?void 0:t.toLowerCase()};return n(e)===n(t)}function s(){const{baseUrl:e}=(0,i.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>{var t;return null!=(t=e.routes)?t:[]})))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>l,RF:()=>d,o5:()=>p});var r=n(7294),a=n(412),i=n(2389),o=n(902);const s=r.createContext(void 0);function l(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(s.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ScrollControllerProvider");return e}const u=()=>a.default.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),i=(0,o.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();i(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[i,n,...t])}function p(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>null==n.current?void 0:n.current()))})),{blockElementScrollPositionUntilNextRender:a}}function f(){const e=(0,r.useRef)(null),t=(0,i.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>null==e.current?void 0:e.current()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>o,_q:()=>l,os:()=>s});var r=n(4104),a=n(2263),i=n(373);const o="default";function s(e,t){return"docs-"+e+"-"+t}function l(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,i.Oh)();const c=[o,...Object.keys(t).map((function(e){var r;const a=(null==n?void 0:n.activePlugin.pluginId)===e?n.activeVersion:void 0,i=l[e],o=t[e].versions.find((e=>e.isLast));return s(e,(null!=(r=null!=a?a:i)?r:o).name)}))];return{locale:e.currentLocale,tags:c}}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),a=n(1688);const i="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const i=document.createEvent("StorageEvent");i.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(i)}function s(e){if(void 0===e&&(e=i),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,l||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),l=!0),null}var t}let l=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error('Illegal storage API usage for storage key "'+e+'".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.')}return{get:t,set:t,del:t,listen:t}}(e);const n=s(null==t?void 0:t.persistence);return null===n?c:{get:()=>{try{return n.getItem(e)}catch(t){return console.error("Docusaurus storage error, can't get key="+e,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error("Docusaurus storage error, can't set "+e+"="+t,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error("Docusaurus storage error, can't delete key="+e,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error("Docusaurus storage error, can't listen for changes of key="+e,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),i=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(i,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6775),i=n(8780);function o(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:o,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,i.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===o?e:e.replace("/"+s+"/","/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return""+(r?t:"")+function(e){return e===o?""+u:""+u+e+"/"}(n)+d}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>o});var r=n(7294),a=n(6775),i=n(902);function o(e){const t=(0,a.TH)(),n=(0,i.D9)(t),o=(0,i.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&o({location:t,previousLocation:n})}),[o,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},6278:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},239:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(7294),a=n(8022),i=n(4996),o=n(6278);function s(){const{withBaseUrl:e}=(0,i.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,o.L)();return(0,r.useCallback)((r=>{const i=new URL(r);if((0,a.F)(t,i.href))return r;const o=""+(i.pathname+i.hash);return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(o,n))}),[e,t,n])}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),i="/"===a||a===r?a:(o=a,n?function(e){return e.endsWith("/")?e:e+"/"}(o):function(e){return e.endsWith("/")?e.slice(0,-1):e}(o));var o;return e.replace(a,i)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var i=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},4750:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});r(n(412)).default.canUseDOM&&(window.Prism=window.Prism||{},window.Prism.manual=!0)},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>k,q_:()=>T,ob:()=>f,PP:()=>P,Ep:()=>p});var r=n(7462);function a(e){return"/"===e.charAt(0)}function i(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=o[p];"."===f?i(o,p):".."===f?(i(o,p),d++):d&&(i(o,p),d--)}if(!c)for(;d--;d)o.unshift("..");!c||""===o[0]||o[0]&&a(o[0])||o.unshift("");var m=o.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(2177);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var i;"string"==typeof e?(i=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var i=t.indexOf("?");return-1!==i&&(n=t.substr(i),t=t.substr(0,i)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),i.state=t):(void 0===(i=(0,r.Z)({},e)).pathname&&(i.pathname=""),i.search?"?"!==i.search.charAt(0)&&(i.search="?"+i.search):i.search="",i.hash?"#"!==i.hash.charAt(0)&&(i.hash="#"+i.hash):i.hash="",void 0!==t&&void 0===i.state&&(i.state=t));try{i.pathname=decodeURI(i.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+i.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(i.key=n),a?i.pathname?"/"!==i.pathname.charAt(0)&&(i.pathname=o(i.pathname,a.pathname)):i.pathname=a.pathname:i.pathname||(i.pathname="/"),i}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var i="function"==typeof e?e(t,n):e;"string"==typeof i?"function"==typeof r?r(i,a):a(!0):a(!1!==i)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,h(),k.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(k.entries[k.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=k.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},i={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},o={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?o:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=o;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var o=u(n);d&&(o=o.concat(d(n)));for(var s=l(t),h=l(n),g=0;g{"use strict";e.exports=function(e,t,n,r,a,i,o,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,i,o,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1304:(e,t,n)=>{"use strict";n.r(t)},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function i(e){return 100*(-1+e)}function o(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+i(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(e)+"%,0)"}:{"margin-left":i(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var i=n.render(!t),c=i.querySelector(r.barSelector),u=r.speed,d=r.easing;return i.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,o(e,u,d)),1===e?(l(i,{transition:"none",opacity:1}),i.offsetWidth,setTimeout((function(){l(i,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,o=t.querySelector(r.barSelector),s=e?"-100":i(n.status||0),c=document.querySelector(r.parent);return l(o,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,i=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+i)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function i(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&i(e,n,r);else i(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var i,o,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l{"use strict";n.d(t,{Z:()=>i});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var x=E.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,T=1;if(y){if(!(_=i(w,S,e,b))||_.index>=e.length)break;var C=_.index,P=_.index+_[0].length,L=S;for(L+=E.value.length;C>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var A=E;A!==t.tail&&(Ld.reach&&(d.reach=O);var D=E.prev;if(R&&(D=l(t,D,R),S+=R.length),c(t,D,T),E=l(t,D,new a(p,g?r.tokenize(I,g):I,v,I)),N&&l(t,E,N),T>1){var M={cause:p+","+m,reach:O};o(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a"+i.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var i={};i[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",i)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=r.variable[1].inside,o=0;o]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),i=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function o(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+i+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:o(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:o(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:o(i),lookbehind:!0,greedy:!0},number:{pattern:o(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),i=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+i+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+i+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l=0&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],i=r.pattern.source;function o(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var i=e.tokenize(t,n);if(3===i.length){var o=[1,1];o.push.apply(o,l(i[1],e.languages.javascript,"javascript")),i.splice.apply(i,o)}return new e.Token("interpolation",i,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(i),lookbehind:!0}}),o=0,u={},d=l(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=s(o++,r)););return u[n]=a,n})).join(""),n,r),p=Object.keys(u);return o=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=p[o],i="string"==typeof r?r:r.content,s=i.indexOf(a);if(-1!==s){++o;var l=i.substring(0,s),d=c(u[a]),f=i.substring(s+a.length),m=[];if(l&&m.push(l),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[o("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),o("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),o("svg",/\bsvg/.source),o("markdown",/\b(?:markdown|md)/.source),o("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),o("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function i(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=i(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=i(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:i(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:i(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var o=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(o).join(""):""},s=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===o(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:o(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:i=!0),(i||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var l=o(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(l=o(t[r-1])+l,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",l,null,l)}a.content&&"string"!=typeof a.content&&s(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,i){if(n.language===r){var o=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof i&&!i(e))return e;for(var a,s=o.length;-1!==n.code.indexOf(a=t(r,s));)++s;return o[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,i=Object.keys(n.tokenStack);!function o(s){for(var l=0;l=i.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=i[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++a;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),y=[];h&&y.push.apply(y,o([h])),y.push(g),b&&y.push.apply(y,o([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&o(c.content)}return s}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const i=a},4677:()=>{Prism.languages.hcl={comment:/(?:\/\/|#).*|\/\*[\s\S]*?(?:\*\/|$)/,heredoc:{pattern:/<<-?(\w+\b)[\s\S]*?^[ \t]*\1/m,greedy:!0,alias:"string"},keyword:[{pattern:/(?:data|resource)\s+(?:"(?:\\[\s\S]|[^\\"])*")(?=\s+"[\w-]+"\s+\{)/i,inside:{type:{pattern:/(resource|data|\s+)(?:"(?:\\[\s\S]|[^\\"])*")/i,lookbehind:!0,alias:"variable"}}},{pattern:/(?:backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+(?=\{)/i,inside:{type:{pattern:/(backend|module|output|provider|provisioner|variable)\s+(?:[\w-]+|"(?:\\[\s\S]|[^\\"])*")\s+/i,lookbehind:!0,alias:"variable"}}},/[\w-]+(?=\s+\{)/],property:[/[-\w\.]+(?=\s*=(?!=))/,/"(?:\\[\s\S]|[^\\"])+"(?=\s*[:=])/],string:{pattern:/"(?:[^\\$"]|\\[\s\S]|\$(?:(?=")|\$+(?!\$)|[^"${])|\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\})*"/,greedy:!0,inside:{interpolation:{pattern:/(^|[^$])\$\{(?:[^{}"]|"(?:[^\\"]|\\[\s\S])*")*\}/,lookbehind:!0,inside:{type:{pattern:/(\b(?:count|data|local|module|path|self|terraform|var)\b\.)[\w\*]+/i,lookbehind:!0,alias:"variable"},keyword:/\b(?:count|data|local|module|path|self|terraform|var)\b/i,function:/\w+(?=\()/,string:{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0},number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,punctuation:/[!\$#%&'()*+,.\/;<=>@\[\\\]^`{|}~?:]/}}}},number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?(?:e[+-]?\d+)?/i,boolean:/\b(?:false|true)\b/i,punctuation:/[=\[\]{}]/}},9385:()=>{!function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",r=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+r),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+r+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism)},1114:(e,t,n)=>{var r={"./prism-hcl":4677,"./prism-ruby":9385};function a(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=i,e.exports=a,a.id=1114},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function i(){}i.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,i,o){if(o!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),i=n(3840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n