code-server
Version:
Run VS Code on a remote server.
6 lines (4 loc) • 8.25 kB
JavaScript
/*!--------------------------------------------------------
* Copyright (C) Microsoft Corporation. All rights reserved.
*--------------------------------------------------------*/(function(){var b=["vs/code/browser/workbench/workbench","require","exports","vs/base/browser/browser","vs/base/common/buffer","vs/base/common/cancellation","vs/base/common/event","vs/base/common/lifecycle","vs/base/common/network","vs/base/common/resources","vs/base/common/uri","vs/base/common/uuid","vs/base/parts/request/browser/request","vs/nls!vs/code/browser/workbench/workbench","vs/platform/log/common/log","vs/platform/product/common/product","vs/platform/windows/common/windows","vs/workbench/workbench.web.api"],D=function(w){for(var g=[],u=0,y=w.length;u<y;u++)g[u]=b[w[u]];return g};define(b[0],D([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]),function(w,g,u,y,A,O,M,R,T,d,Q,v,m,$,Y,a,_){"use strict";Object.defineProperty(g,"__esModule",{value:!0});function S(h,e){let t;if(e){let r=0;e.forEach((o,c)=>{t||(t=""),t+=`${r++==0?"":"&"}${c}=${encodeURIComponent(o)}`})}return d.URI.parse(window.location.href).with({path:h,query:t})}class f{constructor(){let e;const t=document.getElementById("vscode-workbench-auth-session"),r=t?t.getAttribute("data-settings"):void 0;if(r)try{e=JSON.parse(r)}catch(o){}e&&(this.setPassword(`${Y.default.urlProtocol}.login`,"account",JSON.stringify(e)),this.authService=`${Y.default.urlProtocol}-${e.providerId}.login`,this.setPassword(this.authService,"account",JSON.stringify(e.scopes.map(o=>({id:e.id,scopes:o,accessToken:e.accessToken})))))}get credentials(){if(!this._credentials){try{const e=window.localStorage.getItem(f.CREDENTIALS_OPENED_KEY);e&&(this._credentials=JSON.parse(e))}catch(e){}Array.isArray(this._credentials)||(this._credentials=[])}return this._credentials}save(){window.localStorage.setItem(f.CREDENTIALS_OPENED_KEY,JSON.stringify(this.credentials))}async getPassword(e,t){return this.doGetPassword(e,t)}async doGetPassword(e,t){for(const r of this.credentials)if(r.service===e&&(typeof t!="string"||t===r.account))return r.password;return null}async setPassword(e,t,r){this.doDeletePassword(e,t),this.credentials.push({service:e,account:t,password:r}),this.save();try{if(r&&e===this.authService){const o=JSON.parse(r);Array.isArray(o)&&o.length===0&&await this.logout(e)}}catch(o){console.log(o)}}async deletePassword(e,t){const r=await this.doDeletePassword(e,t);if(r&&e===this.authService)try{await this.logout(e)}catch(o){console.log(o)}return r}async doDeletePassword(e,t){let r=!1;return this._credentials=this.credentials.filter(o=>o.service===e&&o.account===t?(r=!0,!1):!0),r&&this.save(),r}async findPassword(e){return this.doGetPassword(e)}async findCredentials(e){return this.credentials.filter(t=>t.service===e).map(({account:t,password:r})=>({account:t,password:r}))}async logout(e){const t=new Map;t.set("logout",String(!0)),t.set("service",e),await(0,v.request)({url:S("/auth/logout",t).toString(!0)},A.CancellationToken.None)}async clear(){window.localStorage.removeItem(f.CREDENTIALS_OPENED_KEY)}}f.CREDENTIALS_OPENED_KEY="credentials.provider";class n extends M.Disposable{constructor(){super(...arguments);this._onCallback=this._register(new O.Emitter),this.onCallback=this._onCallback.event}create(e){const t=new Map,r=(0,Q.generateUuid)();t.set(n.QUERY_KEYS.REQUEST_ID,r);const{scheme:o,authority:c,path:l,query:E,fragment:p}=e||{scheme:void 0,authority:void 0,path:void 0,query:void 0,fragment:void 0};return o&&t.set(n.QUERY_KEYS.SCHEME,o),c&&t.set(n.QUERY_KEYS.AUTHORITY,c),l&&t.set(n.QUERY_KEYS.PATH,l),E&&t.set(n.QUERY_KEYS.QUERY,E),p&&t.set(n.QUERY_KEYS.FRAGMENT,p),this.periodicFetchCallback(r,Date.now()),S("/callback",t)}async periodicFetchCallback(e,t){const r=new Map;r.set(n.QUERY_KEYS.REQUEST_ID,e);const o=await(0,v.request)({url:S("/fetch-callback",r).toString(!0)},A.CancellationToken.None),c=await(0,y.streamToBuffer)(o.stream);if(c.byteLength>0){try{this._onCallback.fire(d.URI.revive(JSON.parse(c.toString())))}catch(l){console.error(l)}return}Date.now()-t<n.FETCH_TIMEOUT&&setTimeout(()=>this.periodicFetchCallback(e,t),n.FETCH_INTERVAL)}}n.FETCH_INTERVAL=500,n.FETCH_TIMEOUT=5*60*1e3,n.QUERY_KEYS={REQUEST_ID:"vscode-requestId",SCHEME:"vscode-scheme",AUTHORITY:"vscode-authority",PATH:"vscode-path",QUERY:"vscode-query",FRAGMENT:"vscode-fragment"};class s{constructor(e,t){this.workspace=e,this.payload=t,this.trusted=!0}async open(e,t){if(t?.reuse&&!t.payload&&this.isSame(this.workspace,e))return!0;const r=this.createTargetUrl(e,t);if(r){if(t?.reuse)return window.location.href=r,!0;{let o;return u.isStandalone?o=window.open(r,"_blank","toolbar=no"):o=window.open(r),!!o}}return!1}createTargetUrl(e,t){let r;if(!e)r=`${document.location.origin}${document.location.pathname}?${s.QUERY_PARAM_EMPTY_WINDOW}=true`;else if((0,a.isFolderToOpen)(e)){const o=e.folderUri.scheme===R.Schemas.vscodeRemote?(0,d.encodePath)(e.folderUri.path):encodeURIComponent(e.folderUri.toString());r=`${document.location.origin}${document.location.pathname}?${s.QUERY_PARAM_FOLDER}=${o}`}else if((0,a.isWorkspaceToOpen)(e)){const o=e.workspaceUri.scheme===R.Schemas.vscodeRemote?(0,d.encodePath)(e.workspaceUri.path):encodeURIComponent(e.workspaceUri.toString());r=`${document.location.origin}${document.location.pathname}?${s.QUERY_PARAM_WORKSPACE}=${o}`}return t?.payload&&(r+=`&${s.QUERY_PARAM_PAYLOAD}=${encodeURIComponent(JSON.stringify(t.payload))}`),r}isSame(e,t){return!e||!t?e===t:(0,a.isFolderToOpen)(e)&&(0,a.isFolderToOpen)(t)?(0,T.isEqual)(e.folderUri,t.folderUri):(0,a.isWorkspaceToOpen)(e)&&(0,a.isWorkspaceToOpen)(t)?(0,T.isEqual)(e.workspaceUri,t.workspaceUri):!1}hasRemote(){if(this.workspace){if((0,a.isFolderToOpen)(this.workspace))return this.workspace.folderUri.scheme===R.Schemas.vscodeRemote;if((0,a.isWorkspaceToOpen)(this.workspace))return this.workspace.workspaceUri.scheme===R.Schemas.vscodeRemote}return!0}}s.QUERY_PARAM_EMPTY_WINDOW="ew",s.QUERY_PARAM_FOLDER="folder",s.QUERY_PARAM_WORKSPACE="workspace",s.QUERY_PARAM_PAYLOAD="payload";class q{constructor(e){this.onDidChange=O.Event.None;let t,r;if(e){let o;(0,a.isFolderToOpen)(e)?o=e.folderUri:(0,a.isWorkspaceToOpen)(e)&&(o=e.workspaceUri),(o?.scheme==="github"||o?.scheme==="codespace")&&([t,r]=o.authority.split("+"))}r&&t?(this.label=(0,m.localize)(0,null,t,r),this.tooltip=(0,m.localize)(1,null,t,r)):(this.label=(0,m.localize)(2,null),this.tooltip=(0,m.localize)(3,null))}}(function(){const h=document.getElementById("vscode-workbench-web-configuration"),e=h?h.getAttribute("data-settings"):void 0;if(!h||!e)throw new Error("Missing web configuration element");const t=JSON.parse(e);let r=!1,o,c=Object.create(null),l;const E=location.host,p=i=>i.startsWith("/")?"vscode-remote://"+E+i:i;new URL(document.location.href).searchParams.forEach((i,U)=>{switch(U){case s.QUERY_PARAM_FOLDER:i=p(i),o={folderUri:d.URI.parse(i)},r=!0;break;case s.QUERY_PARAM_WORKSPACE:i=p(i),o={workspaceUri:d.URI.parse(i)},r=!0;break;case s.QUERY_PARAM_EMPTY_WINDOW:o=void 0,r=!0;break;case s.QUERY_PARAM_PAYLOAD:try{c=JSON.parse(i)}catch(C){console.error(C)}break;case"logLevel":l=i;break}}),r||(t.folderUri?o={folderUri:d.URI.revive(t.folderUri)}:t.workspaceUri?o={workspaceUri:d.URI.revive(t.workspaceUri)}:o=void 0);const I=new s(o,c),k={href:"https://github.com/microsoft/vscode",icon:"code",title:(0,m.localize)(4,null)},F=void 0;let N;I.hasRemote()||(N=new q(o));const K=i=>{let U=`quality=${i}`;new URL(document.location.href).searchParams.forEach((H,P)=>{P!=="quality"&&(U+=`&${P}=${H}`)}),window.location.href=`${window.location.origin}?${U}`},W=t.settingsSyncOptions?{enabled:t.settingsSyncOptions.enabled}:void 0;(0,_.create)(document.body,{...t,remoteAuthority:E,productConfiguration:{...t.productConfiguration,webviewContentExternalBaseUrlTemplate:decodeURIComponent(new URL(t.productConfiguration?.webviewContentExternalBaseUrlTemplate??"",window.location.toString()).toString())},developmentOptions:{logLevel:l?(0,$.parseLogLevel)(l):void 0,...t.developmentOptions},settingsSyncOptions:W,homeIndicator:k,windowIndicator:N,welcomeBanner:F,productQualityChangeHandler:K,workspaceProvider:I,urlCallbackProvider:new n,credentialsProvider:new f})})()})}).call(this);
//# sourceMappingURL=workbench.js.map