UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 6 kB
import*as Host from"../../core/host/host.js";import*as i18n from"../../core/i18n/i18n.js";import signedExchangeInfoTreeStyles from"./signedExchangeInfoTree.css.js";import signedExchangeInfoViewStyles from"./signedExchangeInfoView.css.js";import*as IconButton from"../../ui/components/icon_button/icon_button.js";import*as Components from"../../ui/legacy/components/utils/utils.js";import*as UI from"../../ui/legacy/legacy.js";const UIStrings={errors:"Errors",signedHttpExchange:"Signed HTTP exchange",learnmore:"Learn more",requestUrl:"Request URL",responseCode:"Response code",headerIntegrityHash:"Header integrity hash",responseHeaders:"Response headers",signature:"Signature",label:"Label",certificateUrl:"Certificate URL",viewCertificate:"View certificate",integrity:"Integrity",certificateSha:"Certificate SHA256",validityUrl:"Validity URL",date:"Date",expires:"Expires",certificate:"Certificate",subject:"Subject",validFrom:"Valid from",validUntil:"Valid until",issuer:"Issuer"},str_=i18n.i18n.registerUIStrings("panels/network/SignedExchangeInfoView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class SignedExchangeInfoView extends UI.Widget.VBox{responseHeadersItem;constructor(e){super(),console.assert(null!==e.signedExchangeInfo());const t=e.signedExchangeInfo();this.element.classList.add("signed-exchange-info-view");const r=new UI.TreeOutline.TreeOutlineInShadow;r.registerCSSFiles([signedExchangeInfoTreeStyles]),r.element.classList.add("signed-exchange-info-tree"),r.setFocusable(!1),r.makeDense(),r.expandTreeElementsWhenArrowing=!0,this.element.appendChild(r.element);const i=new Map;if(t.errors&&t.errors.length){const e=new Category(r,i18nString(UIStrings.errors));for(const r of t.errors){const t=document.createDocumentFragment(),n=new IconButton.Icon.Icon;if(n.data={iconName:"cross-circle-filled",color:"var(--icon-error)",width:"14px",height:"14px"},n.classList.add("prompt-icon"),t.appendChild(n),t.createChild("div","error-log").textContent=r.message,e.createLeaf(t),r.errorField){let e=i.get(r.signatureIndex);e||(e=new Set,i.set(r.signatureIndex,e)),e.add(r.errorField)}}}const n=document.createDocumentFragment();n.createChild("div","header-name").textContent=i18nString(UIStrings.signedHttpExchange);const a=UI.XLink.XLink.create("https://github.com/WICG/webpackage",i18nString(UIStrings.learnmore),"header-toggle");n.appendChild(a);const s=new Category(r,n);if(t.header){const n=t.header,a=e.redirectDestination(),o=this.formatHeader(i18nString(UIStrings.requestUrl),n.requestUrl);if(a){const e=Components.Linkifier.Linkifier.linkifyRevealable(a,"View request");e.classList.add("header-toggle"),o.appendChild(e)}s.createLeaf(o),s.createLeaf(this.formatHeader(i18nString(UIStrings.responseCode),String(n.responseCode))),s.createLeaf(this.formatHeader(i18nString(UIStrings.headerIntegrityHash),n.headerIntegrity)),this.responseHeadersItem=s.createLeaf(this.formatHeader(i18nString(UIStrings.responseHeaders),""));const c=n.responseHeaders;for(const e in c){const t=new UI.TreeOutline.TreeElement(this.formatHeader(e,c[e]));t.selectable=!1,this.responseHeadersItem.appendChild(t)}this.responseHeadersItem.expand();for(let e=0;e<n.signatures.length;++e){const t=i.get(e)||new Set,a=n.signatures[e],s=new Category(r,i18nString(UIStrings.signature));if(s.createLeaf(this.formatHeader(i18nString(UIStrings.label),a.label)),s.createLeaf(this.formatHeaderForHexData(i18nString(UIStrings.signature),a.signature,t.has("signatureSig"))),a.certUrl){const e=this.formatHeader(i18nString(UIStrings.certificateUrl),a.certUrl,t.has("signatureCertUrl"));if(a.certificates){const t=e.createChild("span","devtools-link header-toggle");t.textContent=i18nString(UIStrings.viewCertificate),t.addEventListener("click",Host.InspectorFrontendHost.InspectorFrontendHostInstance.showCertificateViewer.bind(null,a.certificates),!1)}s.createLeaf(e)}s.createLeaf(this.formatHeader(i18nString(UIStrings.integrity),a.integrity,t.has("signatureIntegrity"))),a.certSha256&&s.createLeaf(this.formatHeaderForHexData(i18nString(UIStrings.certificateSha),a.certSha256,t.has("signatureCertSha256"))),s.createLeaf(this.formatHeader(i18nString(UIStrings.validityUrl),a.validityUrl,t.has("signatureValidityUrl"))),s.createLeaf().title=this.formatHeader(i18nString(UIStrings.date),new Date(1e3*a.date).toUTCString(),t.has("signatureTimestamps")),s.createLeaf().title=this.formatHeader(i18nString(UIStrings.expires),new Date(1e3*a.expires).toUTCString(),t.has("signatureTimestamps"))}}if(t.securityDetails){const e=t.securityDetails,i=new Category(r,i18nString(UIStrings.certificate));i.createLeaf(this.formatHeader(i18nString(UIStrings.subject),e.subjectName)),i.createLeaf(this.formatHeader(i18nString(UIStrings.validFrom),new Date(1e3*e.validFrom).toUTCString())),i.createLeaf(this.formatHeader(i18nString(UIStrings.validUntil),new Date(1e3*e.validTo).toUTCString())),i.createLeaf(this.formatHeader(i18nString(UIStrings.issuer),e.issuer))}}formatHeader(e,t,r){const i=document.createDocumentFragment(),n=i.createChild("div","header-name");n.textContent=e+": ",i.createChild("span","header-separator");const a=i.createChild("div","header-value source-code");return a.textContent=t,r&&(n.classList.add("error-field"),a.classList.add("error-field")),i}formatHeaderForHexData(e,t,r){const i=document.createDocumentFragment(),n=i.createChild("div","header-name");n.textContent=e+": ",i.createChild("span","header-separator");const a=i.createChild("div","header-value source-code hex-data");return a.textContent=t.replace(/(.{2})/g,"$1 "),r&&(n.classList.add("error-field"),a.classList.add("error-field")),i}wasShown(){super.wasShown(),this.registerCSSFiles([signedExchangeInfoViewStyles])}}export class Category extends UI.TreeOutline.TreeElement{toggleOnClick;expanded;constructor(e,t){super(t,!0),this.selectable=!1,this.toggleOnClick=!0,this.expanded=!0,e.appendChild(this)}createLeaf(e){const t=new UI.TreeOutline.TreeElement(e);return t.selectable=!1,this.appendChild(t),t}}