@econ-v1/app-sdk 7.6.82 → 7.6.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/burger/index.js +2 -2
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/dist/burger/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var me=Object.defineProperty;var ye=(e)=>e;function ge(e,t){this[e]=ye.bind(null,t)}var
|
|
2
|
-
`;try{if(!p){W(),s.appendFileSync(o,S);return}if(c===null)W(),c=s.openSync(o,"a+");let d=s.fstatSync(c).size;if(d>r){let
|
|
1
|
+
var me=Object.defineProperty;var ye=(e)=>e;function ge(e,t){this[e]=ye.bind(null,t)}var _e=(e,t)=>{for(var o in t)me(e,o,{get:t[o],enumerable:!0,configurable:!0,set:ge.bind(t,o)})};import{Database as Pe}from"burger:sqlite";var N={};_e(N,{incrementCounter:()=>q,initAppTelemetry:()=>M,injectTraceContext:()=>be,telemetryActive:()=>L,traceIncomingCapability:()=>he});async function M(e){}function L(){return!1}function q(e,t=1,o){}function be(e){return e}async function he(e,t,o){return o()}import{connect as xe,dataDir as Ce,exit as Z,logDir as Ie,memoryUsage as Se}from"burger:host";var G=null,Ge=import("burger:async_hooks").then((e)=>(G=e.AsyncLocalStorage,!0),()=>!1);function Y(){return G}function Q(e){let t=ve(),o=null,n=()=>{if(o)return o;let i=e();if(!i)return t;return o=new i,o};return{run(i,r){return n().run(i,r)},getStore(){return n().getStore()}}}function ve(){let e;return{run(t,o){let n=e;e=t;try{return o()}finally{e=n}},getStore(){return e}}}var H=!0,X=256;function F(){return{socket:void 0,logDir:Ie,dataDir:Ce}}var B=F();function J(){return B.socket}function ee(e,t,o=Z){o(e)}function b(e){Z(e)}function te(){}var Re=/the app channel is (not open|closed)/;function ne(e){let t=xe(),o=!0,n=!1;function i(r){if(n)return;try{t.send(r)}catch(a){if(a instanceof Error&&Re.test(a.message)){n=!0;return}throw a}}return t.onFrame((r)=>{if(!o)return;e.onFrame(r).catch((a)=>e.onFrameError(a))}),t.onClose((r)=>{if(n=!0,r)e.onError(r);else e.onClose()}),queueMicrotask(()=>e.onConnected("burger:host")),{send(r){i(r)},sendAndFlush(r){return i(r),Promise.resolve()},stopAccepting(){o=!1},end(){n=!0,t.close()}}}function oe(){return Q(Y)}function re(){let e=Se();return{heap_used_kb:Math.round(e.heap_used_kb),heap_total_kb:Math.round(e.heap_total_kb),external_kb:Math.round(e.external_kb),heap_capacity_kb:Math.round(e.heap_capacity_kb)}}function V(){throw Error("heap snapshots are not available in the Burger runtime")}async function ie(e,t=V,o=V){let n=t();return{size_bytes:await o(e,n)}}import*as s from"burger:fs";import{join as we}from"burger:path";var Ee=60000,ke=52428800,Te=10485760;function se(e,t={}){if(!e)return{write:()=>{}};let o=we(e,"app.log"),n=t.reportError??((l)=>console.error(l)),i=t.now??Date.now,r=t.maxBytes??ke,a=Math.min(t.tailBytes??Te,r),p=typeof s.openSync==="function"&&typeof s.writeSync==="function"&&typeof s.closeSync==="function"&&typeof s.fstatSync==="function"&&typeof s.readSync==="function"&&typeof s.ftruncateSync==="function",c=null,U=!1,T=null,C=0;function W(){if(U)return;s.mkdirSync(e,{recursive:!0}),U=!0}function fe(l){let I=i();if(T!==null&&I-T<Ee){C+=1;return}let S=l instanceof Error?l.message:String(l),d=C>0?`; ${C} earlier failure(s) not reported`:"";n(`[node-app-sdk] app.log write failed (${o}): ${S}${d}`),T=I,C=0}return{write(l,I){let S=`${new Date().toISOString()} [${l.toUpperCase().padEnd(5)}] ${I}
|
|
2
|
+
`;try{if(!p){W(),s.appendFileSync(o,S);return}if(c===null)W(),c=s.openSync(o,"a+");let d=s.fstatSync(c).size;if(d>r){let P=Math.min(d,a),K=Buffer.alloc(P);s.readSync(c,K,0,P,d-P),s.ftruncateSync(c,0),s.writeSync(c,K)}s.writeSync(c,S)}catch(d){if(c!==null){try{s.closeSync(c)}catch{}c=null}fe(d)}}}}var{injectTraceContext:Me,traceIncomingCapability:Le}=N,qe=M,tt=L,nt=q,Ne=X;function ot(e,t={}){let o=t.cacheSizeKb??Ne;if(!Number.isInteger(o)||o<=0)throw RangeError("cacheSizeKb must be a positive integer");let n=new Pe(e);try{return n.exec(`PRAGMA cache_size = -${o}`),n}catch(i){throw n.close(),i}}var rt=F,it=J,st=ee,He=se(B.logDir),u=null,pe=oe(),v=new Map,f={trace:(e)=>h("trace",e),debug:(e)=>h("debug",e),info:(e)=>h("info",e),warn:(e)=>h("warn",e),error:(e)=>h("error",e),holdLease:()=>{let e=!1;return R(),()=>{if(e)return;e=!0,A()}}};function h(e,t){if(He.write(e,t),u)u({type:"log",level:e,message:t});else console[e==="trace"?"debug":e](t)}function at(e,t){if(!u)return Promise.reject(Error("Not connected to host"));let o=t??30000,n=e.timeout_ms===void 0?{...e,timeout_ms:o}:e,i={...n,trace_context:Me({...n.trace_context??{}})},r=pe.getStore();if(r?.active&&r.id!==void 0)i.invocation_context_id=r.id;return new Promise((a,p)=>{v.set(e.id,{resolve:a,reject:p}),u({type:"invoke_capability",id:e.id,request:i}),setTimeout(()=>{if(v.has(e.id))v.delete(e.id),p(Error(`Capability invocation timed out after ${o}ms: ${e.capability}`))},o)})}function pt(e,t){if(!u)throw Error("Not connected to host");u({type:"publish_event",event_name:e,data:t})}var m=0,_,y=null,x=!1,E,ce=()=>b(0),z=ce,D,ue=(e)=>(u?.(e),Promise.resolve()),O=ue;function j(e){if(_=e,e===void 0)k()}function k(){if(y)clearTimeout(y),y=null}function le(){if(x)return;if(_===void 0)return;if(m!==0)return;k();let e=Math.max(0,_*1000),t=setTimeout(()=>{y=null,Fe()},e);t.unref?.(),y=t}function R(){m++,k()}function A(){if(m=Math.max(0,m-1),m===0)le()}async function Fe(){if(x)return;if(x=!0,D?.(),E)await E.shutdown();await O({type:"lease_exit"}),z()}function ct(){k(),m=0,_=void 0,x=!1,E=void 0,z=ce,D=void 0,O=ue}function ut(e){z=e}function lt(){return{inFlight:m,rememberedSecs:_,timerArmed:y!==null,draining:x}}var $e=30000;function Be(){let e=process.env.NODE_APP_MEMORY_SAMPLE_INTERVAL_MS,t=e?Number.parseInt(e,10):NaN;return Number.isFinite(t)&&t>=1000?t:$e}var g=null,je=re;function ae(e){e({type:"app_memory",...je()})}function ze(e){if(g)return;ae(e),g=setInterval(()=>ae(e),Be()),g.unref?.()}function w(){if(g)clearInterval(g),g=null}var De=ie;async function Oe(e,t,o=De){try{let n=await o(e.path);t({type:"heap_snapshot_response",id:e.id,success:!0,size_bytes:n.size_bytes})}catch{t({type:"heap_snapshot_response",id:e.id,success:!1,error:"heap_snapshot_failed"})}}function Ue(e,t){let o=t.indexOf("?"),n=o>=0?t.slice(0,o):t,i=e.split("/"),r=n.split("/"),a=0,p=0;while(a<i.length){if(i[a]==="**")return!0;if(p>=r.length)return!1;if(i[a]!=="*"&&i[a]!==r[p])return!1;a++,p++}return p===r.length}class We{_routes=[];route(e,t,o,n){this._routes.push({method:e,path:t,policy:o,handler:n})}async init(e){}async shutdown(){}async handleRequest(e){if(this._routes.length>0)return this._dispatchRoute(e);return{status:501,headers:{},body:{error:"Not implemented"}}}async _dispatchRoute(e){let t=e.method.toUpperCase(),o=e.path;for(let n of this._routes){if(!(n.method==="*"||n.method.toUpperCase()===t))continue;if(!Ue(n.path,o))continue;let r=n.policy.requiredPermissions??[],a=e.caller?.granted_permissions??[],p=r.filter((c)=>!a.includes(c));if(p.length>0)return f.warn(`SDK scope denied: [${p.join(", ")}] missing for ${t} ${o}`),{status:403,headers:{},body:{error:`Missing permissions: ${p.join(", ")}`}};return n.handler(e)}return this.notFound()}async handleEvent(e){}providedCapabilities(){return[]}async handleCapability(e){return{id:e.id,success:!1,payload:{error:"Capability handling not implemented"}}}json(e,t=200){return{status:t,headers:{"Content-Type":"application/json"},body:e}}error(e,t=500){return{status:t,headers:{"Content-Type":"application/json"},body:{error:e}}}notFound(){return this.error("Not found",404)}}function dt(e){te(),qe(e.metadata?.name??"node-app");let t=ne({onConnected:(n)=>{f.debug(`Connected to host via ${n}`)},onFrame:(n)=>de(e,n,o),onFrameError:(n)=>{f.error(`Failed to parse IPC message: ${n}`)},onError:(n)=>{console.error(`[node-app-sdk] Socket error: ${n.message}`),b(1)},onClose:()=>{w(),b(0),f.debug("Socket closed, shutting down")}});function o(n){t.send(n)}u=o,D=()=>{t.stopAccepting()},O=(n)=>t.sendAndFlush(n),process.on("SIGTERM",async()=>{if(!H)return;w(),await e.shutdown(),t.end(),process.exit(0)}),process.on("SIGINT",async()=>{if(!H)return;w(),await e.shutdown(),t.end(),process.exit(0)})}async function de(e,t,o){switch(E=e,t.type){case"ping":{o({type:"pong",id:t.id});break}case"init":{let n=t.config;await e.init(n),o({type:"ready",protocol_features:["ipc_ping_v1"],metadata:e.metadata}),ze(o);break}case"lease_update":{let n=t.lease_secs;if(n!==_)j(n),le();break}case"request":{let{id:n,request:i}=t;R();try{let r=await e.handleRequest(i);o({type:"response",id:n,response:r})}catch(r){o({type:"response",id:n,response:{status:500,headers:{},body:{error:`Internal app error: ${r}`}}})}finally{A()}break}case"event":{let{event:n,lease_secs:i}=t;j(i),R();try{await e.handleEvent(n)}catch(r){f.error(`Event handler error: ${r}`)}finally{A()}break}case"capability_request":{let{id:n,request:i}=t;j(i.lease_secs),R();let r={id:i.invocation_context_id,active:!0};try{let a=await pe.run(r,async()=>{try{return await Le(i.capability,i.trace_context,()=>e.handleCapability(i))}finally{r.active=!1}});o({type:"capability_response",id:n,response:a})}catch(a){o({type:"capability_response",id:n,response:{id:i.id,success:!1,payload:{error:`Capability handler error: ${a}`}}})}finally{A()}break}case"invoke_capability_result":{let{id:n,response:i}=t,r=v.get(n);if(r)v.delete(n),r.resolve(i);break}case"shutdown":{f.info("Received shutdown signal from host"),w(),await e.shutdown(),b(0);break}case"heap_snapshot_request":{await Oe(t,o);break}default:f.warn(`Unknown IPC message type: ${t.type}`)}}async function ft(e,t,o){u=o,await de(e,t,u)}export{We as NodeApp,De as _captureHeapSnapshotTo,Oe as _handleHeapSnapshotRequest,rt as _resolveCtx,je as _sampleMemory,st as _testExitWorker,ft as _testHandleMessage,lt as _testLeaseState,ct as _testResetLeaseState,it as _testRunNodeAppPath,ut as _testSetLeaseExitFn,f as host,nt as incrementCounter,qe as initAppTelemetry,at as invokeCapability,ot as openDatabase,pt as publishEvent,dt as runNodeApp,tt as telemetryActive};
|