@zlooks.cn/gateway-server 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +2 -2
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/server/app/[pluginId]/[[...path]]/page.js +1 -1
  6. package/.next/server/app/[pluginId]/[[...path]]/page_client-reference-manifest.js +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/page.js +1 -1
  15. package/.next/server/app/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app-paths-manifest.json +2 -2
  17. package/.next/server/chunks/10.js +1 -1
  18. package/.next/server/middleware-build-manifest.js +1 -1
  19. package/.next/server/pages/500.html +1 -1
  20. package/.next/server/server-reference-manifest.json +1 -1
  21. package/.next/static/chunks/app/page-a236b69b9d624934.js +1 -0
  22. package/.next/trace +22 -22
  23. package/.next/trace-build +1 -1
  24. package/dist/config/schema.d.ts +15 -0
  25. package/dist/config/schema.d.ts.map +1 -1
  26. package/dist/config/schema.js +16 -0
  27. package/dist/config/schema.js.map +1 -1
  28. package/dist/controllers/[namespace]/[...paths].controller.js +1 -0
  29. package/dist/controllers/[namespace]/[...paths].controller.js.map +1 -1
  30. package/dist/runtime/http-over-micro-controller.d.ts +6 -1
  31. package/dist/runtime/http-over-micro-controller.d.ts.map +1 -1
  32. package/dist/runtime/http-over-micro-controller.js +62 -20
  33. package/dist/runtime/http-over-micro-controller.js.map +1 -1
  34. package/dist/services/config.service.d.ts +5 -0
  35. package/package.json +5 -5
  36. package/.next/static/chunks/app/page-76f3156ec3a8fde2.js +0 -1
  37. /package/.next/static/{w55YE0-qK8ciae9Uak7Yw → NWYibQLh8WDO94H6va18W}/_buildManifest.js +0 -0
  38. /package/.next/static/{w55YE0-qK8ciae9Uak7Yw → NWYibQLh8WDO94H6va18W}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- exports.id=10,exports.ids=[10],exports.modules={814:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(37922),e=c(93487),f=c(55733),g=c(99449);let h=(0,d.Pt)("zlooks.gateway.global-config-snapshot",async a=>{let[b,c]=await Promise.all([(0,d.oV)(f.A),(0,d.oV)(g.A)]),h=new e.P(b,{onError:a=>c.warn({err:a,event:"global-config.snapshot.rejected"},"Rejected global configuration snapshot")});return await h.start(),a(()=>h.close()),h})},14400:a=>{function b(a){return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b})}b.keys=()=>[],b.resolve=b,b.id=14400,a.exports=b},15474:()=>{},37714:(a,b,c)=>{"use strict";c.d(b,{WA:()=>I,bE:()=>G,hT:()=>k,qM:()=>H,qe:()=>l,t1:()=>j});var d=c(73136),e=c(18948),f=c(70349),g=c(62710),h=c(29951);let i="cn.zlooks.global.config.server",j=`${i}:site-presentation`,k=`${i}:site-profile`,l="__zlooks_global_config",m=g.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),n=g.Yj().trim().min(1).max(160),o=g.Yj().min(1).max(2048).regex(/^\/(?!\/)[^\s]*$/),p=g.OZ().max(2048).refine(a=>{let b=new d.URL(a).protocol;return"http:"===b||"https:"===b}),q=g.gM("external",[g.re({id:m,label:n,href:o,external:g.eu(!1)}),g.re({id:m,label:n,href:p,external:g.eu(!0)})]),r=g.KC([o,p]).optional(),s=g.KC([o,p]).nullable().optional(),t=g.KC([o,p]).optional(),u=a=>new Set(a.map(a=>a.id)).size===a.length,v=g.re({identity:g.re({name:n,homeHref:o,backgroundVideoUrl:s,logoUrl:r,faviconUrl:r,description:g.Yj().trim().min(1).max(500).optional()}),linkGroups:g.YO(g.re({id:m,label:n,links:g.YO(q).max(32)})).max(16),legal:g.re({copyright:g.Yj().trim().min(1).max(320).optional(),registrations:g.YO(g.re({id:m,kind:g.k5(["icp","public-security","other"]),number:g.Yj().trim().min(1).max(320),verificationUrl:t,iconUrl:r})).max(8).refine(u,{message:"Registration IDs must be unique"})})}),w=g.re({schemaVersion:g.eu(2),revision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:v,updatedAt:h.w$({offset:!0}),updatedBy:g.Yj().trim().min(1).max(256)}),x=g.re({expectedRevision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:v});g.re({changeRequest:g.Yj().trim().min(1).max(2e3)});let y=g.re({profile:g.re({displayName:n,avatarUrl:r,headline:g.Yj().trim().min(1).max(240),biography:g.Yj().trim().min(1).max(2e3)}),topics:g.YO(g.re({id:m,name:n,summary:g.Yj().trim().min(1).max(500),href:t})).max(32).refine(u,{message:"Topic IDs must be unique"}),featuredLinks:g.YO(q).max(16).refine(u,{message:"Featured link IDs must be unique"})}),z=g.re({schemaVersion:g.eu(1),revision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:y,updatedAt:h.w$({offset:!0}),updatedBy:g.Yj().trim().min(1).max(256)}),A=g.re({expectedRevision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:y}),B=g.Yj().trim().min(1).max(256),C=x.extend({actor:B}),D=A.extend({actor:B}),E=g.re({}),F=(0,e.AR)({namespace:i,operations:{readPresentation:{path:"/site-presentation/read",input:E,output:w},updatePresentation:{path:"/site-presentation/update",input:C,output:w},readProfile:{path:"/site-profile/read",input:E,output:z},updateProfile:{path:"/site-profile/update",input:D,output:z}}});function G(a){return(0,f.ol)(w.parse(a))}function H(a){return(0,f.ol)(z.parse(a))}function I(a){return JSON.stringify(G(a))}F.operations.readPresentation.path,F.operations.updatePresentation.path,F.operations.readProfile.path,F.operations.updateProfile.path},43811:()=>{},50781:(a,b,c)=>{"use strict";c.d(b,{E6:()=>g,Ih:()=>f,RW:()=>p,Sz:()=>v,lu:()=>w,vH:()=>s});var d=c(62710),e=c(29951);let f="zlooks.browser.cookies",g="zlooks.browser.client",h=d.Yj().regex(/^[a-z][a-z0-9]*(?:\.[a-z][a-z0-9]*)+$/),i=d.Yj().min(1).max(2048).regex(/^\/(?!\/)[^?#\s]*$/),j=e.w$({offset:!0}),k=d.Yj().regex(/^[A-Za-z][A-Za-z0-9_-]{0,127}$/),l=d.k5(["GET","POST","PUT","PATCH","DELETE"]),m=d.Yj().max(8192),n=d.re({code:d.eu(0),data:d.L5().refine(a=>void 0!==a)}).readonly(),o=d.re({code:d.ai().int().safe().refine(a=>0!==a),error:d.Yj().trim().min(1).max(500)}).readonly(),p=d.KC([n,o]);d.re({accept:m.optional(),"accept-language":m.optional(),"content-type":m.optional(),"if-modified-since":m.optional(),"if-none-match":m.optional(),origin:d.Yj().max(2048).optional(),range:m.optional(),referer:m.optional()}).readonly();let q=d.KC([d.Yj().max(512),d.YO(d.Yj().max(512)).max(20).readonly()]),r=d.g1(d.Yj().regex(/^[a-z][a-zA-Z0-9_-]{0,63}$/),q).refine(a=>Object.keys(a).length<=20,{message:"Browser API query has too many fields"}).readonly();d.g1(k,d.Yj().min(1).max(4096)).refine(a=>Object.keys(a).length<=8,{message:"Browser API context has too many cookies"}).readonly();let s=d.re({ipAddress:d.KC([d.uX(),d.ug()]),userAgent:d.Yj().trim().min(1).max(1024).nullable()}).readonly();d.re({method:l,path:i,origin:d.Yj().max(2048).optional(),clientKey:d.Yj().regex(/^[a-f0-9]{64}$/),query:r.optional(),body:d.L5().optional()}).readonly();let t=d.gM("action",[d.re({action:d.eu("set"),name:k,value:d.Yj().min(1).max(4096),expiresAt:j}),d.re({action:d.eu("clear"),name:k})]).readonly(),u=d.YO(t).max(8).refine(a=>new Set(a.map(a=>a.name)).size===a.length,"Cookie effects must target unique names").readonly();function v(a,b){return`/-/${h.parse(a)}${i.parse(b)}`}function w(a){return 0!==a.code}d.re({status:d.ai().int().min(200).max(599).refine(a=>a<300||a>=400),body:p,cookieEffects:u.optional()}).superRefine((a,b)=>{let c=a.status>=200&&a.status<300;!w(a.body)!==c&&b.addIssue({code:"custom",message:"HTTP status and browser API response code disagree",path:["body","code"]})}).readonly()},52124:()=>{},55733:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(37922),e=c(53693),f=c(69856),g=c(14571);let h=(0,d.Pt)("zlooks.gateway.application",async a=>{let b=(0,f.pj)({REGISTRY_HOST:process.env.REGISTRY_HOST,REGISTRY_PORT:process.env.REGISTRY_PORT}),c=(0,f.PE)(process.env.HILE_ADVERTISE_HOST),d=new e.lg({namespace:"cn.zlooks.gateway.server",registry:b,...c?{advertiseHost:c}:{}}),h=await (0,g.o0)();return a(await d.listen(h)),d})},58513:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(37922),e=c(93487),f=c(55733),g=c(99449);let h=(0,d.Pt)("zlooks.gateway.global-profile-snapshot",async a=>{let[b,c]=await Promise.all([(0,d.oV)(f.A),(0,d.oV)(g.A)]),h=new e.G(b,{onError:a=>c.warn({err:a,event:"global-profile.snapshot.rejected"},"Rejected global profile snapshot")});return await h.start(),a(()=>h.close()),h})},69856:(a,b,c)=>{"use strict";c.d(b,{PE:()=>h,pj:()=>i,fG:()=>j,ud:()=>m});var d=c(62710),e=c(35789);let f=d.Ik({REGISTRY_HOST:d.Yj().trim().min(1),REGISTRY_PORT:e.ai().int().min(1).max(65535)}),g=d.Yj().trim().min(1).optional();function h(a){return g.parse(a)}function i(a){let b=f.parse(a);return Object.freeze({host:b.REGISTRY_HOST,port:b.REGISTRY_PORT})}function j(a){let b=a.trim();if(!b||b.includes("/"))throw Error("Registry configuration key must be one non-empty path segment");return`registry:zlooks.cn/${b}`}var k=c(51142),l=c(48350);async function m(a,b){let c,d,e,f=Object.keys(b.sources);if(0===f.length)throw Error("At least one Registry configuration source is required");let g=Object.fromEntries(f.map(a=>[a,b.sources[a].topic])),h=await (0,k.wb)(a,{topics:g,required:f,onError:a=>n(b.onError,a)}),i=(0,l.IJ)(),j=!0,m=new Promise((a,b)=>{d=a,e=b}),o=setTimeout(()=>{e(Error("Registry configuration was not ready before the initial timeout"))},b.initialTimeoutMs??1e4),p=(0,k.f)(h.current,a=>{if(void 0!==a)try{let c=Object.fromEntries(f.map(c=>[c,b.sources[c].parse(a[c])]));i.value=b.compose(c),d()}catch(a){n(b.onError,a),void 0===i.value&&e(a)}},{immediate:!0}),q=()=>{if(c)return c;j&&(j=!1,p());let a=h.stop().catch(a=>{throw c=void 0,a});return c=a,a};try{await m}catch(a){throw await q().catch(()=>void 0),a}finally{clearTimeout(o)}return{current:i,snapshot(){let a=i.value;if(void 0===a)throw Error("Registry configuration is not ready");return a},close:q}}function n(a,b){try{Promise.resolve(a?.(b)).catch(()=>void 0)}catch{}}},70349:(a,b,c)=>{"use strict";c.d(b,{CY:()=>d,ol:()=>function a(b){if(null!==b&&"object"==typeof b&&!Object.isFrozen(b))for(let c of(Object.freeze(b),Object.values(b)))a(c);return b}});let d="zlooks_session"},86845:(a,b,c)=>{"use strict";c.d(b,{gV:()=>h,rL:()=>g});var d=c(18509),e=c(50781);let f="x-zlooks-internal-rsc-client-ip";function g(a){a.use(async(a,b)=>{a.request.headers[f]=a.ip,await b()})}function h(a){let b=a.get(f)?.trim(),c=a.get("user-agent")?.trim().slice(0,1024)||null;if(!b)return(0,d.eC)({});let g=e.vH.parse({ipAddress:b,userAgent:c});return(0,d.eC)({[e.E6]:g})}},93487:(a,b,c)=>{"use strict";c.d(b,{G:()=>g,P:()=>f});var d=c(37714);class e{#a;#b;#c;#d;#e;constructor(a,b,c,d,e={}){this.application=a,this.topic=b,this.parse=c,this.description=d,this.#a=e.initialTimeoutMs??1e4,this.#b=e.onError??(()=>void 0)}async start(){let a,b;if(this.#d)throw Error(`${this.description} snapshot source is already started`);let c=new Promise((c,d)=>{a=c,b=d}),d=setTimeout(()=>{b(Error(`${this.description} snapshot was not ready before the initial timeout`))},this.#a);try{this.#d=await this.application.subscribe(this.topic,c=>{try{this.#c=this.parse(c),a()}catch(a){this.#f(a),this.#c||b(a)}}),await c}catch(a){throw await this.close().catch(()=>void 0),a}finally{clearTimeout(d)}}snapshot(){let a=this.#c;if(!a)throw Error(`${this.description} snapshot is not ready`);return a}close(){let a=this.#e;if(a)return a;let b=this.#d;if(!b)return Promise.resolve();let c=Promise.resolve(b()).then(()=>{this.#d===b&&(this.#d=void 0)}).catch(a=>{throw this.#e=void 0,a});return this.#e=c,c}#f(a){try{Promise.resolve(this.#b(a)).catch(()=>void 0)}catch{}}}class f extends e{constructor(a,b={}){super(a,d.t1,d.bE,"Global configuration",b)}}class g extends e{constructor(a,b={}){super(a,d.hT,d.qM,"Global profile",b)}}},93980:()=>{},97242:(a,b,c)=>{"use strict";c.d(b,{A:()=>as});var d=c(37922),e=c(51142),f=c(22291);async function g(a,b="One or more cleanup actions failed"){let c=[];for(let b of a)if(b)try{await b()}catch(a){c.push(a)}if(c.length>0)throw AggregateError(c,b)}var h=c(57975);function i(a){let b=a.rsc.discovery;return{pollIntervalMs:b.pollIntervalMs,missingReconciliations:b.missingReconciliations,snapshotConcurrency:b.snapshotConcurrency}}var j=c(1450),k=c(77851),l=c(82383),m=c(77598),n=c(846);class o{constructor(a,b){this.token=a,this.clientId=b}authenticate(a){var b,c;let d,e,f=a.headers.get("authorization"),g=`Bearer ${this.token}`;return f&&(b=f,c=g,d=Buffer.from(b),e=Buffer.from(c),d.length===e.length&&(0,m.timingSafeEqual)(d,e))?{token:this.token,clientId:this.clientId,scopes:[n.SS]}:new Response("Unauthorized",{status:401,headers:{"www-authenticate":"Bearer"}})}}var p=c(18509);class q{#g;#h;constructor(a,b,c){this.application=a,this.config=b,this.logger=c}get middleware(){let a=this.#h;if(!a)throw Error("MCP gateway is not ready");return a.middleware}inspect(){let a=this.#g;if(!a)throw Error("MCP gateway is not ready");return a.inspect()}async start(){if(this.#g)throw Error("MCP gateway is already mounted");try{let a=(0,l.H_)(this.application,{pollIntervalMs:this.config.pollIntervalMs,onError:a=>this.logger.error({err:a,event:"mcp.provider-discovery.failed"},"MCP provider discovery failed")}),b=await (0,j.r)({source:a,executionContext:a=>(0,p.eC)({requestId:(0,m.randomUUID)(),...a.authInfo?.clientId?{clientId:a.authInfo.clientId}:{}}),info:{name:"@zlooks.cn/gateway-server",version:"0.0.0"},instructions:"Capabilities are dynamically discovered from their owning internal Hile microservices. Before acting, inspect the current tool, resource, and prompt catalogs and their schemas; never invent a capability. Client-side search such as ToolSearch returns a filtered, possibly truncated subset, not the complete MCP tool catalog; never conclude that a tool does not exist solely because it is missing from a search result. If search results reach the requested limit or indicate truncation, increase the search limit within client-supported bounds or narrow the query to the exact provider-qualified tool name. Even fewer results do not prove completeness when the query is filtered. When a complete inventory is needed, enumerate tools/list and pass each returned nextCursor as cursor on the next request until nextCursor is absent. A client-side search limit is not a tools/list parameter. Stop and report incomplete discovery if a request fails or a cursor repeats. For clients with deferred tools, confirm that the required tool is activated and callable in the current run before invoking it; activation in a previous run does not guarantee availability in the current run. Use the exact callable name returned by the client, not a guessed alias. On Tool not found, first refresh the relevant catalog and rediscover or reactivate the exact tool in the current run before diagnosing server registration. If you cannot verify the complete authorized catalog, report that uncertainty rather than claiming the server does not expose the tool; do not bypass authentication or blindly retry a write whose outcome is unknown. For a multi-step workflow, prefer the owning provider's Prompt when one is available. A Prompt is guidance, not evidence that any action succeeded. Read current state before a write, obtain explicit user confirmation whenever the workflow requires it, invoke the Tool, and read the resulting state again before reporting success. An event-catalog Resource represents only the events owned by its currently discovered Provider; a Provider that is absent from the current MCP catalog contributes no available events. When creating or modifying a service, enumerate the complete Resource catalog and read every currently discovered event catalog before selecting event contracts or Consumer helpers. Refresh the event catalog before finalizing generated service code; if a required catalog disappeared or conflicts, stop and report the unavailable contract. Never infer an available event from an installed package, source-tree inventory, prior run, or conversation history.",startup:"allow-empty",invocationSecurity:{mode:"trusted-internal"},onError:a=>this.logger.error({err:a,event:"mcp.gateway.failed"},"MCP gateway failed")});this.#g=b;let c=new o(this.config.bearerToken,this.config.clientId);this.#h=(0,k.u)(b,{path:this.config.path,security:{allowedHostnames:this.config.allowedHostnames,allowedOriginHostnames:this.config.allowedOriginHostnames,authentication:{mode:"required",authenticate:a=>c.authenticate(a)}},legacy:"reject",onError:a=>this.logger.error({err:a,event:"mcp.http-transport.failed"},"MCP HTTP transport failed")})}catch(a){throw await this.close().catch(a=>{this.logger.error({err:a,event:"mcp.gateway.rollback-failed"},"MCP gateway rollback failed")}),a}}async close(){let a=this.#h,b=this.#g;await g([a?async()=>{await a.close(),this.#h===a&&(this.#h=void 0)}:void 0,b?async()=>{await b.close(),this.#g===b&&(this.#g=void 0)}:void 0],"MCP gateway cleanup failed")}}class r{#i;#j;#e;#k;constructor(a,b){this.config=a,this.mcp=b,this.#i=0,this.#j=!1}async use(a){if(this.#j)throw Error("Gateway runtime state is closing");this.#i+=1;try{return await a()}finally{this.#i-=1,0===this.#i&&this.#k?.()}}close(a){return this.#j=!0,this.#e??=this.#l(a).catch(a=>{throw this.#e=void 0,a}),this.#e}async #l(a){this.#i>0&&await this.#m(a),await this.mcp.close()}async #m(a){a?.aborted||await new Promise(b=>{let c=()=>{a?.removeEventListener("abort",c),this.#k=void 0,b()};this.#k=c,a?.addEventListener("abort",c,{once:!0})})}}class s{constructor(a){this.deployments=a}canDiscover(a){return this.#n(a)}canRender(a){return this.#n(a)}canInvoke(a){return this.#n(a)}#n(a){let b=this.deployments.getActive(a.pluginId);return b?.buildId===a.buildId}}var t=c(673),u=c(97100),v=c(78701),w=c(82722);class x{#o;#p;#q;#r;constructor(a,b,c){this.readConfig=b,this.artifacts=new u.ui,this.deployments=new u.hv,this.#q=new Map,this.#r=!0;const d=b().rsc;this.locator=(0,u.d5)(this.deployments,async b=>(0,v.$C)(a,b.namespace)),this.#o=new w.nR({context:(0,p.eC)({}),application:a,artifacts:this.artifacts,deployments:this.deployments,runtime:t.fr,pollIntervalMs:d.discovery.pollIntervalMs,missingReconciliations:d.discovery.missingReconciliations,snapshotConcurrency:d.discovery.snapshotConcurrency,generationHighWater:this.#q,maxManifestBytes:d.transfer.maxManifestBytes,maxFileBytes:d.transfer.maxFileBytes,maxTotalBytes:d.transfer.maxTotalBytes,maxArtifactFiles:d.transfer.maxArtifactFiles,maxPathBytes:d.transfer.maxPathBytes,maxPathDepth:d.transfer.maxPathDepth,operationTimeoutMs:d.transfer.operationTimeoutMs,authorize:(0,w.iw)(),onRejected:(a,b)=>c.warn({err:b,event:"rsc.discovery.rejected",topic:a},"Rejected RSC discovery topic"),onError:a=>c.error({err:a,event:"rsc.discovery.failed"},"RSC discovery failed")}),this.#p=(0,u.Vh)((0,u.AG)(this.artifacts,(0,u.V9)(d.assetMountPath)))}async start(){await this.#o.start()}async close(){await g([()=>this.#o.close(),this.#r?()=>{this.#p(),this.#r=!1}:void 0],"RSC discovery cleanup failed")}}function y(a,b,c,d){let e=(0,u._U)({expectedOrigin:()=>d().public.origin,readToken:a=>{let b=a.headers?.["x-rsc-csrf-token"];return Array.isArray(b)?b[0]:b},verifyToken:a=>a===d().rsc.csrfToken}),f=(0,u.W4)({gateway:new u.ku({locator:b.locator,authorize:(a,b)=>c.canInvoke(a)&&e({pluginId:a.pluginId,buildId:a.buildId,actionId:a.referenceId,input:{}},b)})});(0,u.Kq)(a,{asset:(0,u.XH)({catalog:b.artifacts,mountPath:d().rsc.assetMountPath}),serverFunction:async(a,b)=>(a.requestContext={headers:a.headers},f(a,b))})}var z=c(86845),A=c(62710),B=c(29951);let C=A.Yj().regex(/^[a-z][a-z0-9.-]{0,127}$/),D=A.Yj().regex(/^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+$/).max(256),E=A.Yj().min(1).max(512),F=A.Yj().min(1).max(256),G=A.Yj().min(1).max(1024).superRefine((a,b)=>{if(!a.startsWith("/")||a.startsWith("//")||a.includes("?")||a.includes("#"))return void b.addIssue({code:"custom",message:"Sitemap path must be one same-origin absolute path"});for(let c of a.split("/"))try{let a=decodeURIComponent(c);if("."===a||".."===a||/[\\/\x00-\x1f\x7f%]/.test(a))return void b.addIssue({code:"custom",message:"Sitemap path is ambiguous"})}catch{b.addIssue({code:"custom",message:"Sitemap path contains malformed escaping"});return}}),H=A.re({key:F,path:G,lastModified:B.w$({offset:!0}).nullable()}).readonly();A.re({cursor:E.optional()}).readonly(),A.re({}).readonly(),A.re({items:A.YO(H).max(1e3).readonly(),nextCursor:E.nullable()}).superRefine(({items:a},b)=>{new Set(a.map(({key:a})=>a)).size!==a.length&&b.addIssue({code:"custom",message:"Sitemap entry keys must be unique"}),new Set(a.map(({path:a})=>a)).size!==a.length&&b.addIssue({code:"custom",message:"Sitemap entry paths must be unique"})}).readonly(),A.re({protocol:A.eu("zlooks.sitemap-provider"),providerId:C,instanceId:A.uR(),namespace:D,operation:A.eu("/sitemap/entries"),scopePrefix:G.refine(a=>"/"===a||!a.endsWith("/"),"Sitemap Provider scope must not end with a slash"),issuedAt:A.ai().int().nonnegative(),expiresAt:A.ai().int().nonnegative()}).readonly();let I=A.re({xml:A.Yj().min(1).max(0x3200000),etag:A.Yj().regex(/^"[a-f0-9]{64}"$/),lastModified:B.w$({offset:!0}).nullable(),entryCount:A.ai().int().min(1).max(5e4)}).readonly();function J(a){return a.req.aborted||a.res.destroyed||a.res.writableEnded}let K=A.Yj().min(1).max(1024).regex(/^\/(?:[A-Za-z0-9._~!$&'()*+,;=:@%-]+\/?)*$/).refine(a=>a.split("/").every(a=>{try{let b=decodeURIComponent(a);return"."!==b&&".."!==b&&!/[\\/\x00-\x1f\x7f%]/.test(b)}catch{return!1}}),"Ambiguous URI path"),L=A.Yj().max(2048).regex(/^[\x20-\x7e\x80-\xff]*$/),M=A.re({accept:L.optional(),"accept-language":L.optional(),range:L.optional(),"if-range":L.optional(),"if-none-match":L.optional(),"if-match":L.optional(),"if-modified-since":L.optional(),"if-unmodified-since":L.optional(),origin:L.optional()}),N=Object.freeze(Object.keys(M.shape)),O=A.Yj().max(2048).regex(/^[\x20-\x7e\x80-\xff]*$/),P=A.Yj().regex(/^(?:0|[1-9][0-9]*)$/).refine(a=>Number.isSafeInteger(Number(a))),Q=A.re({status:A.ai().int().min(200).max(599),headers:A.re({"content-type":O.optional(),"content-length":P.optional(),"content-disposition":O.optional(),"x-content-type-options":A.eu("nosniff").optional(),location:O.optional(),"cache-control":O.optional(),etag:O.regex(/^(?:W\/)?"[\x21\x23-\x7e\x80-\xff]*"$/).optional(),"last-modified":O.optional(),expires:O.optional(),"content-range":O.optional(),"accept-ranges":O.optional(),vary:O.optional(),"access-control-allow-origin":O.optional(),"access-control-expose-headers":O.optional(),"cross-origin-resource-policy":O.optional()}).refine(a=>16384>=Object.entries(a).reduce((a,[b,c])=>a+b.length+(c?.length??0),0))}).superRefine(({status:a,headers:b},c)=>{204===a&&void 0!==b["content-length"]&&c.addIssue({code:"custom",message:"204 must not contain Content-Length"}),205===a&&void 0!==b["content-length"]&&"0"!==b["content-length"]&&c.addIssue({code:"custom",message:"205 cannot contain a response body"})}),R="registry:zlooks.cn/public-assets/providers/",S=A.Yj().regex(/^[a-z][a-z0-9.-]{0,127}$/),T=A.re({protocol:A.eu("zlooks.public-asset"),providerId:S,instanceId:A.uR(),namespace:A.Yj().regex(/^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+$/).max(256),operation:A.eu("/public-asset/read"),prefix:K.refine(a=>"/"!==a&&a.endsWith("/"),"A non-root directory prefix is required"),methods:A.YO(A.k5(["GET","HEAD"])).min(1).max(2).refine(a=>new Set(a).size===a.length),issuedAt:A.ai().int().nonnegative(),expiresAt:A.ai().int().nonnegative()}),U=A.re({method:A.k5(["GET","HEAD"]),path:K,headers:M.default({}),query:A.Yj().max(2048).optional()});class V{#s;#t;reconcile(a,b){let c=[...this.#s,...a];this.#t=c.filter(({announcement:a})=>b.has(a.providerId)).map(({announcement:a})=>a.prefix),this.#s=[...new Map([...a,...this.#s.filter(({announcement:a})=>b.has(a.providerId))].map(a=>[`${a.announcement.providerId}/${a.announcement.instanceId}`,a])).values()].slice(0,256)}resolve(a,b,c="GET"){if(this.#t.some(b=>a.startsWith(b)))return{status:"unavailable"};let d=this.#s.filter(({announcement:b})=>a.startsWith(b.prefix));if(!d.length)return{status:"none"};let e=d.filter(({announcement:a})=>a.expiresAt>b);return 1!==e.length?{status:"unavailable"}:e[0].announcement.methods.some(a=>a===c)?{status:"matched",peer:e[0]}:{status:"method-not-allowed",methods:e[0].announcement.methods}}constructor(){this.#s=[],this.#t=[]}}let W=A.re({host:A.Yj().min(1).max(253),port:A.ai().int().min(1).max(65535)});class X{#u;#v;#w;#x;#y;#i;constructor(a,b={}){this.application=a,this.options=b,this.#u=new V,this.#w=new AbortController,this.#x=-1/0,this.#v=b.clock??Date.now}async start(){await this.refresh(),this.#w.signal.throwIfAborted(),this.#y||(this.#y=setInterval(()=>{this.refresh().catch(a=>this.options.onError?.(a))},1e3),this.#y.unref())}refresh(){if(this.#i)return this.#i;let a=this.poll();return this.#i=a,a.finally(()=>{this.#i=void 0}).catch(()=>void 0),a}resolve(a,b="GET"){let c=this.#u.resolve(a,this.#v(),b);return"none"===c.status?c:this.#w.signal.aborted||this.#v()-this.#x>3e4?{status:"unavailable"}:c}async close(){this.#w.abort(),this.#y&&clearInterval(this.#y),this.#y=void 0,await this.#i?.catch(()=>void 0)}async poll(){this.#w.signal.throwIfAborted();let a=await this.application.listRegistryTopicSnapshots(R,{signal:AbortSignal.any([this.#w.signal,AbortSignal.timeout(5e3)])});if(this.#w.signal.throwIfAborted(),a.length>256)throw Error("Public asset catalog limit exceeded");let b=this.#v(),c=[],d=new Set;for(let e of a)try{let a=T.parse(e.payload);if(!e.hasData||e.retained||1!==e.publisherCount||1!==e.publishers.length||e.topic!==`${R}${a.providerId}/${a.instanceId}`||a.issuedAt>b+1e3||a.expiresAt<=a.issuedAt||a.expiresAt-a.issuedAt>3e4)throw Error("Invalid live public asset announcement");c.push({announcement:a,address:W.parse(e.publishers[0])})}catch(b){let a=e.topic.slice(R.length).split("/")[0];e.topic.startsWith(R)&&a&&d.add(a),this.options.onRejected?.(e.topic,b)}this.#u.reconcile(c,d),this.#x=b}}var Y=c(57075),Z=c(46466);async function*$(a,b){let c=0,d=0;for(;;){let e=await a.next();if(e.done)break;if(!Buffer.isBuffer(e.value)||!e.value.length||e.value.length>65536)throw Error("Invalid binary frame");if(++d>16384)throw Error("Transfer frame limit exceeded");if((c+=e.value.length)>0x4000000||void 0!==b&&c>b)throw Error("Transfer length exceeded");if(void 0!==b&&c===b){if(!(await a.next()).done)throw Error("Trailing response frame");yield e.value;return}yield e.value}if(void 0!==b&&c!==b)throw Error("Truncated binary transfer")}function _(a,b){a.respond=!1,a.res.writeHead(b,{"content-length":"0","cache-control":"no-store"}),a.res.end()}function aa(){}class ab{#z;#A;#B;#C;#D;#E;#F;#G;#H;#I;#J;#K;constructor(a,b,c){this.#z=a,this.#A=b,this.#B=c.logger;const d=c.createRsc??((a,b)=>new x(a,b,c.logger)),e=c.createMcp??((a,b)=>new q(a,b,c.logger));this.#C=c.mountRsc??y,this.#D=c.mountRscBrowserContext??z.rL,this.rsc=d(a,()=>this.config),this.#E=c.createPublicAssets?.(a)??new X(a,{onError:a=>this.#B.error({err:a,event:"public-asset.discovery.failed"},"Public transfer discovery failed"),onRejected:(a,b)=>this.#B.warn({err:b,topic:a,event:"public-asset.discovery.rejected"},"Public transfer announcement rejected")}),this.rscAccessPolicy=c.createRscAccessPolicy?.(this.rsc)??new s(this.rsc.deployments),this.#H=(0,f.Z)({debounceMs:c.debounceMs??100,create:async c=>{if(c.public.port!==b.public.port)throw Error("gateway.public.port requires a process restart");if(c.rsc.assetMountPath!==b.rsc.assetMountPath)throw Error("gateway.rsc.assetMountPath requires a process restart");if(!(0,h.isDeepStrictEqual)(c.rsc.transfer,b.rsc.transfer))throw Error("gateway.rsc.transfer requires a process restart");if(!(0,h.isDeepStrictEqual)(i(c),i(b)))throw Error("gateway.rsc.discovery runtime settings require a process restart");let d=e(a,c.mcp);return await d.start(),new r(c,d)},dispose:(a,b)=>a.close(b.signal),onError:(a,b)=>{this.#B.error({err:a,event:"gateway.runtime.reload-failed",stage:b.stage},"Gateway runtime reload failed")}})}get config(){return this.#H?.current()?.config??this.#A}async start(){try{await this.#L().update(this.#A),await this.#E.start(),await this.rsc.start()}catch(a){throw await this.close().catch(a=>{this.#B.error({err:a,event:"gateway.runtime.rollback-failed"},"Gateway runtime rollback failed")}),a}}async startHost(a){if(!this.#L().current())throw Error("Gateway runtime is not ready");if(this.#F||this.#I||this.#K)throw Error("Gateway public Host is already started or starting");this.#F=a,this.#M(a);let b=(async()=>{this.#K=await a.start()})();this.#I=b;try{await b}finally{this.#I===b&&(this.#I=void 0)}}stopHost(){let a=this.#J;if(a)return a;let b=this.#N();return this.#J=b,b.finally(()=>{this.#J===b&&(this.#J=void 0)}).catch(()=>void 0),b}async #N(){this.#G?.close(),await this.#I;let a=this.#K;a&&(await a(),this.#K===a&&(this.#K=void 0))}#M(a){var b,c,d,e,f;let g,h;this.#D(a),this.#C(a,this.rsc,this.rscAccessPolicy,()=>this.config),a.use((a,b)=>this.#O(c=>c.mcp.middleware(a,b))),b=this.#z,c=this.#B,a.use(async(a,d)=>{var e,f;let g,h;if("/sitemap.xml"!==a.path)return d();if("GET"!==a.method&&"HEAD"!==a.method){a.set("Allow","GET, HEAD"),a.set("Cache-Control","no-store"),a.body=null,a.status=405;return}if(J(a))return;let i=(e=a,g=new AbortController,h=()=>{g.signal.aborted||g.abort(Error("Public Sitemap request disconnected"))},e.req.once("aborted",h),e.res.once("close",h),J(e)&&h(),{controller:g,unbind:()=>{e.req.off("aborted",h),e.res.off("close",h)}});try{i.controller.signal.throwIfAborted();let c=(f=await b.call("cn.zlooks.sitemap","/sitemap/read",{},{context:(0,p.eC)({source:"cn.zlooks.gateway"}),timeout:2e3,retries:0,signal:i.controller.signal}),I.parse(f));if(J(a))return;!function(a,b){var c,d;if(a.set("Cache-Control","public, max-age=300, stale-while-revalidate=3600"),a.set("Content-Type","application/xml; charset=utf-8"),a.set("X-Content-Type-Options","nosniff"),a.set("ETag",b.etag),b.lastModified&&a.set("Last-Modified",new Date(b.lastModified).toUTCString()),c=a.get("if-none-match"),d=b.etag,c.split(",").some(a=>{let b=a.trim();return"*"===b||b===d||b===`W/${d}`})){a.body=null,a.status=304;return}a.body="HEAD"===a.method?null:b.xml,a.status=200}(a,c)}catch(b){if(i.controller.signal.aborted||J(a))return;c.error({err:b,event:"sitemap.http.failed"},"Sitemap HTTP projection failed"),a.set("Cache-Control","no-store"),a.set("Content-Type","text/plain; charset=utf-8"),a.set("Retry-After","60"),a.body="HEAD"===a.method?null:"Sitemap temporarily unavailable\n",a.status=503}finally{i.unbind()}}),this.#G=(d=this.#z,e={resolve:(a,b)=>["/api","/_next","/_hile","/-","/sitemap.xml",this.config.mcp.path,this.config.rsc.assetMountPath].some(b=>a===b||a.startsWith(`${b.replace(/\/$/,"")}/`))?{status:"none"}:this.#E.resolve(a,b)},f=this.#B,g=new Set,h=!1,a.use(async(a,b)=>{let c,i=e.resolve(a.path,a.method);if("none"===i.status)return b();if(h||g.size>=256||"unavailable"===i.status)return _(a,503);if("method-not-allowed"===i.status)return a.set("Allow",i.methods.join(", ")),_(a,405);let j=U.safeParse({method:a.method,path:a.path,query:a.querystring,headers:Object.fromEntries(N.flatMap(b=>{let c=a.get(b);return c?[[b,c]]:[]}))});if(!j.success)return _(a,400);if(a.req.aborted||a.res.destroyed)return;let k=new AbortController,l=()=>k.abort(Error("Public transfer disconnected")),m=setTimeout(()=>k.abort(Error("Public transfer deadline exceeded")),6e4);m.unref(),g.add(k),a.req.once("aborted",l),a.res.once("close",l);try{var n,o;let b;(c=await d.streamPeer(i.peer.address,i.peer.announcement.operation,j.data,{context:(0,p.eC)({}),signal:k.signal,timeout:6e4,idleTimeout:1e4,window:1})).on("error",aa);let e=c[Symbol.asyncIterator](),f=await e.next();if(f.done)throw Error("Missing response head");let g=Q.parse(f.value),h=(b=g.headers["content-length"],void 0===b?void 0:Number(b)),l=(n=j.data.method,o=g.status,"HEAD"!==n&&204!==o&&205!==o&&304!==o);if(l&&void 0!==h&&h>0x4000000)throw Error("Transfer size limit exceeded");if(!l||0===h){if(!(await e.next()).done)throw Error("Unexpected body for an empty response");k.signal.throwIfAborted(),a.respond=!1,a.res.writeHead(g.status,g.headers),a.res.end();return}k.signal.throwIfAborted(),a.respond=!1,a.res.writeHead(g.status,g.headers);let m=Y.Readable.from($(e,h),{objectMode:!1,highWaterMark:65536});await (0,Z.pipeline)(m,a.res,{signal:k.signal})}catch(b){a.req.aborted||a.res.destroyed||(f.error({err:b,event:"public-asset.transfer.failed",providerId:i.peer.announcement.providerId},"Public binary transfer failed"),a.res.headersSent?a.res.destroy():_(a,502))}finally{clearTimeout(m),a.req.off("aborted",l),a.res.off("close",l),k.abort(),c?.destroy(),g.delete(k)}}),{close(){for(let a of(h=!0,g))a.abort(Error("Public transfer shutdown"))}})}async update(a){await this.#L().update(a)}async withCurrent(a){return this.#O(b=>a({application:this.#z,config:b.config,logger:this.#B,rsc:this.rsc,rscAccessPolicy:this.rscAccessPolicy}))}async close(){await g([()=>this.stopHost(),()=>this.#L().stop(),()=>this.#E.close(),()=>this.rsc.close()],"Gateway runtime cleanup failed")}async #O(a){let b=this.#L().current();if(!b)throw Error("Gateway runtime is not ready");return b.use(()=>a(b))}#L(){let a=this.#H;if(!a)throw Error("Gateway runtime reloader is not initialized");return a}}var ac=c(55733),ad=c(73136);let ae=A.re({origin:A.OZ().refine(a=>{let b=new ad.URL(a);return["http:","https:"].includes(b.protocol)&&!b.username&&!b.password&&"/"===b.pathname&&!b.search&&!b.hash},"Public Host origin must be one canonical HTTP(S) origin")}).readonly();function af(a){return ae.parse(a)}var ag=c(69856),ah=c(70349);let ai=A.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),aj=A.re({port:A.ai().int().min(1).max(65535),mcpBearerToken:A.Yj().min(16),mcpBearerClientId:ai.default("zlooks-admin-client")}),ak=A.ai().int().positive().max(0x7fffffff),al=A.re({public:A.re({port:A.ai().int().min(1).max(65535),origin:A.OZ()}),rsc:A.re({assetMountPath:A.eu("/_hile/rsc/assets"),csrfToken:A.Yj().min(16),render:A.re({timeoutMs:ak,idleTimeoutMs:ak,window:A.ai().int().positive()}),transfer:A.re({maxManifestBytes:A.ai().int().positive(),maxFileBytes:A.ai().int().positive(),maxTotalBytes:A.ai().int().positive(),maxArtifactFiles:A.ai().int().positive(),maxPathBytes:A.ai().int().positive(),maxPathDepth:A.ai().int().positive(),operationTimeoutMs:ak}),discovery:A.re({pollIntervalMs:ak,missingReconciliations:A.ai().int().positive(),snapshotConcurrency:A.ai().int().positive()})}),mcp:A.re({path:A.eu("/mcp"),pollIntervalMs:ak,bearerToken:A.Yj().min(16),clientId:ai,scopes:A.PV([A.eu(n.SS)]),allowedHostnames:A.YO(A.Yj().trim().min(1)).min(1),allowedOriginHostnames:A.YO(A.Yj().trim().min(1)).min(1)})}),am=a=>(0,ah.ol)(aj.parse(a));function an(a){let b=aj.parse(a.gateway),c=af(a.publicHost),d=new URL(c.origin).hostname;return(0,ah.ol)(al.parse({public:{port:b.port,origin:c.origin},rsc:{assetMountPath:"/_hile/rsc/assets",csrfToken:(0,m.createHmac)("sha256",b.mcpBearerToken).update("zlooks:gateway-rsc-csrf:v1").digest("base64url"),render:{timeoutMs:3e4,idleTimeoutMs:1e4,window:8},transfer:{maxManifestBytes:1048576,maxFileBytes:0x4000000,maxTotalBytes:0x10000000,maxArtifactFiles:4096,maxPathBytes:1024,maxPathDepth:32,operationTimeoutMs:3e4},discovery:{pollIntervalMs:500,missingReconciliations:3,snapshotConcurrency:16}},mcp:{path:"/mcp",pollIntervalMs:2e3,bearerToken:b.mcpBearerToken,clientId:b.mcpBearerClientId,scopes:[n.SS],allowedHostnames:[d],allowedOriginHostnames:[d]}}))}let ao=(0,d.Pt)("zlooks.gateway.config",async a=>{let b=await (0,d.oV)(ac.A),c=await (0,ag.ud)(b,{sources:{gateway:{topic:(0,ag.fG)("gateway"),parse:am},publicHost:{topic:(0,ag.fG)("public-host"),parse:af}},compose:an});return a(()=>c.close()),c});var ap=c(814),aq=c(58513),ar=c(99449);let as=(0,d.Pt)("zlooks.gateway.runtime",async a=>{let[b,c,,,f]=await Promise.all([(0,d.oV)(ac.A),(0,d.oV)(ao),(0,d.oV)(ap.A),(0,d.oV)(aq.A),(0,d.oV)(ar.A)]),g=new ab(b,c.snapshot(),{logger:f});await g.start();let h=(0,e.f)(c.current,async a=>{a&&await g.update(a)},{onError:a=>f.error({err:a,event:"gateway.config-update.failed"},"Gateway configuration update failed")});return a(async()=>{h(),await g.close()}),g})},99449:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(37922),e=c(46527);let f=(0,d.Pt)("zlooks.gateway.logger",async a=>{let{logger:b,teardown:c}=(0,e.h)({level:"info",pretty:!1});return a(c),b})}};
1
+ exports.id=10,exports.ids=[10],exports.modules={814:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(37922),e=c(93487),f=c(55733),g=c(99449);let h=(0,d.Pt)("zlooks.gateway.global-config-snapshot",async a=>{let[b,c]=await Promise.all([(0,d.oV)(f.A),(0,d.oV)(g.A)]),h=new e.P(b,{onError:a=>c.warn({err:a,event:"global-config.snapshot.rejected"},"Rejected global configuration snapshot")});return await h.start(),a(()=>h.close()),h})},14400:a=>{function b(a){return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b})}b.keys=()=>[],b.resolve=b,b.id=14400,a.exports=b},15474:()=>{},37714:(a,b,c)=>{"use strict";c.d(b,{WA:()=>I,bE:()=>G,hT:()=>k,qM:()=>H,qe:()=>l,t1:()=>j});var d=c(73136),e=c(18948),f=c(70349),g=c(62710),h=c(29951);let i="cn.zlooks.global.config.server",j=`${i}:site-presentation`,k=`${i}:site-profile`,l="__zlooks_global_config",m=g.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),n=g.Yj().trim().min(1).max(160),o=g.Yj().min(1).max(2048).regex(/^\/(?!\/)[^\s]*$/),p=g.OZ().max(2048).refine(a=>{let b=new d.URL(a).protocol;return"http:"===b||"https:"===b}),q=g.gM("external",[g.re({id:m,label:n,href:o,external:g.eu(!1)}),g.re({id:m,label:n,href:p,external:g.eu(!0)})]),r=g.KC([o,p]).optional(),s=g.KC([o,p]).nullable().optional(),t=g.KC([o,p]).optional(),u=a=>new Set(a.map(a=>a.id)).size===a.length,v=g.re({identity:g.re({name:n,homeHref:o,backgroundVideoUrl:s,logoUrl:r,faviconUrl:r,description:g.Yj().trim().min(1).max(500).optional()}),linkGroups:g.YO(g.re({id:m,label:n,links:g.YO(q).max(32)})).max(16),legal:g.re({copyright:g.Yj().trim().min(1).max(320).optional(),registrations:g.YO(g.re({id:m,kind:g.k5(["icp","public-security","other"]),number:g.Yj().trim().min(1).max(320),verificationUrl:t,iconUrl:r})).max(8).refine(u,{message:"Registration IDs must be unique"})})}),w=g.re({schemaVersion:g.eu(2),revision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:v,updatedAt:h.w$({offset:!0}),updatedBy:g.Yj().trim().min(1).max(256)}),x=g.re({expectedRevision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:v});g.re({changeRequest:g.Yj().trim().min(1).max(2e3)});let y=g.re({profile:g.re({displayName:n,avatarUrl:r,headline:g.Yj().trim().min(1).max(240),biography:g.Yj().trim().min(1).max(2e3)}),topics:g.YO(g.re({id:m,name:n,summary:g.Yj().trim().min(1).max(500),href:t})).max(32).refine(u,{message:"Topic IDs must be unique"}),featuredLinks:g.YO(q).max(16).refine(u,{message:"Featured link IDs must be unique"})}),z=g.re({schemaVersion:g.eu(1),revision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:y,updatedAt:h.w$({offset:!0}),updatedBy:g.Yj().trim().min(1).max(256)}),A=g.re({expectedRevision:g.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:y}),B=g.Yj().trim().min(1).max(256),C=x.extend({actor:B}),D=A.extend({actor:B}),E=g.re({}),F=(0,e.AR)({namespace:i,operations:{readPresentation:{path:"/site-presentation/read",input:E,output:w},updatePresentation:{path:"/site-presentation/update",input:C,output:w},readProfile:{path:"/site-profile/read",input:E,output:z},updateProfile:{path:"/site-profile/update",input:D,output:z}}});function G(a){return(0,f.ol)(w.parse(a))}function H(a){return(0,f.ol)(z.parse(a))}function I(a){return JSON.stringify(G(a))}F.operations.readPresentation.path,F.operations.updatePresentation.path,F.operations.readProfile.path,F.operations.updateProfile.path},43811:()=>{},50781:(a,b,c)=>{"use strict";c.d(b,{$V:()=>z,AJ:()=>h,E6:()=>g,Ih:()=>f,RW:()=>s,Sz:()=>y,ls:()=>i,lu:()=>A,vH:()=>v});var d=c(62710),e=c(29951);let f="zlooks.browser.cookies",g="zlooks.browser.client",h=65536,i="__zlooks_plugin_session",j=d.Yj().regex(/^[a-z][a-z0-9]*(?:\.[a-z][a-z0-9]*)+$/),k=d.Yj().min(1).max(64).regex(/^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/),l=d.Yj().min(1).max(2048).regex(/^\/(?!\/)[^?#\s]*$/),m=e.w$({offset:!0}),n=d.Yj().regex(/^[A-Za-z][A-Za-z0-9_.-]{0,127}$/),o=d.k5(["GET","POST","PUT","PATCH","DELETE"]),p=d.Yj().max(8192),q=d.re({code:d.eu(0),data:d.L5().refine(a=>void 0!==a)}).readonly(),r=d.re({code:d.ai().int().safe().refine(a=>0!==a),error:d.Yj().trim().min(1).max(500)}).readonly(),s=d.KC([q,r]);d.re({accept:p.optional(),"accept-language":p.optional(),"content-type":p.optional(),"if-modified-since":p.optional(),"if-none-match":p.optional(),origin:d.Yj().max(2048).optional(),range:p.optional(),referer:p.optional()}).readonly();let t=d.KC([d.Yj().max(512),d.YO(d.Yj().max(512)).max(20).readonly()]),u=d.g1(d.Yj().regex(/^[a-z][a-zA-Z0-9_-]{0,63}$/),t).refine(a=>Object.keys(a).length<=20,{message:"Browser API query has too many fields"}).readonly();d.g1(n,d.Yj().min(1).max(4096)).refine(a=>Object.keys(a).length<=8,{message:"Browser API context has too many cookies"}).readonly();let v=d.re({ipAddress:d.KC([d.uX(),d.ug()]),userAgent:d.Yj().trim().min(1).max(1024).nullable()}).readonly();d.re({method:o,path:l,origin:d.Yj().max(2048).optional(),clientKey:d.Yj().regex(/^[a-f0-9]{64}$/),query:u.optional(),body:d.L5().optional()}).readonly();let w=d.gM("action",[d.re({action:d.eu("set"),name:n,value:d.Yj().min(1).max(4096),expiresAt:m}),d.re({action:d.eu("clear"),name:n})]).readonly(),x=d.YO(w).max(8).refine(a=>new Set(a.map(a=>a.name)).size===a.length,"Cookie effects must target unique names").readonly();function y(a,b){return`/-/${j.parse(a)}${l.parse(b)}`}function z(a){return n.parse(`zlooks_plugin_${k.parse(a)}_session`)}function A(a){return 0!==a.code}d.re({status:d.ai().int().min(200).max(599).refine(a=>a<300||a>=400),body:s,cookieEffects:x.optional()}).superRefine((a,b)=>{let c=a.status>=200&&a.status<300;!A(a.body)!==c&&b.addIssue({code:"custom",message:"HTTP status and browser API response code disagree",path:["body","code"]})}).readonly()},52124:()=>{},55733:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(37922),e=c(53693),f=c(69856),g=c(14571);let h=(0,d.Pt)("zlooks.gateway.application",async a=>{let b=(0,f.pj)({REGISTRY_HOST:process.env.REGISTRY_HOST,REGISTRY_PORT:process.env.REGISTRY_PORT}),c=(0,f.PE)(process.env.HILE_ADVERTISE_HOST),d=new e.lg({namespace:"cn.zlooks.gateway.server",registry:b,...c?{advertiseHost:c}:{}}),h=await (0,g.o0)();return a(await d.listen(h)),d})},58513:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(37922),e=c(93487),f=c(55733),g=c(99449);let h=(0,d.Pt)("zlooks.gateway.global-profile-snapshot",async a=>{let[b,c]=await Promise.all([(0,d.oV)(f.A),(0,d.oV)(g.A)]),h=new e.G(b,{onError:a=>c.warn({err:a,event:"global-profile.snapshot.rejected"},"Rejected global profile snapshot")});return await h.start(),a(()=>h.close()),h})},69856:(a,b,c)=>{"use strict";c.d(b,{PE:()=>h,pj:()=>i,fG:()=>j,ud:()=>m});var d=c(62710),e=c(35789);let f=d.Ik({REGISTRY_HOST:d.Yj().trim().min(1),REGISTRY_PORT:e.ai().int().min(1).max(65535)}),g=d.Yj().trim().min(1).optional();function h(a){return g.parse(a)}function i(a){let b=f.parse(a);return Object.freeze({host:b.REGISTRY_HOST,port:b.REGISTRY_PORT})}function j(a){let b=a.trim();if(!b||b.includes("/"))throw Error("Registry configuration key must be one non-empty path segment");return`registry:zlooks.cn/${b}`}var k=c(51142),l=c(48350);async function m(a,b){let c,d,e,f=Object.keys(b.sources);if(0===f.length)throw Error("At least one Registry configuration source is required");let g=Object.fromEntries(f.map(a=>[a,b.sources[a].topic])),h=await (0,k.wb)(a,{topics:g,required:f,onError:a=>n(b.onError,a)}),i=(0,l.IJ)(),j=!0,m=new Promise((a,b)=>{d=a,e=b}),o=setTimeout(()=>{e(Error("Registry configuration was not ready before the initial timeout"))},b.initialTimeoutMs??1e4),p=(0,k.f)(h.current,a=>{if(void 0!==a)try{let c=Object.fromEntries(f.map(c=>[c,b.sources[c].parse(a[c])]));i.value=b.compose(c),d()}catch(a){n(b.onError,a),void 0===i.value&&e(a)}},{immediate:!0}),q=()=>{if(c)return c;j&&(j=!1,p());let a=h.stop().catch(a=>{throw c=void 0,a});return c=a,a};try{await m}catch(a){throw await q().catch(()=>void 0),a}finally{clearTimeout(o)}return{current:i,snapshot(){let a=i.value;if(void 0===a)throw Error("Registry configuration is not ready");return a},close:q}}function n(a,b){try{Promise.resolve(a?.(b)).catch(()=>void 0)}catch{}}},70349:(a,b,c)=>{"use strict";c.d(b,{CY:()=>d,ol:()=>function a(b){if(null!==b&&"object"==typeof b&&!Object.isFrozen(b))for(let c of(Object.freeze(b),Object.values(b)))a(c);return b}});let d="zlooks_session"},86845:(a,b,c)=>{"use strict";c.d(b,{gV:()=>h,rL:()=>g});var d=c(18509),e=c(50781);let f="x-zlooks-internal-rsc-client-ip";function g(a){a.use(async(a,b)=>{a.request.headers[f]=a.ip,await b()})}function h(a){let b=a.get(f)?.trim(),c=a.get("user-agent")?.trim().slice(0,1024)||null;if(!b)return(0,d.eC)({});let g=e.vH.parse({ipAddress:b,userAgent:c});return(0,d.eC)({[e.E6]:g})}},93487:(a,b,c)=>{"use strict";c.d(b,{G:()=>g,P:()=>f});var d=c(37714);class e{#a;#b;#c;#d;#e;constructor(a,b,c,d,e={}){this.application=a,this.topic=b,this.parse=c,this.description=d,this.#a=e.initialTimeoutMs??1e4,this.#b=e.onError??(()=>void 0)}async start(){let a,b;if(this.#d)throw Error(`${this.description} snapshot source is already started`);let c=new Promise((c,d)=>{a=c,b=d}),d=setTimeout(()=>{b(Error(`${this.description} snapshot was not ready before the initial timeout`))},this.#a);try{this.#d=await this.application.subscribe(this.topic,c=>{try{this.#c=this.parse(c),a()}catch(a){this.#f(a),this.#c||b(a)}}),await c}catch(a){throw await this.close().catch(()=>void 0),a}finally{clearTimeout(d)}}snapshot(){let a=this.#c;if(!a)throw Error(`${this.description} snapshot is not ready`);return a}close(){let a=this.#e;if(a)return a;let b=this.#d;if(!b)return Promise.resolve();let c=Promise.resolve(b()).then(()=>{this.#d===b&&(this.#d=void 0)}).catch(a=>{throw this.#e=void 0,a});return this.#e=c,c}#f(a){try{Promise.resolve(this.#b(a)).catch(()=>void 0)}catch{}}}class f extends e{constructor(a,b={}){super(a,d.t1,d.bE,"Global configuration",b)}}class g extends e{constructor(a,b={}){super(a,d.hT,d.qM,"Global profile",b)}}},93980:()=>{},97242:(a,b,c)=>{"use strict";c.d(b,{A:()=>au});var d=c(37922),e=c(51142),f=c(22291);async function g(a,b="One or more cleanup actions failed"){let c=[];for(let b of a)if(b)try{await b()}catch(a){c.push(a)}if(c.length>0)throw AggregateError(c,b)}var h=c(57975);function i(a){let b=a.rsc.discovery;return{pollIntervalMs:b.pollIntervalMs,missingReconciliations:b.missingReconciliations,snapshotConcurrency:b.snapshotConcurrency}}var j=c(1450),k=c(77851),l=c(82383),m=c(77598),n=c(846);class o{constructor(a,b){this.token=a,this.clientId=b}authenticate(a){var b,c;let d,e,f=a.headers.get("authorization"),g=`Bearer ${this.token}`;return f&&(b=f,c=g,d=Buffer.from(b),e=Buffer.from(c),d.length===e.length&&(0,m.timingSafeEqual)(d,e))?{token:this.token,clientId:this.clientId,scopes:[n.SS]}:new Response("Unauthorized",{status:401,headers:{"www-authenticate":"Bearer"}})}}var p=c(18509);class q{#g;#h;constructor(a,b,c){this.application=a,this.config=b,this.logger=c}get middleware(){let a=this.#h;if(!a)throw Error("MCP gateway is not ready");return a.middleware}inspect(){let a=this.#g;if(!a)throw Error("MCP gateway is not ready");return a.inspect()}async start(){if(this.#g)throw Error("MCP gateway is already mounted");try{let a=(0,l.H_)(this.application,{pollIntervalMs:this.config.pollIntervalMs,onError:a=>this.logger.error({err:a,event:"mcp.provider-discovery.failed"},"MCP provider discovery failed")}),b=await (0,j.r)({source:a,executionContext:a=>(0,p.eC)({requestId:(0,m.randomUUID)(),...a.authInfo?.clientId?{clientId:a.authInfo.clientId}:{}}),info:{name:"@zlooks.cn/gateway-server",version:"0.0.0"},instructions:"Capabilities are dynamically discovered from their owning internal Hile microservices. Before acting, inspect the current tool, resource, and prompt catalogs and their schemas; never invent a capability. Client-side search such as ToolSearch returns a filtered, possibly truncated subset, not the complete MCP tool catalog; never conclude that a tool does not exist solely because it is missing from a search result. If search results reach the requested limit or indicate truncation, increase the search limit within client-supported bounds or narrow the query to the exact provider-qualified tool name. Even fewer results do not prove completeness when the query is filtered. When a complete inventory is needed, enumerate tools/list and pass each returned nextCursor as cursor on the next request until nextCursor is absent. A client-side search limit is not a tools/list parameter. Stop and report incomplete discovery if a request fails or a cursor repeats. For clients with deferred tools, confirm that the required tool is activated and callable in the current run before invoking it; activation in a previous run does not guarantee availability in the current run. Use the exact callable name returned by the client, not a guessed alias. On Tool not found, first refresh the relevant catalog and rediscover or reactivate the exact tool in the current run before diagnosing server registration. If you cannot verify the complete authorized catalog, report that uncertainty rather than claiming the server does not expose the tool; do not bypass authentication or blindly retry a write whose outcome is unknown. For a multi-step workflow, prefer the owning provider's Prompt when one is available. A Prompt is guidance, not evidence that any action succeeded. Read current state before a write, obtain explicit user confirmation whenever the workflow requires it, invoke the Tool, and read the resulting state again before reporting success. An event-catalog Resource represents only the events owned by its currently discovered Provider; a Provider that is absent from the current MCP catalog contributes no available events. When creating or modifying a service, enumerate the complete Resource catalog and read every currently discovered event catalog before selecting event contracts or Consumer helpers. Refresh the event catalog before finalizing generated service code; if a required catalog disappeared or conflicts, stop and report the unavailable contract. Never infer an available event from an installed package, source-tree inventory, prior run, or conversation history.",startup:"allow-empty",invocationSecurity:{mode:"trusted-internal"},onError:a=>this.logger.error({err:a,event:"mcp.gateway.failed"},"MCP gateway failed")});this.#g=b;let c=new o(this.config.bearerToken,this.config.clientId);this.#h=(0,k.u)(b,{path:this.config.path,security:{allowedHostnames:this.config.allowedHostnames,allowedOriginHostnames:this.config.allowedOriginHostnames,authentication:{mode:"required",authenticate:a=>c.authenticate(a)}},legacy:"reject",onError:a=>this.logger.error({err:a,event:"mcp.http-transport.failed"},"MCP HTTP transport failed")})}catch(a){throw await this.close().catch(a=>{this.logger.error({err:a,event:"mcp.gateway.rollback-failed"},"MCP gateway rollback failed")}),a}}async close(){let a=this.#h,b=this.#g;await g([a?async()=>{await a.close(),this.#h===a&&(this.#h=void 0)}:void 0,b?async()=>{await b.close(),this.#g===b&&(this.#g=void 0)}:void 0],"MCP gateway cleanup failed")}}class r{#i;#j;#e;#k;constructor(a,b){this.config=a,this.mcp=b,this.#i=0,this.#j=!1}async use(a){if(this.#j)throw Error("Gateway runtime state is closing");this.#i+=1;try{return await a()}finally{this.#i-=1,0===this.#i&&this.#k?.()}}close(a){return this.#j=!0,this.#e??=this.#l(a).catch(a=>{throw this.#e=void 0,a}),this.#e}async #l(a){this.#i>0&&await this.#m(a),await this.mcp.close()}async #m(a){a?.aborted||await new Promise(b=>{let c=()=>{a?.removeEventListener("abort",c),this.#k=void 0,b()};this.#k=c,a?.addEventListener("abort",c,{once:!0})})}}class s{constructor(a){this.deployments=a}canDiscover(a){return this.#n(a)}canRender(a){return this.#n(a)}canInvoke(a){return this.#n(a)}#n(a){let b=this.deployments.getActive(a.pluginId);return b?.buildId===a.buildId}}var t=c(673),u=c(97100),v=c(78701),w=c(82722);class x{#o;#p;#q;#r;constructor(a,b,c){this.readConfig=b,this.artifacts=new u.ui,this.deployments=new u.hv,this.#q=new Map,this.#r=!0;const d=b().rsc;this.locator=(0,u.d5)(this.deployments,async b=>(0,v.$C)(a,b.namespace)),this.#o=new w.nR({context:(0,p.eC)({}),application:a,artifacts:this.artifacts,deployments:this.deployments,runtime:t.fr,pollIntervalMs:d.discovery.pollIntervalMs,missingReconciliations:d.discovery.missingReconciliations,snapshotConcurrency:d.discovery.snapshotConcurrency,generationHighWater:this.#q,maxManifestBytes:d.transfer.maxManifestBytes,maxFileBytes:d.transfer.maxFileBytes,maxTotalBytes:d.transfer.maxTotalBytes,maxArtifactFiles:d.transfer.maxArtifactFiles,maxPathBytes:d.transfer.maxPathBytes,maxPathDepth:d.transfer.maxPathDepth,operationTimeoutMs:d.transfer.operationTimeoutMs,authorize:(0,w.iw)(),onRejected:(a,b)=>c.warn({err:b,event:"rsc.discovery.rejected",topic:a},"Rejected RSC discovery topic"),onError:a=>c.error({err:a,event:"rsc.discovery.failed"},"RSC discovery failed")}),this.#p=(0,u.Vh)((0,u.AG)(this.artifacts,(0,u.V9)(d.assetMountPath)))}async start(){await this.#o.start()}async close(){await g([()=>this.#o.close(),this.#r?()=>{this.#p(),this.#r=!1}:void 0],"RSC discovery cleanup failed")}}function y(a,b,c,d){let e=(0,u._U)({expectedOrigin:()=>d().public.origin,readToken:a=>{let b=a.headers?.["x-rsc-csrf-token"];return Array.isArray(b)?b[0]:b},verifyToken:a=>a===d().rsc.csrfToken}),f=(0,u.W4)({gateway:new u.ku({locator:b.locator,authorize:(a,b)=>c.canInvoke(a)&&e({pluginId:a.pluginId,buildId:a.buildId,actionId:a.referenceId,input:{}},b)})});(0,u.Kq)(a,{asset:(0,u.XH)({catalog:b.artifacts,mountPath:d().rsc.assetMountPath}),serverFunction:async(a,b)=>(a.requestContext={headers:a.headers},f(a,b))})}var z=c(86845),A=c(62710),B=c(29951);let C=A.Yj().regex(/^[a-z][a-z0-9.-]{0,127}$/),D=A.Yj().regex(/^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+$/).max(256),E=A.Yj().min(1).max(512),F=A.Yj().min(1).max(256),G=A.Yj().min(1).max(1024).superRefine((a,b)=>{if(!a.startsWith("/")||a.startsWith("//")||a.includes("?")||a.includes("#"))return void b.addIssue({code:"custom",message:"Sitemap path must be one same-origin absolute path"});for(let c of a.split("/"))try{let a=decodeURIComponent(c);if("."===a||".."===a||/[\\/\x00-\x1f\x7f%]/.test(a))return void b.addIssue({code:"custom",message:"Sitemap path is ambiguous"})}catch{b.addIssue({code:"custom",message:"Sitemap path contains malformed escaping"});return}}),H=A.re({key:F,path:G,lastModified:B.w$({offset:!0}).nullable()}).readonly();A.re({cursor:E.optional()}).readonly(),A.re({}).readonly(),A.re({items:A.YO(H).max(1e3).readonly(),nextCursor:E.nullable()}).superRefine(({items:a},b)=>{new Set(a.map(({key:a})=>a)).size!==a.length&&b.addIssue({code:"custom",message:"Sitemap entry keys must be unique"}),new Set(a.map(({path:a})=>a)).size!==a.length&&b.addIssue({code:"custom",message:"Sitemap entry paths must be unique"})}).readonly(),A.re({protocol:A.eu("zlooks.sitemap-provider"),providerId:C,instanceId:A.uR(),namespace:D,operation:A.eu("/sitemap/entries"),scopePrefix:G.refine(a=>"/"===a||!a.endsWith("/"),"Sitemap Provider scope must not end with a slash"),issuedAt:A.ai().int().nonnegative(),expiresAt:A.ai().int().nonnegative()}).readonly();let I=A.re({xml:A.Yj().min(1).max(0x3200000),etag:A.Yj().regex(/^"[a-f0-9]{64}"$/),lastModified:B.w$({offset:!0}).nullable(),entryCount:A.ai().int().min(1).max(5e4)}).readonly();function J(a){return a.req.aborted||a.res.destroyed||a.res.writableEnded}let K=A.Yj().min(1).max(1024).regex(/^\/(?:[A-Za-z0-9._~!$&'()*+,;=:@%-]+\/?)*$/).refine(a=>a.split("/").every(a=>{try{let b=decodeURIComponent(a);return"."!==b&&".."!==b&&!/[\\/\x00-\x1f\x7f%]/.test(b)}catch{return!1}}),"Ambiguous URI path"),L=A.Yj().max(2048).regex(/^[\x20-\x7e\x80-\xff]*$/),M=A.re({accept:L.optional(),"accept-language":L.optional(),range:L.optional(),"if-range":L.optional(),"if-none-match":L.optional(),"if-match":L.optional(),"if-modified-since":L.optional(),"if-unmodified-since":L.optional(),origin:L.optional()}),N=Object.freeze(Object.keys(M.shape)),O=A.Yj().max(2048).regex(/^[\x20-\x7e\x80-\xff]*$/),P=A.Yj().regex(/^(?:0|[1-9][0-9]*)$/).refine(a=>Number.isSafeInteger(Number(a))),Q=A.re({status:A.ai().int().min(200).max(599),headers:A.re({"content-type":O.optional(),"content-length":P.optional(),"content-disposition":O.optional(),"x-content-type-options":A.eu("nosniff").optional(),location:O.optional(),"cache-control":O.optional(),etag:O.regex(/^(?:W\/)?"[\x21\x23-\x7e\x80-\xff]*"$/).optional(),"last-modified":O.optional(),expires:O.optional(),"content-range":O.optional(),"accept-ranges":O.optional(),vary:O.optional(),"access-control-allow-origin":O.optional(),"access-control-expose-headers":O.optional(),"cross-origin-resource-policy":O.optional()}).refine(a=>16384>=Object.entries(a).reduce((a,[b,c])=>a+b.length+(c?.length??0),0))}).superRefine(({status:a,headers:b},c)=>{204===a&&void 0!==b["content-length"]&&c.addIssue({code:"custom",message:"204 must not contain Content-Length"}),205===a&&void 0!==b["content-length"]&&"0"!==b["content-length"]&&c.addIssue({code:"custom",message:"205 cannot contain a response body"})}),R="registry:zlooks.cn/public-assets/providers/",S=A.Yj().regex(/^[a-z][a-z0-9.-]{0,127}$/),T=A.re({protocol:A.eu("zlooks.public-asset"),providerId:S,instanceId:A.uR(),namespace:A.Yj().regex(/^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+$/).max(256),operation:A.eu("/public-asset/read"),prefix:K.refine(a=>"/"!==a&&a.endsWith("/"),"A non-root directory prefix is required"),methods:A.YO(A.k5(["GET","HEAD"])).min(1).max(2).refine(a=>new Set(a).size===a.length),issuedAt:A.ai().int().nonnegative(),expiresAt:A.ai().int().nonnegative()}),U=A.re({method:A.k5(["GET","HEAD"]),path:K,headers:M.default({}),query:A.Yj().max(2048).optional()});class V{#s;#t;reconcile(a,b){let c=[...this.#s,...a];this.#t=c.filter(({announcement:a})=>b.has(a.providerId)).map(({announcement:a})=>a.prefix),this.#s=[...new Map([...a,...this.#s.filter(({announcement:a})=>b.has(a.providerId))].map(a=>[`${a.announcement.providerId}/${a.announcement.instanceId}`,a])).values()].slice(0,256)}resolve(a,b,c="GET"){if(this.#t.some(b=>a.startsWith(b)))return{status:"unavailable"};let d=this.#s.filter(({announcement:b})=>a.startsWith(b.prefix));if(!d.length)return{status:"none"};let e=d.filter(({announcement:a})=>a.expiresAt>b);return 1!==e.length?{status:"unavailable"}:e[0].announcement.methods.some(a=>a===c)?{status:"matched",peer:e[0]}:{status:"method-not-allowed",methods:e[0].announcement.methods}}constructor(){this.#s=[],this.#t=[]}}let W=A.re({host:A.Yj().min(1).max(253),port:A.ai().int().min(1).max(65535)});class X{#u;#v;#w;#x;#y;#i;constructor(a,b={}){this.application=a,this.options=b,this.#u=new V,this.#w=new AbortController,this.#x=-1/0,this.#v=b.clock??Date.now}async start(){await this.refresh(),this.#w.signal.throwIfAborted(),this.#y||(this.#y=setInterval(()=>{this.refresh().catch(a=>this.options.onError?.(a))},1e3),this.#y.unref())}refresh(){if(this.#i)return this.#i;let a=this.poll();return this.#i=a,a.finally(()=>{this.#i=void 0}).catch(()=>void 0),a}resolve(a,b="GET"){let c=this.#u.resolve(a,this.#v(),b);return"none"===c.status?c:this.#w.signal.aborted||this.#v()-this.#x>3e4?{status:"unavailable"}:c}async close(){this.#w.abort(),this.#y&&clearInterval(this.#y),this.#y=void 0,await this.#i?.catch(()=>void 0)}async poll(){this.#w.signal.throwIfAborted();let a=await this.application.listRegistryTopicSnapshots(R,{signal:AbortSignal.any([this.#w.signal,AbortSignal.timeout(5e3)])});if(this.#w.signal.throwIfAborted(),a.length>256)throw Error("Public asset catalog limit exceeded");let b=this.#v(),c=[],d=new Set;for(let e of a)try{let a=T.parse(e.payload);if(!e.hasData||e.retained||1!==e.publisherCount||1!==e.publishers.length||e.topic!==`${R}${a.providerId}/${a.instanceId}`||a.issuedAt>b+1e3||a.expiresAt<=a.issuedAt||a.expiresAt-a.issuedAt>3e4)throw Error("Invalid live public asset announcement");c.push({announcement:a,address:W.parse(e.publishers[0])})}catch(b){let a=e.topic.slice(R.length).split("/")[0];e.topic.startsWith(R)&&a&&d.add(a),this.options.onRejected?.(e.topic,b)}this.#u.reconcile(c,d),this.#x=b}}var Y=c(57075),Z=c(46466);async function*$(a,b){let c=0,d=0;for(;;){let e=await a.next();if(e.done)break;if(!Buffer.isBuffer(e.value)||!e.value.length||e.value.length>65536)throw Error("Invalid binary frame");if(++d>16384)throw Error("Transfer frame limit exceeded");if((c+=e.value.length)>0x4000000||void 0!==b&&c>b)throw Error("Transfer length exceeded");if(void 0!==b&&c===b){if(!(await a.next()).done)throw Error("Trailing response frame");yield e.value;return}yield e.value}if(void 0!==b&&c!==b)throw Error("Truncated binary transfer")}function _(a,b){a.respond=!1,a.res.writeHead(b,{"content-length":"0","cache-control":"no-store"}),a.res.end()}function aa(){}class ab{#z;#A;#B;#C;#D;#E;#F;#G;#H;#I;#J;#K;constructor(a,b,c){this.#z=a,this.#A=b,this.#B=c.logger;const d=c.createRsc??((a,b)=>new x(a,b,c.logger)),e=c.createMcp??((a,b)=>new q(a,b,c.logger));this.#C=c.mountRsc??y,this.#D=c.mountRscBrowserContext??z.rL,this.rsc=d(a,()=>this.config),this.#E=c.createPublicAssets?.(a)??new X(a,{onError:a=>this.#B.error({err:a,event:"public-asset.discovery.failed"},"Public transfer discovery failed"),onRejected:(a,b)=>this.#B.warn({err:b,topic:a,event:"public-asset.discovery.rejected"},"Public transfer announcement rejected")}),this.rscAccessPolicy=c.createRscAccessPolicy?.(this.rsc)??new s(this.rsc.deployments),this.#H=(0,f.Z)({debounceMs:c.debounceMs??100,create:async c=>{if(c.public.port!==b.public.port)throw Error("gateway.public.port requires a process restart");if(c.rsc.assetMountPath!==b.rsc.assetMountPath)throw Error("gateway.rsc.assetMountPath requires a process restart");if(!(0,h.isDeepStrictEqual)(c.rsc.transfer,b.rsc.transfer))throw Error("gateway.rsc.transfer requires a process restart");if(!(0,h.isDeepStrictEqual)(i(c),i(b)))throw Error("gateway.rsc.discovery runtime settings require a process restart");let d=e(a,c.mcp);return await d.start(),new r(c,d)},dispose:(a,b)=>a.close(b.signal),onError:(a,b)=>{this.#B.error({err:a,event:"gateway.runtime.reload-failed",stage:b.stage},"Gateway runtime reload failed")}})}get config(){return this.#H?.current()?.config??this.#A}async start(){try{await this.#L().update(this.#A),await this.#E.start(),await this.rsc.start()}catch(a){throw await this.close().catch(a=>{this.#B.error({err:a,event:"gateway.runtime.rollback-failed"},"Gateway runtime rollback failed")}),a}}async startHost(a){if(!this.#L().current())throw Error("Gateway runtime is not ready");if(this.#F||this.#I||this.#K)throw Error("Gateway public Host is already started or starting");this.#F=a,this.#M(a);let b=(async()=>{this.#K=await a.start()})();this.#I=b;try{await b}finally{this.#I===b&&(this.#I=void 0)}}stopHost(){let a=this.#J;if(a)return a;let b=this.#N();return this.#J=b,b.finally(()=>{this.#J===b&&(this.#J=void 0)}).catch(()=>void 0),b}async #N(){this.#G?.close(),await this.#I;let a=this.#K;a&&(await a(),this.#K===a&&(this.#K=void 0))}#M(a){var b,c,d,e,f;let g,h;this.#D(a),this.#C(a,this.rsc,this.rscAccessPolicy,()=>this.config),a.use((a,b)=>this.#O(c=>c.mcp.middleware(a,b))),b=this.#z,c=this.#B,a.use(async(a,d)=>{var e,f;let g,h;if("/sitemap.xml"!==a.path)return d();if("GET"!==a.method&&"HEAD"!==a.method){a.set("Allow","GET, HEAD"),a.set("Cache-Control","no-store"),a.body=null,a.status=405;return}if(J(a))return;let i=(e=a,g=new AbortController,h=()=>{g.signal.aborted||g.abort(Error("Public Sitemap request disconnected"))},e.req.once("aborted",h),e.res.once("close",h),J(e)&&h(),{controller:g,unbind:()=>{e.req.off("aborted",h),e.res.off("close",h)}});try{i.controller.signal.throwIfAborted();let c=(f=await b.call("cn.zlooks.sitemap","/sitemap/read",{},{context:(0,p.eC)({source:"cn.zlooks.gateway"}),timeout:2e3,retries:0,signal:i.controller.signal}),I.parse(f));if(J(a))return;!function(a,b){var c,d;if(a.set("Cache-Control","public, max-age=300, stale-while-revalidate=3600"),a.set("Content-Type","application/xml; charset=utf-8"),a.set("X-Content-Type-Options","nosniff"),a.set("ETag",b.etag),b.lastModified&&a.set("Last-Modified",new Date(b.lastModified).toUTCString()),c=a.get("if-none-match"),d=b.etag,c.split(",").some(a=>{let b=a.trim();return"*"===b||b===d||b===`W/${d}`})){a.body=null,a.status=304;return}a.body="HEAD"===a.method?null:b.xml,a.status=200}(a,c)}catch(b){if(i.controller.signal.aborted||J(a))return;c.error({err:b,event:"sitemap.http.failed"},"Sitemap HTTP projection failed"),a.set("Cache-Control","no-store"),a.set("Content-Type","text/plain; charset=utf-8"),a.set("Retry-After","60"),a.body="HEAD"===a.method?null:"Sitemap temporarily unavailable\n",a.status=503}finally{i.unbind()}}),this.#G=(d=this.#z,e={resolve:(a,b)=>["/api","/_next","/_hile","/-","/sitemap.xml",this.config.mcp.path,this.config.rsc.assetMountPath].some(b=>a===b||a.startsWith(`${b.replace(/\/$/,"")}/`))?{status:"none"}:this.#E.resolve(a,b)},f=this.#B,g=new Set,h=!1,a.use(async(a,b)=>{let c,i=e.resolve(a.path,a.method);if("none"===i.status)return b();if(h||g.size>=256||"unavailable"===i.status)return _(a,503);if("method-not-allowed"===i.status)return a.set("Allow",i.methods.join(", ")),_(a,405);let j=U.safeParse({method:a.method,path:a.path,query:a.querystring,headers:Object.fromEntries(N.flatMap(b=>{let c=a.get(b);return c?[[b,c]]:[]}))});if(!j.success)return _(a,400);if(a.req.aborted||a.res.destroyed)return;let k=new AbortController,l=()=>k.abort(Error("Public transfer disconnected")),m=setTimeout(()=>k.abort(Error("Public transfer deadline exceeded")),6e4);m.unref(),g.add(k),a.req.once("aborted",l),a.res.once("close",l);try{var n,o;let b;(c=await d.streamPeer(i.peer.address,i.peer.announcement.operation,j.data,{context:(0,p.eC)({}),signal:k.signal,timeout:6e4,idleTimeout:1e4,window:1})).on("error",aa);let e=c[Symbol.asyncIterator](),f=await e.next();if(f.done)throw Error("Missing response head");let g=Q.parse(f.value),h=(b=g.headers["content-length"],void 0===b?void 0:Number(b)),l=(n=j.data.method,o=g.status,"HEAD"!==n&&204!==o&&205!==o&&304!==o);if(l&&void 0!==h&&h>0x4000000)throw Error("Transfer size limit exceeded");if(!l||0===h){if(!(await e.next()).done)throw Error("Unexpected body for an empty response");k.signal.throwIfAborted(),a.respond=!1,a.res.writeHead(g.status,g.headers),a.res.end();return}k.signal.throwIfAborted(),a.respond=!1,a.res.writeHead(g.status,g.headers);let m=Y.Readable.from($(e,h),{objectMode:!1,highWaterMark:65536});await (0,Z.pipeline)(m,a.res,{signal:k.signal})}catch(b){a.req.aborted||a.res.destroyed||(f.error({err:b,event:"public-asset.transfer.failed",providerId:i.peer.announcement.providerId},"Public binary transfer failed"),a.res.headersSent?a.res.destroy():_(a,502))}finally{clearTimeout(m),a.req.off("aborted",l),a.res.off("close",l),k.abort(),c?.destroy(),g.delete(k)}}),{close(){for(let a of(h=!0,g))a.abort(Error("Public transfer shutdown"))}})}async update(a){await this.#L().update(a)}async withCurrent(a){return this.#O(b=>a({application:this.#z,config:b.config,logger:this.#B,rsc:this.rsc,rscAccessPolicy:this.rscAccessPolicy}))}async close(){await g([()=>this.stopHost(),()=>this.#L().stop(),()=>this.#E.close(),()=>this.rsc.close()],"Gateway runtime cleanup failed")}async #O(a){let b=this.#L().current();if(!b)throw Error("Gateway runtime is not ready");return b.use(()=>a(b))}#L(){let a=this.#H;if(!a)throw Error("Gateway runtime reloader is not initialized");return a}}var ac=c(55733),ad=c(73136);let ae=A.re({origin:A.OZ().refine(a=>{let b=new ad.URL(a);return["http:","https:"].includes(b.protocol)&&!b.username&&!b.password&&"/"===b.pathname&&!b.search&&!b.hash},"Public Host origin must be one canonical HTTP(S) origin")}).readonly();function af(a){return ae.parse(a)}var ag=c(69856),ah=c(50781),ai=c(70349);let aj=A.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),ak=A.re({requestTimeoutMs:A.ai().int().min(1e3).max(36e5).default(6e5),idleTimeoutMs:A.ai().int().min(1e3).max(3e5).default(3e4),requestStreamLimitBytes:A.ai().int().min(ah.AJ).max(0x40000000).default(0x1000000)}).default({requestTimeoutMs:6e5,idleTimeoutMs:3e4,requestStreamLimitBytes:0x1000000}),al=A.re({port:A.ai().int().min(1).max(65535),mcpBearerToken:A.Yj().min(16),mcpBearerClientId:aj.default("zlooks-admin-client"),browserApi:ak}),am=A.ai().int().positive().max(0x7fffffff),an=A.re({public:A.re({port:A.ai().int().min(1).max(65535),origin:A.OZ()}),browserApi:ak,rsc:A.re({assetMountPath:A.eu("/_hile/rsc/assets"),csrfToken:A.Yj().min(16),render:A.re({timeoutMs:am,idleTimeoutMs:am,window:A.ai().int().positive()}),transfer:A.re({maxManifestBytes:A.ai().int().positive(),maxFileBytes:A.ai().int().positive(),maxTotalBytes:A.ai().int().positive(),maxArtifactFiles:A.ai().int().positive(),maxPathBytes:A.ai().int().positive(),maxPathDepth:A.ai().int().positive(),operationTimeoutMs:am}),discovery:A.re({pollIntervalMs:am,missingReconciliations:A.ai().int().positive(),snapshotConcurrency:A.ai().int().positive()})}),mcp:A.re({path:A.eu("/mcp"),pollIntervalMs:am,bearerToken:A.Yj().min(16),clientId:aj,scopes:A.PV([A.eu(n.SS)]),allowedHostnames:A.YO(A.Yj().trim().min(1)).min(1),allowedOriginHostnames:A.YO(A.Yj().trim().min(1)).min(1)})}),ao=a=>(0,ai.ol)(al.parse(a));function ap(a){let b=al.parse(a.gateway),c=af(a.publicHost),d=new URL(c.origin).hostname;return(0,ai.ol)(an.parse({public:{port:b.port,origin:c.origin},browserApi:b.browserApi,rsc:{assetMountPath:"/_hile/rsc/assets",csrfToken:(0,m.createHmac)("sha256",b.mcpBearerToken).update("zlooks:gateway-rsc-csrf:v1").digest("base64url"),render:{timeoutMs:3e4,idleTimeoutMs:1e4,window:8},transfer:{maxManifestBytes:1048576,maxFileBytes:0x4000000,maxTotalBytes:0x10000000,maxArtifactFiles:4096,maxPathBytes:1024,maxPathDepth:32,operationTimeoutMs:3e4},discovery:{pollIntervalMs:500,missingReconciliations:3,snapshotConcurrency:16}},mcp:{path:"/mcp",pollIntervalMs:2e3,bearerToken:b.mcpBearerToken,clientId:b.mcpBearerClientId,scopes:[n.SS],allowedHostnames:[d],allowedOriginHostnames:[d]}}))}let aq=(0,d.Pt)("zlooks.gateway.config",async a=>{let b=await (0,d.oV)(ac.A),c=await (0,ag.ud)(b,{sources:{gateway:{topic:(0,ag.fG)("gateway"),parse:ao},publicHost:{topic:(0,ag.fG)("public-host"),parse:af}},compose:ap});return a(()=>c.close()),c});var ar=c(814),as=c(58513),at=c(99449);let au=(0,d.Pt)("zlooks.gateway.runtime",async a=>{let[b,c,,,f]=await Promise.all([(0,d.oV)(ac.A),(0,d.oV)(aq),(0,d.oV)(ar.A),(0,d.oV)(as.A),(0,d.oV)(at.A)]),g=new ab(b,c.snapshot(),{logger:f});await g.start();let h=(0,e.f)(c.current,async a=>{a&&await g.update(a)},{onError:a=>f.error({err:a,event:"gateway.config-update.failed"},"Gateway configuration update failed")});return a(async()=>{h(),await g.close()}),g})},99449:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(37922),e=c(46527);let f=(0,d.Pt)("zlooks.gateway.logger",async a=>{let{logger:b,teardown:c}=(0,e.h)({level:"info",pretty:!1});return a(c),b})}};
@@ -1 +1 @@
1
- globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/w55YE0-qK8ciae9Uak7Yw/_buildManifest.js","static/w55YE0-qK8ciae9Uak7Yw/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-4b774bd4ebe1a8a1.js","static/chunks/387b3e19-762a698cb31f79da.js","static/chunks/550-e8abc67c7a1edf41.js","static/chunks/main-app-98c326aff6aa17c8.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
1
+ globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],lowPriorityFiles:["static/NWYibQLh8WDO94H6va18W/_buildManifest.js","static/NWYibQLh8WDO94H6va18W/_ssgManifest.js"],rootMainFiles:["static/chunks/webpack-4b774bd4ebe1a8a1.js","static/chunks/387b3e19-762a698cb31f79da.js","static/chunks/550-e8abc67c7a1edf41.js","static/chunks/main-app-98c326aff6aa17c8.js"],rootMainFilesTree:{},pages:{"/_app":[]}};
@@ -1 +1 @@
1
- <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-4b774bd4ebe1a8a1.js"/><script src="/_next/static/chunks/387b3e19-762a698cb31f79da.js" async=""></script><script src="/_next/static/chunks/550-e8abc67c7a1edf41.js" async=""></script><script src="/_next/static/chunks/main-app-98c326aff6aa17c8.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-4b774bd4ebe1a8a1.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[41990,[],\"\"]\n3:I[79660,[],\"\"]\n4:I[89711,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[89711,[],\"ViewportBoundary\"]\na:I[89711,[],\"MetadataBoundary\"]\nc:I[59806,[],\"default\",1]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,\"$7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"w55YE0-qK8ciae9Uak7Yw\"}\n7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\nb:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-4b774bd4ebe1a8a1.js"/><script src="/_next/static/chunks/387b3e19-762a698cb31f79da.js" async=""></script><script src="/_next/static/chunks/550-e8abc67c7a1edf41.js" async=""></script><script src="/_next/static/chunks/main-app-98c326aff6aa17c8.js" async=""></script><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-4b774bd4ebe1a8a1.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[41990,[],\"\"]\n3:I[79660,[],\"\"]\n4:I[89711,[],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[89711,[],\"ViewportBoundary\"]\na:I[89711,[],\"MetadataBoundary\"]\nc:I[59806,[],\"default\",1]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,\"$7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"NWYibQLh8WDO94H6va18W\"}\n7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\nb:[]\n"])</script></body></html>
@@ -1 +1 @@
1
- {"node":{},"edge":{},"encryptionKey":"PpkHvUbwWBxbdd3VVDD8tVgqmphMSDNHRDeuqf+DyuM="}
1
+ {"node":{},"edge":{},"encryptionKey":"N0WYkOcSmppziZRTcxXz9mC1PGj4tjl5GgPE94/pyvw="}
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{17030:e=>{e.exports={page:"landing-frame_page__8Eln3",backgroundVideo:"landing-frame_backgroundVideo__8hHRt",headerWrap:"landing-frame_headerWrap__ZsC2J",content:"landing-frame_content__0gHs1",legal:"landing-frame_legal__sJCNe",header:"landing-frame_header__HX8s8",brand:"landing-frame_brand__hrKJt",brandMark:"landing-frame_brandMark__zjCCK",brandLogo:"landing-frame_brandLogo__Vx5Mx",navigation:"landing-frame_navigation__kcn9E",actions:"landing-frame_actions__lRf4u",themeControl:"landing-frame_themeControl___Chhn",registrationIcon:"landing-frame_registrationIcon__eOCiT"}},42722:(e,r,a)=>{"use strict";a.d(r,{default:()=>ez});var t=a(78892),n=a(10005),o=a(39786),i=a(48247),s=a(25280);function l(e){if(null!==e&&"object"==typeof e&&!Object.isFrozen(e))for(let r of(Object.freeze(e),Object.values(e)))l(r);return e}let c=l({token:{colorPrimary:"#1677ff",borderRadius:10,motion:!0,fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif"}});function d(e){return e&&"object"==typeof e&&Object.hasOwn(e,"default")?e.default:e}let u="zlooks.theme",h="zlooks:theme-change",g="default";function p(){return{mode:(0,s.useSyncExternalStore)(v,f,x),setMode:y}}function m(e){return"dark"===e||"light"===e||"default"===e?e:"default"}function f(){try{let e=window.localStorage.getItem(u);null!==e&&(g=m(e))}catch{}return g}function x(){return"default"}function y(e){if(m(e)!==e)throw TypeError(`Unsupported Zlooks theme mode: ${String(e)}`);g=e;try{window.localStorage.setItem(u,e)}catch{}window.dispatchEvent(new CustomEvent(h,{detail:e}))}function v(e){let r=r=>{g=m(r.detail),e()},a=r=>{r.key===u&&(g=m(r.newValue),e())};return window.addEventListener(h,r),window.addEventListener("storage",a),()=>{window.removeEventListener(h,r),window.removeEventListener("storage",a)}}a(91784);let b=d(n.A),j=d(o.Ay),k=d(i.A);function _({children:e,theme:r}){let a=p(),{resolvedMode:n,resolvedTheme:o}=w(r??a.mode);return(0,t.jsx)(j,{button:{autoInsertSpace:!1},theme:o,children:(0,t.jsx)(b,{children:(0,t.jsx)("div",{className:"zlooks-ui-theme","data-zlooks-theme":n,children:e})})})}function w(e){let r=function(e){let[r,a]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{if(!e)return;let r=window.matchMedia("(prefers-color-scheme: dark)"),t=()=>a(r.matches);return t(),r.addEventListener("change",t),()=>r.removeEventListener("change",t)},[e]),r}("default"===e),a="default"===e?r?"dark":"light":e,t=(0,s.useMemo)(()=>({...c,algorithm:"dark"===a?k.darkAlgorithm:k.defaultAlgorithm,cssVar:{key:`zlooks-${a}`},hashed:!1,zeroRuntime:!0}),[a]);return{resolvedMode:a,resolvedTheme:t}}var z=a(1280),S=a(89501),E=a(17564),C=a(52052),A=a(44884),N=a(52205),P=a(15155),R=a(22770),M=a(56164);let W=d(a(33623).A),O=d(a(44659).A),T=(0,s.createContext)(void 0);function L({children:e,initialContext:r}){return(0,t.jsx)(T,{value:r,children:e})}function Y(){let e=(0,s.useContext)(T);if(!e)throw Error("ZlooksShellProvider is required");return e}let I=l({Button:{textActiveBg:"transparent",textHoverBg:"transparent"}});var H=a(16422),q=a(98249);H.Yj().regex(/^[a-z][a-z0-9]*(?:\.[a-z][a-z0-9]*)+$/),H.Yj().min(1).max(64).regex(/^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/);let B=H.Yj().min(1).max(2048).regex(/^\/(?!\/)[^?#\s]*$/),U=q.w$({offset:!0}),$=H.Yj().regex(/^[A-Za-z][A-Za-z0-9_.-]{0,127}$/),K=H.k5(["GET","POST","PUT","PATCH","DELETE"]),Z=H.Yj().max(8192),V=H.re({code:H.eu(0),data:H.L5().refine(e=>void 0!==e)}).readonly(),F=H.re({code:H.ai().int().safe().refine(e=>0!==e),error:H.Yj().trim().min(1).max(500)}).readonly(),D=H.KC([V,F]);H.re({accept:Z.optional(),"accept-language":Z.optional(),"content-type":Z.optional(),"if-modified-since":Z.optional(),"if-none-match":Z.optional(),origin:H.Yj().max(2048).optional(),range:Z.optional(),referer:Z.optional()}).readonly();let X=H.KC([H.Yj().max(512),H.YO(H.Yj().max(512)).max(20).readonly()]),G=H.g1(H.Yj().regex(/^[a-z][a-zA-Z0-9_-]{0,63}$/),X).refine(e=>Object.keys(e).length<=20,{message:"Browser API query has too many fields"}).readonly();H.g1($,H.Yj().min(1).max(4096)).refine(e=>Object.keys(e).length<=8,{message:"Browser API context has too many cookies"}).readonly(),H.re({ipAddress:H.KC([H.uX(),H.ug()]),userAgent:H.Yj().trim().min(1).max(1024).nullable()}).readonly(),H.re({method:K,path:B,origin:H.Yj().max(2048).optional(),clientKey:H.Yj().regex(/^[a-f0-9]{64}$/),query:G.optional(),body:H.L5().optional()}).readonly();let J=H.gM("action",[H.re({action:H.eu("set"),name:$,value:H.Yj().min(1).max(4096),expiresAt:U}),H.re({action:H.eu("clear"),name:$})]).readonly(),Q=H.YO(J).max(8).refine(e=>new Set(e.map(e=>e.name)).size===e.length,"Cookie effects must target unique names").readonly();H.re({status:H.ai().int().min(200).max(599).refine(e=>e<300||e>=400),body:D,cookieEffects:Q.optional()}).superRefine((e,r)=>{let a=e.status>=200&&e.status<300;0===e.body.code!==a&&r.addIssue({code:"custom",message:"HTTP status and browser API response code disagree",path:["body","code"]})}).readonly();class ee extends Error{constructor(e,r,a,t){super(r,t),this.reported=!0,this.code=e,this.status=a,this.name="RequestError"}}async function er(e,r,a,t,n={}){var o,i;let s,l,c,d=(o=n.errorMessage,(s=o?.trim())&&s.length<=500?s:"请求失败,请稍后重试");try{l=await r(a,t)}catch(r){if(et(r))throw r;return ea(e,new ee(-1,d,void 0,{cause:r}))}try{i=await l.json(),c=D.parse(i)}catch(r){if(et(r))throw r;return ea(e,new ee(-1,d,l.status,{cause:r}))}if(0!==c.code)return ea(e,new ee(c.code,c.error,l.status));if(!l.ok)return ea(e,new ee(-1,d,l.status));try{return n.parse?await n.parse(c.data):c.data}catch(r){if(et(r))throw r;return ea(e,new ee(-1,d,l.status,{cause:r}))}}function ea(e,r){return e.error(r.message),Promise.reject(r)}function et(e){return null!==e&&"object"==typeof e&&"name"in e&&"AbortError"===e.name}let en=d(z.A),eo=d(o.Ay),ei=d(S.A),es=d(E.A),el=d(C.A),ec=d(A.A),ed=d(N.A),eu=d(P.A),eh=d(R.A);function eg({className:e,classNames:r={},style:a,size:n="middle",shape:o="round",variant:i="compact",onNavigate:l,onLogout:c}){var d,u;let h=Y().user,[g,p]=(0,s.useState)(!1),[m,f]=(0,s.useState)(!1),{message:x,modal:y}=O(),v=em("zlooks-user-access-trigger",e,r.trigger),b=em("zlooks-user-access-avatar",r.avatar),j=em("zlooks-user-access-label",r.label),k="avatar"===i,_=(d=n,(u=k)&&"small"===d?28:u&&"large"===d?48:u?40:"small"===d?20:"large"===d?28:24),w=k?"circle":o,z=k?"circle":"square",S=k?{height:_,minWidth:_,padding:0,width:_,...a}:a;async function E(e,r){try{await c(e),r(),p(!1)}catch(e){e instanceof ee||x.error("退出登录失败")}}function C(e,r,a){l&&(0,M.a)(e)&&(e.preventDefault(),a(),l(r))}return"unavailable"===h.status?(0,t.jsx)(ep,{children:(0,t.jsx)(W,{"aria-label":"账户服务暂不可用",className:v,disabled:!0,shape:w,size:n,style:S,type:"text",children:(0,t.jsxs)(eu,{align:"center",size:6,children:[(0,t.jsx)(en,{className:b,shape:z,size:_,style:{background:"var(--ant-color-fill-secondary)",border:k?"none":void 0,borderRadius:k?"50%":9,boxShadow:k?"none":void 0,color:"var(--ant-color-text-tertiary)",fontSize:12,fontWeight:750},children:"Z"}),"compact"===i?(0,t.jsx)(eh,{type:"secondary",children:"暂不可用"}):null]})})}):"authenticated"===h.status?(0,t.jsx)(ep,{children:(0,t.jsx)(ed,{arrow:!1,destroyOnHidden:!0,onOpenChange:p,open:g,placement:"bottomRight",styles:{container:{border:"1px solid var(--ant-color-border-secondary)",borderRadius:16,boxShadow:"0 18px 48px rgb(15 23 42 / 14%)",overflow:"hidden",padding:0},content:{maxWidth:"calc(100vw - 32px)",width:280}},trigger:"click",content:(0,t.jsxs)(el,{"aria-label":"账户信息",className:r.popup,role:"dialog",style:{background:"var(--ant-color-bg-elevated)"},vertical:!0,children:[(0,t.jsxs)(el,{align:"center",gap:12,style:{background:"linear-gradient(color-mix(in srgb, var(--ant-color-fill-quaternary) 48%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--ant-color-fill-quaternary) 48%, transparent) 1px, transparent 1px), var(--ant-color-bg-elevated)",backgroundSize:"28px 28px",padding:16},children:[(0,t.jsx)(en,{className:b,shape:"square",size:44,src:h.user.avatarUrl,style:{background:"var(--ant-color-text)",borderRadius:12,color:"var(--ant-color-bg-container)",fontSize:16,fontWeight:700},children:h.user.avatarText}),(0,t.jsxs)(el,{style:{flex:1,minWidth:0},vertical:!0,children:[(0,t.jsx)(eh,{strong:!0,ellipsis:!0,style:{fontSize:15,lineHeight:1.4},children:h.user.label}),h.user.secondary?(0,t.jsx)(eh,{ellipsis:{tooltip:h.user.secondary},style:{display:"block"},type:"secondary",children:h.user.secondary}):null]}),(0,t.jsx)("span",{"aria-label":"已登录",role:"status",style:{background:"var(--ant-color-success)",borderRadius:999,boxShadow:"0 0 0 3px var(--ant-color-success-bg)",flex:"0 0 auto",height:7,width:7}})]}),(0,t.jsx)(ei,{style:{margin:0}}),(0,t.jsxs)(el,{gap:2,style:{padding:8},vertical:!0,children:[(0,t.jsx)(W,{block:!0,href:h.accountHref,size:"large",style:{fontWeight:600,height:44,paddingInline:12},type:"text",onClick:e=>C(e,h.accountHref,()=>p(!1)),children:(0,t.jsxs)(el,{justify:"space-between",style:{width:"100%"},children:[(0,t.jsx)("span",{children:"个人资料"}),(0,t.jsx)(eh,{"aria-hidden":"true",type:"secondary",children:"→"})]})}),(0,t.jsx)(W,{block:!0,danger:!0,size:"large",style:{height:44,justifyContent:"flex-start",paddingInline:12},type:"text",onClick:()=>{var e;return e=h.logoutHref,void y.confirm({title:"确认退出登录?",content:"退出后,需要重新登录才能访问个人账户。",okText:"退出登录",okButtonProps:{danger:!0},cancelText:"取消",onOk(r){E(e,r)}})},children:"退出登录"})]})]}),children:(0,t.jsx)(W,{"aria-expanded":g,"aria-haspopup":"dialog","aria-label":`打开${h.user.label}的账户信息`,className:v,shape:w,size:n,style:S,type:"text",children:(0,t.jsxs)(eu,{align:"center",size:6,children:[(0,t.jsx)(en,{className:b,shape:z,size:_,src:h.user.avatarUrl,style:{background:k?"var(--ant-color-fill-secondary)":"var(--ant-color-text)",border:k?"none":void 0,borderRadius:k?"50%":9,boxShadow:k?"none":void 0,color:k?"var(--ant-color-text)":"var(--ant-color-bg-container)",fontSize:12,fontWeight:700},children:h.user.avatarText}),"compact"===i?(0,t.jsx)(eh,{className:j,ellipsis:!0,style:{fontSize:13,fontWeight:650,maxWidth:120},children:h.user.label}):null]})})})}):(0,t.jsxs)(ep,{children:[(0,t.jsx)(W,{"aria-expanded":m,"aria-haspopup":"dialog","aria-label":"登录",className:v,shape:w,size:n,style:S,type:"text",onClick:()=>f(!0),children:(0,t.jsxs)(eu,{align:"center",size:6,children:[(0,t.jsx)(en,{className:b,shape:z,size:_,style:{background:"var(--ant-color-primary-bg)",border:k?"none":"1px solid var(--ant-color-primary-border)",borderRadius:k?"50%":9,boxShadow:k?"none":void 0,color:"var(--ant-color-primary)",fontSize:12,fontWeight:750},children:"Z"}),"compact"===i?(0,t.jsx)(eh,{className:j,style:{fontSize:13,fontWeight:650},children:"登录"}):null]})}),(0,t.jsx)(ec,{centered:!0,destroyOnHidden:!0,footer:null,open:m,rootClassName:em("zlooks-user-access-modal",r.popup),styles:{body:{paddingTop:4},container:{border:"1px solid var(--ant-color-border-secondary)",borderRadius:22,boxShadow:"0 28px 80px rgb(15 23 42 / 18%)",overflow:"hidden",padding:24},header:{marginBottom:22}},title:(0,t.jsxs)(eu,{align:"center",size:"middle",children:[(0,t.jsx)(en,{shape:"square",size:44,style:{background:"var(--ant-color-text)",borderRadius:12,color:"var(--ant-color-bg-container)",fontWeight:750},children:"Z"}),(0,t.jsxs)(el,{vertical:!0,children:[(0,t.jsx)(eh,{strong:!0,style:{fontSize:17},children:"欢迎回来"}),(0,t.jsx)(eh,{type:"secondary",children:"选择一种方式继续"})]})]}),width:480,onCancel:()=>f(!1),children:(0,t.jsxs)(el,{gap:12,vertical:!0,children:[0===h.loginMethods.length?(0,t.jsx)(es,{description:"暂时无法登录,请稍后再试",image:es.PRESENTED_IMAGE_SIMPLE,style:{paddingBlock:24}}):h.loginMethods.map((e,r)=>(0,t.jsx)(W,{block:!0,href:e.href,onClick:r=>C(r,e.href,()=>f(!1)),style:{height:"auto",minHeight:72,padding:"10px 14px",textAlign:"left"},children:(0,t.jsxs)(el,{align:"center",gap:14,justify:"space-between",style:{width:"100%"},children:[(0,t.jsxs)(el,{align:"center",gap:12,style:{minWidth:0},children:[(0,t.jsx)(en,{shape:"square",size:40,style:{background:"var(--ant-color-primary-bg)",borderRadius:11,color:"var(--ant-color-primary)",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:11,fontWeight:700},children:String(r+1).padStart(2,"0")}),(0,t.jsxs)(el,{style:{minWidth:0},vertical:!0,children:[(0,t.jsx)(eh,{strong:!0,children:e.label}),(0,t.jsx)(eh,{ellipsis:!0,type:"secondary",children:"继续访问你的个人空间"})]})]}),(0,t.jsx)(eh,{"aria-hidden":"true",style:{color:"var(--ant-color-primary)"},children:"→"})]})},e.id)),(0,t.jsx)(eh,{style:{fontSize:12,marginTop:6,textAlign:"center"},type:"secondary",children:"登录信息仅用于识别你的账户"})]})})]})}function ep({children:e}){let{mode:r}=p(),{resolvedMode:a,resolvedTheme:n}=w(r),o=(0,s.useMemo)(()=>({...n,cssVar:{key:`zlooks-user-access-${a}`},components:{...n.components,Button:{...n.components?.Button,...I.Button}}}),[a,n]);return(0,t.jsx)(eo,{theme:o,children:e})}function em(...e){return e.filter(Boolean).join(" ")}let ef=(0,s.createContext)(void 0);function ex({children:e,initialConfig:r}){return(0,t.jsx)(ef,{value:r,children:e})}var ey=a(73094),ev=a(11787),eb=a.n(ev),ej=a(62220),ek=a(17030),e_=a.n(ek);function ew({src:e}){let r=(0,s.useRef)(null),[a,n]=(0,s.useState)(!1);return((0,s.useEffect)(()=>{let e=r.current;if(!e)return;let a=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>{a.matches?e.pause():e.play().catch(()=>void 0)};return t(),a.addEventListener("change",t),()=>a.removeEventListener("change",t)},[]),!e||a)?null:(0,t.jsx)("video",{"aria-hidden":"true",autoPlay:!0,className:e_().backgroundVideo,loop:!0,muted:!0,onError:()=>n(!0),playsInline:!0,preload:"metadata",ref:r,src:e})}function ez({children:e,shell:r,site:a}){return(0,t.jsx)(_,{children:(0,t.jsx)(L,{initialContext:r,children:(0,t.jsx)(ex,{initialConfig:a,children:(0,t.jsx)(eS,{children:e})})})})}function eS({children:e}){let r,a=(r=Y(),(0,s.useMemo)(()=>[{key:"gateway:home",label:"首页",href:"/",order:-1},...r.navigation].map(e=>({...e,active:"/"===e.href?"/"===r.pathname:r.pathname===e.href||r.pathname.startsWith(`${e.href}/`)})),[r])),n=function(){let e=(0,s.useContext)(ef);if(!e)throw Error("ZlooksSiteConfigProvider is required");return e}().value,o=n.identity.backgroundVideoUrl,i=function(){let{message:e}=O();return(0,s.useCallback)((r,a,t)=>er(e,fetch,r,a,t),[e])}(),l=(0,ej.useRouter)();async function c(e){await i(e,{method:"POST",credentials:"same-origin"},{errorMessage:"退出登录失败"}),l.refresh()}return(0,t.jsxs)("div",{className:e_().page,children:[(0,t.jsx)(ew,{src:o},o??"none"),(0,t.jsx)("div",{className:e_().headerWrap,children:(0,t.jsxs)("header",{className:e_().header,children:[(0,t.jsxs)(eb(),{className:e_().brand,href:n.identity.homeHref,children:[n.identity.logoUrl?(0,t.jsx)("img",{alt:"",className:e_().brandLogo,src:n.identity.logoUrl}):(0,t.jsx)("span",{className:e_().brandMark,"aria-hidden":"true",children:"Z"}),(0,t.jsx)("span",{children:n.identity.name})]}),(0,t.jsx)("nav",{"aria-label":"主导航",className:e_().navigation,children:a.map(e=>(0,t.jsx)(eb(),{"aria-current":e.active?"page":void 0,href:e.href,prefetch:!1,children:e.label},e.key))}),(0,t.jsxs)("div",{className:e_().actions,children:[(0,t.jsx)(eE,{}),(0,t.jsx)(eg,{shape:"round",size:"small",variant:"avatar",onLogout:c,onNavigate:e=>l.push(e)})]})]})}),(0,t.jsx)("main",{className:e_().content,children:e}),(0,t.jsxs)("aside",{"aria-label":"网站备案与版权",className:e_().legal,children:[n.legal.registrations.map(e=>{let r=(0,t.jsxs)(t.Fragment,{children:[e.iconUrl?(0,t.jsx)("img",{alt:"",className:e_().registrationIcon,src:e.iconUrl}):null,e.number]});return e.verificationUrl?e.verificationUrl.startsWith("/")?(0,t.jsx)(eb(),{href:e.verificationUrl,children:r},e.id):(0,t.jsx)("a",{href:e.verificationUrl,rel:"noreferrer",target:"_blank",children:r},e.id):(0,t.jsx)("span",{children:r},e.id)}),n.legal.copyright?(0,t.jsx)("small",{children:n.legal.copyright}):null]})]})}function eE(){let{mode:e,setMode:r}=p(),[a,n]=(0,s.useState)("light");(0,s.useEffect)(()=>{let e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>n(e.matches?"dark":"light");return r(),e.addEventListener("change",r),()=>e.removeEventListener("change",r)},[]);let o="default"===e?a:e;return(0,t.jsx)(ey.Ay,{"aria-label":`当前为${"dark"===o?"深色":"浅色"}主题,点击切换`,className:e_().themeControl??"","data-zlooks-theme-control":!0,icon:(0,t.jsx)("span",{"aria-hidden":"true",children:"dark"===o?"☾":"☀"}),onClick:()=>r("dark"===o?"light":"dark"),shape:"circle",size:"small"})}},56164:(e,r,a)=>{"use strict";function t(e){return!e.defaultPrevented&&0===e.button&&!e.altKey&&!e.ctrlKey&&!e.metaKey&&!e.shiftKey}a.d(r,{a:()=>t})},60586:(e,r,a)=>{"use strict";a.d(r,{default:()=>s});var t=a(78892),n=a(73094),o=a(56164),i=a(62220);function s({href:e,onClick:r,...a}){let l=(0,i.useRouter)();return(0,t.jsx)(n.Ay,{...a,href:e,onClick:function(a){r?.(a),(0,o.a)(a)&&(a.preventDefault(),l.push(e))}})}},84736:e=>{e.exports={landing:"page_landing__vDqfd",hero:"page_hero__SKW6o",haloCopy:"page_haloCopy__dOkqi",haloSide:"page_haloSide__fXPB5",primaryActions:"page_primaryActions__hw9X7",action:"page_action__5pSuV",haloTopics:"page_haloTopics__SO9Gp"}},90393:(e,r,a)=>{Promise.resolve().then(a.bind(a,75469)),Promise.resolve().then(a.bind(a,42722)),Promise.resolve().then(a.bind(a,60586)),Promise.resolve().then(a.t.bind(a,84736,23))},91784:()=>{}},e=>{e.O(0,[757,469,608,131,550,358],()=>e(e.s=90393)),_N_E=e.O()}]);