{"_id":"@codebucket/files","_rev":"25-f59c0e0a41b442c00011ac7dbe0190bb","name":"@codebucket/files","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@codebucket/files","version":"1.0.0","_id":"@codebucket/files@1.0.0","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"85781a34a8b3619d66052ad79b5594cfec72afc3","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.0.tgz","fileCount":14,"integrity":"sha512-rdAKTo/LB5t7hbBDJWrlLjpDuOuo7aJWXeoR2yXoO47MYibv8Czp1PIkqGqQL16B7cxAJl89s788kXSgMkI21w==","signatures":[{"sig":"MEYCIQDCLJ1s6JVbR8rgG81tuKTSjwCfCHACoy/K9FnyCKLhoQIhALXm8QWtNoqeejx4AWKQ/f2xPJWq5guO696RLfOrN4Is","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15110},"main":"dist/index.js","gitHead":"b856f71af50d7bd2d41884b2e5d668bd1b87e85e","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.17.0","dependencies":{"archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.0_1742282639324_0.0505748326787947","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@codebucket/files","version":"1.0.1","_id":"@codebucket/files@1.0.1","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"6cd06f0ff87e386736b9eecc8e304e1039ca40f4","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.1.tgz","fileCount":18,"integrity":"sha512-ITi/2/7OgnF2pqlR8haWW2d9DUPhmUUTmuAch+Evw8Sbzv3oXru/b7KM+rCmswMOO2AAGq0BbYxNFHuwcHqizg==","signatures":[{"sig":"MEUCIQDKJ/JgKJZKm9pg9uX8q4xvLr+9A0JhNWRspVcIYwBjqgIgY5LG7o7ZUf/6hUmJvrkA0frap4lmlAmYkV6jq5+gNJ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21433},"main":"dist/index.js","gitHead":"59aad46c325fde3a7c609dff80163607e533839f","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.1_1745279952873_0.7240621678978192","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@codebucket/files","version":"1.0.2","_id":"@codebucket/files@1.0.2","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"bb2bf29d6b4de99e99c21f3ac6c4acf6c4af9c53","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.2.tgz","fileCount":18,"integrity":"sha512-gbTS4pWZqvEWVJYt7Xd/oTGSNg/tiTeXiTF6YIR7NQb0XdboRKc+rcq/OkBH286m09PJr3jZosK9fbp7ACY1Lw==","signatures":[{"sig":"MEYCIQCaD5GBdwKFvx707OQUkvesR6vj6P1ALEPVom1EZRPmmgIhAMs0LQbfG7F541s2dgsWmC9VCbFFl2cpPiU3D5DnnaJv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19197},"main":"dist/index.js","gitHead":"59aad46c325fde3a7c609dff80163607e533839f","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.2_1745283367707_0.029745658316017165","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@codebucket/files","version":"1.0.3","_id":"@codebucket/files@1.0.3","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"392cc557660d3cc3b0e2f5648976b34cf2969270","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.3.tgz","fileCount":18,"integrity":"sha512-HEE+9H+/YLhq8KVbqYCJQQn5mENR5elLC2zo9ohQRZ6e6Gqc7WE96WzNYwDeLMgTSMIUTwNwCo3iWQiSuKwQTQ==","signatures":[{"sig":"MEUCIQCR1o2Zgm8jioqBB6t4z4E31wLkBD6xoVLgPb+wLRIwfQIgZHjglUW0TCYmEmeHXBZqZ5gPTLHVBUYXQ9TcfO7QsDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19780},"main":"dist/index.js","gitHead":"453f103d07e7a4ce974ab377769f24d92d9df824","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.3_1745354558097_0.4911129178650624","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@codebucket/files","version":"1.0.4","_id":"@codebucket/files@1.0.4","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"716f2d54d2251aa7c39d1b0c809b385fa1edb09a","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.4.tgz","fileCount":18,"integrity":"sha512-qZ6qN9zn+gic5FptllUDUTA4WTUY8qRJSeaSCqZojKIQSEiAus0d/mA0Mldd0Wo+Lo3CVNqCLV50XOxmGkwckw==","signatures":[{"sig":"MEUCIAamY/yzSdyQvNeEzlFbqAbSVVwCjNjEfPD1j5U3VENXAiEAzZByjzjn3q/v/Sem0LgeHeozFMCKt/alN4CBzfkELjQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21026},"main":"dist/index.js","gitHead":"83a7d88094bfb51c5f430cb273a70c32e81b219b","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.4_1745355117298_0.5430293777182609","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@codebucket/files","version":"1.0.5","_id":"@codebucket/files@1.0.5","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"f7b49236efca0fd377c5b6671d61d0fa5c3d1140","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.5.tgz","fileCount":18,"integrity":"sha512-9dzwDpRygtdA9IXATO9mNryoOpqRMsxVfA9fC6P5IzIXMgu5oWnfWdtBmrtM9b64YecHQ2r99U5SwCjmPPrCFA==","signatures":[{"sig":"MEUCIQCEQgnwTAG5oLUYE7BftCl5ZGQB5/OysWgPR5tPxin/LQIgLjiSrtD9FPCU+ejm20H+KjRyVFI0FARphMJWdqIZkI4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22323},"main":"dist/index.js","gitHead":"83a7d88094bfb51c5f430cb273a70c32e81b219b","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.5_1745356441441_0.5344683089533364","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@codebucket/files","version":"1.0.6","_id":"@codebucket/files@1.0.6","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"b2591031af9c9d99cbd452e2087809830d75ab2a","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.6.tgz","fileCount":18,"integrity":"sha512-5d/+EIqWwuboRE3MvBdPrHUDvku9Kops/e9K6vG6hub7ZBUrS7LtbFZm3uGM5pfpbWmycbuKc3qUhqPPx/Kscw==","signatures":[{"sig":"MEYCIQDQLhIV+IQy62lCZ1mDUlzh5aZZvYtSB1cnOfR1N4MqowIhANCqYrmD5XJy5mOc4B5uWrnaTdjbGKGhxVaYmjmKEPvo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22411},"main":"dist/index.js","gitHead":"83a7d88094bfb51c5f430cb273a70c32e81b219b","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.6_1745358338053_0.8012099687156777","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@codebucket/files","version":"1.0.7","_id":"@codebucket/files@1.0.7","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"7ceb3690914d1aa749a3480ae44f846a2bf13a9b","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.7.tgz","fileCount":18,"integrity":"sha512-5x5IX4llyelOWOK3SUvkdeKb0MrCGLhMlAR4U5e43JQ9URRxgHuMZBRPY3PL+APJK9waAqDgkHtp9XhXsj8tWg==","signatures":[{"sig":"MEUCIBq1YThRIDz+ynKOvZ6EtZsy1wiEsBNQ2rRy6yVhov1TAiEAxHQNNz0mMgAU+kN66gOcRMxALdzk9w7jeOXRgfkDGxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23039},"main":"dist/index.js","gitHead":"83a7d88094bfb51c5f430cb273a70c32e81b219b","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.7_1745359108806_0.32790402986908385","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@codebucket/files","version":"1.0.8","_id":"@codebucket/files@1.0.8","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"48c450373e6bad151e9b301357fa3eb90e191676","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.8.tgz","fileCount":18,"integrity":"sha512-MwYlL1lLooGGdvUfXLIa8TJwTjfpegNqz2k5uA+ajFdVP+zwrt185oc9YSB9Z+7H7JmWiLnp41rO3mfxzocfhQ==","signatures":[{"sig":"MEUCICzRu2abOsSXbkKg3iLZLE9o9Lii/zo5go6LBFbu2QjsAiEAu8F+yz95I8qb3FymcvzLFeIv/vmVq7NySNC/JKMJYNg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24314},"main":"dist/index.js","gitHead":"83a7d88094bfb51c5f430cb273a70c32e81b219b","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.8_1745359363107_0.0453954093478417","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@codebucket/files","version":"1.0.9","_id":"@codebucket/files@1.0.9","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"f37da93cc3f4865f78ae9e9be713d37d94625bf0","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.9.tgz","fileCount":18,"integrity":"sha512-eT5SooccnPUG4ek4E/dHEPEJQtsyQALIeCGwvhNWSalsitgPdsOq3btDWvyP+bYyfRtLo68Tv1AREYNYwxIYMA==","signatures":[{"sig":"MEQCIDifTyfT7y9eO2ToOpN6rgqsNZiK/tAehaguap1ucKxqAiBYx4JW+dOPZtxSfYQsE0N659kzReNXYflCQzJI4u0JKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25156},"main":"dist/index.js","gitHead":"83a7d88094bfb51c5f430cb273a70c32e81b219b","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.9_1745361378377_0.5391992824057972","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@codebucket/files","version":"1.0.10","_id":"@codebucket/files@1.0.10","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"b89b743635a559762129b949e353e9372955f461","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.10.tgz","fileCount":18,"integrity":"sha512-PvOhjvyutYwL3lLkumsw4XZXLPD0l461QmE/JpPqIjM10ySbwywA7Lv7TTMKdRa1jqPK6SWRmlGEOIHeccSsnQ==","signatures":[{"sig":"MEUCIQCC1W2j6g+UW0DGzNMIk79ZdXtIyZ44oQ7QOr/C53EGDAIgXk6Cv9sqiiNowCXP5KmeswPSKhWusyokXDZiNA2ekAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25504},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.10_1746374422228_0.9957673508974885","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@codebucket/files","version":"1.0.11","_id":"@codebucket/files@1.0.11","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"ebe0b7507f66b774f42e29522db3c203f5a85caa","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.11.tgz","fileCount":18,"integrity":"sha512-4zMyRxtj9IVZ2MxdwY/M2rp9ajfYbui4viSboY5reApd3YbbPJiXlljR/df0RdRVt6Rf0qO8MZPBBot9erWsOA==","signatures":[{"sig":"MEYCIQDQulONSF6ZYU/WDpr/Eq3hjjF/bPaL3U0XfPS78dqZ1QIhAILkvEpqaK44valJyr97N5ZoyArHu0qqLX0lTsvrOU+R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25504},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.11_1746375750404_0.7807260734014836","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"@codebucket/files","version":"1.0.12","_id":"@codebucket/files@1.0.12","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"82bbb820aa8bba097b7ed72d9f79190d25da2501","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.12.tgz","fileCount":18,"integrity":"sha512-Lm+e+q58cPqZWflbtvGOyl+Xle+z68KCw7nxYFW7VPD4TfypIFLDlgLoS1a6b7oNoDVpbvDwC3jYbFikmnfxVQ==","signatures":[{"sig":"MEUCIQDP0nnfywSAzryVzgWWnNVHBRpbTStIjyfzBilM3ctR/gIgEePWSIXVGn8kbgL5PHHFxFsk2fTaTBW1O8VWRA1jhx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25549},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"2.6.0","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.17.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/mime":"^3.0.4","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.12_1746376614082_0.5871511200392308","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@codebucket/files","version":"1.0.13","_id":"@codebucket/files@1.0.13","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"76594415514ee7fa4862870457456038b0cd2f07","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.13.tgz","fileCount":18,"integrity":"sha512-4nlB0qw5kmGzcMGAa97lolnX1SJPz7P8TGjGzO4NLbkQVdTSdJoCO+pRWRHSH+C9/M1z6li3BaDnqwW2S178Bw==","signatures":[{"sig":"MEQCIBfyaf+G2HHZS7Iwe4z9L2IsUZkzROtn3hKvgLAerbrrAiAtLiXf+qTyAFKQrPZXVEi9Nhb+UP2Ji6862ynYKJWYHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25548},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"2.6.0","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"3.17.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/mime":"^3.0.4","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.13_1746376704123_0.26130421081127864","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"@codebucket/files","version":"1.0.15","_id":"@codebucket/files@1.0.15","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"415e0db96db02707080f80d622ef97f1285252e2","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.15.tgz","fileCount":18,"integrity":"sha512-YlUWxycKwA2RQJqdCP1PiLUP83/riFMQLcymfGv1rJkhpooL3ylIcTLB3N6founs05ufEH0lbpVqyEApNe+1Tg==","signatures":[{"sig":"MEYCIQDyZ+KuXYzWuEbsLbDdJciEDXBtYCS/DyCXAoDXc/nQ6wIhALSmCG5BfPOH4i1UJb5MT7Bb15tt7aYShZIK9nIZD8fM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25508},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.15_1746377698120_0.0032651375513113035","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"@codebucket/files","version":"1.0.16","_id":"@codebucket/files@1.0.16","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"2b93914c614420be6e05ac224f55e245e7d78dca","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.16.tgz","fileCount":18,"integrity":"sha512-q+FOTiFLCCFbVw0xmV7Q8Q4ukzljLxfP3aPsGkI2+o+zqo7rFCWCVTDO6w9kVqqz/wLE5zffw8o5BsaDFuG9ZQ==","signatures":[{"sig":"MEUCIFMIa4WB7a9hS6hdAtKe7uQKSL/SC2Ea1xrtJhwJg+gYAiEApo77Tq38E9z3fRdqx0VRrcDtO/6TAR1/sqM2iwR3wHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26376},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.16_1746452181076_0.7549598208424919","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"@codebucket/files","version":"1.0.17","_id":"@codebucket/files@1.0.17","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"1a0c936bff1cedd4d6170a87450336b53240fafc","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.17.tgz","fileCount":18,"integrity":"sha512-MQ8SEL0AETKIpfeAaw2V4Kf3ldhejj4vuc1UZrZ0A4QkQC7A5VVxlmtRh5N0WRVz5D/Wj/C+QVD7LP/IzdM8CQ==","signatures":[{"sig":"MEYCIQC6kryElz/80i2JXQW33dGP3lLeOOpGi6pWIj/STDoIowIhAMm8dbgt7KBUc7SJCDlgw8OMOFa/gIKJYsecDIRS+GWn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26511},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.17_1747677175000_0.631613990565959","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"@codebucket/files","version":"1.0.18","_id":"@codebucket/files@1.0.18","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"4b685c5bf026061b204e6e269e5d3d43e909be72","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.18.tgz","fileCount":18,"integrity":"sha512-RcOTr47oEgf0IK0BFGQ1NwA9a+P5J+JM5r9ewMWHU6axOce/AZQWmm7m0bK0lIXDHsi1L8M0JrKLIreUnlh3/A==","signatures":[{"sig":"MEUCIQCXfHP0vITUU8LC32iTePmnoc7TqEQaIHmVZOGJ0yDNHgIgeOnl2hNtzLUTeeB6GVc2vzOUIAXUaQHb1y64tKzmYcc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26781},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.18_1747677464627_0.17984137588184868","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"@codebucket/files","version":"1.0.19","_id":"@codebucket/files@1.0.19","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"16db6323ecab21c7d411e41e87325b2a6deadb0d","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.19.tgz","fileCount":18,"integrity":"sha512-n2qaMyi9BOyYMkbLIOKiMAJcR1T5p142Tjs4dmBoM/JXcDxQpN43JFXWBO5Ce37SYk0PzknGqrLShvfZJpNUOA==","signatures":[{"sig":"MEQCICzXjExxvnugIpCkFpkOtKfLGuI8pUMaxbaT4W+oD4XOAiBmSy5SJSvQt5XdgAQDkfMwum4diL96BWlk/haepvRorg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27177},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.19_1747679539469_0.3570194154844506","host":"s3://npm-registry-packages-npm-production"}},"1.0.31":{"name":"@codebucket/files","version":"1.0.31","_id":"@codebucket/files@1.0.31","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"fcd74bafd71ba35e45045464c9195ed8f63fd7a6","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.31.tgz","fileCount":18,"integrity":"sha512-p31/MV+/3S52jVG3Uc0X34yR1wlLs2OyDlFkOcHJL+GBO1uGPPz+EmkQHxBh4/Rxn1ldqmpmPlMGUq8k6yt2EQ==","signatures":[{"sig":"MEUCIG5D8+7zRv2yfU9rVia8JRo+lfedJTnxwpgPGNenx3xgAiEAki50BKTf8B2m+hEypvAg8uH74Nsu+vNmxFbRoKnd1s0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25978},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.31_1748590762975_0.4548113257282129","host":"s3://npm-registry-packages-npm-production"}},"1.0.32":{"name":"@codebucket/files","version":"1.0.32","_id":"@codebucket/files@1.0.32","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"4e936697278a19a0ac18aece43ede333a183af91","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.32.tgz","fileCount":18,"integrity":"sha512-rrT9uuq/LXgWROpJpVb1JpRs4yCzL2CVmNwomggXZDtG3qI4Qnp926zdFM4DvJyrMMH31piNa9EaYdChbEve6Q==","signatures":[{"sig":"MEYCIQDgWNzU0gUT1+RK7H6C8bB0A+1rLtl/f5xEAeqI3ZD8cAIhAOhX+S+kl3rAfSX3hMKva/1ndlA5+m3CiFdS0xe3yzqA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27177},"main":"dist/index.js","gitHead":"1083682ce775912c1c6905e1d85f94309d73e9a1","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.32_1748590805678_0.8039042467460484","host":"s3://npm-registry-packages-npm-production"}},"1.0.33":{"name":"@codebucket/files","version":"1.0.33","_id":"@codebucket/files@1.0.33","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"1a066bf87dc059ab311c471f2157df0a6925654c","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.33.tgz","fileCount":25,"integrity":"sha512-55klxFgjMHsqTV+ZhTxeVX0/W4w7tDq2gQGGHQz1oH6093GXJpfJW6YKjupra84f4eZUAhBVvEfg8hXRqKLUtA==","signatures":[{"sig":"MEYCIQDj09yb1eBIa3OeQt1Y1OlTvMsG+1gSs6zaKivJ1IFcqwIhAKw+A/T/yYlHd7oTw+VfWu7Sf3yY5JBKApP2yUINJYIp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76002},"main":"dist/index.js","gitHead":"e978fa53d512f93fbb75d4edce7009499fd3c0ae","scripts":{"build":"tsc","start":"node dist/index.js"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","multer":"^2.0.0","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/multer":"^2.0.0","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"peerDependencies":{"@azure/storage-blob":"^12.28.0"},"peerDependenciesMeta":{"@azure/storage-blob":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.33_1773214712103_0.4521550090057287","host":"s3://npm-registry-packages-npm-production"}},"1.0.34":{"name":"@codebucket/files","version":"1.0.34","_id":"@codebucket/files@1.0.34","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"a28545d34cd0469e1cc186e74b1353b1aef20ef6","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.34.tgz","fileCount":31,"integrity":"sha512-Y7WeCBRMbr8C1biRhKarAmYxNq4Df3mwsmHxYbHdwh8Ws9vv04jKt1M0U4f1bqDDuoANnQLc872kp0KB5fMyoQ==","signatures":[{"sig":"MEQCICqcujd3tVzrrZnIJOrcMqFkk9nqqKIGM/1n/m4kfu+GAiAcUzQX1uU9sUibfioJqZN9kjlUkyUJ5i42WIZVBtXB+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85704},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"09e181920574a2bcc659cabe47ce917c3c6bf551","scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","multer":"^2.0.0","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/multer":"^2.0.0","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"peerDependencies":{"@azure/storage-blob":"^12.28.0"},"peerDependenciesMeta":{"@azure/storage-blob":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.34_1773478521614_0.788787730260367","host":"s3://npm-registry-packages-npm-production"}},"1.0.35":{"name":"@codebucket/files","version":"1.0.35","_id":"@codebucket/files@1.0.35","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"dist":{"shasum":"d42bfc1a5cea2a04884de3ed4425294b5ff27746","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.0.35.tgz","fileCount":31,"integrity":"sha512-05PxCAF64BnlsyrNbXh59/rQVQP8TjLFdYH7RDf4RoPqvYDkCcBOiVzV5IN9fE6j5dL4QuidhX8JHiNLKCwtoQ==","signatures":[{"sig":"MEYCIQCg7O3JinYiW2E8Migqv44lBix2SsTEEEBqmtC/FU/29AIhAO8QnDIOC8j0GpsympsMYHYxMf+KdPhPI91AK06Q9ZVt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86423},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"gitHead":"09e181920574a2bcc659cabe47ce917c3c6bf551","scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"_npmVersion":"10.8.2","description":"`npm i @codebucket/files`","directories":{},"_nodeVersion":"20.17.0","dependencies":{"mime":"^4.0.7","multer":"^2.0.0","archiver":"^6.0.1","fs-extra":"^11.2.0","@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.3.3","@types/node":"^20.17.24","@types/multer":"^2.0.0","@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1"},"peerDependencies":{"@azure/storage-blob":"^12.28.0"},"peerDependenciesMeta":{"@azure/storage-blob":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/files_1.0.35_1774874353297_0.8617628635679844","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@codebucket/files","version":"1.1.0","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"build":"tsc","prepublishOnly":"npm run build","start":"node dist/index.js"},"dependencies":{"@aws-sdk/client-s3":"^3.758.0","@aws-sdk/lib-storage":"^3.758.0","@aws-sdk/s3-request-presigner":"^3.758.0","archiver":"^6.0.1","fs-extra":"^11.2.0","mime":"^4.0.7","multer":"^2.0.0"},"peerDependencies":{"@azure/storage-blob":"^12.28.0"},"peerDependenciesMeta":{"@azure/storage-blob":{"optional":true}},"devDependencies":{"@types/archiver":"^6.0.3","@types/fs-extra":"^11.0.1","@types/multer":"^2.0.0","@types/node":"^20.17.24","typescript":"^5.3.3"},"_id":"@codebucket/files@1.1.0","gitHead":"09e181920574a2bcc659cabe47ce917c3c6bf551","description":"`npm i @codebucket/files`","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-9VNEWsmtnxpQGelj4QP9/zeHhr+WZWHRByiyCW+TMXfPZh8qaASg1vyhxXRS3hlvMu2McFuueRbITLOgeZtWPA==","shasum":"c4c551318bc5269ae26d0551a17fbf70616d8db5","tarball":"https://registry.npmjs.org/@codebucket/files/-/files-1.1.0.tgz","fileCount":43,"unpackedSize":132920,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICRFpx7j2jjkd8YlQwYiZu2K5Nebzr/u8m0ppMLW++B9AiEAx7eouP9IUARMzSeIFRUeSsF+hFy0CFEW6lLRujyEuv8="}]},"_npmUser":{"name":"gotham13","email":"abhinav@codebuckets.in"},"directories":{},"maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/files_1.1.0_1785401233691_0.6724551600585742"},"_hasShrinkwrap":false}},"time":{"created":"2025-03-18T07:23:59.238Z","modified":"2026-07-30T08:47:13.999Z","1.0.0":"2025-03-18T07:23:59.496Z","1.0.1":"2025-04-21T23:59:13.065Z","1.0.2":"2025-04-22T00:56:07.896Z","1.0.3":"2025-04-22T20:42:38.280Z","1.0.4":"2025-04-22T20:51:57.502Z","1.0.5":"2025-04-22T21:14:01.642Z","1.0.6":"2025-04-22T21:45:38.225Z","1.0.7":"2025-04-22T21:58:28.983Z","1.0.8":"2025-04-22T22:02:43.306Z","1.0.9":"2025-04-22T22:36:18.548Z","1.0.10":"2025-05-04T16:00:22.416Z","1.0.11":"2025-05-04T16:22:30.617Z","1.0.12":"2025-05-04T16:36:54.296Z","1.0.13":"2025-05-04T16:38:24.305Z","1.0.15":"2025-05-04T16:54:58.302Z","1.0.16":"2025-05-05T13:36:21.283Z","1.0.17":"2025-05-19T17:52:55.203Z","1.0.18":"2025-05-19T17:57:44.819Z","1.0.19":"2025-05-19T18:32:19.712Z","1.0.31":"2025-05-30T07:39:23.157Z","1.0.32":"2025-05-30T07:40:05.876Z","1.0.33":"2026-03-11T07:38:32.271Z","1.0.34":"2026-03-14T08:55:21.755Z","1.0.35":"2026-03-30T12:39:13.459Z","1.1.0":"2026-07-30T08:47:13.821Z"},"description":"`npm i @codebucket/files`","maintainers":[{"name":"gotham13","email":"abhinav@codebuckets.in"}],"readme":"`npm i @codebucket/files`\n\n> Optional integrations:\n> - Azure Blob uploader requires a peer dependency:\n>   - `npm i @azure/storage-blob`\n\n---\n\n## Quick start\n\nThis package provides:\n\n- A simple `Files` facade (filesystem or S3-compatible)\n- Standalone uploaders (`FileSystemUploader`, `S3CompatibleUploader`, `AzureBlobUploader`)\n- A Multer storage engine helper (`createMulterUploader`) for plug-and-play uploads\n\n## For AI agents / code generation tools\n\n- Import from the package root: `@codebucket/files`\n- Prefer the exported typings instead of deep imports into `src/*`\n- `Files` supports only `filesystem` and `s3`; use `AzureBlobUploader` directly for Azure Blob Storage\n- Public root exports include `Files`, all three uploaders, `createMulterUploader`, `FilesStorageEngine`, and the related config/option types\n- `upload()` takes a `Buffer`; `uploadStream()` takes a Node `Readable`\n- `download()` and `downloadZip()` return a `Buffer` when no response object is passed, or stream to the response when `res` is provided\n- `getSignedUrl()` / `getSignedUploadUrl()` produce time-limited URLs on S3 and Azure; they are not available on `FileSystemUploader`\n- For Multer, set `keepBuffer: false` when you want true streaming behavior instead of preserving `req.file.buffer`\n- A concise Codex-focused API reference lives in `AGENTS.md`\n\n---\n\n## S3 / S3-compatible example\n\n```js\n// utils/storage.js\nconst { Files } = require('@codebucket/files');\n\nconst fileStorage = new Files({\n  type: 's3',\n  publicBaseUrl: process.env.BASEURL + '/files/',\n  bucketName: process.env.S3_BUCKET_NAME,\n  endpoint: process.env.S3_ENDPOINT,\n  s3Config: {\n    region: process.env.S3_REGION,\n    credentials: {\n      accessKeyId: process.env.S3_ACCESS_KEY_ID,\n      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,\n    },\n  },\n});\n\nmodule.exports = { fileStorage };\n```\n\n### Upload\n\n```js\nconst fs = require('fs');\nconst path = require('path');\nconst { fileStorage } = require('./storage');\n\nasync function upload(files, body, key = 'document') {\n  const fileName =\n    new Date()\n      .toISOString()\n      .replace(/:/g, '-')\n      .replace(/[^a-z0-9]/gi, '_')\n      .toLowerCase() + path.extname(files[key].originalFilename);\n\n  await fileStorage.upload(`/${body.userId}/${fileName}`, fs.readFileSync(files[key].filepath));\n\n  return {\n    name: fileName,\n    url: fileStorage.getPublicUrl(`/${body.userId}/${fileName}`),\n  };\n}\n```\n\n### Download (stream to response)\n\n```js\nasync function download(req, res) {\n  let fullPath = req.path;\n  fullPath = fullPath.replace('/files', '');\n  await fileStorage.download(fullPath, res);\n}\n\n// Express route\napp.get('/files/*', async (req, res) => {\n  await download(req, res);\n});\n```\n\n### Download ZIP\n\n```js\nasync function downloadZip(res) {\n  const filePaths = ['/folder/file1.txt', '/folder/file2.txt'];\n  await fileStorage.downloadZip(filePaths, res);\n}\n```\n\n---\n\n## Filesystem example\n\n```js\n// utils/storage.js\nconst { Files } = require('@codebucket/files');\n\nconst fileStorage = new Files({\n  type: 'filesystem',\n  publicBaseUrl: process.env.BASEURL + '/',\n  baseDir: './public',\n});\n\nmodule.exports = { fileStorage };\n```\n\nUpload/download usage is the same as the S3 example above.\n\n---\n\n## Using standalone uploaders\n\nYou can instantiate uploaders directly (useful when you don’t want the `Files` facade).\n\n### FileSystemUploader\n\n```js\nconst { FileSystemUploader } = require('@codebucket/files');\n\nconst uploader = new FileSystemUploader('./public', process.env.BASEURL + '/');\n\nconst location = await uploader.upload('/avatars/a.png', Buffer.from('...'), {\n  contentType: 'image/png',\n  metadata: { scope: 'avatars' },\n});\nconst publicUrl = uploader.getPublicUrl('/avatars/a.png');\n```\n\n### S3CompatibleUploader\n\n```js\nconst { S3CompatibleUploader } = require('@codebucket/files');\n\nconst uploader = new S3CompatibleUploader(\n  process.env.S3_BUCKET_NAME,\n  process.env.S3_ENDPOINT,\n  '/base-prefix', // optional baseDir\n  process.env.BASEURL + '/files/', // optional publicBaseUrl\n  {\n    region: process.env.S3_REGION,\n    credentials: {\n      accessKeyId: process.env.S3_ACCESS_KEY_ID,\n      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,\n    },\n  },\n);\n\nconst location = await uploader.upload('/docs/readme.txt', Buffer.from('hello'), {\n  contentType: 'text/plain',\n});\n```\n\n### AzureBlobUploader (Azure Blob Storage)\n\nAzure is shipped as an **optional peer dependency**.\n\nInstall:\n\n```bash\nnpm i @codebucket/files @azure/storage-blob\n```\n\nUse:\n\n```js\nconst { AzureBlobUploader } = require('@codebucket/files');\n\nconst uploader = new AzureBlobUploader(\n  process.env.AZURE_CONTAINER_NAME,\n  process.env.AZURE_STORAGE_CONNECTION_STRING,\n  {\n    baseDir: '/uploads', // optional\n    publicBaseUrl: process.env.AZURE_PUBLIC_BASE_URL, // optional\n  },\n);\n\nconst location = await uploader.upload('/user-1/a.png', Buffer.from('...'), {\n  contentType: 'image/png',\n});\nconst url = uploader.getPublicUrl('/user-1/a.png');\n```\n\n---\n\n## Multer integration (Express / Nest / any Multer-based stack)\n\nThis library exposes a Multer storage engine so you can write incoming files using any `IUploader`.\n\n### What the storage engine supports\n\n- Direct use with `multer({ storage: createMulterUploader(...) })`\n- Buffer uploads for backwards compatibility\n- Streamed uploads for uploaders that implement `uploadStream(...)`\n- Upload metadata (`contentType`, `contentLength`, custom `metadata`)\n- Cleanup via `uploader.delete(key)` if Multer aborts or post-upload hooks fail\n- Richer `req.file` info:\n  - `req.file.key`\n  - `req.file.location`\n  - `req.file.mimetype`\n  - `req.file.originalname`\n\n### Example: Multer + S3CompatibleUploader\n\n```js\nconst express = require('express');\nconst multer = require('multer');\nconst path = require('path');\nconst {\n  S3CompatibleUploader,\n  createMulterUploader,\n} = require('@codebucket/files');\n\nconst app = express();\n\nconst uploader = new S3CompatibleUploader(\n  process.env.S3_BUCKET_NAME,\n  process.env.S3_ENDPOINT,\n  undefined,\n  process.env.BASEURL + '/files/',\n  {\n    region: process.env.S3_REGION,\n    credentials: {\n      accessKeyId: process.env.S3_ACCESS_KEY_ID,\n      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,\n    },\n  },\n);\n\nfunction sanitizeFilename(filename) {\n  const ext = path.extname(filename).toLowerCase();\n  const base = path.basename(filename, ext).replace(/[^a-z0-9-_]/gi, '-').replace(/-+/g, '-');\n  return `${base || 'file'}${ext}`;\n}\n\nconst upload = multer({\n  storage: createMulterUploader(uploader, {\n    key: (req, file) => `/uploads/${req.user.id}/${Date.now()}-${sanitizeFilename(file.originalname)}`,\n    keepBuffer: false, // enables true streaming when the uploader supports uploadStream(...)\n    buildUploadOptions: (req, file) => ({\n      contentType: file.mimetype,\n      metadata: {\n        uploadedBy: String(req.user.id),\n        field: file.fieldname,\n      },\n    }),\n    onUploaded: async ({ key, location }) => {\n      // optional hook: persist DB row, emit event, etc.\n    },\n  }),\n  limits: {\n    fileSize: 10 * 1024 * 1024, // 10 MB\n  },\n  fileFilter: (req, file, cb) => {\n    if (!['image/png', 'image/jpeg', 'application/pdf'].includes(file.mimetype)) {\n      return cb(new Error('Unsupported file type'));\n    }\n    cb(null, true);\n  },\n});\n\napp.post('/upload', upload.single('file'), (req, res) => {\n  // Multer sets req.file.path and req.file.location to the returned uploader location\n  res.json({\n    key: req.file.key,\n    location: req.file.location,\n    originalname: req.file.originalname,\n    mimetype: req.file.mimetype,\n    size: req.file.size,\n  });\n});\n```\n\n### Example: keep compatibility with `req.file.buffer`\n\nIf your downstream code expects `req.file.buffer`, keep the default `keepBuffer: true`:\n\n```js\nconst upload = multer({\n  storage: createMulterUploader(uploader, {\n    key: (req, file) => `/uploads/${Date.now()}-${file.originalname}`,\n  }),\n});\n```\n\nThat preserves the old behavior and still uploads through your configured uploader.\n\n### Example: multiple files\n\n```js\napp.post('/photos', upload.array('photos', 5), (req, res) => {\n  res.json(\n    req.files.map((file) => ({\n      key: file.key,\n      location: file.location,\n      size: file.size,\n    })),\n  );\n});\n```\n\n### Example: mixed fields\n\n```js\nconst mixedUpload = multer({\n  storage: createMulterUploader(uploader, {\n    key: (req, file) => `/${file.fieldname}/${Date.now()}-${sanitizeFilename(file.originalname)}`,\n    keepBuffer: false,\n  }),\n});\n\napp.post(\n  '/profile',\n  mixedUpload.fields([\n    { name: 'avatar', maxCount: 1 },\n    { name: 'resume', maxCount: 1 },\n  ]),\n  (req, res) => {\n    res.json({\n      avatar: req.files.avatar?.[0]?.location,\n      resume: req.files.resume?.[0]?.location,\n    });\n  },\n);\n```\n\n### Example: custom storage metadata\n\n```js\nconst upload = multer({\n  storage: createMulterUploader(uploader, {\n    key: (req, file) => `/documents/${Date.now()}-${sanitizeFilename(file.originalname)}`,\n    keepBuffer: false,\n    buildUploadOptions: async (req, file) => ({\n      contentType: file.mimetype,\n      metadata: {\n        tenantId: String(req.tenant.id),\n        category: req.body.category || 'general',\n      },\n    }),\n  }),\n});\n```\n\n### Using the storage engine in NestJS\n\n```ts\nimport { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';\nimport { FileInterceptor } from '@nestjs/platform-express';\nimport multer from 'multer';\nimport { S3CompatibleUploader, createMulterUploader } from '@codebucket/files';\n\nconst uploader = new S3CompatibleUploader(\n  process.env.S3_BUCKET_NAME!,\n  process.env.S3_ENDPOINT!,\n  undefined,\n  process.env.BASEURL + '/files/',\n  {\n    region: process.env.S3_REGION,\n    credentials: {\n      accessKeyId: process.env.S3_ACCESS_KEY_ID!,\n      secretAccessKey: process.env.S3_SECRET_ACCESS_KEY!,\n    },\n  },\n);\n\nconst storage = createMulterUploader(uploader, {\n  key: (req, file) => `/uploads/${Date.now()}-${file.originalname}`,\n  keepBuffer: false,\n});\n\n@Controller('files')\nexport class FilesController {\n  @Post('upload')\n  @UseInterceptors(FileInterceptor('file', { storage }))\n  upload(@UploadedFile() file: Express.Multer.File) {\n    return {\n      key: (file as any).key,\n      location: (file as any).location,\n      size: file.size,\n    };\n  }\n}\n```\n\n### Multer cleanup behavior\n\nIf Multer aborts an upload and calls `_removeFile`, the storage engine will best-effort call `uploader.delete(key)` (where `key` is the same value returned by your `key()` resolver).\n\n---\n\n## Pre-signed URLs\n\nInstead of proxying bytes through your server, hand the client a time-limited URL\nthat talks to storage directly.\n\n- `getSignedUrl(filePath, options?)` — a temporary **download** (GET) URL\n- `getSignedUploadUrl(filePath, options?)` — a temporary **upload** (PUT) URL\n\nBoth are available on `Files` (when configured for `s3`), `S3CompatibleUploader`,\nand `AzureBlobUploader`. `FileSystemUploader` does not support them.\n\n```js\n// Temporary download link, valid for 15 minutes\nconst url = await fileStorage.getSignedUrl('/user-1/invoice.pdf', { expiresIn: 900 });\n\n// Force a browser download under a friendly name\nconst url = await fileStorage.getSignedUrl('/user-1/invoice.pdf', {\n  expiresIn: 900,\n  downloadAs: 'invoice-march.pdf',\n});\n```\n\n```js\n// Let the browser upload straight to storage\nconst uploadUrl = await fileStorage.getSignedUploadUrl('/user-1/avatar.png', {\n  expiresIn: 600,\n  contentType: 'image/png',\n});\n\n// Client side\nawait fetch(uploadUrl, {\n  method: 'PUT',\n  headers: { 'Content-Type': 'image/png' }, // must match exactly\n  body: file,\n});\n```\n\n### Options\n\n`getSignedUrl(filePath, options?)`\n\n| Option | Description |\n| --- | --- |\n| `expiresIn` | Seconds until expiry. Default `3600`, max `604800` (7 days). |\n| `downloadAs` | Sets `Content-Disposition: attachment` with this filename. |\n| `responseContentType` | Overrides the `Content-Type` storage returns. |\n| `responseContentDisposition` | Sets `Content-Disposition` verbatim. |\n\n`getSignedUploadUrl(filePath, options?)`\n\n| Option | Description |\n| --- | --- |\n| `expiresIn` | Seconds until expiry. Default `3600`, max `604800` (7 days). |\n| `contentType` | **Signed.** The client must send this exact `Content-Type` header. |\n| `contentLength` | **Signed.** The client must send exactly this many bytes. |\n| `metadata` | Travels in the query string; the client does not replay it. |\n\nAnything signed is enforced by the storage provider, so a URL issued for\n`image/png` cannot be used to upload something else. Omit `contentType` /\n`contentLength` if you'd rather let the client decide — a mismatch is rejected\nas `SignatureDoesNotMatch`.\n\nChange the default lifetime for every URL from one place:\n\n```js\nconst fileStorage = new Files({\n  type: 's3',\n  // ...\n  s3Config: {\n    // ...\n    signedUrlExpiresIn: 900, // 15 minutes instead of 1 hour\n  },\n});\n```\n\n### Backblaze B2 notes\n\nBackblaze's S3-compatible API supports pre-signed GET and PUT, so both methods\nwork there. Two things are worth knowing:\n\n- **Region must match the endpoint.** B2 signs with SigV4, which folds the region\n  into the signature. `s3.us-west-004.backblazeb2.com` must be paired with region\n  `us-west-004`, or B2 answers `SignatureDoesNotMatch`. If you don't pass\n  `region`, it is now derived from the endpoint hostname automatically. Passing\n  `region` explicitly always wins.\n- **No POST-form uploads.** B2 does not implement browser `POST` uploads to a\n  pre-signed policy, which is why the upload flow here is `PUT`-based. A `PUT`\n  from `fetch` or `XMLHttpRequest` works fine from the browser.\n\n```js\nconst fileStorage = new Files({\n  type: 's3',\n  bucketName: process.env.B2_BUCKET_NAME,\n  endpoint: 'https://s3.us-west-004.backblazeb2.com',\n  s3Config: {\n    region: 'us-west-004', // optional — derived from the endpoint when omitted\n    credentials: {\n      accessKeyId: process.env.B2_KEY_ID,\n      secretAccessKey: process.env.B2_APPLICATION_KEY,\n    },\n  },\n});\n```\n\n---\n\n## Connection / concurrency tuning (S3)\n\nThe AWS SDK caps its HTTP agent at **50 sockets per host** by default. Requests\npast that limit queue up *inside* the agent, and that queue wait is not covered\nby `requestTimeout` — so an undersized pool shows up as uploads that hang rather\nthan uploads that fail. Streaming uploads make this arrive sooner than you'd\nexpect: every multipart part in flight holds its own socket, so with the default\n`uploadQueueSize` of 4 you saturate the pool at roughly 12 concurrent uploads.\n\nAll of it is configurable through `s3Config`:\n\n```js\nconst fileStorage = new Files({\n  type: 's3',\n  bucketName: process.env.S3_BUCKET_NAME,\n  endpoint: process.env.S3_ENDPOINT,\n  s3Config: {\n    region: process.env.S3_REGION,\n    credentials: { /* ... */ },\n\n    maxSockets: 250,          // concurrent sockets per host (default 50)\n    uploadQueueSize: 4,       // multipart parts in flight per uploadStream() (default 4)\n    uploadPartSize: 8 * 1024 * 1024, // bytes per part (default 5 MiB)\n    downloadConcurrency: 20,  // files fetched in parallel by downloadZip()\n    connectionTimeout: 5000,  // ms to establish the connection (default: none)\n    requestTimeout: 60000,    // ms for a single request (default: none)\n  },\n});\n```\n\n| Option | Default | What it controls |\n| --- | --- | --- |\n| `maxSockets` | `50` | Concurrent sockets per host. Raise this first under load. |\n| `maxTotalSockets` | unset | Ceiling across all hosts. |\n| `keepAlive` | `true` | Socket reuse between requests. |\n| `keepAliveMsecs` | SDK default | Idle time before a kept-alive socket is probed. |\n| `connectionTimeout` | `0` (none) | Ms to establish the TCP/TLS connection. |\n| `requestTimeout` | `0` (none) | Ms a single request may take. |\n| `uploadQueueSize` | `4` | Multipart parts in flight per `uploadStream()` call. |\n| `uploadPartSize` | 5 MiB | Multipart part size in bytes. |\n| `downloadConcurrency` | `maxSockets` | Files fetched in parallel by `downloadZip()`. |\n| `signedUrlExpiresIn` | `3600` | Default signed-URL lifetime in seconds. |\n| `clientConfig` | unset | Escape hatch merged into the `S3Client` config last. |\n\nSizing rule of thumb: `maxSockets` should comfortably exceed\n`concurrent uploads x uploadQueueSize`, plus headroom for downloads and deletes\nsharing the same pool.\n\n`downloadZip()` is bounded by `downloadConcurrency` so a large ZIP can never\nenqueue more requests than the pool can serve.\n\n### If you see `socket usage at capacity` warnings\n\n```\n@smithy/node-http-handler:WARN - socket usage at capacity=50 and 454 additional requests are enqueued.\n```\n\nA large *enqueued* count means sockets are being held, not just used. Downloads\nare the usual culprit, because a storage response only releases its socket once\nits body is fully read or explicitly destroyed. Two things used to strand them,\nboth fixed here:\n\n- **A client disconnecting mid-download.** Piping to a response does not tear\n  down the source stream when the client goes away, so the body sat unread and\n  its socket never returned to the pool. `download()` now destroys the source on\n  disconnect, and resolves only once the bytes are actually delivered.\n- **A throw between receiving the response and reading it.** Any error in that\n  window leaked the socket. `download()` now destroys the body on every failure\n  path.\n\nIf you still see the warning after upgrading, it is genuine load rather than a\nleak — raise `maxSockets`, and remember each streaming upload holds\n`uploadQueueSize` sockets of its own.\n\nNote that `download(path, res)` and `downloadZip(paths, res)` now resolve when\nthe transfer completes rather than when it starts. Awaiting them is what you\nwant; a client that disconnects part-way resolves normally rather than throwing,\nsince that is routine rather than an application error.\n\n---\n\n## Delete semantics\n\nAll uploaders implement:\n\n- `delete(filePath: string): Promise<void>`\n\nExample:\n\n```js\nawait fileStorage.delete('/user-1/old-file.png');\n```\n","readmeFilename":"README.md"}