{"_id":"@dr.pogodin/csurf","_rev":"27-24731f9251af6ed1245ce9178fd2e21f","name":"@dr.pogodin/csurf","dist-tags":{"latest":"1.18.1"},"versions":{"1.11.0":{"name":"@dr.pogodin/csurf","version":"1.11.0","keywords":["csrf","tokens","middleware","express"],"author":{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},"license":"MIT","_id":"@dr.pogodin/csurf@1.11.0","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"}],"homepage":"https://github.com/birdofpreyru/csurf#readme","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"fb6c637ec5c7e9097974cd4e665e2bd550bcc1ef","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.11.0.tgz","fileCount":5,"integrity":"sha512-qtZ5vOY9QXFOfHtTuefIx76s0AcEnDYZs2qXEAMufdJhJHi+eRCbodT5mUzezQzjEkD7qnbnrIK1u2YDv8+u1w==","signatures":[{"sig":"MEUCIEXTrQ6fSuFHhYBXLLpwc15QaV4U9yRveQmXAGPtZ5OhAiEA+cNHGeo04WRG/zZoPf9eppXxlsge7rY3APy161rRlao=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":24237,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZYdpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq7EA/+LoRzGz0XizVP7tlMQV51U0UHGRVgfY2y7RY+IgvGfO/PUbhB\r\nNLK1BuCuvfg40IsPbNDaUFqc1Cu6O8q0/+UXMGUo9fnRYiE0E6QTmTggof9i\r\ngqOfUcii02/VH43BP+JteVqYgUV1Uvj8/SuZxowKUF/DlQxXJPeGYqHbZGQg\r\nuumRjJBvQmUIC+3szBBAco55AgRsELnHdtR3ie23/DoVVgd6Ws8uyteEx033\r\nUjLe1hFWZrkQpGPIZbnrsuk8lAELo82/QWoSQ7UPaf4FwvDQPIGch7H3ZT9e\r\nDUyV5ZQll/v6bb9+cQz3vSV4xGVaGt/wTREL6L3ZoFT2M37YZNmCXwbEb1HF\r\nIvqzJwmhqelE7Jqrz1tPj6vR2GgjIvRNiOdLn9ddKpAuH0zgWbfkZuKrQmFd\r\ncAdgzp5Cwn7cHgy+aM5+ZUutpZ8Bl9uK0AU8H4YfTRA5S0XTMwsdSsuzVSVk\r\nCSe2MsU1dAnhXSOUJIef6avDV/wS2wl9hgHuqMTwmY27XO9/O6Rap5N9+BLU\r\nnB14+7CkqcmvMCXZ6amjAWgvCWtdgAvlB/B0Nky8DIgUfklEVGEOSf1wfOHL\r\nxy+N/B5sKn6tWr/vXrB26eFQZ0b+xzW/05fp5oyjloidDrv3YLOKAkg0OIjc\r\nRJjo8qlqgALqo966ZT1PYOqZumTTorP9Sss=\r\n=eliq\r\n-----END PGP SIGNATURE-----\r\n"},"engines":{"node":">= 0.8.0"},"gitHead":"bcb68d423fb820a808b7c45907e038ce2d05dd16","scripts":{"lint":"eslint --plugin markdown --ext js,md .","test":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test","test-travis":"nyc --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"8.19.2","description":"CSRF token middleware","directories":{},"_nodeVersion":"18.12.0","dependencies":{"csrf":"3.1.0","cookie":"0.4.0","http-errors":"~1.7.3","cookie-signature":"1.0.6"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.0.0","mocha":"7.0.0","eslint":"6.8.0","connect":"3.7.0","supertest":"4.0.2","body-parser":"1.19.0","cookie-parser":"1.4.4","cookie-session":"1.4.0","eslint-plugin-node":"11.0.0","eslint-plugin-import":"2.20.0","eslint-plugin-promise":"4.2.1","eslint-config-standard":"14.1.0","eslint-plugin-markdown":"1.0.1","eslint-plugin-standard":"4.0.1"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.11.0_1667598184909_0.5457430415715689","host":"s3://npm-registry-packages"}},"1.12.0":{"name":"@dr.pogodin/csurf","version":"1.12.0","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.12.0","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"3457b8bb0e12894612c733593ef936af526c4e20","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.12.0.tgz","fileCount":4,"integrity":"sha512-WtMJO0HfQhTAyW3OTQ1oWJbQVltCOsiusLTEs/sRcERtYPhMvpAGQ0iwHJ/6p3BaKUeqXZKIbNubIzoz3GrxfQ==","signatures":[{"sig":"MEYCIQCGzoYKGtWtAf8PTEXibQYLBg+PVEnc14GcdoHTpAL9IAIhAKkuI1hBVUoVzOolwXQPJh02zQQjtZwDBUQGvMOkcYMJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZZ7aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp2Sw//ZD3grlUwxQGZ0OqATdXWWzQkwn6pIQn2xEFUyAk342Ubq610\r\nsf4ytamI3+1HXoURywv8/Adx71bxHo+/WOQZTdPPZQoWuVCAXtrY2irx+sjL\r\niTU3mkFlyemOJXJP05dm7EjGeVvwjXqQyQAjSwzvi4vmF9nLqoKG3VAhHSSE\r\nh0VO3kDqZTyMhRSjJ9EsKUPztqN6Tl0518ZmxnckmFJVGqetUQggAQVBzjOM\r\nAiINZJ6+R3sKGFG124wRX3cYS/+qa2iyk0KMfbxXbyOQLQslgJLUbkJoLU5o\r\n7a2sXwvjQaChLBucFlu2MX1THF7cJJgstG0phjZfyb8gM9WwcrV7f4FMg5yK\r\n8PWL5X31WUHKe1Kh7cdx/XWU4l1A84h/ns6yYy3OHUzenP3S8IYj3pdhjza8\r\nFSN8BUv83mL3CgJnsE3MuwELKY+GWxEO6Dv+BysM1dJSQ0LKFXliDEAJxSUQ\r\nHpiQF5wd5zyDNvEBWErvmw0OrbbSM57gRWF8kJfKYp+dFXXqZCmbUPIGFbr4\r\nOm1vWjwgX5zH9xGF6GgBzfQ/r6x20T7z3iKeTPzWIce9SSHun3ZvYAT/kimE\r\nB9NBIOTUkWVFYHEvAtE+EcX/i6xZwzCiEydw2MjOmqYBsOirODvU8QiT2vUJ\r\nqGooWP58iOCkyeQqoQvmKTLLxxAIwL3lzmo=\r\n=Hw+k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">= 14.20.1"},"gitHead":"a5eb692133155527e95da374ee939c17b6bacb7d","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"8.19.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"18.12.0","dependencies":{"csrf":"3.1.0","cookie":"^0.5.0","http-errors":"^2.0.0","cookie-signature":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"10.1.0","eslint":"^8.26.0","connect":"3.7.0","supertest":"6.3.1","body-parser":"1.20.1","cookie-parser":"1.4.6","cookie-session":"2.0.0","eslint-plugin-import":"^2.26.0","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.12.0_1667604186059_0.16276580345735603","host":"s3://npm-registry-packages"}},"1.12.1":{"name":"@dr.pogodin/csurf","version":"1.12.1","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.12.1","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"029696df53b058828a9ac07666eee0f04529be14","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.12.1.tgz","fileCount":4,"integrity":"sha512-mDVhJH71O/h4xwOIii7lRtdx4sw/PCZgQj2lt1xezM6mUlFojCcYhGmp+hX7LhPCLSzlTCfHCkoaHQZ3Ns0A0w==","signatures":[{"sig":"MEUCIQC8YxQeuz7NNzRe26k3qdz8zJy7aaAWJIIpPvWN4nSo8QIgEQscpocJweGSW5/UlVF4FLOa7gRnIVy+GPeXg9yf5vc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZk6GACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrZAQ//U5cc3c+91pA5I+iy9tkbQLM317dFCeJ0WBVNOpfUxtN3g4h4\r\nb4lfTStkJtD4v3WzTIHkq9Y56VMKzrxaO0JAZh54e5t1ucMZGtqYq0UP+J+P\r\n0viHVfbZ6ifyGO7gRMhOnnov2a/UqZvkBKLUnzNoYkK45AWqPKxyaJisfvZz\r\nEW4vK9e/PxdvTUSTQCEqXpokOWWprhZYIGsKAD0RSACt2ccKq2TLUvtH9gHb\r\n+N6DqDJBjlISPDDeCYOeEgh451fRJ74RK3KlOR4qAKkTwk4JfzUBDrwywEsW\r\ndBojRyh27mz/rI/yJn9TcKBlwT43myI8TLUxN8r/V/Dln5EJ1/FA6VwjNir8\r\nNFpd6/EnmGj0WATfTFUeB0XsTyr1Ayeq9D3R8DwMEqw3OKfsmKIe/GScZ53Z\r\nLgDtRTi+ENKj5nz/4Fx5amAYYG36L7kd6obC3pBcHsiFBZauyo61U9Oog7Yq\r\n5KxHaz4s2bLqkTT9Hty7j+CL0dadTc8EtNQHHgU4KYeEITH8vXtBrUTW81JI\r\npcm3MpNSTUCI0OguypKpVmp/4IKLiC/fGBmMW9fKLOI9K4xmOayQCChsm2sr\r\n5OX2d/fZQnlU70Mlb2h294tVdAhVCtGCSvqBYXS215q00Oh3mtsntepCsS+w\r\n61VOoKYbBLTK2UVSmi187UAnZjNO/pZcA0Y=\r\n=29SC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">= 14.20.1"},"gitHead":"b3d927b4cb82768cf342c82e682e481bc1113fc8","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"8.19.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"18.12.0","dependencies":{"csrf":"3.1.0","cookie":"^0.5.0","http-errors":"^2.0.0","cookie-signature":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"10.1.0","eslint":"^8.26.0","connect":"3.7.0","supertest":"6.3.1","body-parser":"1.20.1","cookie-parser":"1.4.6","cookie-session":"2.0.0","eslint-plugin-import":"^2.26.0","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.12.1_1667649157932_0.8233991666164835","host":"s3://npm-registry-packages"}},"1.12.2":{"name":"@dr.pogodin/csurf","version":"1.12.2","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.12.2","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"760c9ccf3a0e435c72e1f4372df74eac6fc002c2","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.12.2.tgz","fileCount":4,"integrity":"sha512-qu4LM9iHUmKbY81GlsQyNUqLn9bHVl3yNGoPv9gjwUvD2jtbDZ3JceuDe03DwK2h+6sJdekURvRwCYB5g+SLqQ==","signatures":[{"sig":"MEUCIQD9VIpeucHl1zU9uhqm0frX7rDDJoq+pBIgamnEc+/CvAIgIX2ba6FPWvKV76OFkS5DGKjeUHEE+UikA08wKy+tAes=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkm3oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo5yQ//cO4LBI2wIetAAnolh65TfNpbJ5UslYPQgHY9o/eOUHjtd+X0\r\nq82jj0YV0TyBN+yPVGzwxuFWu3Mdnu8/eIdfwPs306mD8oULQxcwl8VoDxmK\r\nEdhRWMK/51KQr3BkH6FDCDAv7FNdwobzVDr6kgJv6juXO3Og3hajGeX3bbbT\r\nOlQeR1pay/VpbgHh4xnst5f3aF+VA7u1jw4vdEZJwTBlOMJeTitSyyt38r4K\r\njE9u9MkQvfehF4DA2rc8T6eCK3FENT1UhL+sgJ150XVPOhJL1Ap7ibwRdk/Z\r\nHPawjhpCnoKhb86EckrG7kLlvm1nia4r4erc9lG7gOfyYIlwTEtCXOUvqZRu\r\nkqViMO9pJnslJaYjdMaot7z1yEN3vYVwL7Qv0ssTps8Ndr89bxZPx4kRQpRm\r\n6FfwJMTjDFZ8PlIM5FHigYXcWQ4f/NAFZzinIVmF7VObJ/TGKNdn2CAlei6m\r\nxxNAogTx3C2VQEwwxOpAYxDI8X8wOQt8cDpYV7+FISnoOpPvTRTKAcDsmZdj\r\nwbvQxeFLjrWvyIFMMIhmDLZTnh4ZMg+7R6O0kZ7M/0hJhbcl7us7yHqqMpC5\r\nwqlvrAoddMa/7ayMQxI+pwv+nvLUyLB9LwhxwzZI82/HjYhZYpGPcWphb9vH\r\n2WJYq8BZQu/6vgbyVo7YRHOOOBBpQOL72YA=\r\n=dfHt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">= 14.20.1"},"gitHead":"a2257562fe1076a81139f1981bdb426f2ce8f592","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"8.19.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"18.12.1","dependencies":{"csrf":"3.1.0","cookie":"^0.5.0","http-errors":"^2.0.0","cookie-signature":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"10.1.0","eslint":"^8.29.0","connect":"3.7.0","supertest":"6.3.3","body-parser":"1.20.1","cookie-parser":"1.4.6","cookie-session":"2.0.0","eslint-plugin-import":"^2.26.0","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.12.2_1670540776210_0.6290212184959731","host":"s3://npm-registry-packages"}},"1.12.3":{"name":"@dr.pogodin/csurf","version":"1.12.3","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.12.3","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"ef25d97f590ad2a356a4d7fd2f3ea9f7f32b43c0","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.12.3.tgz","fileCount":4,"integrity":"sha512-xKylbZPttzy/bXx2EsqOiuQwKEFlwI9gS9usjo1N4yuWcGkLtzwHSGxbvv3v6J5uBppCsSPoUIm1oaMakLuQ/Q==","signatures":[{"sig":"MEQCIGZKyhnCzXv+Ec3TvUgrRk4dAlh3oOiHG9no4dXL4lEPAiBKiNfJgOpiaR3Z0Ap4jzOveYsknsmPeJU1ga/kmZCqUw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIEoZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmovoA/9Fa7aWbJpdJ4aij8RUZ0GOIYoa0Pe7kFWXRc3wg7+A692wT5P\r\nO/paMtTLy7chgzlcXQFIzhMQkiB8k1ugeqXu0TPNrwpS1vYrl4DQTNUNYB4V\r\nq9RDuGTdo9gNxYuNUkm/XisiCmycMZi/r03YX+lRtzAgyDharrc08MP/u7kl\r\nfXPN1nK/HJMW8XGfXSqRVI7FzzoGJIRePLXlZkOkVUro5z8P7S8ViQq/z5uf\r\ntQRKCZSOhxT3SgcFxVD2OXCakRiPoafXyY0x0y1M7qbu2pR4n5Tq9yMEV3L+\r\nSghINe+zxBhEDZWaJOHZce4/cVVgUzeMClI2qGhOZGXSk2RSx39NLyVuOMGe\r\n4Wr33FD+9Jlmg8kL3CehzYM/ul6f/c36O3KRgp3JSE/x/1Lm6kPxYACJQI+a\r\n0JOQJ6tjNrcAON3fDSmnSV5cRBQJ7+JfhcW2SZyqmvhUydLB+psbRxC53nlY\r\nhjNWhGHs0JpkvjA0IBDQh6LJfyPx67l+iLIV1AfEYqQX69e+77J/h8tUqW2Y\r\noAp7SpclvXBedVXWvlv90X1F+UxUDGjQYaoj82UNwbvUAp+D629OBKTsXH6u\r\nbJ3Z05FF7HLXox6pwghqJSeq+/cnpdkUzbGmp95MSbudX3A69OXfQBpQQzZd\r\niIaAvKI0t+5ULzf2+/hByPBm5L41HE1eY7w=\r\n=zqaF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">= 14.20.1"},"gitHead":"5091004b47d50dca8d2b2f8fe5584dade1b54114","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"9.5.0","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"18.15.0","dependencies":{"rndm":"1.2.0","cookie":"^0.5.0","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","cookie-signature":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"10.2.0","eslint":"^8.36.0","connect":"3.7.0","supertest":"6.3.3","body-parser":"1.20.2","cookie-parser":"1.4.6","cookie-session":"2.0.0","eslint-plugin-import":"^2.27.5","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.12.3_1679837720869_0.2023904970902699","host":"s3://npm-registry-packages"}},"1.12.4":{"name":"@dr.pogodin/csurf","version":"1.12.4","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.12.4","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"19878911329a4883005b40c0cfb644404ffd876c","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.12.4.tgz","fileCount":7,"integrity":"sha512-NvnYS1EDNE9tLuRRUZMDantwaDMgluMLq57vcBws7AYVH6KwF3dIn3Dc3CutSKVCXx6JxCG+BkLD6GMv/O0aKA==","signatures":[{"sig":"MEQCICSLV3pqsa0J0BRIxc3mI760ZF7YNxsscoRsLXKEXcoyAiBF2+e64rJ+Ilk868a1Yx9ven3ooISH3MeT5HERfnJ7Qw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25556,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkIYCeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpIERAAjiP/NkBycAiQw9AO1rluMJw7IKHDi0cLXBv/rQZkGY378Ldm\r\nikW8TVaozWXlxUATw4ocECNyjZPr2zhadLGp05AfGhFolvYuvzvxgxtI78OK\r\nrjFBCLeY6OJfkbVyLw9kMnvifBAIXKoGnb28ZnKYpuBIU53xFmPQzmtz4EsJ\r\njdoZVMwHYS/6AsA6B4M2wI+yaCIG4FeFwA5RkrQqb/tYLFJ9HvXc13mWcWi5\r\n+lAB65xeUIIxpF09W39RvAzY30G0eOlDNXhDD+rCpBbSrOsdk/r33BFnYZd0\r\n7ZEFKWFtHfP9/3Wyy2LvqmLuxLZPLZdKIeaJ8vMs2i/DOBCU8exAeM+yFbua\r\nu/kHNdPFIy5EWZ5n2+AiGuR6AqcfpZwxGnK/l4DIbjAQlV34MWdmnYuVAexo\r\n/3549lHskq5gGZEbzIXj2Sstj4A1Nv8Okqphu9B6/G+4l7q8dQPh/IlRE0l2\r\nhVdD1djKreGwolpjwLe0XZFL2h6hTh37O3uRoUk2Qj9Hz60R76QbXjwSMYNe\r\n1iXIqY/9Auc5J5rJUz2OTzqQVE+NJaUUmF93FhmhAOY969aaQpmlK+lRa0my\r\nNI2ZPQgJD6GdrEueG96Pqp/Geo7eJpF21hceg9NiPzmEFNHHlmjm5c8Ov3pI\r\nBuis1C+wQWc8OpOc325k9FkC9dg8sX50ka0=\r\n=7I4i\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">= 14.20.1"},"gitHead":"c816fdb46710da9cd0dd7fe52d43d3155fca202d","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"9.5.0","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"18.15.0","dependencies":{"rndm":"1.2.0","cookie":"^0.5.0","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","cookie-signature":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"10.2.0","eslint":"^8.36.0","connect":"3.7.0","supertest":"6.3.3","body-parser":"1.20.2","cookie-parser":"1.4.6","cookie-session":"2.0.0","eslint-plugin-import":"^2.27.5","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.12.4_1679917214690_0.5266523580139535","host":"s3://npm-registry-packages"}},"1.13.0":{"name":"@dr.pogodin/csurf","version":"1.13.0","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.13.0","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"9e9c7ca226e52e38546a4bf8f1faf932e7554b1b","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.13.0.tgz","fileCount":7,"integrity":"sha512-X4kcMzMGne63mNKW4Hy4buxoSq8FT5G76eD0yzOFKthAofBoC+fxAjSm07XhfvttZ8rxqsoC21MXYYGrAE+yTw==","signatures":[{"sig":"MEUCIAndk9cLLOLF1ZAhHJKza44E0HRRF1fRXThTRV+ITZZEAiEAk1KVatSa42PB91j5BGc4DiLhEfCor95EzJN06aSQfDU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":25938},"main":"index.js","engines":{"node":">= 16"},"gitHead":"e5bc26f51d688edfdf8311e4db6ac02733802fd4","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"9.5.1","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"18.16.1","dependencies":{"rndm":"1.2.0","cookie":"^0.5.0","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","cookie-signature":"^1.2.0"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"15.1.0","mocha":"10.2.0","eslint":"^8.43.0","connect":"3.7.0","supertest":"6.3.3","body-parser":"1.20.2","cookie-parser":"1.4.6","cookie-session":"2.0.0","eslint-plugin-import":"^2.27.5","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.13.0_1688035037479_0.663818366810587","host":"s3://npm-registry-packages"}},"1.14.0":{"name":"@dr.pogodin/csurf","version":"1.14.0","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.14.0","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"d3e97db14453ff5e513169e1f31fc1aa467ebfc0","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.14.0.tgz","fileCount":7,"integrity":"sha512-E1YfFSptSdPW1rXK7eydbHgxFI4HvJj5bX1mJM3ejUeyDkKpYXcxRV3A4Xbxx2Kwvs18uhAar9eqcuwwe1QxaQ==","signatures":[{"sig":"MEYCIQDpf2Zs9Ok2hPbDFmamB+bZcH23eygfZsNAnH2INJR+dQIhAJWNVm1qMBj5GfUsrsHcCC1h8MAOtX4floyLceoQ0K2N","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26460},"main":"index.js","engines":{"node":">= 18"},"gitHead":"9d3ad6f5c7e7135d6cea5a42eb6233a933d1c1c7","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.8.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"20.18.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.0","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","cookie-signature":"^1.2.1"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","mocha":"^10.7.3","eslint":"^8.57.1","connect":"3.7.0","supertest":"^7.0.0","body-parser":"^1.20.3","cookie-parser":"^1.4.7","cookie-session":"^2.1.0","eslint-plugin-import":"^2.31.0","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.14.0_1728462782139_0.763330218665498","host":"s3://npm-registry-packages"}},"1.14.1":{"name":"@dr.pogodin/csurf","version":"1.14.1","keywords":["csrf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.14.1","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"179f12e7fa18f7657d0a7c2cdee4149201451357","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.14.1.tgz","fileCount":7,"integrity":"sha512-ijqJsKSDlepDYbprkEEcqbiYero2y4DeL4X5ivnkbKonliLtH8SfHCEtdUwoRZLPTUy2WeFPHI+gveU+Z8ZxLA==","signatures":[{"sig":"MEQCIEiGLD4E0051LL8oITScETpTnYUwT+jyMfiIggp5d32YAiBukbXBRCc5W1Es9lyjznexvCKcOoDL5Hg7icgfa1L/EQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26573},"main":"index.js","engines":{"node":">= 18"},"gitHead":"dea18d11a9cde193864cd0108e337ed4152a3774","scripts":{"lint":"eslint --ext js .","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"deprecated":"Update to v1.15.0: see https://github.com/birdofpreyru/csurf/releases/tag/v1.15.0","repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.8.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"20.18.1","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","mocha":"^10.8.2","eslint":"^8.57.1","connect":"3.7.0","supertest":"^7.0.0","body-parser":"^1.20.3","cookie-parser":"^1.4.7","cookie-session":"^2.1.0","eslint-plugin-import":"^2.31.0","eslint-config-airbnb-base":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.14.1_1732317280205_0.1286143740612382","host":"s3://npm-registry-packages"}},"1.14.2":{"name":"@dr.pogodin/csurf","version":"1.14.2","keywords":["csrf","csurf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.14.2","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"8266882954f97e3ea69e2c30baee44b359b07638","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.14.2.tgz","fileCount":8,"integrity":"sha512-A/f9C1YnLUWoLdNSOTDLVlelPPgJDKYmVoEoNoQyfNBCV8i2fIlfIk7abZ6TEnoEihhqwwWfmmUp2UI324II+w==","signatures":[{"sig":"MEUCIFB651M2dRMZH43MKWPEd8/BtfZivhlM8nNTm8NQQ9y2AiEAwpvKiUGAA3nFRJt73MeH8e6aZG02GB2la/qqtEfRR/0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26872},"main":"index.js","engines":{"node":">=18"},"gitHead":"d05c9cf909c749674edf9e240786cbfaee789fdc","scripts":{"lint":"eslint","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"deprecated":"Update to v1.15.0: see https://github.com/birdofpreyru/csurf/releases/tag/v1.15.0","repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.15.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","mocha":"^11.1.0","eslint":"^9.25.1","connect":"3.7.0","globals":"^16.0.0","supertest":"^7.1.0","body-parser":"^2.2.0","cookie-parser":"^1.4.7","cookie-session":"^2.1.0","@dr.pogodin/eslint-configs":"^0.0.3"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.14.2_1745837343369_0.6245279666996271","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@dr.pogodin/csurf","version":"1.15.0","keywords":["csrf","csurf","tokens","middleware","express","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.15.0","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"bb2ebf05860f1f2e62b2a43cea7cb1f202278876","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.15.0.tgz","fileCount":8,"integrity":"sha512-lyocEyIiRQ/dNO76WNS+m6Pswa44RY8i6zUz6ZGXzKPn+DOFYRtl0isL4k36PpEpXEr0515cvIQrvpYuX2NGPw==","signatures":[{"sig":"MEYCIQDZpyLUTfj2qMq8nCmAvz4idiD8WGmvAtzfHlL212F00QIhAMOdHPEQHV4klWd6LZbKjA65HP3v4pBTpfAA/7e/agLG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26847},"main":"index.js","engines":{"node":">=18"},"gitHead":"02b92f0e8ff72d4b5223c41439f064534d5a1026","scripts":{"lint":"eslint","test":"npm run lint && npm run mocha","mocha":"mocha --check-leaks --reporter spec --bail test/","test-cov":"nyc --reporter=html --reporter=text npm test"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.15.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^17.1.0","mocha":"^11.2.2","connect":"3.7.0","globals":"^16.0.0","supertest":"^7.1.0","body-parser":"^2.2.0","cookie-parser":"^1.4.7","cookie-session":"^2.1.0","@dr.pogodin/eslint-configs":"^0.0.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.15.0_1746466918680_0.22702499778423513","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@dr.pogodin/csurf","version":"1.16.0","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.0","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"86529fb3d57d13871df8ae75ccf9a13cd3771173","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.0.tgz","fileCount":11,"integrity":"sha512-WbVZ8JTbediBbaU0CIjHRW4wYp/+eaSTriu7I3XQFbQn7FCSQ3ofXYA/rGLpz1ZM2nNMBNxMc10MEOI5xgYH5w==","signatures":[{"sig":"MEYCIQDnXwbXC42eBd2I1nNkQjIVD1XIJqlIYpizF4jLd0lyUAIhANO/kmVuAyKfNr7guN88Rkms7BWvP9+4wh2GDMbqH1LC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19886},"main":"./build/mjs/index.js","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"default":"./build/mjs/index.js","require":"./build/cjs/index.js"},"gitHead":"d5d547a55b7b59bbe71afc949168f10d5a57c749","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"deprecated":"Broken distribution, due to CI/CD mistake. Use 1.16.1 instead.","repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.15.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","@babel/runtime":"^7.27.1","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","express":"^5.1.0","supertest":"^7.1.0","@babel/cli":"^7.27.2","typescript":"^5.8.3","@babel/core":"^7.27.1","@types/jest":"^29.5.14","@types/rndm":"^1.2.2","body-parser":"^2.2.0","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.1","cookie-session":"^2.1.0","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.27.2","@types/http-errors":"^2.0.4","@types/cookie-parser":"^1.4.8","@tsconfig/recommended":"^1.0.8","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.27.1","@dr.pogodin/eslint-configs":"^0.0.6","@babel/plugin-transform-runtime":"^7.27.1"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.0_1747040847841_0.8001168644765357","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"@dr.pogodin/csurf","version":"1.16.1","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.1","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"7008dd3e1368a1ca91f85abe176ef268fefe03fa","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.1.tgz","fileCount":21,"integrity":"sha512-nlpWh0ZRTmx/dd01eaeLrPdKtGJ1Cy1aGmvVzAnhaGKgfg3k1eNbET/gMQPVzlhELrT7I801m2K4XG57FJ2V+w==","signatures":[{"sig":"MEQCIB5V0wK3/bhgwbLohaOst63ZmmDYrFl0Lml3ogVy7aOsAiBGlFNotw8yCATi32fUyqglrO3d3zJK3Bae3TtZmxX07w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85867},"main":"./build/mjs/index.js","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"default":"./build/mjs/index.js","require":"./build/cjs/index.js"},"gitHead":"4a88157e5638faba9c4debb978a26c8763362040","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.15.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","@babel/runtime":"^7.27.1","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","express":"^5.1.0","supertest":"^7.1.0","@babel/cli":"^7.27.2","typescript":"^5.8.3","@babel/core":"^7.27.1","@types/jest":"^29.5.14","@types/rndm":"^1.2.2","body-parser":"^2.2.0","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.1","cookie-session":"^2.1.0","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.27.2","@types/http-errors":"^2.0.4","@types/cookie-parser":"^1.4.8","@tsconfig/recommended":"^1.0.8","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.27.1","@dr.pogodin/eslint-configs":"^0.0.6","@babel/plugin-transform-runtime":"^7.27.1"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.1_1747042648702_0.4563122802117292","host":"s3://npm-registry-packages-npm-production"}},"1.16.2":{"name":"@dr.pogodin/csurf","version":"1.16.2","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.2","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"feb47b1e7becb57583e69dc905e75feb01984287","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.2.tgz","fileCount":22,"integrity":"sha512-kVWGQ2/XFZEI6HS/pWN+sXvNbttmjBQfJ8L323yhJRDyDBB+lFWGXIBUNGJTBd+tsH6mSMIZUJgRK1eXeWPdVQ==","signatures":[{"sig":"MEYCIQD5aohoE4aXAXlyVhikaHiBR5abmg+L8KU7XFjmaxCxEgIhALlcBDgl2HySihMIl0cBgNAkrmyav1oRsYE0zLwa7XR9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85982},"main":"./build/mjs/index.js","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"default":"./build/mjs/index.js","require":"./cjs.js"},"gitHead":"ffefea9ac64c4d20ab573dfb8774cd58abd6233d","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.15.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","@babel/runtime":"^7.27.1","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","express":"^5.1.0","supertest":"^7.1.1","@babel/cli":"^7.27.2","typescript":"^5.8.3","@babel/core":"^7.27.1","@types/jest":"^29.5.14","@types/rndm":"^1.2.2","body-parser":"^2.2.0","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.1","cookie-session":"^2.1.0","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.27.2","@types/http-errors":"^2.0.4","@types/cookie-parser":"^1.4.8","@tsconfig/recommended":"^1.0.8","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.27.1","@dr.pogodin/eslint-configs":"^0.0.6","@babel/plugin-transform-runtime":"^7.27.1"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.2_1747081592203_0.04593792201344504","host":"s3://npm-registry-packages-npm-production"}},"1.16.3":{"name":"@dr.pogodin/csurf","version":"1.16.3","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.3","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"d349d01a7257fa39585106a69dae4e6334587fbe","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.3.tgz","fileCount":16,"integrity":"sha512-yoTb5czGLoDjT/eu/d3dtrV52Lxj1Kgpev/Jm46F6b9yI5HF+ufNC8VH2Ns4vJOIlJ/LvdFnjn3a6oHY3nvEHQ==","signatures":[{"sig":"MEQCIHoOlPGjnUlA7J68yKYpXxCIm9f0hqEPs9C2JCiEl47OAiBR3MdW3+H/6N2pnxAzBqpHH4gVQ6SXPCqcmMF3+CqpLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84320},"main":"./build/mjs/index.js","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"default":"./build/mjs/index.js","require":"./cjs.js"},"gitHead":"ef4ca920ae9670cc103a4ddf3fcdad10df5c1e33","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.15.1","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","@babel/runtime":"^7.27.1","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","express":"^5.1.0","supertest":"^7.1.1","@babel/cli":"^7.27.2","typescript":"^5.8.3","@babel/core":"^7.27.1","@types/jest":"^29.5.14","@types/rndm":"^1.2.2","body-parser":"^2.2.0","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.2","cookie-session":"^2.1.0","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.27.2","@types/http-errors":"^2.0.4","@types/cookie-parser":"^1.4.8","@tsconfig/recommended":"^1.0.8","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.27.1","@dr.pogodin/eslint-configs":"^0.0.6","@babel/plugin-transform-runtime":"^7.27.1","babel-plugin-add-import-extension":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.3_1747819094085_0.18491877818523283","host":"s3://npm-registry-packages-npm-production"}},"1.16.4":{"name":"@dr.pogodin/csurf","version":"1.16.4","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.4","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"bde629d94d68669b3da93e36687c43a88a61410e","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.4.tgz","fileCount":16,"integrity":"sha512-SntvLCBDa3HgF/vrblr7hWY5dqILVkcB0goVS/tXxWxAPV+PKVJycxapPEl0eq4UnKJWaa1JahE2zZ4X7rHFDA==","signatures":[{"sig":"MEQCIHK2rc6hHyEUklTCcjk2d69qFLgz83VmYuWiamcJfcrXAiBltlO1kahOdLW7eEJ4toaOLSlFtqKYJd/MJg/x0x97zQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92943},"main":"./build/mjs/index.js","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"default":"./build/mjs/index.js","require":"./cjs.js"},"gitHead":"3bbfe79503ee593dc5a91294debde5cc20fe4777","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.16.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","@babel/runtime":"^7.27.1","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","express":"^5.1.0","supertest":"^7.1.1","@babel/cli":"^7.27.2","typescript":"^5.8.3","@babel/core":"^7.27.1","@types/jest":"^29.5.14","@types/rndm":"^1.2.2","body-parser":"^2.2.0","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.2","cookie-session":"^2.1.0","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.27.2","@types/http-errors":"^2.0.4","@types/cookie-parser":"^1.4.8","@tsconfig/recommended":"^1.0.8","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.27.1","@dr.pogodin/eslint-configs":"^0.0.6","@babel/plugin-transform-runtime":"^7.27.1","babel-plugin-add-import-extension":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.4_1748038513474_0.5333678751125677","host":"s3://npm-registry-packages-npm-production"}},"1.16.5":{"name":"@dr.pogodin/csurf","version":"1.16.5","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.5","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"9e15086499e5e67f14583d47a1497e080c98da04","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.5.tgz","fileCount":16,"integrity":"sha512-XAkwy2dQdZ1Fp6ioSptF0g7KAiRpFhWs/gGppSDLsggLiFNjThFxXijAp26OENlP6EiGODe4gFGmnc/yhEH5/Q==","signatures":[{"sig":"MEUCIQCENFXNOrnbetsBsWvkqF2mtfUt/g3tkASf0i2uGQJPIAIgMns8Bzfx5CE7heNAJZuJmb95yRcPSk9xJujKlm/2vQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93202},"main":"./build/mjs/index.mjs","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"default":"./build/mjs/index.mjs","require":"./cjs.js"},"gitHead":"ae4d3f16e9e71345f5d16ad769ac16276d362096","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --out-file-extension .mjs --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.16.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","@babel/runtime":"^7.27.6","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","rimraf":"^6.0.1","express":"^5.1.0","supertest":"^7.1.1","@babel/cli":"^7.27.2","typescript":"^5.8.3","@babel/core":"^7.27.4","@types/jest":"^29.5.14","@types/rndm":"^1.2.2","body-parser":"^2.2.0","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.3","cookie-session":"^2.1.0","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.27.2","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.9","@tsconfig/recommended":"^1.0.8","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.27.1","@dr.pogodin/eslint-configs":"^0.0.7","@babel/plugin-transform-runtime":"^7.27.4","babel-plugin-add-import-extension":"^1.6.0","babel-plugin-replace-import-extension":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.5_1749544974426_0.415749572771025","host":"s3://npm-registry-packages-npm-production"}},"1.16.6":{"name":"@dr.pogodin/csurf","version":"1.16.6","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.6","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"4ae2bda785dd75d1a041c6d452c0ded0464af83b","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.6.tgz","fileCount":16,"integrity":"sha512-nUACXbE+oi3spzU0bEff2L1P2qUUuoc6ppynNqM/p7OSElSIiR3H9T4e4VIPRilUHXq6uT3C+cGfSOXt9rCU5w==","signatures":[{"sig":"MEQCIBIS2A5rpv4+EBr6u3GPaDvs75lSgSTGTip2YEI9YHNJAiAtzUwthQx5WFisPcCuAwfsLayb+0GM3Fu6e87QO4uCoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93235},"main":"./build/mjs/index.mjs","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"default":"./build/mjs/index.mjs","require":"./cjs.js"},"gitHead":"608aca67485fa18e3a0e74d5473965fcc646fac9","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --out-file-extension .mjs --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"10.9.3","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"22.20.0","dependencies":{"rndm":"1.2.0","cookie":"^1.0.2","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.0","@babel/runtime":"^7.28.4","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rimraf":"^6.0.1","express":"^5.1.0","supertest":"^7.1.4","@babel/cli":"^7.28.3","typescript":"^5.9.3","@babel/core":"^7.28.4","@types/jest":"^30.0.0","@types/rndm":"^1.2.2","body-parser":"^2.2.0","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.3","cookie-session":"^2.1.1","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.28.3","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.9","@tsconfig/recommended":"^1.0.10","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.27.1","@dr.pogodin/eslint-configs":"^0.1.0","@babel/plugin-transform-runtime":"^7.28.3","babel-plugin-add-import-extension":"^1.6.0","babel-plugin-replace-import-extension":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.6_1759966117021_0.05573459167252226","host":"s3://npm-registry-packages-npm-production"}},"1.16.7":{"name":"@dr.pogodin/csurf","version":"1.16.7","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.7","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"411f33fce6f558de17708ff1321bb83a56814239","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.7.tgz","fileCount":16,"integrity":"sha512-JsnoYHRGfmRTZeH4nlSxrdlTFZERi8VNp2KZB/prdPw/FBxI+g2sGAKvkMsGum6/LgQtBVBfWiMLEFtCf8EPTw==","signatures":[{"sig":"MEQCIDKNPtYChJmu5Gn0M2yqwNwUxb7MOBEFUqJBHwz20XQHAiAEGmygAB1yJXHP2MZZXlcEQXCGX2owmzDdqBt/eupMKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93277},"main":"./build/mjs/index.mjs","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"types":"./build/types/index.d.ts","default":"./build/mjs/index.mjs","require":"./cjs.js"},"gitHead":"861031e2a500d1a6086871ae45bbc814c7744eea","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --out-file-extension .mjs --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"11.6.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"24.12.0","dependencies":{"rndm":"1.2.0","cookie":"^1.1.1","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.1","@babel/runtime":"^7.28.4","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rimraf":"^6.1.2","express":"^5.2.1","supertest":"^7.1.4","@babel/cli":"^7.28.3","typescript":"^5.9.3","@babel/core":"^7.28.5","@types/jest":"^30.0.0","@types/rndm":"^1.2.2","body-parser":"^2.2.1","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.6","cookie-session":"^2.1.1","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.28.5","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.10","@tsconfig/recommended":"^1.0.13","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.28.5","@dr.pogodin/eslint-configs":"^0.1.2","@babel/plugin-transform-runtime":"^7.28.5","babel-plugin-add-import-extension":"^1.6.0","babel-plugin-replace-import-extension":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.7_1767154647814_0.32140963564892444","host":"s3://npm-registry-packages-npm-production"}},"1.16.8":{"name":"@dr.pogodin/csurf","version":"1.16.8","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.8","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"e98de5a6e43615306e72e7eced757a382b098468","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.8.tgz","fileCount":16,"integrity":"sha512-7PajYzNaz0yyH9CKTKcnYi4phQSeuR1oipqBS/ZF9R/IaYw1HDSZ2ScLy49jRlFFzDG4e/UiDc+WZHKnkfhtVg==","signatures":[{"sig":"MEYCIQCHWpaTog2mKi5ERVW35rdc0a3P/6g+nM2H7fgtSpGitwIhAIo2uB/77e2YDyz0iW0rIeGQIILrDVAdgtheT0XgbGq7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93928},"main":"./build/mjs/index.mjs","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"types":"./build/types/index.d.ts","default":"./build/mjs/index.mjs","require":"./cjs.js"},"gitHead":"b0ce47597a05e91ce9a38af2e6e32eeb27d05079","scripts":{"jest":"jest","lint":"eslint","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --out-file-extension .mjs --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"11.6.2","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"24.13.0","dependencies":{"rndm":"1.2.0","cookie":"^1.1.1","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.1","@babel/runtime":"^7.28.6","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","rimraf":"^6.1.2","express":"^5.2.1","supertest":"^7.2.2","@babel/cli":"^7.28.6","typescript":"^5.9.3","@babel/core":"^7.28.6","@types/jest":"^30.0.0","@types/rndm":"^1.2.2","body-parser":"^2.2.2","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.6","cookie-session":"^2.1.1","@types/uid-safe":"^2.1.5","@types/supertest":"^6.0.3","@babel/preset-env":"^7.28.6","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.10","@tsconfig/recommended":"^1.0.13","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.28.5","@dr.pogodin/eslint-configs":"^0.1.3","@babel/plugin-transform-runtime":"^7.28.5","babel-plugin-add-import-extension":"^1.6.0","babel-plugin-replace-import-extension":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.8_1768342668199_0.8150328057402649","host":"s3://npm-registry-packages-npm-production"}},"1.16.9":{"name":"@dr.pogodin/csurf","version":"1.16.9","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.16.9","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"8c26bb09a0b4bb36c2cb77c76ae9d3a8f8dec6e7","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.16.9.tgz","fileCount":16,"integrity":"sha512-JZkIAwXowBihTLKszBrsIwd2UFUwOfJkwCbFC+Q5tQJfq1CrLS5EnPCDeTRoqZpAoRXkJEjlnwHQb8Hq+uzfLg==","signatures":[{"sig":"MEYCIQCt7oYq3mNLQ+qgw3AhS34P+xJnsQ/vyMXqVHgUxThmcQIhAOCEHdcnKT1X2LyatCVTanK+9Gzu9ygP56SFDPdFG67g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93940},"main":"./build/mjs/index.mjs","types":"./build/types/index.d.ts","engines":{"node":">=20"},"exports":{"types":"./build/types/index.d.ts","default":"./build/mjs/index.mjs","require":"./cjs.js"},"gitHead":"e1841fd9165eef2d5f9b35a43cc9715210927ea4","scripts":{"jest":"jest","lint":"eslint --cache","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --out-file-extension .mjs --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"11.9.0","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"24.14.0","dependencies":{"rndm":"1.2.0","cookie":"^1.1.1","tsscmp":"1.0.6","uid-safe":"2.1.5","http-errors":"^2.0.1","@babel/runtime":"^7.29.2","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","rimraf":"^6.1.3","express":"^5.2.1","supertest":"^7.2.2","@babel/cli":"^7.28.6","typescript":"^5.9.3","@babel/core":"^7.29.0","@types/jest":"^30.0.0","@types/rndm":"^1.2.2","body-parser":"^2.2.2","@types/tsscmp":"^1.0.2","cookie-parser":"^1.4.7","@types/express":"^5.0.6","cookie-session":"^2.1.1","@types/uid-safe":"^2.1.5","@types/supertest":"^7.2.0","@babel/preset-env":"^7.29.2","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.10","@tsconfig/recommended":"^1.0.13","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.28.5","@dr.pogodin/eslint-configs":"^0.2.8","@babel/plugin-transform-runtime":"^7.29.0","babel-plugin-add-import-extension":"^1.6.0","babel-plugin-replace-import-extension":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.16.9_1774094915825_0.09696339735247594","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"@dr.pogodin/csurf","version":"1.17.0","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.17.0","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"147ebba7ac8fa65314f5cbab98832c42d3c65a8d","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.17.0.tgz","fileCount":16,"integrity":"sha512-KbrtOxxvF4Ho77O4yH3t1DQtlji0Cacj6SM2woQ3P5zcgKkFN/Mjg5OpXUxN5UMr8Hqb+zxxBG5wJr/H14P4CQ==","signatures":[{"sig":"MEUCIDXl0MetrA34JFzc8yMOBImMZfa9+8nLZqqEPlq14RVVAiEAkXXNFzc8EDIka8bbmbWCOquk5Wr4JER7FFU5dJE6MmQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92397},"main":"./build/mjs/index.mjs","types":"./build/types/index.d.ts","engines":{"node":">=22"},"exports":{"types":"./build/types/index.d.ts","default":"./build/mjs/index.mjs","require":"./cjs.js"},"gitHead":"6d36561978b64e26a0e099d2b2faa800fef71a42","scripts":{"jest":"jest","lint":"eslint --cache --cache-strategy content","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --out-file-extension .mjs --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"CircleCI","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"circleci","oidcConfigId":"oidc:639cf341-d19a-4d4f-b3fc-a198b1973f1a"}},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"11.13.0","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"24.16.0","dependencies":{"cookie":"^1.1.1","http-errors":"^2.0.1","@babel/runtime":"^7.29.7","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","rimraf":"^6.1.3","express":"^5.2.1","supertest":"^7.2.2","@babel/cli":"^7.29.7","typescript":"^5.9.3","@babel/core":"^7.29.7","@types/jest":"^30.0.0","body-parser":"^2.2.2","cookie-parser":"^1.4.7","@types/express":"^5.0.6","cookie-session":"^2.1.1","@types/supertest":"^7.2.0","@babel/preset-env":"^7.29.7","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.10","@tsconfig/recommended":"^1.0.13","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.29.7","@dr.pogodin/eslint-configs":"^0.2.14","@babel/plugin-transform-runtime":"^7.29.7","babel-plugin-add-import-extension":"^1.6.0","babel-plugin-replace-import-extension":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.17.0_1780221600292_0.9402512709487527","host":"s3://npm-registry-packages-npm-production"}},"1.17.1":{"name":"@dr.pogodin/csurf","version":"1.17.1","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"license":"MIT","_id":"@dr.pogodin/csurf@1.17.1","maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"homepage":"https://dr.pogodin.studio/docs/csurf","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"1e3388489e587dedb443320ac98705ecf76e3ff6","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.17.1.tgz","fileCount":16,"integrity":"sha512-Yn+WUd8N2PVCyF0kENq2zmUUSATqN/b0ZuKFIv2PJMw/Fu2ahiqnc/RWwlwT3gmqJZ5fjIuoz+kuY7F8rXnZaQ==","signatures":[{"sig":"MEQCIEylF7tofh/KfUKZToYvOn5miZYl3iztLa1hnFLFLhyfAiAQO4H8pRxZmlx7xbYD0jlQzF8yIFCnDyPCNaC1MZnX5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93887},"main":"./build/mjs/index.mjs","types":"./build/types/index.d.ts","engines":{"node":">=22"},"exports":{"types":"./build/types/index.d.ts","default":"./build/mjs/index.mjs","require":"./cjs.js"},"gitHead":"4db96c2471776b08e7f5a0323511c7e418cd7f79","scripts":{"jest":"jest","lint":"eslint --cache --cache-strategy content","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:cjs && npm run build:mjs","build:cjs":"rimraf build/cjs && babel src -x .ts --out-dir build/cjs --source-maps","build:mjs":"rimraf build/mjs && babel src -x .ts --out-dir build/mjs --source-maps --out-file-extension .mjs --config-file ./babel.module.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"_npmUser":{"name":"CircleCI","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"circleci","oidcConfigId":"oidc:639cf341-d19a-4d4f-b3fc-a198b1973f1a"}},"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"11.13.0","description":"CSRF token middleware for ExpressJS","directories":{},"_nodeVersion":"24.16.0","dependencies":{"cookie":"^1.1.1","http-errors":"^2.0.1","@babel/runtime":"^7.29.7","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.4.2","rimraf":"^6.1.3","express":"^5.2.1","supertest":"^7.2.2","@babel/cli":"^7.29.7","typescript":"^5.9.3","@babel/core":"^7.29.7","@types/jest":"^30.0.0","body-parser":"^2.2.2","cookie-parser":"^1.4.7","@types/express":"^5.0.6","cookie-session":"^2.1.1","@types/supertest":"^7.2.0","@babel/preset-env":"^7.29.7","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.10","@tsconfig/recommended":"^1.0.13","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^7.29.7","@dr.pogodin/eslint-configs":"^0.2.14","@babel/plugin-transform-runtime":"^7.29.7","babel-plugin-add-import-extension":"^1.6.0","babel-plugin-replace-import-extension":"^1.1.5"},"_npmOperationalInternal":{"tmp":"tmp/csurf_1.17.1_1780826567409_0.34637723915308394","host":"s3://npm-registry-packages-npm-production"}},"1.18.1":{"_id":"@dr.pogodin/csurf@1.18.1","bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"dist":{"shasum":"9e7df0c4969b0a9c963b7948f0c64fe81b0d3c9b","tarball":"https://registry.npmjs.org/@dr.pogodin/csurf/-/csurf-1.18.1.tgz","fileCount":11,"integrity":"sha512-3jtSsJq6GqC0XbufqYsdA850DJo2qS/4408VZPjWrgSyu3W+auLt6QoN/uMdRX3aH8njbckrmpUUuDw7IxTVrA==","signatures":[{"sig":"MEUCIC/4pJIV34SfALQO3mfK4ArPDVGnZ6oqGaK5mqsSrxDsAiEAmTMZ8jif0HcwWQm3YzcMfIEh3ZB0Aj1Z+34RYItpXZw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCkfa9pysnEB6Fn7fjQI6F+a1aw6wSD6PlUTX4i3fTwxwIhAIRRJU9w27HsakHuwbD85vufDA+/lxBuhOCRVXQ/M6Ux"}],"unpackedSize":60030},"main":"./build/logic/index.js","name":"@dr.pogodin/csurf","type":"module","types":"./build/types/index.d.ts","engines":{"node":">=22"},"exports":{"types":"./build/types/index.d.ts","default":"./build/logic/index.js"},"gitHead":"5f7ec011d077dc7ed4d924dbd8a7660e23ce933a","license":"MIT","scripts":{"jest":"NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest","lint":"eslint --cache --cache-strategy content","test":"npm run lint && npm run jest","build":"rimraf build && npm run build:types && npm run build:logic","build:logic":"rimraf build/logic && babel src -x .ts --out-dir build/logic --source-maps --config-file ./babel.build.config.js","build:types":"rimraf build/types && tsc --project tsconfig.types.json"},"version":"1.18.1","_npmUser":{"name":"CircleCI","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"circleci","oidcConfigId":"oidc:639cf341-d19a-4d4f-b3fc-a198b1973f1a"}},"homepage":"https://dr.pogodin.studio/docs/csurf","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"_npmVersion":"11.19.0","description":"CSRF token middleware for ExpressJS","directories":{},"maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"_nodeVersion":"24.21.0","contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"dependencies":{"cookie":"^2.0.1","http-errors":"^2.0.1","cookie-signature":"^1.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.5.0","rimraf":"^6.1.3","express":"^5.2.1","supertest":"^7.2.2","@babel/cli":"^8.0.0","typescript":"^6.0.3","@babel/core":"^8.0.0","@types/jest":"^30.0.0","body-parser":"^2.3.0","@jest/globals":"^30.5.1","cookie-parser":"^1.4.7","@types/express":"^5.0.6","cookie-session":"^2.1.1","@types/supertest":"^7.2.1","@babel/preset-env":"^8.0.0","@types/http-errors":"^2.0.5","@types/cookie-parser":"^1.4.10","@tsconfig/recommended":"^1.0.13","@types/cookie-session":"^2.0.49","@types/cookie-signature":"^1.1.2","@babel/preset-typescript":"^8.0.0","@dr.pogodin/eslint-configs":"^0.3.7","@dr.pogodin/babel-plugin-add-import-extension":"^3.0.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/csurf_1.18.1_1790036691327_0.8489669959719925"}}},"time":{"created":"2022-11-04T21:43:04.843Z","modified":"2026-09-22T00:24:51.565Z","1.11.0":"2022-11-04T21:43:05.115Z","1.12.0":"2022-11-04T23:23:06.216Z","1.12.1":"2022-11-05T11:52:38.079Z","1.12.2":"2022-12-08T23:06:16.388Z","1.12.3":"2023-03-26T13:35:21.030Z","1.12.4":"2023-03-27T11:40:14.854Z","1.13.0":"2023-06-29T10:37:17.652Z","1.14.0":"2024-10-09T08:33:02.353Z","1.14.1":"2024-11-22T23:14:40.432Z","1.14.2":"2025-04-28T10:49:03.571Z","1.15.0":"2025-05-05T17:41:58.906Z","1.16.0":"2025-05-12T09:07:28.030Z","1.16.1":"2025-05-12T09:37:28.872Z","1.16.2":"2025-05-12T20:26:32.407Z","1.16.3":"2025-05-21T09:18:14.320Z","1.16.4":"2025-05-23T22:15:13.737Z","1.16.5":"2025-06-10T08:42:54.604Z","1.16.6":"2025-10-08T23:28:37.210Z","1.16.7":"2025-12-31T04:17:27.957Z","1.16.8":"2026-01-13T22:17:48.340Z","1.16.9":"2026-03-21T12:08:35.971Z","1.17.0":"2026-05-31T10:00:00.438Z","1.17.1":"2026-06-07T10:02:47.573Z","1.18.1":"2026-09-22T00:24:51.427Z"},"bugs":{"url":"https://github.com/birdofpreyru/csurf/issues"},"license":"MIT","homepage":"https://dr.pogodin.studio/docs/csurf","keywords":["express","csrf","csurf","tokens","middleware","javascript","tools","utils"],"repository":{"url":"git+https://github.com/birdofpreyru/csurf.git","type":"git"},"description":"CSRF token middleware for ExpressJS","contributors":[{"name":"Douglas Christopher Wilson","email":"doug@somethingdoug.com"},{"url":"http://jongleberry.com","name":"Jonathan Ong","email":"me@jongleberry.com"},{"url":"https://dr.pogodin.studio","name":"Dr. Sergey Pogodin","email":"doc@pogodin.studio"}],"maintainers":[{"name":"dr.pogodin","email":"dr.pogodin+studio@gmail.com"}],"readme":"# CSURF\n\n[![Latest NPM Release](https://img.shields.io/npm/v/@dr.pogodin/csurf.svg)](https://www.npmjs.com/package/@dr.pogodin/csurf)\n[![NPM Downloads](https://img.shields.io/npm/dm/@dr.pogodin/csurf.svg)](https://www.npmjs.com/package/@dr.pogodin/csurf)\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/birdofpreyru/csurf/tree/master.svg?style=shield)](https://app.circleci.com/pipelines/github/birdofpreyru/csurf)\n[![GitHub Repo stars](https://img.shields.io/github/stars/birdofpreyru/csurf?style=social)](https://github.com/birdofpreyru/csurf)\n[![Dr. Pogodin Studio](https://raw.githubusercontent.com/birdofpreyru/csurf/master/.README/logo-dr-pogodin-studio.svg)](https://dr.pogodin.studio/docs/csurf)\n\nNode.js [CSRF][wikipedia-csrf] protection middleware for [ExpressJS].\n\n[![Sponsor](https://raw.githubusercontent.com/birdofpreyru/csurf/master/.README/sponsor.svg)](https://github.com/sponsors/birdofpreyru)\n\n### [Contributors](https://github.com/birdofpreyru/csurf/graphs/contributors)\n[<img width=36 src=\"https://avatars.githubusercontent.com/u/38814188?v=4&s=36\" />](https://github.com/cotarr)\n[<img width=36 src=\"https://avatars.githubusercontent.com/u/33452?v=4&s=36\" />](https://github.com/pietia)\n[<img width=36 src=\"https://avatars.githubusercontent.com/u/818316?v=4&s=36\" />](https://github.com/bchew)\n[<img width=36 src=\"https://avatars.githubusercontent.com/u/8205343?v=4&s=36\" />](https://github.com/mattbaileyuk)\n[<img width=36 src=\"https://avatars.githubusercontent.com/u/20144632?s=36\" />](https://github.com/birdofpreyru)\n<br />[+ contributors of the original `csurf`](https://github.com/expressjs/csurf/graphs/contributors)\n\n---\n_This is a fork of the original [csurf] package which was deprecated by its author with doubtful reasoning (in the nutshell the package was alright, but author did not want to maintain it anymore). It is published to NPM as [@dr.pogodin/csurf], its version **1.11.0** exactly matches the same, latest version of the original package, its versions starting from **1.12.0** have all dependencies updated to their latest versions, and misc maintenance performed as needed. To migrate from the original [csurf] just replace all references to it by [@dr.pogodin/csurf]._\n\n---\n\n## Content\n- [CSRF Demystified]\n- [Installation]\n- [API]\n- [Examples]\n  - [Simple ExpressJS Example]\n    - [Using AJAX]\n    - [Single Page Application (SPA)]\n  - [Ignoring Routes]\n  - [Custom Error Handling]\n\n## CSRF Demystified\n[CSRF Demystified]: #csrf-demystified\n\n**Crux of [the problem][owasp-csrf]** &mdash; if browser knows an authentication\ncookie for your domain, it may send it along with all HTTP(S) requests to your\nbackend,<sup>[&dagger;](#remark-01)</sup> even with those triggered automatically\nby completely unrelated websites; thus allowing a malicious third party to make\nauthenticated requests to your API on behalf of the user, if he has loaded their\npage into his browser (_i.e._ a bad actor does not have to know those cookies,\nit may just rely on the user's browser sending them automatically, directly to\nyour API).\n\n<sup id=\"remark-01\">&dagger;</sup> It happens if you have opted for this\n([`SameSite=None`] &mdash; bad idea), or your user uses an outdated, weird\nbrowser, as up until recently [`SameSite=None`] was the default cookie setting\n(_e.g._ [Chrome changed it to `SameSite=Lax` only in 2020](https://developers.google.com/search/blog/2020/01/get-ready-for-new-samesitenone-secure)).\nNaturally, people who selected such default behavior ([`SameSite=None`]) have\nsince moved to senior positions, and now make six numbers teaching you about\nsecurity, while you fall for the pitfalls they created (_i.e._ they selected\nthat default with tracking applications of third-party cookies in mind, and\nthey had not thought what does it mean for possible authentication applications\nof cookies).\n\n**[Three main ways to protect against CSRF][owsap-csrf-cheatsheet]**,\nimplemented by this library, in the nutshell all verify that the initiator of\nHTTP(S) requests is a part (legit or not) of your website running in the user's\nbrowser, _i.e._ it is actually able to read (or write) your cookies (as browser\nonly allows the frontend to access cookies from the same origin). Mind, speaking\nof HTTP(S) requests we actually assume that you only use HTTPS &mdash; if you\nare careless enough to permit unsecure HTTP connection to your backend,\nwhy would you care about CSRF at all?\n\n- [Synchronizer Token Pattern](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#synchronizer-token-pattern)\n  approach consists of the server generating a random token for the current user\n  session, storing it at the server side, and also passing it to the frontend\n  along with the HTML page. To make an API request the frontend is expected\n  to read that token, and to pass it back to the server as a part of the request\n  payload, or in its header. The server compares the token value received with\n  the request to the value stored at the backend for that user session, and if\n  they match it proves that the request initiator is a part of the page, able\n  to read cookies set for that origin, or the actual HTML served for that user.\n  Sure, a malicious code injected inside your page ([XSS]) will be able to do\n  just the same, and thus to bypass your CSRF protection, however if you allow\n  such injection, then there is no need to worry about CSRF protection &mdash;\n  with or without it you are fucked.\n\n  This mode of CSRF protection is provided by this library when no\n  [`cookie` option](#cookie) is set. It is also implemented somewhat smarter,\n  as instead of storing on the server side the actual tokens issued to the user,\n  it instead generates, and stores a random cryptographic secret for that user\n  session, and then uses it to generate random, signed tokens, and to later\n  verify these tokens when they are passed back to the server with API requests.\n\n- [Naive Double-Submit Cookie Pattern][owsap-naive-double-submit]\n  approach consists of the server generating a random token for the current user\n  session, and just passing it to the frontend _via_ cookie. To make an API\n  request the frontend is expected to read that token, and to pass it back to\n  the server as a part of the request payload, or in its header, while the browser\n  also includes into the request the original cookie. The server compares these\n  two token values (the one received in the cookie, with the one included into\n  the request payload or header), and if they match it proves that the request\n  initiator is a part of the page, able to read (or write) cookies set for that\n  origin. Beside the danger of [XSS] defeating this protection; if a bad actor\n  controls (or [XSS]'es) a sub-domain of protected domain, he will be able to\n  defeat it, because he can overwrite the original cookie set by the server for\n  protected domain, and thus bypass CSRF protection just by sending along with\n  request his own pair of matching cookie (token) values.\n\n  This mode of CSRF protection is provided by this library when\n  the [`cookie` option](#cookie) is set `true`. It is also implemented somewhat\n  differently, to reuse the same code and logic used for the previous mode &mdash;\n  it generates a random secret for user session (though, it is not quite a secret,\n  it does not have to be in this scenario), then it generates a matching random\n  token, signed by that secret, and it sends them both to the frontend _via_\n  two different cookies. To make requests, the frontend is expected to read\n  the token from one of these cookies, and to include it into the request payload,\n  or header. Upon receiving the request server verifies that the token received\n  in the request payload (header) is signed by the secret received _via_\n  the corresponding cookie. Once again, this check does not rely at all on that\n  &laquo;secret&raquo; being secret, it just cares whether that &laquo;secret&raquo;\n  and the token are a matching pair or not &mdash; it would provide the same\n  protection if the frontend would just pass inside the request the &laquo;secret&raquo;\n  value itself, to be directly compared to its value in the cookie.\n\n- [Signed Double-Submit Cookie][owsap-csrf-double-submit]\n  approach is essentially the same, but it requires the cookie with the token\n  to be signed and verified on the server side. This way, even if a bad actor\n  controls a sub-domain, and thus is able to overwrite the token cookie for\n  the protected domain, it will be detected by the server.\n\n  This mode of CSRF protection is provided by this library when\n  the [`cookie` option](#cookie) is set to the object with cookie configuration\n  enabling the signature (`signed` flag). Because of the way it is implemented\n  (the token in request is verified against the &laquo;secret&raquo; stored in\n  one of these cookies), it is actually necessary to sign and protect from\n  modification of that &laquo;secret&raquo; cookie, to which that\n  [`cookie` option](#cookie) is actually applied. Also, as the frontend\n  does not really need to know that &laquo;secret&raquo; to send requests,\n  it won't hurt to also opt for [`HttpOnly`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie#httponly),\n  `secure`, and other security options for that cookie, although it is not quite\n  relevant for this mode of protection to work.\n\n**The drama** around the claim of [csurf] library being vulnerable started with\n[this article, &laquo;A CSRF Vulnerability in The Popular CSURF Package&raquo;](https://fortbridge.co.uk/research/a-csrf-vulnerability-in-the-popular-csurf-package).\nThe problem is that security &laquo;expert&raquo; who wrote it does not quite\nunderstand neither CSRF protection, nor JavaScript, thus he just got confused\nwith the library implementation details, briefly explained above ¯\\\\\\_(ツ)_/¯\nEssentially, he argues that with the simple `cookie: true` setting the library\ndoes not correctly implement [Signed Double-Submit Cookie][owsap-csrf-double-submit]\nprotection, as it does not sign the cookies it sets, it does not protect\nthe &laquo;secret&raquo; cookie, and it does not check the value of cookie with\ntoken in subsequent API requests. Indeed, with that setting it correctly\nimplements a variant of [Naive Double-Submit Cookie][owsap-naive-double-submit]\nprotection, with its limitations not affecting most of simple websites.\n\nThat article ends with a misleading claim that library developers acknowledged\nthe bug, and deprecated the library because of it; while in reality the deprecation\nnote in GitHub repo read &laquo;_This npm module is currently deprecated due to\nthe large influx of security vulnerability reports received, most of which are\nsimply exploiting the underlying limitations of CSRF itself. The Express.js\nproject does not have the resources to put into this module, which is largely\nunnecessary for modern SPA-based applications._&raquo; &mdash; essentially\nsaying &laquo;the library is fine, but we do not want to spend our time replying\nto each idiot who complains about this library's vulnerabilities, without\nunderstanding the matter&raquo;.\n\nIn reality, the most dangerous moment about it was that deprecation of\nthe original library, and re-telling of that article around Internet, encouraged\ndevelopers to switch from this, long-standing CSURF library to one of many new\nCSRF-protection libraries written from scratch by different people (who don't\nnotice anything wrong about that article, thus guess their level of competence\nin the subject). This both opens opportunities for dependency poisoning\n(_i.e._ somebody creates a new CSRF-protection library with some malicious code\nembedded in), or for honest mistakes (be sure, this long standing library had\nmore eyes revising its implementation than any of its new alternatives out there).\nThat's why this fork of the original CSURF came into existence &mdash; instead\nof trying my luck with a new alternative, I just forked this time-proven library,\nreviewed its code, just in case, updated dependencies, and converted the source\ncodebase to TypeScript (just for the ease of future maintenance). The project is\nopen-source, thus everybody is welcome to additionally review it and suggest any\nimprovements or fixes.\n\n## Installation\n[Installation]: #installation\n\nRequires either a session middleware or [cookie-parser](https://www.npmjs.com/package/cookie-parser) to be initialized first.\n\n  * If you are setting the [\"cookie\" option](#cookie) to a non-`false` value,\n    then you must use [cookie-parser](https://www.npmjs.com/package/cookie-parser)\n    before this module.\n  * Otherwise, you must use a session middleware before this module. For example:\n    - [express-session](https://www.npmjs.com/package/express-session)\n    - [cookie-session](https://www.npmjs.com/package/cookie-session)\n\nIf you have questions on how this module is implemented, please read\n[Understanding CSRF](https://github.com/pillarjs/understanding-csrf).\n\nThis is a [Node.js](https://nodejs.org/en/) module available through the\n[npm registry](https://www.npmjs.com/). Installation is done using the\n[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):\n\n```shell\n$ npm install --save @dr.pogodin/csurf\n```\n\n## API\n[API]: #api\n\n<!-- eslint-disable no-unused-vars -->\n\n```js\nimport csurf from '@dr.pogodin/csurf';\n```\n\n### csurf([options])\n\nCreate a middleware for CSRF token creation and validation. This middleware\nadds a `req.csrfToken()` function to make a token which should be added to\nrequests which mutate state, within a hidden form field, query-string etc.\nThis token is validated against the visitor's session or csrf cookie.\n\n#### Options\n\nThe `csurf` function takes an optional `options` object that may contain\nany of the following keys:\n\n##### cookie\n\nDetermines if the token secret for the user should be stored in a cookie\nor in `req.session`. Storing the token secret in a cookie implements\nthe [double submit cookie pattern][owsap-csrf-double-submit].\nDefaults to `false`.\n\nWhen set to `true` (or an object of options for the cookie), then the module\nchanges behavior and no longer uses `req.session`. This means you _are no\nlonger required to use a session middleware_. Instead, you do need to use the\n[cookie-parser](https://www.npmjs.com/package/cookie-parser) middleware in\nyour app before this middleware.\n\nWhen set to an object, cookie storage of the secret is enabled and the\nobject contains options for this functionality (when set to `true`, the\ndefaults for the options are used). The options may contain any of the\nfollowing keys:\n\n  - `key` - the name of the cookie to use to store the token secret\n    (defaults to `'_csrf'`).\n  - `path` - the path of the cookie (defaults to `'/'`).\n  - `signed` - indicates if the cookie should be signed (defaults to `false`).\n  - `secure` - marks the cookie to be used with HTTPS only (defaults to\n    `false`).\n  - `maxAge` - the number of seconds after which the cookie will expire\n    (defaults to session length).\n  - `httpOnly` - flags the cookie to be accessible only by the web server\n    (defaults to `false`).\n  - `sameSite` - sets the same site policy for the cookie(defaults to\n    `false`). This can be set to `'strict'`, `'lax'`, `'none'`, or `true`\n    (which maps to `'strict'`).\n  - `domain` - sets the domain the cookie is valid on(defaults to current\n    domain).\n\n##### ignoreMethods\n\nAn array of the methods for which CSRF token checking will disabled.\nDefaults to `['GET', 'HEAD', 'OPTIONS']`.\n\n##### ignoreRequest\n\nAn optional function with the signaure `(req: Request) => boolean`.\nIf provided, the CSRF token check is skipped for every request that causes this\nfunction to return _true_.\n\n##### sessionKey\n\nDetermines what property (\"key\") on `req` the session object is located.\nDefaults to `'session'` (i.e. looks at `req.session`). The CSRF secret\nfrom this library is stored and read as `req[sessionKey].csrfSecret`.\n\nIf the [\"cookie\" option](#cookie) is not `false`, then this option does\nnothing.\n\n##### value\n\nProvide a function that the middleware will invoke to read the token from\nthe request for validation. The function is called as `value(req)` and is\nexpected to return the token as a string.\n\nThe default value is a function that reads the token from the following\nlocations, in order:\n\n  - `req.body._csrf` - typically generated by the `body-parser` module.\n  - `req.query._csrf` - a built-in from Express.js to read from the URL\n    query string.\n  - `req.headers['csrf-token']` - the `CSRF-Token` HTTP request header.\n  - `req.headers['xsrf-token']` - the `XSRF-Token` HTTP request header.\n  - `req.headers['x-csrf-token']` - the `X-CSRF-Token` HTTP request header.\n  - `req.headers['x-xsrf-token']` - the `X-XSRF-Token` HTTP request header.\n\n## Examples\n[Examples]: #examples\n\n### Simple ExpressJS Example\n[Simple ExpressJS Example]: #simple-expressjs-example\n\nThe following is an example of some server-side code that generates a form\nthat requires a CSRF token to post back.\n\n```js\nimport cookieParser from 'cookie-parser';\nimport csrf from '@dr.pogodin/csurf';\nimport bodyParser from 'body-parser';\nimport express from 'express';\n\n// setup route middlewares\nconst csrfProtection = csrf({ cookie: true })\nconst parseForm = bodyParser.urlencoded({ extended: false })\n\n// create express app\nconst app = express()\n\n// parse cookies\n// we need this because \"cookie\" is true in csrfProtection\napp.use(cookieParser())\n\napp.get('/form', csrfProtection, function (req, res) {\n  // pass the csrfToken to the view\n  res.render('send', { csrfToken: req.csrfToken() })\n})\n\napp.post('/process', parseForm, csrfProtection, function (req, res) {\n  res.send('data is being processed')\n})\n```\n\nInside the view (depending on your template language; handlebars-style\nis demonstrated here), set the `csrfToken` value as the value of a hidden\ninput field named `_csrf`:\n\n```html\n<form action=\"/process\" method=\"POST\">\n  <input type=\"hidden\" name=\"_csrf\" value=\"{{csrfToken}}\">\n  \n  Favorite color: <input type=\"text\" name=\"favoriteColor\">\n  <button type=\"submit\">Submit</button>\n</form>\n```\n\n#### Using AJAX\n[Using AJAX]: #using-ajax\n\nWhen accessing protected routes via ajax both the csrf token will need to be\npassed in the request. Typically this is done using a request header, as adding\na request header can typically be done at a central location easily without\npayload modification.\n\nThe CSRF token is obtained from the `req.csrfToken()` call on the server-side.\nThis token needs to be exposed to the client-side, typically by including it in\nthe initial page content. One possibility is to store it in an HTML `<meta>` tag,\nwhere value can then be retrieved at the time of the request by JavaScript.\n\nThe following can be included in your view (handlebar example below), where the\n`csrfToken` value came from `req.csrfToken()`:\n\n```html\n<meta name=\"csrf-token\" content=\"{{csrfToken}}\">\n```\n\nThe following is an example of using the\n[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) to post\nto the `/process` route with the CSRF token from the `<meta>` tag on the page:\n\n<!-- eslint-env browser -->\n\n```js\n// Read the CSRF token from the <meta> tag\nvar token = document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n\n// Make a request using the Fetch API\nfetch('/process', {\n  credentials: 'same-origin', // <-- includes cookies in the request\n  headers: {\n    'CSRF-Token': token // <-- is the csrf token as a header\n  },\n  method: 'POST',\n  body: {\n    favoriteColor: 'blue'\n  }\n})\n```\n\n#### Single Page Application (SPA)\n[Single Page Application (SPA)]: #single-page-application-spa\n\nMany SPA frameworks like Angular have CSRF support built in automatically.\nTypically they will reflect the value from a specific cookie, like\n`XSRF-TOKEN` (which is the case for Angular).\n\nTo take advantage of this, set the value from `req.csrfToken()` in the cookie\nused by the SPA framework. This is only necessary to do on the route that\nrenders the page (where `res.render` or `res.sendFile` is called in Express,\nfor example).\n\nThe following is an example for Express of a typical SPA response:\n\n<!-- eslint-disable no-undef -->\n\n```js\napp.all('*', function (req, res) {\n  res.cookie('XSRF-TOKEN', req.csrfToken())\n  res.render('index')\n})\n```\n\n### Ignoring Routes\n[Ignoring Routes]: #ignoring-routes\n\n**Note** CSRF checks should only be disabled for requests that you expect to\ncome from outside of your website. Do not disable CSRF checks for requests\nthat you expect to only come from your website. An existing session, even if\nit belongs to an authenticated user, is not enough to protect against CSRF\nattacks.\n\nThe following is an example of how to order your routes so that certain endpoints\ndo not check for a valid CSRF token.\n\n```js\nimport cookieParser from 'cookie-parser';\nimport csrf from '@dr.pogodin/csurf';\nimport bodyParser from 'body-parser';\nimport express from 'express';\n\n// create express app\nconst app = express()\n\n// create api router\nconst api = createApiRouter()\n\n// mount api before csrf is appended to the app stack\napp.use('/api', api)\n\n// now add csrf and other middlewares, after the \"/api\" was mounted\napp.use(bodyParser.urlencoded({ extended: false }))\napp.use(cookieParser())\napp.use(csrf({ cookie: true }))\n\napp.get('/form', function (req, res) {\n  // pass the csrfToken to the view\n  res.render('send', { csrfToken: req.csrfToken() })\n})\n\napp.post('/process', function (req, res) {\n  res.send('csrf was required to get here')\n})\n\nfunction createApiRouter () {\n  const router = new express.Router()\n\n  router.post('/getProfile', function (req, res) {\n    res.send('no csrf to get here')\n  })\n\n  return router\n}\n```\n\n### Custom Error Handling\n[Custom Error Handling]: #custom-error-handling\n\nWhen the CSRF token validation fails, an error is thrown that has\n`err.code === 'EBADCSRFTOKEN'`. This can be used to display custom\nerror messages.\n\n```js\nimport bodyParser from 'body-parser';\nimport cookieParser from 'cookie-parser';\nimport csrf from '@dr.pogodin/csurf';\nimport express from 'express';\n\nconst app = express()\napp.use(bodyParser.urlencoded({ extended: false }))\napp.use(cookieParser())\napp.use(csrf({ cookie: true }))\n\n// error handler\napp.use(function (err, req, res, next) {\n  if (err.code !== 'EBADCSRFTOKEN') return next(err)\n\n  // handle CSRF token errors here\n  res.status(403)\n  res.send('form tampered with')\n})\n```\n\n<!-- References -->\n\n[@dr.pogodin/csurf]: https://www.npmjs.com/package/@dr.pogodin/csurf\n[csurf]: https://www.npmjs.com/package/csurf\n[ExpressJS]: https://expressjs.com\n[owasp-csrf]: https://owasp.org/www-community/attacks/csrf\n[owsap-csrf-cheatsheet]: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html\n[owsap-csrf-double-submit]: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#signed-double-submit-cookie-recommended\n[owsap-naive-double-submit]: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#naive-double-submit-cookie-pattern-discouraged\n[`SameSite=None`]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Set-Cookie#samesitesamesite-value\n[wikipedia-csrf]: https://en.wikipedia.org/wiki/Cross-site_request_forgery\n[XSS]: https://owasp.org/www-community/attacks/xss\n","readmeFilename":"README.md"}