{"_id":"apostrophe-secure-attachments","_rev":"28-abd9819154a5a63e483a66f8d1b62616","name":"apostrophe-secure-attachments","dist-tags":{"alpha":"2.1.0-alpha.5","beta":"2.1.1-beta.1","latest":"2.1.2"},"versions":{"2.0.0":{"name":"apostrophe-secure-attachments","version":"2.0.0","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.0.0","maintainers":[{"name":"boutell","email":"tom@punkave.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"531698d75b4b39c4605dd8439cb7d671b0c6a783","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.0.0.tgz","fileCount":6,"integrity":"sha512-SjNeEdMjsSEnMKot1Ss20unbb1mt40gBYABOOeH0zmaiI98L67GvJ3qolqZUAD6s/wvvelB+cg3cE42yO+JAlw==","signatures":[{"sig":"MEUCIFDIW20xAKyP4VI2F82ODUG7w6USIROauhjjNUcH3W3cAiEAjK/pF3FTcfAoDTtAKqa5aYG034ILNSMuA5kmtLdvkGA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9859,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYz4hCRA9TVsSAnZWagAADaAP/ipaUbmo3BF+kPf6ZK1v\nHpq6lyIrEEuM3Bupn2FKrsHHP9H7/FxYyHFjSDFCx9qnd3tIFDdX0pS6RhfA\nKIMgP6j8akt0W3emZOW3Z3YO+tRJq9Oc3/c/61GRJ/zhv23FFiL6ZHzOMapA\nFTUAxjlhtIaBKIHwvebCvchMlZUglqerfnb/nEBkueQElRjhb0IYmzMAY1tz\nXbXfMER1K54RThLbTBO5DFG0PZvC+eWPOYzk8wv0ErQyfzt9RZEnw+DXBVE3\nWOG76nssuU3tW72Ti4I1m7HCuNAAU8NXsiKSngb7NWGo6AxktVd/saQB71Yl\nrDSBl/RT5ko1mZ+kULojFlCQHe9WVnPyZxROGE/BMm4HHhyeLcanXxXTLRCF\nw1XYXreiCMMkfqWj83FOTx0yjot1ASSQg5vqUT78qDyQkqegWcK17Mij/vsl\nNwSae2U2WOSZ0mBrQfGNcoO421ibhOeoL3BpXCaQ/o1hvxC6B4Kbk7F/fDSu\ne8ANQs3G84B+pxFTPqlIwJ6pUSXxam8wMXhGmns/CIqgjsP30jtVF6cq1Cwh\nJ6lw4pffw3qXpDYm1e5VzWBgr50dgLbFd6ZklR83xmMTrRohDvHw1yqTWQID\nYMRJM2v/WZRigWEZIt9VMVua4uyss4aYWo6v9hIodhE2T2GiUKDLm8cbDSLP\nrUh4\r\n=cT+y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"5a58049a05049639e5a64c0e26b80fcc291a23e1","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@punkave.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"6.6.0","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"8.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.0.0_1550007840555_0.5205509716399355","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"apostrophe-secure-attachments","version":"2.0.1","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.0.1","maintainers":[{"name":"boutell","email":"tom@punkave.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"cfcb15d894340bf2d09f3f3f03339a926f0d0bcb","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.0.1.tgz","fileCount":7,"integrity":"sha512-6eDwnEffP/1SGRWDiKqz0qhlTltaxfS2roxcT0J/v4/L03GSPa8aKbSdcLREdlopKjLOjgiGGHZe9OnfczDGZA==","signatures":[{"sig":"MEYCIQCdsQN9E2HZoSXiVwuPPic5fJVVqLclHpgdaQLnNy5Z6wIhAP/td3Huk635gPefItMipq95IkSCCg8zFwvDk33PY9vm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbJdVCRA9TVsSAnZWagAAiscP+wd6DwGw36qMkR4iRF4Y\n7teYADW04e6CtBRvAaIR2/fDTAQNW8sNrDhOnZ/iYG6BnWuz5WzP+1+eg9ib\nZxWb6z0LL2ZruFEq/NjPuwpIMtFd3W2MZ/I7NfpFjTp74Q3xX79pSuRMxpJF\n/K6aM46QSSLwDHIDdVUYWuu+YA+dWMTAz6IBDFEhCNbhFr/TDXnnN0YGm/LH\nrBuOh2/Mvp6z0icNOq579Fz+uNPkU5Rul8SHIT4Hs+WzR5tw+RAezbGXATaN\nwIj9ftb6foS7UZypvFiN+kRdc6MqdibNWr0vghYyN7DCDV15lFtXaNbeoIbK\nwcXgnxtnHUXJPmZQsC+9n3LhKQYx7K3lbhH9B45lO86KOZNZykB1K1Lr3T2Z\nVbamodA6V4nZV5/9hpoCferUDSJ/e3rGWAUre3UoJj1mL//cZSqXpxevDqkK\naRfA5daLwqga1KLy3L08WCB/vNxacZlR0T6mhzr1gkYx0bk0B1OtCT6D1kHU\nKTBvPjIRNU0fYYVtZHVQZVy/fGQRBowAke1rpJ/JRUJ5vZnghARnn4+BpQbM\nnnGLNOFOH08pPgZ65k3paPl40KJnIRNGGEbXsUtEiG6NgbuFLuwC03ThRYf+\n+byH+BzPkaOGqGM8exdiMmjpTCVZC1SCMmRU5yV0DsSOquOhoHP5s3gMbmuu\nKRVu\r\n=iKcx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"f81c8180fc25c32038dd93d117e9e2c8ef4c248f","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@punkave.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"6.4.1","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"8.15.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.0.1_1550620500526_0.5110943476559004","host":"s3://npm-registry-packages"}},"2.1.0-alpha.1":{"name":"apostrophe-secure-attachments","version":"2.1.0-alpha.1","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.0-alpha.1","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"a255f4189018e964575d5e7e11f5b6e4d9107aca","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.0-alpha.1.tgz","fileCount":7,"integrity":"sha512-7uzpyor+tR1a7XNcg6dW4U4JXZECHTSigFZp6Yg+1j53K6e/EleCT8X0jRdJ5jgdT7tRA0ermPo4YmSK0aBR2A==","signatures":[{"sig":"MEUCIQDs5uP7HEon7EIpI2T2pP1ZgwIDiihC0X2Zxf+ZI2CUAQIgDgbvJWdTtcAW9bXro2z5YPyY/9MEWA7ci7OdIvIXXEM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11911},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"1bc09bf2166b44a4a6db8cb83c1374693262be40","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.7.0","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"18.20.4","dependencies":{"uploadfs":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.0-alpha.1_1729007124851_0.9920771392450587","host":"s3://npm-registry-packages"}},"2.1.0-alpha.2":{"name":"apostrophe-secure-attachments","version":"2.1.0-alpha.2","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.0-alpha.2","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"5e2bc9fee62f198bec81d96d2847de6994fe505b","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.0-alpha.2.tgz","fileCount":7,"integrity":"sha512-DDyCcDDNvSjGUO1zSggWZwp024zQ/0HSJ2P7J05ICK3UfIt3vkqzDHvHXaZdCSE2jMUvp2gMsaxPt9NzDb2D3g==","signatures":[{"sig":"MEUCIB7XuLv6CEAk4Syxea4Lt1a1yGEnzwm0NYhQQKOErkzyAiEAmNFuD3PO+JVlyh8wBK+yPP6D5+WY1aQte87CfIwfL9o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12803},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"4efd327595ff2dadc6ffd04837d06c12c0e21ed9","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.7.0","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"18.20.4","dependencies":{"uploadfs":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.0-alpha.2_1729020110761_0.7336139714467278","host":"s3://npm-registry-packages"}},"2.1.0-alpha.3":{"name":"apostrophe-secure-attachments","version":"2.1.0-alpha.3","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.0-alpha.3","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"9a1f888a5e218f47bb3f84ac2ddd4804109fde76","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.0-alpha.3.tgz","fileCount":7,"integrity":"sha512-2k9XaBjyyzobmdJLD0xq1I4psL11eo77NWyzu0fp1KC2VZ325BOdKlid3CuguR90OGAXfQjWtNb7OgMg82L13Q==","signatures":[{"sig":"MEYCIQCbg8rqz//rOvIXGMfDp2xBiaAKzQW0ID4htuT0o+DI0wIhAM1MUfj3dl1xm8lYuW8YgCsg6J5sP2iiJi9PnuxaP5Ad","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12807},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"1edad6d0d0e717becc21fcef76d8febf70c0474e","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.7.0","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"18.20.4","dependencies":{"uploadfs":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.0-alpha.3_1729020404263_0.2091345221902443","host":"s3://npm-registry-packages"}},"2.1.0-alpha.4":{"name":"apostrophe-secure-attachments","version":"2.1.0-alpha.4","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.0-alpha.4","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"bcefe751bcaf8ca7158d4314d7b36f2d20a40ddb","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.0-alpha.4.tgz","fileCount":7,"integrity":"sha512-3reI/l07ciFMKDceLHB21p22FV3P9N5QUg5JEHDUtnqE3F1wTJfoPmFDd8mj+JEnn0iAUih+bPcGBMDvEJbT1A==","signatures":[{"sig":"MEQCIBw0qmV18O+0wwSocHPm0m7aFndKOCxbRI/MlrHoI4GmAiA9TcwUdfxvaDUbHcS9ueUd4Z5cWYtDO3Aqn8Mfk5WocQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12851},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"9e544fd8c837a744de8e1ed6a3d941d08e1b8299","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.7.0","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"18.20.4","dependencies":{"uploadfs":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.0-alpha.4_1729023911361_0.6461851499056317","host":"s3://npm-registry-packages"}},"2.1.0-alpha.5":{"name":"apostrophe-secure-attachments","version":"2.1.0-alpha.5","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.0-alpha.5","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"e3dba46af8def6fc39f6ecd376dba53e5301dd57","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.0-alpha.5.tgz","fileCount":7,"integrity":"sha512-30JylZ6pfPKHGHSrAlkIuGO40ZjXUcDThzNh8BaLgCCOeobVnklAbh5n/7BojOYQ4WhIc36ZGQGd4W8O6yHzOg==","signatures":[{"sig":"MEUCIQDHVJG6qSS7mSME3zv7kZ1LFoN7QIQeGj+ocktQFkd7bQIgbjkvtpxV1CLS/2po+Y1j/pf4KQM9yCUVzR62sEQscFc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12872},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"9d83c9932bf63ff2c35e105d658a972ec0662872","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.7.0","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"18.20.4","dependencies":{"uploadfs":"^1.23.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.0-alpha.5_1729024308379_0.7832523515429846","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"apostrophe-secure-attachments","version":"2.1.0","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.0","maintainers":[{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"bodonkey","email":"robert@robertmeans.net"},{"name":"etlaurent","email":"etldev@tuta.io"},{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"stuartromanek","email":"stuart@punkave.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"valjed","email":"vjeudy@protonmail.com"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"5df09475d01640acfe31bda7713115160646908f","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.0.tgz","fileCount":7,"integrity":"sha512-wXYepsxKIieJdcivDS9q+icra3SMY7bCuffsK3DPn+plXRwjBjR8mHwb+Y89Sl/FB8bMSFia05dZZma2FQA5aA==","signatures":[{"sig":"MEQCIECDkNOAjavQGxEJTTi4tw7ouT0cZqr4xadUdmSifyUnAiAIw9souDWZSRmUdYSoX57K6jTb0MOGiBpw2PxoHPquqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12868},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"6d3a08f16b4f071b83132b2e42874e3d8a66f64a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.7.0","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"18.20.4","dependencies":{"uploadfs":"^1.24.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.0_1729084638851_0.755433457237322","host":"s3://npm-registry-packages"}},"2.1.1-beta.1":{"name":"apostrophe-secure-attachments","version":"2.1.1-beta.1","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.1-beta.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"b06e396cdeea3eea15e1d910a1814659ca4ee12f","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.1-beta.1.tgz","fileCount":8,"integrity":"sha512-KOP/IdehUNJio3wXml8OFj8CP3BnvJ99i07yIsQG8HyN6ziNM429zu8zpRJlWbEiw+IQKZMs6FfPBd6rbo8d0Q==","signatures":[{"sig":"MEUCIQCsodSXG9qHG2uqEeNazi2Aw0FPHXXYU+o+G6Ly+YNq8QIgNm0XHdXvdgwLs5i8SFp7RTAvHWzKY2E2kf2jNKD4IBE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14543},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"e73dc241003006adda8e3a9678aaa6b14021a904","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.9.2","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"20.19.3","dependencies":{"uploadfs":"^1.24.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.1-beta.1_1759163821378_0.6600100170723324","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"apostrophe-secure-attachments","version":"2.1.1","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.1","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"01266419c0c7708666fada6f85e1613cd94b30bd","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.1.tgz","fileCount":8,"integrity":"sha512-3inzwm9JMqyXArnFRrc3TdyiO82ijC4AGPYwUqCA5ce1Z7zs8D3mPkSmH7y64F163zcfxyFDIsOiztVyQW8aZw==","signatures":[{"sig":"MEUCIFgv+fcaVSeOTuScmRKu0FQWc8eDG8G4d+6nwag2iko3AiEAwiFjNTPzSM4BWp47Uo7rcpZ9HFfgME8R6FCrEj7F2MI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14536},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"e73dc241003006adda8e3a9678aaa6b14021a904","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.9.2","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"20.19.3","dependencies":{"uploadfs":"^1.24.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.1_1759241842762_0.0159774187892594","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"apostrophe-secure-attachments","version":"2.1.2","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"author":{"name":"P'unk Avenue LLC"},"license":"MIT","_id":"apostrophe-secure-attachments@2.1.2","maintainers":[{"name":"alexgilbert","email":"alex@apostrophecms.com"},{"name":"boutell","email":"tom@apostrophecms.com"},{"name":"etlaurent","email":"npm_etlaurent.cartoon369@passmail.net"},{"name":"romanek","email":"stuart+npm@apostrophecms.com"},{"name":"bodonkey","email":"robert.means1969+apostrophecms@gmail.com"},{"name":"haroun","email":"haroun.npm@icloud.com"},{"name":"valjed","email":"vjeudy@protonmail.com"}],"homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"dist":{"shasum":"b02028ea7484ca79448b5c136f9ecd0a6d6368d8","tarball":"https://registry.npmjs.org/apostrophe-secure-attachments/-/apostrophe-secure-attachments-2.1.2.tgz","fileCount":8,"integrity":"sha512-YX0hEASbPSGeuABqVjQ2jcR/BZtLXeDSVREZ895DHuUFPOnpNulpUmtGVr6SeXJdyehcuLIqENKezdVb+dw6Ag==","signatures":[{"sig":"MEUCIQCJ4JPNWvSlW1Pzt8me7kPFDtqeQabUxn00GJNcMPcj+QIgcR9zpfUesBwmpuBdQksl9kgxoBadZj2aF/rqrIUYI7k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14526},"main":"index.js","engines":{"node":">=8.0.0"},"gitHead":"df28e0bf662e14da1b1403c5cfc773aa06d276ab","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"boutell","email":"tom@apostrophecms.com"},"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"_npmVersion":"10.9.2","description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","directories":{"lib":"lib"},"_nodeVersion":"20.19.3","dependencies":{"uploadfs":"^1.24.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/apostrophe-secure-attachments_2.1.2_1759242020870_0.44517967964359495","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2019-02-12T21:44:00.552Z","modified":"2026-01-26T19:09:59.009Z","2.0.0":"2019-02-12T21:44:00.766Z","2.0.1":"2019-02-19T23:55:00.685Z","2.1.0-alpha.1":"2024-10-15T15:45:25.018Z","2.1.0-alpha.2":"2024-10-15T19:21:50.992Z","2.1.0-alpha.3":"2024-10-15T19:26:44.464Z","2.1.0-alpha.4":"2024-10-15T20:25:11.544Z","2.1.0-alpha.5":"2024-10-15T20:31:48.648Z","2.1.0":"2024-10-16T13:17:19.036Z","2.1.1-beta.1":"2025-09-29T16:37:01.549Z","2.1.1":"2025-09-30T14:17:22.971Z","2.1.2":"2025-09-30T14:20:21.060Z"},"bugs":{"url":"https://github.com/apostrophecms/apostrophe-secure-attachments/issues"},"author":{"name":"P'unk Avenue LLC"},"license":"MIT","homepage":"https://github.com/apostrophecms/apostrophe-secure-attachments#readme","keywords":["apostrophecms","apostrophe","cms","cms","apostrophe"],"repository":{"url":"git+https://github.com/apostrophecms/apostrophe-secure-attachments.git","type":"git"},"description":"Limit direct URL access to uploaded attachments, such as PDFs, to those who have appropriate permissions.","maintainers":[{"email":"alex@apostrophecms.com","name":"alexgilbert"},{"email":"tom@apostrophecms.com","name":"boutell"},{"email":"stuart+npm@apostrophecms.com","name":"romanek"},{"email":"robert.means1969+apostrophecms@gmail.com","name":"bodonkey"}],"readme":"# ⛔️ **DEPRECATED** — do not use for new projects\n\nSee [our current docs](https://docs.apostrophecms.org/)\n\n# apostrophe-secure-attachments\n\n## Why?\n\nYou want to limit access to certain uploaded files, such as PDFs, to \nwebsite users who have specifically been given permission to view\nthose files.\n\n## Wait, what's the standard behavior?\n\nBy default, files uploaded to your Apostrophe site can be accessed\nby anyone who knows the URL... which is why the URLs are unguessable.\nThis is a common approach for high-traffic services. It allows media\nto be served as fast as possible by static webservers. And it still\nprotects that media from being discovered by search engines, *until\nsomeone shares that link in public.* \n\nThis compromise works well for most sites, but it is not acceptable\nfor Intranet sites. And that's why you tracked this module down.\n\n## Sounds great, what's the catch?\n\nAll attachments are delivered a little bit slower, including attachments\nthat have public permissions. That's because Apostrophe must get\ninvolved in serving each one. It's not terrible, but there's an impact.\nSo just bear that in mind, and don't use this module on a super-high-traffic\nsite that doesn't really need it.\n\n## Use with S3\n\nThis module supports configurations where Apostrophe's media is served from S3 rather than local files, with the following contraints:\n\n* Apostrophe's static assets will still be served, but they won't be copied to S3. The provided implementation is compatible with `APOS_BUNDLE=1` bundle extraction behavior. They will be served via Apostrophe and/or nginx `try_files` rather than the S3 bucket.\n* As of this writing, only S3 is currently supported for this, not Azure or Google Cloud Storage. Interested parties may wish to contribute implementations of the `streamOut` method to those storage adapters in [uploadfs](https://github.com/apostrophecms/uploadfs).\n* Streaming media from S3 in this way imposes a more significant performance penalty than streaming from local files. Apostrophe must first check the attachment permissions, then open a connection to S3, then stream the data to itself and pipe it onwards to the browser.\n\n## Installation\n\nNOTE: node 18 or better is required for this module.\n\n```\nnpm install apostrophe-secure-attachments\n```\n\n## Restrictions (**please read**)\n\n**This module only works with the `local` storage backend of `uploadfs`**.\nThis is the default way attachments are stored in Apostrophe. You cannot\nuse this module with the `s3` or `azure` storage backends.\n\n> \"Why not?\" Those services are basically static webservers for your media.\nThat defeats the purpose of using this module.\n\n## Limitations\n\nPlease note that limiting access to a URL doesn't prevent an authorized user from saving a\nfile to their hard drive, then sharing that file directly. All this module does is prevent\nlink sharing. However, it is still a useful tool to keep sensitive documents from being\nindexed accidentally after being inadvertently linked once on a public page, etc.\n\n## Configuration\n\nJust turn it on in `app.js`:\n\n```javascript\nmodule.exports = {\n  // in app.js\n  const apos = require('apostrophe')({\n    modules: {\n      'apostrophe-secure-attachments': {}\n    }\n  });\n};\n```\n\n## Migrating your existing uploads\n\n1. Move `public/uploads` to `data/secure-uploads`.\n\n2. **Your `data` folder should already be a shared, persistent folder and if you are using our\nstagecoach deployment system, then it is.** But if you're not... make very sure this folder is\nshared and persistent between deployments. Otherwise, you'll lose your uploads every time\nyou deploy.\n\n3. That's all.\n\n> Legacy URLs like `/uploads/attachments/yyy-some-file.pdf` will be\nautomatically redirected to `/secure-uploads/attachments/yyy-some-file.pdf`.\n\n## So wait... now how do I secure a file?\n\nJust click on \"Images\" or \"Files\" in your admin bar, browse to the \nfile of interest, click to edit, and select the Permissions tab. You can\nset up view permissions just as you would for a page, including options\nlike \"Login Required\" and \"Certain People.\" The latter can be locked down\nboth by user and by group.\n\n## What if I have my own custom `attachment` fields?\n\nIf you have added `attachment` schema fields directly to your own pages\nor pieces, just set the view permissions for those pages and pieces.\nFor pages, this option is always available via \"Page Settings.\" For\npieces, it becomes available in the editor if you set `permissionsFields: true` as\nan option to your pieces module, like this:\n\n```javascript\n// lib/modules/products/index.js\n\nmodule.exports = {\n  extend: 'apostrophe-pieces',\n  name: 'product',\n  // Enables view permissions on a per-piece basis\n  permissionsFields: true,\n  addFields: [\n    {\n      type: 'attachment',\n      group: 'office',\n      name: 'resume'\n    }\n  ]\n};\n```\n\n## How to let the user log in to access a file\n\nBy default users just see a \"forbidden\" message. This is secure, but you might want a friendlier approach.\n\nIf you do, pass a custom `handleForbidden` function when configuring `apostrophe-attachments`:\n\n```javascript\n// in lib/modules/apostrophe-attachments/index.js\n\nmodule.exports = {\n  // self is the apostrophe-attachments module object, in case you need it\n  handleForbidden(self, req) {\n    // This is the default behavior, change it in your override\n    req.res.status(403).send('forbidden');\n  }\n}\n```\n\nYou can access the URL the user originally wanted via `req.url`.\n","readmeFilename":"README.md"}