diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..f1cc0eac --- /dev/null +++ b/404.html @@ -0,0 +1,18 @@ + + + + + + + +Page Not Found | Spruce Developer Portal + + + + +
+
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/assets/community.png b/assets/community.png new file mode 100644 index 00000000..01c331ef Binary files /dev/null and b/assets/community.png differ diff --git a/assets/credible-architecture.png b/assets/credible-architecture.png new file mode 100644 index 00000000..b9ce965d Binary files /dev/null and b/assets/credible-architecture.png differ diff --git a/assets/credible_swimlane_issuance.png b/assets/credible_swimlane_issuance.png new file mode 100644 index 00000000..0d047c3f Binary files /dev/null and b/assets/credible_swimlane_issuance.png differ diff --git a/assets/credible_swimlane_vp_request.png b/assets/credible_swimlane_vp_request.png new file mode 100644 index 00000000..a7d31bf4 Binary files /dev/null and b/assets/credible_swimlane_vp_request.png differ diff --git a/assets/crediblehead.png b/assets/crediblehead.png new file mode 100644 index 00000000..7b9e0bd6 Binary files /dev/null and b/assets/crediblehead.png differ diff --git a/assets/css/styles.e956416b.css b/assets/css/styles.e956416b.css new file mode 100644 index 00000000..1a5e26fe --- /dev/null +++ b/assets/css/styles.e956416b.css @@ -0,0 +1,25 @@ +.admonition-icon,code{vertical-align:middle}.row .col,img{max-width:100%}.markdown li,body{word-wrap:break-word}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.button,.close{-webkit-appearance:none;cursor:pointer}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,.react-toggle{-webkit-user-select:none;-ms-user-select:none}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.button,.close,.menu__link,.navbar__link{cursor:pointer}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.footer__items,.menu__list,.pills__item{list-style-type:none}.navbar__title,.text--truncate{text-overflow:ellipsis;white-space:nowrap}.button,.dropdown__link,.navbar__title,.text--truncate{white-space:nowrap}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.dropdown>ul,.dropdown__menu{list-style:none;position:absolute}.react-toggle,html{-webkit-tap-highlight-color:transparent}:root{--ra-admonition-background-color:var(--ifm-alert-background-color);--ra-admonition-border-width:var(--ifm-alert-border-width);--ra-admonition-border-color:var(--ifm-alert-border-color);--ra-admonition-border-radius:var(--ifm-alert-border-radius);--ra-admonition-color:var(--ifm-alert-color);--ra-admonition-padding-vertical:var(--ifm-alert-padding-vertical);--ra-admonition-padding-horizontal:var(--ifm-alert-padding-horizontal);--ra-color-note:var(--ifm-color-secondary);--ra-color-important:var(--ifm-color-info);--ra-color-tip:var(--ifm-color-success);--ra-color-caution:var(--ifm-color-warning);--ra-color-warning:var(--ifm-color-danger);--ra-color-text-dark:var(--ifm-color-gray-900)}.admonition{margin-bottom:1em;--ra-admonition-icon-color:var(--ra-admonition-color)}.admonition:not(.alert){--ra-admonition-background-color:var(--ifm-color-primary);background-color:var(--ra-admonition-background-color);border:var(--ra-admonition-border-width) solid var(--ra-admonition-border-color);border-radius:var(--ra-admonition-border-radius);box-sizing:border-box;color:var(--ra-admonition-color);padding:var(--ra-admonition-padding-vertical) var(--ra-admonition-padding-horizontal)}.container,.row .col{padding:0 var(--ifm-spacing-horizontal);width:100%}.admonition h5{margin-bottom:8px;margin-top:0;text-transform:uppercase}.admonition-icon{display:inline-block;margin-right:.2em}.admonition-icon svg{stroke-width:0;fill:var(--ra-admonition-icon-color);stroke:var(--ra-admonition-icon-color);display:inline-block;height:22px;width:22px}.admonition-content>:last-child,blockquote>:last-child{margin-bottom:0}.admonition-note{--ra-admonition-color:var(--ra-color-text-dark)}:root{--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-color-primary:#3578e5;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-secondary:#ebedf0;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-success:#00a400;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-info:#54c7ec;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-warning:#ffba00;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-danger:#fa383e;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#606770;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,0.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,0.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,0.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,0.2),0 2px 4px 0 rgba(0,0,0,0.1);--ifm-z-index-dropdown:2;--ifm-z-index-fixed:3;--ifm-z-index-overlay:4;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-color:var(--ifm-color-emphasis-900);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.3rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-color-emphasis-100);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:inherit;--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:var(--ifm-color-emphasis-100);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-color:#6a737d;--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-padding-horizontal:1rem;--ifm-blockquote-padding-vertical:1rem;--ifm-hr-border-color:var(--ifm-color-emphasis-500);--ifm-hr-border-width:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:var(--ifm-global-border-width);--ifm-alert-color:var(--ifm-font-color-base-inverse);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size-sm:2rem;--ifm-avatar-photo-size-md:3rem;--ifm-avatar-photo-size-lg:4rem;--ifm-avatar-photo-size-xl:6rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.0625rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:1rem;--ifm-breadcrumb-padding-vertical:0.5rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-margin:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:1rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:1rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:80vw;--ifm-pagination-border-radius:calc(var(--ifm-global-radius)*var(--ifm-pagination-size-multiplier));--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.0625rem;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-size-multiplier:1;--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.0625rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--ifm-tabs-spacing:0.0625rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:#888;--ifm-scrollbar-thumb-hover-background-color:#555;--ifm-color-primary:#429383;--ifm-color-primary-dark:#327364;--ifm-color-primary-darker:#3a83a3;--ifm-color-primary-darkest:#2c6681;--ifm-color-primary-light:#84c95f;--ifm-color-primary-lighter:#c7df6a;--ifm-color-primary-lightest:#c7df6a;--ifm-code-font-size:95%;--docusaurus-announcement-bar-height:auto;--collapse-button-bg-color-dark:#2e333a;--doc-sidebar-width:300px}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}.navbar--dark,.navbar--primary{--ifm-navbar-search-input-background-color:hsla(0,0%,100%,0.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,0.5)}*,:after,:before{box-sizing:border-box}.tabs__item,hr,img{box-sizing:content-box}html{-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base)}body{margin:0}.container{margin:0 auto;max-width:var(--ifm-container-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.container--fluid{max-width:inherit}.row{display:flex;flex-direction:row;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.markdown>:first-child{margin-top:0!important}.row .col{--ifm-col-width:100%;flex:1 0;margin-left:0}.row .col.col--1,.row .col.col--2,.row .col.col--3,.row .col[class*=col--]{flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--1{--ifm-col-width:8.33333%}.row .col.col--offset-1{margin-left:8.33333%}.row .col.col--2{--ifm-col-width:16.66667%}.row .col.col--offset-2{margin-left:16.66667%}.row .col.col--3{--ifm-col-width:25%}.row .col.col--offset-3{margin-left:25%}.row .col.col--4{--ifm-col-width:33.33333%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-4{margin-left:33.33333%}.row .col.col--5{--ifm-col-width:41.66667%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--6,.row .col.col--7{flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-5{margin-left:41.66667%}.row .col.col--6{--ifm-col-width:50%}.row .col.col--offset-6{margin-left:50%}.row .col.col--7{--ifm-col-width:58.33333%}.row .col.col--offset-7{margin-left:58.33333%}.row .col.col--8{--ifm-col-width:66.66667%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-8{margin-left:66.66667%}.row .col.col--9{--ifm-col-width:75%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--10,.row .col.col--11{flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-9{margin-left:75%}.row .col.col--10{--ifm-col-width:83.33333%}.row .col.col--offset-10{margin-left:83.33333%}.row .col.col--11{--ifm-col-width:91.66667%}.row .col.col--offset-11{margin-left:91.66667%}.row .col.col--12{--ifm-col-width:100%;flex:0 0 var(--ifm-col-width);max-width:var(--ifm-col-width)}.row .col.col--offset-12{margin-left:100%}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);color:var(--ifm-code-color);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}.badge,strong{font-weight:var(--ifm-font-weight-bold)}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{border-style:none}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before,hr:after,hr:before{content:"";display:table}.markdown:after,hr:after{clear:both}.markdown>h1{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading));margin-top:calc(var(--ifm-h1-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.codeBlockContainer_K1bP,.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}.avatar__name,ol ol,ol ul,ul ol,ul ul{margin:0}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical);width:100%}.avatar__photo,.card,.navbar__title,hr{overflow:hidden}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration);transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.alert,.alert a{color:var(--ifm-alert-color)}.breadcrumbs__link:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:6px solid var(--ifm-color-emphasis-300);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}hr{border:var(--ifm-hr-border-width) solid var(--ifm-hr-border-color);margin:var(--ifm-hr-margin-vertical) 0}.alert{background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-radius:var(--ifm-alert-border-radius);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary);--ifm-alert-border-color:var(--ifm-color-primary)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary);--ifm-alert-border-color:var(--ifm-color-secondary);--ifm-alert-color:var(--ifm-color-gray-900)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success);--ifm-alert-border-color:var(--ifm-color-success)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info);--ifm-alert-border-color:var(--ifm-color-info)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning);--ifm-alert-border-color:var(--ifm-color-warning)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger);--ifm-alert-border-color:var(--ifm-color-danger)}.alert a{text-decoration:underline}.alert .close{margin-right:calc(var(--ifm-alert-padding-horizontal)*-1);margin-top:calc(var(--ifm-alert-padding-vertical)*-1)}.avatar,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.avatar__photo-link{display:block}.avatar__photo{border-radius:50%;height:var(--ifm-avatar-photo-size-md);width:var(--ifm-avatar-photo-size-md)}.avatar__photo--sm{height:var(--ifm-avatar-photo-size-sm);width:var(--ifm-avatar-photo-size-sm)}.avatar__photo--lg{height:var(--ifm-avatar-photo-size-lg);width:var(--ifm-avatar-photo-size-lg)}.avatar__photo--xl{height:var(--ifm-avatar-photo-size-xl);width:var(--ifm-avatar-photo-size-xl)}.avatar__photo+.avatar__intro{margin-left:var(--ifm-avatar-intro-margin)}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.menu__link--sublist:after{display:inline-block}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.avatar--vertical .avatar__intro{margin-left:0}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal);vertical-align:baseline}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:first-child){margin-left:var(--ifm-breadcrumb-spacing)}.breadcrumbs__item:not(:last-child){margin-right:var(--ifm-breadcrumb-spacing)}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 .5rem;opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__item--active .breadcrumbs__link,.breadcrumbs__item:not(.breadcrumbs__item--active):hover .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{appearance:none;background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;user-select:none;vertical-align:middle}.button,.button:hover{color:var(--ifm-button-color);text-decoration:none}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}.button--primary{--ifm-button-border-color:var(--ifm-color-primary)}.button--primary:not(.button--outline){--ifm-button-background-color:var(--ifm-color-primary)}.button--primary:not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-border-color:var(--ifm-color-primary-darker);--ifm-button-background-color:var(--ifm-color-primary-darker);background-color:var( + --ifm-color-primary-darker + );border-color:var( + --ifm-color-primary-darker + )}.button--secondary{--ifm-button-border-color:var(--ifm-color-secondary)}.button--secondary:not(.button--outline){--ifm-button-background-color:var(--ifm-color-secondary)}.button--secondary:not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-border-color:var(--ifm-color-secondary-darker);--ifm-button-background-color:var(--ifm-color-secondary-darker);background-color:var( + --ifm-color-secondary-darker + );border-color:var( + --ifm-color-secondary-darker + )}.button--success{--ifm-button-border-color:var(--ifm-color-success)}.button--success:not(.button--outline){--ifm-button-background-color:var(--ifm-color-success)}.button--success:not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-border-color:var(--ifm-color-success-darker);--ifm-button-background-color:var(--ifm-color-success-darker);background-color:var( + --ifm-color-success-darker + );border-color:var( + --ifm-color-success-darker + )}.button--info{--ifm-button-border-color:var(--ifm-color-info)}.button--info:not(.button--outline){--ifm-button-background-color:var(--ifm-color-info)}.button--info:not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-border-color:var(--ifm-color-info-darker);--ifm-button-background-color:var(--ifm-color-info-darker);background-color:var( + --ifm-color-info-darker + );border-color:var( + --ifm-color-info-darker + )}.button--warning{--ifm-button-border-color:var(--ifm-color-warning)}.button--warning:not(.button--outline){--ifm-button-background-color:var(--ifm-color-warning)}.button--warning:not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-border-color:var(--ifm-color-warning-darker);--ifm-button-background-color:var(--ifm-color-warning-darker);background-color:var( + --ifm-color-warning-darker + );border-color:var( + --ifm-color-warning-darker + )}.button--danger{--ifm-button-border-color:var(--ifm-color-danger)}.button--danger:not(.button--outline){--ifm-button-background-color:var(--ifm-color-danger)}.button--danger:not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-border-color:var(--ifm-color-danger-darker);--ifm-button-background-color:var(--ifm-color-danger-darker);background-color:var( + --ifm-color-danger-darker + );border-color:var( + --ifm-color-danger-darker + )}.button-group{display:inline-flex}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:var(--ifm-button-group-margin)}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group>.button--active{z-index:1}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column}.card--full-height,body,html{height:100%}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style-type:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color)}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{appearance:none;background:none;border:none;color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__menu,.menu__link,.menu__link:hover{transition-duration:var(--ifm-transition-fast)}.close:hover{opacity:.7}.close:focus{opacity:.8}.dropdown{font-weight:var(--ifm-dropdown-font-weight);vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;transform:scale(1);visibility:visible}.dropdown--right .dropdown__menu{right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);min-width:10rem;opacity:0;padding:.5rem;top:100%;transform:scale(.8);transition-property:opacity,transform,visibility;transition-timing-function:cubic-bezier(.24,.22,.015,1.56);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.dropdown__link{border-radius:.375rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;padding:.375rem .5rem}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown:not(.dropdown--nocaret)>.navbar__link{padding-right:calc(var(--ifm-navbar-item-padding-horizontal) + 1.1em)}.dropdown:not(.dropdown--nocaret)>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:absolute;top:55%;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:10rem}.footer__item,.pills__item+.pills__item{margin-top:0}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.footer__items{margin-bottom:0;padding-left:0}[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu{font-weight:var(--ifm-font-weight-semibold);overflow-x:hidden}.menu__list{margin:0;padding-left:0}.menu__list .menu__list{margin-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item{margin:.25rem 0}.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__link{border-radius:.25rem;display:flex;justify-content:space-between;line-height:20px;padding:var(--ifm-menu-link-padding-vertical) calc(var(--ifm-menu-link-padding-horizontal) + 1.25rem) var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal);position:relative}.menu__link,.menu__link:hover{color:var(--ifm-menu-color);transition-property:color,background;transition-timing-function:var(--ifm-transition-timing-default)}.menu__link:hover{background:var(--ifm-menu-color-background-hover);text-decoration:none}.menu__link--sublist:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;content:" ";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;position:absolute;right:var(--ifm-menu-link-padding-horizontal);top:var(--ifm-menu-link-padding-vertical);transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.menu__link--active:not(.menu__link--sublist){background:var(--ifm-menu-color-background-active)}.menu--responsive .menu__button{bottom:2rem;display:none;position:fixed;right:1rem;z-index:var(--ifm-z-index-fixed)}.menu--show{-ms-scroll-chaining:none;background:var(--ifm-background-surface-color);bottom:0;left:0;overscroll-behavior:contain;padding:1rem;position:fixed;right:0;top:0;z-index:var(--ifm-z-index-overlay)}.menu--show .menu__list{display:inherit;opacity:1;transition:opacity var(--ifm-transition-fast) linear}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal);width:100%}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar__inner{align-items:stretch;display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;color:var(--ifm-navbar-link-color);display:flex;font-weight:700;height:2rem;margin-right:1rem;min-width:0}.navbar__brand:hover{color:inherit;text-decoration:none}.navbar__title{flex:1 1 auto}.navbar__toggle{background:none;border:none;color:inherit;cursor:pointer;display:none;margin-right:.5rem;padding:0}.navbar__item,.navbar__link{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__logo{height:100%;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__item{display:inline-block}.navbar__item.dropdown{padding:0}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link{color:var(--ifm-navbar-link-color);font-weight:var(--ifm-font-weight-semibold);position:relative;text-decoration:none}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;left:0;opacity:0;position:fixed;transition-timing-function:ease-in-out;visibility:hidden;top:0}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark{--ifm-navbar-background-color:#303846;--ifm-navbar-link-color:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input:-ms-input-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);overflow:auto;transform:translate3d(-100%,0,0);transition-duration:.25s;transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar--show .navbar-sidebar{transform:translateZ(0)}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-duration:.1s;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.pagination__item,.pagination__link{display:inline-block}.navbar-sidebar__items{padding:.5rem}.pagination{font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item:not(:first-child){margin-left:var(--ifm-pagination-page-spacing)}.pagination__item:not(:last-child){margin-right:var(--ifm-pagination-page-spacing)}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.docs-wrapper,.pagination-nav{display:flex}.pagination-nav__item{display:flex;flex:1 50%;max-width:50%}.pagination-nav__item--next{text-align:right}.pagination-nav__item+.pagination-nav__item{margin-left:var(--ifm-spacing-horizontal)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);flex-grow:1;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{background:var(--ifm-pills-color-background-active);color:var(--ifm-pills-color-active)}.pills__item:not(.pills__item--active):hover{background-color:var(--ifm-pills-color-background-active)}.pills__item:not(:first-child){margin-left:var(--ifm-pills-spacing)}.pills__item:not(:last-child){margin-right:var(--ifm-pills-spacing)}.pills--block{display:flex;justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;margin:0;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden}.text--break{word-wrap:break-word!important;word-break:break-word!important}.text--no-decoration,.text--no-decoration:hover{text-decoration:none}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}html[data-theme=dark]{--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#18191a;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,0.05);--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%);--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#333437}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.dropdown{display:inline-block;position:relative}.dropdown>input[type=checkbox]{left:-100vw;position:absolute}.dropdown>a[role=button],.dropdown>label{border:1px solid #8c8c8c;border-radius:3px;color:#333;cursor:pointer;display:inline-block;line-height:1.5em;padding:6px 15px;text-decoration:none}.dropdown>a[role=button]:focus,.dropdown>a[role=button]:hover,.dropdown>label:hover{border-color:#333}.dropdown>a[role=button]:after,.dropdown>label:after{content:"\f0d7";display:inline-block;font-family:FontAwesome;margin-left:6px}.dropdown>ul{background:#fff;border:1px solid #8c8c8c;border-radius:3px;box-shadow:0 3px 8px rgba(0,0,0,.15);display:block;left:-100vw;margin:0;padding:6px 0;top:calc(1.5em + 14px);width:100%;z-index:5}.dropdown>ul a{color:#333;display:block;padding:6px 15px;text-decoration:none}.dropdown>ul a:focus,.dropdown>ul a:hover{background:#ececec}.dropdown>input[type=checkbox]:checked~ul,.dropdown>ul:target{left:0}.dropdown>[type=checkbox]:checked+label:after,.dropdown>ul:target~a:after{content:"\f0d8"}#docusaurus-base-url-issue-banner-container,.collapseSidebarButton_1CGd,.dropdown a.close,.sidebarLogo_3h0W,.themedImage_1VuW{display:none}.dropdown>ul:target~a.close{display:block;height:100%;left:0;position:absolute;text-indent:-100vw;top:0;width:100%;z-index:6}.dropdown+h2{margin-top:60px}.prism-code{counter-reset:line-number}.prism-code.language-sh .token-line:before{content:"$";counter-increment:line-number;display:inline-block;left:var(--ifm-pre-padding);margin-right:7px;min-width:0;opacity:.5;position:sticky;text-align:right}#nprogress .bar{background:#29d;height:2px;left:0;position:fixed;top:0;width:100%;z-index:7}#nprogress .peg{box-shadow:0 0 10px #29d,0 0 5px #29d;height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.skipToContent_1oUP{background-color:var(--ifm-background-surface-color);border:none;border-radius:var(--ifm-global-radius);color:var(--ifm-color-emphasis-900);font:inherit;left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_1oUP:focus{left:1rem}.announcementBar_3WsW{background-color:var(--ifm-color-primary);color:var(--ifm-color-black);height:var(--docusaurus-announcement-bar-height);position:relative;width:100%}.announcementBarClose_38nx{background:none;border:none;color:inherit;cursor:pointer;font-size:1.25rem;height:100%;padding:0;position:absolute;right:0;top:0;width:55px}.announcementBarContent_3EUC{font-size:85%;padding:5px 0;text-align:center;width:100%}.announcementBarCloseable_3myR{margin-right:55px}.announcementBarContent_3EUC a{color:inherit;text-decoration:underline}.toggle_71bT{align-items:center;display:flex;height:10px;justify-content:center;width:10px}.toggle_71bT:before{position:absolute}.react-toggle{cursor:pointer;position:relative;touch-action:pan-x;user-select:none}.react-toggle-screenreader-only{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;position:absolute;width:1px}.react-toggle--disabled{cursor:not-allowed}.react-toggle-track{background-color:#4d4d4d;border-radius:30px;height:24px;transition:.2s;width:50px}.react-toggle-track-check,.react-toggle-track-x{bottom:0;height:10px;margin:auto 0;top:0;position:absolute}.react-toggle-track-check{left:8px;opacity:0;transition:opacity .25s;width:14px}.react-toggle--checked .react-toggle-track-check,.react-toggle-track-x,[data-theme=dark] .react-toggle .react-toggle-track-check{opacity:1;transition:opacity .25s}.react-toggle-track-x{right:10px;width:10px}.react-toggle--checked .react-toggle-track-x,[data-theme=dark] .react-toggle .react-toggle-track-x{opacity:0}.react-toggle-thumb{background-color:#fafafa;border:1px solid #4d4d4d;border-radius:50%;height:22px;left:1px;position:absolute;top:1px;transition:.25s;width:22px}.react-toggle--checked .react-toggle-thumb,[data-theme=dark] .react-toggle .react-toggle-thumb{left:27px}.react-toggle--focus .react-toggle-thumb,.react-toggle:hover .react-toggle-thumb{box-shadow:0 0 2px 3px var(--ifm-color-primary)}.react-toggle:active:not(.react-toggle--disabled) .react-toggle-thumb{box-shadow:0 0 5px 5px var(--ifm-color-primary)}html[data-theme=dark] .themedImage--dark_hz6m,html[data-theme=light] .themedImage--light_3UqQ{display:initial}.navbarHideable_2qcr{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_3yey{transform:translate3d(0,calc(var(--ifm-navbar-height)*-1),0)}.footerLogoLink_MyFc{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.codeBlockContent_hGly:hover>.copyButton_Ue-o,.codeBlockTitle_eoMF:hover+.codeBlockContent_hGly .copyButton_Ue-o,.copyButton_Ue-o:focus,.footerLogoLink_MyFc:hover,.hash-link:focus,:hover>.hash-link{opacity:1}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.main-wrapper{flex:1 0 auto}.lastUpdatedDate_1WI_{font-weight:700}.sidebarMenuIcon_fgN0{vertical-align:middle}.sidebarMenuCloseIcon_1lpH{align-items:center;display:inline-flex;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);height:24px;justify-content:center;line-height:.9;width:24px}.menu__list .menu__list{overflow-y:hidden;transition:height var(--ifm-transition-fast) linear;will-change:height}.menu__list-item--collapsed .menu__list{overflow:hidden;height:0!important}.menuLinkExternal_1OhN{align-items:center}.menuLinkExternal_1OhN:after{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='rgba(0,0,0,0.5)' d='M21 13v10H0V4h12v2H2v15h17v-8h2zm3-12H13.012l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07L24 12V1z'/%3E%3C/svg%3E") no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.15rem;margin:0 0 0 3%;min-width:1.15rem;width:1.15rem}.codeBlockContent_hGly{direction:ltr;position:relative}.codeBlockTitle_eoMF{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:var(--ifm-global-radius);border-top-right-radius:var(--ifm-global-radius);font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_23N8{border-radius:var(--ifm-global-radius);overflow:auto}.codeBlockWithTitle_2JqI{border-top-left-radius:0;border-top-right-radius:0}.copyButton_Ue-o{background:rgba(0,0,0,.3);border:none;border-radius:var(--ifm-global-radius);color:var(--ifm-color-white);cursor:pointer;opacity:0;padding:.4rem .5rem;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2);transition:opacity .2s ease-in-out;-webkit-user-select:none;-ms-user-select:none;user-select:none}.codeBlockLines_39YC{float:left;font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);min-width:100%;padding:var(--ifm-pre-padding);white-space:pre}.anchor{display:block;position:relative;top:-.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast)}.enhancedAnchor_2LWZ{top:calc(var(--ifm-navbar-height)*-1 - .5rem)}.tableOfContents_35-E{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.iconEdit_2_ui{margin-right:.3em;vertical-align:sub}.docTitle_3a4h{font-size:3rem;margin-bottom:calc(var(--ifm-leading-desktop)*var(--ifm-leading))}.docItemContainer_33ec{margin:0 auto;padding:0 .5rem}.docMainContainer_3ufF,.docPage_31aa{display:flex;width:100%}@media (min-width:997px){.sidebar_15mo{display:flex;flex-direction:column;height:100%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_267A{padding-top:0}.sidebarHidden_2kNb{height:0;opacity:0;overflow:hidden;visibility:hidden}.sidebarLogo_3h0W{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_3h0W img{height:2rem;margin-right:.5rem}.menu_Bmed{flex-grow:1;padding:.5rem}.menuLinkText_2aKo{cursor:auto}.menuLinkText_2aKo:hover{background:none}.menuWithAnnouncementBar_2WvA{margin-bottom:var(--docusaurus-announcement-bar-height)}.collapseSidebarButton_1CGd{background-color:var(--ifm-button-background-color);border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_3E-R{margin-top:4px;transform:rotate(180deg)}.expandSidebarButtonIcon_1naQ,html[dir=rtl] .collapseSidebarButtonIcon_3E-R{transform:rotate(0)}html[data-theme=dark] .collapseSidebarButton_1CGd,html[data-theme=dark] .collapsedDocSidebar_2JMH:focus,html[data-theme=dark] .collapsedDocSidebar_2JMH:hover{background-color:var(--collapse-button-bg-color-dark)}.collapsedDocSidebar_2JMH:focus,.collapsedDocSidebar_2JMH:hover,html[data-theme=dark] .collapseSidebarButton_1CGd:focus,html[data-theme=dark] .collapseSidebarButton_1CGd:hover{background-color:var(--ifm-color-emphasis-200)}.docMainContainer_3ufF{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_3NYZ{max-width:none}.docSidebarContainer_3Kbt{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_3pA8{cursor:pointer;width:30px}.collapsedDocSidebar_2JMH{align-items:center;display:flex;height:100%;justify-content:center;max-height:100vh;position:sticky;top:0;transition:background-color var(--ifm-transition-fast) ease}html[dir=rtl] .expandSidebarButtonIcon_1naQ{transform:rotate(180deg)}.docItemWrapperEnhanced_2vyJ{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:997px) and (max-width:1320px){.docItemWrapper_3FMP{max-width:calc(var(--ifm-container-width) - var(--doc-sidebar-width) - var(--ifm-spacing-horizontal)*2)}.docItemWrapperEnhanced_2vyJ{max-width:calc(var(--ifm-container-width) - var(--ifm-spacing-horizontal)*2)}}@media only screen and (min-width:997px){.docItemCol_3FnS{max-width:75%!important}}@media screen and (min-width:1024px){:root{--docusaurus-announcement-bar-height:30px}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:1200px){h1{--ifm-h1-font-size:calc(1.375rem + 1.5vw)}}@media screen and (max-width:997px){.displayOnlyInLargeViewport_GrZ2{display:none!important}}@media (max-width:996px){.row .col.col.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0;max-width:var(--ifm-col-width)}.footer{--ifm-footer-padding-horizontal:0}.footer__link-separator,.navbar__item{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.menu--responsive .menu__button,.navbar__toggle{display:inherit}.menu--responsive:not(.menu--show) .menu__list{display:none;opacity:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.pills--block .pills__item:not(:first-child){margin-top:var(--ifm-pills-spacing)}.pills--block .pills__item:not(:last-child){margin-bottom:var(--ifm-pills-spacing)}.tabs--block .tabs__item:not(:first-child){margin-top:var(--ifm-tabs-spacing)}.tabs--block .tabs__item:not(:last-child){margin-bottom:var(--ifm-tabs-spacing)}.searchWrapper_3rmH{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docSidebarContainer_3Kbt{margin-top:0}}@media only screen and (max-width:996px){.tableOfContents_35-E{display:none}.docItemContainer_33ec,.docItemContainer_gpai{padding:0 .3rem}}@media screen and (max-width:576px){.announcementBarClose_38nx{width:35px}.announcementBarContent_3EUC{width:auto}.announcementBarCloseable_3myR{margin-right:35px}}@media print{.announcementBar_3WsW,.footer,.menu,.navbar,.pagination-nav,.table-of-contents{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_39YC{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/did-core_architecture.png b/assets/did-core_architecture.png new file mode 100644 index 00000000..dc4ea79e Binary files /dev/null and b/assets/did-core_architecture.png differ diff --git a/assets/did-core_social-roles.png b/assets/did-core_social-roles.png new file mode 100644 index 00000000..f815df72 Binary files /dev/null and b/assets/did-core_social-roles.png differ diff --git a/assets/did-core_vc-lifecycle.png b/assets/did-core_vc-lifecycle.png new file mode 100644 index 00000000..4dd448c1 Binary files /dev/null and b/assets/did-core_vc-lifecycle.png differ diff --git a/assets/did-core_vc-lifecycle.svg b/assets/did-core_vc-lifecycle.svg new file mode 100644 index 00000000..c5d4b669 --- /dev/null +++ b/assets/did-core_vc-lifecycle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/didkit-core-components.png b/assets/didkit-core-components.png new file mode 100644 index 00000000..49b5f91d Binary files /dev/null and b/assets/didkit-core-components.png differ diff --git a/assets/didkit-core-components_v1.png b/assets/didkit-core-components_v1.png new file mode 100644 index 00000000..1f7032d9 Binary files /dev/null and b/assets/didkit-core-components_v1.png differ diff --git a/assets/didkithead.png b/assets/didkithead.png new file mode 100644 index 00000000..c6e62b52 Binary files /dev/null and b/assets/didkithead.png differ diff --git a/assets/example_vc.json b/assets/example_vc.json new file mode 100644 index 00000000..e2169200 --- /dev/null +++ b/assets/example_vc.json @@ -0,0 +1,21 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schema.org/" + ], + "id": "urn:uuid:baef4793-ab07-4c17-a175-ec114b18245e", + "type": "VerifiableCredential", + "credentialSubject": { + "id": "did:tz:tz1aTuW7578MTt3ZtWYCjX65nUXkzE1CMcAf" + }, + "issuer": "did:web:demo.spruceid.com:2021:vc-faucet", + "issuanceDate": "2021-09-13T09:19:41Z", + "proof": { + "type": "Ed25519Signature2018", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:web:demo.spruceid.com:2021:vc-faucet#key-1", + "created": "2021-09-13T09:19:41.374Z", + "jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..uwSzKxDeXk4nCd6EH6H-7GwaXNwgdoEBPNsrCbbcmJV9hJRrwZPJakXaK6c4uFkFoICGUikTBifmEdV_7BOCCg" + }, + "expirationDate": "2021-10-13T09:19:41Z" +} \ No newline at end of file diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 00000000..c01d54bc Binary files /dev/null and b/assets/favicon.ico differ diff --git a/assets/files/credible_swimlane_issuance-51c9a9073193b29969c603155432d71d.png b/assets/files/credible_swimlane_issuance-51c9a9073193b29969c603155432d71d.png new file mode 100644 index 00000000..0d047c3f Binary files /dev/null and b/assets/files/credible_swimlane_issuance-51c9a9073193b29969c603155432d71d.png differ diff --git a/assets/files/credible_swimlane_vp_request-3b958d111d4b8ddd37551b111bcf85ee.png b/assets/files/credible_swimlane_vp_request-3b958d111d4b8ddd37551b111bcf85ee.png new file mode 100644 index 00000000..a7d31bf4 Binary files /dev/null and b/assets/files/credible_swimlane_vp_request-3b958d111d4b8ddd37551b111bcf85ee.png differ diff --git a/assets/images/credible-architecture-e169185ba97d198894c3ed67328e353d.png b/assets/images/credible-architecture-e169185ba97d198894c3ed67328e353d.png new file mode 100644 index 00000000..b9ce965d Binary files /dev/null and b/assets/images/credible-architecture-e169185ba97d198894c3ed67328e353d.png differ diff --git a/assets/images/credible_swimlane_issuance-51c9a9073193b29969c603155432d71d.png b/assets/images/credible_swimlane_issuance-51c9a9073193b29969c603155432d71d.png new file mode 100644 index 00000000..0d047c3f Binary files /dev/null and b/assets/images/credible_swimlane_issuance-51c9a9073193b29969c603155432d71d.png differ diff --git a/assets/images/credible_swimlane_vp_request-3b958d111d4b8ddd37551b111bcf85ee.png b/assets/images/credible_swimlane_vp_request-3b958d111d4b8ddd37551b111bcf85ee.png new file mode 100644 index 00000000..a7d31bf4 Binary files /dev/null and b/assets/images/credible_swimlane_vp_request-3b958d111d4b8ddd37551b111bcf85ee.png differ diff --git a/assets/images/crediblehead-9f539ffe32f0082fb362572e7d308c6e.png b/assets/images/crediblehead-9f539ffe32f0082fb362572e7d308c6e.png new file mode 100644 index 00000000..7b9e0bd6 Binary files /dev/null and b/assets/images/crediblehead-9f539ffe32f0082fb362572e7d308c6e.png differ diff --git a/assets/images/did-core_architecture-8c0f7ea8dea959eff953e1f87a06ab54.png b/assets/images/did-core_architecture-8c0f7ea8dea959eff953e1f87a06ab54.png new file mode 100644 index 00000000..dc4ea79e Binary files /dev/null and b/assets/images/did-core_architecture-8c0f7ea8dea959eff953e1f87a06ab54.png differ diff --git a/assets/images/did-core_social-roles-27d0e305d20afe2287f730bb9ed2c448.png b/assets/images/did-core_social-roles-27d0e305d20afe2287f730bb9ed2c448.png new file mode 100644 index 00000000..f815df72 Binary files /dev/null and b/assets/images/did-core_social-roles-27d0e305d20afe2287f730bb9ed2c448.png differ diff --git a/assets/images/did-core_vc-lifecycle-6f25b06563e7a70c62afe8d4bc920e6e.png b/assets/images/did-core_vc-lifecycle-6f25b06563e7a70c62afe8d4bc920e6e.png new file mode 100644 index 00000000..4dd448c1 Binary files /dev/null and b/assets/images/did-core_vc-lifecycle-6f25b06563e7a70c62afe8d4bc920e6e.png differ diff --git a/assets/images/didkit-core-components-645bb0992bdef492c3bdae3e540166a7.png b/assets/images/didkit-core-components-645bb0992bdef492c3bdae3e540166a7.png new file mode 100644 index 00000000..49b5f91d Binary files /dev/null and b/assets/images/didkit-core-components-645bb0992bdef492c3bdae3e540166a7.png differ diff --git a/assets/images/didkithead-52d41d35622b77d7662965794aa33eff.png b/assets/images/didkithead-52d41d35622b77d7662965794aa33eff.png new file mode 100644 index 00000000..c6e62b52 Binary files /dev/null and b/assets/images/didkithead-52d41d35622b77d7662965794aa33eff.png differ diff --git a/assets/js/04f02758.1a62e4a9.js b/assets/js/04f02758.1a62e4a9.js new file mode 100644 index 00000000..6fb36d1e --- /dev/null +++ b/assets/js/04f02758.1a62e4a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[243],{3905:function(e,r,t){t.d(r,{Zo:function(){return p},kt:function(){return m}});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=n.createContext({}),s=function(e){var r=n.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},p=function(e){var r=s(e.components);return n.createElement(c.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(t),m=o,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||a;return t?n.createElement(f,i(i({ref:r},p),{},{components:t})):n.createElement(f,i({ref:r},p))}));function m(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=d;var l={};for(var c in r)hasOwnProperty.call(r,c)&&(l[c]=r[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var d=i.createContext({}),l=function(e){var n=i.useContext(d),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=l(e.components);return i.createElement(d.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=l(t),f=r,h=u["".concat(d,".").concat(f)]||u[f]||p[f]||a;return t?i.createElement(h,o(o({ref:n},c),{},{components:t})):i.createElement(h,o({ref:n},c))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,o=new Array(a);o[0]=u;var s={};for(var d in n)hasOwnProperty.call(n,d)&&(s[d]=n[d]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var l=2;l issuer_key.jwk\n echo 'Generated keypair.'\nfi\n\necho\n")),(0,a.kt)("h3",{id:"generate-a-didkey-document"},"Generate a DID:Key document"),(0,a.kt)("p",null,"This document gets wrapped around the keypair generated (or passed) in the previous step. For more context on the DID:key method, see the ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-method-key/"},"specification"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"did=$(didkit key-to-did-key -k issuer_key.jwk)\nprintf 'DID: %s\\n\\n' \"$did\"\n")),(0,a.kt)("h3",{id:"define-verificationmethod-for-keypair"},"Define verificationMethod for keypair."),(0,a.kt)("p",null,"This is used to identify the key in linked data proofs. Verifiers of such proofs query a DID found in a credential based on what ","[registered]"," proof type (i.e., what kind of signatures) it needs key material to verify."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"verification_method=$(didkit key-to-verification-method -k issuer_key.jwk)\nprintf 'verificationMethod: %s\\n\\n' \"$verification_method\"\n")),(0,a.kt)("h3",{id:"start-http-server"},"Start HTTP Server"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"didkit-http -p 9999 -k key.jwk & pid=$!\ndidkit_url=http://localhost:9999\n")),(0,a.kt)("h3",{id:"stop-http-server"},"Stop HTTP Server"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'trap "kill $pid" 1 2 15 EXIT\n')),(0,a.kt)("h3",{id:"prepare-credential-for-issuing"},"Prepare credential for issuing."),(0,a.kt)("p",null,"In this example credential, the issuance date, id, and credential subject id are arbitrary, but in real-world usage these are diverse and critical properties. For more info about what these properties mean, see the Verifiable Credentials Data Model ",(0,a.kt)("a",{parentName:"p",href:"https://w3c.github.io/vc-data-model/"},"specification")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'cat > credential-unsigned.jsonld < presentation-unsigned.jsonld </dev/null 2>&1; then\n jq . "$file" || cat "$file"\n elif command -v json_pp >/dev/null 2>&1; then\n json_pp < "$file" || cat "$file"\n else\n cat "$file"\n fi\n}\n\n# Run the rest of this script in its source directory.\ncd "$(dirname "$0")"\n\n# Build the didkit CLI program and HTTP server\ncargo build -p didkit-cli -p didkit-http\n\n# Adjust $PATH to include the didkit executable.\nexport PATH=$PWD/../../target/debug:$PATH\n\n# Create a ed25119 keypair if needed.\nif [ -e key.jwk ]; then\n echo \'Using existing keypair.\'\nelse\n didkit generate-ed25519-key > key.jwk\n echo \'Generated keypair.\'\nfi\necho\n\n# Get the keypair\'s did:key DID.\n# More info about did:key: https://w3c-ccg.github.io/did-method-key/\ndid=$(didkit key-to-did-key -k key.jwk)\nprintf \'DID: %s\\n\' "$did"\n\n# Get verificationMethod for keypair.\n# This is used to identify the key in linked data proofs.\nverification_method=$(didkit key-to-verification-method -k key.jwk)\nprintf \'verificationMethod: %s\\n\' "$verification_method"\n\n# Start the HTTP server\ndidkit-http -p 9999 -k key.jwk & pid=$!\ndidkit_url=http://localhost:9999\n\n# Stop the HTTP server when the shell script exits\ntrap "kill $pid" 1 2 15 EXIT\n\n# Prepare credential for issuing.\n# In this example credential, the issuance date, id, and credential subject id\n# are arbitrary. For more info about what these properties mean, see the\n# Verifiable Credentials Data Model: https://w3c.github.io/vc-data-model/\ncat > credential-unsigned.jsonld < presentation-unsigned.jsonld <=a?l(!1):r+i0&&r.createElement("div",{className:"row footer__links"},c.map((function(e,t){return r.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.createElement("div",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.createElement("ul",{className:"footer__items"},e.items.map((function(e,t){return e.html?r.createElement("li",{key:t,className:"footer__item",dangerouslySetInnerHTML:{__html:e.html}}):r.createElement("li",{key:e.href||e.to,className:"footer__item"},r.createElement($,e))}))):null)}))),(s||n)&&r.createElement("div",{className:"footer__bottom text--center"},s&&(s.src||s.srcDark)&&r.createElement("div",{className:"margin-bottom--sm"},s.href?r.createElement(Q.Z,{href:s.href,className:J},r.createElement(ee,{alt:s.alt,sources:u})):r.createElement(ee,{alt:s.alt,sources:u})),n?r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:n}}):null))):null},ne=n(412),re=(0,o.WA)("theme"),ae="light",le="dark",oe=function(e){return e===le?le:ae},ce=function(e){(0,o.WA)("theme").set(oe(e))},ie=function(){var e=(0,o.LU)().colorMode,t=e.defaultMode,n=e.disableSwitch,a=e.respectPrefersColorScheme,l=(0,r.useState)(function(e){return ne.Z.canUseDOM?oe(document.documentElement.getAttribute("data-theme")):oe(e)}(t)),c=l[0],i=l[1],s=(0,r.useCallback)((function(){i(ae),ce(ae)}),[]),u=(0,r.useCallback)((function(){i(le),ce(le)}),[]);return(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",oe(c))}),[c]),(0,r.useEffect)((function(){if(!n)try{var e=re.get();null!==e&&i(oe(e))}catch(t){console.error(t)}}),[i]),(0,r.useEffect)((function(){n&&!a||window.matchMedia("(prefers-color-scheme: dark)").addListener((function(e){var t=e.matches;i(t?le:ae)}))}),[]),{isDarkTheme:c===le,setLightTheme:s,setDarkTheme:u}},se=n(2924);var ue=function(e){var t=ie(),n=t.isDarkTheme,a=t.setLightTheme,l=t.setDarkTheme;return r.createElement(se.Z.Provider,{value:{isDarkTheme:n,setLightTheme:a,setDarkTheme:l}},e.children)};function me(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var fe="docusaurus.tab.",ve=function(){var e=(0,r.useState)({}),t=e[0],n=e[1],a=(0,r.useCallback)((function(e,t){(0,o.WA)("docusaurus.tab."+e).set(t)}),[]);return(0,r.useEffect)((function(){try{for(var e,t={},r=de((0,o._f)());!(e=r()).done;){var a=e.value;if(a.startsWith(fe))t[a.substring(fe.length)]=(0,o.WA)(a).get()}n(t)}catch(l){console.error(l)}}),[]),{tabGroupChoices:t,setTabGroupChoices:function(e,t){n((function(n){var r;return Object.assign({},n,((r={})[e]=t,r))})),a(e,t)}}},he=(0,o.WA)("docusaurus.announcement.dismiss"),ge=(0,o.WA)("docusaurus.announcement.id"),be=function(){var e=(0,o.LU)().announcementBar,t=(0,r.useState)(!0),n=t[0],a=t[1],l=(0,r.useCallback)((function(){he.set("true"),a(!0)}),[]);return(0,r.useEffect)((function(){if(e){var t=e.id,n=ge.get();"annoucement-bar"===n&&(n="announcement-bar");var r=t!==n;ge.set(t),r&&he.set("false"),(r||"false"===he.get())&&a(!1)}}),[]),{isAnnouncementBarClosed:n,closeAnnouncementBar:l}},Ee=n(9443);var pe=function(e){var t=ve(),n=t.tabGroupChoices,a=t.setTabGroupChoices,l=be(),o=l.isAnnouncementBarClosed,c=l.closeAnnouncementBar;return r.createElement(Ee.Z.Provider,{value:{tabGroupChoices:n,setTabGroupChoices:a,isAnnouncementBarClosed:o,closeAnnouncementBar:c}},e.children)};function ke(e){var t=e.children;return r.createElement(ue,null,r.createElement(pe,null,r.createElement(o.L5,null,t)))}var Ze=n(9105);function _e(e){var t=e.locale,n=e.version,a=e.tag;return r.createElement(Ze.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:""+t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}))}var ye=n(1217);function Ne(){var e=(0,E.Z)().i18n,t=e.defaultLocale,n=e.locales,a=(0,o.l5)();return r.createElement(Ze.Z,null,n.map((function(e){return r.createElement("link",{key:e,rel:"alternate",href:a.createUrl({locale:e,fullyQualified:!0}),hrefLang:e})})),r.createElement("link",{rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}))}function we(e){var t=e.permalink,n=(0,E.Z)().siteConfig.url,a=function(){var e=(0,E.Z)().siteConfig.url,t=(0,w.TH)().pathname;return e+(0,Y.Z)(t)}(),l=t?""+n+t:a;return r.createElement(Ze.Z,null,r.createElement("meta",{property:"og:url",content:l}),r.createElement("link",{rel:"canonical",href:l}))}function Ce(e){var t=(0,E.Z)(),n=t.siteConfig,a=n.favicon,l=n.themeConfig.metadatas,c=t.i18n,i=c.currentLocale,s=c.localeConfigs,u=e.title,m=e.description,d=e.image,f=e.keywords,v=e.searchMetadatas,h=(0,Y.Z)(a),b=(0,o.pe)(u),p=i,k=s[i].direction;return r.createElement(r.Fragment,null,r.createElement(Ze.Z,null,r.createElement("html",{lang:p,dir:k}),a&&r.createElement("link",{rel:"shortcut icon",href:h}),r.createElement("title",null,b),r.createElement("meta",{property:"og:title",content:b})),r.createElement(ye.Z,{description:m,keywords:f,image:d}),r.createElement(we,null),r.createElement(Ne,null),r.createElement(_e,(0,g.Z)({tag:o.HX,locale:i},v)),r.createElement(Ze.Z,null,l.map((function(e,t){return r.createElement("meta",(0,g.Z)({key:"metadata_"+t},e))}))))}var Ie=function(){(0,r.useEffect)((function(){var e="navigation-with-keyboard";function t(t){"keydown"===t.type&&"Tab"===t.key&&document.body.classList.add(e),"mousedown"===t.type&&document.body.classList.remove(e)}return document.addEventListener("keydown",t),document.addEventListener("mousedown",t),function(){document.body.classList.remove(e),document.removeEventListener("keydown",t),document.removeEventListener("mousedown",t)}}),[])};var Le=function(e){var t=e.children,n=e.noFooter,l=e.wrapperClassName,c=e.pageClassName;return Ie(),r.createElement(ke,null,r.createElement(Ce,e),r.createElement(s,null),r.createElement(h,null),r.createElement(q,null),r.createElement("div",{className:(0,a.Z)(o.kM.wrapper.main,l,c)},t),!n&&r.createElement(te,null))}},5537:function(e,t,n){var r=n(7462),a=n(3366),l=n(7294),o=n(6742),c=n(8465),i=n(4996),s=n(2263),u=n(9732),m=["imageClassName","titleClassName"];t.Z=function(e){var t=(0,s.Z)().isClient,n=(0,u.LU)().navbar,d=n.title,f=n.logo,v=void 0===f?{src:""}:f,h=e.imageClassName,g=e.titleClassName,b=(0,a.Z)(e,m),E=(0,i.Z)(v.href||"/"),p={light:(0,i.Z)(v.src),dark:(0,i.Z)(v.srcDark||v.src)};return l.createElement(o.Z,(0,r.Z)({to:E},b,v.target&&{target:v.target}),v.src&&l.createElement(c.Z,{key:t,className:h,sources:p,alt:v.alt||d||"Logo"}),null!=d&&l.createElement("strong",{className:g},d))}},5525:function(e,t,n){var r=n(7462),a=n(3366),l=n(7294),o=n(6010),c=n(6742),i=n(4996),s=n(5977),u=n(9732),m=["activeBasePath","activeBaseRegex","to","href","label","activeClassName","prependBaseUrlToHref"],d=["items","position","className"],f=["className"],v=["items","className","position"],h=["className"],g=["mobile"];function b(e){var t=e.activeBasePath,n=e.activeBaseRegex,o=e.to,s=e.href,u=e.label,d=e.activeClassName,f=void 0===d?"navbar__link--active":d,v=e.prependBaseUrlToHref,h=(0,a.Z)(e,m),g=(0,i.Z)(o),b=(0,i.Z)(t),E=(0,i.Z)(s,{forcePrependBaseUrl:!0});return l.createElement(c.Z,(0,r.Z)({},s?{href:v?E:s}:Object.assign({isNavLink:!0,activeClassName:f,to:g},t||n?{isActive:function(e,t){return n?new RegExp(n).test(t.pathname):t.pathname.startsWith(b)}}:null),h),u)}function E(e){var t,n=e.items,c=e.position,i=e.className,s=(0,a.Z)(e,d),u=(0,l.useRef)(null),m=(0,l.useRef)(null),v=(0,l.useState)(!1),h=v[0],g=v[1];(0,l.useEffect)((function(){var e=function(e){u.current&&!u.current.contains(e.target)&&g(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]);var E=function(e,t){return void 0===t&&(t=!1),(0,o.Z)({"navbar__item navbar__link":!t,dropdown__link:t},e)};return n?l.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--left":"left"===c,"dropdown--right":"right"===c,"dropdown--show":h})},l.createElement(b,(0,r.Z)({className:E(i)},s,{onClick:s.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),g(!h))}}),null!=(t=s.children)?t:s.label),l.createElement("ul",{ref:m,className:"dropdown__menu"},n.map((function(e,t){var o=e.className,c=(0,a.Z)(e,f);return l.createElement("li",{key:t},l.createElement(b,(0,r.Z)({onKeyDown:function(e){if(t===n.length-1&&"Tab"===e.key){e.preventDefault(),g(!1);var r=u.current.nextElementSibling;r&&r.focus()}},activeClassName:"dropdown__link--active",className:E(o,!0)},c)))})))):l.createElement(b,(0,r.Z)({className:E(i)},s))}function p(e){var t,n,c,i=e.items,m=e.className,d=(e.position,(0,a.Z)(e,v)),f=(0,l.useRef)(null),g=(0,s.TH)().pathname,E=(0,l.useState)((function(){var e;return null==(e=!(null!=i&&i.some((function(e){return(0,u.Mg)(e.to,g)}))))||e})),p=E[0],k=E[1],Z=function(e,t){return void 0===t&&(t=!1),(0,o.Z)("menu__link",{"menu__link--sublist":t},e)};if(!i)return l.createElement("li",{className:"menu__list-item"},l.createElement(b,(0,r.Z)({className:Z(m)},d)));var _=null!=(t=f.current)&&t.scrollHeight?(null==(n=f.current)?void 0:n.scrollHeight)+"px":void 0;return l.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p})},l.createElement(b,(0,r.Z)({role:"button",className:Z(m,!0)},d,{onClick:function(e){e.preventDefault(),k((function(e){return!e}))}}),null!=(c=d.children)?c:d.label),l.createElement("ul",{className:"menu__list",ref:f,style:{height:p?void 0:_}},i.map((function(e,t){var n=e.className,o=(0,a.Z)(e,h);return l.createElement("li",{className:"menu__list-item",key:t},l.createElement(b,(0,r.Z)({activeClassName:"menu__link--active",className:Z(n)},o,{onClick:d.onClick})))}))))}t.Z=function(e){var t=e.mobile,n=void 0!==t&&t,r=(0,a.Z)(e,g),o=n?p:E;return l.createElement(o,r)}},6400:function(e,t,n){n.d(t,{Z:function(){return m}});var r=n(7462),a=n(3366),l=n(7294),o=n(5525),c=n(907),i=n(6010),s=n(9732),u=["docId","activeSidebarClassName","label","docsPluginId"];function m(e){var t,n,m=e.docId,d=e.activeSidebarClassName,f=e.label,v=e.docsPluginId,h=(0,a.Z)(e,u),g=(0,c.Iw)(v),b=g.activeVersion,E=g.activeDoc,p=(0,s.J)(v).preferredVersion,k=(0,c.yW)(v),Z=null!=(t=null!=b?b:p)?t:k,_=Z.docs.find((function(e){return e.id===m}));if(!_){var y=Z.docs.map((function(e){return e.id})).join("\n- ");throw new Error("DocNavbarItem: couldn't find any doc with id="+m+" in version "+Z.name+".\nAvailable docIds=\n- "+y)}return l.createElement(o.Z,(0,r.Z)({exact:!0},h,{className:(0,i.Z)(h.className,(n={},n[d]=E&&E.sidebar===_.sidebar,n)),label:null!=f?f:_.id,to:_.path}))}},9308:function(e,t,n){n.d(t,{Z:function(){return m}});var r=n(7462),a=n(3366),l=n(7294),o=n(5525),c=n(907),i=n(9732),s=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],u=function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))};function m(e){var t,n,m=e.mobile,d=e.docsPluginId,f=e.dropdownActiveClassDisabled,v=e.dropdownItemsBefore,h=e.dropdownItemsAfter,g=(0,a.Z)(e,s),b=(0,c.Iw)(d),E=(0,c.gB)(d),p=(0,c.yW)(d),k=(0,i.J)(d),Z=k.preferredVersion,_=k.savePreferredVersionName;var y=null!=(t=null!=(n=b.activeVersion)?n:Z)?t:p,N=m?"Versions":y.label,w=m?void 0:u(y).path;return l.createElement(o.Z,(0,r.Z)({},g,{mobile:m,label:N,to:w,items:function(){var e=E.map((function(e){var t=(null==b?void 0:b.alternateDocVersions[e.name])||u(e);return{isNavLink:!0,label:e.label,to:t.path,isActive:function(){return e===(null==b?void 0:b.activeVersion)},onClick:function(){_(e.name)}}})),t=[].concat(v,e,h);if(!(t.length<=1))return t}(),isActive:f?function(){return!1}:void 0}))}},7250:function(e,t,n){n.d(t,{Z:function(){return u}});var r=n(7462),a=n(3366),l=n(7294),o=n(5525),c=n(907),i=n(9732),s=["label","to","docsPluginId"];function u(e){var t,n=e.label,u=e.to,m=e.docsPluginId,d=(0,a.Z)(e,s),f=(0,c.zu)(m),v=(0,i.J)(m).preferredVersion,h=(0,c.yW)(m),g=null!=(t=null!=f?f:v)?t:h,b=null!=n?n:g.label,E=null!=u?u:function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))}(g).path;return l.createElement(o.Z,(0,r.Z)({},d,{label:b,to:E}))}},2924:function(e,t,n){var r=n(7294).createContext(void 0);t.Z=r},8465:function(e,t,n){n.d(t,{Z:function(){return m}});var r=n(7462),a=n(3366),l=n(7294),o=n(6010),c=n(2263),i=n(5350),s={themedImage:"themedImage_1VuW","themedImage--light":"themedImage--light_3UqQ","themedImage--dark":"themedImage--dark_hz6m"},u=["sources","className","alt"],m=function(e){var t=(0,c.Z)().isClient,n=(0,i.Z)().isDarkTheme,m=e.sources,d=e.className,f=e.alt,v=void 0===f?"":f,h=(0,a.Z)(e,u),g=t?n?["dark"]:["light"]:["light","dark"];return l.createElement(l.Fragment,null,g.map((function(e){return l.createElement("img",(0,r.Z)({key:e,src:m[e],alt:v,className:(0,o.Z)(s.themedImage,s["themedImage--"+e],d)},h))})))}},9443:function(e,t,n){var r=(0,n(7294).createContext)(void 0);t.Z=r},1839:function(e,t,n){var r=n(7294);t.Z=function(e){void 0===e&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e])}},7898:function(e,t,n){var r=n(7294),a=n(412),l=function(){return{scrollX:a.Z.canUseDOM?window.pageXOffset:0,scrollY:a.Z.canUseDOM?window.pageYOffset:0}};t.Z=function(e,t){void 0===t&&(t=[]);var n=(0,r.useRef)(l()),a=function(){var t=l();e&&e(t,n.current),n.current=t};(0,r.useEffect)((function(){var e={passive:!0};return a(),window.addEventListener("scroll",a,e),function(){return window.removeEventListener("scroll",a,e)}}),t)}},5350:function(e,t,n){var r=n(7294),a=n(2924);t.Z=function(){var e=(0,r.useContext)(a.Z);if(null==e)throw new Error("`useThemeContext` is used outside of `Layout` Component. See https://docusaurus.io/docs/api/themes/configuration#usethemecontext.");return e}},944:function(e,t,n){var r=n(7294),a=n(9443);t.Z=function(){var e=(0,r.useContext)(a.Z);if(null==e)throw new Error("`useUserPreferencesContext` is used outside of `Layout` Component.");return e}},3783:function(e,t,n){n.d(t,{D:function(){return l}});var r=n(7294),a=n(412),l={desktop:"desktop",mobile:"mobile"};t.Z=function(){var e=a.Z.canUseDOM;function t(){if(e)return window.innerWidth>996?l.desktop:l.mobile}var n=(0,r.useState)(t),o=n[0],c=n[1];return(0,r.useEffect)((function(){if(e)return window.addEventListener("resize",n),function(){return window.removeEventListener("resize",n)};function n(){c(t())}}),[]),o}}}]); \ No newline at end of file diff --git a/assets/js/17896441.c8a6b470.js b/assets/js/17896441.c8a6b470.js new file mode 100644 index 00000000..19209e12 --- /dev/null +++ b/assets/js/17896441.c8a6b470.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[918],{6995:function(e,t,a){a.r(t),a.d(t,{default:function(){return C}});var n=a(7294),l=a(6742),r=a(4973);var i=function(e){var t=e.metadata;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,r.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},n.createElement("div",{className:"pagination-nav__item"},t.previous&&n.createElement(l.Z,{className:"pagination-nav__link",to:t.previous.permalink},n.createElement("div",{className:"pagination-nav__sublabel"},n.createElement(r.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")),n.createElement("div",{className:"pagination-nav__label"},"\xab ",t.previous.title))),n.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},t.next&&n.createElement(l.Z,{className:"pagination-nav__link",to:t.next.permalink},n.createElement("div",{className:"pagination-nav__sublabel"},n.createElement(r.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next")),n.createElement("div",{className:"pagination-nav__label"},t.next.title," \xbb"))))},s=a(2263),o=a(907),c=a(9732);function d(e){var t=e.siteTitle,a=e.versionLabel;return n.createElement(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:n.createElement("strong",null,a)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")}function m(e){var t=e.siteTitle,a=e.versionLabel;return n.createElement(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:n.createElement("strong",null,a)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}function u(e){var t=e.versionLabel,a=e.to,i=e.onClick;return n.createElement(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label userd to tell the user that he's browsing an unmaintained doc version",values:{versionLabel:t,latestVersionLink:n.createElement("strong",null,n.createElement(l.Z,{to:a,onClick:i},n.createElement(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}var v=function(){var e=(0,s.Z)().siteConfig.title,t=(0,o.gA)({failfast:!0}).pluginId,a=(0,c.J)(t).savePreferredVersionName,l=(0,o.zu)(t),r=(0,o.Jo)(t),i=r.latestDocSuggestion,v=r.latestVersionSuggestion;if(!v)return n.createElement(n.Fragment,null);var p,E=null!=i?i:(p=v).docs.find((function(e){return e.id===p.mainDocId}));return n.createElement("div",{className:"alert alert--warning margin-bottom--md",role:"alert"},n.createElement("div",null,"current"===l.name?n.createElement(d,{siteTitle:e,versionLabel:l.label}):n.createElement(m,{siteTitle:e,versionLabel:l.label})),n.createElement("div",{className:"margin-top--md"},n.createElement(u,{versionLabel:v.label,to:E.path,onClick:function(){return a(v.name)}})))},p=a(1217),E="lastUpdatedDate_1WI_";function h(e){var t=e.lastUpdatedAt,a=e.formattedLastUpdatedAt;return n.createElement(r.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:n.createElement("time",{dateTime:new Date(1e3*t).toISOString(),className:E},a)}}," on {date}")}function g(e){var t=e.lastUpdatedBy;return n.createElement(r.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:n.createElement("strong",null,t)}}," by {user}")}function f(e){var t=e.lastUpdatedAt,a=e.formattedLastUpdatedAt,l=e.lastUpdatedBy;return n.createElement("div",{className:"col text--right"},n.createElement("em",null,n.createElement("small",null,n.createElement(r.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&a?n.createElement(h,{lastUpdatedAt:t,formattedLastUpdatedAt:a}):"",byUser:l?n.createElement(g,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)))}var b=a(571),_=a(7462),N=a(3366),L=a(6010),U="iconEdit_2_ui",T=["className"],k=function(e){var t=e.className,a=(0,N.Z)(e,T);return n.createElement("svg",(0,_.Z)({fill:"currentColor",height:"1.2em",width:"1.2em",preserveAspectRatio:"xMidYMid meet",role:"img",viewBox:"0 0 40 40",className:(0,L.Z)(U,t),"aria-label":"Edit page"},a),n.createElement("g",null,n.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))};function y(e){var t=e.editUrl;return n.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener"},n.createElement(k,null),n.createElement(r.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}var Z="docTitle_3a4h",w="docItemContainer_33ec",A="docItemCol_3FnS";var C=function(e){var t,a=e.content,l=a.metadata,r=a.frontMatter,s=r.image,c=r.keywords,d=r.hide_title,m=r.hide_table_of_contents,u=l.description,E=l.title,h=l.editUrl,g=l.lastUpdatedAt,_=l.formattedLastUpdatedAt,N=l.lastUpdatedBy,U=(0,o.gA)({failfast:!0}).pluginId,T=(0,o.gB)(U),k=(0,o.zu)(U),C=T.length>1,x=r.title||E;return n.createElement(n.Fragment,null,n.createElement(p.Z,{title:x,description:u,keywords:c,image:s}),n.createElement("div",{className:"row"},n.createElement("div",{className:(0,L.Z)("col",(t={},t[A]=!m,t))},n.createElement(v,null),n.createElement("div",{className:w},n.createElement("article",null,C&&n.createElement("div",null,n.createElement("span",{className:"badge badge--secondary"},"Version: ",k.label)),!d&&n.createElement("header",null,n.createElement("h1",{className:Z},E)),n.createElement("div",{className:"markdown"},n.createElement(a,null))),(h||g||N)&&n.createElement("div",{className:"margin-vert--xl"},n.createElement("div",{className:"row"},n.createElement("div",{className:"col"},h&&n.createElement(y,{editUrl:h})),(g||N)&&n.createElement(f,{lastUpdatedAt:g,formattedLastUpdatedAt:_,lastUpdatedBy:N}))),n.createElement("div",{className:"margin-vert--lg"},n.createElement(i,{metadata:l})))),!m&&a.toc&&n.createElement("div",{className:"col col--3"},n.createElement(b.Z,{toc:a.toc}))))}},571:function(e,t,a){a.d(t,{Z:function(){return c}});var n=a(7294),l=a(6010);var r=function(e,t,a){var l=(0,n.useState)(void 0),r=l[0],i=l[1];(0,n.useEffect)((function(){function n(){var n=function(){var e=Array.from(document.getElementsByClassName("anchor")),t=e.find((function(e){return e.getBoundingClientRect().top>=a}));if(t){if(t.getBoundingClientRect().top>=a){var n=e[e.indexOf(t)-1];return null!=n?n:t}return t}return e[e.length-1]}();if(n)for(var l=0,s=!1,o=document.getElementsByClassName(e);l=n}));if(t){if(t.getBoundingClientRect().top>=n){var a=e[e.indexOf(t)-1];return null!=a?a:t}return t}return e[e.length-1]}();if(a)for(var r=0,o=!1,i=document.getElementsByClassName(e);r=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},d=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=s(n),m=i,g=u["".concat(l,".").concat(m)]||u[m]||p[m]||o;return n?r.createElement(g,a(a({ref:t},d),{},{components:n})):r.createElement(g,a({ref:t},d))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=u;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:i,a[1]=c;for(var s=2;s=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var o=r.createContext({}),s=function(e){var t=r.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},p=function(e){var t=s(e.components);return r.createElement(o.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,i=e.mdxType,n=e.originalType,o=e.parentName,p=d(e,["components","mdxType","originalType","parentName"]),c=s(a),m=i,k=c["".concat(o,".").concat(m)]||c[m]||u[m]||n;return a?r.createElement(k,l(l({ref:t},p),{},{components:a})):r.createElement(k,l({ref:t},p))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var n=a.length,l=new Array(n);l[0]=c;var d={};for(var o in t)hasOwnProperty.call(t,o)&&(d[o]=t[o]);d.originalType=e,d.mdxType="string"==typeof e?e:i,l[1]=d;for(var s=2;s=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 s=r.createContext({}),d=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=d(n),m=a,k=u["".concat(s,".").concat(m)]||u[m]||c[m]||i;return n?r.createElement(k,o(o({ref:t},p),{},{components:n})):r.createElement(k,o({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var d=2;d0)&&(l.unobserve(n),l.disconnect(),t())}))}))).observe(n))},to:E||""},v&&{isActive:h,activeClassName:g}))}},4973:function(e,n,t){t.d(n,{Z:function(){return l},I:function(){return f}});var r=t(7294),o=/{\w+}/g,u="{}";function i(e,n){var t=[],i=e.replace(o,(function(e){var o=e.substr(1,e.length-2),i=null==n?void 0:n[o];if(void 0!==i){var a=r.isValidElement(i)?i:String(i);return t.push(a),u}return e}));return 0===t.length?e:t.every((function(e){return"string"==typeof e}))?i.split(u).reduce((function(e,n,r){var o;return e.concat(n).concat(null!==(o=t[r])&&void 0!==o?o:"")}),""):i.split(u).reduce((function(e,n,o){return[].concat(e,[r.createElement(r.Fragment,{key:o},n,t[o])])}),[])}function a(e){return i(e.children,e.values)}var c=t(7529);function s(e){var n,t=e.id,r=e.message;return null!==(n=c[null!=t?t:r])&&void 0!==n?n:r}function f(e,n){var t,r=e.message;return i(null!==(t=s({message:r,id:e.id}))&&void 0!==t?t:r,n)}function l(e){var n,t=e.children,o=e.id,u=e.values,i=null!==(n=s({message:t,id:o}))&&void 0!==n?n:t;return r.createElement(a,{values:u},i)}},3919:function(e,n,t){function r(e){return!0===/^(\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}t.d(n,{b:function(){return r},Z:function(){return o}})},8143:function(e,n,t){t.r(n),t.d(n,{BrowserRouter:function(){return r.VK},HashRouter:function(){return r.UT},Link:function(){return r.rU},MemoryRouter:function(){return r.VA},NavLink:function(){return r.OL},Prompt:function(){return r.NL},Redirect:function(){return r.l_},Route:function(){return r.AW},Router:function(){return r.F0},StaticRouter:function(){return r.gx},Switch:function(){return r.rs},generatePath:function(){return r.Gn},matchPath:function(){return r.LX},useHistory:function(){return r.k6},useLocation:function(){return r.TH},useParams:function(){return r.UO},useRouteMatch:function(){return r.$B},withRouter:function(){return r.EN}});var r=t(3727)},4996:function(e,n,t){t.d(n,{C:function(){return u},Z:function(){return i}});var r=t(2263),o=t(3919);function u(){var e=(0,r.Z)().siteConfig,n=(e=void 0===e?{}:e).baseUrl,t=void 0===n?"/":n,u=e.url;return{withBaseUrl:function(e,n){return function(e,n,t,r){var u=void 0===r?{}:r,i=u.forcePrependBaseUrl,a=void 0!==i&&i,c=u.absolute,s=void 0!==c&&c;if(!t)return t;if(t.startsWith("#"))return t;if((0,o.b)(t))return t;if(a)return n+t;var f=t.startsWith(n)?t:n+t.replace(/^\//,"");return s?e+f:f}(u,t,e,n)}}}function i(e,n){return void 0===n&&(n={}),(0,u().withBaseUrl)(e,n)}},8084:function(e,n,t){t.r(n),t.d(n,{default:function(){return o},useAllPluginInstancesData:function(){return u},usePluginData:function(){return i}});var r=t(2263);function o(){var e=(0,r.Z)().globalData;if(!e)throw new Error("Docusaurus global data not found");return e}function u(e){var n=o()[e];if(!n)throw new Error("Docusaurus plugin global data not found for pluginName="+e);return n}function i(e,n){void 0===n&&(n="default");var t=u(e)[n];if(!t)throw new Error("Docusaurus plugin global data not found for pluginName="+e+" and pluginId="+n);return t}},1217:function(e,n,t){t.d(n,{Z:function(){return a}});var r=t(7294),o=t(9105),u=t(9732),i=t(4996);function a(e){var n=e.title,t=e.description,a=e.keywords,c=e.image,s=(0,u.LU)().image,f=(0,u.pe)(n),l=(0,i.Z)(c||s,{absolute:!0});return r.createElement(o.Z,null,n&&r.createElement("title",null,f),n&&r.createElement("meta",{property:"og:title",content:f}),t&&r.createElement("meta",{name:"description",content:t}),t&&r.createElement("meta",{property:"og:description",content:t}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),l&&r.createElement("meta",{property:"og:image",content:l}),l&&r.createElement("meta",{name:"twitter:image",content:l}),l&&r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}))}},907:function(e,n,t){t.d(n,{Iw:function(){return r.useActiveDocContext},gA:function(){return r.useActivePlugin},zu:function(){return r.useActiveVersion},_r:function(){return r.useAllDocsData},Jo:function(){return r.useDocVersionSuggestions},zh:function(){return r.useDocsData},yW:function(){return r.useLatestVersion},gB:function(){return r.useVersions}});var r=t(7281)},3372:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.getDocVersionSuggestions=n.getActiveDocContext=n.getActiveVersion=n.getLatestVersion=n.getActivePlugin=void 0;var r=t(8143);n.getActivePlugin=function(e,n,t){void 0===t&&(t={});var o=Object.entries(e).find((function(e){e[0];var t=e[1];return!!r.matchPath(n,{path:t.path,exact:!1,strict:!1})})),u=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!u&&t.failfast)throw new Error("Can't find active docs plugin for pathname="+n+", 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((function(e){return e.path})).join(", "));return u};n.getLatestVersion=function(e){return e.versions.find((function(e){return e.isLast}))};n.getActiveVersion=function(e,t){var o=n.getLatestVersion(e);return[].concat(e.versions.filter((function(e){return e!==o})),[o]).find((function(e){return!!r.matchPath(t,{path:e.path,exact:!1,strict:!1})}))};n.getActiveDocContext=function(e,t){var o,u,i=n.getActiveVersion(e,t),a=null==i?void 0:i.docs.find((function(e){return!!r.matchPath(t,{path:e.path,exact:!0,strict:!1})}));return{activeVersion:i,activeDoc:a,alternateDocVersions:a?(o=a.id,u={},e.versions.forEach((function(e){e.docs.forEach((function(n){n.id===o&&(u[e.name]=n)}))})),u):{}}};n.getDocVersionSuggestions=function(e,t){var r=n.getLatestVersion(e),o=n.getActiveDocContext(e,t),u=o.activeVersion!==r;return{latestDocSuggestion:u?null==o?void 0:o.alternateDocVersions[r.name]:void 0,latestVersionSuggestion:u?r:void 0}}},7281:function(e,n,t){Object.defineProperty(n,"__esModule",{value:!0}),n.useDocVersionSuggestions=n.useActiveDocContext=n.useActiveVersion=n.useLatestVersion=n.useVersions=n.useActivePluginAndVersion=n.useActivePlugin=n.useDocsData=n.useAllDocsData=void 0;var r=t(655),o=t(8143),u=r.__importStar(t(8084)),i=t(3372);n.useAllDocsData=function(){var e;return null!==(e=u.default()["docusaurus-plugin-content-docs"])&&void 0!==e?e:{}};n.useDocsData=function(e){return u.usePluginData("docusaurus-plugin-content-docs",e)};n.useActivePlugin=function(e){void 0===e&&(e={});var t=n.useAllDocsData(),r=o.useLocation().pathname;return i.getActivePlugin(t,r,e)};n.useActivePluginAndVersion=function(e){void 0===e&&(e={});var t=n.useActivePlugin(e),r=o.useLocation().pathname;if(t)return{activePlugin:t,activeVersion:i.getActiveVersion(t.pluginData,r)}};n.useVersions=function(e){return n.useDocsData(e).versions};n.useLatestVersion=function(e){var t=n.useDocsData(e);return i.getLatestVersion(t)};n.useActiveVersion=function(e){var t=n.useDocsData(e),r=o.useLocation().pathname;return i.getActiveVersion(t,r)};n.useActiveDocContext=function(e){var t=n.useDocsData(e),r=o.useLocation().pathname;return i.getActiveDocContext(t,r)};n.useDocVersionSuggestions=function(e){var t=n.useDocsData(e),r=o.useLocation().pathname;return i.getDocVersionSuggestions(t,r)}},9732:function(e,n,t){t.d(n,{HX:function(){return g},L5:function(){return j},kM:function(){return k},WA:function(){return s},os:function(){return h},Mg:function(){return w},_f:function(){return f},bc:function(){return p},l5:function(){return v},ru:function(){return A},J:function(){return C},LU:function(){return o},pe:function(){return b}});var r=t(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}var u="localStorage";function i(e){if(void 0===e&&(e=u),"undefined"==typeof window)throw new Error("Browser storage is not available on NodeJS / Docusaurus SSR process");if("none"===e)return null;try{return window[e]}catch(t){return n=t,a||(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.",n),a=!0),null}var n}var a=!1;var c={get:function(){return null},set:function(){},del:function(){}};var s=function(e,n){if("undefined"==typeof window)return function(e){function n(){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:n,set:n,del:n}}(e);var t=i(null==n?void 0:n.persistence);return null===t?c:{get:function(){return t.getItem(e)},set:function(n){return t.setItem(e,n)},del:function(){return t.removeItem(e)}}};function f(e){void 0===e&&(e=u);var n=i(e);if(!n)return[];for(var t=[],r=0;r=0;a--)(o=e[a])&&(i=(u<3?o(i):u>3?o(n,t,i):o(n,t))||i);return u>3&&i&&Object.defineProperty(n,t,i),i}function c(e,n){return function(t,r){n(t,r,e)}}function s(e,n){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,n)}function f(e,n,t,r){return new(t||(t=Promise))((function(o,u){function i(e){try{c(r.next(e))}catch(n){u(n)}}function a(e){try{c(r.throw(e))}catch(n){u(n)}}function c(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(i,a)}c((r=r.apply(e,n||[])).next())}))}function l(e,n){var t,r,o,u,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return u={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(u[Symbol.iterator]=function(){return this}),u;function a(u){return function(a){return function(u){if(t)throw new TypeError("Generator is already executing.");for(;i;)try{if(t=1,r&&(o=2&u[0]?r.return:u[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,u[1])).done)return o;switch(r=0,o&&(u=[2&u[0],o.value]),u[0]){case 0:case 1:o=u;break;case 4:return i.label++,{value:u[1],done:!1};case 5:i.label++,r=u[1],u=[0];continue;case 7:u=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==u[0]&&2!==u[0])){i=0;continue}if(3===u[0]&&(!o||u[1]>o[0]&&u[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(e,n){var t="function"==typeof Symbol&&e[Symbol.iterator];if(!t)return e;var r,o,u=t.call(e),i=[];try{for(;(void 0===n||n-- >0)&&!(r=u.next()).done;)i.push(r.value)}catch(a){o={error:a}}finally{try{r&&!r.done&&(t=u.return)&&t.call(u)}finally{if(o)throw o.error}}return i}function h(){for(var e=[],n=0;n1||a(e,n)}))})}function a(e,n){try{(t=o[e](n)).value instanceof w?Promise.resolve(t.value.v).then(c,s):f(u[0][2],t)}catch(r){f(u[0][3],r)}var t}function c(e){a("next",e)}function s(e){a("throw",e)}function f(e,n){e(n),u.shift(),u.length&&a(u[0][0],u[0][1])}}function _(e){var n,t;return n={},r("next"),r("throw",(function(e){throw e})),r("return"),n[Symbol.iterator]=function(){return this},n;function r(r,o){n[r]=e[r]?function(n){return(t=!t)?{value:w(e[r](n)),done:"return"===r}:o?o(n):n}:o}}function P(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,t=e[Symbol.asyncIterator];return t?t.call(e):(e=p(e),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(t){n[t]=e[t]&&function(n){return new Promise((function(r,o){(function(e,n,t,r){Promise.resolve(r).then((function(n){e({value:n,done:t})}),n)})(r,o,(n=e[t](n)).done,n.value)}))}}}function D(e,n){return Object.defineProperty?Object.defineProperty(e,"raw",{value:n}):e.raw=n,e}var A=Object.create?function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}:function(e,n){e.default=n};function V(e){if(e&&e.__esModule)return e;var n={};if(null!=e)for(var t in e)"default"!==t&&Object.prototype.hasOwnProperty.call(e,t)&&v(n,e,t);return A(n,e),n}function E(e){return e&&e.__esModule?e:{default:e}}function O(e,n,t,r){if("a"===t&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof n?e!==n||!r:!n.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?r:"a"===t?r.call(e):r?r.value:n.get(e)}function x(e,n,t,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof n?e!==n||!o:!n.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,t):o?o.value=t:n.set(e,t),t}}}]); \ No newline at end of file diff --git a/assets/js/486.3dcb45d1.js.LICENSE.txt b/assets/js/486.3dcb45d1.js.LICENSE.txt new file mode 100644 index 00000000..c18ab1d9 --- /dev/null +++ b/assets/js/486.3dcb45d1.js.LICENSE.txt @@ -0,0 +1,14 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ diff --git a/assets/js/4d54d076.ba6db6b4.js b/assets/js/4d54d076.ba6db6b4.js new file mode 100644 index 00000000..aa30665b --- /dev/null +++ b/assets/js/4d54d076.ba6db6b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[80],{3905:function(e,t,n){n.d(t,{Zo:function(){return l},kt:function(){return f}});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({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},l=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),p=c(n),f=o,m=p["".concat(s,".").concat(f)]||p[f]||d[f]||i;return n?r.createElement(m,a(a({ref:t},l),{},{components:n})):r.createElement(m,a({ref:t},l))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=p;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u.mdxType="string"==typeof e?e:o,a[1]=u;for(var c=2;c=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},u=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,i=e.mdxType,l=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),c=d(t),m=i,h=c["".concat(s,".").concat(m)]||c[m]||p[m]||l;return t?a.createElement(h,r(r({ref:n},u),{},{components:t})):a.createElement(h,r({ref:n},u))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var l=t.length,r=new Array(l);r[0]=c;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o.mdxType="string"==typeof e?e:i,r[1]=o;for(var d=2;dwasm-pack (Required for both WEB targets)",id:"wasm-pack-required-for-both-web-targets",children:[]},{value:"binaryen",id:"binaryen",children:[]},{value:"DIDKit and SSI",id:"didkit-and-ssi",children:[]}]},{value:"Target-Specific Dependencies",id:"target-specific-dependencies",children:[{value:"Android Dependencies",id:"android-dependencies",children:[]},{value:"iOS Dependencies",id:"ios-dependencies",children:[]},{value:"Web Dependencies",id:"web-dependencies",children:[]}]},{value:"Building DIDKit for different targets",id:"building-didkit-for-different-targets",children:[{value:"Android",id:"android",children:[]},{value:"Android APK",id:"android-apk",children:[]},{value:"Android App Bundle",id:"android-app-bundle",children:[]},{value:"iOS",id:"ios",children:[]},{value:"Web using WASM",id:"web-using-wasm",children:[]},{value:"Web using ASM.js",id:"web-using-asmjs",children:[]}]},{value:"Building Credible",id:"building-credible",children:[{value:"Run on emulator",id:"run-on-emulator",children:[]},{value:"Run on browser",id:"run-on-browser",children:[]},{value:"iOS .app for Simulator",id:"ios-app-for-simulator",children:[]},{value:"iOS .app for Devices",id:"ios-app-for-devices",children:[]},{value:"iOS IPA",id:"ios-ipa",children:[]},{value:"Web",id:"web",children:[]},{value:"Note about nullsafety",id:"note-about-nullsafety",children:[]},{value:"Note about canvaskit",id:"note-about-canvaskit",children:[]}]},{value:"Troubleshooting",id:"troubleshooting",children:[{value:"Build Environment Problems",id:"build-environment-problems",children:[]},{value:"Opaque Makefile error messages",id:"opaque-makefile-error-messages",children:[]}]}],u={toc:d};function p(e){var n=e.components,t=(0,i.Z)(e,r);return(0,l.kt)("wrapper",(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"app-stores"},"App stores"),(0,l.kt)("p",null,"We are also in the process of listing Credible on the iOS TestFlight and Android\nPlay Beta programs, and eventually their respective app marketplaces plus\nF-Droid."),(0,l.kt)("h2",{id:"common-dependencies"},"Common Dependencies"),(0,l.kt)("p",null,"To manually build Credible for either Android or iOS, you will need to install\nthe following dependencies (instructions follow):"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Rust"),(0,l.kt)("li",{parentName:"ul"},"Java 7 or higher"),(0,l.kt)("li",{parentName:"ul"},"Flutter (",(0,l.kt)("inlineCode",{parentName:"li"},"dev")," channel)"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://github.com/spruceid/didkit"},"DIDKit"),"/",(0,l.kt)("a",{parentName:"li",href:"https://github.com/spruceid/ssi"},"SSI")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"wasm-pack")," (WEB)"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"binaryen")," (WEB and targeting ASM.js)")),(0,l.kt)("h3",{id:"rust"},"Rust"),(0,l.kt)("p",null,"It is recommended to use ",(0,l.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/tools/install"},"rustup")," to\nmanage your Rust installation."),(0,l.kt)("h3",{id:"java"},"Java"),(0,l.kt)("p",null,"On Ubuntu you could run:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ sudo apt update\n$ sudo apt install openjdk-8-jdk\n")),(0,l.kt)("p",null,"For more information, please refer to the documentation of your favorite flavour\nof Java and your operating system/package manager."),(0,l.kt)("h3",{id:"flutter"},"Flutter"),(0,l.kt)("p",null,"Please follow the official instalation instructions available\n",(0,l.kt)("a",{parentName:"p",href:"https://flutter.dev/docs/get-started/install"},"here")," to install Flutter,\ndon't forget to also install the build dependencies for the platform you\nwill be building (Android SDK/NDK, Xcode, etc)."),(0,l.kt)("p",null,"We currently only support build this project using the ",(0,l.kt)("inlineCode",{parentName:"p"},"dev")," channel of Flutter."),(0,l.kt)("p",null,"To change your installation to the ",(0,l.kt)("inlineCode",{parentName:"p"},"dev")," channel, please execute the following command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter channel dev\n$ flutter upgrade\n")),(0,l.kt)("p",null,"To confirm that everything is setup correctly, please run the following command\nand resolve any issues that arise before proceeding to the next steps."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter doctor\n")),(0,l.kt)("h3",{id:"wasm-pack-required-for-both-web-targets"},(0,l.kt)("inlineCode",{parentName:"h3"},"wasm-pack")," (Required for both WEB targets)"),(0,l.kt)("p",null,"The wasm-pack cannot yet be compiled from crates.io. For now, to build the WASM\ntarget you will need ",(0,l.kt)("inlineCode",{parentName:"p"},"wasm-pack"),", the fastest way is to fetch the script from\ngithub and run it in the credible root directory:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh\n")),(0,l.kt)("h3",{id:"binaryen"},(0,l.kt)("inlineCode",{parentName:"h3"},"binaryen")),(0,l.kt)("p",null,"To build Credible for WEB using ASM.js you will need\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/WebAssembly/binaryen"},"binaryen"),", which allows the conversion\nof DIDKit WASM to ASM.js. This is necessary in context where WASM support is not\navailable and DIDKit needs to run in pure Javascript. More detailed instructions\non how to build ",(0,l.kt)("inlineCode",{parentName:"p"},"binaryen")," can be found\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/WebAssembly/binaryen"},"here"),"."),(0,l.kt)("p",null,"If you are in a UNIX-like distribution you just have to clone the repo and build,\nwe recommend cloning into your ",(0,l.kt)("inlineCode",{parentName:"p"},"${HOME}"),", to avoid having to specify the\n",(0,l.kt)("inlineCode",{parentName:"p"},"${BINARYEN_ROOT}")," variable:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ git clone https://github.com/WebAssembly/binaryen ~/binaryen\n$ cd ~/binaryen\n$ cmake . && make\n")),(0,l.kt)("p",null,"Not that binaryen support for OS X and Windows is still limited, so it is highly\nrecommended to build it in a linux shell on OS X and on WSL2 in Windows. For\ninstructions on building it natively in Windows, see ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/WebAssembly/binaryen#faq"},"the binaryen\nFAQ")," on github."),(0,l.kt)("h3",{id:"didkit-and-ssi"},"DIDKit and SSI"),(0,l.kt)("p",null,"This project also depends on two other Spruce projects,\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit"},(0,l.kt)("inlineCode",{parentName:"a"},"DIDKit"))," and\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/spruceid/ssi"},(0,l.kt)("inlineCode",{parentName:"a"},"SSI")),". "),(0,l.kt)("p",null,"These projects are all configured to work with relative paths by default, so it\nis recommended to clone them all as subdirectories of the same root directory,\nfor example\n",(0,l.kt)("inlineCode",{parentName:"p"},"$HOME/spruceid/didkit\n$HOME/spruceid/ssi\n$HOME/spruceid/credible\n$HOME/spruceid/treehouse\netc")),(0,l.kt)("h2",{id:"target-specific-dependencies"},"Target-Specific Dependencies"),(0,l.kt)("h3",{id:"android-dependencies"},"Android Dependencies"),(0,l.kt)("p",null,"To build Credible for Android, you will require both the Android SDK and NDK."),(0,l.kt)("p",null,"These two dependencies can be easily obtained with ",(0,l.kt)("a",{parentName:"p",href:"https://developer.android.com/studio/install"},"Android\nStudio"),', which install further\ndependencies upon first being opened after installation. Installing the\nappropriate Android NDK (often not the newest) in Android Studio can be\naccomplished by going to Settings > Appearance & Behavior > System Settings >\nAndroid SDK and selecting to install the "NDK (Side by Side)". An alternative\nmethod of installing SDK and NDK without Android Studio can be found in the\noptional\n',(0,l.kt)("a",{parentName:"p",href:"https://github.com/spruceid/credible/blob/main/install_android_dependencies.sh"},"install_android_dependencies.sh"),"\nscript included here."),(0,l.kt)("p",null,"If your Android SDK doesn't live at ",(0,l.kt)("inlineCode",{parentName:"p"},"$HOME/Android/Sdk")," you will need to set\n",(0,l.kt)("inlineCode",{parentName:"p"},"ANDROID_SDK_ROOT")," like so:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ export ANDROID_SDK_ROOT=/path/to/Android/Sdk\n")),(0,l.kt)("p",null,(0,l.kt)("em",{parentName:"p"},"Note: Some users have experienced difficulties with expected cross-compilation\nartefacts missing from the newest NDK, which is downloaded by default in the\ninstallation process. If you experience errors of this kind, you may have to\nmanually downgrade or install multiple NDK versions as ","[shown\nhere]",")(img/ndk_downgrade.png) in the Android Studio installer (screengrabbed\nfrom an Ubuntu installation). Alternately, running all or parts of the\n",(0,l.kt)("a",{parentName:"em",href:"https://github.com/spruceid/credible/blob/main/install_android_dependencies.sh"},"install_android_dependencies.sh")," script may be\nhelpful.")),(0,l.kt)("p",null,"If your ",(0,l.kt)("inlineCode",{parentName:"p"},"build-tools")," and/or ",(0,l.kt)("inlineCode",{parentName:"p"},"NDK")," live in different locations than the default ones inside /SDK/, or if you want to specify a specific NDK or build-tools version, you can manually configure the following two environment variables:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ export ANDROID_TOOLS=/path/to/SDK/build-tools/XX.X.X/\n$ export ANDROID_NDK_HOME=/path/to/SDK/ndk/XX.X.XXXXX/\n")),(0,l.kt)("p",null,"::: "),(0,l.kt)("h3",{id:"ios-dependencies"},"iOS Dependencies"),(0,l.kt)("p",null,"To build Credible for iOS you will need to install CocoaPods, which can be done\nwith Homebrew on MacOS, WSL2, or Linux-based systems. You will also need\n",(0,l.kt)("a",{parentName:"p",href:"https://developer.apple.com/xcode/"},"XCode"),", which is not available for WSL2 or\nLinux systems; it is currently possible but not recommended to install XCode\nin those build environments."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ sudo apt install linuxbrew-wrapper\n$ brew install cocoapods\n")),(0,l.kt)("h3",{id:"web-dependencies"},"Web Dependencies"),(0,l.kt)("p",null,"To build Credible for WASM, you will need the Node.JS and its package manager,\n",(0,l.kt)("inlineCode",{parentName:"p"},"npm")," to be installed:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ sudo apt install nodejs\n$ sudo apt install npm\n")),(0,l.kt)("p",null,(0,l.kt)("em",{parentName:"p"},"Note: in some environments, such as Ubuntu 18.04, npm may not automatically\ninstall a new enough version for our makefile to execute succesfully; overriding\nit with ",(0,l.kt)("inlineCode",{parentName:"em"},"npm"),"'s ",(0,l.kt)("a",{parentName:"em",href:"https://github.com/npm/cli/issues/681#issuecomment-793916156"},"internal\ncommands")," may be\nnecessary.")),(0,l.kt)("h2",{id:"building-didkit-for-different-targets"},"Building DIDKit for different targets"),(0,l.kt)("h3",{id:"android"},"Android"),(0,l.kt)("p",null,"To build ",(0,l.kt)("inlineCode",{parentName:"p"},"DIDKit")," for the Android targets, you will go to the root of ",(0,l.kt)("inlineCode",{parentName:"p"},"DIDKit"),"\nand run:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ make -C lib install-rustup-android\n$ make -C lib ../target/test/java.stamp\n$ make -C lib ../target/test/aar.stamp\n$ make -C lib ../target/test/flutter.stamp\n$ cargo build\n")),(0,l.kt)("p",null,(0,l.kt)("em",{parentName:"p"},"This may take some time as it compiles the entire project for multiple targets")),(0,l.kt)("h3",{id:"android-apk"},"Android APK"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build apk --no-sound-null-safety\n")),(0,l.kt)("h3",{id:"android-app-bundle"},"Android App Bundle"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build appbundle --no-sound-null-safety\n")),(0,l.kt)("h3",{id:"ios"},"iOS"),(0,l.kt)("p",null,"To build DIDKit for the iOS targets, you wGo to the root of ",(0,l.kt)("inlineCode",{parentName:"p"},"DIDKit")," and run\n: "),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ make -C lib install-rustup-ios \n$ make -C lib ../target/test/ios.stamp\n$ cargo build\n")),(0,l.kt)("h3",{id:"web-using-wasm"},"Web ",(0,l.kt)("em",{parentName:"h3"},"using WASM")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ make -C lib ../target/test/wasm.stamp\n")),(0,l.kt)("h3",{id:"web-using-asmjs"},"Web ",(0,l.kt)("em",{parentName:"h3"},"using ASM.js")),(0,l.kt)("p",null,"If you have installed ",(0,l.kt)("inlineCode",{parentName:"p"},"bynarien")," somewhere other than $HOME, you will have to\nset ",(0,l.kt)("inlineCode",{parentName:"p"},"BYNARIEN_ROOT")," as shown below, otherwise, just run the ",(0,l.kt)("inlineCode",{parentName:"p"},"make")," command."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ export BINARYEN_ROOT=/path/to/binaryen\n$ make -C lib ../target/test/asmjs.stamp\n")),(0,l.kt)("h2",{id:"building-credible"},"Building Credible"),(0,l.kt)("p",null,"You are now ready to build or run Credible."),(0,l.kt)("h3",{id:"run-on-emulator"},"Run on emulator"),(0,l.kt)("p",null,"If you want to run the project on your connected device, you can use:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter run --no-sound-null-safety\n")),(0,l.kt)("h3",{id:"run-on-browser"},"Run on browser"),(0,l.kt)("p",null,"If you want to run the project on your browser, you can use:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter run --no-sound-null-safety -d chrome --csp --release\n")),(0,l.kt)("p",null,"Otherwise, Flutter allows us to build many artifacts for Android, iOS and WEB,\nbelow you can find the most common and useful commands, all of which you should\nrun from the root of Credible."),(0,l.kt)("h3",{id:"ios-app-for-simulator"},"iOS .app for Simulator"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build ios --no-sound-null-safety --no-codesign --simulator\n")),(0,l.kt)("h3",{id:"ios-app-for-devices"},"iOS .app for Devices"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build ios --no-sound-null-safety --no-codesign\n")),(0,l.kt)("h3",{id:"ios-ipa"},"iOS IPA"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build ipa --no-sound-null-safety\n")),(0,l.kt)("h3",{id:"web"},"Web"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build web \\\n --no-sound-null-safety \\\n --csp \\\n --release\n")),(0,l.kt)("p",null,"If you don't have support for WASM, you'll probably need to provide your own\n",(0,l.kt)("inlineCode",{parentName:"p"},"canvaskit")," dependency without WASM as well as DIDKit, to do that you need to\nspecify the ",(0,l.kt)("inlineCode",{parentName:"p"},"FLUTTER_WEB_CANVASKIT_URL")," in the build command like below."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build web \\\n --no-sound-null-safety \\\n --csp \\\n --dart-define=FLUTTER_WEB_CANVASKIT_URL=vendor/ \\\n --release\n")),(0,l.kt)("p",null,"For more details about any of these commands you can run"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter build $SUBCOMMAND --help\n")),(0,l.kt)("h3",{id:"note-about-nullsafety"},"Note about ",(0,l.kt)("inlineCode",{parentName:"h3"},"nullsafety")),(0,l.kt)("p",null,"While we are ready to migrate to Dart with nullsafety, a couple of the\ndependencies of the project are still lagging behind, so we need to add ",(0,l.kt)("inlineCode",{parentName:"p"},"--no-sound-null-safely")," to both run and build commands for the time being."),(0,l.kt)("h3",{id:"note-about-canvaskit"},"Note about ",(0,l.kt)("inlineCode",{parentName:"h3"},"canvaskit")),(0,l.kt)("p",null,"Since by default ",(0,l.kt)("inlineCode",{parentName:"p"},"canvaskit")," comes in a ",(0,l.kt)("inlineCode",{parentName:"p"},"WASM")," build, in order to the ",(0,l.kt)("inlineCode",{parentName:"p"},"ASM.js"),"\nbe fully supported ",(0,l.kt)("inlineCode",{parentName:"p"},"canvaskit")," was manually built for this target."),(0,l.kt)("p",null,"A prebuilt ",(0,l.kt)("inlineCode",{parentName:"p"},"canvaskit")," is already included in the Credible web folder.\nIf you want to build it by yourself, however, follow these steps:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Install ",(0,l.kt)("a",{parentName:"li",href:"https://emscripten.org/docs/getting_started/downloads.html"},(0,l.kt)("inlineCode",{parentName:"a"},"emscripten"))),(0,l.kt)("li",{parentName:"ul"},"Clone ",(0,l.kt)("a",{parentName:"li",href:"https://skia.org/user/download"},"Skia")," repository and pull its dependencies")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://skia.googlesource.com/skia.git --depth 1 --branch canvaskit/0.22.0\ncd skia\npython2 tools/git-sync-deps\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Modify build script ",(0,l.kt)("inlineCode",{parentName:"li"},"modules/canvaskit/compile.sh"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"diff --git a/modules/canvaskit/compile.sh b/modules/canvaskit/compile.sh\nindex 6ba58bfae9..51f0297eb6 100755\n--- a/modules/canvaskit/compile.sh\n+++ b/modules/canvaskit/compile.sh\n@@ -397,6 +397,7 @@ EMCC_DEBUG=1 ${EMCXX} \\\n -s MODULARIZE=1 \\\n -s NO_EXIT_RUNTIME=1 \\\n -s INITIAL_MEMORY=128MB \\\n- -s WASM=1 \\\n+ -s WASM=0 \\\n+ -s NO_DYNAMIC_EXECUTION=1 \\\n $STRICTNESS \\\n -o $BUILD_DIR/canvaskit.js\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Build ",(0,l.kt)("inlineCode",{parentName:"li"},"canvaskit"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ cd modules/canvaskit\n$ make debug\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Replace this line on ",(0,l.kt)("inlineCode",{parentName:"li"},"$SKIA/modules/canvaskit/canvaskit/bin/canvaskit.js"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-git"},"618c618\n< var isNode = !(new Function('try {return this===window;}catch(e){ return false;}')());\n---\n> var isNode = false;\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"Copy ",(0,l.kt)("inlineCode",{parentName:"p"},"$SKIA/modules/canvaskit/canvaskit/bin/canvaskit.js")," to\n",(0,l.kt)("inlineCode",{parentName:"p"},"$CREDIBLE/web/vendor/"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"Build Credible as described above."))),(0,l.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,l.kt)("h3",{id:"build-environment-problems"},"Build Environment Problems"),(0,l.kt)("p",null,"If you encounter any errors in the build process described here, please first try\nclean builds of the projects listed."),(0,l.kt)("p",null,"For instance, on Flutter, you can delete build files to start over by running:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"$ flutter clean\n")),(0,l.kt)("p",null,"Also, reviewing the\n",(0,l.kt)("a",{parentName:"p",href:"https://github.com/spruceid/credible/blob/main/install_android_dependencies.sh"},"install_android_dependencies.sh")," script line\nby line or even rerunning it line by line may be helpful."),(0,l.kt)("h3",{id:"opaque-makefile-error-messages"},"Opaque Makefile error messages"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"NPM may through an opaque error when compiling to WASM or ASM.js if ",(0,l.kt)("inlineCode",{parentName:"li"},"apt\ninstall")," has installed too old of a version of ",(0,l.kt)("inlineCode",{parentName:"li"},"npm")," based on your operating\nsystem kernel. This can be manually overridden from ",(0,l.kt)("inlineCode",{parentName:"li"},"npm"),"'s ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/npm/cli/issues/681#issuecomment-793916156"},"internal\ncommands"))))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/608.1cb0b926.js b/assets/js/608.1cb0b926.js new file mode 100644 index 00000000..b8b088da --- /dev/null +++ b/assets/js/608.1cb0b926.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[608],{4608:function(e,t,n){n.r(t);var a=n(7294),o=n(9118),l=n(4973);t.default=function(){return a.createElement(o.Z,{title:"Page Not Found"},a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"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/assets/js/60c74a79.466e37af.js b/assets/js/60c74a79.466e37af.js new file mode 100644 index 00000000..6bfe2c6f --- /dev/null +++ b/assets/js/60c74a79.466e37af.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[834],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return h}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(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||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={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,i=e.mdxType,a=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=l(n),h=i,f=d["".concat(c,".").concat(h)]||d[h]||p[h]||a;return n?r.createElement(f,o(o({ref:t},u),{},{components:n})):r.createElement(f,o({ref:t},u))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=d;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var l=2;l=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 p=r.createContext({}),d=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},m=function(e){var t=d(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),s=d(n),u=a,f=s["".concat(p,".").concat(u)]||s[u]||c[u]||i;return n?r.createElement(f,o(o({ref:t},m),{},{components:n})):r.createElement(f,o({ref:t},m))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=s;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var d=2;d=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),l=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),m=l(n),u=r,f=m["".concat(c,".").concat(u)]||m[u]||p[u]||i;return n?a.createElement(f,o(o({ref:t},d),{},{components:n})):a.createElement(f,o({ref:t},d))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){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.mdxType="string"==typeof e?e:r,o[1]=s;for(var l=2;l=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),s=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),y=s(n),d=o,h=y["".concat(i,".").concat(d)]||y[d]||u[d]||a;return n?r.createElement(h,l(l({ref:t},p),{},{components:n})):r.createElement(h,l({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=y;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:o,l[1]=c;for(var s=2;s0&&e[n-1]===t?e:e.concat(t)},h=function(e,t){var n=e.plain,r=Object.create(null),o=e.styles.reduce((function(e,n){var r=n.languages,o=n.style;return r&&!r.includes(t)||n.types.forEach((function(t){var n=p({},e[t],o);e[t]=n})),e}),r);return o.root=n,o.plain=p({},n,{backgroundColor:null}),o};function m(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}var f=function(e){function t(){for(var t=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];e.apply(this,n),s(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?h(e.theme,e.language):void 0;return t.themeDict=n})),s(this,"getLineProps",(function(e){var n=e.key,r=e.className,o=e.style,a=p({},m(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),l=t.getThemeDict(t.props);return void 0!==l&&(a.style=l.plain),void 0!==o&&(a.style=void 0!==a.style?p({},a.style,o):o),void 0!==n&&(a.key=n),r&&(a.className+=" "+r),a})),s(this,"getStyleForToken",(function(e){var n=e.types,r=e.empty,o=n.length,a=t.getThemeDict(t.props);if(void 0!==a){if(1===o&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===o&&!r)return a[n[0]];var l=r?{display:"inline-block"}:{},c=n.map((function(e){return a[e]}));return Object.assign.apply(Object,[l].concat(c))}})),s(this,"getTokenProps",(function(e){var n=e.key,r=e.className,o=e.style,a=e.token,l=p({},m(e,["key","className","style","token"]),{className:"token "+a.types.join(" "),children:a.content,style:t.getStyleForToken(a),key:void 0});return void 0!==o&&(l.style=void 0!==l.style?p({},l.style,o):o),void 0!==n&&(l.key=n),r&&(l.className+=" "+r),l})),s(this,"tokenize",(function(e,t,n,r){var o={code:t,grammar:n,language:r,tokens:[]};e.hooks.run("before-tokenize",o);var a=o.tokens=e.tokenize(o.code,o.grammar,o.language);return e.hooks.run("after-tokenize",o),a}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,r=e.code,o=e.children,a=this.getThemeDict(this.props),l=t.languages[n];return o({tokens:function(e){for(var t=[[]],n=[e],r=[0],o=[e.length],a=0,l=0,c=[],i=[c];l>-1;){for(;(a=r[l]++)0?p:["plain"],s=h):(p=d(p,h.type),h.alias&&(p=d(p,h.alias)),s=h.content),"string"==typeof s){var m=s.split(u),f=m.length;c.push({types:p,content:m[0]});for(var g=1;g0}))}var A=n&&n.replace(/language-/,"");!A&&s.defaultLanguage&&(A=s.defaultLanguage);var I=Z.replace(/\n$/,"");if(0===k.length&&void 0!==A){for(var R,z="",F=function(e){switch(e){case"js":case"javascript":case"ts":case"typescript":return D(["js","jsBlock"]);case"jsx":case"tsx":return D(["js","jsBlock","jsx"]);case"html":return D(["js","jsBlock","html"]);case"python":case"py":return D(["python"]);default:return D()}}(A),$=Z.replace(/\n$/,"").split("\n"),U=0;U<$.length;){var V=U+1,W=$[U].match(F);if(null!==W){switch(W.slice(1).reduce((function(e,t){return e||t}),void 0)){case"highlight-next-line":z+=V+",";break;case"highlight-start":R=V;break;case"highlight-end":z+=R+"-"+(V-1)+","}$.splice(U,1)}else U+=1}k=b()(z),I=$.join("\n")}var M=function(){!function(e,{target:t=document.body}={}){const n=document.createElement("textarea"),r=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";const o=document.getSelection();let a=!1;o.rangeCount>0&&(a=o.getRangeAt(0)),t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let l=!1;try{l=document.execCommand("copy")}catch{}n.remove(),a&&(o.removeAllRanges(),o.addRange(a)),r&&r.focus()}(I),y(!0),setTimeout((function(){return y(!1)}),2e3)};return r.createElement(g,(0,a.Z)({},i,{key:String(h),theme:j,code:I,language:A}),(function(e){var t,n=e.className,o=e.style,c=e.tokens,i=e.getLineProps,s=e.getTokenProps;return r.createElement("div",{className:x},f&&r.createElement("div",{style:o,className:N},f),r.createElement("div",{className:(0,l.Z)(P,A)},r.createElement("div",{tabIndex:0,className:(0,l.Z)(n,w,"thin-scrollbar",(t={},t[C]=f,t))},r.createElement("div",{className:S,style:o},c.map((function(e,t){1===e.length&&""===e[0].content&&(e[0].content="\n");var n=i({line:e,key:t});return k.includes(t+1)&&(n.className=n.className+" docusaurus-highlight-code-line"),r.createElement("div",(0,a.Z)({key:t},n),e.map((function(e,t){return r.createElement("span",(0,a.Z)({key:t},s({token:e,key:t})))})))})))),r.createElement("button",{ref:v,type:"button","aria-label":(0,T.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),className:(0,l.Z)(L),onClick:M},u?r.createElement(T.Z,{id:"theme.CodeBlock.copied",description:"The copied button label on code blocks"},"Copied"):r.createElement(T.Z,{id:"theme.CodeBlock.copy",description:"The copy button label on code blocks"},"Copy"))))}))}var _=n(3366),A="enhancedAnchor_2LWZ",I=["id"],R=function(e){return function(t){var n,o=t.id,a=(0,_.Z)(t,I),c=(0,E.LU)().navbar.hideOnScroll;return o?r.createElement(e,a,r.createElement("a",{"aria-hidden":"true",tabIndex:-1,className:(0,l.Z)("anchor",(n={},n[A]=!c,n)),id:o}),a.children,r.createElement("a",{className:"hash-link",href:"#"+o,title:(0,T.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"#")):r.createElement(e,a)}},z={code:function(e){var t=e.children;return(0,r.isValidElement)(t)?t:t.includes("\n")?r.createElement(Z,e):r.createElement("code",e)},a:function(e){return r.createElement(o.Z,e)},pre:function(e){var t,n=e.children;return(0,r.isValidElement)(null==n||null==(t=n.props)?void 0:t.children)?null==n?void 0:n.props.children:r.createElement(Z,(0,r.isValidElement)(n)?null==n?void 0:n.props:{children:n})},h1:R("h1"),h2:R("h2"),h3:R("h3"),h4:R("h4"),h5:R("h5"),h6:R("h6")}},7594:function(e,t){function n(e){let t,n=[];for(let r of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,o,a]=t;if(r&&a){r=parseInt(r),a=parseInt(a);const e=r=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=i.createContext({}),s=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=s(e.components);return i.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),u=s(n),m=r,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||o;return n?i.createElement(f,a(a({ref:t},c),{},{components:n})):i.createElement(f,a({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,a=new Array(o);a[0]=u;var d={};for(var l in t)hasOwnProperty.call(t,l)&&(d[l]=t[l]);d.originalType=e,d.mdxType="string"==typeof e?e:r,a[1]=d;for(var s=2;s Container(\n // ...\n child: Padding(\n // ...\n child: Column(\n // ...\n children: [\n // Other fields widget\n // ...\n if (model.myCustomField != null) {\n const SizedBox(height: 24.0), // Add a spacing between fields.\n DocumentItemWidget(\n label: 'My Custom Field:',\n value: model.myCustomField,\n )\n ;\n }\n else {\n const SizedBox(height: 48.0); // Add a spacing between fields.\n }\n ],\n ),\n ),\n );\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/845bd1c2.1c675eaa.js b/assets/js/845bd1c2.1c675eaa.js new file mode 100644 index 00000000..416bb205 --- /dev/null +++ b/assets/js/845bd1c2.1c675eaa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[48],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return f}});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({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={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,o=e.mdxType,i=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=l(n),f=o,m=d["".concat(s,".").concat(f)]||d[f]||u[f]||i;return n?r.createElement(m,a(a({ref:t},p),{},{components:n})):r.createElement(m,a({ref:t},p))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var l=2;l=0||(r[t]=e[t]);return r}(e,o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=n.createContext({}),u=function(e){var o=n.useContext(l),t=o;return e&&(t="function"==typeof e?e(o):a(a({},o),e)),t},c=function(e){var o=u(e.components);return n.createElement(l.Provider,{value:o},e.children)},p={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},d=n.forwardRef((function(e,o){var t=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(t),h=r,m=d["".concat(l,".").concat(h)]||d[h]||p[h]||i;return t?n.createElement(m,a(a({ref:o},c),{},{components:t})):n.createElement(m,a({ref:o},c))}));function h(e,o){var t=arguments,r=o&&o.mdxType;if("string"==typeof e||r){var i=t.length,a=new Array(i);a[0]=d;var s={};for(var l in o)hasOwnProperty.call(o,l)&&(s[l]=o[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,a[1]=s;for(var u=2;u=0||(r[i]=e[i]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var c=t.createContext({}),d=function(e){var n=t.useContext(c),i=n;return e&&(i="function"==typeof e?e(n):o(o({},n),e)),i},l=function(e){var n=d(e.components);return t.createElement(c.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},f=t.forwardRef((function(e,n){var i=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),f=d(i),p=r,h=f["".concat(c,".").concat(p)]||f[p]||u[p]||a;return i?t.createElement(h,o(o({ref:n},l),{},{components:i})):t.createElement(h,o({ref:n},l))}));function p(e,n){var i=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=i.length,o=new Array(a);o[0]=f;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var d=2;d issuer_key.jwk\n echo 'Generated keypair.'\nfi\nissuer=$(didkit key-to-did-key -k issuer_key.jwk)\nprintf 'Issuer DID: %s\\n' \"$issuer\"\nissuer_vm=$(didkit key-to-verification-method -k issuer_key.jwk)\nprintf 'Issuer verification method: %s\\n' \"$issuer_vm\"\n")),(0,a.kt)("h3",{id:"define-generation-function"},"Define generation function"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'generate_credential() {\n didkit vc-issue-credential \\\n -k issuer_key.jwk \\\n -v "$issuer_vm" \\\n -p assertionMethod <<-EOF\n {\n "@context": "https://www.w3.org/2018/credentials/v1",\n "id": "uuid:$(uuidgen)",\n "type": ["VerifiableCredential"],\n "issuer": "$issuer",\n "issuanceDate": "$(date -u +\'%FT%TZ\')",\n "credentialSubject": {\n "id": "uuid:$(uuidgen)"\n }\n }\n EOF\n}\n')),(0,a.kt)("h3",{id:"run-generation-function-on-loop"},"Run generation function on loop"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"This will generate a file named ",(0,a.kt)("inlineCode",{parentName:"li"},"creds")," with a stringified verifiable credential on each line, with as many lines as the value of ",(0,a.kt)("inlineCode",{parentName:"li"},"count"),".")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'creds_file=creds\nprintf \'Writing to file "%s"\\n\' "$creds_file"\ntouch "$creds_file"\n\ni=1\ncount=100\nwhile [ $i -le $count ]; do\n printf \'\\rGenerating credentials... %d/%d\' $i $count >&2\n generate_credential\n : $((i = i+1))\ndone > "$creds_file"\nprintf \'\\nDone\\n\'\n')),(0,a.kt)("h2",{id:"batch-verification-script-setup"},"Batch Verification Script Setup"),(0,a.kt)("div",{className:"admonition admonition-note alert alert--secondary"},(0,a.kt)("div",{parentName:"div",className:"admonition-heading"},(0,a.kt)("h5",{parentName:"div"},(0,a.kt)("span",{parentName:"h5",className:"admonition-icon"},(0,a.kt)("svg",{parentName:"span",xmlns:"http://www.w3.org/2000/svg",width:"14",height:"16",viewBox:"0 0 14 16"},(0,a.kt)("path",{parentName:"svg",fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))),"note")),(0,a.kt)("div",{parentName:"div",className:"admonition-content"},(0,a.kt)("p",{parentName:"div"},"In this script, a verification method is derived from a local key and manually passed with the -v parameter. This is not the default behavior of DIDKit's verification function, but it greatly accelerates the verification of a large batch of VCs being testing against the known key material and verification method of a known issuer."),(0,a.kt)("p",{parentName:"div"},"Were one to remove the ",(0,a.kt)("inlineCode",{parentName:"p"},"key.jwk")," check, the generation of a verification method, and the passing of that method to the verification function, a verification method would be extracted for each VC verified, from the DID Document of the issuer, which would be resolved each time as specified in the VC being verified. This is the default behavior of DIDKit."))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/sh\n\n# Exit if any command in this script fails.\nset -e\n\nif [ ! -e issuer_key.jwk ]; then\n echo 'Missing keypair.' >&2\n exit 1\nfi\n\nissuer_vm=$(didkit key-to-verification-method -k issuer_key.jwk)\nprintf 'Issuer verification method: %s\\n' \"$issuer_vm\"\n")),(0,a.kt)("h3",{id:"define-verification-function"},"Define verification function"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'verify_credential() {\n if ! out=$(didkit vc-verify-credential \\\n -v "$issuer_vm" \\\n -p assertionMethod)\n then\n printf "verify failed: %s" "$out" >&2\n return 1\n fi\n}\n')),(0,a.kt)("h3",{id:"run-verification-function-on-loop"},"Run verification function on loop"),(0,a.kt)("p",null,"Here we loop through the file created above, verifying the credential contained on each line."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'creds_file=creds\nprintf \'Reading from file "%s"\\n\' "$creds_file"\n\ni=1\njq -c . "$creds_file" | while read line; do\n printf \'\\rVerifying credentials... %d\' $i\n printf "%s" "$line" | verify_credential \n : $((i = i+1))\ndone\nprintf \'\\nDone\\n\'\n\n\n')),(0,a.kt)("h2",{id:"appendix-whole-script"},"Appendix: whole script"),(0,a.kt)("p",null,"Also available on Github as"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/spruceid/didkit/cli/tests/example2-batch-generation.sh"},"/cli/tests/example2-batch-generation.sh")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com/spruceid/didkit/cli/tests/example2-batch-verification.sh"},"/cli/tests/example2-batch-verification.sh"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'#!/bin/sh\n\n# Exit if any command in this script fails.\nset -e\n\nif [ -e issuer_key.jwk ]; then\n echo \'Using existing keypair.\'\nelse\n didkit generate-ed25519-key > issuer_key.jwk\n echo \'Generated keypair.\'\nfi\nissuer=$(didkit key-to-did-key -k issuer_key.jwk)\nprintf \'Issuer DID: %s\\n\' "$issuer"\nissuer_vm=$(didkit key-to-verification-method -k issuer_key.jwk)\nprintf \'Issuer verification method: %s\\n\' "$issuer_vm"\n\n# Generate a new dummy credential\ngenerate_credential() {\n didkit vc-issue-credential \\\n -k issuer_key.jwk \\\n -v "$issuer_vm" \\\n -p assertionMethod <<-EOF\n {\n "@context": "https://www.w3.org/2018/credentials/v1",\n "id": "uuid:$(uuidgen)",\n "type": ["VerifiableCredential"],\n "issuer": "$issuer",\n "issuanceDate": "$(date -u +\'%FT%TZ\')",\n "credentialSubject": {\n "id": "uuid:$(uuidgen)"\n }\n }\n EOF\n}\n\n# Generate a bunch of verifiable credentials\ncreds_file=creds\nprintf \'Writing to file "%s"\\n\' "$creds_file"\ntouch "$creds_file"\n\ni=1\ncount=100\nwhile [ $i -le $count ]; do\n printf \'\\rGenerating credentials... %d/%d\' $i $count >&2\n generate_credential\n : $((i = i+1))\ndone > "$creds_file"\nprintf \'\\nDone\\n\'\n')),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'#!/bin/sh\n\n# Exit if any command in this script fails.\nset -e\n\nif [ ! -e issuer_key.jwk ]; then\n echo \'Missing keypair.\' >&2\n exit 1\nfi\n\nissuer_vm=$(didkit key-to-verification-method -k issuer_key.jwk)\nprintf \'Issuer verification method: %s\\n\' "$issuer_vm"\n\nverify_credential() {\n if ! out=$(didkit vc-verify-credential \\\n -v "$issuer_vm" \\\n -p assertionMethod)\n then\n printf "verify failed: %s" "$out" >&2\n return 1\n fi\n}\n\ncreds_file=creds\nprintf \'Reading from file "%s"\\n\' "$creds_file"\n\ni=1\njq -c . "$creds_file" | while read line; do\n printf \'\\rVerifying credentials... %d\' $i\n printf "%s" "$line" | verify_credential \n : $((i = i+1))\ndone\nprintf \'\\nDone\\n\'\n\n\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8edf8477.1b6a23bc.js b/assets/js/8edf8477.1b6a23bc.js new file mode 100644 index 00000000..992aa540 --- /dev/null +++ b/assets/js/8edf8477.1b6a23bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[4],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return m}});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=i.createContext({}),p=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return i.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||a;return n?i.createElement(f,l(l({ref:t},c),{},{components:n})):i.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=u;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;p=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=p(n),h=r,k=u["".concat(l,".").concat(h)]||u[h]||c[h]||a;return n?i.createElement(k,o(o({ref:t},d),{},{components:n})):i.createElement(k,o({ref:t},d))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var p=2;pdidkit-http",id:"didkit-http",children:[]}]},{value:"Rust library",id:"rust-library",children:[]},{value:"API",id:"api",children:[{value:"POST /issue/credentials",id:"post-issuecredentials",children:[]},{value:"POST /verify/credentials",id:"post-verifycredentials",children:[]},{value:"POST /prove/presentations",id:"post-provepresentations",children:[]},{value:"POST /verify/presentations",id:"post-verifypresentations",children:[]}]},{value:"Examples",id:"examples",children:[]}],d={toc:p};function c(e){var t=e.components,n=(0,r.Z)(e,o);return(0,a.kt)("wrapper",(0,i.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"at-a-glance"},"At a Glance"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"For setting up an HTTP server, whether for internal use, over the open internet, or both, we recommend using our dockerized HTTP server. Instructions ",(0,a.kt)("a",{parentName:"li",href:"#Docker"},"below")),(0,a.kt)("li",{parentName:"ul"},"Instructions for building manually can be found on the main ",(0,a.kt)("a",{parentName:"li",href:"/docs/didkit/install"},"Installation page")),(0,a.kt)("li",{parentName:"ul"},"Rather than design our own API, we have opted to adopt (and contribute to) the W3C Credentials Community Group's neutral, open standard for VC-handling APIs, the ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),"; we invite you to consider doing the same for your projects, if it is a reasonable fit for your needs. For details, see that project's documentation and its separate ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/w3c-ccg/vc-http-api-use-cases/"},"use cases document"),"."),(0,a.kt)("li",{parentName:"ul"},'The server is run as a Rust "Tower" ',(0,a.kt)("a",{parentName:"li",href:"https://docs.rs/tower-service/0.3.0/tower_service/trait.Service.html"},"Service"),", which can be spun up with a ",(0,a.kt)("a",{parentName:"li",href:"#Options"},"single line")," upon installation.")),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("h3",{id:"docker"},"Docker"),(0,a.kt)("p",null,"The HTTP server is containerised and available under\n",(0,a.kt)("inlineCode",{parentName:"p"},"ghcr.io/spruceid/didkit-http"),"."),(0,a.kt)("p",null,"You can use the images as a CLI:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ docker run --init -p 8080 ghcr.io/spruceid/didkit-http:latest --port 8080\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Note: You can pass JWKs either by sharing a volume with ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run --volume"),", or by passing the JWK directly with ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run -e JWK=$MY_JWK")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run didkit-http --jwk $MY_JWK"),".")),(0,a.kt)("p",null,"See the repo's ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit/Dockerfile-http"},"Dockerfile")," for further details."),(0,a.kt)("h2",{id:"cli"},"CLI"),(0,a.kt)("h3",{id:"didkit-http"},(0,a.kt)("inlineCode",{parentName:"h3"},"didkit-http")),(0,a.kt)("p",null,"Run a DIDKit HTTP server. The command outputs the URL it is listening on, and runs until interrupted."),(0,a.kt)("h4",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-s, --host ")," - Hostname to listen on. Default is ",(0,a.kt)("inlineCode",{parentName:"li"},"127.0.0.1"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-p, --port ")," - Port to listen on. Default is a random OS-chosen port."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-k, --key ")," - Filename of a JWK to use for issuing credentials and\npresentations."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-j, --jwk ")," - JWK to use for issuing credentials and presentations.")),(0,a.kt)("h4",{id:"issuer-keys"},"Issuer keys"),(0,a.kt)("p",null,"Provide issuer keys using the ",(0,a.kt)("inlineCode",{parentName:"p"},"-k"),"/",(0,a.kt)("inlineCode",{parentName:"p"},"--key-path")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"-j"),"/",(0,a.kt)("inlineCode",{parentName:"p"},"--jwk")," options. If none are provided, issuance functionality will be unavailable. If one is provided, that one will be used to sign all credentials and presentations, regardless of the proof options in the issuance request. If more than one key is provided, the issuance request may identify which key to use for signing by its DID in the ",(0,a.kt)("inlineCode",{parentName:"p"},"verificationMethod")," property of the proof options; if none is identified in that property, the first key is used."),(0,a.kt)("h4",{id:"addition-configuration"},"Addition configuration"),(0,a.kt)("h5",{id:"outbound-proxy"},"Outbound Proxy"),(0,a.kt)("p",null,"You can set the environment variable ",(0,a.kt)("inlineCode",{parentName:"p"},"HTTP_PROXY")," to have DIDKit use a proxy.\nBoth HTTP and SOCKS protocols are supported."),(0,a.kt)("h2",{id:"rust-library"},"Rust library"),(0,a.kt)("p",null,"Rust crate ",(0,a.kt)("inlineCode",{parentName:"p"},"didkit-http")," contains DIDKit's HTTP server implementation as a Rust\nlibrary. Struct ",(0,a.kt)("inlineCode",{parentName:"p"},"didkit_http::DIDKitHTTPMakeSvc")," implements a Tower\n(",(0,a.kt)("a",{parentName:"p",href:"https://hyper.rs/"},"hyper"),")"),(0,a.kt)("h2",{id:"api"},"API"),(0,a.kt)("p",null,"The following routes implement ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"W3C CCG's VC HTTP API (vc-http-api)")," ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/w3c-ccg/vc-http-api/pull/72"},"v0.0.1"),". POST bodies should be typed as ",(0,a.kt)("inlineCode",{parentName:"p"},"application/json"),". Output will be ",(0,a.kt)("inlineCode",{parentName:"p"},"application/json")," on success; on error it will be either ",(0,a.kt)("inlineCode",{parentName:"p"},"application/json")," or plain text. For more details, see the documentation for the ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api")," specification."),(0,a.kt)("h3",{id:"post-issuecredentials"},"POST ",(0,a.kt)("inlineCode",{parentName:"h3"},"/issue/credentials")),(0,a.kt)("p",null,"Issue a verifiable credential. The server uses its configured key and the given linked data proof options to generate a proof and append it to the given credential. On success, the resulting verifiable credential is returned, with HTTP status 201."),(0,a.kt)("h3",{id:"post-verifycredentials"},"POST ",(0,a.kt)("inlineCode",{parentName:"h3"},"/verify/credentials")),(0,a.kt)("p",null,"Verify a verifiable credential. The server verifies the given credential with the given linked data proof options. To successfully verify, the credential must contain at least one proof that verifies successfully. Verification results include a list of checks performed, warnings that should be flagged to the user, and errors encountered. On success, the errors list will be empty, and the HTTP status code will be 200."),(0,a.kt)("h3",{id:"post-provepresentations"},"POST ",(0,a.kt)("inlineCode",{parentName:"h3"},"/prove/presentations")),(0,a.kt)("p",null,"Create a verifiable presentation. Given a presentation and linked data proof options, the server uses its key to generate a proof and append it to the presentation. On success, returns the verifiable presentation and HTTP status 201."),(0,a.kt)("h3",{id:"post-verifypresentations"},"POST ",(0,a.kt)("inlineCode",{parentName:"h3"},"/verify/presentations")),(0,a.kt)("p",null,"Verify a verifiable presentation using the given proof options. Returns a verification result. HTTP status 200 indicates successful verification."),(0,a.kt)("h2",{id:"examples"},"Examples"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Tool"),(0,a.kt)("th",{parentName:"tr",align:null},"Example"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"DIF Universal Resolver Driver, Dockerized HTTP server"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"td",href:"https://github.com/decentralized-identity/universal-resolver#drivers"},"DIF Universal Resolver repo"))))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.3e0dc861.js b/assets/js/935f2afb.3e0dc861.js new file mode 100644 index 00000000..a88ccc38 --- /dev/null +++ b/assets/js/935f2afb.3e0dc861.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[53],{1109:function(e){e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","isLast":true,"docsSidebars":{"docs":[{"collapsed":true,"type":"category","label":".dev Portal","items":[{"type":"link","label":"Home","href":"/docs/"},{"type":"link","label":"What is Decentralized Identity?","href":"/docs/primer"}]},{"collapsed":true,"type":"category","label":"DIDKit","items":[{"type":"link","label":"Introduction","href":"/docs/didkit/"},{"type":"link","label":"Installation","href":"/docs/didkit/install"},{"type":"link","label":"DID Methods","href":"/docs/didkit/did-methods"},{"type":"link","label":"Core Concepts","href":"/docs/didkit/concepts"},{"type":"link","label":"Document Loading","href":"/docs/didkit/document-loading"},{"type":"link","label":"Changelog","href":"/docs/didkit/changelog"},{"type":"link","label":"Specifications & Dependencies","href":"/docs/didkit/specs_and_deps"},{"type":"link","label":"Glossary","href":"/docs/didkit/glossary"}]},{"collapsed":true,"type":"category","label":"DIDKit Interfaces","items":[{"type":"link","label":"Command Line Interface","href":"/docs/didkit-interfaces/cli"},{"type":"link","label":"HTTP Server","href":"/docs/didkit-interfaces/http"},{"type":"link","label":"Rust Crate","href":"/docs/didkit-interfaces/rust"},{"type":"link","label":"C & Android","href":"/docs/didkit-interfaces/C"},{"type":"link","label":"Java","href":"/docs/didkit-interfaces/java"},{"type":"link","label":"Python","href":"/docs/didkit-interfaces/python"},{"type":"link","label":"Javascript","href":"/docs/didkit-interfaces/node"}]},{"collapsed":true,"type":"category","label":"DIDKit Examples","items":[{"type":"link","label":"Overview of Examples","href":"/docs/didkit-examples/overview"},{"type":"link","label":"Core Functions (CLI)","href":"/docs/didkit-examples/core-functions-in-bash"},{"type":"link","label":"Core Functions (HTTP)","href":"/docs/didkit-examples/core-functions-in-curl"},{"type":"link","label":"Batch Generation & Verification","href":"/docs/didkit-examples/batch-generation"},{"type":"link","label":"Spring Boot Java AuthN Service","href":"/docs/didkit-examples/java-springboot"},{"type":"link","label":"Svelte CHAPI","href":"/docs/didkit-examples/svelte-chapi"}]},{"collapsed":true,"type":"category","label":"Credible","items":[{"type":"link","label":"Introduction","href":"/docs/credible/"},{"type":"link","label":"Installation","href":"/docs/credible/install"},{"type":"link","label":"Core Concepts","href":"/docs/credible/concepts"},{"type":"link","label":"Authenticating to other services","href":"/docs/credible/authn"},{"type":"link","label":"Glossary","href":"/docs/credible/glossary"}]},{"collapsed":true,"type":"category","label":"Credible Examples","items":[{"type":"link","label":"Overview of Examples","href":"/docs/credible-examples/overview"},{"type":"link","label":"QR Code Issuance","href":"/docs/credible-examples/qr-issuance"},{"type":"link","label":"VC Display","href":"/docs/credible-examples/vc-display"},{"type":"link","label":"Deploying a DID:tz to Tezos Mainnet","href":"/docs/credible-examples/did-tz-deploy"}]},{"collapsed":true,"type":"category","label":"References","items":[{"type":"link","label":"Contributing","href":"/docs/contributing"},{"type":"link","label":"Code of Conduct","href":"/docs/code-of-conduct"},{"type":"link","label":"Privacy Policy","href":"/docs/privacy-policy"},{"type":"link","label":"Glossary","href":"/docs/glossary"},{"type":"link","label":"Further Reading","href":"/docs/further-reading"}]}]},"permalinkToSidebar":{"/docs/code-of-conduct":"docs","/docs/contributing":"docs","/docs/credible-examples/did-tz-deploy":"docs","/docs/credible-examples/overview":"docs","/docs/credible-examples/qr-issuance":"docs","/docs/credible-examples/vc-display":"docs","/docs/credible/authn":"docs","/docs/credible/concepts":"docs","/docs/credible/glossary":"docs","/docs/credible/install":"docs","/docs/credible/":"docs","/docs/":"docs","/docs/didkit-examples/batch-generation":"docs","/docs/didkit-examples/core-functions-in-bash":"docs","/docs/didkit-examples/core-functions-in-curl":"docs","/docs/didkit-examples/java-springboot":"docs","/docs/didkit-examples/overview":"docs","/docs/didkit-examples/svelte-chapi":"docs","/docs/didkit-interfaces/C":"docs","/docs/didkit-interfaces/cli":"docs","/docs/didkit-interfaces/http":"docs","/docs/didkit-interfaces/java":"docs","/docs/didkit-interfaces/node":"docs","/docs/didkit-interfaces/python":"docs","/docs/didkit-interfaces/rust":"docs","/docs/didkit/changelog":"docs","/docs/didkit/concepts":"docs","/docs/didkit/did-methods":"docs","/docs/didkit/document-loading":"docs","/docs/didkit/glossary":"docs","/docs/didkit/install":"docs","/docs/didkit/":"docs","/docs/didkit/specs_and_deps":"docs","/docs/further-reading":"docs","/docs/glossary":"docs","/docs/primer":"docs","/docs/privacy-policy":"docs"}}')}}]); \ No newline at end of file diff --git a/assets/js/9713dba4.8da195bd.js b/assets/js/9713dba4.8da195bd.js new file mode 100644 index 00000000..32caab2f --- /dev/null +++ b/assets/js/9713dba4.8da195bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[232],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return h}});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function s(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var d=i.createContext({}),l=function(e){var n=i.useContext(d),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=l(e.components);return i.createElement(d.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,d=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=l(t),h=r,f=u["".concat(d,".").concat(h)]||u[h]||p[h]||a;return t?i.createElement(f,s(s({ref:n},c),{},{components:t})):i.createElement(f,s({ref:n},c))}));function h(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,s=new Array(a);s[0]=u;var o={};for(var d in n)hasOwnProperty.call(n,d)&&(o[d]=n[d]);o.originalType=e,o.mdxType="string"==typeof e?e:r,s[1]=o;for(var l=2;l issuer_key.jwk\n echo 'Generated keypair.'\nfi\n\necho\n")),(0,a.kt)("h3",{id:"generate-a-didkey-document"},"Generate a DID:Key document"),(0,a.kt)("p",null,"This document gets wrapped around the keypair generated (or passed) in the previous step. For more context on the DID:key method, see the ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-method-key/"},"specification"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"did=$(didkit key-to-did key -k issuer_key.jwk)\nprintf 'DID: %s\\n\\n' \"$did\"\n")),(0,a.kt)("h3",{id:"define-verificationmethod-for-keypair"},"Define verificationMethod for keypair."),(0,a.kt)("p",null,"This is used to identify the key in linked data proofs. Verifiers of such proofs query a DID found in a credential based on what ","[registered]"," proof type (i.e., what kind of signatures) it needs key material to verify."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"verification_method=$(didkit key-to-verification-method -k issuer_key.jwk)\nprintf 'verificationMethod: %s\\n\\n' \"$verification_method\"\n")),(0,a.kt)("h3",{id:"prepare-credential-for-issuing"},"Prepare credential for issuing."),(0,a.kt)("p",null,"Here, we'll issue an example credential (unsigned) and save it to a file. In\nthis credential, the issuance date, id, and credential subject id are arbitrary,\nbut in real-world usage these are diverse and critical properties. For more info\nabout what these properties mean, see the Verifiable Credentials Data Model\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c.github.io/vc-data-model/"},"specification"),". Note that SUBJECTDID and\nISSUERDID fields need to be URIs, so if you are using non-DID identifiers such\nas certificates or UUIDs, they need to be prefixed with the approriate ",(0,a.kt)("a",{parentName:"p",href:"https://www.iana.org/assignments/urn-namespaces/urn-namespaces.xhtml"},"URN\nprefix"),',\ni.e., "urn:uuid:", etc.'),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'SUBJECTDID=\'did:example:d23dd687a7dc6787646f2eb98d0\'\nISSUERDID=\'did:web:issuance.example.com\'\nDATE=`date --utc +%FT%TZ`\nCREDID=`uuidgen`\n\ncat > credential-unsigned.jsonld < credential-signed.jsonld\necho 'Issued verifiable credential:'\nprint_json credential-signed.jsonld\necho\n")),(0,a.kt)("h3",{id:"verify-a-verifiable-credential"},"Verify a verifiable credential."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"We pass the newly-issued signed verifiable credential back to didkit for verification using the given verification method and proof purpose.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"DIDKit then outputs the verification result as JSON and saves it. If verification is successful, the command completes successfully (returns exit code 0)."))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"if ! didkit vc-verify-credential \\\n -v \"$verification_method\" \\\n -p assertionMethod \\\n < credential-signed.jsonld \\\n > credential-verify-result.json\nthen\n echo 'Unable to verify credential:'\n print_json credential-verify-result.json\n exit 1\nfi\necho 'Verified verifiable credential:'\nprint_json credential-verify-result.json\necho\n")),(0,a.kt)("h3",{id:"create-a-verifiable-presentation-that-embeds-the-verifiable-credential"},"Create a verifiable presentation that embeds the verifiable credential."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Prepare to present the verifiable credential by wrapping it in a verifiable presentation (VP).")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"The id here is an arbitrary URL for example purposes; VPs are often but not always uniquely identified, whether by identifiers, URLs, or URIs."))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'cat > presentation-unsigned.jsonld < presentation-signed.jsonld\necho 'Issued verifiable presentation:'\nprint_json presentation-signed.jsonld\necho\n")),(0,a.kt)("h3",{id:"verify-the-verifiable-presentation"},"Verify the verifiable presentation."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"We pass the verifiable presentation we created back to DIDKit for verification, and save the results in a JSON.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"if ! didkit vc-verify-presentation \\\n -v \"$verification_method\" \\\n -p authentication \\\n < presentation-signed.jsonld \\\n > presentation-verify-result.json\nthen\n echo 'Unable to verify presentation:'\n print_json presentation-verify-result.json\n exit 1\nfi\necho 'Verified verifiable presentation:'\nprint_json presentation-verify-result.json\necho\n\necho Done\n")),(0,a.kt)("h3",{id:"appendix-whole-script-without-comments"},"Appendix: whole script without comments"),(0,a.kt)("p",null,"Also available on Github as\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit/blob/main/cli/tests/example.sh"},"/cli/tests/example.sh")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'#!/bin/sh\n# This is an example shell script using DIDKit for key generation,\n# credential/presentation issuance and verification.\n\nset -e\n\nprint_json() {\n file=${1?file}\n if command -v jq >/dev/null 2>&1; then\n jq . "$file" || cat "$file"\n elif command -v json_pp >/dev/null 2>&1; then\n json_pp < "$file" || cat "$file"\n else\n cat "$file"\n fi\n}\n\ncd "$(dirname "$0")"\n\ncargo build -p didkit-cli\n\nexport PATH=$PWD/../../target/debug:$PATH\n\n# check for issuer key and generate verification method to match\n\nif [ -e issuer_key.jwk ]; then\n echo \'Using existing keypair.\'\nelse\n didkit generate-ed25519-key > issuer_key.jwk\n echo \'Generated keypair.\'\nfi\necho\n\ndid=$(didkit key-to-did-key -k issuer_key.jwk)\nprintf \'DID: %s\\n\\n\' "$did"\n\nissuer_verification_method=$(didkit key-to-verification-method -k issuer_key.jwk)\nprintf \'issuer verificationMethod: %s\\n\\n\' "$issuer_verification_method"\n\ncat > credential-unsigned.jsonld < credential-signed.jsonld\necho \'Issued verifiable credential:\'\nprint_json credential-signed.jsonld\necho\n\nif ! didkit vc-verify-credential \\\n -v "$verification_method" \\\n -p assertionMethod \\\n < credential-signed.jsonld \\\n > credential-verify-result.json\nthen\n echo \'Unable to verify credential:\'\n print_json credential-verify-result.json\n exit 1\nfi\necho \'Verified verifiable credential:\'\nprint_json credential-verify-result.json\necho\n\n# check for holder key and generate verification method to match,\n# for creating verifiable presentation\n\nif [ -e holder_key.jwk ]; then\n echo \'Using existing keypair.\'\nelse\n didkit generate-ed25519-key > holder_key.jwk\n echo \'Generated keypair.\'\nfi\necho\n\n# generate DID of using method DID:key from holder key\n\ndid=$(didkit key-to-did-key -k holder_key.jwk)\nprintf \'DID: %s\\n\\n\' "$did"\n\nholder_verification_method=$(didkit key-to-verification-method -k holder_key.jwk)\nprintf \'holder verificationMethod: %s\\n\\n\' "$holder_verification_method"\n\ncat > presentation-unsigned.jsonld < presentation-signed.jsonld\necho \'Issued verifiable presentation:\'\nprint_json presentation-signed.jsonld\necho\n\nif ! didkit vc-verify-presentation \\\n -v "$verification_method" \\\n -p authentication \\\n < presentation-signed.jsonld \\\n > presentation-verify-result.json\nthen\n echo \'Unable to verify presentation:\'\n print_json presentation-verify-result.json\n exit 1\nfi\necho \'Verified verifiable presentation:\'\nprint_json presentation-verify-result.json\necho\n\necho Done\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9afee992.f0848694.js b/assets/js/9afee992.f0848694.js new file mode 100644 index 00000000..18f5c122 --- /dev/null +++ b/assets/js/9afee992.f0848694.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[519],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return 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 o(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 i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(n),h=a,m=u["".concat(l,".").concat(h)]||u[h]||p[h]||o;return n?r.createElement(m,i(i({ref:t},d),{},{components:n})):r.createElement(m,i({ref:t},d))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),d=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=d(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=d(n),m=i,h=c["".concat(s,".").concat(m)]||c[m]||u[m]||r;return n?a.createElement(h,o(o({ref:t},p),{},{components:n})):a.createElement(h,o({ref:t},p))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,o[1]=l;for(var d=2;d\n com.spruceid.didkit\n didkit\n 0.1\n system\n ${basedir}/didkit.jar\n\n")),(0,r.kt)("h3",{id:"database-setup-mysql"},"Database Setup (MySQL)"),(0,r.kt)("p",null,"This project uses a MySQL database to store the user entity. We will use the\n",(0,r.kt)("inlineCode",{parentName:"p"},"root")," user for simplicity because this is only an example. In your actual\ndeployments, it is ",(0,r.kt)("strong",{parentName:"p"},"very important")," that you configure the correct accounts,\npolicies, and permissions for your SQL installations."),(0,r.kt)("h4",{id:"a-docker-mysql-database"},"(a) Docker MySQL Database"),(0,r.kt)("p",null,"One easy way to run an instance is by using docker:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ docker run \\\n -e MYSQL_ROOT_PASSWORD=root \\\n -e MYSQL_DATABASE=didkit \\\n -p 3306:3306 \\\n --name didkit-java-db \\\n -d mysql:5\n")),(0,r.kt)("h4",{id:"b-system-mysql-database"},"(b) System MySQL Database"),(0,r.kt)("p",null,"Here are some commands to use a local instance of the MySQL-compatible MariaDB\non Ubuntu:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ sudo apt-get install mariadb-client mariadb-server\n$ sudo service mysql start\n$ sudo mysql_secure_installation # set the root password to 'root'\n$ sudo mariadb\n# allow anyone to use the root account with the right password. DO NOT DO THIS IN PRODUCTION.\nMariaDB [(none)]> UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User='root';\nMariaDB [(none)]> FLUSH PRIVILEGES;\n# create the example database\nMariaDB [(none)]> CREATE DATABASE didkit;\nMariaDB [(none)]> quit\n")),(0,r.kt)("h3",{id:"optional-test-mysql"},"(Optional) Test MySQL"),(0,r.kt)("p",null,"To ensure that mysql is working, try the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ apt-get install mariadb-client\n$ mariadb -uroot -proot\nMariaDB [(none)]> SHOW DATABASES;\nMariaDB [(none)]> quit\n")),(0,r.kt)("h3",{id:"database-connection-configuration"},"Database Connection Configuration"),(0,r.kt)("p",null,"If you need to modify the database credentials you will need to update the\nrelevant fields in ",(0,r.kt)("inlineCode",{parentName:"p"},"src/main/resources/application.properties"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"spring.datasource.url=jdbc:mysql://localhost:3306/didkit\nspring.datasource.username=root\nspring.datasource.password=root\n")),(0,r.kt)("h3",{id:"redis"},"Redis"),(0,r.kt)("p",null,"This project makes use of Redis to store single use tokens and authentication\ninformation for the QR code flows."),(0,r.kt)("h4",{id:"a-docker-redis"},"(a) Docker Redis"),(0,r.kt)("p",null,"One easy way, just like MySQL, to have it running locally is to use docker:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# docker run \\\n -p 6379:6379 \\\n --name didkit-java-redis \\\n -d redis\n")),(0,r.kt)("h4",{id:"b-system-redis"},"(b) System Redis"),(0,r.kt)("p",null,"Here are some commands to install and run Redis on Ubuntu:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo apt-get install redis\nsudo service redis-server start\n")),(0,r.kt)("h3",{id:"optional-test-redis"},"(Optional) Test Redis"),(0,r.kt)("p",null,"To ensure that mysql is working, try the following commands:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'$ apt-get install redis\n$ redis-cli\n127.0.0.1:6379> set foo "Hello, World!"\n127.0.0.1:6379> get foo\n127.0.0.1:6379> del foo\n')),(0,r.kt)("h2",{id:"building-and-running"},"Building and Running"),(0,r.kt)("p",null,"We are now ready to build and run the installation. To download the required\nJava dependencies, build the project, and then run it, you can execute the\nfollowing commands from the root project directory:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ cd examples/java-sprintboot\n$ LD_LIBRARY_PATH=`pwd` ./mvnw spring-boot:run\n")),(0,r.kt)("p",null,"You can then load ",(0,r.kt)("inlineCode",{parentName:"p"},"http://localhost:8081")," to see the web application."),(0,r.kt)("p",null,"To verify that DIDKit has been setup correctly, you can then run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ curl -v http://localhost:8081/version\n")),(0,r.kt)("p",null,"And you should expect to see a version string in the response."),(0,r.kt)("h2",{id:"java-example-app-walkthrough"},"Java Example App Walkthrough"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Visit http://localhost:8081 with your web browser."),(0,r.kt)("li",{parentName:"ol"},'Create a user by clicking "Sign Up" on the navigation bar.'),(0,r.kt)("li",{parentName:"ol"},'Log in with your newly created user by clicking "Sign In" on the navigation\nbar.'),(0,r.kt)("li",{parentName:"ol"},"Issue yourself a credential to use for login instead of username and\npassword. You can receive credentials in the example ",(0,r.kt)("a",{parentName:"li",href:"#"},"CHAPI wallet")," or\nusing the QR code workflow and\n",(0,r.kt)("a",{parentName:"li",href:"https://github.com/spruceid/credible"},"Credible")," mobile wallet.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b26d0282.18c1ecf9.js b/assets/js/b26d0282.18c1ecf9.js new file mode 100644 index 00000000..a8a8508d --- /dev/null +++ b/assets/js/b26d0282.18c1ecf9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[21],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return h}});var a=n(7294);function r(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 a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),l=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=l(e.components);return a.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),u=l(n),h=r,f=u["".concat(p,".").concat(h)]||u[h]||d[h]||i;return n?a.createElement(f,s(s({ref:t},c),{},{components:n})):a.createElement(f,s({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,s[1]=o;for(var l=2;l=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(n),m=r,h=u["".concat(p,".").concat(m)]||u[m]||c[m]||i;return n?a.createElement(h,l(l({ref:t},d),{},{components:n})):a.createElement(h,l({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,l=new Array(i);l[0]=u;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var s=2;s=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var o=r.createContext({}),s=function(e){var t=r.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(o.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,o=e.parentName,c=d(e,["components","mdxType","originalType","parentName"]),p=s(n),m=i,k=p["".concat(o,".").concat(m)]||p[m]||u[m]||a;return n?r.createElement(k,l(l({ref:t},c),{},{components:n})):r.createElement(k,l({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,l=new Array(a);l[0]=p;var d={};for(var o in t)hasOwnProperty.call(t,o)&&(d[o]=t[o]);d.originalType=e,d.mdxType="string"==typeof e?e:i,l[1]=d;for(var s=2;s=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=i.createContext({}),l=function(e){var t=i.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=l(e.components);return i.createElement(c.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},u=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(n),p=a,f=u["".concat(c,".").concat(p)]||u[p]||h[p]||r;return n?i.createElement(f,o(o({ref:t},d),{},{components:n})):i.createElement(f,o({ref:t},d))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var l=2;l=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),p=i,m=u["".concat(s,".").concat(p)]||u[p]||h[p]||a;return n?r.createElement(m,o(o({ref:t},d),{},{components:n})):r.createElement(m,o({ref:t},d))}));function p(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:i,o[1]=c;for(var l=2;lVCs")",id:"verifiable-credentials-vcs",children:[]},{value:"Wallet",id:"wallet",children:[]},{value:"VC Nomenclature & Life-Cycle",id:"vc-nomenclature--life-cycle",children:[]},{value:"Decentralized Identifiers ("DIDs")",id:"decentralized-identifiers-dids",children:[]},{value:"DID Document",id:"did-document",children:[]},{value:"DID Taxonomy & Architecture",id:"did-taxonomy--architecture",children:[]},{value:"DID Method",id:"did-method",children:[]},{value:"DID:Key",id:"didkey",children:[]}]},{value:"Further Reading",id:"further-reading",children:[]}],d={toc:l};function h(e){var t=e.components,c=(0,i.Z)(e,o);return(0,a.kt)("wrapper",(0,r.Z)({},d,c,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"terminology"},"Terminology"),(0,a.kt)("p",null,"For more detailed explanations and references to core specifications, see the ",(0,a.kt)("a",{parentName:"p",href:"https://spruceid.dev/docs/glossary"},"developer portal glossary"),"."),(0,a.kt)("h3",{id:"verifiable-credentials-vcs"},'Verifiable Credentials ("',(0,a.kt)("em",{parentName:"h3"},"VCs"),'")'),(0,a.kt)("p",null,"Verifiable Credentials combine properties and superpowers from many different\nmental models. They are like portable, free-floating data units, which are not\nexactly documents or data points or records. They are signed and thus\ntamper-evident, and thus share much of the verifiability of blockchain data or\nsigned PDFs insofar as the signatures they contain can be properly verified by\nreference to the identities included inside the document. Particularly in the\nform of JSON-LD verifiable credentials, they are highly portable, in that the\nstructure of their data can often be reconstructed years later and completely\nout of their original context. For more on JSON-LD and linked data, see the\nSemantics section of the ",(0,a.kt)("a",{parentName:"p",href:"/docs/didkit/concepts#Semantics"},"DIDKit Core\nConcepts")," entry."),(0,a.kt)("h3",{id:"wallet"},"Wallet"),(0,a.kt)("p",null,'The mental model of a "wallet" for storing directly and manually controlled\ninformation and assets has become increasingly common in recent years thanks to\nthe growing popularity of ledger-based cryptocurrencies, NFTs, and other virtual\nassets controlled by cryptography. Just as wallet software makes cryptographic\nkey management intuitive and human-scaled when handling such\ncryptographically-controlled assets on common ledgers, so too can "wallet"\ninterfaces make cryptographically-controlled documents like Verifiable\nCredentials manageable. '),(0,a.kt)("p",null,'In the verifiable credential space, a "wallet" is traditionally assumed to\nmanage one or more strong cryptographic identifiers, which must be authenticated\nto an issuer to receive identifier-specific or identifier-locked credentials.\nThis is often assumed to be a direct and interactive process, as is the process\nof presenting these strong credentials to verifiers (usually\ndouble-authenticated, to both the verifier and to the credential, with two\nrespective identifiers). Credible Wallet was designed to a secure,\nproduction-grade, yet lightweight and general-purpose wallet for such use cases,\ncompletely free of platform-, vendor-, or blockchain-lock-in.'),(0,a.kt)("p",null,'There are, however, fiduciary, automated, and/or "custodial" wallets (by analogy\nto cryptocurrency). Here, the dividing line between wallets and agents,\nservices, and service providers gets a little blurry; particularly when the\nwallet holder is a legal entity or non-human actor, this is an important wrinkle\non the concept of the "wallet." Here, DIDKit may be combined with enterprise\nidentity and security platforms to provide a less human-scale "wallet" for\nhandling strong credentials about human and non-human actors. '),(0,a.kt)("h3",{id:"vc-nomenclature--life-cycle"},"VC Nomenclature & Life-Cycle"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Architecture Diagram",src:n(6471).Z})),(0,a.kt)("p",null,"Src: ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/TR/vc-data-model/#lifecycle-details"},"DID specification")),(0,a.kt)("h3",{id:"decentralized-identifiers-dids"},'Decentralized Identifiers ("',(0,a.kt)("em",{parentName:"h3"},"DIDs"),'")'),(0,a.kt)("p",null,"Decentralized Identifiers are stable identifiers which are bound to a\ncontrolling keypair, which is usually rotatable without changing the identifier.\nThis is achieved by a publication mechanism maintaining information about key\nmaterial in verifiable data stores (usually distributed ledgers) over time. This\ninformation is referred to as a DID Document. The\n",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/TR/did-core/"},"specification")," governing these identifiers is\nmaintained by a dedicated W3C ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/2019/did-wg/"},"working group"),",\nof which Spruce is a member. For more information on the W3C, see the ",(0,a.kt)("strong",{parentName:"p"},"Further\nReading")," section."),(0,a.kt)("h3",{id:"did-document"},"DID Document"),(0,a.kt)("p",null,'A record returned by a query for a DID, containing information on how to verify\ninformation linked in some way to that identifier. The name can be misleading,\nsince in many cases this "document" is entirely ephemeral or contextual and not\nintended to be a static file or document stored or cached anywhere. It is\nsometimes couched in a "Resolution object," which contains metadata about the\nquery and resolution process, although most application developers have no need\nto worry about these DID mechanics. For a The\n',(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-resolution/"},"specification")," governing the\nDID--\x3eDocument resolution process is maintained by a dedicated W3C ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/2019/did-wg/"},"working\ngroup"),", of which Spruce is a member. For more\ninformation on the W3C, see the ",(0,a.kt)("strong",{parentName:"p"},"Further Reading")," section."),(0,a.kt)("h3",{id:"did-taxonomy--architecture"},"DID Taxonomy & Architecture"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Architecture Diagram",src:n(6677).Z})),(0,a.kt)("p",null,"Src: ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/TR/did-core/#architecture-overview"},"DID specification")),(0,a.kt)("h3",{id:"did-method"},"DID Method"),(0,a.kt)("p",null,"A set of interdependent governance, publication, and discovery mechanisms for\nDIDs in a given DID namespace, specified by a shared specification. This\nspecification explains how to validate a DID (namespace rules), where to query\nand what to expect back when resolving a DID, etc. The\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c.github.io/did-spec-registries/#did-methods"},"registry")," of compliant\nspecifications for DID Methods is maintained by a dedicated W3C ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/2019/did-wg/"},"working\ngroup"),", of which Spruce is a member. For more\ninformation on the W3C, see the ",(0,a.kt)("strong",{parentName:"p"},"Further Reading")," section."),(0,a.kt)("h3",{id:"didkey"},"DID:Key"),(0,a.kt)("p",null,"A special DID Method that generates conformant, offchain DID documents for\nlocal, private, and/or ephemeral resolution from a keypair. This can be helpful\nfor integrating conventional PKI or signing infrastructure with DID issuance, or\nto allow caching or local resolution of DID documents where it is undesirable or\nimpossible to resolve remote DIDs. The\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-method-key/"},"specification")," for this method was\noriginally created in, and maintained in, the ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/"},"W3C-Credentials Community\nGroup"),"."),(0,a.kt)("h2",{id:"further-reading"},"Further Reading"),(0,a.kt)("p",null,"Further educational/contextual resources on decentralized identity topics can be\nfound on the ",(0,a.kt)("a",{parentName:"p",href:"https://identity.foundation/education/"},"Education page")," of the\nDecentralized Identity Foundation. "),(0,a.kt)("p",null,"For insight into the core specifications authored and maintained by the W3C\nworking group, the best overview is the github repositories section of their\n",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/2019/did-wg/"},"homepage")," on W3.org. The largely overlapping\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/"},"Credentials Community Group"),", with weekly open,\nrecorded, and scribed ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/meetings/"},"calls")," open to W3C\nnon-members, is also a good venue for getting to know the debates around the\ncore specifications."))}h.isMDXComponent=!0},6677:function(e,t,n){t.Z=n.p+"assets/images/did-core_architecture-8c0f7ea8dea959eff953e1f87a06ab54.png"},6471:function(e,t,n){t.Z=n.p+"assets/images/did-core_vc-lifecycle-6f25b06563e7a70c62afe8d4bc920e6e.png"}}]); \ No newline at end of file diff --git a/assets/js/d112f800.18e5f376.js b/assets/js/d112f800.18e5f376.js new file mode 100644 index 00000000..ecd332bb --- /dev/null +++ b/assets/js/d112f800.18e5f376.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[786],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return m}});var i=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 r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=i.createContext({}),u=function(e){var t=i.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=u(e.components);return i.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},c=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),c=u(n),m=a,h=c["".concat(p,".").concat(m)]||c[m]||s[m]||r;return n?i.createElement(h,l(l({ref:t},d),{},{components:n})):i.createElement(h,l({ref:t},d))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=c;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:a,l[1]=o;for(var u=2;uDIDKit",id:"didkit",children:[]},{value:"Building",id:"building",children:[]},{value:"Running",id:"running",children:[]}]},{value:"Building and running in production mode",id:"building-and-running-in-production-mode",children:[]}],d={toc:u};function s(e){var t=e.components,n=(0,a.Z)(e,l);return(0,r.kt)("wrapper",(0,i.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"Source: ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit/tree/main/examples/svelte-chapi-wallet"},"https://github.com/spruceid/didkit/tree/main/examples/svelte-chapi-wallet")),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"This project demonstrates how to implement a ",(0,r.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/credential-handler-api/"},"CHAPI"),"-conformant Wallet using\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit"},(0,r.kt)("inlineCode",{parentName:"a"},"DIDKit"))," compiled to WASM and the Svelte\nweb development framework. It uses did:key as its only DID Method."),(0,r.kt)("p",null,"Features:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Simple listing of credentials"),(0,r.kt)("li",{parentName:"ul"},"Responds to GET and STORE requests",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"[STORE]"," Verifies credentials with DIDKit and stores them."),(0,r.kt)("li",{parentName:"ul"},"[GET]"," Issues VPs generated and signed using DIDKit")))),(0,r.kt)("h2",{id:"installation"},"Installation"),(0,r.kt)("p",null,"To be able to run this example, you will need to build ",(0,r.kt)("inlineCode",{parentName:"p"},"DIDKit")," for the WASM\ntarget. More instructions about the process can be found\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit/tree/main/lib/wasm"},"here"),". You will also\nneed the ",(0,r.kt)("a",{parentName:"p",href:"https://yarnpkg.com/"},"Yarn")," package manager."),(0,r.kt)("h3",{id:"didkit"},(0,r.kt)("inlineCode",{parentName:"h3"},"DIDKit")),(0,r.kt)("p",null,"In short, you need to install the ",(0,r.kt)("inlineCode",{parentName:"p"},"wasm-unknown-unknown")," Rust target and\n",(0,r.kt)("inlineCode",{parentName:"p"},"wasm-pack"),", which can be done with the following command on the root of\n",(0,r.kt)("inlineCode",{parentName:"p"},"DIDKit"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ make -C lib install-wasm-pack\n")),(0,r.kt)("h3",{id:"building"},"Building"),(0,r.kt)("p",null,"Then, you have to build the WASM target of ",(0,r.kt)("inlineCode",{parentName:"p"},"DIDKit"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ make -C lib ../target/test/wasm.stamp\n")),(0,r.kt)("p",null,"If everything succeeds, you can proceed to the next step."),(0,r.kt)("h3",{id:"running"},"Running"),(0,r.kt)("p",null,"Install the ",(0,r.kt)("inlineCode",{parentName:"p"},"npm")," dependencies of this example project using the ",(0,r.kt)("a",{parentName:"p",href:"https://yarnpkg.com/"},"Yarn"),"\npackage manager:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ cd examples/svelte-chapi-wallet\n$ yarn install\n")),(0,r.kt)("p",null,"The run the app in development mode with:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ yarn run dev\n")),(0,r.kt)("p",null,"You should now be able to see the app running on\n",(0,r.kt)("a",{parentName:"p",href:"http://localhost:5000"},"localhost:5000"),"."),(0,r.kt)("h2",{id:"building-and-running-in-production-mode"},"Building and running in production mode"),(0,r.kt)("p",null,"To create an optimised version of the app:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ yarn run build\n")),(0,r.kt)("p",null,"You can run the newly built app with ",(0,r.kt)("inlineCode",{parentName:"p"},"yarn run start"),". This uses\n",(0,r.kt)("a",{parentName:"p",href:"https://github.com/lukeed/sirv"},"sirv"),", which is included in your\npackage.json's ",(0,r.kt)("inlineCode",{parentName:"p"},"dependencies")," so the app will function when deployed to\nplatforms such as ",(0,r.kt)("a",{parentName:"p",href:"https://heroku.com"},"Heroku"),"."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d3ca088c.e95359e6.js b/assets/js/d3ca088c.e95359e6.js new file mode 100644 index 00000000..64abf11b --- /dev/null +++ b/assets/js/d3ca088c.e95359e6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[393],{3905:function(e,t,i){i.d(t,{Zo:function(){return c},kt:function(){return m}});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 o(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 d(e){for(var t=1;t=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var s=r.createContext({}),l=function(e){var t=r.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):d(d({},t),e)),i},c=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var i=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),u=l(i),m=n,h=u["".concat(s,".").concat(m)]||u[m]||p[m]||o;return i?r.createElement(h,d(d({ref:t},c),{},{components:i})):r.createElement(h,d({ref:t},c))}));function m(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=i.length,d=new Array(o);d[0]=u;var a={};for(var s in t)hasOwnProperty.call(t,s)&&(a[s]=t[s]);a.originalType=e,a.mdxType="string"==typeof e?e:n,d[1]=a;for(var l=2;l=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var l=a.createContext({}),d=function(e){var t=a.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},p=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var i=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=d(i),m=n,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||r;return i?a.createElement(h,o(o({ref:t},p),{},{components:i})):a.createElement(h,o({ref:t},p))}));function m(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=i.length,o=new Array(r);o[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:n,o[1]=s;for(var d=2;d key.jwk\n")),(0,r.kt)("p",null,"You're also ready to spin up a ",(0,r.kt)("inlineCode",{parentName:"p"},"didkit"),"-powered HTTP server for internal or external use, depending on your context. For comprehensive documentation of the HTTP commands, see ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit/tree/main/http"},"Github "),", and for a more skimmable overview, see the ",(0,r.kt)("a",{parentName:"p",href:"/docs/didkit/http_syntax"},"HTTP page")," here. The HTTP server can be spun up with a single command if passed a key and some flags, and will respond with the port on which it will listen for valid calls:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"$ ./target/debug/didkit-http -k key.jwk\nListening on http://127.0.0.1:51467/\n")),(0,r.kt)("p",null,"More detailed installation instructions and variants, including Docker instructions, can be found on our ",(0,r.kt)("a",{parentName:"p",href:"/docs/didkit/install"},"installation page"),"."),(0,r.kt)("h2",{id:"roadmap"},"Roadmap"),(0,r.kt)("p",null,"The following tools and features are high priority for subsequent releases:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Exposing interfaces for JWT-based Verifiable Credential workflows"),(0,r.kt)("li",{parentName:"ol"},"JSON-LD context editor and hosting/publication tool"),(0,r.kt)("li",{parentName:"ol"},"Registration of several new LD signature suites and support for new\ncryptography"),(0,r.kt)("li",{parentName:"ol"},"DIDComm support"),(0,r.kt)("li",{parentName:"ol"},"Aries interoperability profile support")))}u.isMDXComponent=!0},3568:function(e,t,i){t.Z=i.p+"assets/images/didkithead-52d41d35622b77d7662965794aa33eff.png"}}]); \ No newline at end of file diff --git a/assets/js/d99c9437.308664c3.js b/assets/js/d99c9437.308664c3.js new file mode 100644 index 00000000..d67914f7 --- /dev/null +++ b/assets/js/d99c9437.308664c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[858],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return p}});var o=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=o.createContext({}),s=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=s(e.components);return o.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),m=s(n),p=i,h=m["".concat(l,".").concat(p)]||m[p]||u[p]||a;return n?o.createElement(h,r(r({ref:t},d),{},{components:n})):o.createElement(h,r({ref:t},d))}));function p(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,r=new Array(a);r[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:i,r[1]=c;for(var s=2;s=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var u=o.createContext({}),l=function(e){var t=o.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},s=function(e){var t=l(e.components);return o.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,u=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),p=l(n),f=r,m=p["".concat(u,".").concat(f)]||p[f]||d[f]||i;return n?o.createElement(m,c(c({ref:t},s),{},{components:n})):o.createElement(m,c({ref:t},s))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,c=new Array(i);c[0]=p;var a={};for(var u in t)hasOwnProperty.call(t,u)&&(a[u]=t[u]);a.originalType=e,a.mdxType="string"==typeof e?e:r,c[1]=a;for(var l=2;l=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=c(e,["components","mdxType","originalType","parentName"]),u=l(n),h=o,m=u["".concat(s,".").concat(h)]||u[h]||p[h]||a;return n?r.createElement(m,i(i({ref:t},d),{},{components:n})):r.createElement(m,i({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var l=2;l=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({}),p=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},l=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),l=p(r),f=o,g=l["".concat(u,".").concat(f)]||l[f]||d[f]||i;return r?n.createElement(g,a(a({ref:t},s),{},{components:r})):n.createElement(g,a({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=l;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var p=2;p=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=r.createContext({}),d=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=d(e.components);return r.createElement(c.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),p=d(n),u=i,m=p["".concat(c,".").concat(u)]||p[u]||h[u]||a;return n?r.createElement(m,o(o({ref:t},l),{},{components:n})):r.createElement(m,o({ref:t},l))}));function u(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=p;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var d=2;dVCs")",id:"verifiable-credentials-vcs",children:[]},{value:"Wallet",id:"wallet",children:[]},{value:"Decentralized Identifiers ("DIDs")",id:"decentralized-identifiers-dids",children:[]},{value:"DID Document",id:"did-document",children:[]},{value:"DID Method",id:"did-method",children:[]},{value:"DID:Key",id:"didkey",children:[]},{value:"JavaScript Object Notation (JSON)",id:"javascript-object-notation-json",children:[]},{value:"JSON-LD",id:"json-ld",children:[]},{value:"JSON Web Key (JWK)",id:"json-web-key-jwk",children:[]}]}],l={toc:d};function h(e){var t=e.components,n=(0,i.Z)(e,o);return(0,a.kt)("wrapper",(0,r.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"terminology"},"Terminology"),(0,a.kt)("h3",{id:"verifiable-credentials-vcs"},'Verifiable Credentials ("',(0,a.kt)("em",{parentName:"h3"},"VCs"),'")'),(0,a.kt)("p",null,"Verifiable Credentials combine properties and superpowers from many different\nmental models. They are like portable, free-floating data units, which are not\nexactly documents or data points or records. They are signed and thus\ntamper-evident, and thus share much of the verifiability of blockchain data or\nsigned PDFs insofar as the signatures they contain can be properly verified by\nreference to the identities included inside the document. Particularly in the\nform of JSON-LD verifiable credentials, they are highly portable, in that the\nstructure of their data can often be reconstructed years later and completely\nout of their original context. For more on JSON-LD and linked data, see the\nSemantics section of the ",(0,a.kt)("a",{parentName:"p",href:"/docs/didkit/concepts#Semantics"},"DIDKit Core\nConcepts")," entry."),(0,a.kt)("h3",{id:"wallet"},"Wallet"),(0,a.kt)("p",null,'The mental model of a "wallet" for storing directly and manually controlled\ninformation and assets has become increasingly common in recent years thanks to\nthe growing popularity of ledger-based cryptocurrencies, NFTs, and other virtual\nassets controlled by cryptography. Just as wallet software makes cryptographic\nkey management intuitive and human-scaled when handling such\ncryptographically-controlled assets on common ledgers, so too can "wallet"\ninterfaces make cryptographically-controlled documents like Verifiable\nCredentials manageable. '),(0,a.kt)("p",null,'In the verifiable credential space, a "wallet" is traditionally assumed to\nmanage one or more strong cryptographic identifiers, which must be authenticated\nto an issuer to receive identifier-specific or identifier-locked credentials.\nThis is often assumed to be a direct and interactive process, as is the process\nof presenting these strong credentials to verifiers (usually\ndouble-authenticated, to both the verifier and to the credential, with two\nrespective identifiers). Credible Wallet was designed to a secure,\nproduction-grade, yet lightweight and general-purpose wallet for such use cases,\ncompletely free of platform-, vendor-, or blockchain-lock-in and almost free of\nopinions (our preference for open standards is, after all, an opinion).'),(0,a.kt)("p",null,'There are, however, fiduciary, automated, and/or "custodial" wallets (by analogy\nto cryptocurrency). Here, the dividing line between wallets and agents,\nservices, and service providers gets a little blurry; particularly when the\nwallet holder is a legal entity or non-human actor, this is an important wrinkle\non the concept of the "wallet." Here, DIDKit may be combined with enterprise\nidentity and security platforms to provide a less human-scale "wallet" for\nhandling strong credentials about human and non-human actors. '),(0,a.kt)("h3",{id:"decentralized-identifiers-dids"},'Decentralized Identifiers ("',(0,a.kt)("em",{parentName:"h3"},"DIDs"),'")'),(0,a.kt)("p",null,"Decentralized Identifiers are stable identifiers which are bound to a\ncontrolling keypair, which is usually rotatable without changing the identifier.\nThis is achieved by a publication mechanism maintaining information about key\nmaterial in verifiable data stores (usually distributed ledgers) over time. This\ninformation is referred to as a DID Document. The\n",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/TR/did-core/"},"specification")," governing these identifiers is\nmaintained by a dedicated W3C ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/2019/did-wg/"},"working group"),",\nof which Spruce is a member. For more information on the W3C, see the ",(0,a.kt)("strong",{parentName:"p"},"Further\nReading")," section."),(0,a.kt)("h3",{id:"did-document"},"DID Document"),(0,a.kt)("p",null,'A record returned by a query for a DID, containing information on how to verify\ninformation linked in some way to that identifier. The name can be misleading,\nsince in many cases this "document" is entirely ephemeral or contextual and not\nintended to be a static file or document stored or cached anywhere. It is\nsometimes couched in a "Resolution object," which contains metadata about the\nquery and resolution process, although most application developers have no need\nto worry about these DID mechanics. For a The\n',(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-resolution/"},"specification")," governing the\nDID--\x3eDocument resolution process is maintained by a dedicated W3C ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/2019/did-wg/"},"working\ngroup"),", of which Spruce is a member. For more\ninformation on the W3C, see the ",(0,a.kt)("strong",{parentName:"p"},"Further Reading")," section on our ",(0,a.kt)("a",{parentName:"p",href:"https://spruceid.dev/docs/further-reading"},"Developer\nPortal"),"."),(0,a.kt)("h3",{id:"did-method"},"DID Method"),(0,a.kt)("p",null,"A set of interdependent governance, publication, and discovery mechanisms for\nDIDs in a given DID namespace. Most DID methods use blockchains or other\npublically-readable distributed ledgers as data registries, but some, such as\nDID:Web, use other systems of verification, such as secure DNS resolution. All\nmethods are specified by a registered specification. This specification explains\nhow to validate a DID (namespace rules), where to query and what to expect back\nwhen resolving a DID, etc. The\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c.github.io/did-spec-registries/#did-methods"},"registry")," of compliant\nspecifications for DID Methods is maintained by a dedicated W3C ",(0,a.kt)("a",{parentName:"p",href:"https://www.w3.org/2019/did-wg/"},"working\ngroup"),", of which Spruce is a member. For more\ninformation on the W3C, see the ",(0,a.kt)("strong",{parentName:"p"},"Further Reading")," section on our ",(0,a.kt)("a",{parentName:"p",href:"https://spruceid.dev/docs/further-reading"},"Developer\nPortal"),"."),(0,a.kt)("h3",{id:"didkey"},"DID:Key"),(0,a.kt)("p",null,"A special DID Method that generates conformant, offchain DID documents for\nlocal, private, and/or ephemeral resolution from a keypair. This can be helpful\nfor integrating conventional PKI or signing infrastructure with DID issuance, or\nto allow caching or local resolution of DID documents where it is undesirable or\nimpossible to resolve remote DIDs. The\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-method-key/"},"specification")," for this method was\noriginally created in, and maintained in, the ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/"},"W3C-Credentials Community\nGroup"),"."),(0,a.kt)("h3",{id:"javascript-object-notation-json"},"JavaScript Object Notation (JSON)"),(0,a.kt)("p",null,"First described in 2006 as Javascript was becoming the most dominant web\ndevelopment language, and already widespread with it was standardized in 2013 by\n",(0,a.kt)("a",{parentName:"p",href:"https://www.ecma-international.org/publications-and-standards/standards/ecma-404/"},"ECMA-404"),',\nthe JSON "blob" or "object" is the most widely-used, language-independent format\nfor data. It is often pronounced "JAson" or "JaySON".'),(0,a.kt)("h3",{id:"json-ld"},"JSON-LD"),(0,a.kt)("p",null,'JSON-LD is a serialization and messaging format building Linked Data\ncapabilities onto data objects expressable as JSON objects. This means it is\nbuilt on (but not 100% within) the JSON format, with slightly different\nproperties, including serialization, ordering, and referencing mechanics. In\nthe language of its specification\'s abstract, its "syntax is designed to easily\nintegrate into deployed systems that already use JSON, and provides a smooth\nupgrade path from JSON to JSON-LD." The\n',(0,a.kt)("a",{parentName:"p",href:"https://json-ld.org/spec/latest/json-ld/"},"specification")," is maintained and\ngoverned in the W3C."),(0,a.kt)("h3",{id:"json-web-key-jwk"},"JSON Web Key (JWK)"),(0,a.kt)("p",null,'A JSON Web Key, or a "JWK" for short, is a subset of JSON objects specified for\ncontaining cryptographic key or set of keys. They were\n',(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc7517"},"specified")," in 2015 through the IETF."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e90f1b0f.458f9049.js b/assets/js/e90f1b0f.458f9049.js new file mode 100644 index 00000000..d81d35e5 --- /dev/null +++ b/assets/js/e90f1b0f.458f9049.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[295],{3905:function(e,t,i){i.d(t,{Zo:function(){return d},kt:function(){return h}});var n=i(7294);function r(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 n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function o(e){for(var t=1;t=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=n.createContext({}),c=function(e){var t=n.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),u=c(i),h=r,f=u["".concat(l,".").concat(h)]||u[h]||s[h]||a;return i?n.createElement(f,o(o({ref:t},d),{},{components:i})):n.createElement(f,o({ref:t},d))}));function h(e,t){var i=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=i.length,o=new Array(a);o[0]=u;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:r,o[1]=p;for(var c=2;chelp",id:"help",children:[]},{value:"generate-ed25519-key",id:"generate-ed25519-key",children:[]},{value:"key-to-did",id:"key-to-did",children:[]},{value:"key-to-verification-method",id:"key-to-verification-method",children:[]},{value:"vc-issue-credential",id:"vc-issue-credential",children:[]},{value:"vc-verify-credential",id:"vc-verify-credential",children:[]},{value:"vc-issue-presentation",id:"vc-issue-presentation",children:[]},{value:"vc-verify-presentation",id:"vc-verify-presentation",children:[]}]},{value:"Addition configuration",id:"addition-configuration",children:[{value:"Outbound Proxy",id:"outbound-proxy",children:[]}]},{value:"Examples",id:"examples",children:[]}],d={toc:c};function s(e){var t=e.components,i=(0,r.Z)(e,o);return(0,a.kt)("wrapper",(0,n.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"at-a-glance"},"At a Glance"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"For setting up an HTTP server, whether for internal use, over the open internet, or both, we recommend using our dockerized HTTP server. Instructions ",(0,a.kt)("a",{parentName:"li",href:"#Docker"},"below")),(0,a.kt)("li",{parentName:"ul"},"Instructions for building manually can be found on the main ",(0,a.kt)("a",{parentName:"li",href:"/docs/didkit/install"},"Installation page")),(0,a.kt)("li",{parentName:"ul"},"See the ",(0,a.kt)("a",{parentName:"li",href:"#Examples"},"Examples")," section below for automation and testing building blocks.")),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("h3",{id:"docker"},"Docker"),(0,a.kt)("p",null,"The HTTP server is containerised and available under\n",(0,a.kt)("inlineCode",{parentName:"p"},"ghcr.io/spruceid/didkit-cli"),"."),(0,a.kt)("p",null,"You can use the Docker image as a CLI:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ docker run ghcr.io/spruceid/didkit-cli:latest --help\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"Note: You can pass JWKs either by sharing a volume with ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run --volume"),", or by passing the JWK directly with ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run -e JWK=$MY_JWK")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"docker run didkit-http --jwk $MY_JWK"),".")),(0,a.kt)("p",null,"See the repo's ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/spruceid/didkit/Dockerfile-cli"},"Dockerfile")," for further details."),(0,a.kt)("h2",{id:"syntax"},"Syntax"),(0,a.kt)("p",null,"Each command is called in the form:\n",(0,a.kt)("inlineCode",{parentName:"p"},"didkit help"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"didkit generate-ed25519-key"),", etc."),(0,a.kt)("h3",{id:"help"},(0,a.kt)("inlineCode",{parentName:"h3"},"help")),(0,a.kt)("p",null,"Output help about ",(0,a.kt)("inlineCode",{parentName:"p"},"didkit")," and its subcommands."),(0,a.kt)("h3",{id:"generate-ed25519-key"},(0,a.kt)("inlineCode",{parentName:"h3"},"generate-ed25519-key")),(0,a.kt)("p",null,"Generate a Ed25519 keypair and output it in\n",(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc8037#appendix-A.1"},"JWK format"),"."),(0,a.kt)("h3",{id:"key-to-did"},(0,a.kt)("inlineCode",{parentName:"h3"},"key-to-did")),(0,a.kt)("p",null,"Given a ",(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc7517"},"JWK"),", output the corresponding ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-method-key/"},"did:key"),"."),(0,a.kt)("p",null,"Currently, this only supports\n",(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc8037#appendix-A.2"},"Ed25519")," keys."),(0,a.kt)("h3",{id:"key-to-verification-method"},(0,a.kt)("inlineCode",{parentName:"h3"},"key-to-verification-method")),(0,a.kt)("p",null,"Given a Ed25519 ",(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc7517"},"JWK"),", output the corresponding\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/did-method-key/"},"did:key")," ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/security-vocab/#verificationMethod"},"verificationMethod"),"."),(0,a.kt)("h4",{id:"options"},"Options"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-k, --key-path ")," (required, conflicts with jwk):\nFilename of JWK file"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-j, --jwk ")," (required, conflicts with key-path):\nJWK.")),(0,a.kt)("h3",{id:"vc-issue-credential"},(0,a.kt)("inlineCode",{parentName:"h3"},"vc-issue-credential")),(0,a.kt)("p",null,"Issue a verifiable credential. Reads credential on stdin,\nconstructs a ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/ld-proofs/"},"linked data proof")," to add to the\ncredential, and outputs the resulting verifiable credential."),(0,a.kt)("p",null,"Corresponds to ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/#/Issuer/issueCredential"},"/issue/credentials"),"\nin ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),"."),(0,a.kt)("p",null,"The proof type is set automatically based on the key file provided.\nJWK parameters besides the cryptographic components, such as\n",(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc7517#section-4.5"},"kid")," (Key ID), are ignored currently. For an RSA key, the\n",(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc7517#section-4.4"},"alg")," (Algorithm) parameter is ignored and ",(0,a.kt)("inlineCode",{parentName:"p"},"RS256")," is used for\nit, for ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/lds-rsa2018/"},"RsaSignature2018"),"."),(0,a.kt)("h4",{id:"options-1"},"Options"),(0,a.kt)("p",null,"Options besides ",(0,a.kt)("inlineCode",{parentName:"p"},"--key-path")," correspond to linked data\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/ld-proofs/#dfn-proof-options"},"proof options")," as specified in ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/ld-proofs/"},"ld-proofs")," and ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),"."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-C, --challenge ")," - ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#challenge"},"challenge")," property of the\nproof"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-c, --created ")," - ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#created"},"created")," property of the proof.\nISO8601 datetime. Defaults to the current time."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-d, --domain ")," - ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#domain"},"domain")," property of the proof"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-k, --key-path ")," (required, conflicts with jwk):\nFilename of JWK for signing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-j, --jwk ")," (required, conflicts with key-path):\nJWK for signing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-p, --proof-purpose ")," ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#proofPurpose"},"proofPurpose"),"\nproperty of the proof."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-v, --verification-method "),(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#verificationMethod"},"verificationMethod"),"\nproperty of the proof. URI for proof verification\ninformation, e.g. a public key identifier.")),(0,a.kt)("h4",{id:"supported-jwk-key-types"},"Supported ",(0,a.kt)("a",{parentName:"h4",href:"https://tools.ietf.org/html/rfc7517#section-4.1"},"JWK key types")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"RSA")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OKP")," (",(0,a.kt)("inlineCode",{parentName:"li"},"curve"),": ",(0,a.kt)("inlineCode",{parentName:"li"},"Ed25519"),")")),(0,a.kt)("h3",{id:"vc-verify-credential"},(0,a.kt)("inlineCode",{parentName:"h3"},"vc-verify-credential")),(0,a.kt)("p",null,"Verify a verifiable credential. Reads verifiable credential on\nstandard input, and outputs verification result. Returns exit\nstatus zero if credential successfully verified, or non-zero\nif errors were encountered."),(0,a.kt)("p",null,"Corresponds to ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/#/Verifier/verifyCredential"},"/verify/credentials"),"\nin ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),"."),(0,a.kt)("h4",{id:"options-2"},"Options"),(0,a.kt)("p",null,"Options are linked data ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/ld-proofs/#dfn-proof-options"},"proof options")," as specified in\n",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/ld-proofs/"},"ld-proofs")," and ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),". If there is more than one\nproof present, at least one must pass all the requirements\npassed in the options."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-C, --challenge ")," - The ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#challenge"},"challenge")," property\nof the proof must equal this value."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-c, --created ")," - The ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#created"},"created")," property of the\nproof must be on or after the given ISO8601 datetime. Defaults\nto the current time."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-d, --domain ")," - The ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#domain"},"domain")," property of the proof\nmust equal the given value."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-p, --proof-purpose ")," - The ",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#proofPurpose"},"proofPurpose"),"\nproperty of the proof must equal this value."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"-v, --verification-method ")," - The\n",(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/security-vocab/#verificationMethod"},"verificationMethod")," property of the proof must equal this value.")),(0,a.kt)("h4",{id:"supported-proof-types"},"Supported proof types"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/lds-rsa2018/"},"RsaSignature2018")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://w3c-ccg.github.io/lds-ed25519-2018/"},"Ed25519VerificationKey2018"))),(0,a.kt)("h4",{id:"output"},"Output"),(0,a.kt)("p",null,"The verification result output is a ",(0,a.kt)("inlineCode",{parentName:"p"},"VerificationResult")," JSON\nobject as specified in ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json"},'{\n "checks": [],\n "warnings": [],\n "errors": []\n}\n')),(0,a.kt)("p",null,"Verification result properties:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"checks")," - Array of strings indicating checks completed\non the credential."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"warnings")," - Array of warnings encountered during\nvalidation or verification."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"errors")," - Array of strings indicating errors encountered\nduring validation or verification. If ",(0,a.kt)("inlineCode",{parentName:"li"},"errors")," is empty,\nthe credential is verified.")),(0,a.kt)("h3",{id:"vc-issue-presentation"},(0,a.kt)("inlineCode",{parentName:"h3"},"vc-issue-presentation")),(0,a.kt)("p",null,"Issue a verifiable presentation. Reads presentation on stdin,\ngenerates proof to add to it, and outputs the resulting\nverifiable presentation."),(0,a.kt)("p",null,"Corresponds to ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/#/Holder/provePresentation"},"/prove/presentations"),"\nin ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),"."),(0,a.kt)("p",null,"Options are the same as for\n",(0,a.kt)("a",{parentName:"p",href:"#vc-issue-credential"},"vc-issue-credential"),"."),(0,a.kt)("h3",{id:"vc-verify-presentation"},(0,a.kt)("inlineCode",{parentName:"h3"},"vc-verify-presentation")),(0,a.kt)("p",null,"Verify a verifiable presentation. Reads verifiable presentation\non stdin, and outputs verification result. Returns exit status\nzero if presentation successfully verified, or non-zero if\nerrors were encountered."),(0,a.kt)("p",null,"Corresponds to ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/#/Verifier/verifyPresentation"},"/verify/presentations"),"\nin ",(0,a.kt)("a",{parentName:"p",href:"https://w3c-ccg.github.io/vc-http-api/"},"vc-http-api"),"."),(0,a.kt)("p",null,"Options and output format are the same as for\n",(0,a.kt)("a",{parentName:"p",href:"#vc-verify-credential"},"vc-verify-credential"),"."),(0,a.kt)("h2",{id:"addition-configuration"},"Addition configuration"),(0,a.kt)("h3",{id:"outbound-proxy"},"Outbound Proxy"),(0,a.kt)("p",null,"You can set the environment variable ",(0,a.kt)("inlineCode",{parentName:"p"},"HTTP_PROXY")," to have DIDKit use a proxy.\nBoth HTTP and SOCKS protocols are supported."),(0,a.kt)("h2",{id:"examples"},"Examples"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Tool"),(0,a.kt)("th",{parentName:"tr",align:null},"Example"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Core CLI syntax"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"td",href:"/docs/didkit-examples/core-functions-in-bash/"},"Example script"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Batching, Automation"),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("a",{parentName:"td",href:"/docs/didkit-examples/batch-generation/"},"Example automation script"))))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/efc1d014.8500a96d.js b/assets/js/efc1d014.8500a96d.js new file mode 100644 index 00000000..d0ca921f --- /dev/null +++ b/assets/js/efc1d014.8500a96d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[123],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return k}});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=i.createContext({}),d=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=d(e.components);return i.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},p=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),p=d(n),k=r,h=p["".concat(s,".").concat(k)]||p[k]||u[k]||a;return n?i.createElement(h,l(l({ref:t},c),{},{components:n})):i.createElement(h,l({ref:t},c))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=p;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var d=2;d=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({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(n),f=a,m=p["".concat(c,".").concat(f)]||p[f]||d[f]||i;return n?r.createElement(m,o(o({ref:t},u),{},{components:n})):r.createElement(m,o({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=p;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var l=2;l=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),d=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=d(e.components);return i.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),h=d(n),p=a,f=h["".concat(l,".").concat(p)]||h[p]||u[p]||o;return n?i.createElement(f,r(r({ref:t},c),{},{components:n})):i.createElement(f,r({ref:t},c))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,r[1]=s;for(var d=2;d issuer_key.jwk\n")),(0,o.kt)("p",null,"Or, if you want to BYO a private key you already have (Ed25519 for now, to keep\nthe examples simple), you can just copy it into the folder like so:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sh"},"cp /path/to/privkey.jwk issuer_key.jwk\n")),(0,o.kt)("p",null,"Once this key is on hand, you have to structure some data to be the payload of\nthis VC you want to issue. For simplicity, let's throw this into a JSON file to\nbe signed over in the next step. Don't worry too much about the meaning or\nfunction of any specific property if this is your first Verifiable Credential--\nall things in time. You're not signing away your soul, don't worry-- these are the basic ingredients of a verified credential."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},'cat > payload.json <credential-signed.jsonld\ncat credential-signed.jsonld\n')),(0,o.kt)("p",null,"And that's it! Wherever this signed blob ends up, it can be handled by standard\nJSON tooling, and VC tooling can identity it as trustworthy information, or at\nleast as trustworthy as 'yournamehere.com' was at the time in 'issuanceDate'.\nNotice that the 'issuer' field identified you by a website, and a \"did:web:\"\nprefix. We'll explain this one in the next step."),(0,o.kt)("h2",{id:"step-2-verifying-a-real-vc"},"Step 2: Verifying a real VC"),(0,o.kt)("p",null,"Let's take a real-life VC issued by our testing faucet and drop it into your DIDKit root directory as an example."),(0,o.kt)("details",null,(0,o.kt)("summary",null,"Click here for an example VC"),(0,o.kt)("div",null,(0,o.kt)("div",null,(0,o.kt)("i",null,"Note: to get a fresher version of this credential issued to a real-world DID, you might want to install the Credible mobile wallet on a mobile device, whether from ",(0,o.kt)("a",{href:"https://github.com/spruceid/credible"},"source code"),", from ",(0,o.kt)("a",{href:"https://testflight.apple.com/join/CPZON8Ho"},"Apple Test Flight"),", or from ",(0,o.kt)("a",{href:"https://play.google.com/store/apps/details?id=com.spruceid.app.credible&hl=de&gl=US"},"the Google Play store"),". Once you have Credible installed, it will automatically generate an off-chain did-tz (it will resemble ",(0,o.kt)("code",null,"did:tz:tz1aTuW7578MTt3ZtWYCjX65nUXkzE1CMcAf"),"), and when you navigate to ",(0,o.kt)("a",{href:"https://demo.spruceid.com"},"our demo faucet")),", you can get a VC issued to you containing your unique, decentralized identifier."),(0,o.kt)("code",null,'\n{\n "@context": [\n "https://www.w3.org/2018/credentials/v1",\n "https://schema.org/"\n ],\n "id": "urn:uuid:baef4793-ab07-4c17-a175-ec114b18245e",\n "type": "VerifiableCredential",\n "credentialSubject": {\n "id": "did:tz:tz1aTuW7578MTt3ZtWYCjX65nUXkzE1CMcAf"\n }\n "issuer": "did:web:demo.spruceid.com:2021:vc-faucet",\n "issuanceDate": "2021-09-13T09:19:41Z",\n "proof": {\n "type": "Ed25519Signature2018",\n "proofPurpose": "assertionMethod",\n "verificationMethod": "did:web:demo.spruceid.com:2021:vc-faucet#key-1",\n "created": "2021-09-13T09:19:41.374Z",\n "jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..uwSzKxDeXk4nCd6EH6H-7GwaXNwgdoEBPNsrCbbcmJV9hJRrwZPJakXaK6c4uFkFoICGUikTBifmEdV_7BOCCg"\n },\n "expirationDate": "2021-10-13T09:19:41Z"\n}\n'.slice(1,-1))),(0,o.kt)("br",null),"(You can cut and paste it into a ",(0,o.kt)("code",null,"\nsample.vc\n".slice(1,-1))," file using a text editor or a bash command for simplicity's sake, or download it ",(0,o.kt)("a",{href:"/assets/example_vc.json"},"here"),")."),(0,o.kt)("br",null),'You will notice that this VC looks much like the one you issued in the previous step, but with a "proof" section attached with contains the issuer\'s signature and metadata for verifying it. Verifying this signature is as simple as another single-line DIDKit call:',(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"didkit vc-verify-credential -p assertionMethod result.json\n")),(0,o.kt)("p",null,"That will spit out a verbose response as a JSON file listing the checks passed, warnings, and errors. If everything is set up properly, you should see this when you ",(0,o.kt)("inlineCode",{parentName:"p"},"nano result.json"),":"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'{"checks":["proof"],"warnings":[],"errors":[]}\n')),(0,o.kt)("p",null,"You might be asking yourself, though, how did DIDKit get from ",(0,o.kt)("inlineCode",{parentName:"p"},'"issuer": "did:web:demo.spruceid.com:2021:vc-faucet"')," to having the public key (and knowing the ",(0,o.kt)("em",{parentName:"p"},"type")," of the public key) to be able to verify the signature in the proof? This is the magic of DIDs!"),(0,o.kt)("details",null,(0,o.kt)("summary",null,"Detailed explanation of the \u2728Magic of Step 1.5\u2728"),(0,o.kt)("h3",null,"The [often implicit!] resolution step"),(0,o.kt)("p",null,"Let's take the simple example VC above, issued by ",(0,o.kt)("code",null,"did:web:demo.spruceid.com:2021:vc-faucet"),", i.e. our ",(0,o.kt)("a",{href:"https://demo.spruceid.com/"},"VC faucet"),'). Information about this issuer\nhas to be "resolved" in much the same way that a web address (like\ndemo.spruceid.com) needs to be resolved to an IP address to establish a browser\nconnection. There are many ways of resolving DIDs, but let\'s stick to DID-web\nfor now, as it is the easiest for young wizards to understand.'),(0,o.kt)("p",null,'A "did-web" is a DID which publishes its "DID Document" (a data file containing\nidentity information and public keys) in a standardized location at the website\nit identifies. ',(0,o.kt)("a",{href:"https://demo.spruceid.com/2021/vc-faucet/did.json"},(0,o.kt)("a",{parentName:"p",href:"https://demo.spruceid.com/2021/vc-faucet/did.json"},"https://demo.spruceid.com/2021/vc-faucet/did.json")),"\nis, as a web-savvy user might expect, a JSON file that publishes resolution\ninformation about the DID ",(0,o.kt)("code",null,"did:web:demo.spruceid.com:2021:vc-faucet"),'.\nA "did-web" tells you exactly where to go to "resolve" that DID into a DID\ndocument: you just tack ',(0,o.kt)("code",null,"/.well-known/did.json")," to the end of a root\ndomain, or just ",(0,o.kt)("code",null,"/did.json")," for a qualified domain, and fetch that\nJSON blob. Other DID methods have more complex resolution mechanisms, but take\nthe same input (a DID string) which, if succesfully resolved, outputs the same\nkind of DID document, give or take a few optional properties specific to each\nDID method."),(0,o.kt)("p",null,'The most basic and useful thing that a DID Document contains is a series of\n"verification methods", i.e., public keys used for specific purposes and which\ncan be referenced by specific relative references. These are used to check the\nsignature on a VC, among other purposes. See, for example, this DID document\nfrom the demo app we use to test DIDKit and wallets:'),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("h3",null,"Behold! A real-world DID Document!")),(0,o.kt)("code",null,'\n{\n "@context": [\n "https://www.w3.org/ns/did/v1",\n {\n "@id": "https://w3id.org/security#publicKeyJwk",\n "@type": "@json"\n }\n ],\n "id": "did:web:demo.spruceid.com:2021:vc-faucet",\n "verificationMethod": [\n {\n "id": "did:web:demo.spruceid.com:2021:vc-faucet#key-1",\n "type": "Ed25519VerificationKey2018",\n "controller": "did:web:demo.spruceid.com:2021:vc-faucet",\n "publicKeyJwk": {\n "kty": "OKP",\n "crv": "Ed25519",\n "x": "ZMKSD7bKSOg_4IQhZUd-2VCoBTCrEB8L2tql4oRNDUg"\n }\n }\n ],\n "authentication": [\n "did:web:demo.spruceid.com:2021:vc-faucet#key-1"\n ],\n "assertionMethod": [\n "did:web:demo.spruceid.com:2021:vc-faucet#key-1"\n ]\n}\n'.slice(1,-1)),(0,o.kt)("br",null),'*Note: this DID Document has an Ed25519 key as its "key-1" (default key) that is the designated key for ',(0,o.kt)("code",null,"`authentication`")," and",(0,o.kt)("code",null,"`assertionMethod`")," purposes. The latter alias signals to wallets that this is the key used to sign assertions about the world-- assertions that this public key makes verifiable.*"),(0,o.kt)("p",null,'While on the issuer side, a verification method can be deterministically derived\nfrom the private key, a verifier downstream does not have that option, which is\nwhy DID Documents exist in the first place: to publish annotated key material\nthat can be used to verify signatures out there in the world. Having resolved\nthe issuer\'s DID, you now have the subset of its contents needed to verify a\ncredential: the "verification method" for checking the signatures on a VC.'),(0,o.kt)("p",null,"This might sound like a lot of work described step by step, but don't worry--\nDID resolution happens automatically once everything is up and running, as you\nalready saw above. If you needed to do only the solution step for some reason,\nyou could fetch a DID Document with a single DIDKit command as well, in any\ncontext with web access:"),(0,o.kt)("code",null,"\ndidkit did-dereference did:web:demo.spruceid.com:2021:vc-faucet\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fe10cfa2.6e9fdb55.js b/assets/js/fe10cfa2.6e9fdb55.js new file mode 100644 index 00000000..6eb2c4fe --- /dev/null +++ b/assets/js/fe10cfa2.6e9fdb55.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[115],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return f}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(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||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),d=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(n),f=i,m=u["".concat(l,".").concat(f)]||u[f]||p[f]||a;return n?r.createElement(m,o(o({ref:t},c),{},{components:n})):r.createElement(m,o({ref:t},c))}));function f(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var d=2;dVCs")",id:"verifiable-credentials-vcs",children:[]},{value:"Wallet",id:"wallet",children:[]},{value:"Decentralized Identifiers ("DIDs")",id:"decentralized-identifiers-dids",children:[]},{value:"DID Method",id:"did-method",children:[]},{value:"DID:Key",id:"didkey",children:[]},{value:"JSON Web Key (JWK)",id:"json-web-key-jwk",children:[]}],c={toc:d};function p(e){var t=e.components,n=(0,i.Z)(e,o);return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"For more detailed explanations and references to core specifications, see the\nmore comprehensive ",(0,a.kt)("a",{parentName:"em",href:"https://spruceid.dev/docs/glossary"},"developer portal\nglossary"),".")),(0,a.kt)("h3",{id:"verifiable-credentials-vcs"},'Verifiable Credentials ("',(0,a.kt)("em",{parentName:"h3"},"VCs"),'")'),(0,a.kt)("p",null,"Verifiable Credentials are document structures that consist of a few key\nproperties: "),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"an ",(0,a.kt)("inlineCode",{parentName:"li"},"id")," (a unique ID, often a UUID with the ",(0,a.kt)("inlineCode",{parentName:"li"},"urn:uuid:")," prefix or a\nresolvable URL containing another unique per-credential identifier)"),(0,a.kt)("li",{parentName:"ul"},"a ",(0,a.kt)("inlineCode",{parentName:"li"},"credentialSubject"),", in the sense of a data subject, usually identified by a DID or other privacy-preserving indirection or pseudonym)"),(0,a.kt)("li",{parentName:"ul"},"one or more ",(0,a.kt)("inlineCode",{parentName:"li"},"proof")," (signature) section, specific to intended verification audience(s)"),(0,a.kt)("li",{parentName:"ul"},"a payload, usually structured. "),(0,a.kt)("li",{parentName:"ul"},"VCs also contain semantic references linked by URI, in an array at the\nbeginning of the object called ",(0,a.kt)("inlineCode",{parentName:"li"},"@context"),". ")),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"For a more introductory explanation and guidance on understanding the\nspecification, see the ",(0,a.kt)("a",{parentName:"em",href:"https://spruceid.dev/docs/glossary#verifiable-credentials-vcs"},"glossary\nentry"))),(0,a.kt)("h3",{id:"wallet"},"Wallet"),(0,a.kt)("p",null,'Wallets are specialized pieces of software that store credentials, usually\nsecured access to the cryptographic keys associated with a specific identifiers.\nIt may store other kinds of credentials as well, such as unsigned credentials,\nself-attested/self-issued credentials, or credentials with subjects whose keys\nit does not control, but its primary function is signing to receive and present\nits "own" credentials. DIDKit is unopinionated and easy to extend, but DIDKit\nis also primary designed to work with Credible, and both are built around\nSpruce\'s core ',(0,a.kt)("inlineCode",{parentName:"p"},"ssi")," library. ",(0,a.kt)("em",{parentName:"p"},"For a more introductory explanation and\nspecification, see the ",(0,a.kt)("a",{parentName:"em",href:"https://spruceid.dev/docs/glossary#wallet"},"glossary\nentry"))),(0,a.kt)("h3",{id:"decentralized-identifiers-dids"},'Decentralized Identifiers ("',(0,a.kt)("em",{parentName:"h3"},"DIDs"),'")'),(0,a.kt)("p",null,'Decentralized Identifiers are stable identifiers which are bound to a\ncontrolling keypair, which is usually rotatable without changing the identifier.\nThese stable identifiers can be used to query a verifiable data registry to get\na "DID Document" containing the current controlling keypair and other\ninformation for verifying information associated with the DID. ',(0,a.kt)("em",{parentName:"p"},"For a more\nintroductory explanation and specification, see the ",(0,a.kt)("a",{parentName:"em",href:"https://spruceid.dev/docs/glossary#decentralized-identifiers-dids"},"DID glossary\nentry")," and\nthe ",(0,a.kt)("a",{parentName:"em",href:"https://spruceid.dev/docs/glossary#did-document"},"DID Document glossary\nentry"))),(0,a.kt)("h3",{id:"did-method"},"DID Method"),(0,a.kt)("p",null,"A set of interdependent governance, publication, and discovery mechanisms for\nDIDs in a given DID namespace, specified by a registered specification. Most DID\nmethods use blockchains or other publically-readable distributed ledgers as data\nregistries, but some, such as DID:Web, use other systems of verification, such\nas secure DNS resolution. ",(0,a.kt)("em",{parentName:"p"},"For a more introductory explanation and\nspecification, see the ",(0,a.kt)("a",{parentName:"em",href:"https://spruceid.dev/docs/glossary#did-method"},"glossary\nentry"))),(0,a.kt)("h3",{id:"didkey"},"DID:Key"),(0,a.kt)("p",null,"A special DID Method that generates conformant, offchain DID documents for\nlocal, private, and/or ephemeral resolution from a keypair. This can be helpful\nfor integrating conventional PKI or signing infrastructure with DID issuance, or\nto allow caching or local resolution of DID documents where it is undesirable or\nimpossible to resolve remote DIDs. ",(0,a.kt)("em",{parentName:"p"},"For a more introductory explanation and\nspecification, see the ",(0,a.kt)("a",{parentName:"em",href:"https://spruceid.dev/docs/glossary#didkey"},"glossary\nentry"))),(0,a.kt)("h3",{id:"json-web-key-jwk"},"JSON Web Key (JWK)"),(0,a.kt)("p",null,'A JSON Web Key, or a "JWK" for short, is a special class of JSON objects(see\n',(0,a.kt)("a",{parentName:"p",href:"https://spruceid.dev/docs/glossary#json"},"glossary entry")," ) objects specified\nfor containing cryptographic key or set of keys. They were\n",(0,a.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc7517"},"specified")," in 2015 through the IETF."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff9389ff.344dd689.js b/assets/js/ff9389ff.344dd689.js new file mode 100644 index 00000000..57d39ce0 --- /dev/null +++ b/assets/js/ff9389ff.344dd689.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdevsite=self.webpackChunkdevsite||[]).push([[217],{3905:function(e,t,r){r.d(t,{Zo:function(){return d},kt:function(){return m}});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 l(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 s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),p=c(r),m=i,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||a;return r?n.createElement(f,l(l({ref:t},d),{},{components:r})):n.createElement(f,l({ref:t},d))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,l=new Array(a);l[0]=p;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:i,l[1]=o;for(var c=2;c1?t-1:0),r=1;r\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(/=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},H=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},W=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===t?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},V=function(e){var t=X(e,y.TITLE),n=X(e,F);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=X(e,N);return t||r||void 0},Z=function(e){return X(e,D)||function(){}},K=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return G({},e,t)}),{})},Y=function(e,t){return t.filter((function(e){return void 0!==e[y.BASE]})).map((function(e){return e[y.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),i=0;i=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},J=(r=Date.now(),function(e){var t=Date.now();t-r>16?(r=t,e(t)):setTimeout((function(){J(e)}),0)}),ee=function(e){return clearTimeout(e)},te="undefined"!=typeof window?window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||J:n.g.requestAnimationFrame||J,ne="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||ee:n.g.cancelAnimationFrame||ee,re=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},ie=null,oe=function(e,t){var n=e.baseTag,r=e.bodyAttributes,i=e.htmlAttributes,o=e.linkTags,a=e.metaTags,l=e.noscriptTags,u=e.onChangeClientState,s=e.scriptTags,c=e.styleTags,d=e.title,f=e.titleAttributes;ue(y.BODY,r),ue(y.HTML,i),le(d,f);var p={baseTag:se(y.BASE,n),linkTags:se(y.LINK,o),metaTags:se(y.META,a),noscriptTags:se(y.NOSCRIPT,l),scriptTags:se(y.SCRIPT,s),styleTags:se(y.STYLE,c)},m={},h={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(m[e]=n),r.length&&(h[e]=p[e].oldTags)})),t&&t(),u(e,m,h)},ae=function(e){return Array.isArray(e)?e.join(""):e},le=function(e,t){void 0!==e&&document.title!==e&&(document.title=ae(e)),ue(y.TITLE,t)},ue=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute(B),i=r?r.split(","):[],o=[].concat(i),a=Object.keys(t),l=0;l=0;d--)n.removeAttribute(o[d]);i.length===o.length?n.removeAttribute(B):n.getAttribute(B)!==a.join(",")&&n.setAttribute(B,a.join(","))}},se=function(e,t){var n=document.head||document.querySelector(y.HEAD),r=n.querySelectorAll(e+"["+"data-react-helmet]"),i=Array.prototype.slice.call(r),o=[],a=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===x)n.innerHTML=t.innerHTML;else if(r===k)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var l=void 0===t[r]?"":t[r];n.setAttribute(r,l)}n.setAttribute(B,"true"),i.some((function(e,t){return a=t,n.isEqualNode(e)}))?i.splice(a,1):o.push(n)})),i.forEach((function(e){return e.parentNode.removeChild(e)})),o.forEach((function(e){return n.appendChild(e)})),{oldTags:i,newTags:o}},ce=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},de=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[R[n]||n]=e[n],t}),t)},fe=function(e,t,n){switch(e){case y.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(r={key:e})[B]=!0,i=de(n,r),[l.createElement(y.TITLE,i,e)];var e,n,r,i},toString:function(){return function(e,t,n,r){var i=ce(n),o=ae(t);return i?"<"+e+' data-react-helmet="true" '+i+">"+W(o,r)+"":"<"+e+' data-react-helmet="true">'+W(o,r)+""}(e,t.title,t.titleAttributes,n)}};case g:case b:return{toComponent:function(){return de(t)},toString:function(){return ce(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var r,i=((r={key:n})[B]=!0,r);return Object.keys(t).forEach((function(e){var n=R[e]||e;if(n===x||n===k){var r=t.innerHTML||t.cssText;i.dangerouslySetInnerHTML={__html:r}}else i[n]=t[e]})),l.createElement(e,i)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var i=Object.keys(r).filter((function(e){return!(e===x||e===k)})).reduce((function(e,t){var i=void 0===r[t]?t:t+'="'+W(r[t],n)+'"';return e?e+" "+i:i}),""),o=r.innerHTML||r.cssText||"",a=-1===j.indexOf(e);return t+"<"+e+' data-react-helmet="true" '+i+(a?"/>":">"+o+"")}),"")}(e,t,n)}}}},pe=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,i=e.htmlAttributes,o=e.linkTags,a=e.metaTags,l=e.noscriptTags,u=e.scriptTags,s=e.styleTags,c=e.title,d=void 0===c?"":c,f=e.titleAttributes;return{base:fe(y.BASE,t,r),bodyAttributes:fe(g,n,r),htmlAttributes:fe(b,i,r),link:fe(y.LINK,o,r),meta:fe(y.META,a,r),noscript:fe(y.NOSCRIPT,l,r),script:fe(y.SCRIPT,u,r),style:fe(y.STYLE,s,r),title:fe(y.TITLE,{title:d,titleAttributes:f},r)}},me=d()((function(e){return{baseTag:Y([E,A],e),bodyAttributes:K(g,e),defer:X(e,L),encode:X(e,I),htmlAttributes:K(b,e),linkTags:Q(y.LINK,[_,E],e),metaTags:Q(y.META,[C,w,S,P,T],e),noscriptTags:Q(y.NOSCRIPT,[x],e),onChangeClientState:Z(e),scriptTags:Q(y.SCRIPT,[O,x],e),styleTags:Q(y.STYLE,[k],e),title:V(e),titleAttributes:K(v,e)}}),(function(e){ie&&ne(ie),e.defer?ie=te((function(){oe(e,(function(){ie=null}))})):(oe(e),ie=null)}),pe)((function(){return null})),he=(i=me,a=o=function(e){function t(){return U(this,t),H(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!p()(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case y.SCRIPT:case y.NOSCRIPT:return{innerHTML:t};case y.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,i=e.newChildProps,o=e.nestedChildren;return G({},r,((t={})[n.type]=[].concat(r[n.type]||[],[G({},i,this.mapNestedChildrenToProps(n,o))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,i=e.newProps,o=e.newChildProps,a=e.nestedChildren;switch(r.type){case y.TITLE:return G({},i,((t={})[r.type]=a,t.titleAttributes=G({},o),t));case y.BODY:return G({},i,{bodyAttributes:G({},o)});case y.HTML:return G({},i,{htmlAttributes:G({},o)})}return G({},i,((n={})[r.type]=G({},o),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=G({},t);return Object.keys(e).forEach((function(t){var r;n=G({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,r={};return l.Children.forEach(e,(function(e){if(e&&e.props){var i=e.props,o=i.children,a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[M[n]||n]=e[n],t}),t)}(q(i,["children"]));switch(n.warnOnInvalidChildren(e,o),e.type){case y.LINK:case y.META:case y.NOSCRIPT:case y.SCRIPT:case y.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:a,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:a,nestedChildren:o})}}})),t=this.mapArrayTypeChildrenToProps(r,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=q(e,["children"]),r=G({},n);return t&&(r=this.mapChildrenToProps(t,r)),l.createElement(i,r)},$(t,null,[{key:"canUseDOM",set:function(e){i.canUseDOM=e}}]),t}(l.Component),o.propTypes={base:s().object,bodyAttributes:s().object,children:s().oneOfType([s().arrayOf(s().node),s().node]),defaultTitle:s().string,defer:s().bool,encodeSpecialCharacters:s().bool,htmlAttributes:s().object,link:s().arrayOf(s().object),meta:s().arrayOf(s().object),noscript:s().arrayOf(s().object),onChangeClientState:s().func,script:s().arrayOf(s().object),style:s().arrayOf(s().object),title:s().string,titleAttributes:s().object,titleTemplate:s().string},o.defaultProps={defer:!0,encodeSpecialCharacters:!0},o.peek=i.peek,o.rewind=function(){var e=i.rewind();return e||(e=pe({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},a);he.renderStatic=he.rewind;var ge=function(e){return l.createElement(he,Object.assign({},e))}},4748:function(e,t,n){"use strict";var r=n(7294);t.Z=r.createContext(null)},6291:function(e,t,n){"use strict";var r=n(8790);t.Z=r.H},2263:function(e,t,n){"use strict";var r=n(7294),i=n(4748);t.Z=function(){var e=(0,r.useContext)(i.Z);if(null===e)throw new Error("Docusaurus context not provided");return e}},2203:function(e,t,n){"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function i(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}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 a(){return a=Object.assign||function(e){for(var t=1;t=0;f--){var p=a[f];"."===p?o(a,f):".."===p?(o(a,f),d++):d&&(o(a,f),d--)}if(!s)for(;d--;d)a.unshift("..");!s||""===a[0]||a[0]&&i(a[0])||a.unshift("");var m=a.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var u=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),i=l(n);return r!==t||i!==n?e(r,i):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1},s=n(2177);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(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 p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,i=t||"/";return n&&"?"!==n&&(i+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(i+="#"===r.charAt(0)?r:"#"+r),i}function h(e,t,n,i){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",i=t.indexOf("#");-1!==i&&(r=t.substr(i),t=t.substr(0,i));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),i?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=a(o.pathname,i.pathname)):o.pathname=i.pathname:o.pathname||(o.pathname="/"),o}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&u(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,i){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,i):i(!0):i(!1!==o)}else i(!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,i):n.push(i),d({action:r,location:i,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",i=h(e,t,f(),w.location);c.confirmTransitionTo(i,r,n,(function(e){e&&(w.entries[w.index]=i,d({action:r,location:i}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t
'};function i(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function a(e,t,n){var i;return(i="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,i}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=i(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),s=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),u(s,a(e,c,d)),1===e?(u(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){u(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),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)*i(Math.random()*t,.1,.95)),t=i(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");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var i,a=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),s=document.querySelector(r.parent);return u(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(i=t.querySelector(r.spinnerSelector))&&p(i),s!=document.body&&c(s,"nprogress-custom-parent"),s.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&&p(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 l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),u=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,i=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);i--;)if((r=e[i]+o)in n)return r;return t}function i(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=i(t),e.style[t]=n}return function(e,t){var n,r,i=arguments;if(2==i.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,i[1],i[2])}}();function s(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;s(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);s(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(i="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=i)},7418:function(e){"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function i(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}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(i){return!1}}()?Object.assign:function(e,o){for(var a,l,u=i(e),s=1;se.length)return;if(!(k instanceof u)){if(h&&y!=t.length-1){if(f.lastIndex=w,!(P=f.exec(e)))break;for(var E=P.index+(m?P[1].length:0),S=P.index+P[0].length,x=y,T=w,C=t.length;x=(T+=t[x].length)&&(++y,w=T);if(t[y]instanceof u)continue;_=x-y,k=e.slice(w,T),P.index-=w}else{f.lastIndex=0;var P=f.exec(k),_=1}if(P){m&&(g=P[1]?P[1].length:0),S=(E=P.index+g)+(P=P[0].slice(g)).length;var O=k.slice(0,E),A=k.slice(S),R=[y,_];O&&(++y,w+=O.length,R.push(O));var N=new u(s,p?r.tokenize(P,p):P,b,P,h);if(R.push(N),A&&R.push(A),Array.prototype.splice.apply(t,R),1!=_&&r.matchGrammar(e,t,n,y,w,!0,s),a)break}else if(a)break}}}}},hooks:{add:function(){},run:function(e,t){}},tokenize:function(e,t,n){var i=[e],o=t.rest;if(o){for(var a in o)t[a]=o[a];delete t.rest}return r.matchGrammar(e,i,t,0,0,!1),i}},(i=r.Token=function(e,t,n,r,i){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length,this.greedy=!!i}).stringify=function(e,t,n){if("string"==typeof e)return e;if("Array"===r.util.type(e))return e.map((function(n){return i.stringify(n,t,e)})).join("");var o={type:e.type,content:i.stringify(e.content,t,n),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:n};if(e.alias){var a="Array"===r.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(o.classes,a)}var l=Object.keys(o.attributes).map((function(e){return e+'="'+(o.attributes[e]||"").replace(/"/g,""")+'"'})).join(" ");return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+(l?" "+l:"")+">"+o.content+""},r);o.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,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/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"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]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var i={};i[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",i)}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.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}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};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]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/,lookbehind:!0,greedy:!0,inside:r}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|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|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|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|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|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;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\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 i=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,a=0;a]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,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(?:__attribute__|_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,function:/[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|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],comment:o.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:o.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|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|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;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,/\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:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),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","operator",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;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:RegExp("[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:e.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},n.tag))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector,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]+\b)/,lookbehind:!0},i={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#(?:[\da-f]{1,2}){3,4}\b/i,alias:"color"},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(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)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:i,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:i})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|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:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"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:o.languages.javascript},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.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:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{"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:o.languages.javascript}},string:/[\s\S]+/}}}),o.languages.markup&&o.languages.markup.tag.addInlined("script","javascript"),o.languages.js=o.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript);e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+(?:\s+(?:[\w.:$-]+(?:=(?:"(?:\\[^]|[^\\"])*"|'(?:\\[^]|[^\\'])*'|[^\s{'">=]+|\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}))?|\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}))*\s*\/?)?>/i,e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[^]|[^\\"])*"|'(?:\\[^]|[^\\'])*'|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},e.languages.jsx.tag),e.languages.insertBefore("inside","attr-value",{script:{pattern:/=(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var n=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(n).join(""):""},r=function(t){for(var i=[],o=0;o0&&i[i.length-1].tagName===n(a.content[0].content[1])&&i.pop():"/>"===a.content[a.content.length-1].content||i.push({tagName:n(a.content[0].content[1]),openedBraces:0}):i.length>0&&"punctuation"===a.type&&"{"===a.content?i[i.length-1].openedBraces++:i.length>0&&i[i.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?i[i.length-1].openedBraces--:l=!0),(l||"string"==typeof a)&&i.length>0&&0===i[i.length-1].openedBraces){var u=n(a);o0&&("string"==typeof t[o-1]||"plain-text"===t[o-1].type)&&(u=n(t[o-1])+u,t.splice(o-1,1),o--),t[o]=new e.Token("plain-text",u,null,u)}a.content&&"string"!=typeof a.content&&r(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||r(e.tokens)}))}(o),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(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|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|for|finally|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|location|navigator|performance|(?:local|session)Storage|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",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],i=[];/^\w+$/.test(n)||i.push(/\w+/.exec(n)[0]),"diff"===n&&i.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:i,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})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,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(?:_|iota|nil|true|false)\b/,number:/(?:\b0x[a-f\d]+|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[-+]?\d+)?)i?/i,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/}),delete o.languages.go["class-name"],o.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:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:true|false)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*)[a-zA-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[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}/,punctuation:/[!(){}\[\]:=,]/,constant:/\b(?!ID\b)[A-Z][A-Z_\d]*\b/},function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,i,o){if(n.language===r){var a=n.tokenStack=[];n.code=n.code.replace(i,(function(e){if("function"==typeof o&&!o(e))return e;for(var i,l=a.length;-1!==n.code.indexOf(i=t(r,l));)++l;return a[l]=e,i})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var i=0,o=Object.keys(n.tokenStack);!function a(l){for(var u=0;u=o.length);u++){var s=l[u];if("string"==typeof s||s.content&&"string"==typeof s.content){var c=o[i],d=n.tokenStack[c],f="string"==typeof s?s:s.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++i;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];h&&v.push.apply(v,a([h])),v.push(g),b&&v.push.apply(v,a([b])),"string"==typeof s?l.splice.apply(l,[u,1].concat(v)):s.content=v}}else s.content&&a(s.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:true|false)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/i,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")}))}(o),o.languages.json={property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.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*:)/i,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.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:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,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/,{pattern:/(\()(?:addsuffix|abspath|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(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?!\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,i=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \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:/^---|---$/,"font-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+i+o+"(?:"+i+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+i+o+")(?:"+i+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+i+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+i+"$"),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:/``.+?``|`[^`\r\n]+`/,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:/~~?/}},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"].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]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?[\d_]+)?)/i,directive:{pattern:/\B#\w+/,alias:"important"},label:{pattern:/\B~\w+/,alias:"function"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"variable"},module:{pattern:/\b[A-Z]\w+/,alias:"variable"},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:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/[(){}\[\]|.,:;]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\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]|rb|br)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\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:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|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(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.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(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),o.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,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]+)*)*/,lookbehind:!0}})}(o),o.languages.scss=o.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|[^}][^:{}]*[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|forward|for|each|while|import|use|extend|debug|warn|mixin|include|function|return|content)\b/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|with|show|hide)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:S|ING)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},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:/url\((["']?).*?\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+)(?:(?:if|else|for|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(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)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(?:true|false)\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:/(^\s*)@.+/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]*)(?:if|else|for|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:/[{}()\[\];:.]/}}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},keyword:/\b(?:abstract|as|asserts|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),delete e.languages.typescript.parameter;var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{"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}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t);var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.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|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|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!#$%&'*+\-./:<=>?@\\^_`|~]+/i,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:/[()]/},function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",i=/(?:[^\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})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function a(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"(?:"+i+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:a(/\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:a(/true|false/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:a(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:a(o),lookbehind:!0,greedy:!0},number:{pattern:a(/[+-]?(?: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}(o),t.Z=o},9901:function(e){e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},bash:{title:"Bash",alias:"shell",aliasTitles:{shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},go:{title:"Go",require:"clike",owner:"arnehormann"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:"hbs",owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},http:{title:"HTTP",optional:["css","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},matlab:{title:"MATLAB",owner:"Golmote"},mel:{title:"MEL",owner:"Golmote"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",owner:"Golmote"},scss:{title:"Sass (Scss)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},swift:{title:"Swift",require:"clike",owner:"chrischares"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword matched in the code. For example, the keyword if will have the class keyword-if as well. You can have fine grained control over the appearance of each keyword by providing your own CSS rules.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:function(e,t,n){const r=n(9901),i=n(9642),o=new Set;function a(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];i(r,e,t).load((e=>{if(!(e in r.languages))return void(a.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}a.silent=!1,e.exports=a},6500:function(e,t,n){var r={"./":2885};function i(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=o,e.exports=i,i.id=6500},9642:function(e){"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},u=e[r];if(u){function a(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var a in i(t,o),l[t]=!0,n[t])l[a]=!0}t(u.require,a),t(u.optional,a),t(u.modify,a)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(i(e,r),t=n[e]),t}}function i(e){for(var t in e)return!0;return!1}return function(o,a,l){var u=function(e){var t={};for(var n in e){var r=e[n];for(var i in r)if("meta"!=i){var o=r[i];t[i]="string"==typeof o?{title:o}:o}}return t}(o),s=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var i in n={},e){var o=e[i];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+i+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+i+" because it is a component.");n[t]=i}))}return n[r]||r}}(u);a=a.map(s),l=(l||[]).map(s);var c=n(a),d=n(l);a.forEach((function e(n){var r=u[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var f,p=r(u),m=c;i(m);){for(var h in f={},m){var g=u[h];t(g&&g.modify,(function(e){e in d&&(f[e]=!0)}))}for(var b in d)if(!(b in c))for(var v in p(b))if(v in c){f[b]=!0;break}for(var y in m=f)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,i){var o=i?i.series:void 0,a=i?i.parallel:e,l={},u={};function s(e){if(e in l)return l[e];u[e]=!0;var i,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)i=r(e);else{var f=a(c.map((function(e){var t=s(e);return delete u[e],t})));o?i=o(f,(function(){return r(e)})):r(e)}return l[e]=i}for(var c in n)s(c);var d=[];for(var f in u)d.push(l[f]);return a(d)}(p,c,t,n)}};return w}}();e.exports=t},2703:function(e,t,n){"use strict";var r=n(414);function i(){}function o(){}o.resetWarningCache=i,e.exports=function(){function e(e,t,n,i,o,a){if(a!==r){var l=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 l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array: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:o,resetWarningCache:i};return n.PropTypes=n,n}},5697:function(e,t,n){e.exports=n(2703)()},414:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:function(e,t,n){"use strict";var r=n(7294),i=n(7418),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n