{"_id":"@davidmwhynot/cdk-serverless-clamscan","_rev":"2-4e4746a31b657c802d07d3166901a6e7","name":"@davidmwhynot/cdk-serverless-clamscan","dist-tags":{"latest":"2.8.25"},"versions":{"2.8.23":{"name":"@davidmwhynot/cdk-serverless-clamscan","version":"2.8.23","keywords":["aws","cdk","clamav","docker","efs","eventbridge","lambda","s3","serverless","sqs","virus scan"],"author":{"name":"David Whynot","email":"davidmwhynot@gmail.com"},"license":"Apache-2.0","_id":"@davidmwhynot/cdk-serverless-clamscan@2.8.23","maintainers":[{"name":"davidmwhynot","email":"davidmwhynot@gmail.com"}],"homepage":"https://github.com/davidmwhynot/cdk-serverless-clamscan#readme","bugs":{"url":"https://github.com/davidmwhynot/cdk-serverless-clamscan/issues"},"//":"~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".","dist":{"shasum":"12bb093f9826235d2298d567b9c9e0da274168a6","tarball":"https://registry.npmjs.org/@davidmwhynot/cdk-serverless-clamscan/-/cdk-serverless-clamscan-2.8.23.tgz","fileCount":21,"integrity":"sha512-mFBNkx8Ego87Hut1pb31g42MW2V+G+fI/rAL23dvdRxxiLLFEhJmwkug1JhTbLXmirBsZEcFysPTeCyLPfMEaA==","signatures":[{"sig":"MEUCIQDFEwceItMKLhwlYq7EGunkuqQZznIP6dShGKzfMs4BrgIgSkRjNPm9xmKm7p9d7iDoykIE8+2/oDlY/3N2PVRDWQM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidmwhynot%2fcdk-serverless-clamscan@2.8.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":356249},"jest":{"preset":"ts-jest","globals":{"ts-jest":{"tsconfig":"tsconfig.dev.json"}},"reporters":["default",["jest-junit",{"outputDirectory":"test-reports"}]],"testMatch":["<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)","<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)"],"clearMocks":true,"collectCoverage":true,"coverageProvider":"v8","coverageDirectory":"coverage","coverageReporters":["json","lcov","clover","cobertura","text"],"testPathIgnorePatterns":["/node_modules/"],"watchPathIgnorePatterns":["/node_modules/"],"coveragePathIgnorePatterns":["/node_modules/"]},"jsii":{"tsc":{"outDir":"lib","rootDir":"src"},"outdir":"dist","targets":{}},"main":"lib/index.js","_from":"file:dist/js/cdk-serverless-clamscan@2.8.23.jsii.tgz","types":"lib/index.d.ts","scripts":{"bump":"npx projen bump","test":"npx projen test","build":"npx projen build","eject":"npx projen eject","watch":"npx projen watch","compat":"npx projen compat","docgen":"npx projen docgen","eslint":"npx projen eslint","projen":"npx projen","unbump":"npx projen unbump","clobber":"npx projen clobber","compile":"npx projen compile","default":"npx projen default","package":"npx projen package","release":"npx projen release","upgrade":"npx projen upgrade","package:js":"npx projen package:js","test:watch":"npx projen test:watch","package-all":"npx projen package-all","pre-compile":"npx projen pre-compile","post-compile":"npx projen post-compile","post-upgrade":"npx projen post-upgrade"},"_npmUser":{"name":"davidmwhynot","email":"davidmwhynot@gmail.com"},"_resolved":"/home/runner/work/cdk-serverless-clamscan/cdk-serverless-clamscan/dist/js/cdk-serverless-clamscan@2.8.23.jsii.tgz","stability":"stable","_integrity":"sha512-mFBNkx8Ego87Hut1pb31g42MW2V+G+fI/rAL23dvdRxxiLLFEhJmwkug1JhTbLXmirBsZEcFysPTeCyLPfMEaA==","repository":{"url":"git+https://github.com/davidmwhynot/cdk-serverless-clamscan.git","type":"git"},"_npmVersion":"10.7.0","description":"Serverless architecture to virus scan objects in Amazon S3.","directories":{},"resolutions":{"set-value":"^4.0.1","ansi-regex":"^5.0.1","json-schema":"^0.4.0","@types/prettier":"2.6.0","@types/babel__traverse":"7.18.2"},"_nodeVersion":"18.20.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27","jsii":"1.x","eslint":"^8","projen":"^0.86.4","cdk-nag":"^2.15.18","ts-jest":"^27","jsii-diff":"^1.102.0","constructs":"10.0.5","jest-junit":"^15","typescript":"^4.9.5","@types/jest":"^27","@types/node":"^16 <= 16.18.78","aws-cdk-lib":"2.54.0","jsii-docgen":"^10.5.0","jsii-pacmak":"^1.102.0","jsii-rosetta":"1.x","@aws-cdk/assert":"^2.11","eslint-plugin-import":"^2.29.1","commit-and-tag-version":"^12","@typescript-eslint/parser":"^7","@typescript-eslint/eslint-plugin":"^7","eslint-import-resolver-typescript":"^2.7.1"},"peerDependencies":{"constructs":"^10.0.5","aws-cdk-lib":"^2.54.0"},"_npmOperationalInternal":{"tmp":"tmp/cdk-serverless-clamscan_2.8.23_1724772599056_0.83237532734265","host":"s3://npm-registry-packages"}},"2.8.24":{"name":"@davidmwhynot/cdk-serverless-clamscan","version":"2.8.24","keywords":["aws","cdk","clamav","docker","efs","eventbridge","lambda","s3","serverless","sqs","virus scan"],"author":{"name":"David Whynot","email":"davidmwhynot@gmail.com"},"license":"Apache-2.0","_id":"@davidmwhynot/cdk-serverless-clamscan@2.8.24","maintainers":[{"name":"davidmwhynot","email":"davidmwhynot@gmail.com"}],"homepage":"https://github.com/davidmwhynot/cdk-serverless-clamscan#readme","bugs":{"url":"https://github.com/davidmwhynot/cdk-serverless-clamscan/issues"},"//":"~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".","dist":{"shasum":"c74dbb6a9369abd2a537541d21aa4efce92dbb7b","tarball":"https://registry.npmjs.org/@davidmwhynot/cdk-serverless-clamscan/-/cdk-serverless-clamscan-2.8.24.tgz","fileCount":21,"integrity":"sha512-cGwBgyVKGy0Ct4+yR2LfxY6d7XTKqB7a4XcEptE3FfVOMHc62lZYAiNqzW+UGwxhbUtNcdRZRrCpEgtrvU6DVQ==","signatures":[{"sig":"MEYCIQCsAhOEcW+glakdxfLKKipph1FiklIpmKdVVgTYQkGutQIhANg/dkByx06yVrkorc63SprCg0AT2Bz+WpHohaAiNRYI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidmwhynot%2fcdk-serverless-clamscan@2.8.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":358117},"jest":{"preset":"ts-jest","globals":{"ts-jest":{"tsconfig":"tsconfig.dev.json"}},"reporters":["default",["jest-junit",{"outputDirectory":"test-reports"}]],"testMatch":["<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)","<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)"],"clearMocks":true,"collectCoverage":true,"coverageProvider":"v8","coverageDirectory":"coverage","coverageReporters":["json","lcov","clover","cobertura","text"],"testPathIgnorePatterns":["/node_modules/"],"watchPathIgnorePatterns":["/node_modules/"],"coveragePathIgnorePatterns":["/node_modules/"]},"jsii":{"tsc":{"outDir":"lib","rootDir":"src"},"outdir":"dist","targets":{}},"main":"lib/index.js","_from":"file:dist/js/cdk-serverless-clamscan@2.8.24.jsii.tgz","types":"lib/index.d.ts","scripts":{"bump":"npx projen bump","test":"npx projen test","build":"npx projen build","eject":"npx projen eject","watch":"npx projen watch","compat":"npx projen compat","docgen":"npx projen docgen","eslint":"npx projen eslint","projen":"npx projen","unbump":"npx projen unbump","clobber":"npx projen clobber","compile":"npx projen compile","default":"npx projen default","package":"npx projen package","release":"npx projen release","upgrade":"npx projen upgrade","package:js":"npx projen package:js","test:watch":"npx projen test:watch","package-all":"npx projen package-all","pre-compile":"npx projen pre-compile","post-compile":"npx projen post-compile","post-upgrade":"npx projen post-upgrade"},"_npmUser":{"name":"davidmwhynot","email":"davidmwhynot@gmail.com"},"_resolved":"/home/runner/work/cdk-serverless-clamscan/cdk-serverless-clamscan/dist/js/cdk-serverless-clamscan@2.8.24.jsii.tgz","stability":"stable","_integrity":"sha512-cGwBgyVKGy0Ct4+yR2LfxY6d7XTKqB7a4XcEptE3FfVOMHc62lZYAiNqzW+UGwxhbUtNcdRZRrCpEgtrvU6DVQ==","repository":{"url":"git+https://github.com/davidmwhynot/cdk-serverless-clamscan.git","type":"git"},"_npmVersion":"10.7.0","description":"Serverless architecture to virus scan objects in Amazon S3.","directories":{},"resolutions":{"set-value":"^4.0.1","ansi-regex":"^5.0.1","json-schema":"^0.4.0","@types/prettier":"2.6.0","@types/babel__traverse":"7.18.2"},"_nodeVersion":"18.20.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27","jsii":"1.x","eslint":"^8","projen":"^0.86.4","cdk-nag":"^2.15.18","ts-jest":"^27","jsii-diff":"^1.102.0","constructs":"10.0.5","jest-junit":"^15","typescript":"^4.9.5","@types/jest":"^27","@types/node":"^16 <= 16.18.78","aws-cdk-lib":"2.54.0","jsii-docgen":"^10.5.0","jsii-pacmak":"^1.102.0","jsii-rosetta":"1.x","@aws-cdk/assert":"^2.11","eslint-plugin-import":"^2.29.1","commit-and-tag-version":"^12","@typescript-eslint/parser":"^7","@typescript-eslint/eslint-plugin":"^7","eslint-import-resolver-typescript":"^2.7.1"},"peerDependencies":{"constructs":"^10.0.5","aws-cdk-lib":"^2.54.0"},"_npmOperationalInternal":{"tmp":"tmp/cdk-serverless-clamscan_2.8.24_1724773253396_0.9346088068730976","host":"s3://npm-registry-packages"}},"2.8.25":{"name":"@davidmwhynot/cdk-serverless-clamscan","description":"Serverless architecture to virus scan objects in Amazon S3.","repository":{"type":"git","url":"git+https://github.com/davidmwhynot/cdk-serverless-clamscan.git"},"scripts":{"build":"npx projen build","bump":"npx projen bump","clobber":"npx projen clobber","compat":"npx projen compat","compile":"npx projen compile","default":"npx projen default","docgen":"npx projen docgen","eject":"npx projen eject","eslint":"npx projen eslint","package":"npx projen package","package-all":"npx projen package-all","package:js":"npx projen package:js","post-compile":"npx projen post-compile","post-upgrade":"npx projen post-upgrade","pre-compile":"npx projen pre-compile","release":"npx projen release","test":"npx projen test","test:watch":"npx projen test:watch","unbump":"npx projen unbump","upgrade":"npx projen upgrade","watch":"npx projen watch","projen":"npx projen"},"author":{"name":"David Whynot","email":"davidmwhynot@gmail.com"},"devDependencies":{"@aws-cdk/assert":"^2.11","@types/jest":"^27","@types/node":"^16 <= 16.18.78","@typescript-eslint/eslint-plugin":"^7","@typescript-eslint/parser":"^7","aws-cdk-lib":"2.54.0","cdk-nag":"^2.15.18","commit-and-tag-version":"^12","constructs":"10.0.5","eslint":"^8","eslint-import-resolver-typescript":"^2.7.1","eslint-plugin-import":"^2.29.1","jest":"^27","jest-junit":"^15","jsii":"1.x","jsii-diff":"^1.102.0","jsii-docgen":"^10.5.0","jsii-pacmak":"^1.102.0","jsii-rosetta":"1.x","projen":"^0.86.4","ts-jest":"^27","typescript":"^4.9.5"},"peerDependencies":{"aws-cdk-lib":"^2.54.0","constructs":"^10.0.5"},"resolutions":{"set-value":"^4.0.1","ansi-regex":"^5.0.1","json-schema":"^0.4.0","@types/prettier":"2.6.0","@types/babel__traverse":"7.18.2"},"keywords":["aws","cdk","clamav","docker","efs","eventbridge","lambda","s3","serverless","sqs","virus scan"],"main":"lib/index.js","license":"Apache-2.0","publishConfig":{"access":"public"},"version":"2.8.25","jest":{"coverageProvider":"v8","testMatch":["<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)","<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)"],"clearMocks":true,"collectCoverage":true,"coverageReporters":["json","lcov","clover","cobertura","text"],"coverageDirectory":"coverage","coveragePathIgnorePatterns":["/node_modules/"],"testPathIgnorePatterns":["/node_modules/"],"watchPathIgnorePatterns":["/node_modules/"],"reporters":["default",["jest-junit",{"outputDirectory":"test-reports"}]],"preset":"ts-jest","globals":{"ts-jest":{"tsconfig":"tsconfig.dev.json"}}},"types":"lib/index.d.ts","stability":"stable","jsii":{"outdir":"dist","targets":{},"tsc":{"outDir":"lib","rootDir":"src"}},"//":"~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".","_id":"@davidmwhynot/cdk-serverless-clamscan@2.8.25","bugs":{"url":"https://github.com/davidmwhynot/cdk-serverless-clamscan/issues"},"homepage":"https://github.com/davidmwhynot/cdk-serverless-clamscan#readme","_integrity":"sha512-NVVkcACr2ZU0vN0e2RWr1lAp6mpD+T4R1ZNEJZT95uh/DKJNd2mcoZNAu38SjXTbM0oGIYWQl+qnpS59ujWHnA==","_resolved":"/home/runner/work/cdk-serverless-clamscan/cdk-serverless-clamscan/dist/js/cdk-serverless-clamscan@2.8.25.jsii.tgz","_from":"file:dist/js/cdk-serverless-clamscan@2.8.25.jsii.tgz","_nodeVersion":"18.20.4","_npmVersion":"10.7.0","dist":{"integrity":"sha512-NVVkcACr2ZU0vN0e2RWr1lAp6mpD+T4R1ZNEJZT95uh/DKJNd2mcoZNAu38SjXTbM0oGIYWQl+qnpS59ujWHnA==","shasum":"6bc3460bf17d8ca4cb73ed92c87383af35b3938e","tarball":"https://registry.npmjs.org/@davidmwhynot/cdk-serverless-clamscan/-/cdk-serverless-clamscan-2.8.25.tgz","fileCount":21,"unpackedSize":358403,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidmwhynot%2fcdk-serverless-clamscan@2.8.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCWbNzPGecy4OZbQDlHTFZsb/o3g93RXEZyLcEt+rSH1AIgAUY9DFrc54SovljSVTftOQZbQqVQEcgF2TcLedP1KCQ="}]},"_npmUser":{"name":"davidmwhynot","email":"davidmwhynot@gmail.com"},"directories":{},"maintainers":[{"name":"davidmwhynot","email":"davidmwhynot@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cdk-serverless-clamscan_2.8.25_1724783517596_0.38827877139479705"},"_hasShrinkwrap":false}},"time":{"created":"2024-08-27T15:29:58.996Z","modified":"2024-08-27T18:31:58.177Z","2.8.23":"2024-08-27T15:29:59.298Z","2.8.24":"2024-08-27T15:40:53.729Z","2.8.25":"2024-08-27T18:31:57.764Z"},"bugs":{"url":"https://github.com/davidmwhynot/cdk-serverless-clamscan/issues"},"author":{"name":"David Whynot","email":"davidmwhynot@gmail.com"},"license":"Apache-2.0","homepage":"https://github.com/davidmwhynot/cdk-serverless-clamscan#readme","keywords":["aws","cdk","clamav","docker","efs","eventbridge","lambda","s3","serverless","sqs","virus scan"],"repository":{"type":"git","url":"git+https://github.com/davidmwhynot/cdk-serverless-clamscan.git"},"description":"Serverless architecture to virus scan objects in Amazon S3.","maintainers":[{"name":"davidmwhynot","email":"davidmwhynot@gmail.com"}],"readme":"# cdk-serverless-clamscan\n\n[![npm version](https://badge.fury.io/js/cdk-serverless-clamscan.svg)](https://badge.fury.io/js/cdk-serverless-clamscan) \n[![PyPI version](https://badge.fury.io/py/cdk-serverless-clamscan.svg)](https://badge.fury.io/py/cdk-serverless-clamscan)\n\n\nAn [aws-cdk](https://github.com/aws/aws-cdk) construct that uses [ClamAV®](https://www.clamav.net/) to scan newly uploaded objects to Amazon S3 for viruses. The construct provides a flexible interface for a system to act based on the results of a ClamAV virus scan. Check out this [blogpost](https://aws.amazon.com/blogs/developer/virus-scan-s3-buckets-with-a-serverless-clamav-based-cdk-construct/) for a guided walkthrough.\n\n![Overview](serverless-clamscan.png)\n\n## Pre-Requisites\n\n**Docker:** The ClamAV Lambda functions utilizes a [container image](https://aws.amazon.com/blogs/aws/new-for-aws-lambda-container-image-support/) that is built locally using [docker bundling](https://aws.amazon.com/blogs/devops/building-apps-with-aws-cdk/)\n\n## Examples\n\nThis project uses [projen](https://github.com/projen/projen) and thus all the constructs follow language specific standards and naming patterns. For more information on how to translate the following examples into your desired language read the CDK guide on [Translating TypeScript AWS CDK code to other languages](https://docs.aws.amazon.com/cdk/latest/guide/multiple_languages.html)\n\n### Example 1. (Default destinations with rule target)\n\n<details><summary>typescript</summary>\n<p>\n\n```typescript\nimport { RuleTargetInput } from 'aws-cdk-lib/aws-events';\nimport { SnsTopic } from 'aws-cdk-lib/aws-events-targets';\nimport { Bucket } from 'aws-cdk-lib/aws-s3';\nimport { Topic } from 'aws-cdk-lib/aws-sns';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { ServerlessClamscan } from 'cdk-serverless-clamscan';\n\nexport class CdkTestStack extends Stack {\n  constructor(scope: Construct, id: string, props?: StackProps) {\n    super(scope, id, props);\n\n    const bucket_1 = new Bucket(this, 'rBucket1');\n    const bucket_2 = new Bucket(this, 'rBucket2');\n    const bucketList = [bucket_1, bucket_2];\n    const sc = new ServerlessClamscan(this, 'rClamscan', {\n      buckets: bucketList,\n    });\n    const bucket_3 = new Bucket(this, 'rBucket3');\n    sc.addSourceBucket(bucket_3);\n    const infectedTopic = new Topic(this, 'rInfectedTopic');\n    sc.infectedRule?.addTarget(\n      new SnsTopic(infectedTopic, {\n        message: RuleTargetInput.fromEventPath(\n          '$.detail.responsePayload.message',\n        ),\n      }),\n    );\n  }\n}\n```\n\n</p>\n</details>\n\n<details><summary>python</summary>\n<p>\n\n```python\nfrom aws_cdk import (\n  Stack,\n  aws_events as events,\n  aws_events_targets as events_targets,\n  aws_s3 as s3,\n  aws_sns as sns\n)\nfrom cdk_serverless_clamscan import ServerlessClamscan\nfrom constructs import Construct\n\nclass CdkTestStack(Stack):\n\n  def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:\n    super().__init__(scope, construct_id, **kwargs)\n\n    bucket_1 = s3.Bucket(self, \"rBucket1\")\n    bucket_2 = s3.Bucket(self, \"rBucket2\")\n    bucketList = [ bucket_1, bucket_2 ]\n    sc = ServerlessClamscan(self, \"rClamScan\",\n      buckets=bucketList,\n    )\n    bucket_3 = s3.Bucket(self, \"rBucket3\")\n    sc.add_source_bucket(bucket_3)\n    infected_topic = sns.Topic(self, \"rInfectedTopic\")\n    if sc.infected_rule != None:\n      sc.infected_rule.add_target(\n        events_targets.SnsTopic(\n          infected_topic,\n          message=events.RuleTargetInput.from_event_path('$.detail.responsePayload.message'),\n        )\n      )\n```\n\n</p>\n</details>\n\n### Example 2. (Bring your own destinations)\n\n<details><summary>typescript</summary>\n<p>\n\n```typescript\nimport {\n  SqsDestination,\n  EventBridgeDestination,\n} from 'aws-cdk-lib/aws-lambda-destinations';\nimport { Bucket } from 'aws-cdk-lib/aws-s3';\nimport { Queue } from 'aws-cdk-lib/aws-sqs';\nimport { Stack, StackProps } from 'aws-cdk-lib';\nimport { Construct } from 'constructs';\nimport { ServerlessClamscan } from 'cdk-serverless-clamscan';\n\nexport class CdkTestStack extends Stack {\n  constructor(scope: Construct, id: string, props?: StackProps) {\n    super(scope, id, props);\n\n    const bucket_1 = new Bucket(this, 'rBucket1');\n    const bucket_2 = new Bucket(this, 'rBucket2');\n    const bucketList = [bucket_1, bucket_2];\n    const queue = new Queue(this, 'rQueue');\n    const sc = new ServerlessClamscan(this, 'default', {\n      buckets: bucketList,\n      onResult: new EventBridgeDestination(),\n      onError: new SqsDestination(queue),\n    });\n    const bucket_3 = new Bucket(this, 'rBucket3');\n    sc.addSourceBucket(bucket_3);\n  }\n}\n```\n\n</p>\n</details>\n\n<details><summary>python</summary>\n<p>\n\n```python\nfrom aws_cdk import (\n  Stack,\n  aws_lambda_destinations as lambda_destinations,\n  aws_s3 as s3,\n  aws_sqs as sqs\n)\nfrom cdk_serverless_clamscan import ServerlessClamscan\nfrom constructs import Construct\n\nclass CdkTestStack(Stack):\n\n  def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:\n    super().__init__(scope, construct_id, **kwargs)\n\n    bucket_1 = s3.Bucket(self, \"rBucket1\")\n    bucket_2 = s3.Bucket(self, \"rBucket2\")\n    bucketList = [ bucket_1, bucket_2 ]\n    queue = sqs.Queue(self, \"rQueue\")\n    sc = ServerlessClamscan(self, \"rClamScan\",\n      buckets=bucketList,\n      on_result=lambda_destinations.EventBridgeDestination(),\n      on_error=lambda_destinations.SqsDestination(queue),\n    )\n    bucket_3 = s3.Bucket(self, \"rBucket3\")\n    sc.add_source_bucket(bucket_3)\n```\n\n</p>\n</details>\n\n## Operation and Maintenance\n\nWhen ClamAV publishes updates to the scanner you will see “Your ClamAV installation is OUTDATED” in your scan results. While the construct creates a system to keep the database definitions up to date, you must update the scanner to detect all the latest Viruses.\n\nUpdate the docker images of the Lambda functions with the latest version of ClamAV by re-running `cdk deploy`.\n\n## API Reference\n\nSee [API.md](./API.md).\n\n## Contributing\n\nSee [CONTRIBUTING](./CONTRIBUTING.md) for more information.\n\n## License\n\nThis project is licensed under the Apache-2.0 License.\n","readmeFilename":"README.md"}