yaml-flow 8.6.3 → 8.7.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/browser/adapters/firebase-storage.js +3 -0
- package/browser/adapters/firestore-storage.js +3 -0
- package/browser/adapters/localstorage-storage.js +4 -0
- package/browser/asset-integrity.json +20 -4
- package/browser/server-runtime-controlface.js +8 -0
- package/examples/ARCHITECTURE.md +5 -32
- package/examples/board/demo-shell-with-server.html +2 -2
- package/examples/board/doc.html +2 -2
- package/examples/board/server/board-server.js +4 -2
- package/examples/board/server/chat-flow/flow-steps.json +10 -5
- package/examples/board/test/server-http-test.js +93 -0
- package/examples/board-firestore/README.md +81 -0
- package/examples/board-firestore/browser/board-runtime.js +263 -0
- package/examples/board-firestore/firestore.indexes.json +29 -0
- package/examples/board-firestore/package.json +14 -0
- package/examples/board-firestore/server/adapters/firestore-archive-factory.js +59 -0
- package/examples/board-firestore/server/adapters/firestore-blob-storage.js +82 -0
- package/examples/board-firestore/server/adapters/firestore-board-adapter.js +127 -0
- package/examples/board-firestore/server/adapters/firestore-journal-storage.js +54 -0
- package/examples/board-firestore/server/adapters/firestore-kv-storage.js +47 -0
- package/examples/board-firestore/server/adapters/firestore-lock.js +62 -0
- package/examples/board-firestore/server/adapters/firestore-queue-storage.js +186 -0
- package/examples/board-firestore/server/adapters/firestore-scratch-storage.js +50 -0
- package/examples/board-firestore/server/worker.js +146 -0
- package/lib/{artifacts-store-lib-BR-Samty.d.cts → artifacts-store-lib-D9nMkVcE.d.cts} +1 -1
- package/lib/{artifacts-store-lib-DT7XlWUL.d.ts → artifacts-store-lib-DSSMqVL2.d.ts} +1 -1
- package/lib/artifacts-store-public.d.cts +2 -2
- package/lib/artifacts-store-public.d.ts +2 -2
- package/lib/board-live-cards-mcp.cjs +1 -1
- package/lib/board-live-cards-mcp.d.cts +51 -3
- package/lib/board-live-cards-mcp.d.ts +51 -3
- package/lib/board-live-cards-mcp.js +1 -1
- package/lib/board-live-cards-node.cjs +8 -8
- package/lib/board-live-cards-node.d.cts +13 -9
- package/lib/board-live-cards-node.d.ts +13 -9
- package/lib/board-live-cards-node.js +8 -8
- package/lib/{board-live-cards-public-BMUIPOrc.d.ts → board-live-cards-public-D-DJek3X.d.ts} +1 -1
- package/lib/{board-live-cards-public-wkNmBIRC.d.cts → board-live-cards-public-DQzPe7A9.d.cts} +1 -1
- package/lib/board-live-cards-public-async-3hUuHxDx.d.ts +55 -0
- package/lib/board-live-cards-public-async-CgMCYYft.d.cts +55 -0
- package/lib/board-live-cards-public.d.cts +1 -1
- package/lib/board-live-cards-public.d.ts +1 -1
- package/lib/board-live-cards-server-runtime.cjs +1 -1
- package/lib/board-live-cards-server-runtime.d.cts +10 -6
- package/lib/board-live-cards-server-runtime.d.ts +10 -6
- package/lib/board-live-cards-server-runtime.js +1 -1
- package/lib/board-platform-adapter-async-DOfEq_HC.d.cts +129 -0
- package/lib/board-platform-adapter-async-JZPCzZnH.d.ts +129 -0
- package/lib/board-worker-adapter.cjs +3 -3
- package/lib/board-worker-adapter.js +3 -3
- package/lib/card-store-public.d.cts +1 -1
- package/lib/card-store-public.d.ts +1 -1
- package/lib/{chat-storage-lib-BIUbE-fM.d.cts → chat-storage-lib-B9Q34Dyv.d.cts} +1 -1
- package/lib/{chat-storage-lib-BlG-sobS.d.ts → chat-storage-lib-DB9iSai2.d.ts} +1 -1
- package/lib/chat-store-public.d.cts +2 -2
- package/lib/chat-store-public.d.ts +2 -2
- package/lib/chunk-272IYUKT.cjs +2 -0
- package/lib/chunk-5XHOHTLZ.cjs +2 -0
- package/lib/chunk-6APH25VI.js +2 -0
- package/lib/chunk-7FGPOGRV.cjs +2 -0
- package/lib/chunk-7ICPAABP.cjs +7 -0
- package/lib/chunk-CPAXTVBQ.cjs +2 -0
- package/lib/chunk-DDYSXP2A.cjs +3 -0
- package/lib/chunk-EGRHWZRV.js +2 -0
- package/lib/chunk-GL2OHR2E.cjs +2 -0
- package/lib/chunk-IPLSRN6P.cjs +4 -0
- package/lib/chunk-J5J6BG7B.js +2 -0
- package/lib/chunk-KAWQPLIE.cjs +2 -0
- package/lib/chunk-LPXVVMQT.cjs +2 -0
- package/lib/chunk-M3OU6IS5.cjs +2 -0
- package/lib/chunk-M6STQR5F.cjs +2 -0
- package/lib/chunk-NJJ7WEDT.cjs +2 -0
- package/lib/chunk-NKIQRCOM.cjs +2 -0
- package/lib/chunk-NM6O35RY.cjs +2 -0
- package/lib/chunk-NTICU4OK.js +2 -0
- package/lib/chunk-O7NOHKVR.js +2 -0
- package/lib/chunk-PRHQBGPT.js +2 -0
- package/lib/chunk-S44QZUDX.js +2 -0
- package/lib/chunk-SGV7PU4H.js +2 -0
- package/lib/chunk-TSN3RTXT.js +4 -0
- package/lib/chunk-VXJHBWK3.js +2 -0
- package/lib/chunk-WHDEBJLT.js +7 -0
- package/lib/chunk-XYN5D3GL.js +2 -0
- package/lib/chunk-YGALANRO.js +2 -0
- package/lib/chunk-ZJ5M5COT.js +2 -0
- package/lib/chunk-ZXQR7GHT.js +3 -0
- package/lib/cloud-storage.cjs +1 -1
- package/lib/cloud-storage.d.cts +5 -3
- package/lib/cloud-storage.d.ts +5 -3
- package/lib/cloud-storage.js +1 -1
- package/lib/firebase-storage/index.cjs +3 -0
- package/lib/firebase-storage/index.d.cts +57 -0
- package/lib/firebase-storage/index.d.ts +57 -0
- package/lib/firebase-storage/index.js +3 -0
- package/lib/firestore-storage/index.cjs +3 -0
- package/lib/firestore-storage/index.d.cts +98 -0
- package/lib/firestore-storage/index.d.ts +98 -0
- package/lib/firestore-storage/index.js +3 -0
- package/lib/localstorage-storage/index.cjs +2 -0
- package/lib/localstorage-storage/index.d.cts +39 -0
- package/lib/localstorage-storage/index.d.ts +39 -0
- package/lib/localstorage-storage/index.js +2 -0
- package/lib/mcp-tool-registries-BBObLYga.d.ts +41 -0
- package/lib/mcp-tool-registries-W3TRj6O5.d.cts +41 -0
- package/lib/queue-lane-registry-PaZuFpwp.d.cts +30 -0
- package/lib/queue-lane-registry-PaZuFpwp.d.ts +30 -0
- package/lib/server-jobs-queue-runner/index.cjs +2 -0
- package/lib/server-jobs-queue-runner/index.d.cts +22 -0
- package/lib/server-jobs-queue-runner/index.d.ts +22 -0
- package/lib/server-jobs-queue-runner/index.js +2 -0
- package/lib/server-runtime/index.cjs +1 -1
- package/lib/server-runtime/index.d.cts +11 -17
- package/lib/server-runtime/index.d.ts +11 -17
- package/lib/server-runtime/index.js +1 -1
- package/lib/server-runtime-agentface/index.cjs +2 -0
- package/lib/server-runtime-agentface/index.d.cts +53 -0
- package/lib/server-runtime-agentface/index.d.ts +53 -0
- package/lib/server-runtime-agentface/index.js +2 -0
- package/lib/server-runtime-controlface/index.cjs +2 -0
- package/lib/server-runtime-controlface/index.d.cts +80 -0
- package/lib/server-runtime-controlface/index.d.ts +80 -0
- package/lib/server-runtime-controlface/index.js +2 -0
- package/lib/server-runtime-core/index.cjs +2 -0
- package/lib/server-runtime-core/index.d.cts +376 -0
- package/lib/server-runtime-core/index.d.ts +376 -0
- package/lib/server-runtime-core/index.js +2 -0
- package/lib/server-runtime-watchers/index.cjs +2 -0
- package/lib/server-runtime-watchers/index.d.cts +127 -0
- package/lib/server-runtime-watchers/index.d.ts +127 -0
- package/lib/server-runtime-watchers/index.js +2 -0
- package/lib/server-runtime-webhooks/index.cjs +2 -0
- package/lib/server-runtime-webhooks/index.d.cts +34 -0
- package/lib/server-runtime-webhooks/index.d.ts +34 -0
- package/lib/server-runtime-webhooks/index.js +2 -0
- package/lib/storage-async-interface-BRR4eBjx.d.cts +81 -0
- package/lib/storage-async-interface-DhlOVPSp.d.ts +81 -0
- package/lib/{queue-lane-registry-BPKWWgd4.d.cts → types-BzQY45dH.d.cts} +8 -34
- package/lib/{queue-lane-registry-Be6c0ftj.d.ts → types-CF2xUcZW.d.ts} +8 -34
- package/package.json +46 -2
- package/examples/board-local/demo-shell-localstorage.html +0 -843
- package/lib/board-live-cards-public-async-DKZqbJVU.d.ts +0 -256
- package/lib/board-live-cards-public-async-dMWNbWq6.d.cts +0 -256
- package/lib/chunk-GJJMEAVN.cjs +0 -2
- package/lib/chunk-GLIX37VG.cjs +0 -8
- package/lib/chunk-LRVAVWAG.js +0 -8
- package/lib/chunk-MLVTJASJ.js +0 -2
- package/lib/chunk-SCWHDI3I.js +0 -2
- package/lib/chunk-WOALA3V5.cjs +0 -2
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {n,h,i,j,a as a$7,b as b$4,k,l as l$1,m,c as c$3}from'./chunk-J5J6BG7B.js';import {a as a$2}from'./chunk-NTICU4OK.js';import {a as a$1,b as b$1}from'./chunk-WHDEBJLT.js';import {c,a as a$5,d as d$1,b as b$5}from'./chunk-SGV7PU4H.js';import {a as a$3}from'./chunk-XYN5D3GL.js';import {a as a$4,b as b$2}from'./chunk-ZJ5M5COT.js';import {b,c as c$2,e}from'./chunk-6APH25VI.js';import {j as j$1,d,c as c$1,b as b$3}from'./chunk-VMW4Z6EF.js';import {y,z,l}from'./chunk-N6P2JW4W.js';import {a as a$6}from'./chunk-KBELAKIY.js';import {a}from'./chunk-76ON3V7R.js';function te(S){let{apiBasePath:v,json:h,readJsonBody:Z,readRawBody:V,initBoardAndSetup:N,bootstrapBoard:$,buildPublishedRuntimePayload:K,createMcpControlplaneToolRegistry:Q,readCardFromStore:tt,patchCard:nt,retriggerCard:U,applyCardAction:ot,resolveChatHandlerTarget:it,createMcpFacade:ct,chatStorePublic:dt,uploadCardFile:m,sendCardFileDownloadResponse:C}=S;async function I(d,u,q){let x=d.method||"GET",O=q,P=O.pathname;try{if(x==="GET"&&P===`${v}/init-board`)return await N(),h(u,200,await K()),!0;if(x==="GET"&&P===`${v}/board-status`)return h(u,200,await K()),!0;if(x==="POST"&&P===`${v}/mcp-controlplane`){await $();let f=await Z(d),c=typeof f.tool=="string"?f.tool.trim():"",j=f.args&&typeof f.args=="object"&&!Array.isArray(f.args)?f.args:{};if(!c)return h(u,400,{error:"tool is required"}),!0;try{let l=await a$4(c,j,Q());if(l&&typeof l=="object"&&!Array.isArray(l)){let k=l;if(k.status==="fail")return h(u,400,{error:b$2(l,"Request failed")}),!0;if(k.status==="error")return h(u,500,{error:b$2(l,"Internal error")}),!0}h(u,200,l);}catch(l){let k=typeof l?.statusCode=="number"?Number(l.statusCode):500,L=l instanceof Error?l.message:String(l);h(u,k,{error:L});}return !0}let D=P.match(new RegExp(`^${c(v)}/cards/([^/]+)$`));if(x==="GET"&&D){await $();let f=decodeURIComponent(D[1]),c=await tt(f);return c?(h(u,200,c),!0):(h(u,404,{error:`card not found: ${f}`}),!0)}if(x==="PATCH"&&D){await $();let f=decodeURIComponent(D[1]),c=await Z(d);return await nt(f,c),h(u,200,{ok:!0}),!0}let et=P.match(new RegExp(`^${c(v)}/cards/([^/]+)/retrigger$`));if(x==="POST"&&et){await $();let f=decodeURIComponent(et[1]);return await U(f),h(u,200,{ok:!0}),!0}let rt=P.match(new RegExp(`^${c(v)}/cards/([^/]+)/actions$`));if(x==="POST"&&rt){await $();let f=decodeURIComponent(rt[1]),c=Date.now(),j=new Date(c).toISOString(),l=await Z(d),k=l?.actionType;if(k==="chat-send"&&!await it(f)){let T=Date.now();return h(u,409,{error:`chat handler is not configured for card: ${f}`,requestReceivedAt:j,requestReceivedAtMs:c,responseSentAt:new Date(T).toISOString(),responseSentAtMs:T,responseStatus:409}),!0}if(k==="chat-send"){let T=l?.payload??{},W=typeof T["turn-id"]=="string"?T["turn-id"]:typeof T.turnId=="string"?T.turnId:typeof T.turn=="string"?T.turn:"";if(!W||!String(W).trim()){let ut=Date.now();return h(u,400,{error:`chat-send requires a non-empty 'turn-id' (or 'turnId'/'turn') in payload for card: ${f}`,requestReceivedAt:j,requestReceivedAtMs:c,responseSentAt:new Date(ut).toISOString(),responseSentAtMs:ut,responseStatus:400}),!0}}await ot(f,k,l?.payload);let L=Date.now();return h(u,200,{ok:!0,requestReceivedAt:j,requestReceivedAtMs:c,responseSentAt:new Date(L).toISOString(),responseSentAtMs:L,responseStatus:200}),!0}let M=P.match(new RegExp(`^${c(v)}/cards/([^/]+)/chats$`));if(x==="GET"&&M){await $();let f=decodeURIComponent(M[1]),c=String(O.searchParams.get("turn-id")||""),j=String(O.searchParams.get("all-turns")||"").toLowerCase()==="true",l=String(O.searchParams.get("tail-turns-before-id")||""),k=O.searchParams.get("tail-turns"),L=k==null||k===""?j||c?void 0:1:Number.parseInt(k,10),T=dt.readAll({params:{cardId:f},body:{...L===void 0?{}:{tailTurns:L},...c?{turnId:c}:{},...j?{allTurns:!0}:{},...l?{tailTurnsBeforeId:l}:{}}});if(T.status!=="success")return h(u,400,{error:T.error||"Failed to read chats"}),!0;let W=T.data.records;return h(u,200,{ok:!0,messages:W}),!0}if(x==="POST"&&M){await $();let f=decodeURIComponent(M[1]),c=await Z(d),j=typeof c?.role=="string"?c.role:"assistant",l=typeof c?.text=="string"?c.text:"",k=Array.isArray(c?.files)?c.files:[],L=typeof c?.turn=="string"?c.turn:typeof c?.["turn-id"]=="string"?c["turn-id"]:typeof c?.turnId=="string"?c.turnId:"",T=c?.done===!0,W=ct(),G=(await W.manageAddChatEntryAndAnyAttachments({cardId:f,role:j,text:l,files:k,turn:L})).data.id;return T&&W.setChatProcessing({cardId:f,active:!1}),h(u,200,{ok:!0,id:G}),!0}let X=P.match(new RegExp(`^${c(v)}/cards/([^/]+)/files$`));if(x==="POST"&&X){await $();let f=decodeURIComponent(X[1]),c=String(O.searchParams.get("inChat")||"").toLowerCase()==="true",j=String(O.searchParams.get("turn-id")||"").trim();if(c&&!j)return h(u,400,{error:`file upload with inChat=true requires a non-empty 'turn-id' query parameter for card: ${f}`}),!0;let l=d.headers["x-file-name"],k=String(d.headers["content-type"]||"application/octet-stream"),L=Array.isArray(l)?l[0]:l,T=L?decodeURIComponent(String(L)):"upload.bin",W=await V(d);return h(u,200,await m(f,T,k,W,{inChat:c,turnId:j})),!0}let z=P.match(new RegExp(`^${c(v)}/cards/([^/]+)/files/(\\d+)$`));if(x==="GET"&&z){let f=decodeURIComponent(z[1]),c=parseInt(z[2],10),j=O.searchParams.get("sn");return await C(u,f,c,j),!0}return !1}catch(D){let et=D?.statusCode||500;return h(u,et,{error:String(D?.message||D)}),true}}return {handleRuntimeApi:I}}var re={"Access-Control-Allow-Origin":"*","Access-Control-Allow-Headers":"content-type,x-file-name","Access-Control-Allow-Methods":"GET,POST,PATCH,OPTIONS"},ee="chat-handler-flow-queue";function or(S){let v=String(S.apiBasePath||"/api/board").replace(/\/$/,""),h$1={...re,...S.corsHeaders||{}},Z=S.queueLaneTuning??{},V=S.boardId||"",N=S.logger||{info:console.log,warn:console.warn,error:console.error},$=S.invocationAdapter,K=S.chatFlowRunner||null,Q=S.chatStorage??b(),tt=a(Q),nt=S.notificationTransport||null,U=S.serverUrl||null,ot=S.executionExtra||{},it=S.onSseClientConnected,ct=S.onSseClientDisconnected,dt=S.onChannelSubscribed,m$1=S.onChannelUnsubscribed,C=a$1({chatStorage:Q,readChatRecords:t=>bt(t),onSseClientDisconnected:ct});function I(t){function e(o){if(Array.isArray(o))return o;if(o&&typeof o=="object"){let i=o;return Array.isArray(i.files)?i.files:[o]}return null}function r(o){return {async get(i){return o.get(i)},async set(i){return o.set(i)},async del(i){return o.del(i)},async patch(i){return o.patch(i)},async appendFiles(i){return o.appendFiles(i)}}}function a(o){function i(b){return {status:"success",data:b}}function g(b){return {status:"fail",error:b}}function p(b){return {status:"error",error:b instanceof Error?b.message:String(b)}}return {async get(b){try{let R=b.params?.id;if(R){let E=await o.readCard(R);return E?i({cards:[E]}):g(`card "${R}" not found`)}return i({cards:await o.readAllCards()})}catch(R){return p(R)}},async set(b){try{let R=b.body;if(R==null)return g("set requires a body (card object or array of cards)");let E=Array.isArray(R)?R:[R];for(let _ of E){if(typeof _.id!="string")return g("each card must have a string `id` field");await o.writeCard(_.id,_);}return i({count:E.length})}catch(R){return p(R)}},async del(b){try{let R=b.body?.ids??[],E=b.params?.id,_=E?[...R,E]:R;if(_.length===0)return g("del requires body.ids (string[]) or params.id");for(let st of _)await o.removeCard(st);return i({count:_.length})}catch(R){return p(R)}},async patch(b){try{let R=b.params?.id,E=b.params?.path;if(!R)return g("patch requires params.id");if(!E)return g("patch requires params.path");let _=b.body,st=_&&Object.prototype.hasOwnProperty.call(_,"value")?_.value:b.body;return await o.patchCard(R,E,st),i({count:1})}catch(R){return p(R)}},async appendFiles(b){try{let R=b.params?.id;if(!R)return g("appendFiles requires params.id");let E=await o.readCard(R);if(!E)return g(`card "${R}" not found`);let _=e(b.body);if(!_||_.length===0)return g("appendFiles requires a file metadata object, array, or body.files array");let st=E.card_data&&typeof E.card_data=="object"&&!Array.isArray(E.card_data)?E.card_data:{},Bt=Array.isArray(st.files)?st.files:[],Fe=[...Bt,..._];return await o.patchCard(R,"card_data.files",Fe),i({files_added:_.map((Oe,Te)=>({idx:Bt.length+Te,entry:Oe}))})}catch(R){return p(R)}}}}let n=a$5(t.boardAdapter)?j$1(t.baseRef,t.boardAdapter):y(t.baseRef,t.boardAdapter),s=t.nonCoreAdapter??(!a$5(t.boardAdapter)&&x(t.boardAdapter)?t.boardAdapter:null),y$1=s?z(t.baseRef,s):null,B,w=a$5(t.boardAdapter)?(()=>{let o=d(c$1(b$3(t.boardAdapter.kvStorageForRef(t.cardStoreRef)),t.boardAdapter.hashFn),N.warn),i=a(o);return B={get(g){return i.get(g)},set(g){return i.set(g)}},i})():(()=>{let o=t.boardAdapter.kvStorageForRef(t.cardStoreRef),g=a$6(l({readIndex:()=>o.read("_index"),writeIndex:p=>o.write("_index",p),readCard:p=>o.read(p),writeCard:(p,b)=>(o.write(p,b),p),removeCard:p=>{o.delete(p);},cardExists:p=>o.read(p)!==null,defaultCardKey:p=>p},N.warn));return B=g,r(g)})(),F=t.artifactsAdapter||t.boardAdapter,A=t.filesArtifactsStore??null,H=A?{putBytes(o,i,g){A.putBytes(o,i,g);},getBytes(o){return A.getBytes(o)},listKeys(o){return A.list(o).map(i=>i.key)}}:null;if(!H&&!a$5(F)){let o=t.artifactsAdapter?F.blobStorage(""):F.blobStorage("files"),i=c$2(o);H={putBytes(g,p,b){i.putBytes(g,p,b);},getBytes(g){return i.getBytes(g)},listKeys(g){return i.list(g).map(p=>p.key)}};}else if(!H&&a$5(F)){let o=t.artifactsAdapter?F.blobStorage(""):F.blobStorage("files");H={async putBytes(i,g){if(o.writeBytes){await o.writeBytes(i,g);return}let p=JSON.stringify({__kind:"bytes-array",data:[...g]});await o.write(i,p);},async getBytes(i){if(o.readBytes){let p=await o.readBytes(i);if(p!==null)return p}let g=await o.read(i);if(g===null)return null;try{let p=JSON.parse(g);if(p&&p.__kind==="bytes-array"&&Array.isArray(p.data))return new Uint8Array(p.data)}catch{}return new TextEncoder().encode(g)},async listKeys(i){return await o.listKeys(i)}};}let J={async init(o){return n.init(o)},async status(o){return n.status(o)},async getConfig(o){return n.getConfig(o)},async getAllOutputsDataObjects(o){return n.getAllOutputsDataObjects(o)},async getAllOutputsComputedValues(o){return n.getAllOutputsComputedValues(o)},async getOutputsFetchedSources(o){return n.getOutputsFetchedSources(o)},async upsertCard(o){return n.upsertCard(o)},async removeCard(o){return n.removeCard(o)},async cardRefreshedNotify(o){return n.cardRefreshedNotify(o)},async sourceDataFetched(o){return n.sourceDataFetched(o)},async sourceDataFetchFailure(o){return n.sourceDataFetchFailure(o)}};return {label:t.label,board:n,nonCore:y$1,publicCardStore:B,boardOps:J,cardStoreOps:w,get filesArtifacts(){return H},boardAdapter:t.boardAdapter,cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef,artifactsStoreRef:t.artifactsStoreRef,chatStoreRef:t.chatStoreRef,scratchStoreRef:t.scratchStoreRef,archiveStoreRef:t.archiveStoreRef,notifyRef:t.notifyRef,taskExecutorRef:t.taskExecutorRef,chatHandlerRef:t.chatHandlerRef,chatHandlerFlow:t.chatHandlerFlow,inferenceAdapterRef:t.inferenceAdapterRef,notification:a$7(),notificationTeardown:null,initialized:false,cardsBootstrapped:false}}let d$2=S.boards.map(I),u=new Map;function q(t){return u.get(t)??0}function x(t){let e=t;return typeof e.invokeExecutor=="function"&&typeof e.validateSchema=="function"}function O(t){let e=d$2[q(t)];return {files:e?e.filesArtifacts:null}}function P(){return e()}function D(t){return String(t||"").replace(/[^a-zA-Z0-9_-]/g,"_")||"unknown-card"}async function et(t){if(!t||t.notificationTeardown||!nt||!t.notifyRef)return;let e=await nt.subscribe(t.notifyRef,r=>{c$3(t.notification,r);let a=r.kind==="notification-batch"?r.notifications:[r];C.broadcastNotificationBatch(a);});t.notificationTeardown=e;}async function rt(t){if(!t||t.initialized)return;let e={cardStoreRef:t.cardStoreRef,outputsStoreRef:t.outputsStoreRef};t.artifactsStoreRef&&(e.artifactsStoreRef=t.artifactsStoreRef),t.chatStoreRef&&(e.chatStoreRef=t.chatStoreRef),t.scratchStoreRef&&(e.scratchStoreRef=t.scratchStoreRef),t.archiveStoreRef&&(e.archiveStoreRef=t.archiveStoreRef);let r={};t.taskExecutorRef&&(r["task-executor-ref"]=t.taskExecutorRef),t.chatHandlerFlow!==void 0&&(r["chat-handler-flow"]=t.chatHandlerFlow),t.inferenceAdapterRef&&(r["inference-adapter-ref"]=t.inferenceAdapterRef);let a=await t.boardOps.init({params:e,body:r});if(a.status!=="success")throw Object.assign(new Error(a.error||`init failed for ${t.label}`),{statusCode:500});if(await et(t),!t.chatHandlerFlow&&t.chatHandlerRef&&$.describe)try{let n=await $.describe(t.chatHandlerRef);n&&n.kind!=="chat-handler"?N.warn(`[init] chat-handler describe returned kind="${n.kind}", expected "chat-handler" for ${t.label}`):n&&N.info(`[init] chat-handler validated: ${n.name} (protocol ${n.protocolVersion}) for ${t.label}`);}catch(n){N.warn(`[init] chat-handler describe failed for ${t.label}: ${n?.message||String(n)}`);}t.initialized=true;}async function M(t){if(!t.boardAdapter.publishBoardChangeNotifications)return;let e=[],r=await t.boardOps.status({});r.status==="success"&&r.data!=null&&b$4(r.data)&&e.push({kind:"status",status:r.data});let a=await t.boardOps.getAllOutputsDataObjects({});if(a.status==="success"&&a.data!=null)for(let[s,y]of Object.entries(a.data))s&&e.push({kind:"data_object",key:s,payload:y});let n=await t.boardOps.getAllOutputsComputedValues({});if(n.status==="success"&&n.data!=null)for(let[s,y]of Object.entries(n.data))s&&e.push({kind:"computed_values",cardId:s,values:y});e.length>0&&t.boardAdapter.publishBoardChangeNotifications(e);}async function X(t,e){if(!t||t.cardsBootstrapped)return;let r=await t.cardStoreOps.get({}),a=r.status==="success"&&Array.isArray(r.data?.cards)?r.data.cards:[];for(let n of a)typeof n.id=="string"&&(u.set(n.id,e),await t.boardOps.upsertCard({params:{cardId:n.id}}));t.cardsBootstrapped=true;}async function z$1(){for(let t of d$2)await rt(t);}async function f(){await z$1();for(let t=0;t<d$2.length;t++)await M(d$2[t]),await X(d$2[t],t),await M(d$2[t]);}async function c(t=false){t||await z$1();for(let e of d$2){let r=await e.board.processAccumulatedEvents({});if(r.status!=="success")return r}return {status:"success"}}async function j$2(){return await z$1(),c(true)}function l$2(t){return d$2[q(t)]??null}async function k$1(t){let e=l$2(t);if(!e)return null;let r=await e.cardStoreOps.get({params:{id:t}});if(r.status!=="success")return null;let a=Array.isArray(r.data?.cards)?r.data.cards:[];return a.length>0?a[0]:null}async function L(){let t=async r=>{if(!r)return [];let a=await r.cardStoreOps.get({});return a.status!=="success"||!Array.isArray(a.data?.cards)?[]:a.data.cards},e=[];for(let r of d$2)e.push(...await t(r));return e}function T(){return d$2[0]??null}let W=n({boardContexts:d$2,cardOwnerIndex:u,cardContextForCard:t=>l$2(t),readStatusSnapshot:()=>ie(),readDataObjectsByToken:()=>de(),readCardRuntimeArtifacts:()=>ce(),readCardFromStore:t=>k$1(t),readCardDefinitions:()=>L(),processAccumulatedLaneInternal:t=>c(t),reportSourceFetched:(t,e)=>St(t,{ref:e}),reportSourceFetchFailure:(t,e)=>kt(t,{reason:e}),uploadCardFile:(t,e,r,a,n)=>Rt(t,e,r,a,n),chatStorePublic:tt,serverUrl:U,apiBasePath:v}),ut=W.mcpCardStoreFacade,G=W.createMcpFacade,ne=h({boardId:V,getMcpFacade:()=>G(),getMcpCardStoreFacade:()=>ut()});function ae(t){return k(t)}function oe(){return l$1(G())}function se(){return m({boardId:V,uploadCardFile:Rt,getMcpFacade:()=>G(),controlplane:ne})}let lt=i({boardId:V,boardContexts:d$2,readCardDefinitions:()=>L(),readChatRecords:t=>bt(t),getChatProcessing:t=>G().getChatProcessing({cardId:t}).active}),ie=lt.readStatusSnapshot,ce=lt.readCardRuntimeArtifacts,de=lt.readDataObjectsByToken,gt=lt.buildPublishedRuntimePayload;async function yt(t,e,r){let a=r?.syncBoard!==false,n=r?.restartOnlyIfChanged===true,s=l$2(t);if(!s)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let y=await k$1(t);if(!y)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let B=n?JSON.stringify(y):null,w=e(y)||y;if(n&&JSON.stringify(w)===B)return;let F=await s.cardStoreOps.set({body:w});if(F.status!=="success")throw Object.assign(new Error(F.error||`Failed to persist card: ${t}`),{statusCode:500});if(a){let A=await s.boardOps.upsertCard({params:{cardId:t,restart:true}});if(A.status!=="success")throw Object.assign(new Error(A.error||`Failed to upsert card: ${t}`),{statusCode:500})}}async function ue(t,e){await yt(t,e,{syncBoard:true});}async function ht(t,e){await yt(t,e,{syncBoard:false});}async function le(t){let e=l$2(t);if(!e)throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});if(!await k$1(t))throw Object.assign(new Error(`Card not found: ${t}`),{statusCode:404});let a=await e.boardOps.upsertCard({params:{cardId:t,restart:true}});if(a.status!=="success")throw Object.assign(new Error(a.error||`Failed to retrigger card: ${t}`),{statusCode:500})}async function fe(t,e){await yt(t,r=>{if(!e||typeof e!="object"||Object.keys(e).length===0)return r;function a(n,s,y){let B=String(s||"").split(".").filter(Boolean);if(!B.length)return;let w=n;for(let F=0;F<B.length-1;F++){let A=B[F];(!w[A]||typeof w[A]!="object")&&(w[A]={}),w=w[A];}w[B[B.length-1]]=y;}if(e.fieldValues!==void 0&&e.fieldValues!==null){let n=null,s=r.view;if(s&&Array.isArray(s.elements)){for(let y of s.elements)if(y?.data&&y.data.writeTo){n=y.data.writeTo;break}}n?a(r,n,e.fieldValues):typeof e.fieldValues=="object"&&!Array.isArray(e.fieldValues)&&(r.card_data={...r.card_data||{},...e.fieldValues});}else {if(Array.isArray(e._stagedFiles)&&e._stagedFiles.length>0)return r;for(let[n,s]of Object.entries(e))n!=="_stagedFiles"&&(s!==null&&typeof s=="object"&&!Array.isArray(s)&&r[n]!==null&&typeof r[n]=="object"&&!Array.isArray(r[n])?r[n]={...r[n],...s}:r[n]=s);}return r},{syncBoard:true,restartOnlyIfChanged:true});}function pe(t){Q.clear(t);try{G().setChatProcessing({cardId:t,active:!1});}catch{}}function me(t,e,r,a,n=""){let s=typeof r=="string"?r.trim():"";return Q.append(t,e||"system",s,a,n)}function bt(t){return Q.readAll(t)}let Rt=j({safeCardId:t=>D(t),artifactsStores:t=>O(t),cardFileMetadataStore:()=>P(),readCardFromStore:t=>k$1(t),updateCardLocalOnly:(t,e)=>ht(t,e),writeChatRecord:(t,e,r,a,n)=>me(t,e,r,a,n)}).uploadCardFile;async function Ct(t){let e=l$2(t);if(!e)return null;let r=await e.boardOps.getConfig({params:{key:"chat-handler-flow"}}),a=r.status==="success"?r.data?.value:null,n=e.chatHandlerRef;return a==null&&(!n||typeof n!="object")?null:{ctx:e,handlerFlow:a,handlerRef:n}}async function ge(t,e,r=false,a=""){let n=await Ct(t);if(!n)return;let{ctx:s,handlerFlow:y,handlerRef:B}=n;if(!r)try{G().setChatProcessing({cardId:t,active:!0});}catch{}let w={boardId:V,cardId:String(t),lastChatEntryId:e,...a?{turnId:a}:{},...ot,...U?{serverUrl:U}:{}},F=y!=null?{meta:"chat-handler-flow",howToRun:"built-in",whatToRun:{kind:"built-in",value:ee}}:B;try{a$5(s.boardAdapter)?await s.boardAdapter.chatAgentStore().enqueueRequest({boardId:V,ref:F,args:y!=null?{...w,__chatHandlerFlow:y}:w}):s.boardAdapter.chatAgentStore().enqueueRequest({boardId:V,ref:F,args:y!=null?{...w,__chatHandlerFlow:y}:w}),await Promise.resolve(s.boardAdapter.requestProcessAccumulated?.());}catch(A){try{G().setChatProcessing({cardId:t,active:!1});}catch{}N.warn(`[chat-handler] queue failed for card "${t}": ${A instanceof Error?A.message:String(A)}`);}}async function ye(t,e,r){if(e.howToRun==="built-in"&&b$5(e)===ee){let a=K,n=r.__chatHandlerFlow,s={...r};return delete s.__chatHandlerFlow,a?a.run(n,s,{boardId:V,cardId:String(s.cardId||""),label:t.label,logger:N,serverUrl:U,executionExtra:ot}):{dispatched:false,error:"chat-handler-flow configured but no chatFlowRunner was provided"}}return $.invoke(e,r)}async function Re(t,e=false){e||await z$1();let r=typeof t.args?.cardId=="string"?t.args.cardId:"",a=r?l$2(r):T();if(!a)throw new Error(r?`Board context is unavailable for chat-agent request: ${r}`:"Board context is unavailable for chat-agent request");let n=await ye(a,t.ref,t.args);if(!n.dispatched){if(r)try{Q.setProcessing(r,!1);}catch{}throw new Error(n.error||`chat-agent dispatch failed for card "${r||"unknown"}"`)}}async function we(t,e,r){let a=e==="chat-send"?ht:ue,n;await a(t,s=>{let y=new Date().toISOString(),B=s.card_data&&typeof s.card_data=="object"?s.card_data:{};if(s.card_data=B,e==="chat-send"){let w=r&&typeof r.text=="string"?r.text.trim():"",F=r&&typeof r["turn-id"]=="string"?r["turn-id"]:r&&typeof r.turnId=="string"?r.turnId:r&&typeof r.turn=="string"?r.turn:"",A=[];if(Array.isArray(r?.files)){for(let H of r.files)if(H){if(typeof H=="string"){A.push({name:H});continue}if(typeof H=="object"){let J=H;typeof J.name=="string"&&A.push({name:J.name,size:J.size,mime_type:J.mime_type,uploaded_at:J.uploaded_at,stored_name:J.stored_name,chat:J.chat===true});}}}if(w||A.length>0){let H=tt.runBatch({cardId:t,commands:[{command:"append",role:"user",text:w,files:A,turn:F},{command:"set-processing",active:true}]});if(H.status!=="success")throw new Error(H.error);let J=H.data.results[0]?.data?.id;if(typeof J!="string"||!J)throw new Error(`chat-send did not return an append id for card ${t}`);n={cardId:t,lastEntryId:J,processingAlreadySet:true,turnId:F};try{C.broadcastCardChats(t);}catch{}}return s}if(e==="file-upload"){let w=P().normalizeIncoming(r?.files,y);return w.length>0&&P().merge(B,w),s}if(e==="action"){let w=r&&typeof r.buttonId=="string"?r.buttonId:"";if(!w)return s;B.lastAction={buttonId:w,at:y},B.lastActionText=`${w} @ ${y}`;}return s}),n&&ge(n.cardId,n.lastEntryId,n.processingAlreadySet,n.turnId??"");}function ft(t,e,r){let a=JSON.stringify(r),n=typeof Buffer<"u"?Buffer.byteLength(a):new TextEncoder().encode(a).length;t.writeHead(e,{...h$1,"Content-Type":"application/json; charset=utf-8","Content-Length":n}),t.end(a);}async function At(t,e,r){let a=await k$1(t);if(!a)throw Object.assign(new Error("Card not found"),{statusCode:404});let n=P().resolve(a.card_data,e,r);if(!n.ok&&n.reason==="stale_reference")throw Object.assign(new Error("File reference is stale. Refresh and try again."),{statusCode:409});if(!n.ok)throw Object.assign(new Error("File not found"),{statusCode:404});let s=n.file,y=D(t),B=O(t),w=String(s.stored_name||""),F=`${y}/${w}`,A=B.files?await B.files.getBytes(F):null;if(!A)throw Object.assign(new Error("File not found"),{statusCode:404});return {fileRecord:s,bytes:A}}async function he(t,e,r,a){let{fileRecord:n,bytes:s}=await At(e,r,a),y=String(n.name||n.stored_name||"download.bin"),B=String(n.mime_type||"application/octet-stream");t.writeHead(200,{"Content-Type":B,"Content-Disposition":`attachment; filename="${y}"`,"Content-Length":s.length}),t.end(s);}function be(t){let e=String(t||"").toLowerCase();return e.startsWith("text/")||e.includes("json")||e.includes("xml")||e.includes("javascript")||e.includes("typescript")||e.includes("yaml")||e.includes("csv")}function Ce(t,e,r){let a=t.split(/\r?\n/);return (e==="head"?a.slice(0,r):a.slice(-r)).join(`
|
|
2
|
+
`)}async function pt(t){let e=[];for await(let a of t)e.push(a);let r=typeof Buffer<"u"?Buffer.concat(e).toString("utf-8").trim():new TextDecoder().decode(d$1(e)).trim();return r?JSON.parse(r):{}}async function Ae(t){let e=[];for await(let r of t)e.push(r);return typeof Buffer<"u"?Buffer.concat(e):d$1(e)}async function St(t,e){let r=typeof e.ref=="string"?e.ref.trim():"";if(!r)return {status:"fail",error:"board-worker success callback requires body.ref"};let a=d$2[0];return a?a.boardOps.sourceDataFetched({params:{token:t,ref:r}}):{status:"fail",error:"no board context"}}async function kt(t,e){let r=typeof e.reason=="string"&&e.reason.trim()?e.reason:"unknown",a=d$2[0];return a?a.boardOps.sourceDataFetchFailure({params:{token:t,reason:r}}):{status:"fail",error:"no board context"}}let Se=b$1({sseHub:C,corsHeaders:h$1,json:ft,buildPublishedRuntimePayload:()=>gt(),onSseClientConnected:it,onChannelSubscribed:dt,onChannelUnsubscribed:m$1,apiBasePath:v,readJsonBody:t=>pt(t),initBoardAndSetup:()=>z$1(),bootstrapBoard:()=>f(),boardContexts:d$2,publishPersistedStateSnapshot:t=>M(t),upsertCardsFromSource:(t,e)=>X(t,e)}).handleWatchersRoutes,ke=a$2({apiBasePath:v,json:ft,readJsonBody:t=>pt(t),bootstrapBoard:()=>f(),createMcpFacade:()=>G(),createMcpToolRegistry:t=>ae(t),resolveCardFileDownloadPayload:(t,e,r)=>At(t,e,r),isLikelyTextMimeType:t=>be(t),sliceTextByLines:(t,e,r)=>Ce(t,e,r)}).handleAgentfaceApi,Be=a$3({apiBasePath:v,json:ft,readJsonBody:t=>pt(t),initBoardAndSetup:()=>z$1(),createMcpWebhookToolRegistry:()=>oe()}).handleWebhooksApi,ve=te({apiBasePath:v,json:ft,readJsonBody:t=>pt(t),readRawBody:t=>Ae(t),initBoardAndSetup:()=>z$1(),bootstrapBoard:()=>f(),buildPublishedRuntimePayload:()=>gt(),createMcpControlplaneToolRegistry:()=>se(),readCardFromStore:t=>k$1(t),patchCard:(t,e)=>fe(t,e),retriggerCard:t=>le(t),applyCardAction:(t,e,r)=>we(t,e,r),resolveChatHandlerTarget:t=>Ct(t),createMcpFacade:()=>G(),chatStorePublic:tt,uploadCardFile:(t,e,r,a,n)=>Rt(t,e,r,a,n),sendCardFileDownloadResponse:(t,e,r,a)=>he(t,e,r,a)}).handleRuntimeApi;async function Pe(t,e,r){return !!(await ke(t,e,r)||await Be(t,e,r)||await Se(t,e,r)||await ve(t,e,r))}return {get apiBasePath(){return v},get corsHeaders(){return h$1},get queueLaneTuning(){return Z},handleRuntimeApi:Pe,buildPublishedRuntimePayload:gt,processAccumulatedEvents:j$2,processAccumulatedLane:c,handleChatAgentRequest:Re,clearChatRecords:pe,reportSourceFetched(t,e){return St(t,{ref:e})},reportSourceFetchFailure(t,e){return kt(t,{reason:e})},get cardStore(){return d$2[0]?.publicCardStore??{get(){return Promise.resolve({status:"fail",error:"no board context"})},set(){return Promise.resolve({status:"fail",error:"no board context"})}}}}}function sr(S){let v=String(S.apiBasePath||"/api/boards").replace(/\/$/,""),h={...re,...S.corsHeaders||{}},Z=S.serverMetaStore,V=S.boardRuntimeFactory,N=new Map,$="boards-config.json";function K(){let m=Z.getText($);if(!m)return {boards:[{id:"default",label:"Default Board"}]};try{return JSON.parse(m)}catch{return {boards:[{id:"default",label:"Default Board"}]}}}function Q(m){Z.putText($,JSON.stringify(m,null,2));}function tt(m){let C=String(m||"").replace(/[^a-zA-Z0-9_-]/g,"_").replace(/^_+|_+$/g,"");return C.length>0&&C.length<=64?C:null}function nt(m){if(N.has(m))return N.get(m);let I=K().boards.find(u=>u.id===m)||{},d=V(m,I);return N.set(m,d),d}function U(m,C,I){let d=JSON.stringify(I),u=typeof Buffer<"u"?Buffer.byteLength(d):new TextEncoder().encode(d).length;m.writeHead(C,{...h,"Content-Type":"application/json; charset=utf-8","Content-Length":u}),m.end(d);}async function ot(m,C,I){let d=m.method||"GET",u=I.pathname;if(d==="GET"&&u===v)return U(C,200,{ok:true,boards:K().boards}),true;if(d==="POST"&&u===v){let q=[];for await(let M of m)q.push(M);let x=typeof Buffer<"u"?Buffer.concat(q).toString("utf-8").trim():new TextDecoder().decode(d$1(q)).trim(),O={};try{O=x?JSON.parse(x):{};}catch{O={};}let P=tt(O.id);if(!P)return U(C,400,{error:"board id must be 1-64 alphanumeric/dash/underscore characters"}),true;let D=K();if(D.boards.some(M=>M.id===P))return U(C,409,{error:`Board "${P}" is already registered`}),true;let et=typeof O.label=="string"&&O.label.trim()?O.label.trim():P,rt={id:P,label:et};for(let[M,X]of Object.entries(O))M==="id"||M==="label"||X!=null&&(rt[M]=X);return D.boards.push(rt),Q(D),U(C,200,{ok:true,board:rt}),true}return false}async function it(m,C,I){let u=I.pathname.match(new RegExp(`^${c(v)}/([^/]+)(/|$)`));if(!u)return false;let q=tt(decodeURIComponent(u[1]));return q?K().boards.some(P=>P.id===q)?!!await nt(q).handleRuntimeApi(m,C,I):(U(C,404,{error:`Board "${q}" not registered. POST ${v} with {id} to register it first.`}),true):(U(C,400,{error:"Invalid board id"}),true)}async function ct(m,C,I){return !!(await ot(m,C,I)||await it(m,C,I))}function dt(m){if(!K().boards.some(I=>I.id===m))throw Object.assign(new Error(`Board "${m}" not registered`),{statusCode:404});return {service:nt(m)}}return {get apiBasePath(){return v},get corsHeaders(){return h},handleApi:ct,requireBoardService:dt}}export{te as a,or as b,sr as c};//# sourceMappingURL=chunk-ZXQR7GHT.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-ZXQR7GHT.js.map
|
package/lib/cloud-storage.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var chunkH5HBXPOI_cjs=require('./chunk-H5HBXPOI.cjs');require('./chunk-PBCDDO4V.cjs'),require('./chunk-OEFTOO47.cjs'),require('./chunk-U2N6MCD5.cjs'),require('./chunk-SFVO2LB2.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-IXZG74EW.cjs'),require('./chunk-NMZ6XNLB.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-YMEIPKLW.cjs'),require('./chunk-GNFE24S7.cjs');
|
|
1
|
+
'use strict';var chunk5XHOHTLZ_cjs=require('./chunk-5XHOHTLZ.cjs'),chunkH5HBXPOI_cjs=require('./chunk-H5HBXPOI.cjs');require('./chunk-PBCDDO4V.cjs'),require('./chunk-OEFTOO47.cjs'),require('./chunk-U2N6MCD5.cjs'),require('./chunk-SFVO2LB2.cjs'),require('./chunk-G4XXRHL2.cjs'),require('./chunk-LODXIALE.cjs'),require('./chunk-IXZG74EW.cjs'),require('./chunk-NMZ6XNLB.cjs'),require('./chunk-UJ7ZTV4J.cjs'),require('./chunk-YMEIPKLW.cjs'),require('./chunk-GNFE24S7.cjs');Object.defineProperty(exports,"createAzureBlobStorage",{enumerable:true,get:function(){return chunk5XHOHTLZ_cjs.d}});Object.defineProperty(exports,"createAzureQueueStorage",{enumerable:true,get:function(){return chunk5XHOHTLZ_cjs.e}});Object.defineProperty(exports,"createCosmosAtomicRelayLock",{enumerable:true,get:function(){return chunk5XHOHTLZ_cjs.c}});Object.defineProperty(exports,"createCosmosJournalStorage",{enumerable:true,get:function(){return chunk5XHOHTLZ_cjs.b}});Object.defineProperty(exports,"createCosmosKvStorage",{enumerable:true,get:function(){return chunk5XHOHTLZ_cjs.a}});Object.defineProperty(exports,"createAsyncBoardConfigStore",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.h}});Object.defineProperty(exports,"createAsyncBoardLiveCardsPublic",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.j}});Object.defineProperty(exports,"createAsyncBoardWorkerStore",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.g}});Object.defineProperty(exports,"createAsyncCardStorageAdapter",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.c}});Object.defineProperty(exports,"createAsyncCardStore",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.d}});Object.defineProperty(exports,"createAsyncJsonStorage",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.b}});Object.defineProperty(exports,"createAsyncStateSnapshotAdapter",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.e}});Object.defineProperty(exports,"createAsyncStorageProvider",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.f}});Object.defineProperty(exports,"createHostedAsyncBoardPlatformAdapter",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.i}});Object.defineProperty(exports,"withAsyncRelayLock",{enumerable:true,get:function(){return chunkH5HBXPOI_cjs.a}});//# sourceMappingURL=cloud-storage.cjs.map
|
|
2
2
|
//# sourceMappingURL=cloud-storage.cjs.map
|
package/lib/cloud-storage.d.cts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
import { L as LiveCard, i as CardChecksumIndex, j as CardUpsertValidation, k as CardIndex, S as StateSnapshotReadView } from './board-live-cards-public-
|
|
1
|
+
import { g as AsyncJSONStorage, c as AsyncKVStorage, a as AsyncBlobStorage, b as AsyncJournalStorage, h as AsyncStorageProvider, d as AsyncAtomicRelayLock, e as AsyncQueueStorage } from './storage-async-interface-BRR4eBjx.cjs';
|
|
2
|
+
export { w as withAsyncRelayLock } from './storage-async-interface-BRR4eBjx.cjs';
|
|
3
|
+
import { L as LiveCard, i as CardChecksumIndex, j as CardUpsertValidation, k as CardIndex, S as StateSnapshotReadView } from './board-live-cards-public-DQzPe7A9.cjs';
|
|
4
|
+
export { a as AsyncBoardConfigStore, A as AsyncBoardPlatformAdapter, b as AsyncBoardWorkerDeadLetterRequest, c as AsyncBoardWorkerLeasedRequest, d as AsyncBoardWorkerQueuedRequest, e as AsyncBoardWorkerRequest, f as AsyncBoardWorkerStore, H as HostedAsyncBoardPlatformAdapterOptions, g as HostedFetchLike, h as HostedFetchResponseLike, i as createAsyncBoardConfigStore, j as createAsyncBoardWorkerStore, k as createHostedAsyncBoardPlatformAdapter } from './board-platform-adapter-async-DOfEq_HC.cjs';
|
|
5
|
+
export { A as AsyncBoardLiveCardsPublic, c as createAsyncBoardLiveCardsPublic } from './board-live-cards-public-async-CgMCYYft.cjs';
|
|
4
6
|
import { a as KindValueRef } from './storage-interface-BFiD3kyB.cjs';
|
|
5
7
|
import './execution-refs.cjs';
|
|
6
8
|
import './types-BBhqYGhE.cjs';
|
package/lib/cloud-storage.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
3
|
-
import { L as LiveCard, i as CardChecksumIndex, j as CardUpsertValidation, k as CardIndex, S as StateSnapshotReadView } from './board-live-cards-public-
|
|
1
|
+
import { g as AsyncJSONStorage, c as AsyncKVStorage, a as AsyncBlobStorage, b as AsyncJournalStorage, h as AsyncStorageProvider, d as AsyncAtomicRelayLock, e as AsyncQueueStorage } from './storage-async-interface-DhlOVPSp.js';
|
|
2
|
+
export { w as withAsyncRelayLock } from './storage-async-interface-DhlOVPSp.js';
|
|
3
|
+
import { L as LiveCard, i as CardChecksumIndex, j as CardUpsertValidation, k as CardIndex, S as StateSnapshotReadView } from './board-live-cards-public-D-DJek3X.js';
|
|
4
|
+
export { a as AsyncBoardConfigStore, A as AsyncBoardPlatformAdapter, b as AsyncBoardWorkerDeadLetterRequest, c as AsyncBoardWorkerLeasedRequest, d as AsyncBoardWorkerQueuedRequest, e as AsyncBoardWorkerRequest, f as AsyncBoardWorkerStore, H as HostedAsyncBoardPlatformAdapterOptions, g as HostedFetchLike, h as HostedFetchResponseLike, i as createAsyncBoardConfigStore, j as createAsyncBoardWorkerStore, k as createHostedAsyncBoardPlatformAdapter } from './board-platform-adapter-async-JZPCzZnH.js';
|
|
5
|
+
export { A as AsyncBoardLiveCardsPublic, c as createAsyncBoardLiveCardsPublic } from './board-live-cards-public-async-3hUuHxDx.js';
|
|
4
6
|
import { a as KindValueRef } from './storage-interface-BFiD3kyB.js';
|
|
5
7
|
import './execution-refs.js';
|
|
6
8
|
import './types-BBhqYGhE.js';
|
package/lib/cloud-storage.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{h as createAsyncBoardConfigStore,j as createAsyncBoardLiveCardsPublic,g as createAsyncBoardWorkerStore,c as createAsyncCardStorageAdapter,d as createAsyncCardStore,b as createAsyncJsonStorage,e as createAsyncStateSnapshotAdapter,f as createAsyncStorageProvider,i as createHostedAsyncBoardPlatformAdapter,a as withAsyncRelayLock}from'./chunk-VMW4Z6EF.js';import'./chunk-HEEDJEKM.js';import'./chunk-N6P2JW4W.js';import'./chunk-XQRNDX4Q.js';import'./chunk-BQS3EIEK.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-JMDHDY6M.js';import'./chunk-VLBB3D6B.js';import'./chunk-MNEOJWPS.js';import'./chunk-KBELAKIY.js';import'./chunk-FW4363Y4.js'
|
|
1
|
+
export{d as createAzureBlobStorage,e as createAzureQueueStorage,c as createCosmosAtomicRelayLock,b as createCosmosJournalStorage,a as createCosmosKvStorage}from'./chunk-S44QZUDX.js';export{h as createAsyncBoardConfigStore,j as createAsyncBoardLiveCardsPublic,g as createAsyncBoardWorkerStore,c as createAsyncCardStorageAdapter,d as createAsyncCardStore,b as createAsyncJsonStorage,e as createAsyncStateSnapshotAdapter,f as createAsyncStorageProvider,i as createHostedAsyncBoardPlatformAdapter,a as withAsyncRelayLock}from'./chunk-VMW4Z6EF.js';import'./chunk-HEEDJEKM.js';import'./chunk-N6P2JW4W.js';import'./chunk-XQRNDX4Q.js';import'./chunk-BQS3EIEK.js';import'./chunk-VGT3TRQG.js';import'./chunk-WDPOGXTY.js';import'./chunk-JMDHDY6M.js';import'./chunk-VLBB3D6B.js';import'./chunk-MNEOJWPS.js';import'./chunk-KBELAKIY.js';import'./chunk-FW4363Y4.js';//# sourceMappingURL=cloud-storage.js.map
|
|
2
2
|
//# sourceMappingURL=cloud-storage.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';require('../chunk-GNFE24S7.cjs');var h=new TextEncoder;function y(o){let r="";for(let i of h.encode(String(o)))r+=String.fromCharCode(i);return (typeof btoa=="function"?btoa(r):Buffer.from(r,"binary").toString("base64")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function p(o){let r=String(o).replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-String(o).length%4)%4),s=typeof atob=="function"?atob(r):Buffer.from(r,"base64").toString("binary"),i=new Uint8Array(s.length);for(let n=0;n<s.length;n+=1)i[n]=s.charCodeAt(n);return new TextDecoder().decode(i)}function g(...o){return o.map(r=>String(r??"").trim()).filter(Boolean).join("/")}function u(o){return !!(o&&typeof o=="object"&&o.code==="storage/object-not-found")}function S(o,r){let s=o.ref(r);function i(e){return s.child(y(e))}async function n(e){let t=await e.getDownloadURL(),c=await fetch(t,{cache:"no-store"});if(!c.ok)throw new Error(`Failed to fetch storage object ${e.fullPath}: ${c.status}`);return c.text()}async function a(e){let t=await e.getDownloadURL(),c=await fetch(t,{cache:"no-store"});if(!c.ok)throw new Error(`Failed to fetch storage object ${e.fullPath}: ${c.status}`);return new Uint8Array(await c.arrayBuffer())}async function l(){let e=[];async function t(c){let d=await c.listAll();for(let f of d.prefixes)await t(f);for(let f of d.items){let w=f.name||f.fullPath.slice(s.fullPath.length+1);e.push(p(w));}}try{await t(s);}catch(c){if(u(c))return [];throw c}return e.sort()}return {async read(e){try{return await n(i(e))}catch(t){if(u(t))return null;throw t}},async write(e,t){await i(e).putString(String(t),"raw",{contentType:"text/plain; charset=utf-8"});},async exists(e){try{return await i(e).getMetadata(),!0}catch(t){if(u(t))return false;throw t}},async remove(e){try{await i(e).delete();}catch(t){if(!u(t))throw t}},async readBytes(e){try{return await a(i(e))}catch(t){if(u(t))return null;throw t}},async writeBytes(e,t){await i(e).put(t,{contentType:"application/octet-stream"});},async listKeys(e=""){let t=await l();return e?t.filter(c=>c.startsWith(e)):t},async stat(e){try{let t=await i(e).getMetadata();return {key:e,size:Number(t.size??0),updatedAt:t.updated??void 0,contentType:t.contentType??void 0}}catch(t){if(u(t))return null;throw t}},keyRef(e){return {kind:"firebase-storage",value:g(r,y(e))}}}}function b(o,r){let s=S(o,r);async function i(n="scratch-",a=""){let l=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`;return `${n}${l}${a}`}return {...s,getUniqueKey:i,async create(n,a="scratch-",l=""){let e=await i(a,l);return await s.write(e,n),e},keyRef(n){return {kind:"firebase-storage",value:g(r,y(n))}},config:{async get(n){let a=await s.read(`__config__/${n}`);if(a==null)return null;try{return JSON.parse(a)}catch{return a}},async set(n,a){await s.write(`__config__/${n}`,JSON.stringify(a));}}}}function m(o,r,s){let i=g("boards",s,"blobs"),n=g("boards",s,"scratch");return {...o,blobStorage(a){return S(r,g(i,a||"root"))},scratchStorage(){return b(r,n)},scratchStorageForRef(){return b(r,n)},async resolveBlob(a){if(a?.kind==="firebase-storage"&&typeof a.value=="string"){let l=await r.ref(a.value).getDownloadURL(),e=await fetch(l,{cache:"no-store"});if(!e.ok)throw new Error(`Failed to resolve storage blob ${a.value}: ${e.status}`);return e.text()}return typeof o.resolveBlob=="function"?o.resolveBlob(a):null}}}
|
|
2
|
+
exports.createFirebaseStorageBlobStore=S;exports.createFirebaseStorageScratchStore=b;exports.wrapWithFirebaseStorageBlobs=m;//# sourceMappingURL=index.cjs.map
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { a as KindValueRef } from '../storage-interface-BFiD3kyB.cjs';
|
|
2
|
+
import { a as AsyncBlobStorage, f as AsyncScratchStorage } from '../storage-async-interface-BRR4eBjx.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* firebase-storage — browser-safe Firebase Storage (Google Cloud Storage) blob
|
|
6
|
+
* primitives + a helper that swaps any existing `AsyncBoardPlatformAdapter`'s
|
|
7
|
+
* blob/scratch namespaces over to Firebase Storage.
|
|
8
|
+
*
|
|
9
|
+
* This module never imports firebase. The host application initializes
|
|
10
|
+
* `firebase.app()` and passes the resulting `firebase.storage()` handle in.
|
|
11
|
+
* That keeps Firebase SDK init (project-specific, host-app concern) out of
|
|
12
|
+
* yaml-flow while letting any consumer reuse the same Storage adapter wiring.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
interface FirebaseStorageMetadataLike {
|
|
16
|
+
readonly size?: number | string;
|
|
17
|
+
readonly updated?: string;
|
|
18
|
+
readonly contentType?: string;
|
|
19
|
+
}
|
|
20
|
+
interface FirebaseStorageListResultLike {
|
|
21
|
+
readonly items: FirebaseStorageReferenceLike[];
|
|
22
|
+
readonly prefixes: FirebaseStorageReferenceLike[];
|
|
23
|
+
}
|
|
24
|
+
interface FirebaseStorageReferenceLike {
|
|
25
|
+
readonly fullPath: string;
|
|
26
|
+
readonly name: string;
|
|
27
|
+
child(path: string): FirebaseStorageReferenceLike;
|
|
28
|
+
getDownloadURL(): Promise<string>;
|
|
29
|
+
getMetadata(): Promise<FirebaseStorageMetadataLike>;
|
|
30
|
+
delete(): Promise<void>;
|
|
31
|
+
listAll(): Promise<FirebaseStorageListResultLike>;
|
|
32
|
+
putString(data: string, format?: 'raw' | 'base64' | 'base64url' | 'data_url', metadata?: {
|
|
33
|
+
contentType?: string;
|
|
34
|
+
}): Promise<unknown>;
|
|
35
|
+
put(data: ArrayBuffer | Uint8Array | Blob, metadata?: {
|
|
36
|
+
contentType?: string;
|
|
37
|
+
}): Promise<unknown>;
|
|
38
|
+
}
|
|
39
|
+
interface FirebaseStorageLike {
|
|
40
|
+
ref(path?: string): FirebaseStorageReferenceLike;
|
|
41
|
+
}
|
|
42
|
+
interface FirebaseStorageBlobStore extends AsyncBlobStorage {
|
|
43
|
+
keyRef(key: string): KindValueRef;
|
|
44
|
+
}
|
|
45
|
+
declare function createFirebaseStorageBlobStore(storage: FirebaseStorageLike, basePath: string): FirebaseStorageBlobStore;
|
|
46
|
+
declare function createFirebaseStorageScratchStore(storage: FirebaseStorageLike, basePath: string): AsyncScratchStorage;
|
|
47
|
+
/**
|
|
48
|
+
* Replace the blob/scratch namespaces of an existing board adapter (e.g. one
|
|
49
|
+
* produced by `createFirestoreBoardAdapter`) with Firebase Storage-backed
|
|
50
|
+
* implementations rooted at `boards/<boardId>/{blobs,scratch}/`.
|
|
51
|
+
*
|
|
52
|
+
* Pass in a Firebase Storage handle (`firebase.app().storage()`). All other
|
|
53
|
+
* adapter methods are forwarded unchanged.
|
|
54
|
+
*/
|
|
55
|
+
declare function wrapWithFirebaseStorageBlobs<T extends Record<string, any>>(boardAdapter: T, storage: FirebaseStorageLike, boardId: string): T;
|
|
56
|
+
|
|
57
|
+
export { type FirebaseStorageBlobStore, type FirebaseStorageLike, type FirebaseStorageListResultLike, type FirebaseStorageMetadataLike, type FirebaseStorageReferenceLike, createFirebaseStorageBlobStore, createFirebaseStorageScratchStore, wrapWithFirebaseStorageBlobs };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { a as KindValueRef } from '../storage-interface-BFiD3kyB.js';
|
|
2
|
+
import { a as AsyncBlobStorage, f as AsyncScratchStorage } from '../storage-async-interface-DhlOVPSp.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* firebase-storage — browser-safe Firebase Storage (Google Cloud Storage) blob
|
|
6
|
+
* primitives + a helper that swaps any existing `AsyncBoardPlatformAdapter`'s
|
|
7
|
+
* blob/scratch namespaces over to Firebase Storage.
|
|
8
|
+
*
|
|
9
|
+
* This module never imports firebase. The host application initializes
|
|
10
|
+
* `firebase.app()` and passes the resulting `firebase.storage()` handle in.
|
|
11
|
+
* That keeps Firebase SDK init (project-specific, host-app concern) out of
|
|
12
|
+
* yaml-flow while letting any consumer reuse the same Storage adapter wiring.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
interface FirebaseStorageMetadataLike {
|
|
16
|
+
readonly size?: number | string;
|
|
17
|
+
readonly updated?: string;
|
|
18
|
+
readonly contentType?: string;
|
|
19
|
+
}
|
|
20
|
+
interface FirebaseStorageListResultLike {
|
|
21
|
+
readonly items: FirebaseStorageReferenceLike[];
|
|
22
|
+
readonly prefixes: FirebaseStorageReferenceLike[];
|
|
23
|
+
}
|
|
24
|
+
interface FirebaseStorageReferenceLike {
|
|
25
|
+
readonly fullPath: string;
|
|
26
|
+
readonly name: string;
|
|
27
|
+
child(path: string): FirebaseStorageReferenceLike;
|
|
28
|
+
getDownloadURL(): Promise<string>;
|
|
29
|
+
getMetadata(): Promise<FirebaseStorageMetadataLike>;
|
|
30
|
+
delete(): Promise<void>;
|
|
31
|
+
listAll(): Promise<FirebaseStorageListResultLike>;
|
|
32
|
+
putString(data: string, format?: 'raw' | 'base64' | 'base64url' | 'data_url', metadata?: {
|
|
33
|
+
contentType?: string;
|
|
34
|
+
}): Promise<unknown>;
|
|
35
|
+
put(data: ArrayBuffer | Uint8Array | Blob, metadata?: {
|
|
36
|
+
contentType?: string;
|
|
37
|
+
}): Promise<unknown>;
|
|
38
|
+
}
|
|
39
|
+
interface FirebaseStorageLike {
|
|
40
|
+
ref(path?: string): FirebaseStorageReferenceLike;
|
|
41
|
+
}
|
|
42
|
+
interface FirebaseStorageBlobStore extends AsyncBlobStorage {
|
|
43
|
+
keyRef(key: string): KindValueRef;
|
|
44
|
+
}
|
|
45
|
+
declare function createFirebaseStorageBlobStore(storage: FirebaseStorageLike, basePath: string): FirebaseStorageBlobStore;
|
|
46
|
+
declare function createFirebaseStorageScratchStore(storage: FirebaseStorageLike, basePath: string): AsyncScratchStorage;
|
|
47
|
+
/**
|
|
48
|
+
* Replace the blob/scratch namespaces of an existing board adapter (e.g. one
|
|
49
|
+
* produced by `createFirestoreBoardAdapter`) with Firebase Storage-backed
|
|
50
|
+
* implementations rooted at `boards/<boardId>/{blobs,scratch}/`.
|
|
51
|
+
*
|
|
52
|
+
* Pass in a Firebase Storage handle (`firebase.app().storage()`). All other
|
|
53
|
+
* adapter methods are forwarded unchanged.
|
|
54
|
+
*/
|
|
55
|
+
declare function wrapWithFirebaseStorageBlobs<T extends Record<string, any>>(boardAdapter: T, storage: FirebaseStorageLike, boardId: string): T;
|
|
56
|
+
|
|
57
|
+
export { type FirebaseStorageBlobStore, type FirebaseStorageLike, type FirebaseStorageListResultLike, type FirebaseStorageMetadataLike, type FirebaseStorageReferenceLike, createFirebaseStorageBlobStore, createFirebaseStorageScratchStore, wrapWithFirebaseStorageBlobs };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import'../chunk-FW4363Y4.js';var h=new TextEncoder;function y(o){let r="";for(let i of h.encode(String(o)))r+=String.fromCharCode(i);return (typeof btoa=="function"?btoa(r):Buffer.from(r,"binary").toString("base64")).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function p(o){let r=String(o).replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-String(o).length%4)%4),s=typeof atob=="function"?atob(r):Buffer.from(r,"base64").toString("binary"),i=new Uint8Array(s.length);for(let n=0;n<s.length;n+=1)i[n]=s.charCodeAt(n);return new TextDecoder().decode(i)}function g(...o){return o.map(r=>String(r??"").trim()).filter(Boolean).join("/")}function u(o){return !!(o&&typeof o=="object"&&o.code==="storage/object-not-found")}function S(o,r){let s=o.ref(r);function i(e){return s.child(y(e))}async function n(e){let t=await e.getDownloadURL(),c=await fetch(t,{cache:"no-store"});if(!c.ok)throw new Error(`Failed to fetch storage object ${e.fullPath}: ${c.status}`);return c.text()}async function a(e){let t=await e.getDownloadURL(),c=await fetch(t,{cache:"no-store"});if(!c.ok)throw new Error(`Failed to fetch storage object ${e.fullPath}: ${c.status}`);return new Uint8Array(await c.arrayBuffer())}async function l(){let e=[];async function t(c){let d=await c.listAll();for(let f of d.prefixes)await t(f);for(let f of d.items){let w=f.name||f.fullPath.slice(s.fullPath.length+1);e.push(p(w));}}try{await t(s);}catch(c){if(u(c))return [];throw c}return e.sort()}return {async read(e){try{return await n(i(e))}catch(t){if(u(t))return null;throw t}},async write(e,t){await i(e).putString(String(t),"raw",{contentType:"text/plain; charset=utf-8"});},async exists(e){try{return await i(e).getMetadata(),!0}catch(t){if(u(t))return false;throw t}},async remove(e){try{await i(e).delete();}catch(t){if(!u(t))throw t}},async readBytes(e){try{return await a(i(e))}catch(t){if(u(t))return null;throw t}},async writeBytes(e,t){await i(e).put(t,{contentType:"application/octet-stream"});},async listKeys(e=""){let t=await l();return e?t.filter(c=>c.startsWith(e)):t},async stat(e){try{let t=await i(e).getMetadata();return {key:e,size:Number(t.size??0),updatedAt:t.updated??void 0,contentType:t.contentType??void 0}}catch(t){if(u(t))return null;throw t}},keyRef(e){return {kind:"firebase-storage",value:g(r,y(e))}}}}function b(o,r){let s=S(o,r);async function i(n="scratch-",a=""){let l=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`;return `${n}${l}${a}`}return {...s,getUniqueKey:i,async create(n,a="scratch-",l=""){let e=await i(a,l);return await s.write(e,n),e},keyRef(n){return {kind:"firebase-storage",value:g(r,y(n))}},config:{async get(n){let a=await s.read(`__config__/${n}`);if(a==null)return null;try{return JSON.parse(a)}catch{return a}},async set(n,a){await s.write(`__config__/${n}`,JSON.stringify(a));}}}}function m(o,r,s){let i=g("boards",s,"blobs"),n=g("boards",s,"scratch");return {...o,blobStorage(a){return S(r,g(i,a||"root"))},scratchStorage(){return b(r,n)},scratchStorageForRef(){return b(r,n)},async resolveBlob(a){if(a?.kind==="firebase-storage"&&typeof a.value=="string"){let l=await r.ref(a.value).getDownloadURL(),e=await fetch(l,{cache:"no-store"});if(!e.ok)throw new Error(`Failed to resolve storage blob ${a.value}: ${e.status}`);return e.text()}return typeof o.resolveBlob=="function"?o.resolveBlob(a):null}}}
|
|
2
|
+
export{S as createFirebaseStorageBlobStore,b as createFirebaseStorageScratchStore,m as wrapWithFirebaseStorageBlobs};//# sourceMappingURL=index.js.map
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var chunkIPLSRN6P_cjs=require('../chunk-IPLSRN6P.cjs');require('../chunk-NKIQRCOM.cjs'),require('../chunk-5XHOHTLZ.cjs');var chunkH5HBXPOI_cjs=require('../chunk-H5HBXPOI.cjs');require('../chunk-PBCDDO4V.cjs'),require('../chunk-OEFTOO47.cjs'),require('../chunk-U2N6MCD5.cjs');var chunkSFVO2LB2_cjs=require('../chunk-SFVO2LB2.cjs');require('../chunk-G4XXRHL2.cjs'),require('../chunk-LODXIALE.cjs'),require('../chunk-IXZG74EW.cjs'),require('../chunk-NMZ6XNLB.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-YMEIPKLW.cjs'),require('../chunk-GNFE24S7.cjs');function P(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function N(e){let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}function _(e){let t=new TextEncoder().encode(e);return P(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function K(e){return chunkIPLSRN6P_cjs.a(e).slice(0,16)}function E(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}function c(e){return _(String(e))}function f(){let e=String(Date.now()).padStart(13,"0"),t=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `${e}-${t}`}function O(e){try{return chunkSFVO2LB2_cjs.b(e)}catch{return null}}function T(e,t){let n=O(e);return n?.kind==="firestore"&&n.value?n.value:t}function M(e,t){return e.collection("boards").doc(t)}function d(e,t,n){return M(e,t).collection(n)}function w(e){return {kind:"firestore",value:String(e)}}function g(e){return chunkSFVO2LB2_cjs.a(w(e))}function U(e){return {baseRef:w(`boards/${e}`),cardStoreRef:g(`boards/${e}/cards`),outputsStoreRef:g(`boards/${e}/runtime-out`),scratchStoreRef:g(`boards/${e}/scratch`),archiveStoreRef:g(`boards/${e}/archive`),chatStoreRef:g(`boards/${e}/chat`),artifactsStoreRef:g(`boards/${e}/files`)}}function q(e){return {async read(t){let n=await e.doc(c(t)).get();return n.exists?n.data()?.value??null:null},async write(t,n){await e.doc(c(t)).set({k:t,value:n});},async delete(t){await e.doc(c(t)).delete();},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(i=>i.data()?.k??i.id)}}}function Q(e){return {async append(t){let n=f();return await e.doc(n).set({id:n,createdAt:new Date().toISOString(),payload:t}),{id:n,payload:t}},async readAll(){return (await e.orderBy("id").get()).docs.map(n=>{let r=n.data()??{};return {id:String(r.id??n.id),payload:r.payload}})},async readAfter(t){let i=(await(t?e.where("id",">",t).orderBy("id"):e.orderBy("id")).get()).docs.map(a=>{let s=a.data()??{};return {id:String(s.id??a.id),payload:s.payload}});return {entries:i,newCursor:i.length>0?i[i.length-1].id:t}},async clear(){let t=await e.get();if(typeof e.firestore.batch=="function"){let n=e.firestore.batch();for(let r of t.docs)n.delete(e.doc(r.id));await n.commit();return}await Promise.all(t.docs.map(n=>e.doc(n.id).delete()));}}}function k(e){return {async read(t){let n=await e.doc(c(t)).get();return n.exists?n.data()?.content??null:null},async write(t,n){await e.doc(c(t)).set({k:t,content:n});},async exists(t){return (await e.doc(c(t)).get()).exists},async remove(t){await e.doc(c(t)).delete();},async readBytes(t){let n=await e.doc(c(t)).get();if(!n.exists)return null;let r=n.data()??{};return typeof r.bytesBase64=="string"?N(r.bytesBase64):typeof r.content=="string"?new TextEncoder().encode(r.content):null},async writeBytes(t,n){await e.doc(c(t)).set({k:t,bytesBase64:P(n)});},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(i=>i.data()?.k??i.id)},async stat(t){let n=await e.doc(c(t)).get();if(!n.exists)return null;let r=n.data()??{},i=typeof r.bytesBase64=="string"?Math.floor(r.bytesBase64.length*3/4):typeof r.content=="string"?r.content.length:0;return {key:t,size:i,contentType:String(r.contentType??"application/octet-stream")}}}}function D(e){let t=k(e);return {...t,async getUniqueKey(n="scratch-",r=""){return `${n}${f()}${r}`},async create(n,r="scratch-",i=""){let a=`${r}${f()}${i}`;return await t.write(a,n),a},keyRef(n){return w(`${e.path}/${c(n)}`)},config:{async get(n){let r=await t.read(`__config__/${n}`);if(r==null)return null;try{return JSON.parse(r)}catch{return r}},async set(n,r){await t.write(`__config__/${n}`,JSON.stringify(r));}}}}function C(e,t){let n=M(e,t);return {stream(r){return Q(n.collection(`archive-stream-${r}`))},blob(r){return k(n.collection(`archive-blob-${r}`))},async listStreams(r=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(a=>a.path.split("/").at(-1)??"").filter(a=>a.startsWith(`archive-stream-${r}`)).map(a=>a.slice(15))},async listBlobs(r=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(a=>a.path.split("/").at(-1)??"").filter(a=>a.startsWith(`archive-blob-${r}`)).map(a=>a.slice(13))},config:{async get(r){let i=await n.collection("archive-config").doc("main").get();return i.exists?i.data()?.[r]??null:null},async set(r,i){await n.collection("archive-config").doc("main").set({[r]:i},{merge:true});}}}}function I(e,t={}){let n=t.holderId??E(),r=t.ttlMs??3e4;return {async tryAcquire(){try{await e.firestore.runTransaction(async i=>{let a=await i.get(e),s=new Date().toISOString();if(a.exists){let o=a.data()??{};if(o.held===!0&&typeof o.expiresAt=="string"&&o.expiresAt>s)throw Object.assign(new Error("locked"),{code:"locked"})}i.set(e,{held:!0,holderId:n,acquiredAt:s,expiresAt:new Date(Date.now()+r).toISOString()});});}catch(i){if(i?.code==="locked")return null;throw i}return async()=>{try{await e.firestore.runTransaction(async i=>{let a=await i.get(e);if(!a.exists)return;(a.data()??{}).holderId===n&&i.update(e,{held:!1,holderId:null});});}catch{}}}}}function m(e,t={}){let n=t.defaultVisibilityMs??3e4;return {async enqueue(r){let i=f(),a=new Date().toISOString();return await e.doc(i).set({id:i,body:r,enqueuedAt:a,attempt:0,visibleAfter:a,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null}),{id:i,body:r,enqueuedAt:a,attempt:0}},async enqueueIfAbsent(r,i){if((await e.where("dedupKey","==",i).where("dead","==",false).limit(1).get()).docs.length>0)return null;let s=f(),o=new Date().toISOString();return await e.doc(s).set({id:s,body:r,dedupKey:i,enqueuedAt:o,attempt:0,visibleAfter:o,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null}),{id:s,body:r,enqueuedAt:o,attempt:0}},async lease(r={}){let i=Math.max(1,Number(r.max??1)),a=Math.max(1,Number(r.visibilityMs??n)),s=new Date().toISOString(),o=await e.where("dead","==",false).where("visibleAfter","<=",s).orderBy("visibleAfter").limit(i*4).get(),l=[];for(let y of o.docs){if(l.length>=i)break;let S=e.doc(y.id);try{let p=null;await e.firestore.runTransaction(async A=>{let F=await A.get(S);if(!F.exists)throw new Error("gone");let u=F.data()??{},h=new Date().toISOString();if(u.dead===!0)throw new Error("dead");if(typeof u.visibleAfter=="string"&&u.visibleAfter>h)throw new Error("hidden");if(u.leaseToken&&typeof u.leaseExpiresAt=="string"&&u.leaseExpiresAt>h)throw new Error("leased");let b=E(),v=new Date(Date.now()+a).toISOString(),R=Number(u.attempt??0)+1;A.update(S,{leaseToken:b,leaseExpiresAt:v,attempt:R}),p={id:String(u.id??y.id),body:u.body,enqueuedAt:String(u.enqueuedAt??h),attempt:R,leaseToken:b,leaseExpiresAt:v};}),p&&l.push(p);}catch{}}return l},async ack(r,i){try{return await e.firestore.runTransaction(async a=>{let s=e.doc(r),o=await a.get(s);if(!o.exists)return;if((o.data()??{}).leaseToken!==i)throw new Error("token mismatch");a.delete(s);}),!0}catch{return false}},async nack(r,i,a={}){try{return await e.firestore.runTransaction(async s=>{let o=e.doc(r),l=await s.get(o);if(!l.exists)return;if((l.data()??{}).leaseToken!==i)throw new Error("token mismatch");a.dead===!0?s.update(o,{dead:!0,deadReason:a.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):s.update(o,{leaseToken:null,leaseExpiresAt:null,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async peekActive(r=""){return (await e.where("dead","==",false).orderBy("enqueuedAt").get()).docs.map(a=>a.data()??{}).filter(a=>!r||String(a.id??"").startsWith(r)).map(a=>({id:String(a.id??""),body:a.body,enqueuedAt:String(a.enqueuedAt??""),attempt:Number(a.attempt??0)}))},async peekDeadLetter(r=""){return (await e.where("dead","==",true).orderBy("enqueuedAt").get()).docs.map(a=>a.data()??{}).filter(a=>!r||String(a.id??"").startsWith(r)).map(a=>({id:String(a.id??""),body:a.body,enqueuedAt:String(a.enqueuedAt??""),attempt:Number(a.attempt??0),reason:a.deadReason}))}}}function V(e,t,n={}){return chunkH5HBXPOI_cjs.i({boardId:t,kvStorage(r){return q(d(e,t,`kv-${r||"root"}`))},kvStorageForRef(r){return q(e.collection(T(r,`boards/${t}/kv-root`)))},blobStorage(r){return k(d(e,t,`blobs-${r||"root"}`))},scratchStorage(){return D(d(e,t,"scratch"))},scratchStorageForRef(r){return D(e.collection(T(r,`boards/${t}/scratch`)))},archiveFactory(){return C(e,t)},archiveFactoryForRef(r){let i=O(r),a=i?.kind==="firestore-board"?i.value:t;return C(e,a)},journalStorage(){return Q(d(e,t,"journal"))},queueStorage:m(d(e,t,"worker-queue")),chatAgentQueueStorage:m(d(e,t,"chat-queue")),processAccumulatedQueueStorage:m(d(e,t,"process-queue")),lock:I(d(e,t,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(r){return K(r)},genId(){return f()},requestProcessAccumulated:n.requestProcessAccumulated,publishBoardChangeNotifications:n.publishBoardChangeNotifications,onWarn:r=>console.warn(`[firestore-board-adapter:${t}] ${r}`)})}function z(e,t,n={}){return {refs:{...U(t),...n.refs??{}},boardAdapter:V(e,t,n)}}
|
|
2
|
+
exports.createFirestoreArchiveFactory=C;exports.createFirestoreBlobStorage=k;exports.createFirestoreBoardAdapter=V;exports.createFirestoreBoardRefs=U;exports.createFirestoreBoardRuntimeBundle=z;exports.createFirestoreJournalStorage=Q;exports.createFirestoreKvStorage=q;exports.createFirestoreLock=I;exports.createFirestoreQueueStorage=m;exports.createFirestoreScratchStorage=D;exports.makeFirestoreRef=w;exports.serializeFirestoreRef=g;//# sourceMappingURL=index.cjs.map
|
|
3
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { a as KindValueRef } from '../storage-interface-BFiD3kyB.cjs';
|
|
2
|
+
import { A as AsyncArchiveFactory, a as AsyncBlobStorage, b as AsyncJournalStorage, c as AsyncKVStorage, d as AsyncAtomicRelayLock, e as AsyncQueueStorage, f as AsyncScratchStorage } from '../storage-async-interface-BRR4eBjx.cjs';
|
|
3
|
+
import { A as AsyncBoardPlatformAdapter } from '../board-platform-adapter-async-DOfEq_HC.cjs';
|
|
4
|
+
import '../board-live-cards-public-DQzPe7A9.cjs';
|
|
5
|
+
import '../execution-refs.cjs';
|
|
6
|
+
import '../types-BBhqYGhE.cjs';
|
|
7
|
+
|
|
8
|
+
interface FirestoreDocumentSnapshotLike {
|
|
9
|
+
readonly exists: boolean;
|
|
10
|
+
readonly id: string;
|
|
11
|
+
data(): Record<string, any> | undefined;
|
|
12
|
+
}
|
|
13
|
+
interface FirestoreQuerySnapshotLike {
|
|
14
|
+
readonly docs: FirestoreDocumentSnapshotLike[];
|
|
15
|
+
readonly empty?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface FirestoreTransactionLike {
|
|
18
|
+
get(ref: FirestoreDocumentLike): Promise<FirestoreDocumentSnapshotLike>;
|
|
19
|
+
set(ref: FirestoreDocumentLike, data: Record<string, any>, options?: Record<string, any>): void;
|
|
20
|
+
update(ref: FirestoreDocumentLike, data: Record<string, any>): void;
|
|
21
|
+
delete(ref: FirestoreDocumentLike): void;
|
|
22
|
+
}
|
|
23
|
+
interface FirestoreQueryLike {
|
|
24
|
+
get(): Promise<FirestoreQuerySnapshotLike>;
|
|
25
|
+
where(field: string, op: string, value: unknown): FirestoreQueryLike;
|
|
26
|
+
orderBy(field: string, direction?: 'asc' | 'desc'): FirestoreQueryLike;
|
|
27
|
+
limit(count: number): FirestoreQueryLike;
|
|
28
|
+
}
|
|
29
|
+
interface FirestoreCollectionLike extends FirestoreQueryLike {
|
|
30
|
+
readonly path: string;
|
|
31
|
+
readonly firestore: FirestoreLike;
|
|
32
|
+
doc(id?: string): FirestoreDocumentLike;
|
|
33
|
+
}
|
|
34
|
+
interface FirestoreDocumentLike {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly path: string;
|
|
37
|
+
readonly firestore: FirestoreLike;
|
|
38
|
+
get(): Promise<FirestoreDocumentSnapshotLike>;
|
|
39
|
+
set(data: Record<string, any>, options?: Record<string, any>): Promise<void>;
|
|
40
|
+
update(data: Record<string, any>): Promise<void>;
|
|
41
|
+
delete(): Promise<void>;
|
|
42
|
+
collection(name: string): FirestoreCollectionLike;
|
|
43
|
+
listCollections?(): Promise<FirestoreCollectionLike[]>;
|
|
44
|
+
}
|
|
45
|
+
interface FirestoreLike {
|
|
46
|
+
collection(path: string): FirestoreCollectionLike;
|
|
47
|
+
runTransaction<T>(updateFn: (tx: FirestoreTransactionLike) => Promise<T>): Promise<T>;
|
|
48
|
+
batch?(): {
|
|
49
|
+
delete(ref: FirestoreDocumentLike): void;
|
|
50
|
+
commit(): Promise<void>;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
interface FirestoreBoardRefs {
|
|
54
|
+
baseRef: KindValueRef;
|
|
55
|
+
cardStoreRef: string;
|
|
56
|
+
outputsStoreRef: string;
|
|
57
|
+
scratchStoreRef: string;
|
|
58
|
+
archiveStoreRef: string;
|
|
59
|
+
chatStoreRef: string;
|
|
60
|
+
artifactsStoreRef: string;
|
|
61
|
+
}
|
|
62
|
+
interface FirestoreQueueStorageOptions {
|
|
63
|
+
defaultVisibilityMs?: number;
|
|
64
|
+
}
|
|
65
|
+
interface FirestoreBoardAdapterOptions {
|
|
66
|
+
refs?: Partial<FirestoreBoardRefs>;
|
|
67
|
+
holderId?: string;
|
|
68
|
+
requestProcessAccumulated?: () => void | Promise<void>;
|
|
69
|
+
publishBoardChangeNotifications?: (notifications: unknown[]) => void | Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
declare function makeFirestoreRef(path: string): KindValueRef;
|
|
72
|
+
declare function serializeFirestoreRef(path: string): string;
|
|
73
|
+
declare function createFirestoreBoardRefs(boardId: string): FirestoreBoardRefs;
|
|
74
|
+
declare function createFirestoreKvStorage(col: FirestoreCollectionLike): AsyncKVStorage;
|
|
75
|
+
declare function createFirestoreJournalStorage(col: FirestoreCollectionLike): AsyncJournalStorage;
|
|
76
|
+
declare function createFirestoreBlobStorage(col: FirestoreCollectionLike): AsyncBlobStorage;
|
|
77
|
+
declare function createFirestoreScratchStorage(col: FirestoreCollectionLike): AsyncScratchStorage;
|
|
78
|
+
declare function createFirestoreArchiveFactory(db: FirestoreLike, boardId: string): AsyncArchiveFactory;
|
|
79
|
+
declare function createFirestoreLock(lockDoc: FirestoreDocumentLike, opts?: {
|
|
80
|
+
holderId?: string;
|
|
81
|
+
ttlMs?: number;
|
|
82
|
+
}): AsyncAtomicRelayLock;
|
|
83
|
+
declare function createFirestoreQueueStorage(col: FirestoreCollectionLike, opts?: FirestoreQueueStorageOptions): AsyncQueueStorage;
|
|
84
|
+
declare function createFirestoreBoardAdapter(db: FirestoreLike, boardId: string, options?: FirestoreBoardAdapterOptions): AsyncBoardPlatformAdapter;
|
|
85
|
+
declare function createFirestoreBoardRuntimeBundle(db: FirestoreLike, boardId: string, options?: FirestoreBoardAdapterOptions): {
|
|
86
|
+
refs: {
|
|
87
|
+
baseRef: KindValueRef;
|
|
88
|
+
cardStoreRef: string;
|
|
89
|
+
outputsStoreRef: string;
|
|
90
|
+
scratchStoreRef: string;
|
|
91
|
+
archiveStoreRef: string;
|
|
92
|
+
chatStoreRef: string;
|
|
93
|
+
artifactsStoreRef: string;
|
|
94
|
+
};
|
|
95
|
+
boardAdapter: AsyncBoardPlatformAdapter;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export { type FirestoreBoardAdapterOptions, type FirestoreBoardRefs, type FirestoreCollectionLike, type FirestoreDocumentLike, type FirestoreDocumentSnapshotLike, type FirestoreLike, type FirestoreQueryLike, type FirestoreQuerySnapshotLike, type FirestoreQueueStorageOptions, type FirestoreTransactionLike, createFirestoreArchiveFactory, createFirestoreBlobStorage, createFirestoreBoardAdapter, createFirestoreBoardRefs, createFirestoreBoardRuntimeBundle, createFirestoreJournalStorage, createFirestoreKvStorage, createFirestoreLock, createFirestoreQueueStorage, createFirestoreScratchStorage, makeFirestoreRef, serializeFirestoreRef };
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { a as KindValueRef } from '../storage-interface-BFiD3kyB.js';
|
|
2
|
+
import { A as AsyncArchiveFactory, a as AsyncBlobStorage, b as AsyncJournalStorage, c as AsyncKVStorage, d as AsyncAtomicRelayLock, e as AsyncQueueStorage, f as AsyncScratchStorage } from '../storage-async-interface-DhlOVPSp.js';
|
|
3
|
+
import { A as AsyncBoardPlatformAdapter } from '../board-platform-adapter-async-JZPCzZnH.js';
|
|
4
|
+
import '../board-live-cards-public-D-DJek3X.js';
|
|
5
|
+
import '../execution-refs.js';
|
|
6
|
+
import '../types-BBhqYGhE.js';
|
|
7
|
+
|
|
8
|
+
interface FirestoreDocumentSnapshotLike {
|
|
9
|
+
readonly exists: boolean;
|
|
10
|
+
readonly id: string;
|
|
11
|
+
data(): Record<string, any> | undefined;
|
|
12
|
+
}
|
|
13
|
+
interface FirestoreQuerySnapshotLike {
|
|
14
|
+
readonly docs: FirestoreDocumentSnapshotLike[];
|
|
15
|
+
readonly empty?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface FirestoreTransactionLike {
|
|
18
|
+
get(ref: FirestoreDocumentLike): Promise<FirestoreDocumentSnapshotLike>;
|
|
19
|
+
set(ref: FirestoreDocumentLike, data: Record<string, any>, options?: Record<string, any>): void;
|
|
20
|
+
update(ref: FirestoreDocumentLike, data: Record<string, any>): void;
|
|
21
|
+
delete(ref: FirestoreDocumentLike): void;
|
|
22
|
+
}
|
|
23
|
+
interface FirestoreQueryLike {
|
|
24
|
+
get(): Promise<FirestoreQuerySnapshotLike>;
|
|
25
|
+
where(field: string, op: string, value: unknown): FirestoreQueryLike;
|
|
26
|
+
orderBy(field: string, direction?: 'asc' | 'desc'): FirestoreQueryLike;
|
|
27
|
+
limit(count: number): FirestoreQueryLike;
|
|
28
|
+
}
|
|
29
|
+
interface FirestoreCollectionLike extends FirestoreQueryLike {
|
|
30
|
+
readonly path: string;
|
|
31
|
+
readonly firestore: FirestoreLike;
|
|
32
|
+
doc(id?: string): FirestoreDocumentLike;
|
|
33
|
+
}
|
|
34
|
+
interface FirestoreDocumentLike {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly path: string;
|
|
37
|
+
readonly firestore: FirestoreLike;
|
|
38
|
+
get(): Promise<FirestoreDocumentSnapshotLike>;
|
|
39
|
+
set(data: Record<string, any>, options?: Record<string, any>): Promise<void>;
|
|
40
|
+
update(data: Record<string, any>): Promise<void>;
|
|
41
|
+
delete(): Promise<void>;
|
|
42
|
+
collection(name: string): FirestoreCollectionLike;
|
|
43
|
+
listCollections?(): Promise<FirestoreCollectionLike[]>;
|
|
44
|
+
}
|
|
45
|
+
interface FirestoreLike {
|
|
46
|
+
collection(path: string): FirestoreCollectionLike;
|
|
47
|
+
runTransaction<T>(updateFn: (tx: FirestoreTransactionLike) => Promise<T>): Promise<T>;
|
|
48
|
+
batch?(): {
|
|
49
|
+
delete(ref: FirestoreDocumentLike): void;
|
|
50
|
+
commit(): Promise<void>;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
interface FirestoreBoardRefs {
|
|
54
|
+
baseRef: KindValueRef;
|
|
55
|
+
cardStoreRef: string;
|
|
56
|
+
outputsStoreRef: string;
|
|
57
|
+
scratchStoreRef: string;
|
|
58
|
+
archiveStoreRef: string;
|
|
59
|
+
chatStoreRef: string;
|
|
60
|
+
artifactsStoreRef: string;
|
|
61
|
+
}
|
|
62
|
+
interface FirestoreQueueStorageOptions {
|
|
63
|
+
defaultVisibilityMs?: number;
|
|
64
|
+
}
|
|
65
|
+
interface FirestoreBoardAdapterOptions {
|
|
66
|
+
refs?: Partial<FirestoreBoardRefs>;
|
|
67
|
+
holderId?: string;
|
|
68
|
+
requestProcessAccumulated?: () => void | Promise<void>;
|
|
69
|
+
publishBoardChangeNotifications?: (notifications: unknown[]) => void | Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
declare function makeFirestoreRef(path: string): KindValueRef;
|
|
72
|
+
declare function serializeFirestoreRef(path: string): string;
|
|
73
|
+
declare function createFirestoreBoardRefs(boardId: string): FirestoreBoardRefs;
|
|
74
|
+
declare function createFirestoreKvStorage(col: FirestoreCollectionLike): AsyncKVStorage;
|
|
75
|
+
declare function createFirestoreJournalStorage(col: FirestoreCollectionLike): AsyncJournalStorage;
|
|
76
|
+
declare function createFirestoreBlobStorage(col: FirestoreCollectionLike): AsyncBlobStorage;
|
|
77
|
+
declare function createFirestoreScratchStorage(col: FirestoreCollectionLike): AsyncScratchStorage;
|
|
78
|
+
declare function createFirestoreArchiveFactory(db: FirestoreLike, boardId: string): AsyncArchiveFactory;
|
|
79
|
+
declare function createFirestoreLock(lockDoc: FirestoreDocumentLike, opts?: {
|
|
80
|
+
holderId?: string;
|
|
81
|
+
ttlMs?: number;
|
|
82
|
+
}): AsyncAtomicRelayLock;
|
|
83
|
+
declare function createFirestoreQueueStorage(col: FirestoreCollectionLike, opts?: FirestoreQueueStorageOptions): AsyncQueueStorage;
|
|
84
|
+
declare function createFirestoreBoardAdapter(db: FirestoreLike, boardId: string, options?: FirestoreBoardAdapterOptions): AsyncBoardPlatformAdapter;
|
|
85
|
+
declare function createFirestoreBoardRuntimeBundle(db: FirestoreLike, boardId: string, options?: FirestoreBoardAdapterOptions): {
|
|
86
|
+
refs: {
|
|
87
|
+
baseRef: KindValueRef;
|
|
88
|
+
cardStoreRef: string;
|
|
89
|
+
outputsStoreRef: string;
|
|
90
|
+
scratchStoreRef: string;
|
|
91
|
+
archiveStoreRef: string;
|
|
92
|
+
chatStoreRef: string;
|
|
93
|
+
artifactsStoreRef: string;
|
|
94
|
+
};
|
|
95
|
+
boardAdapter: AsyncBoardPlatformAdapter;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export { type FirestoreBoardAdapterOptions, type FirestoreBoardRefs, type FirestoreCollectionLike, type FirestoreDocumentLike, type FirestoreDocumentSnapshotLike, type FirestoreLike, type FirestoreQueryLike, type FirestoreQuerySnapshotLike, type FirestoreQueueStorageOptions, type FirestoreTransactionLike, createFirestoreArchiveFactory, createFirestoreBlobStorage, createFirestoreBoardAdapter, createFirestoreBoardRefs, createFirestoreBoardRuntimeBundle, createFirestoreJournalStorage, createFirestoreKvStorage, createFirestoreLock, createFirestoreQueueStorage, createFirestoreScratchStorage, makeFirestoreRef, serializeFirestoreRef };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {a as a$1}from'../chunk-TSN3RTXT.js';import'../chunk-EGRHWZRV.js';import'../chunk-S44QZUDX.js';import {i}from'../chunk-VMW4Z6EF.js';import'../chunk-HEEDJEKM.js';import'../chunk-N6P2JW4W.js';import'../chunk-XQRNDX4Q.js';import {a,b}from'../chunk-BQS3EIEK.js';import'../chunk-VGT3TRQG.js';import'../chunk-WDPOGXTY.js';import'../chunk-JMDHDY6M.js';import'../chunk-VLBB3D6B.js';import'../chunk-MNEOJWPS.js';import'../chunk-KBELAKIY.js';import'../chunk-FW4363Y4.js';function P(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}function N(e){let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}function _(e){let t=new TextEncoder().encode(e);return P(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function K(e){return a$1(e).slice(0,16)}function E(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():`${Date.now().toString(16)}-${Math.random().toString(16).slice(2,10)}`}function c(e){return _(String(e))}function f(){let e=String(Date.now()).padStart(13,"0"),t=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `${e}-${t}`}function O(e){try{return b(e)}catch{return null}}function T(e,t){let n=O(e);return n?.kind==="firestore"&&n.value?n.value:t}function M(e,t){return e.collection("boards").doc(t)}function d(e,t,n){return M(e,t).collection(n)}function w(e){return {kind:"firestore",value:String(e)}}function g(e){return a(w(e))}function U(e){return {baseRef:w(`boards/${e}`),cardStoreRef:g(`boards/${e}/cards`),outputsStoreRef:g(`boards/${e}/runtime-out`),scratchStoreRef:g(`boards/${e}/scratch`),archiveStoreRef:g(`boards/${e}/archive`),chatStoreRef:g(`boards/${e}/chat`),artifactsStoreRef:g(`boards/${e}/files`)}}function q(e){return {async read(t){let n=await e.doc(c(t)).get();return n.exists?n.data()?.value??null:null},async write(t,n){await e.doc(c(t)).set({k:t,value:n});},async delete(t){await e.doc(c(t)).delete();},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(i=>i.data()?.k??i.id)}}}function Q(e){return {async append(t){let n=f();return await e.doc(n).set({id:n,createdAt:new Date().toISOString(),payload:t}),{id:n,payload:t}},async readAll(){return (await e.orderBy("id").get()).docs.map(n=>{let r=n.data()??{};return {id:String(r.id??n.id),payload:r.payload}})},async readAfter(t){let i=(await(t?e.where("id",">",t).orderBy("id"):e.orderBy("id")).get()).docs.map(a=>{let s=a.data()??{};return {id:String(s.id??a.id),payload:s.payload}});return {entries:i,newCursor:i.length>0?i[i.length-1].id:t}},async clear(){let t=await e.get();if(typeof e.firestore.batch=="function"){let n=e.firestore.batch();for(let r of t.docs)n.delete(e.doc(r.id));await n.commit();return}await Promise.all(t.docs.map(n=>e.doc(n.id).delete()));}}}function k(e){return {async read(t){let n=await e.doc(c(t)).get();return n.exists?n.data()?.content??null:null},async write(t,n){await e.doc(c(t)).set({k:t,content:n});},async exists(t){return (await e.doc(c(t)).get()).exists},async remove(t){await e.doc(c(t)).delete();},async readBytes(t){let n=await e.doc(c(t)).get();if(!n.exists)return null;let r=n.data()??{};return typeof r.bytesBase64=="string"?N(r.bytesBase64):typeof r.content=="string"?new TextEncoder().encode(r.content):null},async writeBytes(t,n){await e.doc(c(t)).set({k:t,bytesBase64:P(n)});},async listKeys(t=""){return (await(t?e.where("k",">=",t).where("k","<",`${t}\uF8FF`).orderBy("k"):e.orderBy("k")).get()).docs.map(i=>i.data()?.k??i.id)},async stat(t){let n=await e.doc(c(t)).get();if(!n.exists)return null;let r=n.data()??{},i=typeof r.bytesBase64=="string"?Math.floor(r.bytesBase64.length*3/4):typeof r.content=="string"?r.content.length:0;return {key:t,size:i,contentType:String(r.contentType??"application/octet-stream")}}}}function D(e){let t=k(e);return {...t,async getUniqueKey(n="scratch-",r=""){return `${n}${f()}${r}`},async create(n,r="scratch-",i=""){let a=`${r}${f()}${i}`;return await t.write(a,n),a},keyRef(n){return w(`${e.path}/${c(n)}`)},config:{async get(n){let r=await t.read(`__config__/${n}`);if(r==null)return null;try{return JSON.parse(r)}catch{return r}},async set(n,r){await t.write(`__config__/${n}`,JSON.stringify(r));}}}}function C(e,t){let n=M(e,t);return {stream(r){return Q(n.collection(`archive-stream-${r}`))},blob(r){return k(n.collection(`archive-blob-${r}`))},async listStreams(r=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(a=>a.path.split("/").at(-1)??"").filter(a=>a.startsWith(`archive-stream-${r}`)).map(a=>a.slice(15))},async listBlobs(r=""){return typeof n.listCollections!="function"?[]:(await n.listCollections()).map(a=>a.path.split("/").at(-1)??"").filter(a=>a.startsWith(`archive-blob-${r}`)).map(a=>a.slice(13))},config:{async get(r){let i=await n.collection("archive-config").doc("main").get();return i.exists?i.data()?.[r]??null:null},async set(r,i){await n.collection("archive-config").doc("main").set({[r]:i},{merge:true});}}}}function I(e,t={}){let n=t.holderId??E(),r=t.ttlMs??3e4;return {async tryAcquire(){try{await e.firestore.runTransaction(async i=>{let a=await i.get(e),s=new Date().toISOString();if(a.exists){let o=a.data()??{};if(o.held===!0&&typeof o.expiresAt=="string"&&o.expiresAt>s)throw Object.assign(new Error("locked"),{code:"locked"})}i.set(e,{held:!0,holderId:n,acquiredAt:s,expiresAt:new Date(Date.now()+r).toISOString()});});}catch(i){if(i?.code==="locked")return null;throw i}return async()=>{try{await e.firestore.runTransaction(async i=>{let a=await i.get(e);if(!a.exists)return;(a.data()??{}).holderId===n&&i.update(e,{held:!1,holderId:null});});}catch{}}}}}function m(e,t={}){let n=t.defaultVisibilityMs??3e4;return {async enqueue(r){let i=f(),a=new Date().toISOString();return await e.doc(i).set({id:i,body:r,enqueuedAt:a,attempt:0,visibleAfter:a,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null}),{id:i,body:r,enqueuedAt:a,attempt:0}},async enqueueIfAbsent(r,i){if((await e.where("dedupKey","==",i).where("dead","==",false).limit(1).get()).docs.length>0)return null;let s=f(),o=new Date().toISOString();return await e.doc(s).set({id:s,body:r,dedupKey:i,enqueuedAt:o,attempt:0,visibleAfter:o,leaseToken:null,leaseExpiresAt:null,dead:false,deadReason:null}),{id:s,body:r,enqueuedAt:o,attempt:0}},async lease(r={}){let i=Math.max(1,Number(r.max??1)),a=Math.max(1,Number(r.visibilityMs??n)),s=new Date().toISOString(),o=await e.where("dead","==",false).where("visibleAfter","<=",s).orderBy("visibleAfter").limit(i*4).get(),l=[];for(let y of o.docs){if(l.length>=i)break;let S=e.doc(y.id);try{let p=null;await e.firestore.runTransaction(async A=>{let F=await A.get(S);if(!F.exists)throw new Error("gone");let u=F.data()??{},h=new Date().toISOString();if(u.dead===!0)throw new Error("dead");if(typeof u.visibleAfter=="string"&&u.visibleAfter>h)throw new Error("hidden");if(u.leaseToken&&typeof u.leaseExpiresAt=="string"&&u.leaseExpiresAt>h)throw new Error("leased");let b=E(),v=new Date(Date.now()+a).toISOString(),R=Number(u.attempt??0)+1;A.update(S,{leaseToken:b,leaseExpiresAt:v,attempt:R}),p={id:String(u.id??y.id),body:u.body,enqueuedAt:String(u.enqueuedAt??h),attempt:R,leaseToken:b,leaseExpiresAt:v};}),p&&l.push(p);}catch{}}return l},async ack(r,i){try{return await e.firestore.runTransaction(async a=>{let s=e.doc(r),o=await a.get(s);if(!o.exists)return;if((o.data()??{}).leaseToken!==i)throw new Error("token mismatch");a.delete(s);}),!0}catch{return false}},async nack(r,i,a={}){try{return await e.firestore.runTransaction(async s=>{let o=e.doc(r),l=await s.get(o);if(!l.exists)return;if((l.data()??{}).leaseToken!==i)throw new Error("token mismatch");a.dead===!0?s.update(o,{dead:!0,deadReason:a.reason??"nacked",leaseToken:null,leaseExpiresAt:null}):s.update(o,{leaseToken:null,leaseExpiresAt:null,visibleAfter:new Date().toISOString()});}),!0}catch{return false}},async peekActive(r=""){return (await e.where("dead","==",false).orderBy("enqueuedAt").get()).docs.map(a=>a.data()??{}).filter(a=>!r||String(a.id??"").startsWith(r)).map(a=>({id:String(a.id??""),body:a.body,enqueuedAt:String(a.enqueuedAt??""),attempt:Number(a.attempt??0)}))},async peekDeadLetter(r=""){return (await e.where("dead","==",true).orderBy("enqueuedAt").get()).docs.map(a=>a.data()??{}).filter(a=>!r||String(a.id??"").startsWith(r)).map(a=>({id:String(a.id??""),body:a.body,enqueuedAt:String(a.enqueuedAt??""),attempt:Number(a.attempt??0),reason:a.deadReason}))}}}function V(e,t,n={}){return i({boardId:t,kvStorage(r){return q(d(e,t,`kv-${r||"root"}`))},kvStorageForRef(r){return q(e.collection(T(r,`boards/${t}/kv-root`)))},blobStorage(r){return k(d(e,t,`blobs-${r||"root"}`))},scratchStorage(){return D(d(e,t,"scratch"))},scratchStorageForRef(r){return D(e.collection(T(r,`boards/${t}/scratch`)))},archiveFactory(){return C(e,t)},archiveFactoryForRef(r){let i=O(r),a=i?.kind==="firestore-board"?i.value:t;return C(e,a)},journalStorage(){return Q(d(e,t,"journal"))},queueStorage:m(d(e,t,"worker-queue")),chatAgentQueueStorage:m(d(e,t,"chat-queue")),processAccumulatedQueueStorage:m(d(e,t,"process-queue")),lock:I(d(e,t,"locks").doc("board-lock"),{holderId:n.holderId}),hashFn(r){return K(r)},genId(){return f()},requestProcessAccumulated:n.requestProcessAccumulated,publishBoardChangeNotifications:n.publishBoardChangeNotifications,onWarn:r=>console.warn(`[firestore-board-adapter:${t}] ${r}`)})}function z(e,t,n={}){return {refs:{...U(t),...n.refs??{}},boardAdapter:V(e,t,n)}}
|
|
2
|
+
export{C as createFirestoreArchiveFactory,k as createFirestoreBlobStorage,V as createFirestoreBoardAdapter,U as createFirestoreBoardRefs,z as createFirestoreBoardRuntimeBundle,Q as createFirestoreJournalStorage,q as createFirestoreKvStorage,I as createFirestoreLock,m as createFirestoreQueueStorage,D as createFirestoreScratchStorage,w as makeFirestoreRef,g as serializeFirestoreRef};//# sourceMappingURL=index.js.map
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkIPLSRN6P_cjs=require('../chunk-IPLSRN6P.cjs');require('../chunk-NKIQRCOM.cjs'),require('../chunk-5XHOHTLZ.cjs');var chunkH5HBXPOI_cjs=require('../chunk-H5HBXPOI.cjs');require('../chunk-PBCDDO4V.cjs'),require('../chunk-OEFTOO47.cjs'),require('../chunk-U2N6MCD5.cjs');var chunkSFVO2LB2_cjs=require('../chunk-SFVO2LB2.cjs');require('../chunk-G4XXRHL2.cjs'),require('../chunk-LODXIALE.cjs'),require('../chunk-IXZG74EW.cjs'),require('../chunk-NMZ6XNLB.cjs'),require('../chunk-UJ7ZTV4J.cjs'),require('../chunk-YMEIPKLW.cjs'),require('../chunk-GNFE24S7.cjs');function E(){let n=false;return {async tryAcquire(){return n?null:(n=true,()=>{n=false;})}}}function y(){let n=new Map,r=new Map;return {async enqueue(e){let t={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:e,enqueuedAt:new Date().toISOString(),attempt:0};return n.set(t.id,t),t},async enqueueIfAbsent(e,t){for(let i of n.values())if(i.dedupKey===t)return null;let a={id:globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,body:e,enqueuedAt:new Date().toISOString(),attempt:0,dedupKey:t};return n.set(a.id,a),a},async lease(e){let t=Math.max(1,Math.floor(e?.max??1)),a=Math.max(1,Math.floor(e?.visibilityMs??6e4)),i=Date.now();for(let o of n.values())o.leaseExpiresAt&&Date.parse(o.leaseExpiresAt)<=i&&(delete o.leaseToken,delete o.leaseExpiresAt);let s=[];for(let o of n.values()){if(s.length>=t)break;o.leaseToken||(o.attempt+=1,o.leaseToken=globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`,o.leaseExpiresAt=new Date(Date.now()+a).toISOString(),s.push({id:o.id,body:o.body,enqueuedAt:o.enqueuedAt,attempt:o.attempt,leaseToken:o.leaseToken,leaseExpiresAt:o.leaseExpiresAt}));}return s},async ack(e,t){let a=n.get(e);return !a||a.leaseToken!==t?false:(n.delete(e),true)},async nack(e,t,a){let i=n.get(e);return !i||i.leaseToken!==t?false:(delete i.leaseToken,delete i.leaseExpiresAt,a?.dead&&(n.delete(e),r.set(e,{...i,reason:a.reason})),true)},async peekActive(e=""){return Array.from(n.values()).filter(t=>!t.leaseToken).filter(t=>!e||t.id.startsWith(e)).map(t=>({id:t.id,body:t.body,enqueuedAt:t.enqueuedAt,attempt:t.attempt}))},async peekDeadLetter(e=""){return Array.from(r.values()).filter(t=>!e||t.id.startsWith(e)).map(t=>({id:t.id,body:t.body,enqueuedAt:t.enqueuedAt,attempt:t.attempt,reason:t.reason}))}}}function B(n){let r=chunkIPLSRN6P_cjs.e(n);return {async read(e){return r.read(e)},async write(e,t){r.write(e,t);},async delete(e){r.delete(e);},async listKeys(e){return r.listKeys(e)}}}function L(n){let r=chunkIPLSRN6P_cjs.b(n);return {async read(e){return r.read(e)},async write(e,t){r.write(e,t);},async exists(e){return r.exists(e)},async remove(e){r.remove(e);},async readBytes(e){return r.readBytes?.(e)??null},async writeBytes(e,t){await r.writeBytes?.(e,t);},async listKeys(e){return r.listKeys(e)},async stat(e){return r.stat?.(e)??null}}}function k(n){let r=chunkIPLSRN6P_cjs.c(n);return {async read(e){return r.read(e)},async write(e,t){r.write(e,t);},async exists(e){return r.exists(e)},async remove(e){r.remove(e);},async readBytes(e){return r.readBytes?.(e)??null},async writeBytes(e,t){await r.writeBytes?.(e,t);},async listKeys(e){return r.listKeys(e)},async stat(e){return r.stat?.(e)??null},async getUniqueKey(e,t){return r.getUniqueKey(e,t)},async create(e,t,a){return r.create(e,t,a)},keyRef(e){return r.keyRef(e)},config:{async get(e){return r.config.get(e)},async set(e,t){r.config.set(e,t);}}}}function K(n){let r=chunkIPLSRN6P_cjs.f(n);function e(t){return {id:t.id,payload:t.event}}return {async append(t){let a={id:r.generateId(),event:t};return r.appendEntry(a),e(a)},async readAll(){return r.readAllEntries().map(e)},async readAfter(t){let a=r.readAllEntries().map(e);if(!t)return {entries:a,newCursor:a.length>0?a[a.length-1].id:null};let i=a.findIndex(o=>o.id===t),s=i===-1?a:a.slice(i+1);return {entries:s,newCursor:s.length>0?s[s.length-1].id:t}}}}function x(n){let r=chunkIPLSRN6P_cjs.d(n);return {stream(e){let t=r.stream(e);return {async append(a){return t.append(a)},async readAll(){return t.readAll()},async readAfter(a){return t.readAfter(a)},async clear(){t.clear?.();}}},blob(e){let t=r.blob(e);return {async read(a){return t.read(a)},async write(a,i){t.write(a,i);},async exists(a){return t.exists(a)},async remove(a){t.remove(a);},async readBytes(a){return t.readBytes?.(a)??null},async writeBytes(a,i){await t.writeBytes?.(a,i);},async listKeys(a){return t.listKeys(a)},async stat(a){return t.stat?.(a)??null}}},async listStreams(e){return r.listStreams(e)},async listBlobs(e){return r.listBlobs(e)},config:{async get(e){return r.config.get(e)},async set(e,t){r.config.set(e,t);}}}}function $(n){return String(n||"").trim()}function T(n){return {kind:"local-storage",value:$(n)}}function c(n){return chunkSFVO2LB2_cjs.a(T(n))}function q(n){let r=`boards:${n}`;return {baseRef:T(r),cardStoreRef:c(`${r}:cards`),outputsStoreRef:c(`${r}:runtime-out`),scratchStoreRef:c(`${r}:scratch`),archiveStoreRef:c(`${r}:archive`),chatStoreRef:c(`${r}:chat`),artifactsStoreRef:c(`${r}:files`)}}function g(n,r){try{let e=chunkSFVO2LB2_cjs.b(n);if(e?.kind==="local-storage"&&e.value)return $(e.value)}catch{}return r}function D(n,r={}){let e=q(n),t=y(),a=y(),i=y();return chunkH5HBXPOI_cjs.i({boardId:n,kvStorage(s){return B(`${e.baseRef.value}:${s||"root"}`)},kvStorageForRef(s){return B(g(s,`${e.baseRef.value}:root`))},blobStorage(s){return L(s?`${e.baseRef.value}:${s}`:e.baseRef.value)},scratchStorage(){return k(`${e.baseRef.value}:scratch`)},scratchStorageForRef(s){return k(g(s,`${e.baseRef.value}:scratch`))},archiveFactory(){return x(`${e.baseRef.value}:archive`)},archiveFactoryForRef(s){return x(g(s,`${e.baseRef.value}:archive`))},journalStorage(){return K(`${e.baseRef.value}:journal`)},queueStorage:t,chatAgentQueueStorage:a,processAccumulatedQueueStorage:i,lock:E(),resolveBlob:async s=>{let o=s?.kind==="local-storage"?s:null;if(!o?.value)throw new Error(`Unsupported localStorage ref: ${chunkSFVO2LB2_cjs.a(s)}`);let f=chunkIPLSRN6P_cjs.b(o.value),l=await Promise.resolve(f.read(""));if(l===null)throw new Error(`Blob not found: ${chunkSFVO2LB2_cjs.a(s)}`);try{let p=JSON.parse(l);if(p?.__kind==="bytes-b64"&&typeof p.data=="string"){let S=await Promise.resolve(f.readBytes?.(""));if(S)return new TextDecoder().decode(S)}}catch{}return l},hashFn:chunkIPLSRN6P_cjs.a,genId:()=>(globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2,10)}`).replace(/-/g,""),requestProcessAccumulated:r.requestProcessAccumulated,publishBoardChangeNotifications:r.publishBoardChangeNotifications,onWarn:s=>console.warn(`[localstorage-board-adapter:${n}] ${s}`)})}function U(n,r={}){return {refs:{...q(n),...r.refs??{}},boardAdapter:D(n,r)}}exports.createLocalStorageBoardAdapter=D;exports.createLocalStorageBoardRefs=q;exports.createLocalStorageBoardRuntimeBundle=U;exports.makeLocalStorageRef=T;exports.serializeLocalStorageRef=c;//# sourceMappingURL=index.cjs.map
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|