CoolFace
Apppublic

admin08077/Githubgemini

sourceHugging Faceotherupdated 10mo agoView on Hugging Face
0likes
IamPolicyGenerator-FVEFQANt.js.map1 linesDownload Raw Back to assets
1{"version":3,"file":"IamPolicyGenerator-FVEFQANt.js","sources":["../../components/features/IamPolicyGenerator.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { generateIamPolicyStream } from '../../services/aiService.ts';\nimport { ShieldCheckIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\nexport const IamPolicyGenerator: React.FC = () => {\n    const [description, setDescription] = useState('A user role that can read from S3 buckets but not write or delete.');\n    const [platform, setPlatform] = useState<'aws' | 'gcp'>('aws');\n    const [policy, setPolicy] = useState('');\n    const [isLoading, setIsLoading] = useState(false);\n    const [error, setError] = useState('');\n\n    const handleGenerate = useCallback(async () => {\n        if (!description.trim()) {\n            setError('Please provide a description.');\n            return;\n        }\n        setIsLoading(true);\n        setError('');\n        setPolicy('');\n        try {\n            const stream = generateIamPolicyStream(description, platform);\n            let fullResponse = '';\n            for await (const chunk of stream) {\n                fullResponse += chunk;\n                setPolicy(fullResponse);\n            }\n        } catch (err) {\n            setError(err instanceof Error ? err.message : 'An unknown error occurred.');\n        } finally {\n            setIsLoading(false);\n        }\n    }, [description, platform]);\n\n    return (\n        <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n            <header className=\"mb-6\">\n                <h1 className=\"text-3xl font-bold flex items-center\">\n                    <ShieldCheckIcon />\n                    <span className=\"ml-3\">IAM Policy Generator</span>\n                </h1>\n                <p className=\"text-text-secondary mt-1\">Generate AWS or GCP IAM policies from a natural language description.</p>\n            </header>\n            <div className=\"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0\">\n                <div className=\"flex flex-col gap-4\">\n                     <div>\n                        <label htmlFor=\"platform\" className=\"text-sm font-medium mb-2 block\">Cloud Platform</label>\n                        <div className=\"flex gap-2 p-1 bg-surface rounded-lg border\">\n                            <button onClick={() => setPlatform('aws')} className={`flex-1 py-2 rounded-md text-sm ${platform === 'aws' ? 'bg-primary text-text-on-primary' : ''}`}>AWS</button>\n                            <button onClick={() => setPlatform('gcp')} className={`flex-1 py-2 rounded-md text-sm ${platform === 'gcp' ? 'bg-primary text-text-on-primary' : ''}`}>GCP</button>\n                        </div>\n                    </div>\n                    <div className=\"flex flex-col flex-1 min-h-0\">\n                        <label htmlFor=\"description\" className=\"text-sm font-medium mb-2\">Describe the desired permissions</label>\n                        <textarea id=\"description\" value={description} onChange={e => setDescription(e.target.value)} className=\"flex-grow p-2 bg-surface border rounded text-sm\"/>\n                    </div>\n                    <button onClick={handleGenerate} disabled={isLoading} className=\"btn-primary w-full py-3\">{isLoading ? <LoadingSpinner/> : 'Generate Policy'}</button>\n                </div>\n                <div className=\"flex flex-col\">\n                    <label className=\"text-sm font-medium mb-2\">Generated Policy (JSON)</label>\n                    <div className=\"flex-grow p-1 bg-background border rounded overflow-auto\">\n                        {isLoading && !policy && <div className=\"flex justify-center items-center h-full\"><LoadingSpinner /></div>}\n                        {error && <p className=\"text-red-500 p-4\">{error}</p>}\n                        {policy && <MarkdownRenderer content={policy} />}\n                    </div>\n                </div>\n            </div>\n        </div>\n    );\n};\n"],"names":["IamPolicyGenerator","description","setDescription","useState","platform","setPlatform","policy","setPolicy","isLoading","setIsLoading","error","setError","handleGenerate","useCallback","stream","generateIamPolicyStream","fullResponse","chunk","err","jsxs","jsx","ShieldCheckIcon","LoadingSpinner","MarkdownRenderer"],"mappings":"moFAKO,MAAMA,GAA+B,IAAM,CAC9C,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAAS,oEAAoE,EAC7G,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAAwB,KAAK,EACvD,CAACG,EAAQC,CAAS,EAAIJ,EAAAA,SAAS,EAAE,EACjC,CAACK,EAAWC,CAAY,EAAIN,EAAAA,SAAS,EAAK,EAC1C,CAACO,EAAOC,CAAQ,EAAIR,EAAAA,SAAS,EAAE,EAE/BS,EAAiBC,EAAAA,YAAY,SAAY,CAC3C,GAAI,CAACZ,EAAY,OAAQ,CACrBU,EAAS,+BAA+B,EACxC,MACJ,CACAF,EAAa,EAAI,EACjBE,EAAS,EAAE,EACXJ,EAAU,EAAE,EACZ,GAAI,CACA,MAAMO,EAASC,EAAwBd,EAAaG,CAAQ,EAC5D,IAAIY,EAAe,GACnB,gBAAiBC,KAASH,EACtBE,GAAgBC,EAChBV,EAAUS,CAAY,CAE9B,OAASE,EAAK,CACVP,EAASO,aAAe,MAAQA,EAAI,QAAU,4BAA4B,CAC9E,QAAA,CACIT,EAAa,EAAK,CACtB,CACJ,EAAG,CAACR,EAAaG,CAAQ,CAAC,EAE1B,OACIe,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACX,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,OACd,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,uCACV,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAgB,EACjBD,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAO,SAAA,sBAAA,CAAoB,CAAA,EAC/C,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,2BAA2B,SAAA,uEAAA,CAAqE,CAAA,EACjH,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,0DACX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACV,SAAA,CAAAA,OAAC,MAAA,CACE,SAAA,CAAAC,MAAC,QAAA,CAAM,QAAQ,WAAW,UAAU,iCAAiC,SAAA,iBAAc,EACnFD,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACX,SAAA,CAAAC,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMf,EAAY,KAAK,EAAG,UAAW,kCAAkCD,IAAa,MAAQ,kCAAoC,EAAE,GAAI,SAAA,MAAG,EAC1JgB,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMf,EAAY,KAAK,EAAG,UAAW,kCAAkCD,IAAa,MAAQ,kCAAoC,EAAE,GAAI,SAAA,KAAA,CAAG,CAAA,CAAA,CAC9J,CAAA,EACJ,EACAe,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACX,SAAA,CAAAC,MAAC,QAAA,CAAM,QAAQ,cAAc,UAAU,2BAA2B,SAAA,mCAAgC,EAClGA,EAAAA,IAAC,WAAA,CAAS,GAAG,cAAc,MAAOnB,EAAa,SAAU,GAAKC,EAAe,EAAE,OAAO,KAAK,EAAG,UAAU,iDAAA,CAAiD,CAAA,EAC7J,EACAkB,EAAAA,IAAC,SAAA,CAAO,QAASR,EAAgB,SAAUJ,EAAW,UAAU,0BAA2B,SAAAA,EAAYY,EAAAA,IAACE,EAAA,CAAA,CAAc,EAAK,iBAAA,CAAkB,CAAA,EACjJ,EACAH,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACX,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,2BAA2B,SAAA,0BAAuB,EACnED,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACV,SAAA,CAAAX,GAAa,CAACF,GAAUc,EAAAA,IAAC,MAAA,CAAI,UAAU,0CAA0C,SAAAA,EAAAA,IAACE,IAAe,CAAA,CAAE,EACnGZ,GAASU,EAAAA,IAAC,IAAA,CAAE,UAAU,mBAAoB,SAAAV,EAAM,EAChDJ,GAAUc,EAAAA,IAACG,EAAA,CAAiB,QAASjB,CAAA,CAAQ,CAAA,CAAA,CAClD,CAAA,CAAA,CACJ,CAAA,CAAA,CACJ,CAAA,EACJ,CAER"}