{"_id":"@googledrive/index","_rev":"38-eb58af469a3433c269d8813838302c69","name":"@googledrive/index","dist-tags":{"latest":"2.5.9"},"versions":{"2.0.20":{"name":"@googledrive/index","version":"2.0.20","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.20","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"f06b342e0c347df20f568f926cd053dbcc06ee03","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.20.tgz","fileCount":133,"integrity":"sha512-b71x2KF6KVXZf8MenEOWhgDN4bfka1I+H4O+fOQuDAiALW5q7pK45qLPSKPcYeCdGRLyL2du9lO7G8lnBXZaYw==","signatures":[{"sig":"MEYCIQDV2CKncBZiihttV4Tz2wBDZKf8p0tvPkS3YvGXaEYusQIhAPWLqB9Kyth60HXJUfHcst6yvBB38PjJJXQo0Kl+YaTg","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10532521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2cY7CRA9TVsSAnZWagAAIpsQAJlyJ+CEwLbWngd3d8PH\n9lL9+/8+f6ZSvpX3VoFjVSdctufalqBZ1B2I92kOk9jbiAlp5Kky60qOaT3B\n3UxGl+u7xjtVFSeUIWKDs3wRB85BAYcqEOgM0lSjcJY9EDv/18ehyxynADRQ\n5I3xdmrGdFf9aWBU4NXQ2r/a9cAm36sea0pSQquN2BdQ/0pKKLT18PUNq9sk\nKOvaKln4Aa/Gx1n/35a6j4+ALoKmFDwg91VIgYUaXtqsojvvEjlojw0cmRKW\nt0SkJc0BDoccnMet33JEcGcbOc33B6NRg24GDcY+Rw3XErfvBifzeOlnB9mH\naxd82ZqvvBuB4Pw6p8Y0MaaQB9EWVkUavDVTsN7w3Tf8oiGHn9XyMb+7JbUB\nR/1+zvY9Cdj/KgQ0KQIs7v9xCHEaMMKIjQCmC3fPBFb8iFnliyKB8sJFL6IO\nRiHN11lXiyGC7ao3hRnKaXURicv2qq4yp/CEO/7c3GD9cVcaBeAJBlXDGKjF\nNCUwGO/yQ95Nv+zVhvD+fS6CoRZIbjk85pScs9QorYJ7Wrkop8i6M0qu66cO\nCWEzV6/7ndr45/pNRwhS1GZpRPfnqJjiRer/bJ5ZBguJSBbwArcnoZtwkrTD\nRlgNsHIUPMmM1TbcyGHVKYeIIfacJfJzPSMCVH1GktJm2AAuMgBhQSiOAtB6\nYDb5\r\n=7pkV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"a446d9b26bab00bd09c0efe0e5ac5db4071e368c","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.20_1624884795124_0.4171989048657765","host":"s3://npm-registry-packages"}},"2.0.21":{"name":"@googledrive/index","version":"2.0.21","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.21","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"ec82716b4da2eb581c070dc4a10ec2bbc734e9b6","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.21.tgz","fileCount":135,"integrity":"sha512-mv5/QvD/TOHsCzBKA0cRD63YEV7/VVZclugnClWaop9J1M2U3qaND+v+fy9TlN7KR8OmokEOBX3Cl4ptVobnkQ==","signatures":[{"sig":"MEUCIQDo7E5RdlSklcQ6BY59H7TZeahesTeqH4ZbeijGjZYASQIgWkvCsRODvYECOt/3pdsNwsJTAsXOSjq0Fd7gfLxJEEk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10937649,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5Yu6CRA9TVsSAnZWagAAZOsQAIv14h3uD4J/Ua13DrmZ\nJvZcMN9RJU4FFrGhntHv2QgwaP/IGKqouKl5utZWLfgjrKPkfAnqtc+NXxOU\npZzon2RjVkSciwUIGHi+bO9c+e6ktEbmadJnehMGjmdv8Yd41STJJs0XMwnU\nwDy538pprgbZo/SemY49bdzwPAtYf70Tg/bkKuDR6YXhn4UD1jyYtUSb0FHo\nEi648ZZTlIg6MbImIktHUm/h3vo1luywVF2suMadHF6l0KNrm7+UMlj/G2Yx\nbxGHW1XPvae8ZmUXu68cRu4FXy5yDiLPEnsqYNlb2Tg5xbhZ0eZD1Hcy2dQM\nu5ukKZesCksjR3q/yrw6BDzZ10lRLKPeAPafkWY0ELk37J7cZuLGk09SXmLa\nmhYdzLmYDzgu9Ah8qP9vOtMgK1gSWoK91DZ3bJrSH3bls080amQpL0/X24zx\nXOl15691YQwjlGFz2ErDeFgEmv8eQXr9JxIhuFwVnJR6fApG+p00jX3zqekz\nEY2cbaTv88c6WHAXoXV4i+K/5J0dECyJPVy6uncVMxJaoVnTdvxhGcBo4lz7\nJ/mgoF2j9FdJxVqgu5S6+EK5mM9os6+/IpPHOjhqFRxNzuaWmNn7lKwP6cJg\ncUM4FEQ1cj0gZzzP+24uoIu18wiVni96A5b4Tn1n4+4awqqJvCGUt667A9EN\n+7W1\r\n=12UM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"ebfc382f607f12a77bda774961978b7e94b8bc06","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.21_1625656250143_0.50290943622583","host":"s3://npm-registry-packages"}},"2.0.22":{"name":"@googledrive/index","version":"2.0.22","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.22","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"bd466373043f624e9bb47a745ad78e34ac24da4e","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.22.tgz","fileCount":136,"integrity":"sha512-paDmBQqAsQ0xAvaT4vMD2IBa4kgfxWlxj9/W52GdfayhMogvU1vUghbEizM+0C7WAyDKugJBDPrPqnwemwxwXw==","signatures":[{"sig":"MEYCIQDX7USyijWACqxfau3U8A5uez+p9anM47is1/hzEdll6AIhAJk+OLiRtvel9GEon9T7HTRJe4cRTKnbeAPWEq6D43KH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10957013},"main":"README.md","gitHead":"b4e22cf5890d11f7f427efd3677fb145e9980c1e","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.22_1631875375576_0.09941951546185157","host":"s3://npm-registry-packages"}},"2.0.23":{"name":"@googledrive/index","version":"2.0.23","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.23","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"66f4e7d20069147bbd72a85a739d8e6c59f65277","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.23.tgz","fileCount":136,"integrity":"sha512-lc5RqECLEjMnu4mDc9kh94IEwY5hC/PElNDI85nYKTvf/DwaPVLomOYSzucCRhiWYDIn6iqZXaLfuVeCBw7J5w==","signatures":[{"sig":"MEYCIQDibcIutS3XH1dYZZunX7lPu9iVTSWLttvzmlx890YikQIhAIV5Niv20aizP1g8WYTtHtx0Bcp/j6w+gzi1VyxgjtD4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10960721},"main":"README.md","gitHead":"52a9299f466a85dbfe6050392091692c84780c05","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.23_1631961317078_0.05067975880594","host":"s3://npm-registry-packages"}},"2.0.24":{"name":"@googledrive/index","version":"2.0.24","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.24","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"29a5b10b537ea3a5aa20bb1516c0812f6931da8b","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.24.tgz","fileCount":136,"integrity":"sha512-AvwaUEAwrhDQHkbYpGL4HFh2/qe99vzDqkM4Kkl1xiIzNGMXVLU8Bvn0rOoS2wMXKBrrrsYtATKdZcF+FLx+wA==","signatures":[{"sig":"MEUCIB8dSBdwU87vPMu7NA1VZbnG/FxwLUKdWI28V2p+z44rAiEA8IIqsLtM3/1oY2rQ1GoI/739eWxOW1DDBHNNLHGyc7s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10981828},"main":"README.md","gitHead":"96a9a7e3d1d214ae7aaf12bae7d47b353a0236cc","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.24_1632116274600_0.010095279604462437","host":"s3://npm-registry-packages"}},"2.0.25":{"name":"@googledrive/index","version":"2.0.25","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.25","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"4fd1d9bfdb981695e20506e95a26509779f6bf6e","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.25.tgz","fileCount":136,"integrity":"sha512-Eoz8ScqDmCzLXtsRxRCeD5QDq+vAEW14flFFNGY9biAPzGFhWf8nYOvuCfZxJtZilmcOi3jvF5isM5I6YK/YlA==","signatures":[{"sig":"MEQCIFe0fhcEp84yN+6/i/NJsdsRzLOwko7fJDw82yUqWO1BAiBy9Mdpz+5IuGnhPac7AoOspUE6e85TSAuRI3vMB4SNiQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10981505},"main":"README.md","gitHead":"61fec1618804d98726059182a13dc24e36007e55","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.25_1634299650298_0.050140633686215574","host":"s3://npm-registry-packages"}},"2.0.26":{"name":"@googledrive/index","version":"2.0.26","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.26","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"d1161967cc82127163a7fed46268564402624744","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.26.tgz","fileCount":136,"integrity":"sha512-J0MOvPy/w6ryeLtk2KjNdnHP6/eCbwNR8/sYgGECkxVlChx1/4lWHLiU/3Mhe1VAOmxjRn7p4plIGvWK3QATfw==","signatures":[{"sig":"MEUCIQCoZYKVuNwWVQ5M/ReS9LlHWQH37+8goDVRpyKXTSXEHQIgA85H5qmt/soXL46V4o6ePYqTTkzwQQam6PYwmGJ4/i8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10986692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2JPyCRA9TVsSAnZWagAAn8EP/0iUot4GVkmW01194hSK\nJV7m4Keqg4hKkPKwWkoT/Sfn+UhZIdZHDy31GHSkBujIIfI9UuoDZRQW37Pl\nvN4Ow8FLuW3ixMGcBDYm4UBfZF5GnK24SN8Rfq8X2O8LEJLJPY/FlVug4CMB\nfkfzdccV/uKtuXdck0YtYtgIDAsgHIHq5AEGFIUiyr9/LpsgOQt/HPI73P/l\nVOwI5Q0MRE54C8xpz2Lp27jyO8nJEcxC1KKOB/lHeEg6wnsm8owGZI6RmNDP\n785kuTOlW/UAM76jtWi2WIapHlD6FLNvFon3kYhhe8NZOWdqOItCaQ5VAdMF\niQNkuH7lEs/iKd27SG1hH9SdrrZJvIzv/7cUexAVPFAa1ewUHLWbj3EcKXyg\nIRS/a1/lWc86zEuKo4Ft9Vb6a9zYAZIrRLSEzt/Fbe9UtogFCN1cClOvzrbE\n85nGKeDqX3HNImSw6AHv2ke04VNRV67V0tgj1NfghXOr7mSpyuMp3Z80UYiM\nmfzgJhvhGuUeHFBPUH2riJ2gbn3+Jw1o6H0Nm2aDDdl0fLFQmAoTt+i1hK1j\nrzvoSgorDm+MUTr0Q2HJQHXP+3Q4quxukcIc9Qgd9fLeUuYfLXp5jP9f+rhU\nXLSq4S3sc0nohRDAq29WALjMrygQppeH/RoI8cLf93OENIF/KM+SLLSZf/gi\nyrzF\r\n=dL28\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"d3c9d626f125bf48ef78be49913d01326b2ecb25","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.26_1636102277187_0.2809572046936468","host":"s3://npm-registry-packages"}},"2.0.27":{"name":"@googledrive/index","version":"2.0.27","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.27","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"71a5bbe222f416d7491c4205e08df7fd70e5f89e","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.27.tgz","fileCount":51,"integrity":"sha512-ZmcpT2aYBK2P/T+LZlP8tz1qa7/vBzYwkuDGdY8hjiSPVGYXV/K8ulFd0ChZkM5eQ88gHD5LTaDDpyCxlgNzPg==","signatures":[{"sig":"MEQCIDAF3LTRhY97zN9n8KM3I8wJbJxRY+E96s/pT7j25mmyAiA0wJ2M4oAoxIyugcbq4qajAaQcReykTOYW1qUFaEhYpw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2981844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3nyvCRA9TVsSAnZWagAAxZMP/1f/3XpAPzNzud01YcJ7\n2lkWSkGrqwsXElHz4ISAgOtOLw/JWy3FNgfl0FdNhY8EkbqDh61oiv67ljRn\nguJEzyJyaeBilpKeq+uF2V5S8GqSnYsLDaKRqnfaxDzHftpXJMswNZs6xRwF\nLk/ilRo04/uNNlHu/lWWxLXmlNWDcBR7zhVsMsyjP7WenFzP3YLYXXiGwY1F\nJHECz/IyIzo4sNB19F08ze+Ykh6POtDE903KhaW9ta5mKkB5cQ8JNUU+RsoS\noimGEVlgrRt1hDme58fhLuxa9LtfMObFrXT5Auxab6+lMuC4qenCwsL26+Sh\nd9j+xz1Kf/Hej2wovYFz4J01oYvMzYDUaoVUEDNNmgF887BZ7ItuQ6rOl0cr\nnkoYVqaMIs7q0H5Gpnju6sEUC0xexCbn5+m47E8DnQ6x4+7knRPraW37OVGY\nK3Yl5Lx+BbeSoohvbTzDmy2CfGV2ZqQsfY8X3d2dntgn80g9El/g+bV65zsR\n+2Y31BC68xGj1aTrOJBow0ONB4XZwitDotCy8EKpApWkGDLLDh79OXxKg9uP\nE1yfEqtUw6epIpzTxYx9Z7CtWwRz5W5oAhvFqpa9dLJV4On7QgBiq9q9sxMM\nrKHb4OuQOvBee5ye6th671PJa5pIEmTjg6YWvmtzdKX7zG0uIjI8O3hQIztZ\nXstc\r\n=O/R4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"160d556a975d73c655545dbca1457f3e05bd1a11","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.27_1641970863501_0.9435818433545555","host":"s3://npm-registry-packages"}},"2.0.28":{"name":"@googledrive/index","version":"2.0.28","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.0.28","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"2d8ea023b5f945c55db4ad95d0e5727f1693fd8c","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.0.28.tgz","fileCount":51,"integrity":"sha512-abw6M8IliVNPViikA1Fdl4YHaIelsLEflAlBF/1dq3nQhfIZv05u59DfCNfV6QbZsY/AxtZ+8LoV0vvtBIVPxA==","signatures":[{"sig":"MEUCIQD6eMb9ZfCYVIQadGkqhbcteGu6pvO8uJ2DfznJZsITHAIgDtEZhKT67aRDU/Z05sC6sj+jT4pYMO82tYgrjXs3fxk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2985307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4Q5XCRA9TVsSAnZWagAA89IP/R1YLMPSE0qFAYqMLc1A\nW2ainvSSMgcPOELfUOZTKy42IT+tSqkWDBj3WZxt/EmJUNECCGMyd+OzlR/W\nISlehf0rAQeAIXkVj6OvBKS2wTGqEWW9vXkHIQxazYUcp5KDmOFZ4CNwjne6\nf95bdMu/mGsNd4z3fboTGGT9dajmZLE4LIfh+8YLaf3bDX1/MzqeGiLn4G+H\niu3YYdLA+8m0M0+jdoLeBJGekvxKGN9Syo4kiPkXb2ZFmVKXzqhnGCZ78CH2\ne0N4HXUvjSCeBCHugT6YyeSFHmddtZaxwa46dwnZCPIdj5siJh5O7uRcMAxr\nS9F27CQDZThUitmf3NsJ5OA+iNcnAabgc5j7QWOBJXLUia5G13XmnhLQd86a\nrrciZ/X21xKF+N0e+orvrmMZ9oViA5sLMaNlTDFOP4PJBtVqBp+hUAlbLTue\nRRmR6Q/uQurn+qYRmeFc7H6ad4L6IZTq+HFtki4X5yfKl6PED+zkgQ47yvRK\nlf7OBc3IKl3wNmb7DAstggqP4M+d+7i8lSbp++Vajun/hNdMknqL4aNEeIaX\ndxV5RScg47PPOoqA6RfVHDya3I97X81RMZJR3TYh7LI8OFFqJMvVNO1p7m2R\nh2TzIbmaHmN5THcq7EzdsXCrsJ7yg+aL//HBeISds3RG3I/fPR73+5PBs/DK\nugja\r\n=/fwz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"2f11acc8c35ec49d3e102549703ec1becf59da73","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.0.28_1642139222566_0.41830892086865235","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"@googledrive/index","version":"2.1.0","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.0","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"611000cd11e93a03c22b3857dfd8ae5a15cc173c","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.0.tgz","fileCount":52,"integrity":"sha512-bL+cBGhk+6xjKYRh0vDYgpSWW1OV1X2+dRYpvFm7Q+g1AhD9dQZN3uSbx3twV9Ar4JaGTRGQtNAtNmXefQ+TNA==","signatures":[{"sig":"MEYCIQDp4bxFu4aeH2a69smEY96ZFdFBKj79N4rGVI4nNtGmywIhAKUq/ghdQqi7WDUiWP7vLhGCZlOIdl/ZwyiDGuuflt8F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3045615,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4nDZCRA9TVsSAnZWagAA0acQAJbhjZzOIc8koQPk3En9\nXvnWNFhBjP068o7Wu8oF9Br+Ag4Wwj7axUpw2x5o045PdiXz8UHGhYNX1zIu\n8ZEaj4kxnKs8q5W49ZVw5aTro3YwVEJXtFUELa1dgwbmnnvijDY38J9VjIHL\nJv/LCMLh6F/LAFwm56ORFALgaXCqmoIdmklAAOPQ1S/3JYlqBzg11Re+1Gw+\nLidwX74+gH1w4IQtW3EJpL7CvOMJxbtTTL9NFTys3rm79rDVExQ6DeF7nEWo\nwjEzAkY2tp/9+MYksarunTwBS+cNkW6TbvmZvCbQMgzj7GHTZYzrQFkn9QKG\nn4JgrJBn5RsF3GxAmXF5AJCaY9wa6TKakFwJOdgTQIJ4amp6pVS6pzjFOo5d\nFUmo87r6wMhYH31LL4anWhxl0kobJfT/oB5i/403ZfemQvhJ0G6biT9+4XGn\n4pQtG9CwYSXKG6k6RG9SLcksjh6WbiC+VXa5JgIcOJ5L7WUt5xML9rm8ZfsO\n+d4Dajccyv5jOb2DFO9fl5kF8SdTWBUat1O8u9jntxppNT8PG1qLHjIvOv28\ndstGXGRtTec1oHH8F1RVeRn7s2Do8PH328u4fbJuF2Yxm2AE9veDUupYf4xv\nLG6zbFmfplkGK+1F0dYNC0wxBkA7Y7dPg3IVeoROJKXL3KQMbpS4sAN0RNyo\nYK3S\r\n=1llT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"ac70880543a61514a84a6686929ba8944471c55a","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.0_1642229977692_0.2066395006295545","host":"s3://npm-registry-packages"}},"2.1.1":{"name":"@googledrive/index","version":"2.1.1","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.1","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"36d57f0d57f6c6b5b07a22bc009162d33096b168","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.1.tgz","fileCount":54,"integrity":"sha512-2dAl/kuGzyU9MCtmehUsvPldrH8I+9z+WeAKlVhtjXvG4e9a90Dck78c0/8FnUdqAMZGS7OZEgW6ZIY6VMJVug==","signatures":[{"sig":"MEYCIQDExVX2rgOhfOT+e063whimTItptpDIKASAhUIejx9g6gIhAJyH/eHUKQve1QsBmV4yn28WdN3qOXxVowiQxfINJq0k","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3085125,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh5SJ8CRA9TVsSAnZWagAAbYUQAJtY2nuFVlWV5OH0vzT0\nYyLUYnrUoDh6XwTr7pN8nRprhMOy6guxLIBY1hpkVvI7eO3JMPFGtsMhk7Op\nC/oKxssxupVHHoXHh5eR3i1cNVclrePPCYIJTh6aX6dAoSS7/+qq3HBaraay\nzZ7PcufPwMUO09DMnINxNc43KhhzDG0DaAUNZcfXSP8AgyT+rdKI5LedqJPt\nASuGa/kRWzNAvKBtjUf13+jak47c4PCmSIxjDyPzeYjjZkDGX0hrVvEwpVTx\nWSVR0YUfO2OPoaky+2nCE7s9Vdrw4V9SUadg8cIADQGW8+oLCW0/UUxWn+DF\n7LP9zTPUck2EBODWH7CdNInMfKB1MpfipszVzdblJKba/oF5DOFth13x7dXq\nmSp/gcdBuVWyiC4I43nEnRAgCwUJuz59K/tODvn4gmGlRMYaevGwEjR+sab9\nFvJhNSWtD6gpolKG3u6cdsd15Kao3Gmr6v5K4FcCKniotrQVicvlqJtzwE+k\nktufcm/gB19BvWaG44slJTdr3ABP8UVDTcq5KyCujmnfhPsNzwuUtccy0Dfp\nfLTP482yBC2ubcU9BcW61oNy4IQhOQeyoVH48SJKTRuT1kIkQ/n68ZG8ke/u\nY6fVovY/P+KpE+3UoOZEo72+Pm6JZpXqx90g2n+KD/WyiiXHuQ6Q/W+glwRQ\n25wB\r\n=R/uK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"960e8eace49c430bb47c16b90b096c67532fafd3","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.1_1642406524382_0.9813153135065282","host":"s3://npm-registry-packages"}},"2.1.2":{"name":"@googledrive/index","version":"2.1.2","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.2","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"5a6e855c91a4a30f445c99c152ace3cdef5371a3","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.2.tgz","fileCount":54,"integrity":"sha512-w+dA+DSEZSvf63cTGrg0A3+s977fUkuK7bISyudT6zIWAOltrC2vo0lK7FyGylLyIHJ5gN723ftkhYXZZNhA6Q==","signatures":[{"sig":"MEUCIQDFg+ZWdWfLlDFDv2hCuaYkIgB5Ip4Y5JN/ewbkh2jn4AIgOtKh17KRcVwEDqb2gPb6E9kTfxWPhAn65LJQ3uGgXpE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3084252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh5SM3CRA9TVsSAnZWagAAACQP/isZUJMXLgHHBTykShUQ\nYJs4VW0h2NZjDfkqI+pE4T6/Ydbwkp5zxCXOQWHUncTn0BT/CjSy4GazbP6b\nDr/KIamcr0heEpq+md5cBxzoRAjba5C5C9HkWcUcddcPghclWKfR9V9/mqpe\nzw2YmkfGGU8YgZA2tQRGcBNvrGLwDavQkihZ+gvs75AMrgfRlPxXFNwxrG/m\niss96aFSVD5twyYqJhhmrIlWdyz0l4UNibkXV7uHXpI39Weyj20wR1gIYTwP\nq+qPpT/juDSjpJaGwdp01ROUy1JEe4SywSWI+aaNDqxMVgWHkqSTuhojy64+\njrYasy2JQQgeyVJf5OLDRfG814Jlq94q7HX1HyXXbSPejBXtZwGqQJ4WHSYJ\n/NrBhn0ZW349T250uOq0MHC5rc/w10bQrCq9XidTwp1X6aVJ2DfEDiWBP8Tf\n130TNU6Zzq0hfd1PFUmu7SAFfMltHP8yvFsfIJjhpvwTVsSUU5+qwFenUmrB\n+KAX7gcke3WVBlXXc3xJ9QqWUMScoKoF8oXzACmJjal/x1HgynDapPuzIUoc\n1Pwjfz/HsG41p9jjzanOWifUxZdC86Yg76zR5lCUpKmWToCRknXDvjhkfHMQ\nTBVsSNp6Ykd1/MdlzuTB04n9UpMLRTU20PkU2h0MSuFVSH/dEI0jpQ1SajSl\nA/hd\r\n=hX6z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"960e8eace49c430bb47c16b90b096c67532fafd3","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.2_1642406711743_0.2596271813107298","host":"s3://npm-registry-packages"}},"2.1.3":{"name":"@googledrive/index","version":"2.1.3","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.3","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"f829307638ae7a57920cd604d59e46ac1d099e61","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.3.tgz","fileCount":55,"integrity":"sha512-NcE7l9SKnZTAOaqL5tRqiuvt/9iUsQbC/78UhtNdCdc6+FUdRpqFw8uwP2CsPGGUDygcA5nWH40WCHpz98MVqQ==","signatures":[{"sig":"MEUCIG5y4Jbko2y9wC2nVsAWG2gpTBCXwITO0fDCHOkH84/YAiEA8NnP5ap/5AxH3nwhhJ3saXEbvXtkt6wfRf4IGYzRtB0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3141528,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh5s73CRA9TVsSAnZWagAA7dYQAIWOnBF6KomDkPhsSRlz\n5q2bxY+YqKyevV55pOIhWmWTjSeHfgsAg25/Ennoo9PC6hwMZ/VM3Wh03/QN\nH8/L9dBK6jcCu5AM00jaZbROlxCrw7bpQ10rt5dStylyV+15JlWX216wnLBy\nmVOyXHCie/0QveXLJkm4tsuAzCvZVZi0kZuww4q2IHOKjl6XvUyH0VlUICVL\nYF7VGJgwdAcWJRMWpHsCwaXyWVlLrst4bBUt9oDxpRNcVUNUu0D3wCmMkk9f\n76d7nRSBIKJjEiKfzC7sW4nGmYNxIHT8cOICJDhuTQGFHFtBylgouk2Qa7C3\nGmD13XHs4Qg/nQ8oNTm/ZdDmyDF6IQHmnKKltA45MdMPLXNQaqKmFC9EZyIL\nUAnvScjToJLq9D8jbLyyAnsPJeRwd+LqJLYV/Jy3fEPRZSpRdhECzgdwWem3\ntFGG92KHFJcGoxMznI9h+1pwap7LmzET08oJKScu3V/XgcHC4BHsOZttE+zb\nbv1Nkgn0q8IqFSQdmxv3UCV5owvVQ4Y+cIybTSBaHxS37O9vMf5L5pjrV8S6\nOw4oLyZnF/POZwpjPMU6+W8TtJyq1T9qkdIHzq0ComIkNtG2LddhKBnZbbAM\nqNOGTe/AMqFV97g3MK34QUISo+e4bXgAvfc0Y0KQiHP/x8PxxZ5y9Qwd6ljX\nqvqW\r\n=F5tx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"271322e18e34df9733a65b0019d77bb4e1341637","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.3_1642516215615_0.05372973921356583","host":"s3://npm-registry-packages"}},"2.1.4":{"name":"@googledrive/index","version":"2.1.4","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.4","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"31420604bff149a968b5057b06eb0bbd82db4a66","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.4.tgz","fileCount":55,"integrity":"sha512-LI+VulnptzVG4rvpuOEXyD1t9eGE5N99c9bLrDbJiBKnKZ4l7q+4XhHgZL5OB6dvXhZPBNCa5o+X1PsD0uZiHw==","signatures":[{"sig":"MEYCIQDgDcGCdFRgq1077U7IQ926mEk3lDEMZWFpaxqt6+mLkAIhANsU8I3gm1kdbDmc+hwbZNaFsiwvjrbN1eztMqviK52G","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3140739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6p2pCRA9TVsSAnZWagAA73gP/0mzu79XcKXK4upf7Ia5\nt8GEISzOG6Uv27+oViGv/EiVa2aXmqUkzzcn4BjPYYj+JdFllYG7xhx33ajD\nXDutZZp8gC9mYCwXrFP9m57UpjLVsoY9Eo+cXSin42R6CzNhNvSY2NGwXHYZ\nIzfqhbBicuSpAg4fZVX3rM73IqWI6/lkqsQ1Vrh2szdi98D7HVBz9oJykPws\nOA06voo4I1lroqhOCFOibc94owMlfVgf4Zc6WuAD31/41oGbuGpMktYuJAxX\nI6vrn1yS7MBYxm303XeAuI/462vfPV7bdaionVBQIzMYBs9EoOm3G2Q1BNOY\nevdB8K0e5aMWwMCjHDskixMX1AY2JPmUpJUunyAgXdftHDWe1NO9BHsXuNvF\naVw/UGPtlKIn6f3/lep8/aBG1I7m9+8wzBwZiOSM10WnpsLRleOGPzwhwTDN\nsrdzPTy2DJNDuRHILq5CwMtYMbZyF634Xuxk4pu/5j2b3CRr62TxUYBrGd86\nU7/iPUKgWR82g7lmgrC4oEczzjImHofwED3bHtcFcldbeekcte64e21Iy6w6\niqDv3VTVESswpOV8RAbetIfJcOkzeHWYV3rVIstIRUY1B2f8rXx85Gp3xci2\ngVuCXiw9mpvEdRrvx50958QPP3foHTSRDVU9j08ziQy7gZGLhDMylpOGtpfU\nRajy\r\n=JvpJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"a5d74cfc34f8db77a6fb55da0adebdeee674f526","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.4_1642765737091_0.11229222266838135","host":"s3://npm-registry-packages"}},"2.1.5":{"name":"@googledrive/index","version":"2.1.5","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.5","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"c108c0393055d56820ed7c27cbe29cdb6649f383","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.5.tgz","fileCount":55,"integrity":"sha512-hez5Mdv5UexiBMJIySm0LefutsbCqfpcUxscfcQ9QsI1QgyOhuX/H84dz4D/dQpK+isARdzO9U1x9abu4ySPcQ==","signatures":[{"sig":"MEQCIDI5e1nI/dKsD4oJyddbd4cW3wupNm17nYZRJsRy/qxFAiAFFaZDs+LCDSrgAI6NRE6NWrPv3nvaPEJJoo5h+3mO+w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3140874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh7TYVCRA9TVsSAnZWagAAXjEP/AxWMcQLMM8T6+bd1RlB\nr8nDCff9DInQrnses1yG+e9HU0Yhbrkg86B1NFd3HzLq2L9d22T4rKozSTMW\n997+RTZ9sBL4Cbwc2qLB1SNboynjjq8qb8/9R4zF4l0gu7CEnY8caKEeCHrB\ngm0WyWbruawF9unW/naeUbQzTHQlIFhhKPreVAnGB8nw6Y2rdBL7D5c0r9aI\n9yh9T9vKSnTu5xE5BsjmTYb27cyqeqIZ7+doXwbHxM/ed13UIMYByjGVxjqq\nXL34yng3UMpIoLyX59CbYyRIbDfFSivelQAovuxAwLxBEdsxdsm629aIlOoy\nTjokAWoN3kzDsv805t+KzfAXYjIKxF50JFBOySI37I88S0UNmttiqi/ZFKWQ\nxksbEDP7dhxRqcRoPYcjqzDHsIPWGgPygR80gcETA0R2L6WUTN9B1QxBTifX\nMPzw+WmNRL/qPRUFic1vUDBlAoGnuFqDdz45eiLh59yyS1FwUQN3qtMNSmcb\ntfRcRqyp5cf3gMsD3KO4syDt742oG93cQvpgPHd4gs8GobGY3VGza81xYclI\neqQorZFQb2Mg5hTVEPe1zZIw3OJ22DgZXv+K8N8XeqvaJwKJ5n4tVzeTGWpI\nM5ch9PkuB+FQyuhJCcID1z2NXY1gUiTXrjOggAKdhRm4of0GCwIZovEU9uae\nHIT0\r\n=HK18\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"e23f39c59c1b30dc0f37248469fcd807a06e06ab","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.5_1642935829059_0.22433287118446188","host":"s3://npm-registry-packages"}},"2.1.6":{"name":"@googledrive/index","version":"2.1.6","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.6","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"8cec1cb4eb8a033b6e90ed5b47909cee7105f3d0","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.6.tgz","fileCount":59,"integrity":"sha512-3ry6kdu4UG4bIsv6UBCDB0h4XTfZ8CXhhIMZDtoJNGELHmXMkwS/NR5BLU+aG0MuAPh6x+whVufgr4ltn9LPmQ==","signatures":[{"sig":"MEQCIA0TyYx52YoOIf4tXXYBnFpbgP69R9aqpmx5Usxr+juDAiAFCTZfbqzhYNW3tLAENslpUzXxXHA8Ai74kVxk97Z8rQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3566250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9UjeCRA9TVsSAnZWagAAhZAP/ReuT/gYMeWiW4zcur4c\nCjIKVjb1awTlIx4WSW/QAn3xYMHISTm0yJ2FXNssXINFcs3e1tLimAGhPiMT\n2KlH8t0su01Qgrqqm8dYEKY4Zt8O7xOD0gUeAZn2v9tUKX/YZ+JX25RnK+sd\n9dnfAIVq9//TgXvy/AC5k27RAvnTVlYFZm+Gf/OLEDc5TwBZY4zGo2n5JcaU\n9yeOI+d9mdfLjQxYeM6XiL7mC/qcxePRgsFZzhKZq0Jz3Rrt/igxSPJ8VKU0\nwmd2jQwgcH/Duoh1AGPHEuuwoCRrnImjEYPRHi6lmt5h9w0Njueje6/0/H3F\ns/2iHVZnUUV/pgWC0ruDt12ohxThrjruw+Fa9yhZMPFqiNYsZAi12cfJ54v1\n3lsKmQedR19lbOtR9HJkBmWhHTYVjqwWwPwJA5D9t3CLH6qE39MyGqj2gm1I\nC0bhcKog5LqtPi42Hs1uj8RMAP2ksdQYNOXicpZzAMdttTyuZRCRx8Kr4qQq\nf1zYFVkg1MYLOzGd24bXMNgP5MqUZsO7OSjJHzBpKb/CYVNKniogHIOoSZs0\nvO9hd2tAAo+q8qGrQZ1/Awglxu4YOQFTeFyVOOM2pA8Tl9X23ikAjczL5jMG\n0dmD/Rxp0f8gSLi+yyaItfjDRZHm4iVVciXEkYyN8rVqHasChkf1esLbkE8S\n/8/9\r\n=3nOz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"8f9998c25b2999a00a888fc3df979efa0175f03e","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.6_1643464926158_0.29867294334715355","host":"s3://npm-registry-packages"}},"2.1.7":{"name":"@googledrive/index","version":"2.1.7","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.7","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"534a7e452157bdd53b1742af43759b475dd17a70","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.7.tgz","fileCount":67,"integrity":"sha512-bqvT468Joam+VrCuOFJjEWx3KLCRaliY3wEPxWG1EyvkIOKCVnWZWXfYp3qbtpbY+7R7+ygWI1krC0JMK9RhXg==","signatures":[{"sig":"MEUCIGxvOgykB/9HvY9ut/TysH7S4m+lsYjiRG2E0CVZKLSjAiEAodSXrzU4TzCb4OIN7bAugNTp7wJiWsZzFZZg+DuWkkc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4032585,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+OqPCRA9TVsSAnZWagAANfQP/3m4nk3maaputV8zhKTr\n6L4qirKulTSv9CMUM+GvhjWYuxBpCu6Z1xvfgdBB/N1h4UWtj8qrAkjxOXH+\nhq3UbjcRK0Ph4YhVf9enDaC7n3qKoPu3tUIRndpNxvU75weEearw7OSFhTT9\nf3MrjDSPC/AhenP/6sKNvtvSlqelPLKAELD8q5Rz8uWQuvGfybRDt7AAxor5\nOcZK5NXHKpQfNFAasI7aqSLYrcnBgHY0slHJXJAyvgR19PuGEzOX16lPWpaX\nBPCk4tO4vWwvWV1FW/OteBLgHFWqH8l2o97YhK44yfvTj9RDbGDVN64sN7Ay\nehR3U1U8ME9e1PQ5rVpsNO29zZefVCcoO3I8Ghqgq/H2ltnvDLIIp8ktPnxq\n8LGFDVgASvS1dAs/Zhi7KDGWwi7Zb7qH9S/B0fNn5vz12t7ish4Cwshw3ACc\np5Er3+Ji+r85Azk8uSy2MBDYMNMral/6QHEy1pt/X4o/5ScHZl9QiP+uE8NR\nC624eS777wkl6rVwrjfool1T8oQlkCuUFw1RNSIjcGiBAh6CzTa/Sg8tmZUj\n3M84drxjQ1230LkJVrHwwOYtEXoqng61L4tKvoZiBDGPAeWfqGNxP/lqAjtv\n9rcFX0u0oXEonGdCz7U4RsR9LbgziBfrNA+qxP2/9E3uvCai1Ly0GdePbeqn\nvLpL\r\n=/rrG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"9d08e2ed993eb7e7e267c9ef00dbde4a4d1ccbe0","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.7_1643702927252_0.3137218370688408","host":"s3://npm-registry-packages"}},"2.1.8":{"name":"@googledrive/index","version":"2.1.8","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.1.8","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index/issues"},"dist":{"shasum":"446345999af75a227aa86ffc8f6ae15f7b3623ca","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.1.8.tgz","fileCount":67,"integrity":"sha512-K1tZPdqJjQTdALLnY5agxm4P1Wf9p1jjOE+bNev3hxhUTGncKa6EhDzSrtBD5QxtqL/pTMh1ezKhQbjEyTnzYQ==","signatures":[{"sig":"MEYCIQD8eZNQ2W+EPlphbArmIUOcoqJYg2gvHmxR7vtXu0BZKQIhAOtY7b5/4t7Cd78xTYyVE1/jjAIYIGgseKKs3ML7S5DI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4027834,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+79zCRA9TVsSAnZWagAAxBEP/2D4DTX/Hh1lKOH0ObQ+\nXBVYNevHGbadE9w0uRQUBcoeBxVgP96vLoe2sO9ddeBVvfGkO0hnkQhjAIJn\nCrP+2TxfsdKr4ImLfLFna2OiwZqspHSYJXaJxZt1lb6SMuLJVnoy6AhOqn0d\nFh76omWLdzGWrtESeSQrUXdFjUTAHreRVaXXfVPME4gWcsaTTgzB+bxcVJwz\ngc4mY7wskNwYh4Y5ztny9qrW/yfCYyOEEDx8C/t8yqWrRiBEKNkmPOhwbmHa\nDD2bhg+jG78h1IBBwqJFmTxSCGaok0BS/t1vM3epHxUv8A7LX+cmyjQPeGH9\nmhMMPzlOyiAMVvtIY2qQyrC76VJ9sf5sm3qG41T7GGLpGSCAdeszzzFVA2DQ\n3UpSF9d56F3xODVfqqK06Km/yKgn1uOMs9Cp/5nnyn7edvb24L9VkxTQRHET\n9Oqn5ISNtGljaep0is14q/5SrIiDQgtAhOtIf/BSpsuQ4VbfF+P+mJt+7jX6\nbpq8OW5JWYkXn+50tFSGW5K3j3og8+KQmVIeGuM80CIjj6GtDMFYPqnoXtDp\n1qIRjOK/prxAmdC1IqRfd9at4IG8UljJfgzPNoFRBeRFtc+mJW/gdqdZQo9j\nKCGpq0+tZ6u3OiOMK37KpqPt7m7PwPBW6qr1JZCcx1oq245IXPLeu7U6RCAp\n3C2z\r\n=Embo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"56440ae184709f7500d8889751a4f2ac90741af0","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/ParveenBhadooOfficial/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.1.8_1643888499126_0.5198392543550534","host":"s3://npm-registry-packages"}},"2.2.0":{"name":"@googledrive/index","version":"2.2.0","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.2.0","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/issues"},"dist":{"shasum":"3d50a6e1b28bd499509ac4877724128eba05af07","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.2.0.tgz","fileCount":67,"integrity":"sha512-34rMjHGNxWG+c1crtqzeoSAACZEylQBhZX9Grc5gnYXU72+TmeSnly/A7Grz6T9QJ/r5SkzkU0dOrQ95Yq/JPQ==","signatures":[{"sig":"MEYCIQDBLICDa8V7zbugXtOiWWeEx6soQsK2ArnWjA8MnPD3fQIhAJq0dlGKLzBaS3F7U9vgVVx/4IDyiodm6otMeqS9Jqeq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3956019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1pfKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp3lg/+OORUm5EDoZ388+pi9TtGZfbsQWqhSpWT2doWsZ5vGbSWDXM3\r\nN4YucGFxsQpq42GOQBE2R2JqecR+gqYTe+V5lcU3oOGZf9vnHv1tH7507Pul\r\nQ0mF4gU5E/zq0CRF4TkmkleOiufYlLaVdrnRD3GegC4yGd/Q0O9M+bLHZA1Y\r\n7ZK8XmHDNLNv46nuhkIMmb+gr6626CpyuGx4xm2POc0GMu8kUtexCuxzhdcb\r\n1AjfKs9hm+5Em/QzOlygU1xW8Ov0UN4W2lFrEM+mo/1RaW2EplIV5sw2D3kl\r\nAcU++sftpVvBnutXsElgqTysX4RxJrHodShahD4YdeU5A0OIYzcOB4aBl2/d\r\nXaTTxVnkujEAQewXeTcwHJ5xR/0EHT2sWlehGPyVZIW5PKsERhs5He/vFOmq\r\n3ZDaTwTdQVZIu++AkvfK5HDIKWz9q+NkGK7tAiLZPwqNfGZ7eXNMXvRf7EF1\r\nKqhRvmONrsBOAZznmhM9/QjAjMbVECPVNuPUbS/0x7a0JaCjjqMQnHp3p5Gu\r\nw3el9JKUoDC7aGQcNM8u5XOYfW8pDczfH03AAjR2fV+hWGM07e2cv5TfBQ39\r\nfaC8Zlw/LhBiiZN0p1pizjGih6myzwMBlVS4b9Ta3L4tN85HxH/U1RVhkpxQ\r\nz+kGM3qdtYHY+t8WVCaoNORSpVHSaBmNfGw=\r\n=K9Ks\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"54ff7fb5974737979861e36143cc3395173863f0","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.2.0_1658230730688_0.01359174194764634","host":"s3://npm-registry-packages"}},"2.2.1":{"name":"@googledrive/index","version":"2.2.1","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.2.1","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/issues"},"dist":{"shasum":"89366f5f2ffecd783273c6b3e239ded5b553ff40","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.2.1.tgz","fileCount":63,"integrity":"sha512-W/gkL4sXgeDljFHhJTSqQ7/cW9PzamNR3vff8FNvw+3X75OPoHWCcfuRypMyYVJPcbeRYi2IFSYHf029sofTzw==","signatures":[{"sig":"MEUCIQCEjyrrsX8f5mPTsvcjhBLo45efjI8PGnIYdFbcoFPB2AIgdpgkQeEiBLV1Ab/0yuEixdd2uRITCh+c1UhzQM9ge1Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3603039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi13DFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+tw/9F6Ffc4WToNr+ZM9E3/j7lRFXmNlVIw2Rw4hVmhAhjOklf5IB\r\n1395LirTsH5IZnxuvoOT7esJYXKEG/mSHEMNM6DrmXC9mbTFhb4+wtXSaGNB\r\nyu5ntaRe4XVnPAn8hmk5uppBHitIiCwoCcB3ltb1jTJyDjKvobqM3LpTDe3J\r\n4d9DYNn6IC6V4ehLFoqtjLfBhfMc0WUxtRKaYDL1f8H+fb3Y9hdtCIqcsZz7\r\nyzJzjhTwmMWlEIMfZ5ax+cGG0UjplmtYQaDPmcoqLkKIPw4+Hu+HchOTO5nM\r\n0wtXu8MdGpx4sWMEQ0HWvzLSRUYDp5SodbkpAcvrZ81TO0NOVz6QLfZne8WV\r\nvXuVSp3LzpEUuGppb2jS5Of7pX0Rp+Q5d4I/kr7HnKFQFa6Mkvq2r8hLVdxG\r\nbtUTgjq5wpdriPrHw4Ss6Egwg3NxpvvLHW5icOkVcrBzBRbyzGa0urDec6eY\r\nuTCleTnIR/KBvJNmQ4xy+oV67F3lIHt3czXUcNqqr3MlXIx4RXRcvRgRnnIA\r\nr2dyxBr6bBUlEHlsvnxulxrtMACC/xKvKGdZWlLkiF2g3OeNYvENwBtWwl9i\r\n5oZUCtE573vQO1S4u6eAlQjTUGybnck/vGCyCkAfKOyLTwkJ9xNFk0neuHMu\r\ngoX4yhgZyISQGo8p/jHlb1T+r1lXEmU890o=\r\n=0jZs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"fb2b11758d784c2a432f56689cc7c35c371f6294","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git","type":"git"},"_npmVersion":"6.14.13","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"14.17.1","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.2.1_1658286277138_0.4313527032772668","host":"s3://npm-registry-packages"}},"2.2.2":{"name":"@googledrive/index","version":"2.2.2","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.2.2","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/issues"},"dist":{"shasum":"d070845e893b534e1dce490356b1c6d188155a25","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.2.2.tgz","fileCount":65,"integrity":"sha512-L60FQ0ziDObkGo3pc6KTlx5DI+VZByahrteJw9RgpXXqYOaYj7zmW3fmCUvcHaye0HfhrNMIcwAEUHLtYpOdYg==","signatures":[{"sig":"MEUCIB0p1h0QNszk87R6kfJ7R5Qzx/EvB8KfRCOo00uFSbBVAiEAgsP/NBxYyRAvXe5XocGFMsFZYBSgRH0ef11/VpcnNH0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3656020,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+F2oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmojlw//VpQcIr7OVSmVKRIrhCxjBAL7NiFY7MkvNaTVtU0VNvTkQIbM\r\nMQspdt+3KJR6Vw1N4iEpl29BBTaj2yQAuOr5GpUum9EmNGa4Ikj1pRyUlvde\r\n6xyvKIbWpufvp1HTCKpIYLPMAyQySQhPamJHYACumf4sZuiPHfK1r7axn9Ob\r\nR73E401diIL4ixbJZJgFm43hHDsh3TzaElZ0QSZGYnBejwYMHtoY1xN8IhVs\r\nx8SZe/Wa1XzB6xPbKXomfLr7rw3LPCPYdZyi9s7bjoT2wmBUlYwwAI2doUVj\r\nF1/PLaq78+wPdGNyK/ZsNnnsoXj2MZJWGMYPNMPulXAPYucHKo0qR76JL34W\r\nTB7gPQJQ0qy2DfeajYf7RBkAUvcDK0E3OJ4HwRedwMRe7uG5pOlVbFvGOOLz\r\nygL9aRxGCr4/IgNyCbREMfciKBnLyrQ2+431YGNVNzwtv3hvRi6S26JQr/fg\r\n7dkEfHNmkX0lYckjkOnwNtC9jZsV+mO1Ih5wu7B49ERHGp+/bJPDisSVcLiL\r\nugI63p6mXcniq4QyazlQ35d0XGhb51GCsHLQLPcs/krWIGFcPypWD3Rc/Kmv\r\ncM68WsjDtIlUYwWIy4DYLtpL6iTGaobLpkldatzS5L/JIc9C82cqUBtgmj+H\r\nr0m2e7Nf/89vHgQPcfKIpA27O46DQwSJUKU=\r\n=i3+V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"9d25151387af590547fad699c31b7a66aebbb3d9","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git","type":"git"},"_npmVersion":"8.17.0","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"16.7.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.2.2_1660444071882_0.5572666155581916","host":"s3://npm-registry-packages"}},"2.2.3":{"name":"@googledrive/index","version":"2.2.3","keywords":["google-drive-index, bhadoo, bhadoo-drive-index"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.2.3","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/blob/master/README.md","bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/issues"},"dist":{"shasum":"182da3964953cee57102930b91883cc357560315","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.2.3.tgz","fileCount":65,"integrity":"sha512-bIQ7dP0S9Qrof7k8+nRNHIJD4jejM4/JUje997jNhXtSvSKSlaa/FCfe3h2uZvItbKsHsUQyyF567EALSPm9gg==","signatures":[{"sig":"MEQCIA9OcZWgejPTs/TQkf7TgvmSrXny+mLHMeZ1emzaPzwdAiBzI19dFhJmaVvXiyjL83d6uw8aNoD7PvQLPJfyEPpE3A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3649373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+F5yACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqaFA//S9ymMzXi+SLrf49OmVomlwR8IKFQpv6KaEkbneoxBCsVXyRL\r\nF7WvyrfxE+itlcu5wKyxMcIoVp9AUSeEWvbouJpWtwkPvfNPX9Sa0xvrzZ9C\r\nXR0ID/gAeC3Yqg1lEoHGD6m13GJBzeK32iFZNntBNIWIWteY53PAVEvOnqq2\r\n3vrvnIxVHYuoX/BIhXFWsw72lJog89Hk5vpWpBRyUp1z0VS4dS3VgXqkzw8u\r\ncmnHZf0ArLwUFEVktLFUJLQ75QJS8WQ0Vg5EKWXqsCYhY4Fgw6ipbq8mZDeM\r\nWHa4jahmgo9IcTKBUdO5TxK8mP4+HzQmQGHbLSPr68ewhpl42yTqyB6nbh+M\r\nHhtuY/zHg9GlxJrGkJIHcnrqDn3WMF7sV9QB71K5sGbcjDLduiENLSt1gKrP\r\nMQT85Kk9tHhbfB1mPRT7oB+bfWUQux92YU3LbydNzGJFmMFsu3HgytEC1EgI\r\nBjqtv/tDWFLlr2Yx0k2Y3SXJtBckaHfbuL92RhQvyosaWXevRe0OrLaMvzKs\r\n3Dk7naiorvxfQ64VXsxptNmFC6SgnjFTNYOwAgYOdTGRb9NkxO5uuPo3zZVs\r\nvgVu4EdrNhj5vfTxZ/fLFsggdVEM2cl6mtxnhw01MhDrorU/fGEzFVlFbnTr\r\n2B4xxrt/je8RvA40qfWdbn65YPax/o4puuA=\r\n=FY9h\r\n-----END PGP SIGNATURE-----\r\n"},"main":"README.md","gitHead":"9d25151387af590547fad699c31b7a66aebbb3d9","_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git","type":"git"},"_npmVersion":"8.17.0","description":"A Google Drive Index to List, Watch and Download Files using a Beautiful UI.","directories":{},"_nodeVersion":"16.7.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/index_2.2.3_1660444273988_0.9438813615896591","host":"s3://npm-registry-packages"}},"2.3.1":{"name":"@googledrive/index","version":"2.3.1","_id":"@googledrive/index@2.3.1","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"dist":{"shasum":"a0d709995289bbc2cbf850495447fad322595a3c","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.3.1.tgz","fileCount":51,"integrity":"sha512-u618IGSiUopkXxVAOk4xVbO4oNXGrlW4Fpm/uc5MFVzGKEXeH/dwdp8oJ6LsyOydrPXuQ9JaTiXcB0FInmA//Q==","signatures":[{"sig":"MEYCIQDN6F2utLaG6RhrGC3lEtBPQBniv0N5ShO9gtjubVzR7gIhAKDW6ghSwOce4PDb6/LWUwA5PQzIYWjQrob7jVxyPg6w","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2234133},"gitHead":"64b7d7ac60da30a747942e2fa7975eeda3d81651","private":false,"scripts":{"start":"wrangler dev","deploy":"wrangler publish"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"_npmVersion":"8.19.2","description":"* Mongodb DB Implementation, may or may not be done in future, no ETA\r * Admin Page to Handle Index Better, eg. Database access, adding users, deleting users etc., no ETA\r * Rewriting Documentation, no ETA. Anyone can Help","directories":{},"_nodeVersion":"18.12.1","_hasShrinkwrap":false,"devDependencies":{"wrangler":"^3.4.0","typescript":"^5.0.4","@cloudflare/workers-types":"^4.20230419.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.3.1_1691152178117_0.34670005904021584","host":"s3://npm-registry-packages"}},"2.3.2":{"name":"@googledrive/index","version":"2.3.2","_id":"@googledrive/index@2.3.2","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"dist":{"shasum":"a82522a6bb0a095107e77bd7a2f5a738003a4fde","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.3.2.tgz","fileCount":51,"integrity":"sha512-Qfbu553xWfU9Y+q58dqgfDNX5wbJ652aLdGMjDJvQjzm19mBsLkxShRL/miZYX9BKx5gNGx1xNaaA+2Uvtw54g==","signatures":[{"sig":"MEUCIERL3PO5WV2ZTd37TjTw267duR9//iUBnOH09QbscJ/dAiEA0jx0/V1lctTwxN/Izjt24XTLbLBdLKBsO8Vgwb4DXus=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2264536},"gitHead":"7923bee2b49aeb7770a04cc7c46084f2c2c0da13","private":false,"scripts":{"start":"wrangler dev","deploy":"wrangler publish"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"_npmVersion":"8.19.2","description":"* Mongodb DB Implementation, may or may not be done in future, no ETA\r * Admin Page to Handle Index Better, eg. Database access, adding users, deleting users etc., no ETA\r * Rewriting Documentation, no ETA. Anyone can Help","directories":{},"_nodeVersion":"18.12.1","_hasShrinkwrap":false,"devDependencies":{"wrangler":"^3.4.0","typescript":"^5.0.4","@cloudflare/workers-types":"^4.20230419.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.3.2_1691161560193_0.2841091914148881","host":"s3://npm-registry-packages"}},"2.3.3":{"name":"@googledrive/index","version":"2.3.3","_id":"@googledrive/index@2.3.3","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"dist":{"shasum":"87f4db5c5ea91ce037c3fe081a25e101900863bd","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.3.3.tgz","fileCount":51,"integrity":"sha512-msLSLxLNLZmBgYdkmqlx3+5KB9IfI0B6DC+4DLd5IgS77GelNy0ERcXJfUkRvwQLruWbOl9y76kzrevQPX3Qmw==","signatures":[{"sig":"MEUCIQCwYFHUQZamjxcNI+tEDGXThxlwukxmml2Ll51J0/b4KwIgBNgrdn4Ajpa6PmRclZ8HiBGc+b5aJQ5g23WgiJulZ9w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2234730},"gitHead":"bfbcc769906fbf46ebe6d5aa6e93367e146365e1","private":false,"scripts":{"start":"wrangler dev","deploy":"wrangler publish"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"_npmVersion":"8.19.2","description":"* Mongodb DB Implementation, may or may not be done in future, no ETA\r * Admin Page to Handle Index Better, eg. Database access, adding users, deleting users etc., no ETA\r * Rewriting Documentation, no ETA. Anyone can Help","directories":{},"_nodeVersion":"18.12.1","_hasShrinkwrap":false,"devDependencies":{"wrangler":"^3.4.0","typescript":"^5.0.4","@cloudflare/workers-types":"^4.20230419.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.3.3_1691239838429_0.4573594622130719","host":"s3://npm-registry-packages"}},"2.3.4":{"name":"@googledrive/index","version":"2.3.4","_id":"@googledrive/index@2.3.4","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"dist":{"shasum":"e8df991a5e7f6e03e463e109260cf6fcd215c1cb","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.3.4.tgz","fileCount":51,"integrity":"sha512-ZAZkc7qIoKVQgRqDx4LQUUK8atPrtMUqJGrEq8ng5Fqc0cP4NE1NUOAw5cK2DhpcxUdzC7eMJPrsho5QV7wK0Q==","signatures":[{"sig":"MEUCIQDQJMPUM75fPhB1nZo/LeGrIvLF0isoMuabZZQEVfsTTAIgbt9oFTOFHkaiOoUGUHnTpXyr7Hs905yQjvjcYkBoZcM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2234537},"gitHead":"75b74969915d529d0bc464a928287d7cb3c6b00a","private":false,"scripts":{"start":"wrangler dev","deploy":"wrangler publish"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"_npmVersion":"8.19.2","description":"* Mongodb DB Implementation, may or may not be done in future, no ETA\r * Admin Page to Handle Index Better, eg. Database access, adding users, deleting users etc., no ETA\r * Rewriting Documentation, no ETA. Anyone can Help","directories":{},"_nodeVersion":"18.12.1","_hasShrinkwrap":false,"devDependencies":{"wrangler":"^3.4.0","typescript":"^5.0.4","@cloudflare/workers-types":"^4.20230419.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.3.4_1691240134042_0.8047081660530804","host":"s3://npm-registry-packages"}},"2.3.5":{"name":"@googledrive/index","version":"2.3.5","_id":"@googledrive/index@2.3.5","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"dist":{"shasum":"dd4ffb740e347eca80ce39165bac3aed955cb79c","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.3.5.tgz","fileCount":51,"integrity":"sha512-BPJuE79VVhFNKk6Nfhb09EKCq3m+2LSG7CVEnVMpcwXo5peYCk3nvm6NinDcktXb2aUZlZhz3074ii6fREdBfA==","signatures":[{"sig":"MEQCIHv6/fhKZGefUL3IfUlXOZ8KMtJVePmbtvqeBj4sJQzTAiASdWr41vCoe+CXFZEqlN/9taohJgzTJnDDZzSpmkwioQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2234380},"gitHead":"4d72ef176b80666caa74dc8631618c4e894180d6","private":false,"scripts":{"start":"wrangler dev","deploy":"wrangler publish"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"_npmVersion":"8.19.2","description":"* Mongodb DB Implementation, may or may not be done in future, no ETA\r * Admin Page to Handle Index Better, eg. Database access, adding users, deleting users etc., no ETA\r * Rewriting Documentation, no ETA. Anyone can Help","directories":{},"_nodeVersion":"18.12.1","_hasShrinkwrap":false,"devDependencies":{"wrangler":"^3.4.0","typescript":"^5.0.4","@cloudflare/workers-types":"^4.20230419.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.3.5_1691240434337_0.620731659577773","host":"s3://npm-registry-packages"}},"2.3.6":{"name":"@googledrive/index","version":"2.3.6","_id":"@googledrive/index@2.3.6","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"dist":{"shasum":"d13d3eef855204666323787d3a6d533b1598677e","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.3.6.tgz","fileCount":52,"integrity":"sha512-bbc7dvz9YM+k4JG6o/Jq+N3AfNMV/65w+R2VAjQwfXjYxjcLFvZoT8YkLzSiXi0WNWqo9wMZfK/VV6VZBrG91w==","signatures":[{"sig":"MEUCIGtSQjOOehXSyl+keptdEUOevLhO6yXnuxZjVwEjSqudAiEAlPfZugxvvKkA4sDUJtnYxrb2VKFO3mFM9terN3B0d3Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2359471},"gitHead":"0fc8177e03abcf5c6e87e66c2e744585c6683f0b","private":false,"scripts":{"start":"wrangler dev","deploy":"wrangler publish"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"_npmVersion":"8.19.2","description":"* Mongodb DB Implementation, may or may not be done in future, no ETA\r * Admin Page to Handle Index Better, eg. Database access, adding users, deleting users etc., no ETA\r * Rewriting Documentation, no ETA. Anyone can Help","directories":{},"_nodeVersion":"18.12.1","_hasShrinkwrap":false,"devDependencies":{"wrangler":"^3.4.0","typescript":"^5.0.4","@cloudflare/workers-types":"^4.20230419.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.3.6_1695451743284_0.7771527254076034","host":"s3://npm-registry-packages"}},"2.3.7":{"name":"@googledrive/index","version":"2.3.7","keywords":[],"author":"","license":"ISC","_id":"@googledrive/index@2.3.7","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"dist":{"shasum":"e5ee96ecc4968c9ee870917de046afb278e65ff8","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.3.7.tgz","fileCount":51,"integrity":"sha512-BJnvBPHyTIQ53CF/OfYfj/ua+DiSt3xLBnW48QNpZT/PocZwkkV24xvIu3Q1S4bk+4r8VfrXpr14O/eZBQHNtw==","signatures":[{"sig":"MEUCIBDkw6hUv7EtiQdvpZpYgrXS3HXtU1tZx6Y+7u0HyZHiAiEA7T1Nkmjd2KXpDdeKryKlldI1KUh425zAoPIWL/eNNcU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2241369},"main":"index.js","gitHead":"77a8069f81c2bcf104e97934f7a757296c15f18d","private":false,"scripts":{"start":"wrangler dev","deploy":"wrangler publish"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"_npmVersion":"10.7.0","description":"* Mongodb DB Implementation, may or may not be done in future, no ETA\r * Admin Page to Handle Index Better, eg. Database access, adding users, deleting users etc., no ETA\r * Rewriting Documentation, no ETA. Anyone can Help","directories":{},"_nodeVersion":"20.14.0","_hasShrinkwrap":false,"devDependencies":{"wrangler":"^3.4.0","typescript":"^5.0.4","@cloudflare/workers-types":"^4.20230419.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.3.7_1724472116427_0.5517122308918341","host":"s3://npm-registry-packages"}},"2.5.6":{"name":"@googledrive/index","version":"2.5.6","keywords":["google-drive","cloudflare-workers","serverless","file-index","directory-listing"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.5.6","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gdi.js.org","bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/issues"},"dist":{"shasum":"51ae0bc1dea2d5bbd6489bc8feede0dcd71b77fc","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.5.6.tgz","fileCount":20,"integrity":"sha512-JggEHWmtYF2N6F7vmloCAZnFKS3BvuL45Z/zg1RLXYBr4YodwfEMfCXttKetk5/qOQqLUBezOdvO/SJtR5MgLg==","signatures":[{"sig":"MEUCIGGLV2ze7Y0zDL3H6FkBmk4nrt3YNPh9srp8KHwgj6cJAiEAzNHJHz/Jo97tgC37Ih9a+n8L1vfRxCQ28U2MFsyeyLY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":853332},"main":"src/worker.js","engines":{"node":">=18.0.0"},"gitHead":"8372f167c7071b1ccce4f6d5ecd5dc190c23f854","private":false,"scripts":{"dev":"wrangler dev","lint":"eslint src/ assets/","build":"node scripts/build.js","check":"npm run lint && npm run format:check && npm run typecheck","start":"wrangler dev","deploy":"wrangler deploy","format":"prettier --write \"src/**/*.js\" \"assets/**/*.js\"","publish":"wrangler deploy","lint:fix":"eslint src/ assets/ --fix","precommit":"npm run check","typecheck":"tsc --noEmit","format:check":"prettier --check \"src/**/*.js\" \"assets/**/*.js\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git","type":"git"},"_npmVersion":"11.6.0","description":"Google Drive Index - A serverless Google Drive directory listing on Cloudflare Workers","directories":{},"_nodeVersion":"24.9.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.57.0","esbuild":"^0.25.0","prettier":"^3.4.2","wrangler":"^4.80.0","typescript":"^5.7.2","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.5.6_1775207133172_0.539592770143956","host":"s3://npm-registry-packages-npm-production"}},"2.5.7":{"name":"@googledrive/index","version":"2.5.7","keywords":["google-drive","cloudflare-workers","serverless","file-index","directory-listing"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.5.7","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gdi.js.org","bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/issues"},"dist":{"shasum":"34bb3f6b08fb2eb1a087530948e4fe4c1c7791db","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.5.7.tgz","fileCount":20,"integrity":"sha512-g/gga2xi3wuQLznch7uCn2lF3m/qkkoKEC9w4mvt0NCli+tRRur+jBsvAemAjHX7fMMbEAowO1Op3R3PTF9arQ==","signatures":[{"sig":"MEYCIQD9IHnbkAnN8rL155pVyQMwbaoD589UwBeyDkGX3lmsRAIhAJytDr4gvUjmJYSTHx3QflhiJ4xgHAFXt+R60zEi6iyQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":868637},"main":"src/worker.js","engines":{"node":">=18.0.0"},"gitHead":"f36b892063fae0ebe18800773239e070e41aac50","private":false,"scripts":{"dev":"wrangler dev","lint":"eslint src/ assets/","build":"node scripts/build.js","check":"npm run lint && npm run format:check && npm run typecheck","start":"wrangler dev","deploy":"wrangler deploy","format":"prettier --write \"src/**/*.js\" \"assets/**/*.js\"","publish":"wrangler deploy","lint:fix":"eslint src/ assets/ --fix","precommit":"npm run check","typecheck":"tsc --noEmit","format:check":"prettier --check \"src/**/*.js\" \"assets/**/*.js\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git","type":"git"},"_npmVersion":"11.6.2","description":"Google Drive Index - A serverless Google Drive directory listing on Cloudflare Workers","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.57.0","esbuild":"^0.25.0","prettier":"^3.4.2","wrangler":"^4.80.0","typescript":"^5.7.2","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.5.7_1775271705435_0.5930125345288175","host":"s3://npm-registry-packages-npm-production"}},"2.5.8":{"name":"@googledrive/index","version":"2.5.8","keywords":["google-drive","cloudflare-workers","serverless","file-index","directory-listing"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","_id":"@googledrive/index@2.5.8","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"homepage":"https://gdi.js.org","bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/issues"},"dist":{"shasum":"651938b1176137172ba2e5ed64ff46728c9ba495","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.5.8.tgz","fileCount":20,"integrity":"sha512-Eh4Zd2u0S0S2Mw3SUV8UmFIi1kJpuvNwfhWDlxyxpc1bdDydnv5jT8SMMkMmPrV0sDXpH9k3JoIBvXu1T78Mew==","signatures":[{"sig":"MEQCICufVIHKDRYGCHIMKew0gFWTC8GZYJBlL70vPww3pBtvAiA3vADJxCMC6vw7pd/lGYKbUDHoLvugSToro++Wpgl07w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":868988},"main":"src/worker.js","engines":{"node":">=18.0.0"},"gitHead":"5638f86b47e599adb56625e90b6e0f1df032dd19","private":false,"scripts":{"dev":"wrangler dev","lint":"eslint src/ assets/","build":"node scripts/build.js","check":"npm run lint && npm run format:check && npm run typecheck","start":"wrangler dev","deploy":"wrangler deploy","format":"prettier --write \"src/**/*.js\" \"assets/**/*.js\"","publish":"wrangler deploy","lint:fix":"eslint src/ assets/ --fix","precommit":"npm run check","typecheck":"tsc --noEmit","format:check":"prettier --check \"src/**/*.js\" \"assets/**/*.js\"","prepublishOnly":"npm run build"},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"repository":{"url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git","type":"git"},"_npmVersion":"11.6.2","description":"Google Drive Index - A serverless Google Drive directory listing on Cloudflare Workers","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.57.0","esbuild":"^0.25.0","prettier":"^3.4.2","wrangler":"^4.80.0","typescript":"^5.7.2","@cloudflare/workers-types":"^4.20241218.0"},"_npmOperationalInternal":{"tmp":"tmp/index_2.5.8_1776348679070_0.1182071340661277","host":"s3://npm-registry-packages-npm-production"}},"2.5.9":{"name":"@googledrive/index","version":"2.5.9","description":"Google Drive Index - A serverless Google Drive directory listing on Cloudflare Workers","private":false,"main":"src/worker.js","scripts":{"dev":"wrangler dev","deploy":"wrangler deploy","publish":"wrangler deploy","start":"wrangler dev","lint":"eslint src/ assets/","lint:fix":"eslint src/ assets/ --fix","format":"prettier --write \"src/**/*.js\" \"assets/**/*.js\"","format:check":"prettier --check \"src/**/*.js\" \"assets/**/*.js\"","typecheck":"tsc --noEmit","check":"npm run lint && npm run format:check && npm run typecheck","precommit":"npm run check","build":"node scripts/build.js","prepublishOnly":"npm run build"},"keywords":["google-drive","cloudflare-workers","serverless","file-index","directory-listing"],"author":{"name":"Parveen Bhadoo"},"license":"MIT","repository":{"type":"git","url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git"},"bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/issues"},"homepage":"https://gdi.js.org","engines":{"node":">=18.0.0"},"devDependencies":{"@cloudflare/workers-types":"^4.20241218.0","esbuild":"^0.25.0","eslint":"^8.57.0","prettier":"^3.4.2","typescript":"^5.7.2","wrangler":"^4.80.0"},"gitHead":"0bfecc4dc9ac85265787b3d0e692029b6ae08e9b","_id":"@googledrive/index@2.5.9","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-gE7dVB9ZxCQn9eplu309pKiDBznzDRadf72qElYxNWF3GLx8OIvS+ZdLa9HW5efFnpzaWnaUhxhqXFd9/EHyBw==","shasum":"5a89079693a2743d981701a47053039582b2e25f","tarball":"https://registry.npmjs.org/@googledrive/index/-/index-2.5.9.tgz","fileCount":20,"unpackedSize":869354,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCKV0vQN6htdbd7vf1dEOFmv4bUa34kzWjFcy89McdoXgIgIaPtaRztriTzZQzur44rBav6J46xpjjxWBVTQWEzRbA="}]},"_npmUser":{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"},"directories":{},"maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/index_2.5.9_1779889945146_0.2512022712332198"},"_hasShrinkwrap":false}},"time":{"created":"2021-06-28T12:53:14.739Z","modified":"2026-05-27T13:52:25.462Z","2.0.19":"2021-06-27T07:17:15.455Z","2.0.20":"2021-06-28T12:53:15.406Z","2.0.21":"2021-07-07T11:10:50.529Z","2.0.22":"2021-09-17T10:42:55.861Z","2.0.23":"2021-09-18T10:35:17.313Z","2.0.24":"2021-09-20T05:37:54.890Z","2.0.25":"2021-10-15T12:07:30.622Z","2.0.26":"2021-11-05T08:51:17.440Z","2.0.27":"2022-01-12T07:01:03.786Z","2.0.28":"2022-01-14T05:47:03.014Z","2.1.0":"2022-01-15T06:59:37.911Z","2.1.1":"2022-01-17T08:02:04.624Z","2.1.2":"2022-01-17T08:05:11.991Z","2.1.3":"2022-01-18T14:30:15.836Z","2.1.4":"2022-01-21T11:48:57.412Z","2.1.5":"2022-01-23T11:03:49.300Z","2.1.6":"2022-01-29T14:02:06.381Z","2.1.7":"2022-02-01T08:08:47.481Z","2.1.8":"2022-02-03T11:41:39.295Z","2.2.0":"2022-07-19T11:38:50.888Z","2.2.1":"2022-07-20T03:04:37.383Z","2.2.2":"2022-08-14T02:27:52.104Z","2.2.3":"2022-08-14T02:31:14.240Z","2.3.1":"2023-08-04T12:29:38.332Z","2.3.2":"2023-08-04T15:06:00.495Z","2.3.3":"2023-08-05T12:50:38.724Z","2.3.4":"2023-08-05T12:55:34.363Z","2.3.5":"2023-08-05T13:00:34.619Z","2.3.6":"2023-09-23T06:49:03.580Z","2.3.7":"2024-08-24T04:01:56.720Z","2.5.6":"2026-04-03T09:05:33.359Z","2.5.7":"2026-04-04T03:01:45.662Z","2.5.8":"2026-04-16T14:11:19.284Z","2.5.9":"2026-05-27T13:52:25.330Z"},"bugs":{"url":"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/issues"},"author":{"name":"Parveen Bhadoo"},"license":"MIT","homepage":"https://gdi.js.org","keywords":["google-drive","cloudflare-workers","serverless","file-index","directory-listing"],"repository":{"type":"git","url":"git+https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git"},"description":"Google Drive Index - A serverless Google Drive directory listing on Cloudflare Workers","maintainers":[{"name":"parveenbhadoo","email":"parveen.bhadoo+npm@googlemail.com"}],"readme":"# Google Drive Index\r\n\r\nA fast, modern, serverless Google Drive directory listing powered by **Cloudflare Workers**. Browse, search, stream, and share your Google Drive files through a beautiful web interface — no server required.\r\n\r\n[![npm version](https://img.shields.io/npm/v/@googledrive/index.svg)](https://www.npmjs.com/package/@googledrive/index)\r\n[![jsDelivr Hits/Month](https://data.jsdelivr.com/v1/package/npm/@googledrive/index/badge/month)](https://www.jsdelivr.com/package/npm/@googledrive/index)\r\n[![jsDelivr Hits/Week](https://data.jsdelivr.com/v1/package/npm/@googledrive/index/badge/week)](https://www.jsdelivr.com/package/npm/@googledrive/index)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\r\n\r\n---\r\n\r\n## Table of Contents\r\n\r\n- [Features](#features)\r\n- [Architecture Overview](#architecture-overview)\r\n- [Prerequisites](#prerequisites)\r\n- [Quick Start](#quick-start)\r\n  - [Method A: OAuth 2.0 (Personal Drive)](#method-a-oauth-20-personal-drive)\r\n  - [Method B: Service Account (Shared Drive)](#method-b-service-account-shared-drive)\r\n- [Configuration Reference](#configuration-reference)\r\n  - [authConfig](#authconfig)\r\n  - [uiConfig](#uiconfig)\r\n  - [player_config](#player_config)\r\n- [Multiple Drives](#multiple-drives)\r\n- [Per-Drive Credentials](#per-drive-credentials)\r\n- [Cross-Drive ID Lookup](#cross-drive-id-lookup)\r\n- [Service Account Setup](#service-account-setup)\r\n- [Login & Authentication](#login--authentication)\r\n  - [Local Username/Password](#local-usernamepassword)\r\n  - [Google OAuth Login (Social)](#google-oauth-login-social)\r\n  - [Cloudflare KV User Database](#cloudflare-kv-user-database)\r\n  - [Session Security Options](#session-security-options)\r\n- [Per-Folder Password Protection](#per-folder-password-protection)\r\n- [Encryption Keys](#encryption-keys)\r\n- [Download URL Protection](#download-url-protection)\r\n- [Region & ASN Blocking](#region--asn-blocking)\r\n- [Load Balancing (Multiple Download Domains)](#load-balancing-multiple-download-domains)\r\n- [Themes](#themes)\r\n- [Media Players](#media-players)\r\n- [File Viewers](#file-viewers)\r\n- [Search](#search)\r\n- [Deployment](#deployment)\r\n  - [Via Cloudflare Dashboard (No CLI)](#via-cloudflare-dashboard-no-cli)\r\n  - [Via Wrangler CLI](#via-wrangler-cli)\r\n- [Development Setup](#development-setup)\r\n- [Build Process (CDN Assets)](#build-process-cdn-assets)\r\n- [API Reference](#api-reference)\r\n- [Troubleshooting / FAQ](#troubleshooting--faq)\r\n- [Planned Features](#planned-features)\r\n- [Changelog](#changelog)\r\n- [Credits](#credits)\r\n- [Sponsors](#sponsors)\r\n- [License](#license)\r\n\r\n---\r\n\r\n## Features\r\n\r\n### Core\r\n- **Personal Drive** (My Drive) and **Shared/Team Drive** support\r\n- **Multiple drives** on a single deployment with a unified homepage\r\n- **Auto-discover Shared Drives** in the generator — fetch all drives from your account and add them with one click\r\n- **Serverless** — runs entirely on Cloudflare Workers (free tier supported)\r\n- **No database** required for basic operation\r\n- **Infinite scroll** with paginated file listing\r\n- **Full-text search** across one or all configured drives\r\n- **File ID → path resolution** for bookmarking/sharing files\r\n- **Google Workspace export** — Google Docs, Sheets, and Slides appear in the listing and can be exported to PDF, DOCX/XLSX/PPTX, TXT/CSV\r\n- **Storage quota display** — optional bar showing Drive usage (disabled by default, enable via `show_quota`)\r\n\r\n### Security\r\n- **Username/password login** with encrypted session cookies (AES-CBC + HMAC-SHA256)\r\n- **Google OAuth sign-in** for whitelisted Google accounts\r\n- **Cloudflare KV** user database for dynamic user management\r\n- **Per-folder `.password` file** protection\r\n- **Encrypted, expiring download links** (no direct Google Drive exposure)\r\n- **IP-locked download links** (optional)\r\n- **Single-session enforcement** (optional)\r\n- **IP-change logout** (optional)\r\n- **Region/ASN blocking**\r\n- **Referer-based direct-link protection**\r\n\r\n### UI/UX\r\n- **Dark and Light themes** with auto-detect from system preference\r\n- **Responsive design** — mobile, tablet, desktop\r\n- **Bootstrap 5** with 26+ Bootswatch themes available\r\n- **Breadcrumb navigation**\r\n- **Column sorting** by name, size, modified date\r\n- **Folder filter** (real-time search within current directory)\r\n- **Bulk file selection** and copy links\r\n- **README.md rendering** below file list\r\n- **HEAD.md rendering** above file list\r\n\r\n### Media\r\n- **Video player** — Plyr, Video.js, DPlayer, or JWPlayer\r\n- **Audio player** — APlayer with auto-playlist for audio folders\r\n- **PDF viewer** — PDF.js with page navigation and zoom\r\n- **Image viewer** with lazy loading\r\n- **Code viewer** with syntax-aware display (up to 2 MB)\r\n- **HLS / m3u8 stream** support\r\n\r\n---\r\n\r\n## Architecture Overview\r\n\r\n```\r\nBrowser\r\n  │\r\n  ▼\r\nCloudflare Workers (src/worker.js)\r\n  │  ├─ Serves HTML shell (Bootstrap + app.js)\r\n  │  ├─ POST /{n}:/ ─────────► Google Drive API v3 (files.list)\r\n  │  ├─ POST /{n}:search ────► Google Drive API v3 (files.list with q=)\r\n  │  ├─ GET  /download.aspx ─► Google Drive API v3 (files.get?alt=media or files.export for Workspace)\r\n  │  ├─ GET  /{n}:quota     ─► Google Drive API v3 (about.get?fields=storageQuota)\r\n  │  ├─ GET  /findpath?id=  ─► Cross-drive path lookup + redirect\r\n  │  ├─ GET  /?driveid=     ─► Cross-drive raw ID lookup + redirect\r\n  │  ├─ POST /copy          ─► Google Drive API v3 (files/copy)\r\n  │  └─ Auth: AES-CBC session cookie, HMAC-signed download links\r\n  │\r\n  ▼\r\napp.js (frontend — loaded from jsDelivr CDN)\r\n  │  ├─ Renders file list, breadcrumbs, search\r\n  │  └─ Loads media players on demand\r\n  │\r\n  ▼\r\nGoogle Drive API\r\n```\r\n\r\n**Key design decisions:**\r\n- Worker caches drive initialisation in memory (warm starts are fast)\r\n- File IDs are **encrypted** before being sent to the browser; the browser never sees real Google Drive IDs\r\n- Download links are **HMAC-signed + time-limited** (default 7 days)\r\n- Assets (CSS/JS) are served from **jsDelivr** via the npm package so Worker CPU time is not wasted on static files\r\n\r\n---\r\n\r\n## Prerequisites\r\n\r\n| Requirement | Notes |\r\n|---|---|\r\n| Cloudflare account | Free tier works. Workers free plan: 100k requests/day |\r\n| Google Cloud project | Free. Needed to enable the Drive API |\r\n| OAuth 2.0 credentials **or** a Service Account JSON key | See below |\r\n| Node.js 18+ | Only for local development / CLI deployment |\r\n| `wrangler` CLI | `npm i -g wrangler` — only for CLI deployment |\r\n\r\n---\r\n\r\n## Quick Start\r\n\r\n### Method A: OAuth 2.0 (Personal Drive)\r\n\r\n#### Step 1 — Google Cloud Setup\r\n\r\n1. Go to [Google Cloud Console](https://console.cloud.google.com) → create or select a project\r\n2. **APIs & Services → Enable APIs** → enable **Google Drive API**\r\n3. **APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID**\r\n   - Application type: **Desktop app**\r\n   - Copy the `client_id` and `client_secret`\r\n4. Generate a `refresh_token` by visiting the generator at [bdi-generator.hashhackers.com](https://bdi-generator.hashhackers.com) or running the OAuth flow manually (see [Troubleshooting](#getting-a-refresh-token-manually))\r\n\r\n#### Step 2 — Configure `src/worker.js`\r\n\r\nOpen `src/worker.js` and fill in the top section:\r\n\r\n```js\r\nconst authConfig = {\r\n  \"siteName\":      \"My Drive Index\",\r\n  \"client_id\":     \"123456789-abc.apps.googleusercontent.com\",\r\n  \"client_secret\": \"GOCSPX-xxxxxxxxxxxxxxxxxxxxxxxx\",\r\n  \"refresh_token\": \"1//xxxxxxxxxxxxxxxxxxxxxxxxxxx\",\r\n  \"roots\": [\r\n    { \"id\": \"root\", \"name\": \"My Drive\", \"protect_file_link\": false }\r\n  ]\r\n};\r\n```\r\n\r\nAlso change the encryption keys (see [Encryption Keys](#encryption-keys)):\r\n```js\r\nconst crypto_base_key = \"YOUR_32_CHAR_HEX_KEY\";\r\nconst hmac_base_key   = \"YOUR_64_CHAR_HEX_KEY\";\r\n```\r\n\r\n#### Step 3 — Deploy\r\n\r\n**Option A — Dashboard (no CLI):**\r\n1. Go to [dash.cloudflare.com](https://dash.cloudflare.com) → **Workers & Pages → Create Application → Create Worker**\r\n2. Click **Edit Code**, paste the full contents of `src/worker.js`, click **Save and Deploy**\r\n\r\n**Option B — CLI:**\r\n```bash\r\nnpm install\r\nnpx wrangler deploy\r\n```\r\n\r\n---\r\n\r\n### Method B: Service Account (Shared Drive)\r\n\r\nService accounts are ideal for Shared/Team Drives where you don't want to share an OAuth refresh token.\r\n\r\n1. **Google Cloud Console → IAM & Admin → Service Accounts → Create Service Account**\r\n2. Download the JSON key file\r\n3. In Google Drive, **share the drive/folder** with the service account email (`xxx@project.iam.gserviceaccount.com`) as a **Viewer**\r\n4. Paste the JSON content into `src/worker.js`:\r\n\r\n```js\r\nconst serviceaccounts = [\r\n  {\r\n    \"type\": \"service_account\",\r\n    \"project_id\": \"your-project\",\r\n    \"private_key_id\": \"abc123\",\r\n    \"private_key\": \"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n\",\r\n    \"client_email\": \"your-sa@your-project.iam.gserviceaccount.com\",\r\n    \"client_id\": \"...\",\r\n    \"token_uri\": \"https://oauth2.googleapis.com/token\"\r\n  }\r\n];\r\n```\r\n\r\n5. Set `\"service_account\": true` in `authConfig`\r\n6. Set the shared drive ID in `roots`:\r\n\r\n```js\r\n\"roots\": [\r\n  { \"id\": \"0AOM2i7Mi3uWIUk9PVA\", \"name\": \"Team Drive\", \"protect_file_link\": false }\r\n]\r\n```\r\n\r\n> **Multiple service accounts** — add multiple objects to `serviceaccounts[]`. One is picked at random per request to distribute API quota.\r\n\r\n---\r\n\r\n## Configuration Reference\r\n\r\n### authConfig\r\n\r\n| Key | Type | Default | Description |\r\n|-----|------|---------|-------------|\r\n| `siteName` | string | `\"Google Drive Index\"` | Page title in the browser tab and navbar |\r\n| `client_id` | string | `\"\"` | Google OAuth 2.0 client ID |\r\n| `client_secret` | string | `\"\"` | Google OAuth 2.0 client secret |\r\n| `refresh_token` | string | `\"\"` | OAuth refresh token for accessing the drive |\r\n| `service_account` | bool | `false` | Set `true` to use Service Account auth instead of OAuth |\r\n| `service_account_json` | object | auto | Don't touch — points to the randomly selected service account |\r\n| `files_list_page_size` | number | `100` | Files fetched per API page (max 1000). Higher = fewer API calls but slower first load |\r\n| `search_result_list_page_size` | number | `100` | Search results per API page |\r\n| `enable_cors_file_down` | bool | `false` | Add `Access-Control-Allow-Origin: *` to file downloads |\r\n| `enable_password_file_verify` | bool | `false` | Enable per-folder `.password` file protection |\r\n| `direct_link_protection` | bool | `false` | Block direct download links used without a Referer from your domain |\r\n| `disable_anonymous_download` | bool | `false` | Require login session for all file downloads |\r\n| `file_link_expiry` | number | `7` | Days until a generated download link expires |\r\n| `search_all_drives` | bool | `true` | When `true`, search spans all user drives; `false` restricts to current drive |\r\n| `enable_login` | bool | `false` | Enable the username/password login system |\r\n| `enable_signup` | bool | `false` | Reserved for future signup support |\r\n| `enable_social_login` | bool | `false` | Show Google sign-in button on login page |\r\n| `google_client_id_for_login` | string | `\"\"` | OAuth client ID for Google login (different from drive access) |\r\n| `google_client_secret_for_login` | string | `\"\"` | OAuth client secret for Google login |\r\n| `redirect_domain` | string | `\"\"` | Your worker URL, e.g. `https://index.example.com` — required for Google OAuth login |\r\n| `login_database` | string | `\"Local\"` | `\"Local\"` (in-config users) or `\"KV\"` (Cloudflare KV store) |\r\n| `login_days` | number | `7` | Session duration in days |\r\n| `enable_ip_lock` | bool | `false` | Bind download links to the requesting user's IP address |\r\n| `single_session` | bool | `false` | Only allow one active session per user (uses KV) |\r\n| `ip_changed_action` | bool | `false` | Log out the user if their IP address changes (uses KV) |\r\n| `cors_domain` | string | `\"*\"` | `Access-Control-Allow-Origin` for API responses |\r\n| `users_list` | array | `[{username, password}]` | Local user accounts (only used when `login_database: \"Local\"`) |\r\n| `roots` | array | — | **Required.** List of drives/folders to index (see [Multiple Drives](#multiple-drives)) |\r\n\r\n#### roots array\r\n\r\nEach entry in `roots` describes one drive or folder:\r\n\r\n| Key | Type | Description |\r\n|-----|------|-------------|\r\n| `id` | string | `\"root\"` for My Drive; a Shared Drive ID (from the URL); or a specific folder ID |\r\n| `name` | string | Display name shown in the navbar dropdown and homepage grid |\r\n| `protect_file_link` | bool | If `true` and login is enabled, requires authentication even for direct file downloads |\r\n| `client_id` | string | *(optional)* Per-drive OAuth client ID — overrides global `client_id` |\r\n| `client_secret` | string | *(optional)* Per-drive OAuth client secret — overrides global `client_secret` |\r\n| `refresh_token` | string | *(optional)* Per-drive refresh token — overrides global `refresh_token` |\r\n| `service_account` | bool | *(optional)* Set `true` to use per-drive service account auth |\r\n| `service_account_json` | object | *(optional)* Service account JSON for this drive (instead of global `serviceaccounts[]`) |\r\n\r\nIf none of the per-drive credential keys are present, the drive falls back to the global `client_id`/`client_secret`/`refresh_token` or `serviceaccounts[]`. See [Per-Drive Credentials](#per-drive-credentials) for a full example.\r\n\r\n---\r\n\r\n### uiConfig\r\n\r\n| Key | Type | Default | Description |\r\n|-----|------|---------|-------------|\r\n| `theme` | string | `\"darkly\"` | Bootstrap/Bootswatch theme name. Options: `darkly`, `flatly`, `slate`, `cyborg`, `journal`, `lumen`, `materia`, `minty`, `pulse`, `sandstone`, `simplex`, `sketchy`, `solar`, `spacelab`, `superhero`, `united`, `yeti`, `quartz`, `morph`, `vapor`, `zephyr` |\r\n| `version` | string | `CDN_VERSION` | Set automatically by build script — used for npm CDN asset versioning |\r\n| `debug_mode` | bool | `false` | Show a debug panel in the page footer with live API request logs, error traces, and page info. Useful during development; disable for production. |\r\n| `logo_image` | bool | `true` | `true` = use an image URL for the logo; `false` = use plain text |\r\n| `logo_height` | string | `\"\"` | CSS height of the logo image (e.g. `\"30px\"`) |\r\n| `logo_width` | string | `\"100px\"` | CSS width of the logo image |\r\n| `favicon` | string | CDN URL | URL to the favicon |\r\n| `logo_link_name` | string | CDN SVG URL | If `logo_image: true`, the image URL; if `false`, the text to show |\r\n| `fixed_header` | bool | `true` | Keep the navbar fixed at the top while scrolling |\r\n| `header_padding` | string | `\"80\"` | Top padding for page content (pixels). Use `80` with fixed header, `20` otherwise |\r\n| `nav_link_1` | string | `\"Home\"` | Unused navigation label (reserved) |\r\n| `nav_link_3` | string | `\"Current Path\"` | Unused navigation label (reserved) |\r\n| `nav_link_4` | string | `\"Contact\"` | Unused navigation label (reserved) |\r\n| `fixed_footer` | bool | `false` | Fix footer to the bottom of the viewport |\r\n| `hide_footer` | bool | `true` | Completely hide the footer |\r\n| `header_style_class` | string | `\"navbar-dark bg-primary\"` | Bootstrap classes for the navbar background |\r\n| `footer_style_class` | string | `\"bg-primary\"` | Bootstrap classes for the footer background |\r\n| `css_a_tag_color` | string | `\"white\"` | Link colour in the navbar |\r\n| `css_p_tag_color` | string | `\"white\"` | Paragraph colour in the navbar |\r\n| `folder_text_color` | string | `\"white\"` | Folder name colour in listings |\r\n| `loading_spinner_class` | string | `\"text-light\"` | Bootstrap colour class for the loading spinner |\r\n| `search_button_class` | string | `\"btn btn-danger\"` | Bootstrap classes for the search submit button |\r\n| `path_nav_alert_class` | string | `\"alert alert-primary\"` | Bootstrap classes for the path alert box |\r\n| `file_view_alert_class` | string | `\"alert alert-danger\"` | Bootstrap classes for file view alerts |\r\n| `file_count_alert_class` | string | `\"alert alert-secondary\"` | Bootstrap classes for the item count bar |\r\n| `contact_link` | string | Telegram URL | URL for the contact button in the navbar |\r\n| `copyright_year` | number | auto | Current year — auto-detected, do not change |\r\n| `company_name` | string | `\"The Bay Index\"` | Name shown in the footer copyright |\r\n| `company_link` | string | Telegram URL | URL for the footer company name |\r\n| `credit` | bool | `true` | Show \"Redesigned by...\" credit in footer |\r\n| `display_size` | bool | `true` | Show file sizes in the listing |\r\n| `display_time` | bool | `false` | Show file modification timestamps in the listing |\r\n| `display_download` | bool | `true` | Show download icon next to each file in the listing |\r\n| `disable_player` | bool | `false` | Disable all in-browser media players; files open/download directly |\r\n| `disable_video_download` | bool | `false` | Hide download and copy buttons in the video player view |\r\n| `allow_selecting_files` | bool | `true` | Enable checkboxes for bulk file selection / link copying |\r\n| `second_domain_for_dl` | bool | `false` | Route all downloads through a secondary Worker domain (see [Load Balancing](#load-balancing-multiple-download-domains)) |\r\n| `poster` | string | CDN URL | Default video poster/thumbnail image URL |\r\n| `audioposter` | string | CDN URL | Default audio cover art image URL |\r\n| `disable_audio_download` | bool | `false` | Hide the download button in the audio player |\r\n| `jsdelivr_cdn_src` | string | jsDelivr URL | Base CDN URL for assets — change only if self-hosting |\r\n| `render_head_md` | bool | `true` | Render `HEAD.md` as HTML above the file listing |\r\n| `render_readme_md` | bool | `true` | Render `README.md` as HTML below the file listing |\r\n| `unauthorized_owner_link` | string | Telegram URL | Link shown on unauthorised error pages |\r\n| `unauthorized_owner_email` | string | abuse email | Email shown on unauthorised error pages |\r\n| `downloaddomain` | string | auto | Set by `domain_for_dl` — do not change here |\r\n| `show_logout_button` | bool | auto | Auto-set to `true` when `enable_login` is `true` |\r\n| `show_quota` | bool | `false` | Show a storage usage bar below the nav. Fetches quota via `/{n}:quota` on page load. Disabled by default. |\r\n\r\n---\r\n\r\n### player_config\r\n\r\n| Key | Type | Default | Description |\r\n|-----|------|---------|-------------|\r\n| `player` | string | `\"videojs\"` | Video player engine: `\"videojs\"`, `\"plyr\"`, `\"dplayer\"`, `\"jwplayer\"` |\r\n| `videojs_version` | string | `\"8.12.0\"` | Video.js CDN version to load |\r\n| `plyr_io_version` | string | `\"3.7.8\"` | Plyr CDN version to load |\r\n| `jwplayer_version` | string | `\"8.16.2\"` | JWPlayer version (requires a valid JWPlayer license) |\r\n\r\n---\r\n\r\n## Multiple Drives\r\n\r\nAdd one entry per drive/folder to the `roots` array. Each gets its own numbered path (`/0:/`, `/1:/`, etc.) and appears as a tile on the homepage.\r\n\r\n```js\r\n\"roots\": [\r\n  {\r\n    \"id\": \"root\",\r\n    \"name\": \"Personal Drive\",\r\n    \"protect_file_link\": false\r\n  },\r\n  {\r\n    \"id\": \"0AOM2i7Mi3uWIUk9PVA\",\r\n    \"name\": \"Team Shared Drive\",\r\n    \"protect_file_link\": false\r\n  },\r\n  {\r\n    \"id\": \"1A2B3C4D5E6F7G8H9I0J1K2L3M\",\r\n    \"name\": \"Archive (Login Required)\",\r\n    \"protect_file_link\": true\r\n  }\r\n]\r\n```\r\n\r\n> **Finding a Drive ID:**\r\n> - **My Drive:** Use `\"root\"`\r\n> - **Shared Drive:** Open in Google Drive → the URL contains `.../drive/folders/DRIVE_ID`\r\n> - **Specific Folder:** Open the folder → copy the ID from the URL `...folders/FOLDER_ID`\r\n>\r\n> **Note:** Folder IDs (not Shared Drive IDs) will not have search working correctly — Google's API only supports full-drive search, not folder-scoped search without a driveId.\r\n\r\n---\r\n\r\n## Per-Drive Credentials\r\n\r\nEach entry in the `roots` array can have its own OAuth or service account credentials. When per-drive credentials are present, that drive uses them independently — no shared token, no quota collision.\r\n\r\nIf a drive does not have its own credentials, it falls back to the global `client_id` / `client_secret` / `refresh_token` (or the randomly selected `serviceaccounts[]` entry).\r\n\r\n```js\r\n\"roots\": [\r\n  {\r\n    \"id\": \"root\",\r\n    \"name\": \"Personal Drive\",\r\n    \"protect_file_link\": false\r\n    // No per-drive creds → uses global OAuth credentials\r\n  },\r\n  {\r\n    \"id\": \"0ABCDEFGabcdefg\",\r\n    \"name\": \"Company Shared Drive\",\r\n    \"protect_file_link\": false,\r\n    // Per-drive OAuth credentials\r\n    \"client_id\":     \"company-client-id.apps.googleusercontent.com\",\r\n    \"client_secret\": \"GOCSPX-company-secret\",\r\n    \"refresh_token\": \"1//company-refresh-token\"\r\n  },\r\n  {\r\n    \"id\": \"0XYZxyzXYZxyz\",\r\n    \"name\": \"Archive (Service Account)\",\r\n    \"protect_file_link\": true,\r\n    // Per-drive service account\r\n    \"service_account\": true,\r\n    \"service_account_json\": {\r\n      \"type\": \"service_account\",\r\n      \"project_id\": \"archive-project\",\r\n      \"private_key_id\": \"abc123\",\r\n      \"private_key\": \"-----BEGIN PRIVATE KEY-----\\n...\\n-----END PRIVATE KEY-----\\n\",\r\n      \"client_email\": \"archive-sa@archive-project.iam.gserviceaccount.com\",\r\n      \"client_id\": \"...\",\r\n      \"token_uri\": \"https://oauth2.googleapis.com/token\"\r\n    }\r\n  }\r\n]\r\n```\r\n\r\n**How it works internally:**\r\n- Each `googleDrive` instance checks its own `root` config for credentials on every token refresh\r\n- Tokens are cached per-drive instance with a 58-minute TTL (slightly under Google's 60-minute expiry)\r\n- If per-drive creds are missing or incomplete, the global `getAccessToken()` is called as the fallback\r\n\r\n---\r\n\r\n## Cross-Drive ID Lookup\r\n\r\nGDI can automatically find a file or folder by its raw Google Drive ID across all configured drives, without you needing to know which drive it belongs to.\r\n\r\n### `GET /?driveid=GOOGLE_DRIVE_ID`\r\n\r\nSearches all configured drives for the given ID and redirects to the file's path in the index.\r\n\r\n```\r\nhttps://your-index.workers.dev/?driveid=1PivBPUBk8Nz6kpQIuJFfa8VeiqQJHoxn\r\nhttps://your-index.workers.dev/?driveid=1PivBPUBk8Nz6kpQIuJFfa8VeiqQJHoxn&view=true\r\n```\r\n\r\n| Parameter | Required | Description |\r\n|-----------|----------|-------------|\r\n| `driveid` | Yes | A raw (unencrypted) Google Drive file or folder ID |\r\n| `view` | No | Set to `true` to open in viewer mode (`?a=view`) |\r\n\r\n**Redirect flow:**\r\n1. Tries `findPathById()` on each configured drive in order\r\n2. If found → `302` redirect to `/{driveIndex}:/path/to/item`\r\n3. If not in any drive hierarchy but credentials can access it → `302` redirect to `/fallback?id=...`\r\n4. If not found anywhere → `404` JSON error\r\n\r\n### `GET /findpath?id=GOOGLE_DRIVE_ID`\r\n\r\nSame cross-drive search as above but designed for external integrations (used by other apps to resolve a raw Drive ID into a browseable URL).\r\n\r\n```\r\nhttps://your-index.workers.dev/findpath?id=1PivBPUBk8Nz6kpQIuJFfa8VeiqQJHoxn\r\nhttps://your-index.workers.dev/findpath?id=1PivBPUBk8Nz6kpQIuJFfa8VeiqQJHoxn&view=true\r\n```\r\n\r\nRedirect behavior is identical to `/?driveid=` above.\r\n\r\n### `GET /{driveIndex}:findpath?id=GOOGLE_DRIVE_ID`\r\n\r\nLike `/findpath` but starts with a specific drive, then falls through to all others if not found.\r\n\r\n```\r\nhttps://your-index.workers.dev/1:findpath?id=1PivBPUBk8Nz6kpQIuJFfa8VeiqQJHoxn\r\n```\r\n\r\nUseful when you know the file is likely in drive 1 but want automatic fallback to other drives.\r\n\r\n---\r\n\r\n## Service Account Setup\r\n\r\nService accounts allow you to serve a Shared Drive without an OAuth refresh token. This is ideal for public indexes or team deployments.\r\n\r\n### Step-by-step\r\n\r\n1. **Google Cloud Console → IAM & Admin → Service Accounts → Create Service Account**\r\n   - Give it a name and click through\r\n2. Click the new service account → **Keys → Add Key → Create new key → JSON**\r\n3. Download the `.json` file\r\n4. **Share the Google Drive/folder** with the service account's email address (shown in the JSON as `client_email`) — grant it **Viewer** access\r\n5. Paste the JSON into `serviceaccounts`:\r\n\r\n```js\r\nconst serviceaccounts = [\r\n  {\r\n    \"type\": \"service_account\",\r\n    \"project_id\": \"my-project-123\",\r\n    \"private_key_id\": \"abc123def456\",\r\n    \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEvg...\\n-----END PRIVATE KEY-----\\n\",\r\n    \"client_email\": \"gdi-reader@my-project-123.iam.gserviceaccount.com\",\r\n    \"client_id\": \"123456789012345678901\",\r\n    \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\r\n    \"token_uri\": \"https://oauth2.googleapis.com/token\"\r\n  }\r\n];\r\n```\r\n\r\n6. In `authConfig`, set:\r\n```js\r\n\"service_account\": true,\r\n```\r\n\r\n### Multiple Service Accounts (Load Balancing)\r\n\r\nAdd multiple service account objects to the array. One is selected randomly on each worker cold-start, distributing API quota across accounts:\r\n\r\n```js\r\nconst serviceaccounts = [\r\n  { /* service account 1 */ },\r\n  { /* service account 2 */ },\r\n  { /* service account 3 */ }\r\n];\r\n```\r\n\r\n---\r\n\r\n## Login & Authentication\r\n\r\nSet `\"enable_login\": true` in `authConfig` to protect the entire index. Users must log in to browse files.\r\n\r\n### Local Username/Password\r\n\r\nThe simplest setup — credentials stored directly in `worker.js`:\r\n\r\n```js\r\n\"login_database\": \"Local\",\r\n\"users_list\": [\r\n  { \"username\": \"alice\", \"password\": \"securePassword1!\" },\r\n  { \"username\": \"bob\",   \"password\": \"anotherPassword2@\" }\r\n]\r\n```\r\n\r\n> **Security:** Change these from the defaults before deploying. Consider using the KV database for production so credentials are not visible in source code.\r\n\r\n### Google OAuth Login (Social)\r\n\r\nAllow users to sign in with their Google account. Only Google accounts listed in `users_list` (by email) or present in KV are granted access.\r\n\r\n#### Setup\r\n\r\n1. In Google Cloud Console → **Credentials → Create OAuth 2.0 Client ID**\r\n   - Application type: **Web application**\r\n   - Authorised redirect URIs: `https://your-worker.workers.dev/google_callback`\r\n2. Configure `authConfig`:\r\n\r\n```js\r\n\"enable_social_login\": true,\r\n\"google_client_id_for_login\": \"123456789-abc.apps.googleusercontent.com\",\r\n\"google_client_secret_for_login\": \"GOCSPX-xxxxxxxxxxxxxxxxx\",\r\n\"redirect_domain\": \"https://your-worker.workers.dev\",\r\n\"login_database\": \"Local\",\r\n\"users_list\": [\r\n  { \"username\": \"alice@gmail.com\", \"password\": \"\" }\r\n]\r\n```\r\n\r\nWhen using Google login with the Local database, the `username` field must be the user's **full Google email address**. The `password` field is ignored for OAuth users.\r\n\r\n### Cloudflare KV User Database\r\n\r\nFor dynamic user management without redeploying the worker, use Cloudflare KV.\r\n\r\n#### Setup\r\n\r\n1. In Cloudflare Dashboard → **Workers & Pages → KV → Create a namespace** (e.g. `GDI_USERS`)\r\n2. In your `wrangler.toml`:\r\n\r\n```toml\r\nkv_namespaces = [\r\n  { binding = \"ENV\", id = \"your-kv-namespace-id\" }\r\n]\r\n```\r\n\r\n3. Set in `authConfig`:\r\n```js\r\n\"login_database\": \"KV\"\r\n```\r\n\r\n4. Add users via Cloudflare Dashboard → KV → your namespace → **Add entry**:\r\n   - Key: `username` (or email for Google OAuth)\r\n   - Value: `password` (plaintext — KV is encrypted at rest)\r\n\r\n5. For single-session and IP-lock features, the same KV namespace is also used to store session tokens and IP addresses.\r\n\r\n### Session Security Options\r\n\r\n| Option | Config Key | Description |\r\n|--------|-----------|-------------|\r\n| Session duration | `login_days: 7` | How many days before the session cookie expires |\r\n| Single session | `single_session: true` | Logging in on a second device invalidates the first session. Requires KV. |\r\n| IP change logout | `ip_changed_action: true` | If the user's IP changes after login, they are automatically logged out. Requires KV. |\r\n| IP-locked downloads | `enable_ip_lock: true` | Download links are bound to the IP that generated them. |\r\n\r\n---\r\n\r\n## Per-Folder Password Protection\r\n\r\nYou can password-protect any subfolder without enabling the full login system.\r\n\r\n1. Set `\"enable_password_file_verify\": true` in `authConfig`\r\n2. Create a file named `.password` inside the Google Drive folder you want to protect\r\n3. Set the file contents to your desired password (plain text, one password per file)\r\n\r\nThe `.password` file is never shown in the listing and its contents are never exposed to the browser. Users are prompted to enter the password when they first open the folder — it is cached in `localStorage` for convenience.\r\n\r\n> **Note:** This feature is currently in preview. It protects the listing but not direct download links if `protect_file_link` is `false`.\r\n\r\n---\r\n\r\n## Encryption Keys\r\n\r\nGDI encrypts session cookies and download links using AES-CBC + HMAC-SHA256. The default keys in the source code are **public and must be changed before deploying**.\r\n\r\n**Generate random keys:**\r\n\r\n```bash\r\n# 32-byte AES key (64 hex characters)\r\nnode -e \"console.log(require('crypto').randomBytes(32).toString('hex'))\"\r\n\r\n# 64-byte HMAC key (128 hex characters)  \r\nnode -e \"console.log(require('crypto').randomBytes(64).toString('hex'))\"\r\n```\r\n\r\nThen set them in `src/worker.js`:\r\n\r\n```js\r\nconst crypto_base_key = \"a1b2c3d4e5f6...\";  // 64 hex chars\r\nconst hmac_base_key   = \"f6e5d4c3b2a1...\";  // 128 hex chars\r\n```\r\n\r\nOr generate them directly in the browser console:\r\n\r\n```js\r\n// AES key\r\ncrypto.getRandomValues(new Uint8Array(32)).reduce((h,b)=>h+b.toString(16).padStart(2,'0'),'')\r\n\r\n// HMAC key\r\ncrypto.getRandomValues(new Uint8Array(64)).reduce((h,b)=>h+b.toString(16).padStart(2,'0'),'')\r\n```\r\n\r\n> **Legacy links:** GDI v2.4.0+ uses a random IV prepended to each ciphertext. A static fallback IV (`legacy_encrypt_iv`) is kept for backward-compatible decryption of links generated before v2.4.0. Do not change `legacy_encrypt_iv`.\r\n\r\n---\r\n\r\n## Download URL Protection\r\n\r\nAll download links go through `/download.aspx` with the following protections:\r\n\r\n- **Encrypted file ID** — the real Google Drive file ID is never exposed\r\n- **Expiring links** — links expire after `file_link_expiry` days (default: 7)\r\n- **HMAC integrity** — prevents link tampering (changing the file ID or expiry)\r\n- **IP lock** (optional) — the link is only valid from the IP that generated it\r\n- **Login required** (optional) — `disable_anonymous_download: true` blocks all downloads without a session\r\n\r\n### How a download link works\r\n\r\n```\r\n/download.aspx\r\n  ?file=<AES-encrypted file ID>\r\n  &expiry=<AES-encrypted Unix ms timestamp>\r\n  &mac=<HMAC-SHA256 of \"fileId|expiry\" or \"fileId|expiry|ip\">\r\n  [&ip=<AES-encrypted IP>]        ← only when enable_ip_lock is true\r\n  [&inline=true]                   ← serve inline instead of as attachment\r\n```\r\n\r\nThe worker decrypts the file ID, verifies the MAC, checks the expiry, then streams from Google Drive's API directly to the client.\r\n\r\n---\r\n\r\n## Region & ASN Blocking\r\n\r\nBlock access from specific countries or autonomous systems (data centres, VPNs, etc.).\r\n\r\n```js\r\n// Block by country code (ISO 3166-1 alpha-2)\r\nconst blocked_region = ['CN', 'RU', 'KP'];\r\n\r\n// Block by ASN number — see bgplookingglass.com for ASN lists\r\nconst blocked_asn = [16509, 14618];  // Example: AWS ASNs\r\n```\r\n\r\nBlocked visitors receive a plain \"Access Denied\" HTML response (status 403).\r\n\r\n---\r\n\r\n## Load Balancing (Multiple Download Domains)\r\n\r\nYou can distribute download traffic across multiple Cloudflare Worker deployments.\r\n\r\n```js\r\nconst domains_for_dl = [\r\n  'https://dl1.yourworker.workers.dev',\r\n  'https://dl2.yourworker.workers.dev',\r\n  'https://dl3.yourworker.workers.dev'\r\n];\r\n```\r\n\r\nIn `uiConfig`:\r\n```js\r\n\"second_domain_for_dl\": true\r\n```\r\n\r\nEach domain must be a separate Cloudflare Worker deployment of `worker.js` (can be the same code). One is picked randomly per request.\r\n\r\n> **Warning:** When `second_domain_for_dl` is `true`, the worker serves `disable_download.html` for direct download requests. Downloads are served exclusively through the secondary domain list.\r\n\r\n---\r\n\r\n## Themes\r\n\r\nGDI uses [Bootswatch](https://bootswatch.com) themes on top of Bootstrap 5. Set the `theme` key in `uiConfig`:\r\n\r\n```js\r\n\"theme\": \"darkly\"   // dark theme (default)\r\n\"theme\": \"flatly\"   // clean light theme\r\n\"theme\": \"cyborg\"   // high-contrast dark\r\n\"theme\": \"vapor\"    // neon dark\r\n\"theme\": \"quartz\"   // glassmorphism light\r\n```\r\n\r\nThe user can also toggle dark/light mode manually via the moon/sun icon in the navbar. Their preference is saved in `localStorage`.\r\n\r\n**Available themes:**\r\n`cerulean` · `cosmo` · `cyborg` · `darkly` · `flatly` · `journal` · `litera` · `lumen` · `lux` · `materia` · `minty` · `morph` · `pulse` · `quartz` · `sandstone` · `simplex` · `sketchy` · `slate` · `solar` · `spacelab` · `superhero` · `united` · `vapor` · `yeti` · `zephyr`\r\n\r\n---\r\n\r\n## Media Players\r\n\r\n### Video\r\n\r\nConfigure the player engine in `player_config`:\r\n\r\n```js\r\nconst player_config = {\r\n  \"player\": \"videojs\"   // \"videojs\" | \"plyr\" | \"dplayer\" | \"jwplayer\"\r\n};\r\n```\r\n\r\n| Player | HLS support | Keyboard shortcuts | Notes |\r\n|--------|------------|-------------------|-------|\r\n| `videojs` | Yes | Space/F/M/←/→/↑/↓ | Default. Best all-round |\r\n| `plyr` | Yes (with plugin) | Yes | Minimal, beautiful UI |\r\n| `dplayer` | Yes | Yes | Danmu/comment support |\r\n| `jwplayer` | Yes | Yes | Commercial licence required |\r\n\r\n**Supported formats:** MP4, WebM, AVI, MKV, MOV, FLV, TS, 3GP, M4V, RMVB, and more.\r\n\r\nTo disable all players and serve files directly: `\"disable_player\": true`\r\n\r\n### Audio\r\n\r\nUses **APlayer** (auto-loaded). When opening a single audio file, GDI automatically fetches the folder's other audio files and builds a playlist.\r\n\r\n**Supported formats:** MP3, FLAC, WAV, OGG, M4A, AAC, WMA, ALAC\r\n\r\nTo hide the download button on audio: `\"disable_audio_download\": true`\r\n\r\n### PDF\r\n\r\nUses **PDF.js** (auto-loaded). Features:\r\n- Page-by-page navigation with Previous/Next buttons\r\n- Zoom slider (50%–200%)\r\n- Full download button\r\n\r\n### Images\r\n\r\nDirect `<img>` display with lazy loading. Supported: JPG, JPEG, PNG, GIF, BMP, SVG, TIFF, ICO.\r\n\r\n### Code / Text\r\n\r\nIn-browser code display for files up to **2 MB**. Supported: PHP, CSS, Go, Java, JS, JSON, TXT, SH, MD, HTML, XML, Python, Ruby, C, C++, H, HPP.\r\n\r\n---\r\n\r\n## Search\r\n\r\nType in the search box to search across your drives.\r\n\r\n- **Current drive only:** Set `\"search_all_drives\": false` in `authConfig`\r\n- **All drives:** Set `\"search_all_drives\": true` (default)\r\n- Results show in an infinite-scroll list with folder/file icons\r\n- Clicking a folder or file in search results opens a modal with a direct link to the item's path (resolved via the Google Drive API)\r\n- If path resolution fails, a `/fallback?id=...` link is shown which always works\r\n\r\n**Search limitations:**\r\n- Folder IDs (as opposed to Shared Drive IDs) do not support drive-scoped search via the Google API — search will fall back to user/all drives\r\n- Special characters `\" ' = < > / \\ :` are stripped from queries\r\n\r\n---\r\n\r\n## Deployment\r\n\r\n### Via Cloudflare Dashboard (No CLI)\r\n\r\n1. Go to [dash.cloudflare.com](https://dash.cloudflare.com)\r\n2. **Workers & Pages → Create Application → Create Worker**\r\n3. Click **Edit Code** (or paste via the online editor)\r\n4. Paste the full contents of `src/worker.js`\r\n5. Click **Save and Deploy**\r\n6. Visit your worker URL (e.g. `https://your-worker.your-subdomain.workers.dev`)\r\n\r\n### Via Wrangler CLI\r\n\r\n```bash\r\n# Install dependencies\r\nnpm install\r\n\r\n# Login to Cloudflare\r\nnpx wrangler login\r\n\r\n# Deploy\r\nnpm run deploy\r\n# or\r\nnpx wrangler deploy src/worker.js --name my-drive-index --compatibility-date 2024-01-01\r\n```\r\n\r\n**Custom domain:**\r\n\r\nIn Cloudflare Dashboard → **Workers & Pages → your worker → Custom Domains → Add Custom Domain** — point any domain/subdomain in your Cloudflare DNS.\r\n\r\n### Environment: `production` vs `development` vs `local`\r\n\r\n```js\r\nconst environment = 'production';   // Loads assets from jsDelivr CDN\r\n// const environment = 'development'; // Loads from /src/app.min.js (local wrangler dev)\r\n// const environment = 'local';       // Loads from http://127.0.0.1:5500/src/app.js (live reload)\r\n```\r\n\r\n---\r\n\r\n## Development Setup\r\n\r\n### Prerequisites\r\n\r\n```bash\r\nnode --version   # 18+\r\nnpm --version    # 8+\r\n```\r\n\r\n### Install and Run\r\n\r\n```bash\r\ngit clone https://gitlab.com/GoogleDriveIndex/Google-Drive-Index.git\r\ncd Google-Drive-Index\r\nnpm install\r\n\r\n# Start local dev server (hot-reload for worker, static for assets)\r\nnpm run dev\r\n```\r\n\r\nThe dev server runs on `http://localhost:8787` by default.\r\n\r\n### Code Quality\r\n\r\n```bash\r\nnpm run lint        # Check with ESLint\r\nnpm run lint:fix    # Auto-fix lint errors\r\nnpm run format      # Format with Prettier\r\nnpm run typecheck   # TypeScript type-check (no emit)\r\n```\r\n\r\n### Local Asset Development\r\n\r\nFor faster frontend iteration, set `environment = 'local'` in `worker.js` and open `src/app.js` with a live-reload server (e.g. VS Code Live Server on port 5500).\r\n\r\n---\r\n\r\n## Build Process (CDN Assets)\r\n\r\nGDI's frontend assets (CSS, JS, images) are bundled inside the npm package and served from [jsDelivr](https://www.jsdelivr.com/) via the npm CDN:\r\n\r\n```\r\nhttps://cdn.jsdelivr.net/npm/@googledrive/index@{version}/\r\n```\r\n\r\nAll static files (`src/app.min.js`, `assets/gdi.min.css`, `assets/homepage.min.js`, `images/`, `sw.js`) live in this repo and are published to npm with each release. No separate CDN repository is needed.\r\n\r\nTo build and release:\r\n\r\n```bash\r\nnpm run build    # Patch CDN_VERSION, minify JS/CSS, output built files into repo\r\ngit add src/app.min.js assets/gdi.min.css assets/homepage.min.js sw.js\r\ngit commit -m \"Release v2.5.7\"\r\ngit tag v2.5.7 && git push && git push --tags\r\nnpm publish --access public\r\n```\r\n\r\n**What `npm run build` does:**\r\n1. Reads version from `package.json` and patches `CDN_VERSION` in `src/worker.js` and `GDI_VERSION` in `generator/worker.js`\r\n2. Minifies `src/app.js` → `src/app.min.js` using esbuild\r\n3. Minifies `assets/homepage.js` → `assets/homepage.min.js`\r\n4. Minifies `assets/gdi.css` → `assets/gdi.min.css`\r\n\r\nAfter publishing, jsDelivr picks up the new version within minutes — no tag propagation delay.\r\n\r\n---\r\n\r\n## API Reference\r\n\r\nThese are the internal POST/GET API endpoints the frontend uses. All paths are relative to your worker URL.\r\n\r\n### `POST /{driveIndex}:/path/to/folder/`\r\nFetch file listing for a directory.\r\n\r\n**Request body (JSON):**\r\n```json\r\n{\r\n  \"id\": \"\",\r\n  \"type\": \"folder\",\r\n  \"password\": \"\",\r\n  \"page_token\": \"\",\r\n  \"page_index\": 0\r\n}\r\n```\r\n\r\n**Response (JSON):**\r\n```json\r\n{\r\n  \"nextPageToken\": \"token_or_null\",\r\n  \"curPageIndex\": 0,\r\n  \"data\": {\r\n    \"files\": [\r\n      {\r\n        \"id\": \"<encrypted>\",\r\n        \"name\": \"file.mp4\",\r\n        \"mimeType\": \"video/mp4\",\r\n        \"size\": \"104857600\",\r\n        \"modifiedTime\": \"2024-01-15T10:30:00.000Z\",\r\n        \"fileExtension\": \"mp4\",\r\n        \"driveId\": \"<encrypted>\",\r\n        \"link\": \"/download.aspx?file=...&expiry=...&mac=...\"\r\n      }\r\n    ]\r\n  }\r\n}\r\n```\r\n\r\n### `POST /{driveIndex}:search`\r\nFull-text search.\r\n\r\n**Request body (JSON):**\r\n```json\r\n{ \"q\": \"search terms\", \"page_token\": null, \"page_index\": 0 }\r\n```\r\n\r\n**Response:** Same structure as file listing.\r\n\r\n### `POST /{driveIndex}:id2path`\r\nResolve an encrypted file/folder ID to its path.\r\n\r\n**Request body (JSON):**\r\n```json\r\n{ \"id\": \"<encrypted file ID>\" }\r\n```\r\n\r\n**Response (JSON):**\r\n```json\r\n{ \"path\": \"/0:/folder/subfolder/file.mp4\" }\r\n```\r\n\r\n### `GET /download.aspx`\r\nStream or download a file. For Google Workspace files, uses the Drive export API automatically.\r\n\r\n| Parameter | Description |\r\n|-----------|-------------|\r\n| `file` | AES-encrypted file ID |\r\n| `expiry` | AES-encrypted Unix ms expiry timestamp |\r\n| `mac` | HMAC-SHA256 integrity token |\r\n| `ip` | AES-encrypted IP (only when `enable_ip_lock: true`) |\r\n| `inline` | `\"true\"` to serve inline instead of as attachment |\r\n| `fmt` | Export format extension for Google Workspace files: `pdf`, `docx`, `txt` (Docs), `xlsx`, `csv` (Sheets), `pptx` (Slides). Defaults to `pdf` if omitted. |\r\n\r\n### `GET /{driveIndex}:quota`\r\nReturns storage quota for the drive's Google account. Requires `show_quota: true` in `uiConfig` to be surfaced in the UI (but the endpoint is always available).\r\n\r\n**Response (JSON):**\r\n```json\r\n{\r\n  \"user\": { \"displayName\": \"...\", \"emailAddress\": \"...\" },\r\n  \"storageQuota\": {\r\n    \"limit\": \"16106127360\",\r\n    \"usage\": \"4831838208\",\r\n    \"usageInDrive\": \"1234567890\",\r\n    \"usageInDriveTrash\": \"0\"\r\n  }\r\n}\r\n```\r\n\r\n### `POST /login`\r\nAuthenticate with username/password.\r\n\r\n**Request body:** `application/x-www-form-urlencoded` with `username` and `password`.\r\n\r\n**Response (JSON):**\r\n```json\r\n{ \"ok\": true, \"redirect\": \"/\" }\r\n// or\r\n{ \"ok\": false, \"message\": \"Invalid username or password.\" }\r\n```\r\n\r\n### `GET /logout`\r\nClears the session cookie and redirects to `/login`.\r\n\r\n### `GET /google_callback`\r\nOAuth callback handler. Exchanges the Google authorization code for an ID token, validates the email against the user list, and sets a session cookie.\r\n\r\n### `GET /findpath`\r\nCross-drive file/folder lookup by raw Google Drive ID. Searches all configured drives and redirects to the resolved path.\r\n\r\n| Parameter | Required | Description |\r\n|-----------|----------|-------------|\r\n| `id` | Yes | Raw (unencrypted) Google Drive file or folder ID |\r\n| `view` | No | `\"true\"` to redirect to viewer mode |\r\n\r\n**Response:** `302` redirect to `/{driveIndex}:/path` (found in drive), `302` to `/fallback?id=...` (accessible via credentials but not in any drive root), or `404` JSON if not found anywhere.\r\n\r\n### `GET /{driveIndex}:findpath`\r\nSame as `/findpath` but starts the search from a specific drive index. Falls through to all other drives if not found in the specified one.\r\n\r\n| Parameter | Required | Description |\r\n|-----------|----------|-------------|\r\n| `id` | Yes | Raw (unencrypted) Google Drive file or folder ID |\r\n| `view` | No | `\"true\"` to redirect to viewer mode |\r\n\r\n### `GET /?driveid=`\r\nCross-drive lookup starting from the homepage. See [Cross-Drive ID Lookup](#cross-drive-id-lookup).\r\n\r\n### `POST /{driveIndex}:fallback`\r\nResolve an encrypted file/folder ID from an external source (used by the fallback page to show files/folders that are accessible via credentials but are not rooted in any configured drive).\r\n\r\n**Request body (JSON):**\r\n```json\r\n{ \"id\": \"<encrypted ID>\", \"type\": \"folder\", \"page_token\": null, \"page_index\": 0 }\r\n```\r\n- Omit `\"type\"` (or set to any non-`\"folder\"` value) to look up a single file\r\n- Include `\"type\": \"folder\"` to list a folder's contents\r\n\r\n**Response:** File metadata JSON (single file) or listing JSON (folder).\r\n\r\n### `GET /{driveIndex}:findpath` → `POST /{driveIndex}:id2path`\r\nInternal pair used by the search result modal to resolve encrypted IDs to paths.\r\n\r\n`id2path` takes `{ \"id\": \"<encrypted>\" }` and returns `{ \"path\": \"/0:/folder/file.mp4\" }` or `{ \"path\": null }` (404) if not resolvable.\r\n\r\n### `POST /copy`\r\nCopy a file within Google Drive.\r\n\r\n**Request body:** `application/x-www-form-urlencoded`\r\n\r\n| Field | Description |\r\n|-------|-------------|\r\n| `id` | Encrypted file ID (as returned by the listing API) |\r\n| `root_id` | Raw Google Drive folder ID where the copy should be placed |\r\n\r\n**Response (JSON):** The created file metadata from the Google Drive API, or an error object.\r\n\r\n### `GET /sw.js`\r\nServes the service worker script for offline support (fetched from CDN). Non-critical — browsing continues normally if this fails.\r\n\r\n---\r\n\r\n## Troubleshooting / FAQ\r\n\r\n### Getting a Refresh Token Manually\r\n\r\nIf the generator tool is unavailable, get a refresh token manually:\r\n\r\n1. In Google Cloud Console, create an OAuth 2.0 Web App credential\r\n2. Set the redirect URI to `https://developers.google.com/oauthplayground`\r\n3. Go to [OAuth Playground](https://developers.google.com/oauthplayground)\r\n4. Click the settings gear → check \"Use your own OAuth credentials\" → enter your client ID and secret\r\n5. In Step 1, select `https://www.googleapis.com/auth/drive` → Authorize\r\n6. In Step 2, click \"Exchange authorization code for tokens\"\r\n7. Copy the `refresh_token` value\r\n\r\n### \"Invalid Request!\" on downloads\r\n\r\nThe download link has either expired, been tampered with, or your IP has changed (if `enable_ip_lock` is enabled). Generate a new link by refreshing the file listing page.\r\n\r\n### Files not showing up\r\n\r\n- Verify the drive ID is correct and the account/service account has been granted access\r\n- Google Docs, Sheets, and Slides now appear in the listing and can be exported to PDF/DOCX/XLSX/PPTX/TXT/CSV. Google Forms and Sites are still excluded (cannot be exported via the Drive API).\r\n- Check if `.password` file protection is enabled and a password is set on the folder\r\n\r\n### Search not working with a Folder ID\r\n\r\nIf you set a folder ID (not a Shared Drive ID) in `roots`, the Google Drive API does not support drive-scoped search for regular folders. Use `\"search_all_drives\": true` or set a proper Shared Drive ID.\r\n\r\n### Login page keeps looping\r\n\r\n- Ensure your encryption keys are set correctly (not the default public keys)\r\n- If using KV, ensure the `ENV` KV binding is created and bound in `wrangler.toml`\r\n- Check that `redirect_domain` does not have a trailing slash\r\n\r\n### \"User Logged in Someplace Else\" error\r\n\r\n`single_session: true` is enabled and another device/browser has logged in. Log out everywhere and sign in again on one device only.\r\n\r\n### Worker exceeds CPU time limit\r\n\r\n- The free tier allows 10ms CPU per request. Most requests are I/O-bound (waiting on Google API) so this is rarely hit\r\n- If it occurs, consider upgrading to Cloudflare Workers Paid plan (50ms CPU limit) or optimising `files_list_page_size`\r\n\r\n### Console shows \"Report this page when asked...\"\r\n\r\nThis is the global error handler. Copy the full error message and open an issue on the repository with:\r\n1. The error text\r\n2. Your `authConfig` (with credentials removed)\r\n3. The request that caused the error\r\n\r\n### CORS errors on downloads\r\n\r\nSet `\"enable_cors_file_down\": true` in `authConfig` to add `Access-Control-Allow-Origin: *` to all download responses.\r\n\r\n### Service worker registration fails\r\n\r\nThis is a non-critical error. The `/sw.js` endpoint fetches a service worker from the CDN for offline support. If the CDN is unreachable, the error is caught silently and browsing continues normally.\r\n\r\n---\r\n\r\n## Planned Features\r\n\r\nThe following features are under consideration for future releases:\r\n\r\n- [ ] **Rate limiting** on the login endpoint to prevent brute-force attacks\r\n- [ ] **Bulk download as ZIP** — select multiple files and download a ZIP archive\r\n- [ ] **File upload** — upload files to Google Drive from the web UI (requires write permission)\r\n- [ ] **Thumbnail/grid view** — image gallery mode for photo folders\r\n- [ ] **Subtitle support** — auto-detect `.srt`/`.vtt` files for video player subtitles\r\n- [ ] **Admin panel** — manage KV users, view access logs\r\n- [ ] **Analytics** — optional lightweight visit/download counters\r\n- [ ] **Custom folder sorting** — pin folders to top, custom order via metadata files\r\n- [ ] **Webhook on download** — notify a URL when a file is downloaded\r\n- [ ] **Password reset flow** — for KV-based users, email-based password reset\r\n- [ ] **Two-factor authentication** — TOTP/HOTP for the login system\r\n- [ ] **Embed mode** — `?embed=1` already supported; iframe-friendly minimal UI\r\n- [ ] **MongoDB user database** — `login_database: \"MongoDB\"` placeholder already in code\r\n\r\n---\r\n\r\n## Changelog\r\n\r\n### v2.5.9 (Current)\r\n\r\n**Bug fixes:**\r\n- Fixed: File and folder names truncated with ellipsis on mobile — names now wrap fully in both index and search results on screens ≤768px.\r\n\r\n---\r\n\r\n### v2.5.8\r\n\r\n**Bug fixes:**\r\n- Fixed: File size not shown on mobile in search results — added `data-size` attribute to the search result row-name element so the CSS pseudo-element rule can render it below the filename at ≤560px viewport width.\r\n\r\n---\r\n\r\n### v2.5.7\r\n\r\n**Bug fixes:**\r\n- Fixed: Mobile search bar was hidden at ≤420px viewport width — removed `display:none` on `.gdi-nav-search`, replaced with narrowed `max-width` and hidden separator instead.\r\n- Fixed: Breadcrumb showed raw URL segment (e.g. `2:`) instead of the configured drive name — now maps through `window.drive_names[]` in both `generateBreadcrumb()` and `list()`.\r\n- Fixed: File viewer crash (\"Cannot set properties of null\") when `requestListPath()` was called from a file viewer page that has no `#update` / `#list` elements — switched to jQuery `$('#id').html()` which silently no-ops on missing elements.\r\n- Fixed: \"More options\" dropdown in the file viewer was clipped behind the viewer card — removed `overflow: hidden` from `.gdi-viewer-card` and `.gdi-btn-split`, added border-radius to first/last children instead.\r\n\r\n**UI:**\r\n- Sticky footer — debug bar and footer now pin to the bottom of the viewport on short pages and naturally follow content on long pages (`body { display:flex; flex-direction:column }` + `#content { flex:1 }`).\r\n\r\n---\r\n\r\n### v2.5.6\r\n\r\n**Bug fixes:**\r\n- Fixed: Search result click for files in unconfigured shared drives (`rootIdx = -2`) navigated to `/fallback?id=...` but failed with 400 — `getQueryVariable` returned the URL-encoded ID (`%2B` instead of `+`), causing `decryptString` to fail. Fixed with `decodeURIComponent`.\r\n\r\n**CDN / release:**\r\n- CDN migrated from separate GitHub CDN repo to npm package (`@googledrive/index`) — assets now served via `cdn.jsdelivr.net/npm/@googledrive/index@{version}/`. No separate CDN repository needed.\r\n- `CDN_VERSION` replaces `CDN_SHA` — single version string drives all CDN URLs; auto-patched by `npm run build` from `package.json`.\r\n- Added `files` field to `package.json` so only deployable files are included in the npm package.\r\n- `npm run build` now patches version strings, minifies CSS/JS, and prepares the repo for `npm publish`.\r\n\r\n---\r\n\r\n### v2.5.5\r\n\r\n**New features:**\r\n- New: **Google Workspace export** — Google Docs, Sheets, and Slides now appear in file listings and can be exported via `/download.aspx?fmt=<ext>`. Supported formats: PDF, DOCX, TXT (Docs); PDF, XLSX, CSV (Sheets); PDF, PPTX (Slides). Google Forms and Sites remain excluded.\r\n- New: **Storage quota display** — `show_quota: true` in `uiConfig` shows a usage bar below the nav (green/orange/red). Backed by a new `GET /{n}:quota` endpoint (`about.get`). Disabled by default.\r\n- New: **Auto-discover Shared Drives** in the generator — paste a temporary access token, click \"Fetch Drives\", and check the drives you want to add. Supports \"Select All\" and closes the panel automatically after adding.\r\n- New: `GET /{n}:quota` — returns `storageQuota` and `user` from the Drive `about.get` API for the drive's account\r\n- New: `GET /findpath?id=` — cross-drive file/folder lookup; searches all configured drives in order, falls back to `/fallback` if accessible via credentials but not in any drive root, returns 404 if not found anywhere\r\n- New: `GET /?driveid=DRIVE_ID` — same cross-drive lookup from the homepage; supports `&view=true`\r\n- New: `GET /{n}:findpath?id=` — per-drive findpath that falls through to all other drives automatically\r\n- New: Per-drive credentials — each `roots[]` entry can have its own `client_id`/`client_secret`/`refresh_token` or `service_account`/`service_account_json`; falls back to global credentials if not set\r\n- New: `POST /copy` — copy a Google Drive file to a specified folder via the worker API\r\n\r\n**Bug fixes:**\r\n- Fixed: `GET /findpath` previously hard-redirected to `/0:findpath`, meaning it only ever searched drive 0\r\n- Fixed: `findId2Path` (used by `/{n}:findpath`) only tried one drive and never fell back to others\r\n- Fixed: `/?driveid=` redirected to `/fallback` even for IDs that don't exist anywhere (now returns 404)\r\n- Fixed: OAuth error redirect pointed to `/?error=Invalid Token` instead of `/login?error=Invalid+Token`\r\n- Fixed: `handleSearch` responses were missing `Content-Type: application/json` header\r\n- Fixed: `handleId2Path` returned `{\"path\":\"/undefined:undefined\"}` when path was not resolvable\r\n- Fixed: `_list_gdrive_files` returned `null` when parent ID was undefined, causing `TypeError` in callers\r\n- Fixed: Google API error responses (no `files` array) caused crashes in listing code\r\n- Fixed: Fallback URL had unencoded base64 characters (`+`, `=`, `/`) in the `id` query param\r\n- Fixed: Fallback file response was missing `Content-Type` header\r\n- Fixed: `/3:/{nonexistent}` (and similar) API returned 500 instead of 404 when file not found\r\n- Fixed: Breadcrumb incorrectly truncated folder names containing `?` (e.g. \"My Folder? Yes\" became \"My Folder\")\r\n- Fixed: `findItemById` conditionally omitted `&supportsAllDrives=true` on user drives, causing lookup failures for shared items\r\n- Fixed: `redirectToIndexPage()` used HTTP 307 (method-preserving); redirected POST `/login` re-sent the form body to `/0:/`, causing a 500 error when login is disabled — changed to 302\r\n- Fixed: `handleId2Path` returned 500 for requests with invalid base64 in the encrypted ID (now returns 400 \"Invalid encrypted ID\")\r\n- Fixed: `findParentFilesRecursion` compared parent IDs against the string `\"root\"` instead of the real Google Drive root folder ID (`target_top_id`), causing `POST /{n}:id2path` to always return `{ \"path\": null }` for files in personal drives\r\n- Fixed: `fetchAccessToken` did not check `response.ok` — non-2xx token responses were silently swallowed; now throws with the HTTP status\r\n- Fixed: `get_single_file_api`, `searchFilesinDrive`, `findItemById`, `_findDirId` all lacked `response.ok` checks — API errors could cause crashes or silent empty results; all now return safe fallback values on non-2xx\r\n- Fixed: `get_single_file` called `download(file.id)` without checking if `file` or `file.id` was null first; now returns 404 if the file is not found\r\n- Fixed: `console.log` of raw file ID and download path left in production code path; removed\r\n\r\n### v2.4.1\r\n- Fixed: `sleep()` in download retry loop was not `await`-ed (no actual delay between retries)\r\n- Fixed: POST API requests bypassed session authentication when `enable_login: true`\r\n- Fixed: `kv_key` was `undefined` in Google OAuth callback for local-database users (broken session creation → login loop)\r\n- Fixed: `params.get(\"q\")` crash when navigating to `/search` with no `q` query parameter\r\n- Fixed: `path.slice(3)` stripped wrong number of characters for drive indexes > 9 (drives 10+)\r\n- Fixed: `details.parents[0] = null` threw if `parents` was undefined or empty\r\n- Fixed: `Access-Control-Allow-Credentials` header set to boolean `true` instead of string `\"true\"`\r\n- Fixed: Logout redirected to `/?error=...` instead of `/login` when login is enabled\r\n- Fixed: Session cookie not cleared with `Max-Age=0` on logout; path was missing\r\n- Fixed: `var user_found` scoping — replaced all with `let user_found = false` to prevent undefined reference\r\n- Fixed: Frontend `sleep()` was a CPU-blocking busy-wait loop (froze browser UI during retry)\r\n- Fixed: `performRequest()` in `requestListPath` never decremented the retry counter (potential infinite retry loop)\r\n- Fixed: `requestSearch()` retry had the same infinite-retry bug\r\n- Fixed: `data-bytes` attribute in fallback list and search results was `NaN` after `formatFileSize()` conversion (broke column sorting by size)\r\n- Fixed: `id2path` fetch sent wrong `Content-Type: application/x-www-form-urlencoded` header for a JSON body\r\n- Fixed: `MutationObserver` on `documentElement` added a new click listener to select-all checkbox on every DOM mutation (memory leak + multiple listener bug)\r\n- Fixed: `fallback = true` used as function argument (assignment expression, not a value) — replaced with literal `true`\r\n- Fixed: `formatFileSize()` returned `''` for 0-byte files; now returns `\"0 bytes\"`\r\n- Improved: Session validation now returns proper JSON 401 responses for POST API requests (instead of HTML login page)\r\n\r\n### v2.4.0\r\n- New: Random IV per encryption operation (AES-CBC) for session cookies and download links\r\n- New: Legacy static IV kept as fallback for pre-v2.4.0 links\r\n- New: Redesigned login page with password toggle and Google OAuth button\r\n- New: `gdi.css` v2.5.0 design system with CSS custom properties for theming\r\n- New: Homepage grid with search bar\r\n- New: Toast notifications for clipboard copy\r\n- New: PDF.js viewer with zoom/navigation\r\n- New: APlayer audio player with auto-playlist detection\r\n- Improved: Retry logic with exponential back-off across all API calls\r\n\r\n### v2.3.x\r\n- Multiple drives with homepage grid\r\n- Bootstrap 5 migration\r\n- Dark/light theme toggle\r\n- Bulk file selection\r\n\r\n---\r\n\r\n## Credits\r\n\r\n- **Original concept:** [maple3142/GDIndex](https://github.com/maple3142/GDIndex) and [yanzai/goindex](https://github.com/yanzai/goindex)\r\n- **Author / Maintainer:** [Parveen Bhadoo](https://parveenbhadoo.com) — [@PBhadoo](https://gitlab.com/PBhadoo)\r\n- **UI Redesign (v2.5.0):** [TheFirstSpeedster](https://www.npmjs.com/package/@googledrive/index)\r\n- **UI Framework:** [Bootstrap 5](https://getbootstrap.com) + [Bootswatch](https://bootswatch.com) + [Bootstrap Icons](https://icons.getbootstrap.com)\r\n- **API:** [Google Drive API v3](https://developers.google.com/drive/api/v3/reference)\r\n- **Video:** [Video.js](https://videojs.com), [Plyr](https://plyr.io), [DPlayer](https://dplayer.diygod.dev)\r\n- **Audio:** [APlayer](https://aplayer.js.org)\r\n- **PDF:** [PDF.js](https://mozilla.github.io/pdf.js/) by Mozilla\r\n- **Markdown:** [Marked.js](https://marked.js.org)\r\n- **CDN:** [jsDelivr](https://www.jsdelivr.com)\r\n- **Hosting:** [Cloudflare Workers](https://workers.cloudflare.com)\r\n\r\n---\r\n\r\n## Sponsors\r\n\r\n<a href=\"https://www.browserstack.com\"><img src=\"https://i.imgur.com/UMYceGo.png\" alt=\"BrowserStack\" width=\"240\"></a>\r\n&nbsp;&nbsp;\r\n<a href=\"https://tuta.com\"><img src=\"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/raw/master/images/tuta-logo.png\" alt=\"Tuta Mail\" width=\"200\"></a>\r\n&nbsp;&nbsp;\r\n<a href=\"https://1password.com\"><img src=\"https://gitlab.com/GoogleDriveIndex/Google-Drive-Index/-/raw/master/images/1password.png\" alt=\"1Password\" width=\"200\"></a>\r\n\r\nSupport the project:\r\n\r\n[![Buy Me a Coffee](https://cdn.buymeacoffee.com/buttons/v2/default-white.png)](https://www.buymeacoffee.com/bhadoo)\r\n\r\n---\r\n\r\n## License\r\n\r\n[MIT License](LICENSE) — Copyright (c) Parveen Bhadoo\r\n","readmeFilename":"README.md"}