eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.54 kB
JavaScript
import{createHash,createHmac,timingSafeEqual}from"node:crypto";const DEVELOPMENT_CLIENT_ADDRESS_HEADER=`x-eve-dev-client-address`,DEVELOPMENT_CLIENT_ADDRESS_SIGNATURE_HEADER=`x-eve-dev-client-address-signature`;function stampDevelopmentClientAddress(e,t,n){deleteHeader(e,DEVELOPMENT_CLIENT_ADDRESS_HEADER),deleteHeader(e,DEVELOPMENT_CLIENT_ADDRESS_SIGNATURE_HEADER),t!==void 0&&t.length!==0&&n!==void 0&&n.length!==0&&(setHeader(e,DEVELOPMENT_CLIENT_ADDRESS_HEADER,t),setHeader(e,DEVELOPMENT_CLIENT_ADDRESS_SIGNATURE_HEADER,signClientAddress(t,n)))}function readTrustedDevelopmentClientAddress(e,t){let n=e.get(DEVELOPMENT_CLIENT_ADDRESS_HEADER),r=e.get(DEVELOPMENT_CLIENT_ADDRESS_SIGNATURE_HEADER);return n!==null&&r!==null&&isTrustedDevelopmentClientAddress(n,r,t)?n:void 0}function isTrustedDevelopmentClientAddress(e,t,n){return e.length>0&&t.length>0&&n!==void 0&&n.length>0&&timingSafeEqualStrings(t,signClientAddress(e,n))}function timingSafeEqualStrings(e,t){let n=createHash(`sha256`).update(e).digest(),r=createHash(`sha256`).update(t).digest();return timingSafeEqual(n,r)}function signClientAddress(e,t){return createHmac(`sha256`,t).update(e).digest(`base64url`)}function deleteHeader(e,t){if(e instanceof Headers){e.delete(t);return}delete e[t]}function setHeader(e,t,n){if(e instanceof Headers){e.set(t,n);return}e[t]=n}export{DEVELOPMENT_CLIENT_ADDRESS_HEADER,DEVELOPMENT_CLIENT_ADDRESS_SIGNATURE_HEADER,isTrustedDevelopmentClientAddress,readTrustedDevelopmentClientAddress,stampDevelopmentClientAddress,timingSafeEqualStrings};