{"_id":"pg-server","_rev":"8-3d58f94cf398e1e465f291e0a58ea551","name":"pg-server","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.0":{"name":"pg-server","version":"0.1.0","author":"","license":"ISC","_id":"pg-server@0.1.0","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gadz.org"}],"dist":{"shasum":"ec7476cf7db305475809378c639228d8ea2fd5d2","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.0.tgz","fileCount":18,"integrity":"sha512-ZwsBEhOU51FJ1o6gehKRcOvWe+RojNA6OteJJTck6cETfnTlmEWaAHH/YFZCKC9IlGdn+ycobINuVnD4Lzctaw==","signatures":[{"sig":"MEUCIQD0+V1aUwe1FCY+/lzVKEjjJW4gqX91/vHnAFsY86s6PAIgY83eokRxpa4WbvDwaDJVolWM18TUhkLXDkMhKWPlhCM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62263,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHDZLCRA9TVsSAnZWagAAf3YP/jOIR/CrDX4nXsFok2fl\nRj+k9S9FflurjwbUQQZAHiOAMu4YPcjpJMvV4Dplax/fT4uPdPO0E8o+nWVc\ndqguVQkLPeQm4AldLV/MimKxnp4mhNCV4Wfg3WyUuOXRK72+mllqm0psM6lD\n5MIALPs4UQKvPH4xd9s83TozVRmSayu+JoHNxqfCuS5UOxw2iBPtcrNSNusO\nuvM0CaH5b5ooAzYL8I3jy6xiYdhMUxtswtgPYH5FcLQncsp3tPoUJDxRrgpR\n/AtOU5V7+KY8kr0+iQCZfYRM/oDoSBuyFU+6GlvGI+G6eIL068/Ot7rOEGom\n8q6z2gA0ch4iIraJt4lBEgRKf2BbRGVmZJ1S38Qd+oWn9suMD32Uf6o9oaQ1\nJmJLb1Ek7s88DFLqunfD3lJEcgMXvKP1a3xutvcnDqPtMbYcuUm1OQlxgKtZ\nblIfQxZWnzY3sxky66KlH5a/cIEkg6JQ/lTZVkOYsPPcZga3I5n3UkY7rskN\niY6oLfgvBMcN/dijRgCgS37ijjNCDwzzFRsGqyK2Ln2xe61ZPZ41b2uHdTdo\nzwg9+T0uphaQ2jrI+tOqh6G7/d3/9VRFviFsXeoAOK0vfzNwuLm4ytKu3T8y\noVdtuJB87o0WcubjT9L8ShcLYP6+X2Se0tukvq+BZuPnkMYZm4/vOfTHkQ9c\nKLCa\r\n=j34Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"6fb948387f80188db46beb0a43b98aea4354482c","scripts":{"dev":"ts-node-dev --inspect=4321 --respawn --transpile-only _test.ts","build":"tsc --project tsconfig.json","release":"git diff --exit-code && npm run build && cp package.json lib/package.json && npm publish lib","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gadz.org"},"_npmVersion":"6.14.6","description":"Postgres server emulation or proxying","directories":{},"_nodeVersion":"12.18.3","dependencies":{"pg-protocol":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.5.1","ts-node":"^9.1.1","@types/pg":"^7.14.9","typescript":"^4.1.3","@types/node":"^14.14.22","ts-node-dev":"^1.1.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19"},"_npmOperationalInternal":{"tmp":"tmp/pg-server_0.1.0_1612461642491_0.5303550843535754","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"pg-server","version":"0.1.1","author":"","license":"ISC","_id":"pg-server@0.1.1","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gadz.org"}],"dist":{"shasum":"6f4119fb4ba143a2bb761e822d62a43c1c44f2ab","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.1.tgz","fileCount":49,"integrity":"sha512-DDqR7lnxMwHjcN0tfVWPpRpLXN9EJwvrANo0jD/rbEIzKMnLeEYORTs4QbteiNvekHl9/88NVyG1vrbOlbKxZw==","signatures":[{"sig":"MEQCIE4cXCnN6uZuaLohKHkVQAIXnKLiVpDr9bYdvelK+GlMAiBr44AFs//0z0aluDw3PDWEWLbA2BPwgitVrSxNOkehUw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":118657,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHDbKCRA9TVsSAnZWagAACF8P/1feYXYvRvrCb6uLze7x\nazkVzs7WAV3y7vK9qVEgD5PWtBR+W4O5UnS9F9P4F0hg65oZCBdB9xJZYwho\nFKk6HGcgjoiPv92s1Xo1M4wToG5D5RZpTuHTNvccFfvVIV+9WdJOKRBpycFF\n1o0jB2/tG8pEWs+dxAMSfjLTUa8glXIRzowQzsDC/3bxDcIo5m7oM6I3n9EV\nRdjXrUmUvwHNU7yY3Wn6de9QBr189YCiFezY6+WOWtpCpQaKzUQ1r9XtlUyy\nbNvw2yG2mroJxW2EbeRM+uGyGOMq/H8R0oeQ4nxILmuhei2hLnm6MZlVwrEe\nE2vxd8JIXToTe0cbmKDag/q0u8NiPCPJFr0Np+194OPXjwH23KOdweXW/y2h\nkZrUDV7K5HDEgf0MaSHP1pJssSxtoTlfoktVQ0YDFiStPPmBY+g9NYoo8Sy8\nZZ6hhtnecfBeb+fduJaPISP35ZjxkEJUymr/kD4gfAk1Z81R2XjDtNNOxo5P\n/D8Vc71RwQDcTUvXv7+gdlJy+65zBdmbl10adr3jL6xXfY/sNQFDEv20cYrF\ncpVVHfM9sElwmZFFYJDUVz3D9nVk4osBgdg47fY3nw+0pK8QQRiorXa9x1ga\nRMAGC7+qp1CLeSEzolZp7y9ikrbc5X9xoLH7unGVMrewp8v8XQKkUwOH+dOj\npOPA\r\n=mTJB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"dev":"ts-node-dev --inspect=4321 --respawn --transpile-only _test.ts","build":"tsc --project tsconfig.json","start":"node server.js","release":"git diff --exit-code && npm run build && cp package.json lib/package.json && npm publish lib","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gadz.org"},"_npmVersion":"6.14.6","description":"Postgres server emulation or proxying","directories":{},"_nodeVersion":"12.18.3","dependencies":{"pg-protocol":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.5.1","ts-node":"^9.1.1","@types/pg":"^7.14.9","typescript":"^4.1.3","@types/node":"^14.14.22","ts-node-dev":"^1.1.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19"},"_npmOperationalInternal":{"tmp":"tmp/pg-server_0.1.1_1612461769916_0.23321104950611593","host":"s3://npm-registry-packages"}},"0.1.2":{"name":"pg-server","version":"0.1.2","author":"","license":"ISC","_id":"pg-server@0.1.2","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gadz.org"}],"dist":{"shasum":"fb628e5d1307eb68c4aa82a8a4442fe427391605","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.2.tgz","fileCount":49,"integrity":"sha512-tdcUFgzb1z4n7nMy/OczLAk61an/iyhW6avamKlzWesU1PPnI3DSsIln8jOG7xzKKjmEbG2heCncsi3ByqEdJw==","signatures":[{"sig":"MEUCIQDuvm4nWC2iYKePXRLhtBvYpB0PgFHYp+uz9Yw+VTFnWQIgUNadWUNtl5ubXSqOTZ27iqmsWQBR74sC28DEebaTm9s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":118659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHDcjCRA9TVsSAnZWagAAEwoP/i5fVXxMY42jQw8gU7z4\nTt5dnlWAl+g+QW9K9ZuQMRzRJ/4+NPAFkxAAwqLFcw9yCgR++34O09A+J/XI\nL4uawxBQ/NgvTdzVO3RSrDZpy/ZSqbhMXDzpH3mjrz96wlJufDD0dGwj2Uhu\nNmIlKlInPra1RsFOP/0Zab+7gmWHmOSsYZHHFWxFfBax9QN9mJJKqHShRZXh\nZOtLxl3KUwYq3oIt3CsXImPTsOOFBbZJtIks+sjEJ/7RBCLp9BYCOBFKjo4g\njx5vtpUqXWMbwr8TFHKJINcrUhHMoxmZWSnfPde6q0j6rsgyzX58yc2ZTP0F\nNVw0N9yCuF7WrRlXHaI3dpx+xmrFYlLalND9LcZmuVW1spOH14tq+9wjYQoL\nGogeOCkJu75vlmWkw58rKGws08pe4dd8AHrRIbTYF9DGon9HtvIgU4C6B8Mk\nov8sYknp2P130xA9BGjG8R2WbVNes+E6igM3BXIwvpHnRoOPc99v+CtMWfKI\nQCCDx6KHOnpIvGqA32BsXUDBR/7swn8RTCmsBrXINl83e8IdxR6mr7ogFvH6\nL0EQlVBGVWhS/VWwj9jmdY2Vd7T3pFb/d3x5rysV+Oj/wCPae5wQJkvT5fGH\nu/Rz/udTouDBOkxJvkueVEooYiAxl9G99b1k0oiCMeMCgk+AxdgvouBr4ZGK\n6AKu\r\n=BuqG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"dev":"ts-node-dev --inspect=4321 --respawn --transpile-only _test.ts","build":"tsc --project tsconfig.json","start":"node server.js","release":"git diff --exit-code && npm run build && cp package.json lib/package.json && npm publish lib","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gadz.org"},"_npmVersion":"6.14.6","description":"Postgres server emulation or proxying","directories":{},"_nodeVersion":"12.18.3","dependencies":{"pg-protocol":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.5.1","ts-node":"^9.1.1","@types/pg":"^7.14.9","typescript":"^4.1.3","@types/node":"^14.14.22","ts-node-dev":"^1.1.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19"},"_npmOperationalInternal":{"tmp":"tmp/pg-server_0.1.2_1612461858991_0.7908566514855588","host":"s3://npm-registry-packages"}},"0.1.3":{"name":"pg-server","version":"0.1.3","author":"","license":"ISC","_id":"pg-server@0.1.3","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gadz.org"}],"dist":{"shasum":"623b9dd1cecc695b3f64787c1c8a5f2634d8c5d4","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.3.tgz","fileCount":49,"integrity":"sha512-JmfGwnW9lGdeIpATz2456nk3sugpzcEYmUBR1FggMapbnE+YyFV3Eal5lCu/gm1w0VddQ7IXZW8MQyiRLXd0xw==","signatures":[{"sig":"MEUCIDKOWMLull9B/RNCpXtv1XdahXpawztQ+IbfJQucp36qAiEA/N6XGdSI/jNv5E5TbRfSXWPCvrCO59WSa1/PMz5typI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":118662,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHDdMCRA9TVsSAnZWagAAAeMQAIyuBU6Mj8229mdf7zGD\nD/lpemLmLL/7BSu3lM+z/wEHpenjZ9i8bufmi6KcKvMles5yEwXAjabPd2mQ\nAmB0/uH9bdlVpINFfuSZAui3xeh2Ir15KLB6pNHcvvbgdMrqwMPW1jfcntQ4\n6etAAQi2z2AncdNvAa14qSdsElVdIUPsPSoUU6b0apbkDoc/aBfIxwYHKsR8\n8AfZ1KXE42xLoOBgWCpkXP6BfonwyDDDWZ15TB20XC7o4ZeU+BYUJIxLx+mr\nqeQ8moYatS95eDeMjrIjzqk/5WiZwQmc47I3bJZj5czuw6sKMlOGqCxsPN98\nIaBqbgtRSQ7uCOalXDaQcn2O0BG5aHk4B8yqmsePjNuQ0/DDI49vQJXxT+jL\n7Iq/G4lTlnHsRDA0t60qgsBUBsa0JJPyjzqLGXr/sweeg+NcUCn6SXBrQ78x\nUYpl8hjN3J/oRle5OK3BPRRHZQa81OLEHEIKGFxwAe4ylCB8zX4ymXALOH35\nyTin1fCbGScHXHSGSZcNlv8VL1FPZehFLIzUDbLoqmIUoKKCatuLnRIgpBMv\nkltREaNL1JLOINLi4L+rJUEsS7RWUfYCbM9hUgwIGUpOIyBOB8SuhNRl8A83\nDCRY8C2OPKAzHbSpAzjB5hTt7ABUlQatukRw3JWgD9xuQ02RgnAFudknETeE\nR/HD\r\n=rNby\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"dev":"ts-node-dev --inspect=4321 --respawn --transpile-only _test.ts","build":"tsc --project tsconfig.json","start":"node server.js","release":"git diff --exit-code && npm run build && cp package.json lib/package.json && npm publish lib","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gadz.org"},"_npmVersion":"6.14.6","description":"Postgres server emulation or proxying","directories":{},"_nodeVersion":"12.18.3","dependencies":{"pg-protocol":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.5.1","ts-node":"^9.1.1","@types/pg":"^7.14.9","typescript":"^4.1.3","@types/node":"^14.14.22","ts-node-dev":"^1.1.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19"},"_npmOperationalInternal":{"tmp":"tmp/pg-server_0.1.3_1612461899837_0.7090670511151824","host":"s3://npm-registry-packages"}},"0.1.4":{"name":"pg-server","version":"0.1.4","keywords":["postgres","postgresql","database","db","emulator","server","honeypot","proxy","pg-mem","pgsql-ast-parser"],"author":"","license":"ISC","_id":"pg-server@0.1.4","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gadz.org"}],"dist":{"shasum":"61a96d1f84156ad98958d61ee4483ebe382734d0","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.4.tgz","fileCount":49,"integrity":"sha512-ItdAXAVJVR2XvKv1QlsUQGhrESl8yJk8cc6+N4OZF82IUBC129A4MG5qDWihEvhLj+e/G6oMk3SmeEXqZ5mD0A==","signatures":[{"sig":"MEQCIClJyyDtTyyIku0+ttGbgNiOBJcyM7gbrXoKS6tMVeJaAiBQg8JlrBJU9oV9Dx64elXaWCPQhiII6Hukh50ETGlWSg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":119591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHEc7CRA9TVsSAnZWagAAGtYQAJoSTgOihrdnD7vrEqvL\nyp6m/+bDuCDInjeP4t1YYpEXuV0T7UiMjg1P3zml4vtG0dr8Lwm7uhm89bG+\nik7EFa/N0WZcKpK7lExdCXlEb5nUDBt1Gy1InsGDZBF1VQRWF18N7je09uj7\nYV0IVFNWl+7xl7oadMJPF6go9skQNwMOxAk2Rwqo6QCIRNlJHXq49Qi3buHN\n26EyDRWyO/uos/iM9TiPjuThEh2q+56M5p+ueJu1Okhi+zxdWPmlG4S2qldE\nck5Qvbyt8qB63nA8EEjK+Ekqp8pFs3g37hlDeDjBnvgzai7Tesk/4afrfsic\nSc9YNwykZRIUFIAVagg6PFuKKjkATIIGVulQX5L060n2Fd5D3Rv19xKZOPQr\nWwlsbPd0SU35dmXJ5Ec8dCQIAdwEoi421u4DK5fKY2tq5c4qaSwONMiG9dHK\ncsB3XqqJl7F221kKURdkT/qQm+BUYrxFQDDjcS5Vhf9A4EZmVNNBRp/9Lkoi\nabODRPmVArYZs1gLB9/HDayTPd8kUC20aBLpfLYmNNMBjc0rp/bd+xDoQBKE\nzjcdpnIyvdYLiVcuYG1lkVW89TkaE9FMIVmWw3Lij04VpqFWfvsmhh4gbinP\nyoUdUM3b7lIw9ZE8n8Ql2ggDA7ODYqXdpOIgDJWJJbt+wL+3VEk+x+3tM9Rl\nbtDH\r\n=EoHC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"dev":"ts-node-dev --inspect=4321 --respawn --transpile-only _test.ts","build":"tsc --project tsconfig.json","start":"node server.js","release":"git diff --exit-code && npm run build && cp package.json lib/package.json && npm publish lib","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gadz.org"},"_npmVersion":"6.14.6","description":"Postgres DB server emulator, proxy or honeypot","directories":{},"_nodeVersion":"12.18.3","dependencies":{"pg-protocol":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.5.1","ts-node":"^9.1.1","@types/pg":"^7.14.9","typescript":"^4.1.3","@types/node":"^14.14.22","ts-node-dev":"^1.1.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19"},"_npmOperationalInternal":{"tmp":"tmp/pg-server_0.1.4_1612465979163_0.8637171516562661","host":"s3://npm-registry-packages"}},"0.1.5":{"name":"pg-server","version":"0.1.5","keywords":["postgres","postgresql","database","db","emulator","server","honeypot","proxy","pg-mem","pgsql-ast-parser"],"author":"","license":"ISC","_id":"pg-server@0.1.5","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gadz.org"}],"dist":{"shasum":"12dd42f16ff029ff2f7088742c349bb93075e294","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.5.tgz","fileCount":50,"integrity":"sha512-VEubLgB0CHcfS0L8av92wugGdsmJzsiBntuOQ02Xk0EMYCqxxA1rMqMUxYuJOQLJLeELO2yHZyRnuJwB2+ksAw==","signatures":[{"sig":"MEUCIQDpMKzkB+UKt1kFKPZtS1RtuTANOT8rFVlpQBUTeDTjwgIgFTtcIjIvHXo0uocF2xOCKnsxO+RnpPGv7AGPoKoeDZE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":126963,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIYgcCRA9TVsSAnZWagAAonkP/1pr0eDXYb86diqz/Zv3\ns5oLO6//cd2h7MLMEuLNXzKR9KV8M/h7bMpIIBTA1U648XEZtZVhpSyt8JfD\nNKVD0HMbVKzGBGnGKQtmtW3etfQ8eouK+10WSgQCLsagUYMEu34ti/l/f4gf\nxyk3QxEaofb7/E7FQ0cSrbIsOxTZT7TTLyhzISSV900KcHgGgNrlH0nBp9Gc\nB7SrWe9jc2msXx1+kiFi0XBX6gg/YXFKHOpJCR1bC8TwVd2dY3WW+N+OjM0D\nJ4UMSXRvgBUdhfDASD65HEi0yQ5Hj0Nd2vriknto6mTU56uYxTiOfO266WMn\n0YySv/WzpqHeub2XHWzFkANr6ftgzCJTqDwFQpaxcG+TJBTbSkN8czeqfMZQ\n59p8KnWQbn4uTij3/7hmTYWBcfYRBgdwrqdzvbCSZ8qk7sf6DdP2zx5CWDiO\nx0f+DerdZeGxrsYu6ZWpzE7wgk5k/Cc+jiW5AXCBQvNOwLmOMwmglaGGarEA\n+QrUHf3Nx1OxBION2kmE4G+Y4ggBtMqBeW+Y7edlqRUg++W0/oM9EjTRfqky\nC+wVGwGm7u7pHT9QMtDXK0/+2Eh2hLaNtXmaGatNO+y9fl+DFIMo36ACk+iG\nho9+3qHugWGUhJMJbv/tbt41Pzk2VO5xqpxinYnZYalzHAJKZm3xs0Xsf+ru\nt3QK\r\n=YvtR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"dev":"ts-node-dev --inspect=4321 --respawn --transpile-only _test.ts","build":"tsc --project tsconfig.json","start":"node server.js","release":"git diff --exit-code && npm run build && cp README.md lib/readme.md && cp package.json lib/package.json && npm publish lib","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gadz.org"},"_npmVersion":"6.14.6","description":"Postgres DB server emulator, proxy or honeypot","directories":{},"_nodeVersion":"12.18.3","dependencies":{"pg-protocol":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.5.1","ts-node":"^9.1.1","@types/pg":"^7.14.9","typescript":"^4.1.3","@types/node":"^14.14.22","ts-node-dev":"^1.1.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19"},"_npmOperationalInternal":{"tmp":"tmp/pg-server_0.1.5_1612810267473_0.2213312144790176","host":"s3://npm-registry-packages"}},"0.1.7":{"name":"pg-server","version":"0.1.7","keywords":["postgres","postgresql","database","db","emulator","server","honeypot","proxy","pg-mem","pgsql-ast-parser"],"author":"","license":"ISC","_id":"pg-server@0.1.7","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gmail.com"}],"dist":{"shasum":"7656ff984f0a2a617b674b3055d44a9dcf6aa851","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.7.tgz","fileCount":50,"integrity":"sha512-b9FFomjkCXIzs95bBLcHhnyuF9SC+BeAVl4GcWjSlIartB/hV7mbAvfFeSzp+LPeqag5IQ7guzlnQh89G76XFQ==","signatures":[{"sig":"MEQCIB23nH1V49eerePUAvNwGQQgWnFq8U6r6+cp5re4dpL4AiBhgJ/jvXfuFXuF1aSsh6MKnB5oi1+Zjl1ntsf1CzNsTQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":129297},"main":"index.js","types":"./index.d.ts","gitHead":"815a6d047344d734921b27040f121097ff4535b3","scripts":{"build":"tsc --project tsconfig.json","start":"node server.js","release":"git diff --exit-code && npm run build && cp README.md lib/readme.md && cp package.json lib/package.json && cd lib && npm publish","typecheck":"tsc --project tsconfig.json --noEmit"},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gmail.com"},"_npmVersion":"8.19.4","description":"Postgres DB server emulator, proxy or honeypot","directories":{},"_nodeVersion":"16.20.2","dependencies":{"pg-protocol":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"pg":"^8.5.1","ts-node":"^9.1.1","@types/pg":"^7.14.9","typescript":"^4.1.3","@types/node":"^14.14.22","ts-node-dev":"^1.1.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19"},"_npmOperationalInternal":{"tmp":"tmp/pg-server_0.1.7_1722894215078_0.8479677173364284","host":"s3://npm-registry-packages"}},"0.1.8":{"name":"pg-server","version":"0.1.8","description":"Postgres DB server emulator, proxy or honeypot","keywords":["postgres","postgresql","database","db","emulator","server","honeypot","proxy","pg-mem","pgsql-ast-parser"],"main":"index.js","scripts":{"typecheck":"tsc --project tsconfig.json --noEmit","build":"tsc --project tsconfig.json","release":"git diff --exit-code && npm run build && cp README.md lib/readme.md && cp package.json lib/package.json && cd lib && npm publish","start":"node server.js"},"author":"","license":"ISC","devDependencies":{"@types/node":"^14.14.22","@types/pg":"^7.14.9","pg":"^8.5.1","pgsql-ast-parser":"^4.1.8","source-map-support":"^0.5.19","ts-node":"^9.1.1","ts-node-dev":"^1.1.1","typescript":"^4.1.3"},"dependencies":{"pg-protocol":"^1.4.0"},"types":"./index.d.ts","gitHead":"f5205aabf13993f76aab2bf8d33c154d655c6d92","_id":"pg-server@0.1.8","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-iSgMkGSJsRlXrOaM/W1bPEbf0BKbprKsyTidKrGSDkQfZdBiA6aAhaWB80ectwt/JZBeiwIkkIFCKLTEYSnE1Q==","shasum":"7db88dbfbc43b273d9e8f8fe23da22c5dd0ffaad","tarball":"https://registry.npmjs.org/pg-server/-/pg-server-0.1.8.tgz","fileCount":50,"unpackedSize":129535,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDjtE8U0ccd8igoU7tb/eecB+yO2wnBQ2gYLzjMgoLiygIgYbkreeV/39y0pEI7/3t/WclDWqJbhnOXFxGDXYL5lT0="}]},"_npmUser":{"name":"oguimbal","email":"olivier.guimbal@gmail.com"},"directories":{},"maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/pg-server_0.1.8_1722930981734_0.699957046140621"},"_hasShrinkwrap":false}},"time":{"created":"2021-02-04T18:00:42.491Z","modified":"2024-08-06T07:56:22.088Z","0.1.0":"2021-02-04T18:00:42.666Z","0.1.1":"2021-02-04T18:02:50.102Z","0.1.2":"2021-02-04T18:04:19.149Z","0.1.3":"2021-02-04T18:04:59.994Z","0.1.4":"2021-02-04T19:12:59.370Z","0.1.5":"2021-02-08T18:51:07.662Z","0.1.7":"2024-08-05T21:43:35.273Z","0.1.8":"2024-08-06T07:56:21.881Z"},"license":"ISC","keywords":["postgres","postgresql","database","db","emulator","server","honeypot","proxy","pg-mem","pgsql-ast-parser"],"description":"Postgres DB server emulator, proxy or honeypot","maintainers":[{"name":"oguimbal","email":"olivier.guimbal@gmail.com"}],"readme":"\n<p align=\"center\">\n  <a href=\"https://npmjs.org/package/pg-server\"><img src=\"http://img.shields.io/npm/v/pg-server.svg\"></a>\n  <a href=\"https://npmjs.org/package/pg-server\"><img src=\"https://img.shields.io/npm/dm/pg-server.svg\"></a>\n  <!-- <a href=\"https://david-dm.org/oguimbal/pg-server\"><img src=\"https://david-dm.org/oguimbal/pg-server.svg\"></a>\n  <img src=\"https://github.com/oguimbal/pg-server/workflows/CI/badge.svg\"> -->\n</p>\n\n\n <h3 align=\"center\">\n pg-server is a postgres server emulator allowing you to <b>proxy, honeypot, filter, or emulate</b> an actual Postgres server\n </h3>\n\n\n <h4 align=\"center\">\n Best used with\n  <a href=\"https://github.com/oguimbal/pg-mem\">pg-mem</a> and/or <a href=\"https://github.com/oguimbal/pgsql-ast-parser\">pgsql-ast-parser</a> 😉\n </h4>\n\n# Table of contents\n\n- [🔌 Usage: As a proxy](#-usage-as-a-proxy)\n- [💻 Usage: As a Postgres server emulator](#-usage-as-a-postgres-server-emulator)\n- [📚 Some literature](#-some-literature)\n\n\n\n# 🔌 Usage: As a proxy\n\nLet's say that you want to proxy a real postgres server instance, and let filter only requests that access a given table.\n\npg-server contains a small utility that abstracts away most of the heavy lifting and which lets you listen/intercept requests.\n\n```typescript\nimport {createSimpleProxy, ISimpleProxySession} from 'pg-server';\n\n\nconst server = createSimpleProxy(\n    // The DB that must be proxied\n    { port: 5432, host: 'localhost' }\n\n    // A new session context\n    //  (one will be constructed for each connection)\n    , class implements ISimpleProxySession {\n        // An optional handler which will be called\n        //  on each new connection\n        onConnect(socket: Socket) {\n            console.log('👤 Client connected, IP: ', socket.remoteAddress);\n        }\n        // A handler which will be called for each sql query\n        onQuery(query: string) {\n\n            // Ok, proceed to this query, unmodified.\n            // You could also choose to modify the query.\n            return query;\n            // ... or return an error\n            return { error: 'Forbidden !' };\n        }\n});\n\n\n// listen on localhost:1234\n// ... which will now appear as a postgres db server !\nsever.listen(1234, 'localhost');\n```\n\n## Example: Analyze & Intercept some queries\n\nYou can use [pgsql-ast-parser](https://github.com/oguimbal/pgsql-ast-parser), another library of mine, to parse the inbound requests in order to decide if you'd like to forward them to the actual sql server.\n\nFor instance, to only allow simple select requests without joins on a given set of tables, you could do something like that:\n\n```typescript\nimport {createSimpleProxy, ISimpleProxySession} from 'pg-server';\nimport {parse, astVisitor} from 'pgsql-ast-parser';\n\n\nconst server = createSimpleProxy(\n    // The DB that must be proxied\n    { port: 5432, host: 'localhost' }\n    , class implements ISimpleProxySession {\n        onQuery(query: string) {\n\n            // parse the query & check it has only one query\n            const parsed = parse(query);\n            if (parsed.length !== 1) {\n                return { error: 'Only single queries accepted' };\n            }\n\n            // check that it is a select\n            const [first] = parsed\n            if (first.type !== 'select') {\n                return { error: 'Only SELECT queries accepted' };\n            }\n\n            // check that it selects data from \"some_public_table\" only\n            let authorized = true;\n            astVisitor(m => ({\n                tableRef: r => authorized = authorized\n                    && !r.schema\n                    && r.name === 'some_public_table',\n            })).statement(first);\n            if (!authorized) {\n                return { error: `You're note supposed to be here :/` };\n            }\n\n            // ok, proceed to this query, unmodified.\n            return query;\n        }\n});\n\nserver.listen(1234, '127.0.0.1');\n```\n\nTest it:\n\n```typescript\nconst client = new require('pg')\n      .Client('postgresql://user:pwd@localhost:1234/mydb')\n\n// this works:\nawait client.query('select * from some_public_table')\n// this fails:\nawait client.query('select * from other_table')\n```\n## Advanced proxy\n\nThe `createSimpleProxy` abstracts away lots of things.\nIf you wish to have a more fine grained control over which data is exchanged, you can use `createAdvancedProxy()` (refer to the types, and to the [\"Some literature\"](#-some-literature) section below to understand how it works).\n\n# 💻 Usage: As a Postgres server emulator\n\nYou could expose a brand new fake postgres server to the world, without an actual postgres datbase server. As [a Honeypot](https://en.wikipedia.org/wiki/Honeypot_(computing)), for instance.\n\nYou could also simulate a postgres db, for which you could use [pg-mem](https://github.com/oguimbal/pg-mem), another lib of mine which simulates a db in memory.\n\n## Simplified interface\n\nTODO\n\n## Advanced interface\n\n`createAdvancedServer()` gives you full control over commands received/responses sent. Only use this if you know the pg protocol a bit.\n\nExample:\n\n```typescript\nconst server = createAdvancedServer(class implements IAdvanceServerSession {\n    // An optional handler which will be called\n    //  on each new connection\n    onConnect(socket: Socket) {\n        console.log('👤 Client connected, IP: ', socket.remoteAddress);\n    }\n\n    // A handler which will be called on each received instuction.\n    onCommand({ command }: DbRawCommand, response: IResponseWriter) {\n        // use the \"response\" writer\n        // to react to the \"command\"  argument\n    }\n})\n\nserver.listen(1234, '127.0.0.1');\n\n```\n\n\nIf you would like your postgres server on a custom already open socket, you can also use the `bindSocket()`, of which `createAdvancedServer()` is just a wrapper.\n\n## With pg-mem\n\nTODO\n\n\n# 📚 Some literature\n\n- [awesome-honeypots](https://github.com/paralax/awesome-honeypots) A list of honeypots\n- [simple & extended queries](https://blog.hackeriet.no/Simple-and-Extended-postgresql-queries/) A very short explanation about query modes\n- [postgres on the wire](https://www.pgcon.org/2014/schedule/attachments/330_postgres-for-the-wire.pdf)  55 slides about the postgres protocol\n- [Protocol flow](https://www.postgresql.org/docs/13/protocol-flow.html) The official procol explanation\n\n\n# Todo\n\n- SSL support (protocol version 1234.5679 on init)\n- Simplified interface\n","readmeFilename":"readme.md"}