{"_id":"@cofacts/media-manager","_rev":"8-3bf9bc0fcb747befaa3954be5a0bfbb4","name":"@cofacts/media-manager","dist-tags":{"latest":"0.3.3"},"versions":{"0.0.1":{"name":"@cofacts/media-manager","version":"0.0.1","author":{"url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群","name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community"},"license":"MIT","_id":"@cofacts/media-manager@0.0.1","maintainers":[{"name":"mrorz","email":"johnsonliang7@gmail.com"},{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"lucien@lucienlee.cc"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"}],"dist":{"shasum":"71711bbe98b63b395de7b795ce849d47d611a7db","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.0.1.tgz","fileCount":21,"integrity":"sha512-8sAGLm8xVCkuNMv1b0gWLBLdoFUqW1bwRFCwlD8YtY4M1OSwDkEltUgXvwQ9pE4RRZZb/FEZ2oCpViJR+igB9w==","signatures":[{"sig":"MEYCIQDiSw/K7DnvnHY/foBrEiD6Lc+I0pXCRMGRJwanrGUeNgIhAMYxpI6cQTlPDsycX6mIDrCX1NdsN17kXpYHifRnBNg3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":327726,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJip14YACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq3+g/7BLWO4C0Ej8Fk7dy822c3xixfAylwhA46AcYXpHQNl49kEGqw\r\nt1BgOFtrObyHSaigrloSXl9P3sW7S/xJiAvl9rB5+P0hQLZKx3I8G5E363y/\r\n174UA9JX8x9Hdo4fjYgcc8xbGqTriSc2DIuBREfVurQ8T/Bscl0ziOE+6BVw\r\nEgKHHKfia66nzuorSJzCA6y4iL2f8zSR5jAWLM+93dnw30SCgeBPV2sl7fnp\r\nobFGAjQoebePMxLFjjrn4ld/+5dgi9YEy/2uyxdsn/OjCVp8Y9GBvJCxcolm\r\n8AaZSXlVA4uuI+Q6HAKXZS0uYi8vhrb76joaG09t0QUGFrsiWBoztlZ6qTv6\r\nR8Bl5eClASTT1oA2VkpVNECNlUBpsUujk9ejMa936rHDAPdjhX6p+1qWChln\r\nSD1DqeJ3J53aN03Wx8kQChqmvh+T31ODUpzW5rc+FthvmQrotN2B7tBaL+KX\r\nRRxlLxe7kjZdmSJgth3UFiblGwrVYJXPamtBFJ8nqi6WXN9+lyLDrT8DTl15\r\nK4rcCfosK9Cim22pTALnlWF1Wxdmqdli3faD+sIz5XbD/nSel9GB9j9utmHj\r\nttoT3HSfJ5Fq4QxtdM3qlRs6B8J5Xy0EU0QTlcO9N+fGKfby4xYmbnXcKGVP\r\nDkxGKzs92Ox36zQbk21C/mmqckzIIeUnVKw=\r\n=i6at\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/media-manager.esm.js","engines":{"node":">=16"},"gitHead":"7189d8d76249e5d196369885ee7efefddd201708","scripts":{"lint":"tsdx lint","test":"tsdx test","build":"tsdx build","start":"tsdx watch","prepublishOnly":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"mrorz","email":"johnsonliang7@gmail.com"},"prettier":{"semi":true,"printWidth":100,"singleQuote":true,"trailingComma":"es5"},"_npmVersion":"8.6.0","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","directories":{},"_nodeVersion":"18.0.0","dependencies":{"sharp":"^0.30.5","image-hash":"^5.3.1","node-fetch":"^2.6.7","content-type":"^1.0.4","@google-cloud/storage":"^5.19.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^8.0.1","tslib":"^2.4.0","dotenv":"^16.0.1","typescript":"^4.6.4","@types/sharp":"^0.30.2","serve-handler":"^6.1.3","@types/node-fetch":"^2.6.1","@types/content-type":"^1.1.5","@types/serve-handler":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/media-manager_0.0.1_1655135768678_0.9183809543174037","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"@cofacts/media-manager","version":"0.1.0","keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"author":{"url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群","name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community"},"license":"MIT","_id":"@cofacts/media-manager@0.1.0","maintainers":[{"name":"mrorz","email":"johnsonliang7@gmail.com"},{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"lucien@lucienlee.cc"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"}],"dist":{"shasum":"5557966a4d927eec1ae949d7d528b72fa2c8f16f","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.1.0.tgz","fileCount":21,"integrity":"sha512-DSU+9Vs+ySkdw0y3ZuNhjPdEOijXQyVgKzJPveLbRgEOSe/Ii8pEfBuemUuHI7OqzUIQof/x3eMkBQ3oqrUnhg==","signatures":[{"sig":"MEYCIQDHWbxrdASwr4mLGDKykYURzJkF1iSvQSifjyken67RJwIhAI8G8++xrMCo5rL0TWSa9EHtpR0QDz2pYCrjk6H0/Lx0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":327868,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJis1s8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoPoA//bI1MFLtT5G9yDhhw2H1DnZ+AIoGeL5QYRWgIIAeHybOKARY8\r\nzssx8rUvU36MDgx4GqCqXWKZ1mmtym9yW3rlwqhUZLYI9VHNfNrWQPZ/Y35I\r\nN2yjRjwugJUVe/sJ9magkCDRRHPnCilBHzzAo02cw3L0JjKgo48mwAG/v1GJ\r\nJ2wWT3EsIsKqiD5WhRKZeCCvBL3lGiB/7w6p1qpq3ZAQi778uupWh408TJmX\r\ngMrHKsirCiJdiCTQRknAX08R15M5CSohSSJD0znPOyCVSIfLBTv+zjgrGU1/\r\nTLzR2jtL982n5X/6hDGLbAEcAmRrLXPf9ziCXkEg4nPRqQpcHTdmKxKwat/s\r\nzIoWr89Xe5fqSnahBnVCc+qWZ0Gy4ARSGizBQHGNx+Px7teckRQyS6kgUdg+\r\nAazNPP6xGjKUlP579OhJ9Je+m6DNlIKGIpiOHnRjGOU7lG5xCjZnWO0OeveA\r\n1uIxmuAiZCnQKgOVZz8OITmdfMKCerkJljC+106dxHv3mvwcW7W44SHehh+S\r\nP2xpSc3Em+oyuOHkFnlItNht1AI6EbrXQCqk29TJmBIbCXaAX+qP3P478Tbl\r\n2mozQsJ+Q8Y9bphLWDxR5lU2tX6ccFVCf2awELUFWyo512B+8W38GE1pEZzh\r\n56CVeZYEVrEfKk9D1lK/2MrqvunpT+Lqr/E=\r\n=loFm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/media-manager.esm.js","engines":{"node":">=16"},"gitHead":"65c2a706a51acdf3d2d7f2a3d1be58c0e8984281","scripts":{"lint":"tsdx lint","test":"tsdx test","build":"tsdx build","start":"tsdx watch","prepublishOnly":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"mrorz","email":"johnsonliang7@gmail.com"},"prettier":{"semi":true,"printWidth":100,"singleQuote":true,"trailingComma":"es5"},"_npmVersion":"8.11.0","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","directories":{},"_nodeVersion":"16.15.1","dependencies":{"sharp":"^0.30.5","image-hash":"^5.3.1","node-fetch":"^2.6.7","content-type":"^1.0.4","@google-cloud/storage":"^5.19.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^8.0.1","tslib":"^2.4.0","dotenv":"^16.0.1","typescript":"^4.6.4","@types/sharp":"^0.30.2","serve-handler":"^6.1.3","@types/node-fetch":"^2.6.1","@types/content-type":"^1.1.5","@types/serve-handler":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/media-manager_0.1.0_1655921468628_0.5503312546931871","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"@cofacts/media-manager","version":"0.2.0","keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"author":{"url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群","name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community"},"license":"MIT","_id":"@cofacts/media-manager@0.2.0","maintainers":[{"name":"mrorz","email":"johnsonliang7@gmail.com"},{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"lucien@lucienlee.cc"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"}],"dist":{"shasum":"02362644dea5646bbbec3bcc2347dcef3dceb090","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.2.0.tgz","fileCount":23,"integrity":"sha512-hAH0iDOt8/m7USVen64ypJjUQmFSKoi/Pq6akR34Xk1rNh2oaNq3Ugo/DL7LZYYKKHXCncU+BYeoZsqRPoc+NQ==","signatures":[{"sig":"MEUCIQD+TRGIr+2M2rTv2HlM9o7cPNZ1bw1lFCww9CapsiaLjgIgVeqdKTp47K6lc3lOnWy/sdHbEu1kUonX2O4kPJlIBLk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":383697,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJix7crACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqeMQ//faj0Y5Q9tTL1J/RWNY94e3LlNUFBF/Cjgh073+cf+TBhDflW\r\n48D0aZqPNnv5m6c6ggqaLUiCoOa7gfLpyYbhbrx4+plBr8zNOA2i+yEDaD6F\r\n/CP3gICIn65IM7qyyD3zUD2C0OP5Zj3jUFPQPpKzil7HlmET2ZZODGBDTTRJ\r\nGqWI8im4juUsc2Wxg9UnNWbclDwZfuGHjpu+qLKFOFkjZY7yVXTYkfkcDdHY\r\nr3NdsRWbSKjZd2F0Ygw7wf5gQpIGLL4pzcLDHiIFh2CfbeBWpQgr4airxinb\r\nFUxENWXtvITsOj035VxcWV+MjFX4Pt+OGBG9TvNcj0PxhxDYbovQNp1qKkCN\r\n0I87F5j09fKcfKYQ73G6Jqq4VX2jsddQXZOexER3uaeNtwvWHwG5k/QX6zhN\r\nuta3GDqOcBmvZZaDlI8dIyqn6VOSJMyH3cW6amEdzRB/o0AGlfIEGTYeTAca\r\nsneI8hRLydzBkM9gff+CeTB5cnN88i2MmeYSKL9ECrK0/XywxAa4YCsvA9a7\r\nzlL8aerO4yu2PnaUiBFkFDTZicqKfjpjWf2MBlIsgXjdT2Ltn56F5hjCTx6R\r\npcRj8qCqIEbfY3CvQz0fTYcjQPXZkSGnOu9FurDHbRVtOfUcbUY0nRiOkOYc\r\njb8eVweJ+Diu9PKPlzG1bp3rMqr0EWMT4/Q=\r\n=XWI2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/media-manager.esm.js","engines":{"node":">=16"},"gitHead":"88671232ae1a2f5cb9711d9cb714bf2abad9ddce","scripts":{"lint":"tsdx lint","test":"tsdx test","build":"tsdx build --target node","start":"tsdx watch","prepublishOnly":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"mrorz","email":"johnsonliang7@gmail.com"},"prettier":{"semi":true,"printWidth":100,"singleQuote":true,"trailingComma":"es5"},"_npmVersion":"8.11.0","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","directories":{},"_nodeVersion":"16.15.1","dependencies":{"sharp":"^0.30.5","image-hash":"^5.3.1","node-fetch":"^2.6.7","content-type":"^1.0.4","@google-cloud/storage":"^5.19.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^8.0.1","tslib":"^2.4.0","dotenv":"^16.0.1","typescript":"^4.6.4","@types/sharp":"^0.30.2","serve-handler":"^6.1.3","@types/node-fetch":"^2.6.1","@types/content-type":"^1.1.5","@types/serve-handler":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/media-manager_0.2.0_1657255723630_0.08469525603195271","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"@cofacts/media-manager","version":"0.2.1","keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"author":{"url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群","name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community"},"license":"MIT","_id":"@cofacts/media-manager@0.2.1","maintainers":[{"name":"mrorz","email":"johnsonliang7@gmail.com"},{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"lucien@lucienlee.cc"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"}],"dist":{"shasum":"98049aa0cb840e0cc31a629fc2b173ad60294b51","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.2.1.tgz","fileCount":23,"integrity":"sha512-eO8oI/CJ9G0YT/aZM68xWp6tqccO7HMOYNQtI2W6ehRy1bnXnA6IQYD6jfFnbkSAN/D1RD8fD5ewxmcB0mRXwQ==","signatures":[{"sig":"MEYCIQCVzSQnuHxmQXrgG8w0k/OpWfae/XoVqBVIxQppx/KGIQIhAKdhAdczTe+waGhZkpu7ZWHUdLEag5niz/EeR1lzopN5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":393471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+fBlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpfrw//a4OPgbVc2I2otXCqCk/io5WPMYXDWy7FeqkQKEY0+1iOnrxn\r\n8VPnI9Sv5xTQUwbYfv17ucw+Rv3ZvMqzFtLsZWvZ7BOCcRKKqGjrAFoEqIAz\r\nYqfDkr1YUjV50FKr8b+osG5FGrifnxgvoCTNMGlRQhTuCQZMfzY2iLRdf7Su\r\nUku5lbLBNrsk2U8UpJ9D9Fkf9iFOBFF6hIfeDbMQzf8vWJ4NA7Yj+bNICT+F\r\nxTkasvt1TV+Y1Sj6VwZUpFaGiSN3XsxdXcDrU2o8JACZR1FOK9dXsus2RzVa\r\nZB37zYP4nmm8AK53nx1i4bnzLLcSmhTxcinNVeroCwks75PhDFplhgrlbNb8\r\nBOjaA8u8S6HWtIKCXOHVxFYOBfvOvgZ0x8rEakvKkH8Q1K9HKI/U2P4YqUZZ\r\nue79RxIkhJzRggawytscOjzsUBi+5DvqdhTxTh6TG7WZa5GA0c0qle2evbE6\r\nucARKW/0h0x0Fjs5rxIZathdzCPJzZ/IWHnkXXE9glOV8V80HuwlzttlWVyq\r\nklFdUSfQPazgkqN7sa8TkGyFyqTDhze4WNjWIXeRXWndw4j6c5zmCJ6FMsB8\r\n26SpYH5VcHwgIjnZJgFbi2wunbAVjuqLdOtq5Ba0ipSVEkERhwifQXSOStOt\r\nGIVel4wJX83WixltSfZ+l+ov+zwEZy7XEo4=\r\n=sX1g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/media-manager.esm.js","engines":{"node":">=16"},"gitHead":"ee41c0fc8387118839d19eebb921ff0f48b65005","scripts":{"lint":"tsdx lint","test":"tsdx test","build":"tsdx build --target node","start":"tsdx watch","prepublishOnly":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"mrorz","email":"johnsonliang7@gmail.com"},"prettier":{"semi":true,"printWidth":100,"singleQuote":true,"trailingComma":"es5"},"_npmVersion":"8.11.0","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","directories":{},"_nodeVersion":"16.16.0","dependencies":{"sharp":"^0.30.5","image-hash":"^5.3.1","node-fetch":"^2.6.7","content-type":"^1.0.4","@google-cloud/storage":"^5.19.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^8.0.1","tslib":"^2.4.0","dotenv":"^16.0.1","typedoc":"^0.23.10","typescript":"^4.6.4","@types/sharp":"^0.30.2","serve-handler":"^6.1.3","@types/node-fetch":"^2.6.1","@types/content-type":"^1.1.5","@types/serve-handler":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/media-manager_0.2.1_1660547172861_0.06260206399125012","host":"s3://npm-registry-packages"}},"0.3.0":{"name":"@cofacts/media-manager","version":"0.3.0","keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"author":{"url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群","name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community"},"license":"MIT","_id":"@cofacts/media-manager@0.3.0","maintainers":[{"name":"mrorz","email":"johnsonliang7@gmail.com"},{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"lucien@lucienlee.cc"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"}],"dist":{"shasum":"ab50b0f5800409d4b3e9f322f03fdec1e08e12de","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.3.0.tgz","fileCount":23,"integrity":"sha512-SAY5bEElxjNaBKA+c7EIrNB65r1PcoUS1PQkLBppkU3bxePJiHYK56ztQlBcVbv/WsWuJkjzHVIhaleBj26Jiw==","signatures":[{"sig":"MEQCIGXcQ3pwN4ziWLIocPdKa3xTXz0nc7vNLyw58kVcZ+MMAiAMLp7gH++VhM90SOuwOyOFYikeCiV6DoMPkAzu01a4nw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":400011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjC6vVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo6GhAAoH4jBMXtZWLvT0GlS1R63l034ICaTD/j/PVDEdgNmWka1hgg\r\n7mE8ybKltFqJZzwWtivMKzRxdkc1lCmbutDfTHsa4wPNKhfYJPLmhgJ5axUv\r\nyOb5BBH3sVlPgcBi/TjXz4e5W/S4SijNrr+a9UT6m5fHkhhjPRPJLOGffhPj\r\nwIBcpP0zYyiuQ8a8RRyvJzTHOXxnoY8RARqJXPOpeOHwMnNtK/x+lDNH8pl5\r\nZFaW/9ofCMypxdkbb6Xn7FgchTE3BpXU+V+PVm6EU37dGOar3cKTJ6CQJigL\r\nP20lshShkroVsKH0P6Ut1QdcFcDxJxj3dm96jROrmDX3Xed33ffp4lZulHYv\r\nYRJyMSKFd0xeFCCpd/rX+WBUY5W/qy18VizcBmkByU8bLB5oMfjGTrH3uSQy\r\nPbWCsU913R93yci81kWp03ww3v5mgEHMGX/THwTqJaMEsitZTFpZGSqKSzvw\r\n0+opXvp72b3W5U/07JLSUCUddEuvnRiKyMgBhZ1jBGno92UAfgP1iRkCO+jK\r\nCtIGc2Z6tIov0GKknRJ03QlPNIggeozVkZS5yUcemE8KaxnR3atHb48+hGuc\r\nlQ4Bby6DY2GsPGrhoFTn8ayM9zamJM3S0zYeO0cuQFCtKwwITCiUqSqQq4u9\r\nrCWKW4/dUi0adU3Uq3BTGYQHAfSsX5KDDDU=\r\n=4b7J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/media-manager.esm.js","engines":{"node":">=16"},"gitHead":"4b3b9a87ca4241f6e34b9fe6d980f8a1065b3b21","scripts":{"lint":"tsdx lint","test":"tsdx test","build":"tsdx build --target node","start":"tsdx watch","prepublishOnly":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"mrorz","email":"johnsonliang7@gmail.com"},"prettier":{"semi":true,"printWidth":100,"singleQuote":true,"trailingComma":"es5"},"_npmVersion":"8.11.0","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","directories":{},"_nodeVersion":"16.16.0","dependencies":{"sharp":"^0.30.5","image-hash":"^5.3.1","node-fetch":"^2.6.7","content-type":"^1.0.4","@google-cloud/storage":"^5.19.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^8.0.1","tslib":"^2.4.0","dotenv":"^16.0.1","typedoc":"^0.23.10","typescript":"^4.6.4","@types/sharp":"^0.30.2","serve-handler":"^6.1.3","@types/node-fetch":"^2.6.1","@types/content-type":"^1.1.5","@types/serve-handler":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/media-manager_0.3.0_1661709269430_0.7040064039500178","host":"s3://npm-registry-packages"}},"0.3.1":{"name":"@cofacts/media-manager","version":"0.3.1","keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"author":{"url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群","name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community"},"license":"MIT","_id":"@cofacts/media-manager@0.3.1","maintainers":[{"name":"mrorz","email":"johnsonliang7@gmail.com"},{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"lucien@lucienlee.cc"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"}],"dist":{"shasum":"51c6d1944d6ccc9284c954ac4fc29d0c3a3ab075","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.3.1.tgz","fileCount":23,"integrity":"sha512-q34QXZy6ohGqbC2D+UAm5FLT2zyoEKbutC7XJ8AmiUnJcQm4eVddobWn0MO3ujv3ijM0kHwop3r/YVea/G1ZLQ==","signatures":[{"sig":"MEQCIHLYacJXh2limuplM0gDXQM3xvlVGkBWSBxH4HWhP+0rAiB74x/Afofew5Id76Pf4IzkEHKU94+Ss65lnp1RNlnjyQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":406487},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/media-manager.esm.js","engines":{"node":">=16"},"gitHead":"c56a4b5ffedeccde0b68950d03570ad0c3646b0d","scripts":{"lint":"tsdx lint","test":"tsdx test","build":"tsdx build --target node","start":"tsdx watch","prepublishOnly":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"mrorz","email":"johnsonliang7@gmail.com"},"prettier":{"semi":true,"printWidth":100,"singleQuote":true,"trailingComma":"es5"},"_npmVersion":"8.19.4","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","directories":{},"_nodeVersion":"16.20.2","dependencies":{"sharp":"^0.30.5","image-hash":"^5.3.1","node-fetch":"^2.6.7","content-type":"^1.0.4","@google-cloud/storage":"^5.19.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^8.0.1","tslib":"^2.4.0","dotenv":"^16.0.1","typedoc":"^0.23.10","typescript":"^4.6.4","@types/sharp":"^0.30.2","serve-handler":"^6.1.3","@types/node-fetch":"^2.6.1","@types/content-type":"^1.1.5","@types/serve-handler":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/media-manager_0.3.1_1709227444215_0.8103846163823065","host":"s3://npm-registry-packages"}},"0.3.2":{"name":"@cofacts/media-manager","version":"0.3.2","keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"author":{"url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群","name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community"},"license":"MIT","_id":"@cofacts/media-manager@0.3.2","maintainers":[{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"lucien@lucienlee.cc"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"},{"name":"mrorz","email":"johnsonliang7@gmail.com"}],"dist":{"shasum":"332e54295ca0f212712dffaacc10f808e1f42789","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.3.2.tgz","fileCount":23,"integrity":"sha512-vKx+q1Q/JvBdRiupkxkODgDOZOo1T9bAZziYK1P2ajPZt720QKNSLqwf8rgbIzT/68QnnV8ZZEkyk5GmLgCXMQ==","signatures":[{"sig":"MEQCIDfDCbu//Z7fS979xHaw0C0ZYACeDQ6syvkkRTeuwM5/AiA2hocy73txWyScCyxbVPIQSR8G3rXpCV1EAD04bRrZGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422647},"main":"dist/index.js","husky":{"hooks":{"pre-commit":"tsdx lint"}},"module":"dist/media-manager.esm.js","engines":{"node":">=16"},"gitHead":"d5e1cdac01b6b90aee7c5f58b6c2d50649f073cf","scripts":{"lint":"tsdx lint","test":"tsdx test","build":"tsdx build --target node","start":"tsdx watch","prepublishOnly":"tsdx build"},"typings":"dist/index.d.ts","_npmUser":{"name":"mrorz","email":"johnsonliang7@gmail.com"},"prettier":{"semi":true,"printWidth":100,"singleQuote":true,"trailingComma":"es5"},"_npmVersion":"8.19.4","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","directories":{},"_nodeVersion":"16.20.2","dependencies":{"sharp":"^0.30.5","image-hash":"^5.3.1","node-fetch":"^2.6.7","content-type":"^1.0.4","@google-cloud/storage":"^6.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsdx":"^0.14.1","husky":"^8.0.1","tslib":"^2.4.0","dotenv":"^16.0.1","typedoc":"^0.27.6","typescript":"^5.7.3","@types/sharp":"^0.30.2","serve-handler":"^6.1.3","@types/node-fetch":"^2.6.1","@types/content-type":"^1.1.5","@types/serve-handler":"^6.1.1"},"_npmOperationalInternal":{"tmp":"tmp/media-manager_0.3.2_1738434875174_0.6932591067783727","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"version":"0.3.3","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=16"},"scripts":{"start":"tsdx watch","build":"tsdx build --target node","test":"tsdx test","lint":"tsdx lint","prepublishOnly":"tsdx build"},"husky":{"hooks":{"pre-commit":"tsdx lint"}},"prettier":{"printWidth":100,"semi":true,"singleQuote":true,"trailingComma":"es5"},"name":"@cofacts/media-manager","author":{"name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community","url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群"},"repository":{"type":"git","url":"git+https://github.com/cofacts/media-manager.git"},"module":"dist/media-manager.esm.js","devDependencies":{"@types/content-type":"^1.1.5","@types/node-fetch":"^2.6.1","@types/serve-handler":"^6.1.1","@types/sharp":"^0.30.2","dotenv":"^16.0.1","husky":"^8.0.1","serve-handler":"^6.1.3","tsdx":"^0.14.1","tslib":"^2.4.0","typedoc":"^0.27.6","typescript":"^5.7.3"},"dependencies":{"@google-cloud/storage":"^6.12.0","content-type":"^1.0.4","image-hash":"^5.3.1","node-fetch":"^2.6.7","sharp":"^0.30.5"},"keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"gitHead":"68c8f720d36788d97a96c041b053e0eb811f0085","_id":"@cofacts/media-manager@0.3.3","description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","bugs":{"url":"https://github.com/cofacts/media-manager/issues"},"homepage":"https://github.com/cofacts/media-manager#readme","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-TYV+S5gHTifeDzyPNaWqQVOFH63FerLMFdxAn5co+Cwce+zFzwPyfy3pd8bj63fYwWgOiDolIriEdzp5y+hbWw==","shasum":"d9f698a65279838871d0b754f0d996d394ebd524","tarball":"https://registry.npmjs.org/@cofacts/media-manager/-/media-manager-0.3.3.tgz","fileCount":23,"unpackedSize":422674,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cofacts%2fmedia-manager@0.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAFYPZVU3yevggyxaA6IRRLygFoEuPWc+CpP7vuPMhMFAiEAqQYZCK6P6gTzClTB19zKF0cJsE0LCrbp8Mcjyae0vQ4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c8e632a5-b4b1-4537-9d92-afea45721d00"}},"directories":{},"maintainers":[{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"hi.lucienlee@gmail.com"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"},{"name":"mrorz","email":"johnsonliang7@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/media-manager_0.3.3_1780220312934_0.03817476681408438"},"_hasShrinkwrap":false}},"time":{"created":"2022-06-13T15:56:08.611Z","modified":"2026-05-31T09:38:33.636Z","0.0.1":"2022-06-13T15:56:08.851Z","0.1.0":"2022-06-22T18:11:08.750Z","0.2.0":"2022-07-08T04:48:43.845Z","0.2.1":"2022-08-15T07:06:13.146Z","0.3.0":"2022-08-28T17:54:29.580Z","0.3.1":"2024-02-29T17:24:04.400Z","0.3.2":"2025-02-01T18:34:35.378Z","0.3.3":"2026-05-31T09:38:33.057Z"},"author":{"name":"Cofacts message reporting chatbot and crowd-sourced fact-checking community","url":"「Cofacts 真的假的」訊息回報機器人與查證協作社群"},"license":"MIT","keywords":["Multimedia information retrieval","Image search","Near-duplicate image search","Multimedia indexing"],"description":"[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)]","maintainers":[{"name":"godgunman","email":"godgunman@gmail.com"},{"name":"lucienlee","email":"hi.lucienlee@gmail.com"},{"name":"darkbtf","email":"darkbtf@gmail.com"},{"name":"nonumpa","email":"acerxp511@gmail.com"},{"name":"mrorz","email":"johnsonliang7@gmail.com"}],"readme":"# Cofacts Media Manager\n\n[![CI](https://github.com/cofacts/media-manager/actions/workflows/main.yml/badge.svg)](https://github.com/cofacts/media-manager/actions/workflows/main.yml) [![Coverage Status](https://coveralls.io/repos/github/cofacts/media-manager/badge.svg?branch=main)](https://coveralls.io/github/cofacts/media-manager?branch=main)\n[![npm](https://nodei.co/npm/@cofacts/media-manager.png?mini=true)](https://www.npmjs.com/package/@cofacts/media-manager)\n\nCofacts Media Manager is a Node.JS API that provides the following functionality for images and other files:\n- Store files and return a unique identifier (Media Entry ID) for each unique file; duplicate files are ignored.\n- Search for a file with a query file.\n- Return underlying Google Cloud Storage `File` object given the media entry ID.\n- Pre-process and store as [variants](#variants-and-transformers).\n\n## Install\n\nInstall cofacts/media-manager via npm:\n\n```sh\nnpm i @cofacts/media-manager\n```\n\n## Usage\n\nThe code snippet below shows how to set up the connection Google Cloud Storage, and how to search for\na file in the bucket, and how to add new files to the bucket.\n\n```js\nimport MediaManager from '@cofacts/media-manager';\n\n// Setup\nconst manager = new MediaManager({\n  // Google Cloud service account's JSON key, in string format.\n  credentialsJSON: '{\"type\": \"service_account\", \"project_id\": \"...\" ...}',\n\n  // The Google Cloud Storage bucket name\n  bucketName: 'my-gcs-bucket',\n\n  // The prefix of where files are put.\n  // Trailing `/` is REQUIRED if you want files to be put in a \"directory\" on GCS web console. Otherwise, root directories will just have specified prefix in its front.\n  // If not given, files will be placed right insight the bucket.\n  prefix: 'some-dir/'\n});\n\n// Search\nconst { hits } = await manager.query({url: 'https://url/of/file/to/search'});\n\n// Upload and index\nconst { id, url } = await manager.insert({url: 'https://url/of/file/to/store'});\n```\n\nOn the GCS bucket, the files will be organized in the following tree hierarchy:\n\n```\nsome-dir/\n  image/\n    <search-hash>/\n      <id-hash>/\n        original\n  file/\n    <id-hash>/\n      original\n```\n\nIt is designed so that Media Manager can retrieve files using path prefix. You may refer to [the wiki](https://github.com/cofacts/media-manager/wiki/Media-Manager-Design) for the design choice.\n\n### Variants and transformers\n\n> Reference: [GetVariantSettingsFn](https://cofacts.github.io/media-manager/types/GetVariantSettingsFn.html)\n\nYou can define multiple variants for each uploaded file by providing `getVaraintSettings` method to the `MediaManager` constructor, or when calling `mediaManager.insert()`.\n\nYour `getVaraintSettings` should return a list of [`VariantSetting`](https://cofacts.github.io/media-manager/interfaces/VariantSetting.html) objects. When you call `mediaManager.insert()`, Media manager will process on-the-fly and emit one file on GCS for each `VariantSetting` returned by `getVaraintSettings`.\n\nWe provide a [`variant.original` factory function](https://cofacts.github.io/media-manager/functions/variants.original.html) that generates just one `VariantSetting` object that does not transform the data, so that the original file is stored to GCS. This is also used in [the default `getVariantSettings`](https://cofacts.github.io/media-manager/functions/variants.defaultGetVariantSettings.html).\n\n```js\nimport MediaManager, { variants } from '@cofacts/media-manager';\nimport sharp from 'sharp';\n\n// Setup\nconst manager = new MediaManager({\n  credentialsJSON: '{\"type\": \"service_account\", \"project_id\": \"...\" ...}',\n  bucketName: 'my-gcs-bucket',\n  prefix: 'some-dir/',\n\n  // Example:\n  // 1. store 1 scaled image and the original file for images\n  // 2. store just the original file for other files\n  //\n  getVariantSettings({\n    type, // 'image' | 'audio' | 'video' | 'file'\n    contentType,\n  }) {\n    if(type === 'image') return [\n      // Emits the original uplaoded file to GCS\n      variants.original(contentType),\n\n      // Emits a 100-px wide webp image\n      {\n        name: 'thumbnail',\n        contentType: 'image/webp',\n        transform: sharp().resize(100).webp(),\n      }\n    ];\n\n    return [\n      // Emits the original uplaoded file to GCS\n      variants.origina(contentType),\n    ]\n  }\n});\n\n// Get the GCS file object for the \"thumbnail\" variant\nconst file = manager.getFile('<MediaEntry ID>', 'thumbnail');\n\n// or\nconst mediaEntry = manager.get('<MediaEntry ID>');\nmediaEntry.get('thumbnail'); // Throws if `thumbnail` variant does not exist on GCS\n\n```\n\nOn the GCS bucket, the files will be organized in the following tree hierarchy:\n\n```\nsome-dir/\n  image/\n    <search-hash>/\n      <id-hash>/\n        original\n        thumbnail\n  file/\n    <id-hash>/\n      original\n```\n\n### Media entry on GCS\n\nEven though you can browse the file in your bucket directly on GCS, you don't have to traverse the bucket by yourself. Instead, you should access the files and their variants by their corresponding *media entry*.\n\nEach uploaded file maps to a [media entry](https://cofacts.github.io/media-manager/interfaces/MediaEntry.html) on Media Manager. On Google Cloud Storage, it maps to a\ndirectory that hosts different [variant files](#variants-and-transformers).\n\nBy default, there is only one variant, `original`, representing the originally uploaded file; all bytes are stored as-is without any pre-processing.\n\nEach media entry has a unique identifier (media entry ID). For images, they are like: `image.vDph4g.__-AD6SDgAebG8cbwifBB-Dj0yPjo8ETgAOAA4P_8_8`. For other files it may look like `file.Dmqp3Bl7QD7dodKFpPLZss1ez1ef8CHg3oy9M7qndAU`. The media entry ID is always URL-safe.\n\nMedia manager also provides methods like `mediaManager.get()` so that you can get a media entry by its ID. Through the media entry, you can either get its public URL on GCS, or directly get a [GCS file object](https://googleapis.dev/nodejs/storage/latest/File.html) if you want further control.\n\n### Search for files: `mediaManager.query()`\n\n> Reference: [MediaManager#query](https://cofacts.github.io/media-manager/classes/MediaManager.html#query)\n\n`mediaManager.query()` takes the URL of the query image as the input, and returns the search result.\n\nThe search result may contain multiple search hits for similar images. There is at most one hit (exact match) for other formats.\n\nFor how image similarity works, please refer to [the wiki](https://github.com/cofacts/media-manager/wiki/Media-Manager-Design).\n\n### Upload files: `mediaManager.insert()`\n\n> Reference: [MediaManager#insert](https://cofacts.github.io/media-manager/classes/MediaManager.html#insert)\n\nThis method will upload file of the given URL to Google Cloud Storage.\n\nFiles with identical or near duplicate image content will produce the same media entry ID, so there will be no duplicates on your GCS bucket.\n\n`insert()` resolves as soon as all data in `MediaEntry` is resolved -- which is the time the unique identifier `id` is generated from actual file content.\n\nBy the time `insert()` resolves, it is possible that files are still being uploaded to GCS. When upload succeeds, `onUploadStop(null)` will be called. If upload fails or the file already exists, `onUploadStop(err)` will be called.\n\n## API Reference\n\nThe documentation of `MediaManager`'s all methods and arguments are available at: https://cofacts.github.io/media-manager/classes/MediaManager.html.\n\nFor the detailed requirements of the Google Cloud Storage bucket and service account, please refer to [the documentation of `MediaManager`'s constructor arguments](https://cofacts.github.io/media-manager/types/MediaManagerOptions.html).\n\n","readmeFilename":"README.md","homepage":"https://github.com/cofacts/media-manager#readme","repository":{"type":"git","url":"git+https://github.com/cofacts/media-manager.git"},"bugs":{"url":"https://github.com/cofacts/media-manager/issues"}}