Lines 1-21javascript
2var ie=Object.create;var W=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var ce=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty;var de=(e,s,o,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of ae(s))!pe.call(e,t)&&t!==o&&W(e,t,{get:()=>s[t],enumerable:!(n=le(s,t))||n.enumerable});return e};var B=(e,s,o)=>(o=e!=null?ie(ce(e)):{},de(s||!e||!e.__esModule?W(o,"default",{value:e,enumerable:!0}):o,e));var k=require("node:fs"),Y=require("node:path");var I=require("node:fs"),q=require("node:os"),j=require("node:path"),D="Shieldly- ...
3`)}catch{}}function P(e){return e||(process.env.SHIELDLY_API_KEY?process.env.SHIELDLY_API_KEY:N().apiKey||null)}function V(){let e=N().demoCount;return typeof e=="number"&&e>0?e:0}function _(){return V()>=K}function M(){let e=N();return e.demoCount=V()+1,ue(e),Math.max(0,K-e.demoCount)}function R(){return`You've used all ${K} free demo analyses.
5 Get an API key (Builder plan or above) for higher limits: https://www.shieldly.io/app/api
7Then set SHIELDLY_API_KEY or pass --api-key.`}function T(){return(process.env.SHIELDLY_API_URL||ye).replace(/\/$/,"")}function Z(){return(process.env.SHIELDLY_WEB_URL||me).replace(/\/$/,"")}function C(e){let s=Z(),o=e==null?"":`?score=${encodeURIComponent(e)}`;return`[](${s})`}async function v(e,s){let o=Z(),n=await fetch(`${o}${e}`,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":D},body:JSON.stringify(s)});if(n.status===429)throw new Error("Demo rate limit reached. Get an API key (Builder plan or above) for higher limit ...
8`),r;continue}if(c.status==="complete")return process.stderr.write(`
MediumInstall Persistence
Source writes installer persistence such as shell profile or service configuration.
dist/cli.cjsView on unpkg · L1 9`),{...c.result,unitInfo:c.unitInfo};if(c.status==="failed")throw process.stderr.write(`
10`),new Error(c.error||"Analysis failed")}throw process.stderr.write(`
11`),new Error("Analysis timed out after polling")}async function G(e,s){let o=T(),n=await fetch(`${o}${e}`,{headers:{Authorization:`Bearer ${s}`,"User-Agent":D}});if(!n.ok){let t=await n.json
12 For a CDK output directory, use: shieldly analyze-cf ${e}`),process.exit(1)),(0,I.readFileSync)(e,"utf8")}var H={CRITICAL:"\x1B[31m",HIGH:"\x1B[33m",MEDIUM:"\x1B[36m",LOW:"\x1B[32m",INFO:"\x1B[90m"},y="\x1B[0m",S="\x1B[1m",b="\x1B[2m",J="\x1B[36m";function L(e,s){if(s==="json"){console.log(JSON.stringify(e,null,2));return}let{score:o,riskLevel:n,findings:t=[],cached:i,summary:l,positives:d=[],unitInfo:c}=e,r=o==null?"\u2014":`${o}/100`;if(console.log(""),console.log(`${S}AI-Powered Security Analysis \u2014 Shieldly${y}`),console.log(`${b}${"\u2500".repeat(50)}${y}`),console.log(` ${S}Securi ...
13 ${h}[${p.severity}]${y} ${S}${p.title}${y}`),p.resource&&p.resource!=="*"&&console.log(` ${b}Resource: ${p.resource}${y}`),p.description&&console.log(` ${b}${p.description}${y}`),p.remediation&&console.log(` ${J}Fix:${y} ${p.remediation}`)}}c&&typeof c.unitsUsed=="number"&&typeof c.cap=="number"&&(console.log(""),console.log(` ${b}Units used: ${c.unitsUsed}/${c.cap}${y}`)),e.demoInfo&&typeof e.demoInfo.analysesRemaining=="number"&&(console.log(""),console.log(` ${b}Demo analyses remaining: ${e.demoInfo.analysesRemaining}. Get an API key (Builder plan or above) for more: h ...
14Usage: shieldly analyze-cf <template-file-or-dir> [options]
16Analyze a CloudFormation template (or directory of templates) for security issues using AI.
19 template-file-or-dir Path to a JSON CF template, or a directory (e.g. cdk.out/)
20 containing synthesized stacks. All *.template.json files are
21 analyzed automatically.
Long lines were clipped for display.