@reason-machines/cli-linux-arm64-musl 0.2.371 → 0.2.373
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/bin/ara +1 -1
- package/bin/vm-hands/api-af9g18n7.js +2 -0
- package/bin/vm-hands/api-credentials-65mrr3tn.js +2 -0
- package/bin/vm-hands/{ask-relay-dq0v3bmt.js → ask-relay-8z5hmrxz.js} +3 -3
- package/bin/vm-hands/connect-cli-nnhwmhv1.js +2 -0
- package/bin/vm-hands/{custom-endpoint-device-wmcf39x6.js → custom-endpoint-device-zhpake9f.js} +1 -1
- package/bin/vm-hands/desktop-account-5zvgspyw.js +2 -0
- package/bin/vm-hands/{device-workspace-05nkwrpp.js → device-workspace-vbcry9d6.js} +1 -1
- package/bin/vm-hands/{hands-worker-source-5wv1djgv.js → hands-worker-source-h0b1j53p.js} +1 -1
- package/bin/vm-hands/{index-kf4q2kw5.js → index-bbk6a9sk.js} +1 -1
- package/bin/vm-hands/{install-receipt-vaytv1sf.js → install-receipt-7x81ek76.js} +1 -1
- package/bin/vm-hands/local-automation-wvtn0q4x.js +2 -0
- package/bin/vm-hands/local-capabilities-bnhpw82g.js +2 -0
- package/bin/vm-hands/local-desktop-users-0hadyvx1.js +2 -0
- package/bin/vm-hands/local-display-mac-v1pc7177.js +2 -0
- package/bin/vm-hands/local-display-session-n7ep9gbv.js +2 -0
- package/bin/vm-hands/local-pty-session-hs7rq03x.js +2 -0
- package/bin/vm-hands/{managed-runtime-dz0rtyvr.js → managed-runtime-qwrw5tyb.js} +1 -1
- package/bin/vm-hands/network-contract-zqvt1v0t.js +2 -0
- package/bin/vm-hands/package-3cd7cfyv.js +2 -0
- package/bin/vm-hands/permissions-xv54fbmk.js +2 -0
- package/bin/vm-hands/{reason-hands-protocol-dase3v7x.js → reason-hands-protocol-8fxjynte.js} +1 -1
- package/bin/vm-hands/{serve-service-47q4bmhj.js → serve-service-hw16p091.js} +1 -1
- package/bin/vm-hands/{status-czgrayjt.js → status-n6bv9tmq.js} +2 -2
- package/bin/vm-hands/version-jc5w4cnv.js +2 -0
- package/bin/vm-hands/{vm-hands-entry-lite-2c88t2at.js → vm-hands-entry-lite-00qsbphw.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-w4swepp1.js → vm-hands-entry-lite-1085xsma.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-gbzvzfe6.js → vm-hands-entry-lite-2c1pz48d.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-gteq5e1n.js → vm-hands-entry-lite-3fdaf4hf.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-sfsgeynk.js → vm-hands-entry-lite-3hbe4em3.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-nhfd61cx.js → vm-hands-entry-lite-45j8qwsf.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-rjwk6sfj.js → vm-hands-entry-lite-4m40gwkf.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-gzyps3ev.js → vm-hands-entry-lite-5kgvss4p.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-e8skq97c.js → vm-hands-entry-lite-7shpbsw8.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-db4z7ekz.js → vm-hands-entry-lite-9cgm6g8t.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-dq1fdx0j.js → vm-hands-entry-lite-anmv8hp7.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-ngytzkx1.js → vm-hands-entry-lite-bvbfcp1k.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-9fr904x2.js → vm-hands-entry-lite-c01eyep6.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-b775ysr4.js → vm-hands-entry-lite-dcynw6t2.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-vygp7vq8.js → vm-hands-entry-lite-dgxxsdwb.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-5mz0m0k0.js → vm-hands-entry-lite-fysena9h.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-7fx4xtf6.js → vm-hands-entry-lite-g036gtem.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-e9gq8n0f.js → vm-hands-entry-lite-g9sz0618.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite-ha8fgq32.js +540 -0
- package/bin/vm-hands/{vm-hands-entry-lite-zmf1terc.js → vm-hands-entry-lite-hc3p6r9p.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-y3wncwjd.js → vm-hands-entry-lite-j2q1k9vb.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-d7y6aah1.js → vm-hands-entry-lite-jb2sr2r7.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-k7twc1ch.js → vm-hands-entry-lite-jpq28ncg.js} +1 -1
- package/bin/vm-hands/vm-hands-entry-lite-khjrcwrj.js +5 -0
- package/bin/vm-hands/{vm-hands-entry-lite-g576hpce.js → vm-hands-entry-lite-kxdw4myj.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-kc07ptqt.js → vm-hands-entry-lite-m8jcht6h.js} +77 -77
- package/bin/vm-hands/{vm-hands-entry-lite-ymwv38dd.js → vm-hands-entry-lite-m9awmyqz.js} +23 -23
- package/bin/vm-hands/{vm-hands-entry-lite-8sddhaka.js → vm-hands-entry-lite-mh0xecf3.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-bt6esncn.js → vm-hands-entry-lite-nhtb458c.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-8emxhcny.js → vm-hands-entry-lite-pt4r24ky.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-5zmn6a7p.js → vm-hands-entry-lite-r6pap1kh.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-zyc3qkej.js → vm-hands-entry-lite-s6twc8n9.js} +3 -3
- package/bin/vm-hands/{vm-hands-entry-lite-mcv6pse6.js → vm-hands-entry-lite-sb9a1jcn.js} +1 -1
- package/bin/vm-hands/{vm-hands-entry-lite-5n6agg8d.js → vm-hands-entry-lite-t535zmjz.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-cxgbb2yr.js → vm-hands-entry-lite-z4hpfwbj.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-dm52srp5.js → vm-hands-entry-lite-za55dtte.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-x9pmwqjd.js → vm-hands-entry-lite-ze9msfq1.js} +2 -2
- package/bin/vm-hands/{vm-hands-entry-lite-2fyemnas.js → vm-hands-entry-lite-zfwg7ehq.js} +5 -5
- package/bin/vm-hands/{vm-hands-entry-lite-y9wkxydj.js → vm-hands-entry-lite-zh8p7ndn.js} +2 -2
- package/bin/vm-hands/vm-hands-entry-lite.js +1 -1
- package/bin/vm-hands/{vm-hands-executor-676cpsf2.js → vm-hands-executor-z89arnng.js} +2 -2
- package/bin/vm-hands/vm-hands-op-runner-2c9g8djj.js +2 -0
- package/bin/vm-hands/{vm-hands-runtime-d2jafcp6.js → vm-hands-runtime-qc1205w5.js} +3 -3
- package/bin/vm-hands/worker-sandbox-wpzkvwer.js +2 -0
- package/package.json +1 -1
- package/bin/vm-hands/api-credentials-ke2v1y5k.js +0 -2
- package/bin/vm-hands/api-ewpnfn05.js +0 -2
- package/bin/vm-hands/connect-cli-atmwwkqh.js +0 -2
- package/bin/vm-hands/desktop-account-cppm1dhr.js +0 -2
- package/bin/vm-hands/local-automation-yrra6zkg.js +0 -2
- package/bin/vm-hands/local-capabilities-ykbksvha.js +0 -2
- package/bin/vm-hands/local-desktop-users-ejwwkfer.js +0 -2
- package/bin/vm-hands/local-display-mac-x0eq4rzq.js +0 -2
- package/bin/vm-hands/local-display-session-xkbc5knp.js +0 -2
- package/bin/vm-hands/local-pty-session-pzg7bk32.js +0 -2
- package/bin/vm-hands/network-contract-zez17y8t.js +0 -2
- package/bin/vm-hands/package-gxv23nam.js +0 -2
- package/bin/vm-hands/permissions-jmcvwvgd.js +0 -2
- package/bin/vm-hands/version-42fp9wnk.js +0 -2
- package/bin/vm-hands/vm-hands-entry-lite-8cmyg5e4.js +0 -540
- package/bin/vm-hands/vm-hands-entry-lite-pt633d84.js +0 -5
- package/bin/vm-hands/vm-hands-op-runner-4j51v1n0.js +0 -2
- package/bin/vm-hands/worker-sandbox-e4kvy715.js +0 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{uc as j,vc as q}from"./vm-hands-entry-lite-
|
|
2
|
+
import{uc as j,vc as q}from"./vm-hands-entry-lite-dcynw6t2.js";function y(v=process.platform){if(j(),v==="linux")q("strict")}
|
|
3
3
|
export{y as r};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Uc as dq,Vc as cq}from"./vm-hands-entry-lite-hh24bq0d.js";import{
|
|
2
|
+
import{Uc as dq,Vc as cq}from"./vm-hands-entry-lite-hh24bq0d.js";import{Gh as zq,Hh as fq,Lh as Rq,Mh as Uq,Nh as X,Qh as mq,Sh as Fq,Th as vq,Vh as h,Wh as P,Xh as Mq}from"./vm-hands-entry-lite-kxdw4myj.js";import{ni as _q}from"./vm-hands-entry-lite-r6pap1kh.js";import{Ii as hq,Ki as lq,Ni as oq,Oi as sq,Pi as uq,Qi as Nq}from"./vm-hands-entry-lite-z4hpfwbj.js";import{Yi as c}from"./vm-hands-entry-lite-c01eyep6.js";import{randomUUID as O}from"crypto";import{chmodSync as qq,closeSync as m,constants as v,existsSync as B,fstatSync as pq,lstatSync as T,mkdirSync as r,openSync as rq,readFileSync as g,readdirSync as Iq,readlinkSync as E,realpathSync as C,renameSync as k,rmSync as d,statSync as x,symlinkSync as Gq,unlinkSync as D,writeFileSync as l}from"fs";import{basename as p,dirname as I,isAbsolute as jG,join as K,relative as HG,resolve as A,sep as nq}from"path";import{spawnSync as Tq}from"child_process";import{createRequire as zG}from"module";var Wq=1,iq=1,aq=128,FG=65536,MG="https://reasonmachines.com/api/runtime-manifest-v2",NG=30000,IG=600000,kq=1e4,TG=60000,AG=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;var xq=/^[a-z0-9_.-]{1,80}$/,BG=64,DG="so.ara.device-broker",Vq=["com.apple.security.cs.allow-jit","com.apple.security.cs.allow-unsigned-executable-memory"],OG=["service.install_started","service.install_completed","service.install_failed","service.launcher_adopted","service.launcher_conflict","service.started","service.reconnecting","service.reconnected","service.idle_sleep_held","service.idle_sleep_released","service.idle_sleep_failed","service.start_failed","service.stopped","service.exit_failed","service.singleton_rejected","credential.migration_started","credential.migration_completed","credential.migration_failed","credential.store_started","credential.store_completed","credential.store_failed","credential.delete_started","credential.delete_completed","credential.delete_failed","update.check_started","update.not_available","update.download_started","update.downloaded","update.verified","update.activated","update.rollback","update.failed","executor.update.check_started","executor.update.not_available","executor.update.download_started","executor.update.downloaded","executor.update.verified","executor.update.activated","executor.update.rollback","executor.update.failed","identity.refresh_completed","identity.refresh_failed","update.device_moved","update.components_installed","update.deferred","update.deferral_expired","worker.previous_exit","worker.capabilities_withheld","identity.computer_use_unavailable"];function e(q){if(q?.aborted)throw new X("update_cancelled","Managed runtime update request was cancelled.")}function Aq(q){return Boolean(q)&&typeof q==="object"&&!Array.isArray(q)}function Bq(q,G,J=[]){let Q=new Set([...G,...J]);return G.every((R)=>(R in q))&&Object.keys(q).every((R)=>Q.has(R))}function N(q){return typeof q==="string"&&AG.test(q)}function eq(q){return typeof q==="string"&&!Number.isNaN(Date.parse(q))&&new Date(q).toISOString()===q}function EG(q){return Uq.includes(q)}function y(q){r(q,{recursive:!0,mode:448}),qq(q,448)}function tq(q,G){y(I(q));let J=`${q}.${process.pid}.${O()}.tmp`;try{l(J,G,{mode:384,flag:"wx"}),qq(J,384),k(J,q)}finally{if(B(J))D(J)}}function Dq(q={}){if((q.platform??process.platform)!=="darwin")throw new X("unsupported_platform","The managed Reason runtime is currently available only on macOS.");let J=q.environment??process.env,Q=_q(J,"REASON_CLI_CHANNEL")==="staging",R=Q?_q(J,"REASON_MANAGED_RUNTIME_ROOT")?.trim():void 0,W=q.root!==void 0||Boolean(R&&jG(R))?null:K(q.home??c(),"Library","Application Support"),Z=q.root??(W?K(W,Q?"Reason Staging":"Reason","CLI"):R);return{executableName:"reason",root:Z,...W?{legacyRoot:K(W,"Ara",...Q?["staging","runtime"]:["runtime"])}:{},versions:K(Z,"versions"),current:K(Z,"current"),previous:K(Z,"previous"),brokerLock:K(Z,"broker.lock"),transitionLock:K(Z,"transition.lock"),lifecycleEvents:K(Z,"lifecycle-events")}}function CJ(q){let G=q.legacyRoot;if(!G)return null;return{root:G,versions:K(G,"versions"),current:K(G,"current"),previous:K(G,"previous"),brokerLock:K(G,"broker.lock"),transitionLock:K(G,"transition.lock"),lifecycleEvents:K(G,"lifecycle-events")}}function S(q,G){if(!N(G))throw new X("invalid_version","Invalid managed Reason runtime version.");let J=K(q.versions,G,"ara");if(!q.executableName)return J;let Q=K(q.versions,G,q.executableName),R=(Z)=>{try{return T(Z),!0}catch(_){if(_.code==="ENOENT")return!1;throw _}},U=R(J),W=R(Q);if(U&&W)throw new X("installed_artifact_mismatch","Ambiguous managed runtime executable layout.");return U?J:Q}function n(q,G){if(!N(G))throw new X("invalid_version","Invalid managed Reason runtime version.");return Oq(S(q,G))}function Oq(q){return K(I(q),p(q)==="reason"?fq:zq)}function qG(q,G){if(!N(q)||!N(G))throw new X("invalid_version","Invalid managed Reason runtime version.");let[J,Q]=q.split("-",2),[R,U]=G.split("-",2),W=J.split(".").map(Number),Z=R.split(".").map(Number);for(let H=0;H<3;H+=1){let j=W[H]-Z[H];if(j!==0)return j<0?-1:1}if(Q===void 0||U===void 0){if(Q===U)return 0;return Q===void 0?1:-1}let _=Q.split("."),$=U.split("."),Y=Math.max(_.length,$.length);for(let H=0;H<Y;H+=1){let j=_[H],z=$[H];if(j===void 0||z===void 0){if(j===z)return 0;return j===void 0?-1:1}if(j===z)continue;let F=/^\d+$/.test(j),w=/^\d+$/.test(z);if(F&&w)return Number(j)<Number(z)?-1:1;if(F!==w)return F?-1:1;return j<z?-1:1}return 0}function CG(q=process.arch){let G=`darwin-${q}`;if(!EG(G))throw new X("unsupported_architecture","The managed Reason runtime supports only Apple Silicon and Intel Macs.");return G}function Pq(q){return[...q.matchAll(/<key>\s*([^<]+?)\s*<\/key>/g)].map((G)=>G[1].trim())}function gq(q){let G=q.match(/^CodeDirectory .*$/gm)??[];return G.length>0&&G.every((J)=>{return(/ flags=0x[0-9a-f]+\(([^)]*)\)(?: |$)/.exec(J)?.[1]?.split(/[ ,]+/).filter(Boolean)??[]).includes("runtime")})}function SG(q){let G=`TeamIdentifier=${hq}`,J=`Identifier=${DG}`,Q=Pq(q.brokerEntitlements),R=Pq(q.credentialLibraryEntitlements);if(!q.brokerDetail.split(`
|
|
3
3
|
`).includes(G)||!q.brokerDetail.split(`
|
|
4
4
|
`).includes(J)||!gq(q.brokerDetail)||Q.length!==Vq.length||Vq.some((U)=>!new RegExp(`<key>\\s*${U.replaceAll(".","\\.")}\\s*</key>\\s*<true\\s*/>`).test(q.brokerEntitlements)))throw new X("invalid_code_signature","Managed runtime broker has an invalid Reason signature, identifier, or entitlement set.");if(!q.credentialLibraryDetail.split(`
|
|
5
5
|
`).includes(G)||!gq(q.credentialLibraryDetail)||R.length!==0)throw new X("invalid_code_signature","Managed runtime credential library has an invalid signature or entitlement.")}function b(q,G){let J=Tq("/usr/bin/codesign",q,{stdio:["ignore","pipe","pipe"]});if(J.status!==0)throw new X("invalid_code_signature",G);return[new TextDecoder().decode(J.stdout??new Uint8Array),new TextDecoder().decode(J.stderr??new Uint8Array)].join("")}var Eq=(q,G)=>{b(["--verify","--strict","--verbose=2",q],"Managed runtime broker code signature is invalid."),b(["--verify","--strict","--verbose=2",G],"Managed runtime credential library code signature is invalid."),SG({brokerDetail:b(["-d","--verbose=4",q],"Managed runtime broker signer could not be inspected."),brokerEntitlements:b(["-d","--entitlements",":-",q],"Managed runtime broker entitlements could not be inspected."),credentialLibraryDetail:b(["-d","--verbose=4",G],"Managed runtime credential library signer could not be inspected."),credentialLibraryEntitlements:b(["-d","--entitlements",":-",G],"Managed runtime credential library entitlements could not be inspected.")})};async function LG(q,G,J){let Q=q.headers.get("content-length");if(Q!==null){let Y=Number(Q);if(!Number.isSafeInteger(Y)||Y<0||Y>G)throw new X("response_too_large","Managed runtime response exceeded its size limit.")}if(!q.body){let Y=new Uint8Array(await q.arrayBuffer());if(Y.byteLength>G)throw new X("response_too_large","Managed runtime response exceeded its size limit.");return Y}let R=q.body.getReader(),U=[],W=0,Z=()=>{if(!J)return R.read();return new Promise((Y,H)=>{let j=()=>{J.removeEventListener("abort",j),R.cancel(J.reason).catch(()=>{}),H(J.reason??new DOMException("Aborted","AbortError"))};if(J.aborted){j();return}J.addEventListener("abort",j,{once:!0}),R.read().then((z)=>{J.removeEventListener("abort",j),Y(z)},(z)=>{J.removeEventListener("abort",j),H(z)})})};try{while(!0){let Y=await Z();if(Y.done)break;if(W+=Y.value.byteLength,W>G)throw await R.cancel(),new X("response_too_large","Managed runtime response exceeded its size limit.");U.push(Y.value)}}finally{try{R.releaseLock()}catch{}}let _=new Uint8Array(W),$=0;for(let Y of U)_.set(Y,$),$+=Y.byteLength;return _}async function u(q){let G;try{G=new URL(q.url)}catch{throw new X("invalid_update_url","Managed runtime update URL is invalid.")}if(G.protocol!=="https:"||G.username||G.password||G.hash)throw new X("invalid_update_url","Managed runtime update URL must use HTTPS.");let J=new AbortController,Q,R=()=>{Q??="caller",J.abort(q.signal?.reason)};if(q.signal?.aborted)R();else q.signal?.addEventListener("abort",R,{once:!0});let U=setTimeout(()=>{Q??="timeout",J.abort(Error("managed runtime fetch timed out"))},q.timeoutMs),W=(Z,_)=>{if(Z instanceof X)return Z;if(Q==="caller")return new X("update_cancelled","Managed runtime update request was cancelled.");if(Q==="timeout")return new X("update_fetch_timeout","Managed runtime update request timed out.");return new X("update_fetch_failed",_)};try{let Z;try{if(Z=await q.fetchImpl(G,{headers:{accept:q.accept},signal:J.signal}),J.signal.aborted)throw W(J.signal.reason,"Managed runtime update request was cancelled.")}catch(_){throw W(_,"Managed runtime update request failed.")}if(!Z.ok)throw new X("update_http_error","Managed runtime update request was rejected.");if(Z.url&&new URL(Z.url).protocol!=="https:")throw new X("insecure_redirect","Managed runtime update redirected to an insecure URL.");try{let _=await LG(Z,q.maximumBytes,J.signal);if(J.signal.aborted)throw W(J.signal.reason,"Managed runtime update response was cancelled.");return _}catch(_){throw W(_,"Managed runtime update response failed.")}}finally{clearTimeout(U),q.signal?.removeEventListener("abort",R)}}async function GG(q,G,J=kq,Q){let R=typeof J==="number"?J:kq,U=typeof J==="number"?Q:J;if(U?.aborted)return!1;let W=await dq([q,"--version"],{timeoutMs:R,...U?{signal:U}:{}});return W.exitCode===0&&W.stdout.trim().replace(/^v/,"")===G}async function wG(q){let G=!1,J=null,Q=null,R=(U)=>{try{M(q.paths,U,{now:q.now})}catch{}};try{let U=q.home??c();if(!uq(q.manifest.version,U))return{status:"current"};Q=sq(U);let W=await u({url:new URL(mq,q.manifest.artifacts[q.target].broker.url).toString(),maximumBytes:Rq,fetchImpl:async(j,z)=>{let F=await q.fetchImpl(j,z);return G=F.status===404,F},timeoutMs:q.timeoutMs,accept:"application/json",signal:q.signal}),{manifest:Z}=vq(new TextDecoder().decode(W),q.trustedKeys);if(Z.version!==q.manifest.version||Z.published_at!==q.manifest.published_at)throw new X("identity_manifest_mismatch","Background identity manifest names another release.");let _=Z.artifacts[q.target],$=await u({url:_.url,maximumBytes:_.size_bytes,fetchImpl:q.fetchImpl,timeoutMs:q.timeoutMs,accept:"application/octet-stream",signal:q.signal});P($,_),y(q.workDirectory),J=K(q.workDirectory,`.identity-${process.pid}-${O()}`),r(J,{mode:448});let Y=K(J,"identity.tgz");if(l(Y,$,{mode:384,flag:"wx"}),Tq("/usr/bin/tar",["-xzf",Y,"-C",J],{stdio:"ignore",timeout:60000}).status!==0)throw new X("identity_extract_failed","Background identity archive could not be extracted.");return Nq({sourceApp:K(J,"Reason.app"),home:U,releaseSigned:!0,...q.command?{command:q.command}:{}}),R({event:"identity.refresh_completed",runtime_version:q.manifest.version,...Q?{from_version:Q}:{},to_version:q.manifest.version}),{status:"installed"}}catch(U){if(G)return{status:"unpublished"};let W=U instanceof X||U instanceof lq?U.code:"identity_install_failed";return process.stderr.write(`Reason background identity: identity_update_failed (${W})
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Be as jJ,Je as kJ,Ke as LJ,Le as gJ,pf as EJ}from"./vm-hands-entry-lite-zfwg7ehq.js";import{createHash as f,randomBytes as YJ}from"crypto";import{closeSync as MJ,fsyncSync as OJ,mkdirSync as pJ,openSync as DJ,renameSync as lJ,rmSync as uJ,statSync as qJ,writeSync as AJ,constants as R}from"fs";import{join as r}from"path";var oJ=1;var s=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function GJ(J){if(J.environment!==void 0||J.payload.environment!==void 0)throw new P("vm_hands_bind_invalid","bind carries a plaintext environment");if(J.payload.vm_hands_env_deferred===!0&&J.environment_sealed!==void 0)throw new P("vm_hands_bind_invalid","split bind carries an environment");return J.environment_sealed!==void 0}function BJ(J,Z){let{payload:z,authority:X}=J;if(!z||typeof z!=="object"||Array.isArray(z)||!X||typeof X!=="object"||Array.isArray(X)||!Z.deviceId||!Z.rootId||z.run_id!==Z.runId||z.device_id!==Z.deviceId||X.device_id!==Z.deviceId||z.root_id!==Z.rootId||Z.snapshotId!==void 0&&z.snapshot_id!==Z.snapshotId)throw new P("vm_hands_env_invalid","environment does not match this Hands");return z}function _J(J){if(J.capability!=="hands.connect")throw new P("vm_hands_bind_invalid","not a hands.connect claim");let Z=J.payload;return{kind:"vm_hands.bind",v:1,bind_id:J.attempt_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,run_id:J.run_id,session_id:typeof Z.workspace_id==="string"&&s.test(Z.workspace_id)?Z.workspace_id:J.run_id,brain_generation:Z.target_generation,fence_id:Z.target_fence_id,lease_until:J.lease_until,policy:{agent_profile:"",confinement_key:String(Z.hands_confinement??""),browser_egress:Z.browser_egress??null,policy_digest:Z.vm_hands_policy_digest},cwd:typeof Z.cwd==="string"?Z.cwd:"",claim:J,env:GJ(J)?J.environment_sealed:null,workspace_deferred:dJ(J)}}function dJ(J){let Z=J.payload[LJ];if(Z===void 0)return!1;if(Z!==!0||J.payload.vm_hands_env_deferred!==!0||J.environment_sealed!==void 0)throw new P("vm_hands_bind_invalid","a pre-bind must be environment-less");return!0}class P extends Error{code;constructor(J,Z){super(Z);this.code=J}}var I=(J)=>Buffer.from(J instanceof Uint8Array?J:new Uint8Array(J)).toString("base64url"),m=(J)=>new Uint8Array(Buffer.from(J,"base64url"));function b(J){if(J===null||typeof J!=="object")return JSON.stringify(J);if(Array.isArray(J))return`[${J.map(b).join(",")}]`;return`{${Object.keys(J).sort().map((Z)=>`${JSON.stringify(Z)}:${b(J[Z])}`).join(",")}}`}async function jZ(J){let Z=await crypto.subtle.importKey("pkcs8",m(J.device_key.pkcs8),{name:"ECDSA",namedCurve:"P-256"},!1,["sign"]),z=m(J.device_key.spki),X=await crypto.subtle.generateKey({name:"ECDH",namedCurve:"P-256"},!1,["deriveKey"]),L=new Uint8Array(await crypto.subtle.exportKey("spki",X.publicKey)),j=f("sha256").update(z).digest("base64url");return{signing:{privateKey:Z},agreement:X,signingSpki:z,agreementSpki:L,fingerprint:j}}var iJ=4;class rJ{init;keys;hooks;options;identity="identity_free";lastBrainGeneration=new Map;bound=new Map;binding=new Map;unbinding=new Set;servedRun=!1;commandsSinceVerified=!1;bootKillPending=!1;unverified=new Set;grants=new Map;structural=Promise.resolve();exclusive(J){let Z=this.structural.then(J,J);return this.structural=Z.catch(()=>{return}),Z}constructor(J,Z,z,X){this.init=J;this.keys=Z;this.hooks=z;this.options=X;if(!s.test(J.workspace_id)&&!/^ws-[a-z0-9]{8,64}$/.test(J.workspace_id))throw new P("vm_hands_layout_invalid","bad workspace id");if(!Number.isSafeInteger(J.instance_generation)||J.instance_generation<1)throw new P("vm_hands_layout_invalid","bad generation")}get phase(){if(this.identity==="identity_free")return"identity_free";if(this.unbinding.size)return"unbinding";return this.bound.size||this.binding.size?"bound":"registered"}isBoundRun(J){for(let Z of this.bound.values())if(Z.runId===J)return!0;return!1}bindIdForRun(J){for(let Z of this.bound.values())if(Z.runId===J)return Z.bindId;return null}get liveBindIds(){return[...new Set([...this.bound.keys(),...this.binding.keys(),...this.unbinding])]}async environmentInstalled(J,Z,z){for(let X=Date.now()+Z;;){let L=this.bound.get(J);if(!L)return!1;if(L.envInstalled)return!0;if(Date.now()>=X||z?.aborted)return!1;await new Promise((j)=>setTimeout(j,25))}}opServed(){this.commandsSinceVerified=!0}canSpawn(J){for(let Z of this.bound.values())if(Z.runId===J)return Z.envInstalled;return!1}async registerFrame(J){if(this.identity!=="identity_free")throw new P("vm_hands_register_twice","already registered");if(typeof J!=="string"||J.length<16||J.length>256)throw new P("vm_hands_challenge_invalid","bad register challenge");let Z={challenge:J,t:"register",v:oJ,workspace_id:this.init.workspace_id,instance_generation:this.init.instance_generation,credential:this.init.credential,device_public_key:I(this.keys.signingSpki),env_public_key:I(this.keys.agreementSpki),key_fingerprint:this.keys.fingerprint,manifest_digest:this.init.manifest_digest,nonce:I(YJ(32)),timestamp_ms:(this.options.now??Date.now)(),vm_hands_attest_hold:!0},z=await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new TextEncoder().encode(b(Z)));return{...Z,device_signature:I(z)}}async helloFrame(J,Z){if(this.identity==="identity_free")throw new P("vm_hands_not_registered","hello before register");let z=String((this.options.now??Date.now)()),X=I(YJ(32)),L=EJ({method:"GET",pathAndQuery:jJ,timestamp:z,nonce:X,challenge:J,bodySha256:f("sha256").update("").digest("hex")}),j=new Uint8Array(await crypto.subtle.sign({name:"ECDSA",hash:"SHA-256"},this.keys.signing.privateKey,new Uint8Array(L)));return{t:"hello",timestamp:z,nonce:X,signature:I(sJ(j)),...Z?{vm_hands_previous_connection:Z}:{}}}registered(){if(this.identity!=="identity_free")throw new P("vm_hands_register_unexpected","registered twice");this.identity="registered"}async bind(J){if(this.identity!=="registered")throw new P("vm_hands_not_registered","bind before register");if(J.kind!=="vm_hands.bind"||J.v!==1)throw new P("vm_hands_bind_invalid","bad bind");for(let z of[J.bind_id,J.attempt_id,J.run_id,J.session_id,J.fence_id])if(!s.test(z))throw new P("vm_hands_bind_invalid","bad id");if(!Number.isSafeInteger(J.brain_generation)||J.brain_generation<=(this.lastBrainGeneration.get(J.run_id)??0))throw new P("vm_hands_generation_stale","brain generation not strictly higher");if(J.env&&(J.env.aad!==J.bind_id||J.env.alg!=="ECDH-P256+A256GCM"))throw new P("vm_hands_bind_invalid","bad env envelope");if(!/^[0-9a-f]{64}$/.test(J.policy.policy_digest))throw new P("vm_hands_bind_invalid","bad policy or nonce");if(f("sha256").update(b({hands_confinement:J.policy.confinement_key||null,browser_egress:J.policy.browser_egress??null})).digest("hex")!==J.policy.policy_digest)throw new P("vm_hands_policy_mismatch","policy digest does not match the claim");if(this.liveBindIds.includes(J.bind_id)||[...this.bound.values()].some((z)=>z.runId===J.run_id)||[...this.binding.values()].includes(J.run_id))throw new P("vm_hands_busy","this run already holds a bind here");if(this.liveBindIds.length>=iJ)throw new P("vm_hands_busy","every bind slot is held");if(this.grants.size)throw new P("vm_hands_busy","a bind waits for its workspace beside the setup");if(J.workspace_deferred&&(this.liveBindIds.length||this.commandsSinceVerified))throw new P("vm_hands_prebind_unsafe","a pre-bind needs a VM that served nothing since its last full kill");if(this.lastBrainGeneration.set(J.run_id,J.brain_generation),this.binding.set(J.bind_id,J.run_id),J.workspace_deferred){let z,X,L=new Promise((j,U)=>{z=j,X=U});L.catch(()=>{return}),this.grants.set(J.bind_id,{promise:L,resolve:z,reject:X})}return this.exclusive(()=>this.setUp(J))}async setUp(J){let Z=[...this.bound.keys()],z=null,X=!1,L=this.grants.get(J.bind_id);try{if(L&&(Z.length||this.commandsSinceVerified))throw new P("vm_hands_prebind_unsafe","a pre-bind needs a VM that served nothing since its last full kill");if(Z.length===0){if(this.bootKillPending&&!this.servedRun){try{await this.hooks.killProbe()}catch{throw new P("vm_hands_kill_unverified","the boot's scoped kill did not verify")}this.bootKillPending=!1}if(this.commandsSinceVerified)await this.hooks.killAndVerifyPayload(),this.unverified.clear(),this.commandsSinceVerified=!1;else if(this.unverified.size>0)await this.hooks.killAndVerifyPayload({own:!0}),this.unverified.clear()}else if(this.unverified.size>0)await this.hooks.killAndVerifyPayload({keep:Z}),this.unverified.clear();this.servedRun=!0,X=!0;let{launchId:j,applied:U,readyData:O}=await this.hooks.startExecutor({bindId:J.bind_id,sessionId:J.session_id,policyDigest:J.policy.policy_digest,confinementKey:J.policy.confinement_key,browserEgress:J.policy.browser_egress,cwd:J.cwd,claim:J.claim,...L?{workspaceGrant:L.promise}:{}}),q=this.hooks.restatLayout(),_=null,D=null;if(J.env){let S=J.claim?.owner??{},H=BJ(await this.openSealed(J.env,J.bind_id),{runId:J.run_id,deviceId:typeof S.device_id==="string"?S.device_id:"",rootId:J.claim?.root_id??""});this.commandsSinceVerified=!0,_=this.hooks.installEnvironment(J.bind_id,H),D=typeof H.snapshot_id==="string"&&H.snapshot_id?H.snapshot_id:null,z=this.writeJobEnvRootOnly(J.bind_id,H)}if(this.unbinding.has(J.bind_id))throw new P("vm_hands_bind_lost","unbound while binding");return this.bound.set(J.bind_id,{bindId:J.bind_id,runId:J.run_id,sessionId:J.session_id,brainGeneration:J.brain_generation,policyDigest:J.policy.policy_digest,launchId:j,envInstalled:_!==null,rootId:J.claim?.root_id??"",envDirectory:z}),this.binding.delete(J.bind_id),this.grants.delete(J.bind_id),{bind_id:J.bind_id,attempt_id:J.attempt_id,attempt_token:J.attempt_token,launch_id:j,snapshot_revision:_,snapshot_id:D,layout:q,...O?{ready_data:O}:{},policy_digest:f("sha256").update(b({hands_confinement:U.hands_confinement??null,browser_egress:U.browser_egress??null})).digest("hex")}}catch(j){if(z)KJ(z);if(X){let O=[...this.bound.keys()];await this.hooks.killAndVerifyPayload({bindId:J.bind_id,keep:O,own:!0}).catch(()=>{this.unverified.add(J.bind_id)})}this.binding.delete(J.bind_id),this.grants.delete(J.bind_id);let U=j&&typeof j==="object"&&"code"in j&&typeof j.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(j.code)?j.code:"vm_hands_bind_failed";throw j instanceof P?j:new P(U,"executor refused the bind")}}grantWorkspace(J){let Z=this.grants.get(J);if(!Z)throw new P("vm_hands_not_binding","no pre-bind waits for a workspace grant");Z.resolve()}abandonWorkspaceGrant(J){this.grants.get(J)?.reject(new P("vm_hands_bind_lost","the pre-bind ended before its workspace grant"))}async deliverEnvironment(J){let Z=this.bound.get(J.attemptId);if(!Z||this.unbinding.has(J.attemptId))throw new P("vm_hands_not_bound","environment delivered while not bound");if(!s.test(J.attemptId)||typeof J.snapshotId!=="string"||!J.snapshotId||J.snapshotId.length>128||J.snapshotId.includes("/"))throw new P("vm_hands_env_invalid","bad snapshot id");let z=`${J.attemptId}/${J.snapshotId}`;if(J.sealed?.alg!=="ECDH-P256+A256GCM"||J.sealed.aad!==z)throw new P("vm_hands_env_invalid","bad env envelope");let X=BJ(await this.openSealed(J.sealed,z),{runId:Z.runId,deviceId:J.deviceId,rootId:Z.rootId,snapshotId:J.snapshotId});this.commandsSinceVerified=!0;let L=this.hooks.installEnvironment(Z.bindId,X);if(Z.envInstalled=!0,Z.envDirectory)KJ(Z.envDirectory);return Z.envDirectory=null,Z.envDirectory=this.writeJobEnvRootOnly(`${Z.bindId}-r${L}`,X),{snapshot_id:J.snapshotId,installed_revision:L,installed:!0}}async attestFrame(J,Z){if(this.identity==="identity_free")throw new P("vm_hands_not_registered","attest before register");if(!J||J.length>65536)throw new P("vm_hands_attest_invalid","no probe script");return this.exclusive(async()=>{if(this.liveBindIds.length)throw new P("vm_hands_attest_invalid","attest beside a bind");let z=await this.hooks.runProbe({nonce:Z,script:J});try{await this.hooks.killProbe()}catch{this.bootKillPending=!0}return{t:"attest",nonce:Z,exit_code:z.exitCode,markers:z.markers,proof_dir_inode:z.proofDirInode,script_sha256:f("sha256").update(J).digest("hex")}})}executorExited(J){return this.hooks.executorExited?.(J)??new Promise(()=>{})}async boundRefused(J){await this.unbind(J)}async unbind(J){let Z=this.bound.get(J)??null;if(this.unbinding.add(J),this.bound.delete(J),this.abandonWorkspaceGrant(J),Z)try{this.hooks.freezeBind?.(J)}catch{}return this.exclusive(()=>this.tearDown(J,Z))}async tearDown(J,Z){try{this.bound.delete(J);let z=[...this.bound.keys()].filter((L)=>L!==J),X=!z.length&&!this.commandsSinceVerified;try{await this.hooks.killAndVerifyPayload(z.length?{bindId:J,keep:z}:X?{bindId:J,own:!0}:void 0)}catch(L){throw this.unverified.add(J),L}if(!z.length)this.unverified.clear(),this.commandsSinceVerified=!1;if(Z?.envDirectory)KJ(Z.envDirectory);return{bind_id:Z?J:null,killed_verified:!0,shredded:!0,srt_fallbacks:z.length?null:this.hooks.takeSrtFallbacks?.()??null}}finally{this.unbinding.delete(J)}}async openSealed(J,Z){let z=()=>{throw new P("vm_hands_env_invalid","env did not decrypt")},X=await crypto.subtle.importKey("spki",m(J.epk),{name:"ECDH",namedCurve:"P-256"},!1,[]).catch(z),L=await crypto.subtle.deriveKey({name:"ECDH",public:X},this.keys.agreement.privateKey,{name:"AES-GCM",length:256},!1,["decrypt"]),j=await crypto.subtle.decrypt({name:"AES-GCM",iv:m(J.iv),additionalData:new TextEncoder().encode(Z)},L,m(J.ct)).catch(z),U=JSON.parse(new TextDecoder().decode(j));if(!U||typeof U!=="object"||Array.isArray(U))throw new P("vm_hands_env_invalid","env not an object");return U}writeJobEnvRootOnly(J,Z){let z=r(this.options.envRoot,`bind-${J}`);pJ(z,{mode:448});let X=qJ(z);if(!X.isDirectory()||(X.mode&63)!==0||X.uid!==(process.getuid?.()??-1))throw new P("vm_hands_env_dir_unsafe","env directory is not root's 0700");let L=Z.variables&&typeof Z.variables==="object"?Z.variables:{},j=Object.entries(L).filter(([q,_])=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(q)&&typeof _==="string").map(([q,_])=>`export ${q}='${String(_).replaceAll("'","'\\''")}'`).join(`
|
|
3
|
+
`)+`
|
|
4
|
+
`,U=r(z,`.job.env.${YJ(8).toString("hex")}`),O=DJ(U,R.O_WRONLY|R.O_CREAT|R.O_EXCL|R.O_NOFOLLOW,384);try{AJ(O,j),OJ(O)}finally{MJ(O)}return lJ(U,r(z,"job.env")),z}}function KJ(J){try{let Z=r(J,"job.env"),z=qJ(Z).size,X=DJ(Z,R.O_WRONLY|R.O_NOFOLLOW);try{AJ(X,Buffer.alloc(z)),OJ(X)}finally{MJ(X)}}catch{}uJ(J,{recursive:!0,force:!0})}function sJ(J){if(J.length!==64)throw new P("vm_hands_signature_invalid","unexpected ECDSA signature length");let Z=(L)=>{let j=0;while(j<L.length-1&&L[j]===0)j++;let U=L.subarray(j),O=U[0]&128?Uint8Array.of(0,...U):U;return Uint8Array.of(2,O.length,...O)},z=Z(J.subarray(0,32)),X=Z(J.subarray(32));return Uint8Array.of(48,z.length+X.length,...z,...X)}import{randomUUID as aJ}from"crypto";var nJ="/app/local-runtime/session?register=vm_hands_v1",tJ="/app/local-runtime",xJ=25000,TJ=20000,eJ=1e4,vJ=5000,wJ=new Set(["pty.start","jobs.control","preview.serve.v1","display.stream.v1"]),FJ=75000,JZ=2000,ZZ=1e4,$Z=new Set(["vm_hands_no_register","vm_hands_register_failed"]),zZ=3,QZ=20000,XZ=250,YZ=2000,a=20000;function hJ(J,Z){return typeof J==="string"&&/^[A-Za-z0-9._:-]{1,160}$/.test(J)?J:Z}class V extends Error{}var KZ=64;async function VJ(J,Z){let z=[...J.modelOps.get(Z)??[]];for(let X of z)X.abort.abort();await Promise.race([Promise.all(z.map((X)=>X.settled)),new Promise((X)=>setTimeout(X,vJ))])}async function GZ(J){let Z=[...J.personTerminals];for(let z of Z)z.abort.abort();if(Z.length)await Promise.race([Promise.all(Z.map((z)=>z.settled)),new Promise((z)=>setTimeout(z,vJ))]);return Z.length}async function c(J,Z,z){return await VJ(J,z),Z.unbind(z)}function n(J){for(let Z of J.outbox?.splice(0)??[])Z.reject(Error("vm_hands_attempt_ended"))}var SJ=15000,FZ=1e4,PZ=1000;async function qZ(J){let Z=Date.now(),z={deviceId:null,connection:null,turns:new Map,lostAt:0,receipts:[],attest:"pending",attestWaiters:[],modelOps:new Map,personTerminals:new Set,bindsStarting:0},X=J.log??(()=>{}),L=async(O)=>{for(let[q,_]of[...z.turns]){z.turns.delete(q),J.onTurn?.(q,null),n(_);let D=await c(z,J.agent,q).catch(()=>null);if(D)z.receipts.push({turn:_,failure:"vm_hands_bind_lost",unbound:D});X("vm_hands.bound_dropped",{reason:O})}},j=0,U=0;try{for(let O=0;!J.signal.aborted;O++){let q=await WZ(J,z).catch((D)=>{if(D instanceof P&&z.deviceId===null&&D.code==="vm_hands_no_session"&&Date.now()-Z<ZZ)return{closeCode:0,closeReason:"vm_hands_no_session"};if(D instanceof P&&z.deviceId===null&&$Z.has(D.code)&&j<zZ&&Date.now()-Z<QZ){j++;let S=Math.min(XZ*2**(j-1),YZ);return U=Math.round(S/2+Math.random()*S/2),X("vm_hands.register_retry",{attempt:j,code:D.code,delay_ms:U}),{closeCode:0,closeReason:"vm_hands_register_retry"}}if(D instanceof P&&z.deviceId===null)throw D;return{closeCode:0,closeReason:D instanceof Error?D.message:String(D)}});if(X("vm_hands.session_closed",{close_code:q.closeCode,reason:q.closeReason.slice(0,120),registered:z.deviceId!==null}),q.closeCode===4401||z.attest==="refused")return;if(J.signal.aborted)return;if(z.turns.size&&Date.now()-z.lostAt>=FJ)await L("reconnect_deadline");if(z.served)z.served=!1,O=0;let _=q.closeReason==="drain_reconnect"?0:q.closeReason==="vm_hands_register_retry"?U:q.closeReason==="vm_hands_no_session"?Math.min(250*2**Math.min(O,5),2000):z.turns.size?Math.min(250*2**Math.min(O,5),5000,Math.max(0,z.lostAt+FJ-Date.now())):Math.min(500*2**O,30000);if(await new Promise((D)=>setTimeout(D,_)),z.turns.size&&Date.now()-z.lostAt>=FJ)await L("reconnect_deadline")}}finally{await L("session_ended")}}async function WZ(J,Z){let z=Z.deviceId,X=J.log??(()=>{}),L=z?`/app/local-runtime/session?device_id=${encodeURIComponent(z)}`:nJ,j=`${J.apiOrigin.replace(/^http/,"ws")}${L}`,U=new WebSocket(j),O=0,q="",_=new Map,D=[],S=null,H=new Promise(($)=>{U.onclose=(K)=>{O=K.code,q=K.reason;for(let Q of _.values())Q.reject(new V(`session closed ${K.code}`));for(let Q of Z.attestWaiters.splice(0))Q(!1);_.clear(),$()}});U.onmessage=($)=>{let K;try{K=JSON.parse(String($.data))}catch{U.close(4400);return}if(K.t==="res"){let Q=K;_.get(Q.id)?.resolve({status:Q.status,body:Q.body}),_.delete(Q.id);return}if(K.t==="reconnect"){let Q=Math.max(0,Math.min(Number(K.after_ms)||0,PZ));X("vm_hands.drain_reconnect",{after_ms:Q}),setTimeout(()=>{try{U.close(4001,"drain_reconnect")}catch{}},Q).unref?.();return}if(!S?.(K))D.push(K)};let p=($,K)=>new Promise((Q,F)=>{let N=D.findIndex((B)=>$.includes(B.t));if(N>=0){Q(D.splice(N,1)[0]);return}let C=setTimeout(()=>{S=null,F(new P("vm_hands_no_register",`no ${$.join("/")} in ${K} ms`))},K);S=(B)=>{if(!$.includes(B.t))return!1;return clearTimeout(C),S=null,Q(B),!0}}),l=($)=>U.send(JSON.stringify($)),g=($,K)=>new Promise((Q,F)=>{if(U.readyState!==WebSocket.OPEN){F(new V("session closed"));return}let N=aJ(),C=typeof K.wait_ms==="number"?K.wait_ms:0,B=setTimeout(()=>{if(!_.delete(N))return;F(new V(`no answer to ${$.split("/").pop()} in ${C+SJ} ms`)),U.close(4000,"request_timeout")},C+SJ);_.set(N,{reject:(Y)=>{clearTimeout(B),F(Y)},resolve:({status:Y,body:G})=>{clearTimeout(B);let W=null;try{W=G?JSON.parse(G):null}catch{}Q({status:Y,json:W})}}),l({t:"req",id:N,path:`${tJ}${$}`,body:JSON.stringify(K)})}),PJ=()=>U.close(1001,"stopping");J.signal.addEventListener("abort",PJ,{once:!0});let t,u=new Map,o=new Map,e=!1,JJ=new Set,ZJ=new Set,$J=Promise.resolve(),d=!1;try{await new Promise((Y,G)=>{let W=setTimeout(()=>G(Error("session open timeout")),FZ);U.onopen=()=>{clearTimeout(W),X("vm_hands.ws_open",{}),Y()},U.onerror=()=>{clearTimeout(W),G(Error("session socket error"))}});let $=await p(["challenge"],5000);X("vm_hands.challenge",{});let K=[],Q=null,F;if(z){l(await J.agent.helloFrame($.challenge,Z.connection));let Y=await p(["ready"],1e4);if(typeof Y.vm_hands_connection==="string")Z.connection=Y.vm_hands_connection;if(F={device_id:z,...Y.cadence?{cadence:Y.cadence}:{}},typeof Y.vm_hands_probe_script==="string"){if(Q=Y.vm_hands_probe_script,d=!0,J.agent.phase==="registered"&&!Z.turns.size)Z.attest="pending"}Z.served=!0,X("vm_hands.reconnected",{device_id:z});let G=Array.isArray(Y.vm_hands_binds)?Y.vm_hands_binds:Y.vm_hands_bind?[Y.vm_hands_bind]:[];for(let[W,M]of[...Z.turns]){if(G.some((T)=>T&&T.operation_id===M.claim.operation_id&&T.attempt_id===M.claim.attempt_id)){K.push(M),X("vm_hands.bound_resumed",{operation_id:M.claim.operation_id});continue}Z.turns.delete(W),J.onTurn?.(W,null),n(M);let A=await c(Z,J.agent,W).catch(()=>null);if(A)Z.receipts.push({turn:M,failure:"vm_hands_bind_lost",unbound:A});X("vm_hands.bound_dropped",{reason:"not_named_on_reconnect"})}}else{l(await J.agent.registerFrame($.challenge)),X("vm_hands.register_sent",{});let Y=await Promise.race([p(["registered","register_refused"],1e4),H.then(()=>{throw new P(q==="register_failed"?"vm_hands_register_failed":"vm_hands_register_closed","session closed before the register was answered")})]);if(Y.t==="register_refused")throw new P(Y.code,"register refused");J.agent.registered();let G=Y;if(F=G,Z.deviceId=G.device_id,typeof G.vm_hands_connection==="string")Z.connection=G.vm_hands_connection;if(typeof G.vm_hands_probe_script==="string"){if(Q=G.vm_hands_probe_script,d=!0,J.agent.phase==="registered"&&!Z.turns.size)Z.attest="pending"}Z.served=!0,X("vm_hands.registered",{device_id:F.device_id})}let N=async()=>{let Y=await g("/heartbeat",await J.heartbeat());if(Y.status>=300)throw Error(`heartbeat ${Y.status}`)};await N();let C=F.cadence?.presence_interval_ms??30000;if(t=setInterval(()=>{N().catch(()=>U.close())},C),Q&&Z.attest!=="accepted"&&J.agent.phase==="registered"&&!Z.turns.size)yJ(Q,$.challenge);let B=(Y,G)=>{o.set(Y,G().catch(async(W)=>{if(await WJ(W,Y),W instanceof V)U.close();else await zJ().catch(()=>{return})}).finally(()=>{o.delete(Y)}))};try{await zJ();for(let Y of K)Y.flush=()=>NJ(Y),Y.flush(),B(Y.claim.attempt_id,()=>UJ(Y));while(!J.signal.aborted&&U.readyState===WebSocket.OPEN){let Y=await g("/operations/claim",{wait_ms:Math.min(F.cadence?.claim_wait_ms??xJ,xJ)});if(Y.status===204||!Y.json)continue;if(Y.status>=300)throw Error(`claim ${Y.status}`);let G=Y.json;if(G.capability==="hands.connect"){if(o.has(G.attempt_id)){w({claim:G,eventSeq:0}).complete("failed",{error_code:"vm_hands_busy"}).catch(()=>{return});continue}B(G.attempt_id,()=>IJ(G))}else fJ(G).catch(()=>{return})}}catch(Y){await WJ(Y,null)}}finally{if(t)clearInterval(t);J.signal.removeEventListener("abort",PJ);for(let $ of Z.turns.values())$.flush=null;U.close(),await H,await Promise.all([...o.values()]);for(let $ of J.agent.liveBindIds){if(Z.turns.has($))continue;let K=await c(Z,J.agent,$).catch(()=>null),Q=u.get($);if(K&&Q)Z.receipts.push({turn:{...Q,eventSeq:Q.eventSeq+1},failure:"vm_hands_bind_lost",unbound:K});X("vm_hands.bound_dropped",{reason:"bound_after_loss"})}for(let $ of JJ)$.abort()}return{closeCode:O,closeReason:q};async function WJ($,K){if($ instanceof V){if(!e&&Z.turns.size)Z.lostAt=Date.now();e=!0}else{let Q=K!==null?[K]:[...new Set([...Z.turns.keys(),...J.agent.liveBindIds])];if(K===null)e=!0;for(let F of Q){let N=Z.turns.get(F);if(Z.turns.delete(F),N)n(N),J.onTurn?.(F,null);if(J.agent.liveBindIds.includes(F)){let C=await c(Z,J.agent,F).catch(()=>null),B=u.get(F)??N;if(C&&B)Z.receipts.push({turn:{...B,eventSeq:B.eventSeq+1},failure:"vm_hands_bind_lost",unbound:C})}}}X("vm_hands.session_lost",{error:$ instanceof Error?$.message:String($),bound_kept:Z.turns.size})}function w($){let K=$.claim,Q={attempt_id:K.attempt_id,attempt_token:K.attempt_token},F=encodeURIComponent(K.operation_id);return{fence:Q,op:F,complete:(C,B={})=>g(`/operations/${F}/complete`,{...Q,status:C,...B}),emit:(C,B)=>{let Y=($.chain??Promise.resolve()).catch(()=>{return}).then(()=>N(C,B));return $.chain=Y,Y}};async function N(C,B){let Y=$.eventSeq,G=(T)=>g(`/operations/${F}/events`,{...Q,event_seq_start:T,events:[{kind:C,payload:{sequence:T,capability:String(K.capability??"hands.connect"),data:B}}]}),W=Y,M=await G(W),A=M.status===409?M.json?.expected_event_seq:void 0;if(typeof A==="number"&&A===Y+1)M={status:200,json:{duplicate:!0}};else if(typeof A==="number"&&A>=0&&A!==Y)W=A,M=await G(W);if(M.status<300)$.eventSeq=W+1;return M}}function HJ($){return(K,Q)=>new Promise((F,N)=>{if(Z.turns.get($.claim.attempt_id)!==$){N(Error("vm_hands_attempt_ended"));return}if($.outbox??=[],$.outbox.length>=KZ){N(Error("vm_hands_outbox_full"));return}$.outbox.push({kind:K,data:Q,resolve:F,reject:N}),$.flush?.()})}function NJ($){if(ZJ.has($))return;ZJ.add($),(async()=>{try{while($.outbox?.length&&Z.turns.get($.claim.attempt_id)===$&&U.readyState===WebSocket.OPEN){let K=$.outbox[0],Q;try{Q=await w($).emit(K.kind,K.data)}catch(F){if(F instanceof V)return;Q={status:500}}if($.outbox.shift(),Q.status<300)K.resolve();else K.reject(Error(`${K.kind} refused ${Q.status}`))}}finally{ZJ.delete($)}})()}async function yJ($,K){try{let Q=await J.agent.attestFrame($,K);if(U.readyState!==WebSocket.OPEN)return;l(Q);let F=await p(["attested","attest_refused"],15000);Z.attest=F.t==="attested"?"accepted":"refused";for(let N of Z.attestWaiters.splice(0))N(Z.attest==="accepted");if(X("vm_hands.attest",{result:Z.attest,exit_code:Q.exit_code,...F.t==="attest_refused"?{code:String(F.code??"")}:{}}),Z.attest==="refused")U.close(4401,"attest_refused")}catch(Q){X("vm_hands.attest_failed",{code:Q instanceof P?Q.code:"probe_error"});for(let F of Z.attestWaiters.splice(0))F(!1);if(Z.attest!=="accepted")U.close(4000,"attest_unanswered")}}async function IJ($){let K=d&&Z.attest==="pending",Q=$.vm_hands_attest,F=Q;if(Z.attest==="refused"){X("vm_hands.claim_attest_refused",{said:typeof Q==="string"?Q.slice(0,16):typeof Q,local:Z.attest}),await w({claim:$,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(F==="accepted"){if(!K&&Z.attest!=="accepted"){Z.attest="accepted";for(let x of Z.attestWaiters.splice(0))x(!0)}}else if(F!=="pending"||!K&&Z.attest!=="accepted"){X("vm_hands.claim_attest_refused",{said:typeof Q==="string"?Q.slice(0,16):typeof Q,local:Z.attest}),await w({claim:$,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}if(Z.attest!=="accepted"){let x=Date.parse($.lease_until)-Date.now()-5000,E=Math.max(0,Math.min(a,Number.isFinite(x)?x:a));if(!await new Promise((k)=>{let i=setTimeout(()=>k(!1),E);Z.attestWaiters.push((XJ)=>{clearTimeout(i),k(XJ)})})){await w({claim:$,eventSeq:0}).complete("failed",{error_code:"vm_hands_unattested"}).catch(()=>{return});return}}let N={claim:$,eventSeq:0},{complete:C,emit:B}=w(N),Y;try{if($.capability!=="hands.connect")throw new P("vm_hands_bind_invalid","not hands.connect");Y=!GJ($)}catch(x){X("vm_hands.bind_refused",{code:x instanceof P?x.code:"unexpected"}),await C("failed",{error_code:x instanceof P?x.code:"vm_hands_bind_invalid"});return}let G,W=null,M=!1;Z.bindsStarting++;try{let x=await GZ(Z);if(x)X("vm_hands.person_terminals_closed",{count:x});let E=_J($),h=J.agent.bind(E);if(E.workspace_deferred)M=!0,W=RJ(N,()=>M);G=await h}catch(x){X("vm_hands.bind_refused",{code:x instanceof P?x.code:"unexpected"}),await C("failed",{error_code:x instanceof P?x.code:"vm_hands_bind_failed"});return}finally{M=!1,Z.bindsStarting--}let A=W?await W:-1,T={...G.ready_data??J.readyData({launchId:G.launch_id,claim:$})};if(Y)delete T.environment_installed;let QJ=!Y&&G.snapshot_revision!==null&&G.snapshot_id!==null?{environment_installed:{snapshot_id:G.snapshot_id,installed_revision:G.snapshot_revision}}:{};u.set($.attempt_id,{claim:$,launchId:G.launch_id,readyData:T,eventSeq:N.eventSeq,ackSeq:-1});let y=await B("hands.ready",{...T,...QJ,vm_hands:{layout:G.layout,policy_digest:G.policy_digest,launch_id:G.launch_id}});if(u.delete($.attempt_id),y.status>=300){await VJ(Z,$.attempt_id),await J.agent.boundRefused($.attempt_id),await C("failed",{error_code:hJ(y.json?.error,"vm_hands_probe_failed")});return}let v={claim:$,launchId:G.launch_id,readyData:T,eventSeq:N.eventSeq,ackSeq:A};Z.turns.set($.attempt_id,v),v.flush=()=>NJ(v),J.onTurn?.($.attempt_id,HJ(v)),await UJ(v)}async function RJ($,K){let{fence:Q,op:F}=w($),N=$.claim.attempt_id,C=-1;try{for(;;){let B=await g(`/operations/${F}/heartbeat`,{...Q,control_ack_seq:C,wait_ms:TJ});if(!K())return C;if(B.status>=300)return J.agent.abandonWorkspaceGrant(N),C;let Y=(B.json?.controls??[]).slice().sort((G,W)=>G.seq-W.seq);for(let G of Y){if(G.seq<=C)continue;if(C=G.seq,G.kind===gJ)return X("vm_hands.workspace_granted",{}),J.agent.grantWorkspace(N),C;return X("vm_hands.workspace_grant_abandoned",{control:/^[a-z][a-z0-9._-]{0,63}$/.test(G.kind)?G.kind:"other"}),J.agent.abandonWorkspaceGrant(N),C}}}catch{return J.agent.abandonWorkspaceGrant(N),C}}async function UJ($){let{fence:K,op:Q}=w($),F=null,N=null,C=J.agent.executorExited($.claim.attempt_id).then((B)=>{return N=B,null});J:for(;;){let B=await Promise.race([C,g(`/operations/${Q}/heartbeat`,{...K,control_ack_seq:$.ackSeq,wait_ms:TJ})]);if(!B){F="vm_hands_executor_exited",X("vm_hands.executor_exited",{reason:N});break}if(B.status>=300)break;let Y=(B.json?.controls??[]).slice().sort((G,W)=>G.seq-W.seq);for(let G of Y){if(G.seq<=$.ackSeq)continue;if(G.kind==="operation.cancel"||G.kind==="cancel"){$.ackSeq=G.seq;break J}if(G.kind===kJ)try{await bJ($,G.payload??{})}catch(W){if(W instanceof V)throw W;F=W instanceof P?W.code:"environment_unavailable";let M=W&&typeof W==="object"&&"code"in W&&typeof W.code==="string"&&/^[a-z][a-z0-9_]{2,63}$/.test(W.code)?W.code:null;X("vm_hands.environment_refused",{code:F,cause:M});break J}$.ackSeq=G.seq}}await mJ($,F)}async function fJ($){let K=$,Q={claim:K,eventSeq:0},{complete:F,emit:N,fence:C,op:B}={...w(Q)},Y=$.vm_hands_origin==="person"?"person":"model",G=String($.capability??"");if(!J.executeOp){await F("failed",{error_code:"vm_hands_op_unsupported"});return}if($.vm_hands_attest==="accepted"&&Z.attest==="pending"&&!(d&&Z.attest==="pending")){Z.attest="accepted";for(let E of Z.attestWaiters.splice(0))E(!0)}if(Z.attest!=="accepted"){let E=Date.parse(String($.lease_until??""))-Date.now()-5000,h=Z.attest==="refused"?0:Math.max(0,Math.min(a,Number.isFinite(E)?E:a));if(!(h>0&&await new Promise((i)=>{let XJ=setTimeout(()=>i(!1),h);Z.attestWaiters.push((cJ)=>{clearTimeout(XJ),i(cJ)})}))){await F("failed",{error_code:"vm_hands_unattested"});return}}let W=J.agent.bindIdForRun(K.run_id);if(Y==="model"&&W===null){await F("failed",{error_code:"vm_hands_not_bound"});return}let M=G==="pty.start"&&Y==="person"&&!$.authority;if(M&&(J.agent.liveBindIds.length>0||Z.bindsStarting>0)){await F("failed",{error_code:"vm_hands_bound"});return}if(wJ.has(G)&&!M&&J.agent.liveBindIds.length===0){await F("failed",{error_code:"vm_hands_not_bound"});return}if(Y==="model"&&W||wJ.has(G)&&!M)J.agent.opServed();let A=new AbortController;JJ.add(A);let T,QJ=new Promise((E)=>{T=E}),y={abort:A,settled:QJ};if(M)Z.personTerminals.add(y);if(Y==="model"&&W){let E=Z.modelOps.get(W)??new Set;E.add(y),Z.modelOps.set(W,E),await J.agent.environmentInstalled(W,JZ,A.signal)}let v=-1,x=setInterval(()=>{g(`/operations/${B}/heartbeat`,{...C,control_ack_seq:v,wait_ms:0}).then((E)=>{if(E.status>=300){A.abort();return}let h=E.json?.controls??[];for(let k of h)if(v=Math.max(v,k.seq),k.kind==="operation.cancel"||k.kind==="cancel")A.abort()},()=>A.abort())},eJ);try{let E=await J.executeOp({kind:Y,claim:$,...Y==="model"&&W?{bindId:W}:{},signal:A.signal,emit:async(k)=>{await N(k.kind,k.data??{})}}),h=await F(E.status,{...E.result?{result:E.result}:{},...E.error_code?{error_code:hJ(E.error_code,"vm_hands_op_failed")}:{}});X("vm_hands.op",{capability:G,kind:Y,status:E.status,code:E.error_code??null,...h.status>=300?{complete_status:h.status,complete_error:String(h.json?.error??"").slice(0,64)}:{}})}finally{if(clearInterval(x),JJ.delete(A),W)Z.modelOps.get(W)?.delete(y);Z.personTerminals.delete(y),T()}}async function mJ($,K){let Q=$.claim.attempt_id;if(Z.turns.get(Q)===$)Z.turns.delete(Q);J.onTurn?.(Q,null),n($);let F=await c(Z,J.agent,Q);Z.receipts.push({turn:$,failure:K,unbound:F}),await zJ()}function zJ(){return $J=$J.then(CJ,CJ),$J}async function CJ(){while(Z.receipts.length){let{turn:$,failure:K,unbound:Q}=Z.receipts[0],{complete:F,emit:N}=w($);try{if(await N("hands.stopped",{...$.readyData,reason_code:K?"failed":"cancelled",killed_verified:Q.killed_verified,shredded:Q.shredded,...Q.srt_fallbacks?{vm_hands_srt_fallbacks:Q.srt_fallbacks}:{}}),K)await F("failed",{error_code:K});else await F("cancelled",{error_code:"driver_stopped"})}catch(C){if(C instanceof V)return}Z.receipts.shift()}}async function bJ($,K){let{fence:Q,op:F}=w($),N=K.snapshot_id;if(K.version!==1||typeof N!=="string"||Object.keys(K).length!==2)throw new P("vm_hands_env_invalid","invalid environment delivery");let C=await g(`/operations/${F}/environment`,{...Q,snapshot_id:N}),B=C.json?.environment_sealed;if(C.status!==200||!B||C.json?.payload!==void 0)throw new P("vm_hands_env_invalid","environment not delivered sealed");let Y=await J.agent.deliverEnvironment({attemptId:$.claim.attempt_id,snapshotId:N,deviceId:Z.deviceId??"",sealed:B});if((await g(`/operations/${F}/environment-ack`,{...Q,...Y})).status>=300)throw new P("vm_hands_env_ack_refused","environment ack refused")}}
|
|
5
|
+
export{jZ as xa,rJ as ya,qZ as za};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import{createHash as f,createPublicKey as V,verify as G}from"crypto";var H="libara_device_keychain.dylib",Y="libreason_device_keychain.dylib",k=1,x=2,h=536870912,p=262144;var U=["darwin-arm64","darwin-x64"];class J extends Error{code;constructor(z,F){super(F);this.code=z;this.name="ManagedRuntimeError"}}var C=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/,N=/^[a-f0-9]{64}$/;function X(z){return Boolean(z)&&typeof z==="object"&&!Array.isArray(z)}function $(z,F,Q=[]){let Z=new Set([...F,...Q]);return F.every((W)=>(W in z))&&Object.keys(z).every((W)=>Z.has(W))}function B(z){return typeof z==="string"&&C.test(z)}function O(z){return typeof z==="string"&&!Number.isNaN(Date.parse(z))&&new Date(z).toISOString()===z}function c(z){return U.includes(z)}function I(z,F){if(!B(z)||!c(F))throw new J("invalid_release_asset","Invalid managed runtime release asset.");return`ara-runtime-v${z}-${F}`}function m(z,F){return`${I(z,F)}-${H}`}var R="managed-runtime-identity.json",D="reason-macos-background-identity-v1";function q(z){if(z===null)return"null";if(typeof z==="string"||typeof z==="boolean")return JSON.stringify(z);if(typeof z==="number"){if(!Number.isFinite(z))throw new J("invalid_manifest","Manifest numbers must be finite.");return JSON.stringify(z)}if(Array.isArray(z))return`[${z.map((F)=>q(F)).join(",")}]`;if(X(z))return`{${Object.keys(z).sort().map((F)=>`${JSON.stringify(F)}:${q(z[F])}`).join(",")}}`;throw new J("invalid_manifest","Manifest contains an unsupported value.")}function j(z){if(!X(z)||!$(z,["url","sha256","size_bytes"])||typeof z.url!=="string"||typeof z.sha256!=="string"||!N.test(z.sha256)||typeof z.size_bytes!=="number"||!Number.isSafeInteger(z.size_bytes)||z.size_bytes<=0||z.size_bytes>h)throw new J("invalid_manifest","Manifest contains an invalid runtime artifact.");let F;try{F=new URL(z.url)}catch{throw new J("invalid_manifest","Runtime artifact URL is invalid.")}if(F.protocol!=="https:"||F.username||F.password||F.hash)throw new J("invalid_manifest","Runtime artifact URL must be an HTTPS URL without credentials or a fragment.");return{url:F.toString(),sha256:z.sha256,size_bytes:z.size_bytes}}function b(z){if(!X(z)||!$(z,["broker","credential_library"]))throw new J("invalid_manifest","Manifest must bind the broker and credential library as one runtime.");return{broker:j(z.broker),credential_library:j(z.credential_library)}}function K(z){if(!X(z)||!$(z,["schema_version","version","published_at","artifacts"])||z.schema_version!==x||!B(z.version)||!O(z.published_at)||!X(z.artifacts)||!$(z.artifacts,[...U]))throw new J("invalid_manifest","Managed Reason runtime manifest is invalid.");return{schema_version:x,version:z.version,published_at:z.published_at,artifacts:{"darwin-arm64":b(z.artifacts["darwin-arm64"]),"darwin-x64":b(z.artifacts["darwin-x64"])}}}function _(z){if(!X(z)||!$(z,["schema_version","version","published_at","artifacts"])||z.schema_version!==k||!B(z.version)||!O(z.published_at)||!X(z.artifacts)||!$(z.artifacts,[...U]))throw new J("invalid_manifest","Legacy managed runtime manifest is invalid.");return{schema_version:k,version:z.version,published_at:z.published_at,artifacts:{"darwin-arm64":j(z.artifacts["darwin-arm64"]),"darwin-x64":j(z.artifacts["darwin-x64"])}}}function M(z){if(!X(z)||!$(z,["schema","version","published_at","artifacts"])||z.schema!==D||!B(z.version)||!O(z.published_at)||!X(z.artifacts)||!$(z.artifacts,[...U]))throw new J("invalid_manifest","Reason background identity manifest is invalid.");return{schema:D,version:z.version,published_at:z.published_at,artifacts:{"darwin-arm64":j(z.artifacts["darwin-arm64"]),"darwin-x64":j(z.artifacts["darwin-x64"])}}}function S(z){if(typeof z!=="string"||!/^[A-Za-z0-9+/]+={0,2}$/.test(z))throw new J("invalid_signature","Runtime manifest signature is invalid.");let F=Buffer.from(z,"base64");if(F.length!==64||F.toString("base64")!==z)throw new J("invalid_signature","Runtime manifest signature is invalid.");return F}function L(z){let F=z;if(typeof z==="string")try{F=JSON.parse(z)}catch{throw new J("invalid_manifest","Managed Reason runtime manifest is not valid JSON.")}if(!X(F)||!$(F,["key_id","manifest","signature"])||typeof F.key_id!=="string"||!/^[A-Za-z0-9._-]{1,80}$/.test(F.key_id)||typeof F.signature!=="string")throw new J("invalid_manifest","Signed managed Reason runtime manifest is invalid.");return F}function o(z,F){let Q=L(z),Z=F[Q.key_id];if(!Z)throw new J("untrusted_key","Runtime manifest was signed by an unknown key.");let W=K(Q.manifest),w=S(Q.signature),P=!1;try{P=G(null,Buffer.from(q(W)),V(Z),w)}catch{throw new J("invalid_signature","Runtime manifest signature could not be verified.")}if(!P)throw new J("invalid_signature","Runtime manifest signature did not match.");return{key_id:Q.key_id,manifest:W,signature:Q.signature}}function E(z,F){let Q=L(z),Z=F[Q.key_id];if(!Z)throw new J("untrusted_key","Background identity manifest was signed by an unknown key.");let W=M(Q.manifest),w=S(Q.signature),P=!1;try{P=G(null,Buffer.from(q(W)),V(Z),w)}catch{throw new J("invalid_signature","Background identity manifest signature could not be verified.")}if(!P)throw new J("invalid_signature","Background identity manifest signature did not match.");return{key_id:Q.key_id,manifest:W,signature:Q.signature}}function d(z,F){let Q=z;if(typeof z==="string")try{Q=JSON.parse(z)}catch{throw new J("invalid_manifest","Legacy managed runtime manifest is not valid JSON.")}if(!X(Q)||!$(Q,["key_id","manifest","signature"])||typeof Q.key_id!=="string"||!/^[A-Za-z0-9._-]{1,80}$/.test(Q.key_id)||typeof Q.signature!=="string")throw new J("invalid_manifest","Signed legacy managed runtime manifest is invalid.");let Z=F[Q.key_id];if(!Z)throw new J("untrusted_key","Legacy runtime manifest was signed by an unknown key.");let W=_(Q.manifest),w=S(Q.signature),P=!1;try{P=G(null,Buffer.from(q(W)),V(Z),w)}catch{throw new J("invalid_signature","Legacy runtime manifest signature could not be verified.")}if(!P)throw new J("invalid_signature","Legacy runtime manifest signature did not match.");return{key_id:Q.key_id,manifest:W,signature:Q.signature}}function A(z){return f("sha256").update(z).digest("hex")}function i(z,F){if(z.byteLength!==F.size_bytes)throw new J("artifact_size_mismatch","Runtime artifact size did not match its manifest.");if(A(z)!==F.sha256)throw new J("artifact_checksum_mismatch","Runtime artifact checksum did not match its manifest.")}import{existsSync as y}from"fs";import{join as T}from"path";function v(z){let F=T(z,Y);return y(F)?F:T(z,H)}
|
|
3
|
-
export{H as
|
|
3
|
+
export{H as Gh,Y as Hh,k as Ih,x as Jh,h as Kh,p as Lh,U as Mh,J as Nh,I as Oh,m as Ph,R as Qh,q as Rh,o as Sh,E as Th,d as Uh,A as Vh,i as Wh,v as Xh};
|