eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.06 kB
JavaScript
function isSandboxNetworkPolicy(e){return e===`allow-all`||e===`deny-all`?!0:!isRecord(e)||!hasOnlyKeys(e,[`allow`,`subnets`])||e.allow!==void 0&&!isNetworkAllowList(e.allow)?!1:e.subnets===void 0||isSubnetPolicy(e.subnets)}function isNetworkAllowList(e){return isStringArray(e)?!0:isRecord(e)?Object.values(e).every(e=>Array.isArray(e)&&e.every(isNetworkPolicyRule)):!1}function isNetworkPolicyRule(e){if(!isRecord(e)||!hasOnlyKeys(e,[`forwardURL`,`match`,`transform`])||e.match!==void 0&&!isNetworkPolicyMatch(e.match))return!1;let t=e.transform!==void 0,n=e.forwardURL!==void 0;return t===n?!1:n?typeof e.forwardURL==`string`:Array.isArray(e.transform)&&e.transform.every(e=>isRecord(e)&&hasOnlyKeys(e,[`headers`])&&(e.headers===void 0||isStringRecord(e.headers)))}function isNetworkPolicyMatch(e){return!isRecord(e)||!hasOnlyKeys(e,[`headers`,`method`,`path`,`queryString`])?!1:(e.path===void 0||isNetworkPolicyMatcher(e.path))&&(e.method===void 0||isStringArray(e.method))&&(e.queryString===void 0||isKeyValueMatcherArray(e.queryString))&&(e.headers===void 0||isKeyValueMatcherArray(e.headers))}function isKeyValueMatcherArray(e){return Array.isArray(e)&&e.every(e=>isRecord(e)&&hasOnlyKeys(e,[`key`,`value`])&&(e.key===void 0||isNetworkPolicyMatcher(e.key))&&(e.value===void 0||isNetworkPolicyMatcher(e.value)))}function isNetworkPolicyMatcher(e){if(!isRecord(e)||!hasOnlyKeys(e,[`exact`,`regex`,`startsWith`]))return!1;let t=[e.exact,e.startsWith,e.regex];return t.filter(e=>e!==void 0).length===1&&t.every(e=>e===void 0||typeof e==`string`)}function isSubnetPolicy(e){return isRecord(e)&&hasOnlyKeys(e,[`allow`,`deny`])&&(e.allow===void 0||isStringArray(e.allow))&&(e.deny===void 0||isStringArray(e.deny))}function isStringArray(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function isStringRecord(e){return isRecord(e)&&Object.values(e).every(e=>typeof e==`string`)}function hasOnlyKeys(e,t){return Object.keys(e).every(e=>t.includes(e))}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{isSandboxNetworkPolicy};