@tensorix/metahub 0.1.11 → 0.2.0
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/dist/cli.js +21342 -17813
- package/dist/cli.js.map +76 -60
- package/dist/core/blobs-core.d.ts +106 -0
- package/dist/core/blobs-core.d.ts.map +1 -0
- package/dist/core/blobs.d.ts +100 -0
- package/dist/core/blobs.d.ts.map +1 -0
- package/dist/core/cache.d.ts +18 -1
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/compact.d.ts +4 -3
- package/dist/core/compact.d.ts.map +1 -1
- package/dist/core/config.d.ts +3 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/crdt.d.ts +25 -2
- package/dist/core/crdt.d.ts.map +1 -1
- package/dist/core/schema-init.d.ts +33 -2
- package/dist/core/schema-init.d.ts.map +1 -1
- package/dist/core/schema.d.ts +1 -1
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/sites-core.d.ts +35 -0
- package/dist/core/sites-core.d.ts.map +1 -1
- package/dist/core/sites.d.ts +4 -13
- package/dist/core/sites.d.ts.map +1 -1
- package/dist/core/sync/blob-routes.d.ts +12 -0
- package/dist/core/sync/blob-routes.d.ts.map +1 -0
- package/dist/core/sync/client.d.ts +2 -0
- package/dist/core/sync/client.d.ts.map +1 -1
- package/dist/core/sync/e2ee.d.ts +24 -0
- package/dist/core/sync/e2ee.d.ts.map +1 -0
- package/dist/core/sync/enroll.d.ts +21 -0
- package/dist/core/sync/enroll.d.ts.map +1 -0
- package/dist/core/sync/peers-routes.d.ts.map +1 -1
- package/dist/core/sync/peers.d.ts +75 -2
- package/dist/core/sync/peers.d.ts.map +1 -1
- package/dist/core/sync/publisher-lease.d.ts +8 -0
- package/dist/core/sync/publisher-lease.d.ts.map +1 -0
- package/dist/core/sync/routes.d.ts.map +1 -1
- package/dist/core/sync/server.d.ts +1 -0
- package/dist/core/sync/server.d.ts.map +1 -1
- package/dist/core/sync/sites-serve.d.ts.map +1 -1
- package/dist/core/sync/storage-s3-bun.d.ts +26 -0
- package/dist/core/sync/storage-s3-bun.d.ts.map +1 -0
- package/dist/core/sync/storage.d.ts +170 -0
- package/dist/core/sync/storage.d.ts.map +1 -0
- package/dist/db-worker.js +181 -65
- package/dist/index.js +16519 -13910
- package/dist/index.js.map +40 -28
- package/dist/sw.js +1 -1
- package/dist/webui/server/routes.d.ts.map +1 -1
- package/dist/webui.js +67 -61
- package/package.json +4 -1
package/dist/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function j(G,B,J,Y){let z=J.get("id"),Q=J.get("db"),X=Y??{},$=(Z)=>Z!=null?Number(Z):void 0;switch(`${G} ${B}`){case"GET /api/databases":return{op:"listDatabases",args:[]};case"POST /api/databases":return{op:"createDatabase",args:[X]};case"PATCH /api/database":return z?{op:"updateDatabase",args:[z,X]}:null;case"POST /api/database/duplicate":return z?{op:"duplicateDatabase",args:[z,X]}:null;case"DELETE /api/database":return z?{op:"deleteDatabase",args:[z]}:null;case"GET /api/database/activity":return Q?{op:"listDatabaseActivity",args:[Q,$(J.get("limit"))]}:null;case"GET /api/properties":return Q?{op:"listProperties",args:[Q]}:null;case"POST /api/properties":{let{db:Z,...V}=X;return Z?{op:"addProperty",args:[Z,V]}:null}case"PATCH /api/property":return z?{op:"updateProperty",args:[z,X]}:null;case"PATCH /api/property/width":return z?{op:"setPropertyWidth",args:[z,X.width]}:null;case"DELETE /api/property":return z?{op:"removeProperty",args:[z]}:null;case"GET /api/property/history":return z?{op:"listPropertyRevisions",args:[z]}:null;case"POST /api/property/revert":return z?{op:"revertProperty",args:[z,X.to]}:null;case"GET /api/records":return Q?{op:"listRecords",args:[Q,{sort:J.get("sort")??void 0,limit:$(J.get("limit"))}]}:null;case"POST /api/records":return Q?{op:"createRecord",args:[Q,X]}:null;case"GET /api/record":return z?{op:"getRecord",args:[z]}:null;case"PATCH /api/record":return z?{op:"updateRecord",args:[z,X]}:null;case"PATCH /api/record/order":{let{target:Z,where:V}=X;return z&&Z?{op:"moveRecord",args:[z,Z,V]}:null}case"GET /api/record/history":return z?{op:"listRecordRevisions",args:[z]}:null;case"GET /api/record/at":return z?{op:"recordAtVersion",args:[z,J.get("version")]}:null;case"GET /api/record/field-history":return z?{op:"recordFieldHistory",args:[z,J.get("prop")]}:null;case"POST /api/record/revert":return z?{op:"revertRecord",args:[z,X.to]}:null;case"DELETE /api/record":return z?{op:"deleteRecord",args:[z]}:null;case"GET /api/documents":return{op:"listDocuments",args:[{database_id:J.get("db")??void 0,parent_id:J.get("parent")??void 0}]};case"POST /api/documents":return{op:"createDocument",args:[X]};case"GET /api/document":return z?{op:"getDocument",args:[z]}:null;case"PATCH /api/document":{let{if_match:Z,...V}=X;return z?{op:"updateDocument",args:[z,V,Z]}:null}case"POST /api/document/duplicate":return z?{op:"duplicateDocument",args:[z,X]}:null;case"PATCH /api/document/move":{let{target:Z,where:V}=X;return z&&Z?{op:"moveDocument",args:[z,Z,V]}:null}case"GET /api/document/history":return z?{op:"listDocumentRevisions",args:[z]}:null;case"GET /api/document/at":return z?{op:"documentAtVersion",args:[z,J.get("version")]}:null;case"POST /api/document/revert":{let{to:Z,if_match:V}=X;return z&&Z?{op:"revertDocument",args:[z,Z,V]}:null}case"DELETE /api/document":return z?{op:"deleteDocument",args:[z]}:null;case"GET /api/nodes":return{op:"nodes",args:[]};case"GET /api/search":{let Z=J.get("q");return Z?{op:"search",args:[Z,$(J.get("limit"))]}:null}default:return null}}var D=globalThis,F=D.caches,O="__MH_SW_VERSION__",f=`mh-shell-${O}`,k="mh-api-v1",L="mh-wasm-v1",I=["/","/webui.js","/webui.css","/manifest.webmanifest","/db-worker.js","/mh-runtime.js"],K=3500,R=12000;function P(G){return G.ok&&G.headers.get("x-mh-unlock")==null}D.addEventListener("install",(G)=>{G.waitUntil((async()=>{try{let B=await F.open(f);await Promise.allSettled(I.map(async(J)=>{let Y=await fetch(J);if(P(Y))await B.put(J,Y)})),await D.skipWaiting()}catch(B){try{await(await F.open("mh-debug")).put("/__mh-sw-install-error",new Response(String(B?.stack??B)))}catch{}throw B}})())});D.addEventListener("activate",(G)=>{G.waitUntil((async()=>{for(let B of await F.keys())if(B.startsWith("mh-shell-")&&B!==f)await F.delete(B);await D.clients.claim()})())});function U(G,B){return new Promise((J,Y)=>{let z=setTimeout(()=>Y(Error("sw: network timeout")),B);fetch(G).then((Q)=>{clearTimeout(z),J(Q)},(Q)=>{clearTimeout(z),Y(Q)})})}async function N(G,B,J,Y){let z=await F.open(B),Q=Y??G;try{let X=await U(G,J);if(P(X))await z.put(Q,X.clone());return X}catch(X){let $=await z.match(Q);if($)return $;throw X}}function g(G,B,J){return new Promise((Y,z)=>{let Q=new MessageChannel,X=setTimeout(()=>z(Error("sw: rpc timeout")),R);Q.port1.onmessage=($)=>{clearTimeout(X),Y($.data)},G.postMessage({kind:"mh-rpc",op:B,args:J},[Q.port2])})}async function W(G,B,J){let Y=new Set,z=[];if(G.clientId){let Q=await D.clients.get(G.clientId);if(Q)z.push(Q)}for(let Q of await D.clients.matchAll({type:"window",includeUncontrolled:!0}))if(!z.some((X)=>X.id===Q.id))z.push(Q);for(let Q of z){if(Y.has(Q.id))continue;Y.add(Q.id);try{let X=await g(Q,B,J);if(!X.ok&&X.error?.code==="unavailable")continue;return X}catch{continue}}return null}var M={invalid_input:400,not_found:404,ambiguous:400,stale:409,conflict:409,auth:401,network:502};function A(G){if(G.ok)return new Response(JSON.stringify(G.result??null),{headers:{"content-type":"application/json","x-mh-source":"replica"}});let B=G.error?.code;return new Response(JSON.stringify({error:G.error?.message??"replica error",code:B}),{status:B?M[B]??400:502,headers:{"content-type":"application/json","x-mh-source":"replica"}})}async function H(G){let B=G.request,J=new URL(B.url),Y=null;if(B.method!=="GET"&&(B.headers.get("content-type")??"").includes("json"))Y=await B.clone().json().catch(()=>null);try{let z=B.method==="GET"?await U(B,K*2):await fetch(B);if(B.method==="GET"&&P(z))await(await F.open(k)).put(B,z.clone());return z}catch(z){let Q=j(B.method,J.pathname,J.searchParams,Y);if(Q){let X=await W(G,Q.op,Q.args);if(X)return A(X)}if(B.method==="GET"){let X=await(await F.open(k)).match(B);if(X)return X}throw z}}function S(G){let J=G.toLowerCase().indexOf("<head>");if(J>=0)return G.slice(0,J+6)+'<script src="/mh-runtime.js"></script>'+G.slice(J+6);return'<script src="/mh-runtime.js"></script>'+G}function _(G){let B=G.content_type.includes("text/html"),J=G.content??"",Y;if(G.encoding==="utf8")Y=B?S(J):J;else{let z=atob(J),Q=new Uint8Array(z.length);for(let X=0;X<z.length;X++)Q[X]=z.charCodeAt(X);Y=Q}return new Response(Y,{headers:{"content-type":G.content_type,"x-mh-source":"replica"}})}function T(G,B){let J=`${JSON.stringify(G)},${JSON.stringify(B)}`;return new Response(`<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script src="/mh-runtime.js"></script></head><body><p style="font:14px system-ui;color:#888;margin:2em">正在从本地副本加载…</p><script>__mhOfflineBootstrap(${J})</script></body></html>`,{headers:{"content-type":"text/html; charset=utf-8","x-mh-source":"bootstrap"}})}async function E(G){let B=G.request,J=new URL(B.url);try{return await U(B,K)}catch(Y){let z=J.pathname.slice(7);if(z==="")throw Y;let Q=z.indexOf("/");if(Q===-1)return Response.redirect(`${J.origin}/sites/${z}/`,301);let X=decodeURIComponent(z.slice(0,Q)),$=decodeURIComponent(z.slice(Q+1)),x=await W(G,"siteFile",[X,$]);if(x?.ok&&x.result)return _(x.result);if(x?.ok&&x.result==null)return new Response("not found (offline replica)",{status:404});if(B.mode==="navigate")return T(X,$);throw Y}}D.addEventListener("fetch",(G)=>{let B=G.request,J=new URL(B.url);if(J.origin!==D.location.origin)return;if(J.pathname.startsWith("/api/")){G.respondWith(H(G));return}if(B.method!=="GET")return;if(J.pathname.startsWith("/sites/")){G.respondWith(E(G));return}if(B.mode==="navigate"){if(J.pathname!=="/")return;G.respondWith(N(B,f,K,"/"));return}if(I.includes(J.pathname)||J.pathname.startsWith("/icons/")){G.respondWith(N(B,f,K));return}if(J.pathname==="/sqlite3.wasm"){G.respondWith((async()=>{let Y=await F.open(L),z=await Y.match(B);if(z)return z;let Q=await fetch(B);if(P(Q))await Y.put(B,Q.clone());return Q})());return}});
|
|
1
|
+
function H(J,Y,Z,z){let Q=Z.get("id"),$=Z.get("db"),G=z??{},D=(V)=>V!=null?Number(V):void 0;switch(`${J} ${Y}`){case"GET /api/databases":return{op:"listDatabases",args:[]};case"POST /api/databases":return{op:"createDatabase",args:[G]};case"PATCH /api/database":return Q?{op:"updateDatabase",args:[Q,G]}:null;case"POST /api/database/duplicate":return Q?{op:"duplicateDatabase",args:[Q,G]}:null;case"DELETE /api/database":return Q?{op:"deleteDatabase",args:[Q]}:null;case"GET /api/database/activity":return $?{op:"listDatabaseActivity",args:[$,D(Z.get("limit"))]}:null;case"GET /api/properties":return $?{op:"listProperties",args:[$]}:null;case"POST /api/properties":{let{db:V,...X}=G;return V?{op:"addProperty",args:[V,X]}:null}case"PATCH /api/property":return Q?{op:"updateProperty",args:[Q,G]}:null;case"PATCH /api/property/width":return Q?{op:"setPropertyWidth",args:[Q,G.width]}:null;case"DELETE /api/property":return Q?{op:"removeProperty",args:[Q]}:null;case"GET /api/property/history":return Q?{op:"listPropertyRevisions",args:[Q]}:null;case"POST /api/property/revert":return Q?{op:"revertProperty",args:[Q,G.to]}:null;case"GET /api/records":return $?{op:"listRecords",args:[$,{sort:Z.get("sort")??void 0,limit:D(Z.get("limit"))}]}:null;case"POST /api/records":return $?{op:"createRecord",args:[$,G]}:null;case"GET /api/record":return Q?{op:"getRecord",args:[Q]}:null;case"PATCH /api/record":return Q?{op:"updateRecord",args:[Q,G]}:null;case"PATCH /api/record/order":{let{target:V,where:X}=G;return Q&&V?{op:"moveRecord",args:[Q,V,X]}:null}case"GET /api/record/history":return Q?{op:"listRecordRevisions",args:[Q]}:null;case"GET /api/record/at":return Q?{op:"recordAtVersion",args:[Q,Z.get("version")]}:null;case"GET /api/record/field-history":return Q?{op:"recordFieldHistory",args:[Q,Z.get("prop")]}:null;case"POST /api/record/revert":return Q?{op:"revertRecord",args:[Q,G.to]}:null;case"DELETE /api/record":return Q?{op:"deleteRecord",args:[Q]}:null;case"GET /api/documents":return{op:"listDocuments",args:[{database_id:Z.get("db")??void 0,parent_id:Z.get("parent")??void 0}]};case"POST /api/documents":return{op:"createDocument",args:[G]};case"GET /api/document":return Q?{op:"getDocument",args:[Q]}:null;case"PATCH /api/document":{let{if_match:V,...X}=G;return Q?{op:"updateDocument",args:[Q,X,V]}:null}case"POST /api/document/duplicate":return Q?{op:"duplicateDocument",args:[Q,G]}:null;case"PATCH /api/document/move":{let{target:V,where:X}=G;return Q&&V?{op:"moveDocument",args:[Q,V,X]}:null}case"GET /api/document/history":return Q?{op:"listDocumentRevisions",args:[Q]}:null;case"GET /api/document/at":return Q?{op:"documentAtVersion",args:[Q,Z.get("version")]}:null;case"POST /api/document/revert":{let{to:V,if_match:X}=G;return Q&&V?{op:"revertDocument",args:[Q,V,X]}:null}case"DELETE /api/document":return Q?{op:"deleteDocument",args:[Q]}:null;case"GET /api/nodes":return{op:"nodes",args:[]};case"GET /api/search":{let V=Z.get("q");return V?{op:"search",args:[V,D(Z.get("limit"))]}:null}default:return null}}function w(J,Y){if(J===null)return"unknown";if(J.status>=500)return"unknown";if(J.ok)return Y?.ok===!0?"server":"none";return"none"}async function x(){let J=null,Y=null;try{J=await fetch("/health",{cache:"no-store"}),Y=J.ok?await J.json().catch(()=>null):null}catch{J=null}return w(J,Y)}var q=Math.floor(167772160);function u(J){if(J instanceof ArrayBuffer)return J;let Y=new Uint8Array(J.byteLength);return Y.set(J),Y.buffer}async function m(J){let Y=await crypto.subtle.digest("SHA-256",u(J));return[...new Uint8Array(Y)].map((Z)=>Z.toString(16).padStart(2,"0")).join("")}async function P(J,Y){return(await m(J)).slice(0,Y.length)===Y}var v={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",avif:"image/avif",svg:"image/svg+xml",pdf:"application/pdf"};function S(J){let Y=J.lastIndexOf("."),Z=Y>=0?J.slice(Y+1).toLowerCase():"";return v[Z]??"application/octet-stream"}var j=null;function y(){if(j)return j;return j=new Promise((J,Y)=>{let Z=indexedDB.open("mh-blobs",1);Z.onupgradeneeded=()=>{let z=Z.result;if(!z.objectStoreNames.contains("spool"))z.createObjectStore("spool",{keyPath:"hash"});if(!z.objectStoreNames.contains("meta"))z.createObjectStore("meta",{keyPath:"hash"})},Z.onsuccess=()=>J(Z.result),Z.onerror=()=>Y(Z.error)}),j}function U(J,Y,Z){return y().then((z)=>new Promise((Q,$)=>{let G=Z(z.transaction(J,Y).objectStore(J));G.onsuccess=()=>Q(G.result),G.onerror=()=>$(G.error)}))}var K=(J)=>`/blob/${J}`;async function b(J,Y){let Z=await U("meta","readonly",(Q)=>Q.get(J)),z={hash:J,size:Y,accessed:Date.now(),pinned:Z?.pinned??0};await U("meta","readwrite",(Q)=>Q.put(z))}async function p(J){let Y=await U("meta","readonly",(Z)=>Z.get(J));if(!Y)return;Y.accessed=Date.now(),await U("meta","readwrite",(Z)=>Z.put(Y))}function l(J){return J.trim().toLowerCase().startsWith("text/html")}async function g(J){let Y=await caches.open("mh-blob-v1"),Z=await Y.match(K(J));if(!Z)return;if(l(Z.headers.get("content-type")??"")){await Y.delete(K(J)),await U("meta","readwrite",(z)=>z.delete(J)).catch(()=>{});return}return p(J),Z}async function M(J,Y,Z){await(await caches.open("mh-blob-v1")).put(K(J),new Response(Y,{headers:{"content-type":Z,"cache-control":"public, max-age=31536000, immutable"}})),await b(J,Y.byteLength),await c()}async function c(){let J=await U("meta","readonly",(Q)=>Q.getAll())??[],Y=J.reduce((Q,$)=>Q+$.size,0);if(Y<=209715200)return;let Z=await caches.open("mh-blob-v1"),z=J.filter((Q)=>!Q.pinned).sort((Q,$)=>Q.accessed-$.accessed);for(let Q of z){if(Y<=q)break;await Z.delete(K(Q.hash)),await U("meta","readwrite",($)=>$.delete(Q.hash)),Y-=Q.size}}var F=globalThis,B=F.caches,d="__MH_SW_VERSION__",N=`mh-shell-${d}`,O="mh-api-v1",o="mh-wasm-v1",T=["/","/webui.js","/webui.css","/manifest.webmanifest","/db-worker.js","/mh-runtime.js"],k=3500,n=12000;function L(J){return J.ok&&J.headers.get("x-mh-unlock")==null}var f=null;async function R(){if(f==null){let J=await x();if(J==="unknown")return!1;f=J}return f==="none"}F.addEventListener("install",(J)=>{J.waitUntil((async()=>{try{let Y=await B.open(N);await Promise.allSettled(T.map(async(Z)=>{let z=await fetch(Z);if(L(z))await Y.put(Z,z)})),await F.skipWaiting()}catch(Y){try{await(await B.open("mh-debug")).put("/__mh-sw-install-error",new Response(String(Y?.stack??Y)))}catch{}throw Y}})())});F.addEventListener("activate",(J)=>{J.waitUntil((async()=>{for(let Y of await B.keys())if(Y.startsWith("mh-shell-")&&Y!==N)await B.delete(Y);await F.clients.claim()})())});function A(J,Y){return new Promise((Z,z)=>{let Q=setTimeout(()=>z(Error("sw: network timeout")),Y);fetch(J).then(($)=>{clearTimeout(Q),Z($)},($)=>{clearTimeout(Q),z($)})})}async function _(J,Y,Z,z){let Q=await B.open(Y),$=z??J;try{let G=await A(J,Z);if(L(G))await Q.put($,G.clone());return G}catch(G){let D=await Q.match($);if(D)return D;throw G}}function h(J,Y,Z){return new Promise((z,Q)=>{let $=new MessageChannel,G=setTimeout(()=>Q(Error("sw: rpc timeout")),n);$.port1.onmessage=(D)=>{clearTimeout(G),z(D.data)},J.postMessage({kind:"mh-rpc",op:Y,args:Z},[$.port2])})}async function W(J,Y,Z){let z=new Set,Q=[];if(J.clientId){let $=await F.clients.get(J.clientId);if($)Q.push($)}for(let $ of await F.clients.matchAll({type:"window",includeUncontrolled:!0}))if(!Q.some((G)=>G.id===$.id))Q.push($);for(let $ of Q){if(z.has($.id))continue;z.add($.id);try{let G=await h($,Y,Z);if(!G.ok&&G.error?.code==="unavailable")continue;return G}catch{continue}}return null}var i={invalid_input:400,not_found:404,ambiguous:400,stale:409,conflict:409,auth:401,network:502};function C(J){if(J.ok)return new Response(JSON.stringify(J.result??null),{headers:{"content-type":"application/json","x-mh-source":"replica"}});let Y=J.error?.code;return new Response(JSON.stringify({error:J.error?.message??"replica error",code:Y}),{status:Y?i[Y]??400:502,headers:{"content-type":"application/json","x-mh-source":"replica"}})}async function a(J){let Y=J.request,Z=new URL(Y.url),z=null;if(Y.method!=="GET"&&(Y.headers.get("content-type")??"").includes("json"))z=await Y.clone().json().catch(()=>null);if(await R()){let Q=H(Y.method,Z.pathname,Z.searchParams,z);if(Q){let $=await W(J,Q.op,Q.args);if($)return C($)}return new Response(JSON.stringify({error:"no metahub server (bucket-only mode)",code:"network"}),{status:502,headers:{"content-type":"application/json","x-mh-source":"replica"}})}try{let Q=Y.method==="GET"?await A(Y,k*2):await fetch(Y);if(Y.method==="GET"&&L(Q))await(await B.open(O)).put(Y,Q.clone());return Q}catch(Q){let $=H(Y.method,Z.pathname,Z.searchParams,z);if($){let G=await W(J,$.op,$.args);if(G)return C(G)}if(Y.method==="GET"){let G=await(await B.open(O)).match(Y);if(G)return G}throw Q}}function r(J){let Z=J.toLowerCase().indexOf("<head>");if(Z>=0)return J.slice(0,Z+6)+'<script src="/mh-runtime.js"></script>'+J.slice(Z+6);return'<script src="/mh-runtime.js"></script>'+J}function s(J){let Y=J.content_type.includes("text/html"),Z=J.content??"",z;if(J.encoding==="utf8")z=Y?r(Z):Z;else{let Q=atob(Z),$=new Uint8Array(Q.length);for(let G=0;G<Q.length;G++)$[G]=Q.charCodeAt(G);z=$}return new Response(z,{headers:{"content-type":J.content_type,"x-mh-source":"replica"}})}function t(J,Y){let Z=`${JSON.stringify(J)},${JSON.stringify(Y)}`;return new Response(`<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script src="/mh-runtime.js"></script></head><body><p style="font:14px system-ui;color:#888;margin:2em">正在从本地副本加载…</p><script>__mhOfflineBootstrap(${Z})</script></body></html>`,{headers:{"content-type":"text/html; charset=utf-8","x-mh-source":"bootstrap"}})}async function E(J,Y){let Z=Y.pathname.slice(7);if(Z==="")return null;let z=Z.indexOf("/");if(z===-1)return Response.redirect(`${Y.origin}/sites/${Z}/`,301);let Q=decodeURIComponent(Z.slice(0,z)),$=decodeURIComponent(Z.slice(z+1)),G=await W(J,"siteFile",[Q,$]);if(G?.ok&&G.result)return s(G.result);if(G?.ok&&G.result==null)return new Response("not found (offline replica)",{status:404});if(J.request.mode==="navigate")return t(Q,$);return null}async function e(J){let Y=J.request,Z=new URL(Y.url);if(await R())return await E(J,Z)??new Response("not found",{status:404});try{return await A(Y,k)}catch(z){let Q=await E(J,Z);if(Q)return Q;throw z}}async function JJ(J){let Y=J.request,Z=new URL(Y.url),z=decodeURIComponent(Z.pathname.slice(6)),Q=z.indexOf("."),$=(Q>=0?z.slice(0,Q):z).toLowerCase();if(!/^[0-9a-f]{16,64}$/.test($))return fetch(Y);let G=S(z),D=await g($);if(D)return D;if(!await R())try{let V=await A(new Request(Y,{cache:"no-store"}),k*2);if(V.ok){let X=await V.clone().arrayBuffer();if(await P(X,$))return await M($,X,V.headers.get("content-type")??G),V}}catch{}let I=await W(J,"blobBytes",[$]);if(I?.ok&&I.result){let V=I.result;if(await P(V,$))return await M($,V,G),new Response(V,{headers:{"content-type":G,"x-mh-source":"replica"}})}return new Response("blob unavailable offline",{status:404})}F.addEventListener("fetch",(J)=>{let Y=J.request,Z=new URL(Y.url);if(Z.origin!==F.location.origin)return;if(Z.pathname.startsWith("/api/")){J.respondWith(a(J));return}if(Y.method!=="GET")return;if(Z.pathname.startsWith("/sites/")){J.respondWith(e(J));return}if(Z.pathname.startsWith("/blob/")){J.respondWith(JJ(J));return}if(Y.mode==="navigate"){if(Z.pathname!=="/")return;J.respondWith(_(Y,N,k,"/"));return}if(T.includes(Z.pathname)||Z.pathname.startsWith("/icons/")){J.respondWith(_(Y,N,k));return}if(Z.pathname==="/sqlite3.wasm"){J.respondWith((async()=>{let z=await B.open(o),Q=await z.match(Y);if(Q)return Q;let $=await fetch(Y);if(L($))await z.put(Y,$.clone());return $})());return}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/webui/server/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,KAAK,EAAiB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/webui/server/routes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,KAAK,EAAiB,MAAM,2BAA2B,CAAC;AAgYrF,eAAO,MAAM,WAAW,EAAE,KAAK,EA8b9B,CAAC"}
|