@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 2.2 kB
JavaScript
import*as Common from"../common/common.js";import*as Root from"../root/root.js";import{Cookie}from"./Cookie.js";import{ResourceTreeModel}from"./ResourceTreeModel.js";import{Capability}from"./Target.js";import{SDKModel}from"./SDKModel.js";export class CookieModel extends SDKModel{#e;#o;constructor(e){super(e),this.#e=new Map,this.#o=new Map}addBlockedCookie(e,o){const t=e.key(),s=this.#e.get(t);this.#e.set(t,e),o?this.#o.set(e,o):this.#o.delete(e),s&&this.#o.delete(s)}getCookieToBlockedReasonsMap(){return this.#o}async getCookies(e){const o=await this.target().networkAgent().invoke_getCookies({urls:e});if(o.getError())return[];return o.cookies.map(Cookie.fromProtocolCookie).concat(Array.from(this.#e.values()))}async deleteCookie(e){await this.deleteCookies([e])}async clear(e,o){const t=await this.getCookiesForDomain(e||null);if(o){const e=t.filter((e=>e.matchesSecurityOrigin(o)));await this.deleteCookies(e)}else await this.deleteCookies(t)}async saveCookie(e){let o,t=e.domain();t.startsWith(".")||(t=""),e.expires()&&(o=Math.floor(Date.parse(`${e.expires()}`)/1e3));const s=Root.Runtime.experiments.isEnabled("experimentalCookieFeatures"),i={name:e.name(),value:e.value(),url:e.url()||void 0,domain:t,path:e.path(),secure:e.secure(),httpOnly:e.httpOnly(),sameSite:e.sameSite(),expires:o,priority:e.priority(),partitionKey:e.partitionKey(),sourceScheme:s?e.sourceScheme():(r=e.sourceScheme(),"Unset"===r?r:void 0),sourcePort:s?e.sourcePort():void 0};var r;const a=await this.target().networkAgent().invoke_setCookie(i);return!(a.getError()||!a.success)&&a.success}getCookiesForDomain(e){const o=[];const t=this.target().model(ResourceTreeModel);return t&&(t.mainFrame&&t.mainFrame.unreachableUrl()&&o.push(t.mainFrame.unreachableUrl()),t.forAllResources((function(t){const s=Common.ParsedURL.ParsedURL.fromString(t.documentURL);return!s||e&&s.securityOrigin()!==e||o.push(t.url),!1}))),this.getCookies(o)}async deleteCookies(e){const o=this.target().networkAgent();this.#e.clear(),this.#o.clear(),await Promise.all(e.map((e=>o.invoke_deleteCookies({name:e.name(),url:void 0,domain:e.domain(),path:e.path()}))))}}SDKModel.register(CookieModel,{capabilities:Capability.Network,autostart:!1});