@zlooks.cn/gateway-server 1.0.3 → 1.0.5
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.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/[pluginId]/[[...path]]/page.js +1 -1
- package/.next/server/app/[pluginId]/[[...path]]/page.js.nft.json +1 -1
- package/.next/server/app/[pluginId]/[[...path]]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page.js +1 -1
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/shell/navigation/route.js +1 -1
- package/.next/server/app/api/shell/navigation/route.js.nft.json +1 -1
- package/.next/server/app/page.js +238 -238
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/chunks/964.js +1 -1
- package/.next/server/chunks/991.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{288-a59115f31341e242.js → 996-077fc2adb823b371.js} +66 -66
- package/.next/static/chunks/app/page-8ee7b33b33cd79ee.js +1 -0
- package/.next/trace +22 -22
- package/.next/trace-build +1 -1
- package/dist/runtime/gateway-runtime.d.ts +3 -0
- package/dist/runtime/gateway-runtime.d.ts.map +1 -1
- package/dist/runtime/gateway-runtime.js +19 -0
- package/dist/runtime/gateway-runtime.js.map +1 -1
- package/dist/runtime/mcp-gateway-runtime.d.ts.map +1 -1
- package/dist/runtime/mcp-gateway-runtime.js +5 -0
- package/dist/runtime/mcp-gateway-runtime.js.map +1 -1
- package/dist/runtime/public-asset-catalog.d.ts +18 -0
- package/dist/runtime/public-asset-catalog.d.ts.map +1 -0
- package/dist/runtime/public-asset-catalog.js +30 -0
- package/dist/runtime/public-asset-catalog.js.map +1 -0
- package/dist/runtime/public-asset-discovery.d.ts +20 -0
- package/dist/runtime/public-asset-discovery.d.ts.map +1 -0
- package/dist/runtime/public-asset-discovery.js +85 -0
- package/dist/runtime/public-asset-discovery.js.map +1 -0
- package/dist/runtime/public-asset-proxy.d.ts +16 -0
- package/dist/runtime/public-asset-proxy.d.ts.map +1 -0
- package/dist/runtime/public-asset-proxy.js +127 -0
- package/dist/runtime/public-asset-proxy.js.map +1 -0
- package/package.json +5 -3
- package/.next/server/chunks/775.js +0 -1
- package/.next/static/chunks/app/page-92e8fba15a05dc80.js +0 -1
- /package/.next/static/{fP_us8WRl3Z6nv9W8oU-4 → AMEG7Dldd9-Zc_B7WKNxM}/_buildManifest.js +0 -0
- /package/.next/static/{fP_us8WRl3Z6nv9W8oU-4 → AMEG7Dldd9-Zc_B7WKNxM}/_ssgManifest.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
exports.id=775,exports.ids=[775],exports.modules={1996:()=>{},2515:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(2963),e=c(75295),f=c(52897),g=c(92041);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})},8076:()=>{},15474:()=>{},21902:(a,b,c)=>{"use strict";c.d(b,{B0:()=>e,rt:()=>d.rt,sL:()=>d.sL});var d=c(87903);let e=Object.freeze({invalidJson:2001,gatewayUnavailable:2002})},27695:(a,b,c)=>{"use strict";c.d(b,{A:()=>f});var d=c(2963),e=c(72123);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})},36928:(a,b,c)=>{"use strict";c.d(b,{WA:()=>A,bE:()=>y,hT:()=>j,qM:()=>z,qe:()=>k,t1:()=>i});var d=c(73136),e=c(69347),f=c(87056),g=c(41309);let h="cn.zlooks.global.config.server",i=`${h}:site-presentation`,j=`${h}:site-profile`,k="__zlooks_global_config",l=f.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),m=f.Yj().trim().min(1).max(160),n=f.Yj().min(1).max(2048).regex(/^\/(?!\/)[^\s]*$/),o=f.OZ().max(2048).refine(a=>{let b=new d.URL(a).protocol;return"http:"===b||"https:"===b}),p=f.gM("external",[f.re({id:l,label:m,href:n,external:f.eu(!1)}),f.re({id:l,label:m,href:o,external:f.eu(!0)})]),q=f.KC([n,o]).optional(),r=f.KC([n,o]).nullable().optional(),s=f.KC([n,o]).optional(),t=a=>new Set(a.map(a=>a.id)).size===a.length,u=f.re({identity:f.re({name:m,homeHref:n,backgroundVideoUrl:r,logoUrl:q,faviconUrl:q,description:f.Yj().trim().min(1).max(500).optional()}),linkGroups:f.YO(f.re({id:l,label:m,links:f.YO(p).max(32)})).max(16),legal:f.re({copyright:f.Yj().trim().min(1).max(320).optional(),registrations:f.YO(f.re({id:l,kind:f.k5(["icp","public-security","other"]),number:f.Yj().trim().min(1).max(320),verificationUrl:s,iconUrl:q})).max(8).refine(t,{message:"Registration IDs must be unique"})})}),v=f.re({schemaVersion:f.eu(2),revision:f.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:u,updatedAt:g.w$({offset:!0}),updatedBy:f.Yj().trim().min(1).max(256)});f.re({expectedRevision:f.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:u}),f.re({changeRequest:f.Yj().trim().min(1).max(2e3)});let w=f.re({profile:f.re({displayName:m,avatarUrl:q,headline:f.Yj().trim().min(1).max(240),biography:f.Yj().trim().min(1).max(2e3)}),topics:f.YO(f.re({id:l,name:m,summary:f.Yj().trim().min(1).max(500),href:s})).max(32).refine(t,{message:"Topic IDs must be unique"}),featuredLinks:f.YO(p).max(16).refine(t,{message:"Featured link IDs must be unique"})}),x=f.re({schemaVersion:f.eu(1),revision:f.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:w,updatedAt:g.w$({offset:!0}),updatedBy:f.Yj().trim().min(1).max(256)});function y(a){return(0,e.ol)(v.parse(a))}function z(a){return(0,e.ol)(x.parse(a))}function A(a){return JSON.stringify(y(a))}f.re({expectedRevision:f.ai().int().min(0).max(Number.MAX_SAFE_INTEGER),value:w})},38828:(a,b,c)=>{"use strict";c.d(b,{A:()=>ah});var d=c(2963),e=c(45797),f=c(46699),g=c(13634),h=c(87903),i=c(77598);class j{#a;#b;#c;reconcile(a,b){let c=new Map;for(let b of a){let{payload:a}=b,d=c.get(a.providerId)??[];d.push(b),c.set(a.providerId,d)}let d=[...c.entries()].map(([a,b])=>({providerId:a,snapshots:b,representative:b[0]?.payload,compatible:1===new Set(b.map(({payload:a})=>{var b;let c,d;return c=(b=a).routes.map(a=>({kind:"exact"in a?"exact":"prefix",path:"exact"in a?a.exact:a.prefix,methods:[...a.methods].sort(),forwardCookieNames:[...a.forwardCookieNames].sort()})).sort((a,b)=>JSON.stringify(a).localeCompare(JSON.stringify(b))),d={providerId:b.providerId,namespace:b.namespace,operation:b.operation,routes:c,writableCookieNames:[...b.writableCookieNames].sort(),errors:b.errors},(0,i.createHash)("sha256").update(JSON.stringify(d)).digest("hex")})).size})),e=new Set(d.filter(({compatible:a,representative:b})=>!a||function(a){for(let b=0;b<a.routes.length;b+=1){let c=a.routes[b];if(c){for(let d of a.routes.slice(b+1))if(c.methods.some(a=>d.methods.includes(a))&&k(c,d))return!0}}return!1}(b)).map(({providerId:a})=>a)),f=new Set(d.map(({providerId:a})=>a));for(let a of this.#c.keys())f.has(a)||this.#c.delete(a);for(let a=0;a<d.length;a+=1){let b=d[a];if(b)for(let c of d.slice(a+1))((function(a,b){return a.routes.some(a=>b.routes.some(b=>a.methods.some(a=>b.methods.includes(a))&&k(a,b)))})(b.representative,c.representative)||function(a,b){return a.writableCookieNames.some(a=>b.writableCookieNames.includes(a))}(b.representative,c.representative))&&(e.add(b.providerId),e.add(c.providerId))}this.#a=d.filter(({providerId:a})=>!e.has(a)),this.#b=d.filter(({providerId:a})=>e.has(a))}resolve(a,b,c,d=0){if("string"!=typeof a)return{status:"none"};if(this.#b.some(({snapshots:c})=>c.some(({payload:c})=>l(c.routes,a,b))))return{status:"unavailable"};for(let e of this.#a){let{representative:f}=e,g=l(f.routes,a,b);if(!g)continue;let h=void 0===c?e.snapshots:e.snapshots.filter(({payload:a})=>c-d<Date.parse(a.lease.expiresAt));if(0===h.length)return{status:"unavailable"};let i=this.#c.get(e.providerId)??0,j=h[i%h.length];if(!j?.publishers[0])return{status:"unavailable"};return this.#c.set(e.providerId,(i+1)%h.length),{status:"available",provider:{providerId:f.providerId,namespace:f.namespace,operation:f.operation,forwardCookieNames:g.forwardCookieNames,writableCookieNames:f.writableCookieNames,address:j.publishers[0],errors:f.errors}}}return{status:"none"}}constructor(){this.#a=[],this.#b=[],this.#c=new Map}}function k(a,b){return"exact"in a&&"exact"in b?a.exact===b.exact:"exact"in a&&"prefix"in b?a.exact.startsWith(b.prefix):"prefix"in a&&"exact"in b?b.exact.startsWith(a.prefix):"prefix"in a&&"prefix"in b&&(a.prefix.startsWith(b.prefix)||b.prefix.startsWith(a.prefix))}function l(a,b,c){return a.find(a=>a.methods.includes(c)&&("exact"in a&&a.exact===b||"prefix"in a&&b.startsWith(a.prefix)))}class m{#d;#e;#f;#g;#h;#i;#j;#k;#l;#m;#n;#o;#p;constructor(a){this.options=a,this.#d=new j,this.#o=!1,this.#e=a.clock??(()=>new Date),this.#f=n(a.pollIntervalMs??1e3),this.#g=n(a.maxCatalogStaleMs??3e4),this.#h=n(a.maxLeaseMs??3e4),this.#i=function(a){if(!Number.isSafeInteger(a)||a<0)throw TypeError("Expected a non-negative integer");return a}(a.maxClockSkewMs??0)}start(){if(this.#o)return Promise.reject(Error("Browser API discovery is closed"));if(this.#j)return Promise.resolve();if(this.#k)return this.#k;let a=this.#q();return this.#k=a,a.finally(()=>{this.#k===a&&(this.#k=void 0)}).catch(()=>void 0),a}async #q(){try{await this.reconcileOnce()}catch(a){throw this.options.onError?.(a),a}if(this.#o)throw Error("Browser API discovery is closed");this.#j=setInterval(()=>{this.reconcileOnce().catch(a=>this.options.onError?.(a))},this.#f),this.#j.unref()}reconcileOnce(){if(this.#o)return Promise.reject(Error("Browser API discovery is closed"));if(this.#l)return this.#l;let a=this.#r();return this.#l=a,a.finally(()=>{this.#l===a&&(this.#l=void 0)}).catch(()=>void 0),a}resolve(a,b){let c=this.#e().getTime(),d=this.#d.resolve(a,b,c,this.#i);if("none"===d.status)return d;let e=this.#n;return void 0===e||c-e>this.#g?{status:"unavailable"}:d}close(){if(this.#p)return this.#p;if(this.#o)return Promise.resolve();let a=this.#s();return this.#p=a,a.finally(()=>{this.#p===a&&(this.#p=void 0)})}async #s(){this.#o=!0,this.#j&&(clearInterval(this.#j),this.#j=void 0),this.#m?.abort(Error("Browser API discovery is closed")),await this.#l?.catch(()=>void 0)}async #r(){let a=this.#e(),b=new AbortController;this.#m=b;try{let c=await this.options.application.listRegistryTopicSnapshots(h.zB,{signal:b.signal});if(this.#o)throw Error("Browser API discovery is closed");if(c.length>256)throw Error("Browser API Provider snapshot limit exceeded");let d=[];for(let b of c)try{if(!b.hasData||b.retained||1!==b.publisherCount||1!==b.publishers.length)throw Error("Browser API Provider topic must have exactly one live dynamic publisher");let c=(0,h.iL)({topic:b.topic,payload:b.payload,publishers:b.publishers},a,this.#h,this.#i);d.push(c)}catch(a){this.options.onRejected?.(b.topic,a)}if(new Set(d.map(({payload:a})=>a.providerId)).size>64)throw Error("Browser API Provider limit exceeded");this.#d.reconcile(d,a),this.#n=a.getTime()}finally{this.#m===b&&(this.#m=void 0)}}}function n(a){if(!Number.isSafeInteger(a)||a<=0)throw TypeError("Expected a positive integer");return a}async function o(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 p=c(57975);function q(a){let b=a.rsc.discovery;return{pollIntervalMs:b.pollIntervalMs,missingReconciliations:b.missingReconciliations,snapshotConcurrency:b.snapshotConcurrency}}var r=c(70110),s=c(37044),t=c(93927),u=c(55976);class v{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,i.timingSafeEqual)(d,e))?{token:this.token,clientId:this.clientId,scopes:[u.SS]}:new Response("Unauthorized",{status:401,headers:{"www-authenticate":"Bearer"}})}}var w=c(69350);class x{#t;#u;constructor(a,b,c){this.application=a,this.config=b,this.logger=c}get middleware(){let a=this.#u;if(!a)throw Error("MCP gateway is not ready");return a.middleware}inspect(){let a=this.#t;if(!a)throw Error("MCP gateway is not ready");return a.inspect()}async start(){if(this.#t)throw Error("MCP gateway is already mounted");try{let a=(0,t.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,r.r)({source:a,executionContext:a=>(0,w.eC)({requestId:(0,i.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. 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.",startup:"allow-empty",invocationSecurity:{mode:"trusted-internal"},onError:a=>this.logger.error({err:a,event:"mcp.gateway.failed"},"MCP gateway failed")});this.#t=b;let c=new v(this.config.bearerToken,this.config.clientId);this.#u=(0,s.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.#u,b=this.#t;await o([a?async()=>{await a.close(),this.#u===a&&(this.#u=void 0)}:void 0,b?async()=>{await b.close(),this.#t===b&&(this.#t=void 0)}:void 0],"MCP gateway cleanup failed")}}class y{#v;#p;#w;#x;constructor(a,b){this.config=a,this.mcp=b,this.#v=0,this.#p=!1}async use(a){if(this.#p)throw Error("Gateway runtime state is closing");this.#v+=1;try{return await a()}finally{this.#v-=1,0===this.#v&&this.#x?.()}}close(a){return this.#p=!0,this.#w??=this.#y(a).catch(a=>{throw this.#w=void 0,a}),this.#w}async #y(a){this.#v>0&&await this.#z(a),await this.mcp.close()}async #z(a){a?.aborted||await new Promise(b=>{let c=()=>{a?.removeEventListener("abort",c),this.#x=void 0,b()};this.#x=c,a?.addEventListener("abort",c,{once:!0})})}}class z{constructor(a){this.deployments=a}canDiscover(a){return this.#A(a)}canRender(a){return this.#A(a)}canInvoke(a){return this.#A(a)}#A(a){let b=this.deployments.getActive(a.pluginId);return b?.buildId===a.buildId}}var A=c(24744),B=c(20086),C=c(76740),D=c(4e3);let E=new Map;class F{#B;#C;#D;constructor(a,b,c){this.readConfig=b,this.artifacts=new B.ui,this.deployments=new B.hv,this.#D=!0;const d=b().rsc;this.locator=(0,B.d5)(this.deployments,async b=>(0,C.$C)(a,b.namespace)),this.#B=new D.nR({context:(0,w.eC)({}),application:a,artifacts:this.artifacts,deployments:this.deployments,runtime:A.fr,pollIntervalMs:d.discovery.pollIntervalMs,missingReconciliations:d.discovery.missingReconciliations,snapshotConcurrency:d.discovery.snapshotConcurrency,generationHighWater:E,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,D.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.#C=(0,B.Vh)((0,B.AG)(this.artifacts,(0,B.V9)(d.assetMountPath)))}async start(){await this.#B.start()}async close(){await o([()=>this.#B.close(),this.#D?()=>{this.#C(),this.#D=!1}:void 0],"RSC discovery cleanup failed")}}function G(a,b,c,d){let e=(0,B._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,B.W4)({gateway:new B.ku({locator:b.locator,authorize:(a,b)=>c.canInvoke(a)&&e({pluginId:a.pluginId,buildId:a.buildId,actionId:a.referenceId,input:{}},b)})});(0,B.Kq)(a,{asset:(0,B.XH)({catalog:b.artifacts,mountPath:d().rsc.assetMountPath}),serverFunction:async(a,b)=>(a.requestContext={headers:a.headers},f(a,b))})}var H=c(94530),I=c(21902);let J=(0,H.G)({enableTypes:["json"],jsonLimit:"32kb",onError:(a,b)=>b.throw(400,"Invalid JSON request")});function K(a,b,c,d,e){a.use(async(a,f)=>{var g,j;let k=c.resolve(a.path,a.method);if("none"===k.status)return f();if(O(a))return;if("unavailable"===k.status){a.status=503,a.body=(0,h.rt)(I.B0.gatewayUnavailable,"服务暂时不可用");return}let{provider:l}=k;if("GET"!==a.method&&!await L(a)||O(a))return;let m=function(a){var b;let c=a.get("origin"),d=Object.keys(a.query).length>0?a.query:void 0,e=a.request.body,f={method:a.method,path:a.path,clientKey:(b=a.ip,(0,i.createHash)("sha256").update(b).digest("hex")),...c?{origin:c}:{},...d?{query:d}:{},..."GET"!==a.method&&void 0!==e?{body:e}:{}};try{return{ok:!0,value:(0,h.b8)(f)}}catch{return{ok:!1}}}(a),n=function(a,b){let c=Object.fromEntries(b.flatMap(b=>{let c=a.cookies.get(b);return c?[[b,c]]:[]}));try{return{ok:!0,value:(0,h.VR)(c)}}catch{return{ok:!1}}}(a,l.forwardCookieNames);if(!m.ok||!n.ok){a.status=400,a.body=(0,h.rt)(l.errors.invalidRequest.code,l.errors.invalidRequest.message);return}try{let c,e=await M(b,l,m.value,n.value,(c=((g=a).get("user-agent")||"").trim().slice(0,1024),h.vH.parse({ipAddress:g.ip,userAgent:c||null})),a);if(O(a))return;(function(a,b){for(let c of a.cookieEffects??[])if(!b.writableCookieNames.includes(c.name))throw Error("Browser API Provider attempted an undeclared cookie effect")})(e,l),function(a,b,c){let d=b.cookieEffects??[];if(0===d.length)return;let e="https:"===new URL(c).protocol;for(let b of(a.cookies.secure=e,d))a.cookies.set(b.name,"set"===b.action?b.value:"",{httpOnly:!0,sameSite:"lax",secure:e,path:"/",overwrite:!0,expires:new Date("set"===b.action?b.expiresAt:0)})}(a,e,d()),a.status=e.status,a.body=e.body}catch(b){if(j=a,b instanceof P||O(j))return;e.error({err:b,event:"browser-api.micro-proxy.failed",providerId:l.providerId,method:a.method,path:a.path},"Browser API Micro proxy failed"),a.status=502,a.body=(0,h.rt)(l.errors.unavailable.code,l.errors.unavailable.message)}})}async function L(a){try{return await J(a,async()=>void 0),!0}catch{if(O(a))return!1;return a.status=400,a.body=(0,h.rt)(I.B0.invalidJson,"请求内容不是有效的 JSON"),!1}}async function M(a,b,c,d,e,f){var g;let h,i,j=(g=f,h=new AbortController,i=()=>{h.signal.aborted||h.abort(new P)},g.req.once("aborted",i),g.res.once("close",i),O(g)&&i(),{controller:h,unbind:()=>{g.req.off("aborted",i),g.res.off("close",i)}});try{if(j.controller.signal.aborted)throw j.controller.signal.reason;return await N(a,b,c,d,e,j.controller.signal)}catch(a){if(j.controller.signal.aborted)throw j.controller.signal.reason??a;throw a}finally{j.unbind()}}async function N(a,b,c,d,e,f){let g,i={...Object.keys(d).length>0?{[h.Ih]:d}:{},[h.E6]:e};for await(let d of(await a.streamPeer(b.address,b.operation,c,{context:(0,w.eC)(i),timeout:5e3,idleTimeout:5e3,window:1,...f?{signal:f}:{}}))){if(g)throw Error("Browser API Provider returned more than one response frame");g=(0,h.FE)(d)}if(!g)throw Error("Browser API Provider returned no response frame");return g}function O(a){return a.req.aborted||a.res.destroyed||a.res.writableEnded}class P extends Error{constructor(){super("Public Browser API request was aborted"),this.name="PublicRequestAbortedError"}}var Q=c(83099);class R{#E;#F;#G;#H;#I;#J;#K;#L;#M;constructor(a,b,c,d){this.#E=a,this.#G=b,this.#H=d.logger;const e=d.createHost??((a,b)=>new f.Ay({port:a,cwd:b})),h=d.createRsc??((a,b)=>new F(a,b,d.logger)),i=d.createMcp??((a,b)=>new x(a,b,d.logger)),j=d.mountRsc??G,k=d.mountBrowserApi??K,l=d.createBrowserApi??(a=>new m({application:a,onRejected:(a,b)=>this.#H.warn({err:b,event:"browser-api.discovery.rejected",topic:a},"Browser API Provider announcement rejected"),onError:a=>this.#H.error({err:a,event:"browser-api.discovery.poll-failed"},"Browser API Provider discovery poll failed")}));this.#F=e(b.public.port,c),this.rsc=h(a,()=>this.config),this.#I=l(a),this.rscAccessPolicy=d.createRscAccessPolicy?.(this.rsc)??new z(this.rsc.deployments),this.#J=(0,g.Z)({debounceMs:d.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,p.isDeepStrictEqual)(c.rsc.transfer,b.rsc.transfer))throw Error("gateway.rsc.transfer requires a process restart");if(!(0,p.isDeepStrictEqual)(q(c),q(b)))throw Error("gateway.rsc.discovery runtime settings require a process restart");let d=i(a,c.mcp);return await d.start(),new y(c,d)},dispose:(a,b)=>a.close(b.signal),onError:(a,b)=>{this.#H.error({err:a,event:"gateway.runtime.reload-failed",stage:b.stage},"Gateway runtime reload failed")}}),(d.mountRscBrowserContext??Q.rL)(this.#F),j(this.#F,this.rsc,this.rscAccessPolicy,()=>this.config),this.#F.use((a,b)=>this.#N(c=>c.mcp.middleware(a,b))),k(this.#F,a,this.#I,()=>this.config.public.origin,this.#H)}get config(){return this.#J?.current()?.config??this.#G}async start(){try{await this.#O().update(this.#G),await this.#I.start(),await this.rsc.start()}catch(a){throw await this.close().catch(a=>{this.#H.error({err:a,event:"gateway.runtime.rollback-failed"},"Gateway runtime rollback failed")}),a}}async startHost(){if(!this.#O().current())throw Error("Gateway runtime is not ready");if(this.#K||this.#M)throw Error("Gateway public Host is already started or starting");let a=(async()=>{this.#M=await this.#F.start()})();this.#K=a;try{await a}finally{this.#K===a&&(this.#K=void 0)}}stopHost(){let a=this.#L;if(a)return a;let b=this.#P();return this.#L=b,b.finally(()=>{this.#L===b&&(this.#L=void 0)}).catch(()=>void 0),b}async #P(){await this.#K;let a=this.#M;a&&(await a(),this.#M===a&&(this.#M=void 0))}async update(a){await this.#O().update(a)}async withCurrent(a){return this.#N(b=>a({application:this.#E,config:b.config,logger:this.#H,rsc:this.rsc,rscAccessPolicy:this.rscAccessPolicy}))}async close(){await o([()=>this.stopHost(),()=>this.#O().stop(),()=>this.#I.close(),()=>this.rsc.close()],"Gateway runtime cleanup failed")}async #N(a){let b=this.#O().current();if(!b)throw Error("Gateway runtime is not ready");return b.use(()=>a(b))}#O(){let a=this.#J;if(!a)throw Error("Gateway runtime reloader is not initialized");return a}}var S=c(2515),T=c(73136),U=c(87056);let V=U.re({origin:U.OZ().refine(a=>{let b=new T.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 W(a){return V.parse(a)}var X=c(52897),Y=c(69347);let Z=U.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),$=U.re({port:U.ai().int().min(1).max(65535),mcpBearerToken:U.Yj().min(16),mcpBearerClientId:Z.default("zlooks-admin-client")}),_=U.ai().int().positive().max(0x7fffffff),aa=U.re({public:U.re({port:U.ai().int().min(1).max(65535),origin:U.OZ()}),rsc:U.re({assetMountPath:U.eu("/_hile/rsc/assets"),csrfToken:U.Yj().min(16),render:U.re({timeoutMs:_,idleTimeoutMs:_,window:U.ai().int().positive()}),transfer:U.re({maxManifestBytes:U.ai().int().positive(),maxFileBytes:U.ai().int().positive(),maxTotalBytes:U.ai().int().positive(),maxArtifactFiles:U.ai().int().positive(),maxPathBytes:U.ai().int().positive(),maxPathDepth:U.ai().int().positive(),operationTimeoutMs:_}),discovery:U.re({pollIntervalMs:_,missingReconciliations:U.ai().int().positive(),snapshotConcurrency:U.ai().int().positive()})}),mcp:U.re({path:U.eu("/mcp"),pollIntervalMs:_,bearerToken:U.Yj().min(16),clientId:Z,scopes:U.PV([U.eu(u.SS)]),allowedHostnames:U.YO(U.Yj().trim().min(1)).min(1),allowedOriginHostnames:U.YO(U.Yj().trim().min(1)).min(1)})}),ab=a=>(0,Y.ol)($.parse(a));function ac(a){let b=$.parse(a.gateway),c=W(a.publicHost),d=new URL(c.origin).hostname;return(0,Y.ol)(aa.parse({public:{port:b.port,origin:c.origin},rsc:{assetMountPath:"/_hile/rsc/assets",csrfToken:(0,i.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:[u.SS],allowedHostnames:[d],allowedOriginHostnames:[d]}}))}let ad=(0,d.Pt)("zlooks.gateway.config",async a=>{let b=await (0,d.oV)(S.A),c=await (0,X.ud)(b,{sources:{gateway:{topic:(0,X.fG)("gateway"),parse:ab},publicHost:{topic:(0,X.fG)("public-host"),parse:W}},compose:ac});return a(()=>c.close()),c});var ae=c(92700),af=c(54619),ag=c(27695);let ah=(0,d.Pt)("zlooks.gateway.runtime",async a=>{let[b,c,,,f]=await Promise.all([(0,d.oV)(S.A),(0,d.oV)(ad),(0,d.oV)(ae.A),(0,d.oV)(af.A),(0,d.oV)(ag.A)]),g=new R(b,c.snapshot(),process.cwd(),{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})},43811:()=>{},45625:(a,b,c)=>{"use strict";c.d(b,{G:()=>g,P:()=>f});var d=c(36928);class e{#Q;#R;#S;#T;#w;constructor(a,b,c,d,e={}){this.application=a,this.topic=b,this.parse=c,this.description=d,this.#Q=e.initialTimeoutMs??1e4,this.#R=e.onError??(()=>void 0)}async start(){let a,b;if(this.#T)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.#Q);try{this.#T=await this.application.subscribe(this.topic,c=>{try{this.#S=this.parse(c),a()}catch(a){this.#U(a),this.#S||b(a)}}),await c}catch(a){throw await this.close().catch(()=>void 0),a}finally{clearTimeout(d)}}snapshot(){let a=this.#S;if(!a)throw Error(`${this.description} snapshot is not ready`);return a}close(){let a=this.#w;if(a)return a;let b=this.#T;if(!b)return Promise.resolve();let c=Promise.resolve(b()).then(()=>{this.#T===b&&(this.#T=void 0)}).catch(a=>{throw this.#w=void 0,a});return this.#w=c,c}#U(a){try{Promise.resolve(this.#R(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)}}},52897:(a,b,c)=>{"use strict";c.d(b,{PE:()=>h,pj:()=>i,fG:()=>j,ud:()=>m});var d=c(87056),e=c(55863);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(45797),l=c(99908);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{}}},54619:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(2963),e=c(45625),f=c(2515),g=c(27695);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})},69347:(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"},83099:(a,b,c)=>{"use strict";c.d(b,{gV:()=>h,rL:()=>g});var d=c(69350),e=c(87903);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})}},84469: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=84469,a.exports=b},87903:(a,b,c)=>{"use strict";c.d(b,{Dy:()=>E,E6:()=>h,FE:()=>N,Ih:()=>g,RW:()=>t,VR:()=>M,b8:()=>L,iL:()=>K,lu:()=>J,pF:()=>G,rt:()=>I,sL:()=>H,vH:()=>D,zB:()=>f});var d=c(87056),e=c(41309);let f="registry:zlooks.cn/browser-api/providers/",g="zlooks.browser.cookies",h="zlooks.browser.client",i=d.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),j=d.Yj().regex(/^[a-z][a-z0-9]*(?:\.[a-z][a-z0-9]*)+$/),k=d.Yj().min(1).max(2048).regex(/^\/(?!\/)[^?#\s]*$/),l=d.Yj().min(5).max(2048).regex(/^\/api\/(?!\/)[^?#\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.YO(n).max(8).refine(a=>new Set(a).size===a.length,"Cookie names must be unique").readonly(),q=d.re({code:d.ai().int().safe().refine(a=>0!==a),message:d.Yj().trim().min(1).max(500)}).readonly(),r=d.re({code:d.eu(0),data:d.L5().refine(a=>void 0!==a)}).readonly(),s=d.re({code:d.ai().int().safe().refine(a=>0!==a),error:d.Yj().trim().min(1).max(500)}).readonly(),t=d.KC([r,s]),u=d.re({exact:l,methods:d.YO(o).min(1).max(5).refine(a=>new Set(a).size===a.length,"Methods must be unique").readonly(),forwardCookieNames:p}).readonly(),v=d.re({prefix:l.refine(a=>a.endsWith("/"),"Route prefix must end with /"),methods:d.YO(o).min(1).max(5).refine(a=>new Set(a).size===a.length,"Methods must be unique").readonly(),forwardCookieNames:p}).readonly(),w=d.KC([u,v]),x=d.re({issuedAt:m,expiresAt:m,sequence:d.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).refine(a=>Date.parse(a.expiresAt)>Date.parse(a.issuedAt),{message:"Browser API Provider lease must expire after it is issued"}).readonly(),y=d.re({protocol:d.eu("zlooks.browser-api.provider"),providerId:i,instanceId:i,namespace:j,operation:d.eu("/browser/dispatch"),routes:d.YO(w).min(1).max(64).refine(a=>!a.some((b,c)=>a.slice(c+1).some(a=>{var c,d;return c=b,d=a,!!c.methods.some(a=>d.methods.includes(a))&&("exact"in c&&"exact"in d?c.exact===d.exact:"prefix"in c&&"prefix"in d?c.prefix.startsWith(d.prefix)||d.prefix.startsWith(c.prefix):"exact"in c&&"prefix"in d?c.exact.startsWith(d.prefix):"prefix"in c&&"exact"in d&&d.exact.startsWith(c.prefix))})),"Provider routes must not overlap for the same HTTP method").readonly(),writableCookieNames:p,errors:d.re({invalidRequest:q,unavailable:q}).readonly(),lease:x}).readonly(),z=d.re({topic:d.Yj().min(1).max(512),payload:y,publishers:d.YO(d.re({host:d.Yj().trim().min(1).max(253),port:d.ai().int().min(1).max(65535)}).readonly()).length(1).readonly()}).readonly(),A=d.KC([d.Yj().max(512),d.YO(d.Yj().max(512)).max(20).readonly()]),B=d.g1(d.Yj().regex(/^[a-z][a-zA-Z0-9_-]{0,63}$/),A).refine(a=>Object.keys(a).length<=20,{message:"Browser API query has too many fields"}).readonly(),C=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(),D=d.re({ipAddress:d.KC([d.uX(),d.ug()]),userAgent:d.Yj().trim().min(1).max(1024).nullable()}).readonly(),E=d.re({method:o,path:k,origin:d.Yj().max(2048).optional(),clientKey:d.Yj().regex(/^[a-f0-9]{64}$/),query:B.optional(),body:d.L5().optional()}).readonly(),F=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(),G=d.re({status:d.ai().int().min(200).max(599).refine(a=>a<300||a>=400),body:t,cookieEffects:d.YO(F).max(8).refine(a=>new Set(a.map(a=>a.name)).size===a.length,"Cookie effects must target unique names").readonly().optional()}).superRefine((a,b)=>{let c=a.status>=200&&a.status<300;!J(a.body)!==c&&b.addIssue({code:"custom",message:"HTTP status and browser API response code disagree",path:["body","code"]})}).readonly();function H(a){return r.parse({code:0,data:a}),Object.freeze({code:0,data:a})}function I(a,b){return s.parse({code:a,error:b})}function J(a){return 0!==a.code}function K(a,b=new Date,c=3e4,d=0){var e,g;let h=z.parse(a),j=function(a,b=new Date,c=3e4,d=0){O(c,"Browser API Provider maximum lease"),O(d,"Browser API Provider clock skew");let e=y.parse(a),f=Date.parse(e.lease.issuedAt),g=Date.parse(e.lease.expiresAt);if(g-f>c)throw Error("Browser API Provider lease is too long");if(b.getTime()+d<f)throw Error("Browser API Provider lease is not active yet");if(b.getTime()-d>=g)throw Error("Browser API Provider lease has expired");return e}(h.payload,b,c,d),k=(e=j.providerId,g=j.instanceId,`${f}${i.parse(e)}/${i.parse(g)}`);if(h.topic!==k)throw Error("Browser API Provider topic does not match identity");return{topic:h.topic,payload:j,publishers:h.publishers}}function L(a){return E.parse(a)}function M(a){return C.parse(a)}function N(a){return G.parse(a)}function O(a,b){if(!Number.isSafeInteger(a)||a<0)throw TypeError(`${b} must be a non-negative safe integer`)}},92029: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=92029,a.exports=b},92700:(a,b,c)=>{"use strict";c.d(b,{A:()=>h});var d=c(2963),e=c(45625),f=c(2515),g=c(27695);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})}};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[974],{3241:(e,r,a)=>{Promise.resolve().then(a.bind(a,34138)),Promise.resolve().then(a.bind(a,30382)),Promise.resolve().then(a.bind(a,77128)),Promise.resolve().then(a.t.bind(a,74718,23))},8176: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"}},30382:(e,r,a)=>{"use strict";a.d(r,{default:()=>ey});var t=a(49660),n=a(22538),i=a(94292),o=a(80032),s=a(25840);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 d=l({token:{colorPrimary:"#1677ff",borderRadius:10,motion:!0,fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif"}}),c="zlooks.theme",u="zlooks:theme-change",h="default";function m(){return{mode:(0,s.useSyncExternalStore)(y,g,x),setMode:f}}function p(e){return"dark"===e||"light"===e||"default"===e?e:"default"}function g(){try{let e=window.localStorage.getItem(c);null!==e&&(h=p(e))}catch{}return h}function x(){return"default"}function f(e){if(p(e)!==e)throw TypeError(`Unsupported Zlooks theme mode: ${String(e)}`);h=e;try{window.localStorage.setItem(c,e)}catch{}window.dispatchEvent(new CustomEvent(u,{detail:e}))}function y(e){let r=r=>{h=p(r.detail),e()},a=r=>{r.key===c&&(h=p(r.newValue),e())};return window.addEventListener(u,r),window.addEventListener("storage",a),()=>{window.removeEventListener(u,r),window.removeEventListener("storage",a)}}function v({children:e,theme:r}){let a=m(),{resolvedMode:o,resolvedTheme:s}=b(r??a.mode);return(0,t.jsx)(n.Ay,{button:{autoInsertSpace:!1},theme:s,children:(0,t.jsx)(i.A,{children:(0,t.jsx)("div",{className:"zlooks-ui-theme","data-zlooks-theme":o,children:e})})})}function b(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)(()=>({...d,algorithm:"dark"===a?o.A.darkAlgorithm:o.A.defaultAlgorithm,cssVar:{key:`zlooks-${a}`},hashed:!1,zeroRuntime:!0}),[a]);return{resolvedMode:a,resolvedTheme:t}}a(85206);var j=a(71124),k=a(28875),A=a(70642),w=a(18353),_=a(59091),z=a(33076),S=a(29397),C=a(50009),E=a(85293),N=a(79294);let T=l({Button:{textActiveBg:"transparent",textHoverBg:"transparent"}});var P=a(52491),W=a(71363);let R=P.Yj().regex(/^[a-z][a-z0-9._-]{0,127}$/),M=P.Yj().regex(/^[a-z][a-z0-9]*(?:\.[a-z][a-z0-9]*)+$/),Y=P.Yj().min(1).max(2048).regex(/^\/(?!\/)[^?#\s]*$/),O=P.Yj().min(5).max(2048).regex(/^\/api\/(?!\/)[^?#\s]*$/),I=W.w$({offset:!0}),q=P.Yj().regex(/^[A-Za-z][A-Za-z0-9_-]{0,127}$/),L=P.k5(["GET","POST","PUT","PATCH","DELETE"]),H=P.YO(q).max(8).refine(e=>new Set(e).size===e.length,"Cookie names must be unique").readonly(),B=P.re({code:P.ai().int().safe().refine(e=>0!==e),message:P.Yj().trim().min(1).max(500)}).readonly(),U=P.re({code:P.eu(0),data:P.L5().refine(e=>void 0!==e)}).readonly(),$=P.re({code:P.ai().int().safe().refine(e=>0!==e),error:P.Yj().trim().min(1).max(500)}).readonly(),K=P.KC([U,$]),Z=P.re({exact:O,methods:P.YO(L).min(1).max(5).refine(e=>new Set(e).size===e.length,"Methods must be unique").readonly(),forwardCookieNames:H}).readonly(),V=P.re({prefix:O.refine(e=>e.endsWith("/"),"Route prefix must end with /"),methods:P.YO(L).min(1).max(5).refine(e=>new Set(e).size===e.length,"Methods must be unique").readonly(),forwardCookieNames:H}).readonly(),D=P.KC([Z,V]),F=P.re({issuedAt:I,expiresAt:I,sequence:P.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).refine(e=>Date.parse(e.expiresAt)>Date.parse(e.issuedAt),{message:"Browser API Provider lease must expire after it is issued"}).readonly(),X=P.re({protocol:P.eu("zlooks.browser-api.provider"),providerId:R,instanceId:R,namespace:M,operation:P.eu("/browser/dispatch"),routes:P.YO(D).min(1).max(64).refine(e=>!e.some((r,a)=>e.slice(a+1).some(e=>{var a,t;return a=r,t=e,!!a.methods.some(e=>t.methods.includes(e))&&("exact"in a&&"exact"in t?a.exact===t.exact:"prefix"in a&&"prefix"in t?a.prefix.startsWith(t.prefix)||t.prefix.startsWith(a.prefix):"exact"in a&&"prefix"in t?a.exact.startsWith(t.prefix):"prefix"in a&&"exact"in t&&t.exact.startsWith(a.prefix))})),"Provider routes must not overlap for the same HTTP method").readonly(),writableCookieNames:H,errors:P.re({invalidRequest:B,unavailable:B}).readonly(),lease:F}).readonly();P.re({topic:P.Yj().min(1).max(512),payload:X,publishers:P.YO(P.re({host:P.Yj().trim().min(1).max(253),port:P.ai().int().min(1).max(65535)}).readonly()).length(1).readonly()}).readonly();let G=P.KC([P.Yj().max(512),P.YO(P.Yj().max(512)).max(20).readonly()]),J=P.g1(P.Yj().regex(/^[a-z][a-zA-Z0-9_-]{0,63}$/),G).refine(e=>Object.keys(e).length<=20,{message:"Browser API query has too many fields"}).readonly();P.g1(q,P.Yj().min(1).max(4096)).refine(e=>Object.keys(e).length<=8,{message:"Browser API context has too many cookies"}).readonly(),P.re({ipAddress:P.KC([P.uX(),P.ug()]),userAgent:P.Yj().trim().min(1).max(1024).nullable()}).readonly(),P.re({method:L,path:Y,origin:P.Yj().max(2048).optional(),clientKey:P.Yj().regex(/^[a-f0-9]{64}$/),query:J.optional(),body:P.L5().optional()}).readonly();let Q=P.gM("action",[P.re({action:P.eu("set"),name:q,value:P.Yj().min(1).max(4096),expiresAt:I}),P.re({action:P.eu("clear"),name:q})]).readonly();P.re({status:P.ai().int().min(200).max(599).refine(e=>e<300||e>=400),body:K,cookieEffects:P.YO(Q).max(8).refine(e=>new Set(e.map(e=>e.name)).size===e.length,"Cookie effects must target unique names").readonly().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 i,o;let s,l,d,c=(i=n.errorMessage,(s=i?.trim())&&s.length<=500?s:"请求失败,请稍后重试");try{l=await r(a,t)}catch(r){if(et(r))throw r;return ea(e,new ee(-1,c,void 0,{cause:r}))}try{o=await l.json(),d=K.parse(o)}catch(r){if(et(r))throw r;return ea(e,new ee(-1,c,l.status,{cause:r}))}if(0!==d.code)return ea(e,new ee(d.code,d.error,l.status));if(!l.ok)return ea(e,new ee(-1,c,l.status));try{return n.parse?await n.parse(d.data):d.data}catch(r){if(et(r))throw r;return ea(e,new ee(-1,c,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=(0,s.createContext)(void 0);function ei({children:e,initialContext:r}){return(0,t.jsx)(en,{value:r,children:e})}function eo({className:e,classNames:r={},style:a,size:n="middle",shape:o="round",variant:l="compact",onNavigate:d,onLogout:c}){var u,h;let m=el().user,[p,g]=(0,s.useState)(!1),[x,f]=(0,s.useState)(!1),{message:y,modal:v}=i.A.useApp(),b=ed("zlooks-user-access-trigger",e,r.trigger),T=ed("zlooks-user-access-avatar",r.avatar),P=ed("zlooks-user-access-label",r.label),W="avatar"===l,R=(u=n,(h=W)&&"small"===u?32:h&&"large"===u?48:h?40:"small"===u?20:"large"===u?28:24),M=W?"circle":o,Y=W?"circle":"square",O=W?{height:R,minWidth:R,padding:0,width:R,...a}:a;async function I(e,r){try{await c(e),r(),g(!1)}catch(e){e instanceof ee||y.error("退出登录失败")}}function q(e,r,a){d&&(0,N.a)(e)&&(e.preventDefault(),a(),d(r))}return"unavailable"===m.status?(0,t.jsx)(es,{children:(0,t.jsx)(j.Ay,{"aria-label":"账户服务暂不可用",className:b,disabled:!0,shape:M,size:n,style:O,type:"text",children:(0,t.jsxs)(k.A,{align:"center",size:6,children:[(0,t.jsx)(A.A,{className:T,shape:Y,size:R,style:{background:"var(--ant-color-fill-secondary)",border:W?"none":void 0,borderRadius:W?"50%":9,boxShadow:W?"none":void 0,color:"var(--ant-color-text-tertiary)",fontSize:12,fontWeight:750},children:"Z"}),"compact"===l?(0,t.jsx)(w.A.Text,{type:"secondary",children:"暂不可用"}):null]})})}):"authenticated"===m.status?(0,t.jsx)(es,{children:(0,t.jsx)(_.A,{arrow:!1,destroyOnHidden:!0,onOpenChange:g,open:p,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)(z.A,{"aria-label":"账户信息",className:r.popup,role:"dialog",style:{background:"var(--ant-color-bg-elevated)"},vertical:!0,children:[(0,t.jsxs)(z.A,{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)(A.A,{className:T,shape:"square",size:44,src:m.user.avatarUrl,style:{background:"var(--ant-color-text)",borderRadius:12,color:"var(--ant-color-bg-container)",fontSize:16,fontWeight:700},children:m.user.avatarText}),(0,t.jsxs)(z.A,{style:{flex:1,minWidth:0},vertical:!0,children:[(0,t.jsx)(w.A.Text,{strong:!0,ellipsis:!0,style:{fontSize:15,lineHeight:1.4},children:m.user.label}),m.user.secondary?(0,t.jsx)(w.A.Text,{ellipsis:{tooltip:m.user.secondary},style:{display:"block"},type:"secondary",children:m.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)(S.A,{style:{margin:0}}),(0,t.jsxs)(z.A,{gap:2,style:{padding:8},vertical:!0,children:[(0,t.jsx)(j.Ay,{block:!0,href:m.accountHref,size:"large",style:{fontWeight:600,height:44,paddingInline:12},type:"text",onClick:e=>q(e,m.accountHref,()=>g(!1)),children:(0,t.jsxs)(z.A,{justify:"space-between",style:{width:"100%"},children:[(0,t.jsx)("span",{children:"个人资料"}),(0,t.jsx)(w.A.Text,{"aria-hidden":"true",type:"secondary",children:"→"})]})}),(0,t.jsx)(j.Ay,{block:!0,danger:!0,size:"large",style:{height:44,justifyContent:"flex-start",paddingInline:12},type:"text",onClick:()=>{var e;return e=m.logoutHref,void v.confirm({title:"确认退出登录?",content:"退出后,需要重新登录才能访问个人账户。",okText:"退出登录",okButtonProps:{danger:!0},cancelText:"取消",onOk(r){I(e,r)}})},children:"退出登录"})]})]}),children:(0,t.jsx)(j.Ay,{"aria-expanded":p,"aria-haspopup":"dialog","aria-label":`打开${m.user.label}的账户信息`,className:b,shape:M,size:n,style:O,type:"text",children:(0,t.jsxs)(k.A,{align:"center",size:6,children:[(0,t.jsx)(A.A,{className:T,shape:Y,size:R,src:m.user.avatarUrl,style:{background:W?"var(--ant-color-fill-secondary)":"var(--ant-color-text)",border:W?"none":void 0,borderRadius:W?"50%":9,boxShadow:W?"none":void 0,color:W?"var(--ant-color-text)":"var(--ant-color-bg-container)",fontSize:12,fontWeight:700},children:m.user.avatarText}),"compact"===l?(0,t.jsx)(w.A.Text,{className:P,ellipsis:!0,style:{fontSize:13,fontWeight:650,maxWidth:120},children:m.user.label}):null]})})})}):(0,t.jsxs)(es,{children:[(0,t.jsx)(j.Ay,{"aria-expanded":x,"aria-haspopup":"dialog","aria-label":"登录",className:b,shape:M,size:n,style:O,type:"text",onClick:()=>f(!0),children:(0,t.jsxs)(k.A,{align:"center",size:6,children:[(0,t.jsx)(A.A,{className:T,shape:Y,size:R,style:{background:"var(--ant-color-primary-bg)",border:W?"none":"1px solid var(--ant-color-primary-border)",borderRadius:W?"50%":9,boxShadow:W?"none":void 0,color:"var(--ant-color-primary)",fontSize:12,fontWeight:750},children:"Z"}),"compact"===l?(0,t.jsx)(w.A.Text,{className:P,style:{fontSize:13,fontWeight:650},children:"登录"}):null]})}),(0,t.jsx)(C.A,{centered:!0,destroyOnHidden:!0,footer:null,open:x,rootClassName:ed("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)(k.A,{align:"center",size:"middle",children:[(0,t.jsx)(A.A,{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)(z.A,{vertical:!0,children:[(0,t.jsx)(w.A.Text,{strong:!0,style:{fontSize:17},children:"欢迎回来"}),(0,t.jsx)(w.A.Text,{type:"secondary",children:"选择一种方式继续"})]})]}),width:480,onCancel:()=>f(!1),children:(0,t.jsxs)(z.A,{gap:12,vertical:!0,children:[0===m.loginMethods.length?(0,t.jsx)(E.A,{description:"暂时无法登录,请稍后再试",image:E.A.PRESENTED_IMAGE_SIMPLE,style:{paddingBlock:24}}):m.loginMethods.map((e,r)=>(0,t.jsx)(j.Ay,{block:!0,href:e.href,onClick:r=>q(r,e.href,()=>f(!1)),style:{height:"auto",minHeight:72,padding:"10px 14px",textAlign:"left"},children:(0,t.jsxs)(z.A,{align:"center",gap:14,justify:"space-between",style:{width:"100%"},children:[(0,t.jsxs)(z.A,{align:"center",gap:12,style:{minWidth:0},children:[(0,t.jsx)(A.A,{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)(z.A,{style:{minWidth:0},vertical:!0,children:[(0,t.jsx)(w.A.Text,{strong:!0,children:e.label}),(0,t.jsx)(w.A.Text,{ellipsis:!0,type:"secondary",children:"继续访问你的个人空间"})]})]}),(0,t.jsx)(w.A.Text,{"aria-hidden":"true",style:{color:"var(--ant-color-primary)"},children:"→"})]})},e.id)),(0,t.jsx)(w.A.Text,{style:{fontSize:12,marginTop:6,textAlign:"center"},type:"secondary",children:"登录信息仅用于识别你的账户"})]})})]})}function es({children:e}){let{mode:r}=m(),{resolvedMode:a,resolvedTheme:i}=b(r),o=(0,s.useMemo)(()=>({...i,cssVar:{key:`zlooks-user-access-${a}`},components:{...i.components,Button:{...i.components?.Button,...T.Button}}}),[a,i]);return(0,t.jsx)(n.Ay,{theme:o,children:e})}function el(){let e=(0,s.useContext)(en);if(!e)throw Error("ZlooksShellProvider is required");return e}function ed(...e){return e.filter(Boolean).join(" ")}let ec=(0,s.createContext)(void 0);function eu({children:e,initialConfig:r}){return(0,t.jsx)(ec,{value:r,children:e})}var eh=a(12143),em=a.n(eh),ep=a(25872),eg=a(8176),ex=a.n(eg);function ef({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:ex().backgroundVideo,loop:!0,muted:!0,onError:()=>n(!0),playsInline:!0,preload:"metadata",ref:r,src:e})}function ey({children:e,shell:r,site:a}){return(0,t.jsx)(v,{children:(0,t.jsx)(ei,{initialContext:r,children:(0,t.jsx)(eu,{initialConfig:a,children:(0,t.jsx)(ev,{children:e})})})})}function ev({children:e}){let r,a=(r=el(),(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)(ec);if(!e)throw Error("ZlooksSiteConfigProvider is required");return e}().value,o=n.identity.backgroundVideoUrl,l=function(){let{message:e}=i.A.useApp();return(0,s.useCallback)((r,a,t)=>er(e,fetch,r,a,t),[e])}(),d=(0,ep.useRouter)();async function c(e){await l(e,{method:"POST",credentials:"same-origin"},{errorMessage:"退出登录失败"}),d.refresh()}return(0,t.jsxs)("div",{className:ex().page,children:[(0,t.jsx)(ef,{src:o},o??"none"),(0,t.jsx)("div",{className:ex().headerWrap,children:(0,t.jsxs)("header",{className:ex().header,children:[(0,t.jsxs)(em(),{className:ex().brand,href:n.identity.homeHref,children:[n.identity.logoUrl?(0,t.jsx)("img",{alt:"",className:ex().brandLogo,src:n.identity.logoUrl}):(0,t.jsx)("span",{className:ex().brandMark,"aria-hidden":"true",children:"Z"}),(0,t.jsx)("span",{children:n.identity.name})]}),(0,t.jsx)("nav",{"aria-label":"主导航",className:ex().navigation,children:a.map(e=>(0,t.jsx)(em(),{"aria-current":e.active?"page":void 0,href:e.href,children:e.label},e.key))}),(0,t.jsxs)("div",{className:ex().actions,children:[(0,t.jsx)(eb,{}),(0,t.jsx)(eo,{shape:"round",size:"middle",variant:"avatar",onLogout:c,onNavigate:e=>d.push(e)})]})]})}),(0,t.jsx)("main",{className:ex().content,children:e}),(0,t.jsxs)("aside",{"aria-label":"网站备案与版权",className:ex().legal,children:[n.legal.registrations.map(e=>{let r=(0,t.jsxs)(t.Fragment,{children:[e.iconUrl?(0,t.jsx)("img",{alt:"",className:ex().registrationIcon,src:e.iconUrl}):null,e.number]});return e.verificationUrl?e.verificationUrl.startsWith("/")?(0,t.jsx)(em(),{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 eb(){let{mode:e,setMode:r}=m(),[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 i="default"===e?a:e;return(0,t.jsx)(j.Ay,{"aria-label":`当前为${"dark"===i?"深色":"浅色"}主题,点击切换`,className:ex().themeControl??"","data-zlooks-theme-control":!0,icon:(0,t.jsx)("span",{"aria-hidden":"true",children:"dark"===i?"☾":"☀"}),onClick:()=>r("dark"===i?"light":"dark"),shape:"circle",size:"middle"})}},74718: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"}},77128:(e,r,a)=>{"use strict";a.d(r,{default:()=>s});var t=a(49660),n=a(71124),i=a(79294),o=a(25872);function s({href:e,onClick:r,...a}){let l=(0,o.useRouter)();return(0,t.jsx)(n.Ay,{...a,href:e,onClick:function(a){r?.(a),(0,i.a)(a)&&(a.preventDefault(),l.push(e))}})}},79294:(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})},85206:()=>{}},e=>{e.O(0,[565,507,288,11,128,358],()=>e(e.s=3241)),_N_E=e.O()}]);
|
|
File without changes
|
|
File without changes
|