{"_id":"@observablehq/database-proxy","_rev":"33-448e4b05ba2f401cf40c77f30e36e35b","name":"@observablehq/database-proxy","dist-tags":{"mssql":"2.1.0-mssql.0","databricks":"3.1.0-databricks.0","latest":"4.0.0"},"versions":{"1.0.0":{"name":"@observablehq/database-proxy","version":"1.0.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@1.0.0","maintainers":[{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"bin":{"observable-database-proxy":".bin/observable-database-proxy"},"dist":{"shasum":"4cebf773543624d7031d2c18987a10135ef6bb23","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-1.0.0.tgz","fileCount":12,"integrity":"sha512-TMLczJWIRo+Cm4b3fBN0IhAulaKKXVr7Ajfezq2c/tU1tEi6sWxKPRucVaW2PjfZ6tQTjVjwBsADYq9FccV7ag==","signatures":[{"sig":"MEUCIQDPcfAvFArVA+2gZNq7U0nVkfg/oHgKrkX4786ojiDHRgIgQCqIVWdVEE+/4/+mIVQJ8uUNmdd7viUU+vO6yaP4hVc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKMaxCRA9TVsSAnZWagAAOIEP/RBK/eOetnzBwUsQKHXr\nYB5A/y3BdKEeo7MyQihPMPlw8TNfQJU5vhqUMXdbCGkMksc+6LBqHEpZwQG5\nw/7uqCqnG6YqkTmUzdWKNTEIqtpQ+R+ogU7GrUIzuXPsU6JDKlTWKZwTgBlv\n28oVh8IvcD2/r26dHZrpGMEovCsz8udeb6EPqYwH9FNcjraMNdgrsktfzB/m\nJm24CrSGa85AEwFo8pqN5JAITXiJUGh+c+TZ+Qn7ybIWeuFx82uhPKnfpth/\nURSMbZRY8m/E5ckzAEFRL2kfOEars9nL0x747d8YUL00WjbVLH7FVDmQje2f\n6b4ltztP2izJfDySf6LvmCbpMgegQRr5hmFJz3XpRf1niQDLjCr3nMZcFEQQ\nejH0Z/hCs5eINLAyvH+uMPJm7JEfIKjz7hJDoJSGNYuEYFtPYgSVrJq6JEqr\nCydUs6Tpfy7VjOgaXH0emzw2tZJeY8bAmHLSk9D+xjg7wJ5eLV7j4eCgo8xa\nhzhI5dgqru2uGjhJQ8kwSLYbA2qI/07k1hAgIHaCME83P/lUPi33RJNK5DUH\nta2RFQOFrsTsHBg5TsqPOT+dB3DAQ3RfrdNVrnAEw0BK2bQeleLDukYxCpAB\n1QxHyHsGKb50tLax5vfyxp2sSrkGs105/XKyUnDTaIHEZabCddYmwIL57bk8\nbQQq\r\n=5vi0\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"17c6f1be5e70674093eecf1b2789759228cf68d4","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy","test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_npmVersion":"6.9.0","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"10.16.0","dependencies":{"pg":"^7.11.0","esm":"^3.2.25","open":"^6.3.0","micro":"^9.3.4","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","pg-query-stream":"^2.0.0","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^1.19.1"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_1.0.0_1562953393183_0.3238437683675517","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@observablehq/database-proxy","version":"1.0.1","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@1.0.1","maintainers":[{"name":"jashkenas","email":"jashkenas@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"tmcw","email":"tom@macwright.org"}],"bin":{"observable-database-proxy":"./bin/observable-database-proxy"},"dist":{"shasum":"58cbdc41064921fe969fe4f160f71605ce41c0a8","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-1.0.1.tgz","fileCount":12,"integrity":"sha512-JjuJ2ed0HeFPNkigAKD4G/r4gyWd8uZR+TG4vrDvGqDvI33j5SGMCcgKzgHBMXEHv25exnuweSVsMZFKK6z8zA==","signatures":[{"sig":"MEUCIQDUtvokxXwZ4brLTlrAh0dviQj1pWKRUNwjVOmW8AOpCAIgIwovs6JziZ4RuJ3LbbS2JUP91Ooh/gk0AJWgvUDV7Ws=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":19740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKMiZCRA9TVsSAnZWagAAWx0P+QGXcUrik3ayqS4FCP8M\nODEBZHV6OS4HkAbDCLt+B9UA+drORJtdyOvl6AmwKJptJLA90s3pg+nwjzPS\n9/tsOMlMcaG6l/g2Bb6XcGhrE83XeGTlJvB5f/AECbm+Cng6OzeQYPbgMgHf\nO63QtrSfvQFW3MVPdrs0Fw3MCvBaiyiUm7kekcXCtf/DZzfYMhiq8CQHgQRh\nw/rUrYlFj4UwNnd8aaY2hXsK9XpWEHlXJAAjZMBFe2CJ7AgHN247IDRr0wWs\nX2IC8OaLXAEEnmAS7IoLS0kYhuniPK+f5ponBpw97K98hBJ0dwWOqcjFvUry\ngqw3UX1Xv6wfqsUUTcAwKDzCfTlUD1msh4TAJW46X20pBSEnOMW2yLCJ+7NN\nsnF4IcCaqilDjwOIaUly3tGL0tD5s8h5QTlSxsNdsQBzqxXqLpsUqssVAcXn\nbkeYK6UZtssncsNOyJo+ekg1n0nVWaaXYd1zMSs2OkGEUJv7wuXD5rbMqgUS\nfyy+GdA/POKJHYfSGK4y6duHM+AGyE+95zEKy/Mh3SGg0Yy50zCCuvdCncXg\n02TnWo+0wCIyokEPaJjAA/CBtv8egbkYM894KQJPZZLrZTPIoEl2xYsBHfOl\nUMZboX/hDWnIxmS3nb3dN5Tfc/ibvUuG4za0/EkZyS3btBITVfvE9FmTGxYi\n/xbu\r\n=4OL/\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"61bfeddb3935cb4d60935044ff3a7cfe035e3c6a","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy","test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_npmVersion":"6.9.0","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"10.16.0","dependencies":{"pg":"^7.11.0","esm":"^3.2.25","open":"^6.3.0","micro":"^9.3.4","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","pg-query-stream":"^2.0.0","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^1.19.1"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_1.0.1_1562953881078_0.8582391135681062","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@observablehq/database-proxy","version":"2.0.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@2.0.0","maintainers":[{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"},{"name":"duaneobservable","email":"duane@observablehq.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy"},"dist":{"shasum":"dc0b0c4ed069ffdbda7b1d1f8bc448ae1b64705d","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-2.0.0.tgz","fileCount":14,"integrity":"sha512-QEX4ExVZ1jvaj7xgjkMW433mtbZl7CBTT5WJuADoUn2dURjp5r8woWmBI/pDbK869jzL+lXRthykeA8Xx9S0vg==","signatures":[{"sig":"MEUCIQCkEwIo8TUWy6JRDTumPVdS3rLjFywzJg8SnqFkgXXsFAIgX2mLg1x/oDBcRmVxFpvLTq5XsdTFMGcEkK1PNUb5AeY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":23569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2T+VCRA9TVsSAnZWagAAMNEP/22Fgt5fiUY6Hr2AGGAO\nGS5ply1yC55dPEdNzxtgEyTFsYP00yo73PfQ+XDJ39PNtPNyblFio85NNQ08\nzv1v9rONKI94+kEKoeMZ8BvCUdEXeW1mOdkcfSa7kFWStGMZ9UoerXUZoRIj\ncIEByJT+7ZoPXQUEkFsIoi63EpctNLjVX01eS7Xa40pCfAlVMpE5Zn88zC0J\nCjSCgVJsPLn6D04tXkIFkb1IDdXErVLFLRkQoBidpHGdpei5HUq6QK9MCGRq\nvurdFAUwcwNJIMTmiKIhpjvdy2HUtasd6WO6hxpUp7m6HEW+LOnklJmd2jvK\nHVyDuPo8mQsXmCbOW/mw2Rui6pq0vAi/3IPgp6e29VUE7fY7xB2EXGTHWLe6\n7CegMMGWhA1uO70Q4u3kVf7u073w7Qs1YQULV7QAJam54lpnZDiPidS4+KuE\nbI0uaRXgw6EidJ3L4ekOzU0/Ue+9Gr9fYeTU1s5A9dny/kxSuo8HDmUzTyJo\nR2gIqjGrgw+IAPR2wT+bH2d9tx430/6UVjtI8/KPJmGZAPRe3z7sKH4chY62\n6Aty1wker/vBiCww8HIZf/UOrzbqPQvAWRMNKmLGdm2TNFQVp3iBqL1aRMKA\nddDt4/KhVSRjL8QocZ4Q0md0zY2LaiXReuLtZC8JM46myzDIDnC2908Rvd6K\nNKSj\r\n=vIEh\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"6a0eba0f8da314da5e8f3b2594224a55d2a9e63f","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy","test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"visnup","email":"visnup@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"6.14.14","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"14.17.5","dependencies":{"pg":"^8.7.1","esm":"^3.2.25","open":"^6.3.0","micro":"^9.3.4","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^1.19.1"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_2.0.0_1629821746792_0.9927561623370897","host":"s3://npm-registry-packages"}},"2.1.0-mssql.0":{"name":"@observablehq/database-proxy","version":"2.1.0-mssql.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@2.1.0-mssql.0","maintainers":[{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"sydneypalumbo","email":"sydney@observablehq.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"},{"name":"duaneobservable","email":"duane@observablehq.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"e1a583d06bc0a14d455fbb54f5d1ee98cc0665fa","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-2.1.0-mssql.0.tgz","fileCount":25,"integrity":"sha512-EmU16p+xJOykXSCDFfxsX7gBodUPCNrmhkbURlHE4zFEFkdDwI1cwznrnHyQyRfmZ4FUAucghfwAk8hk4BkdiA==","signatures":[{"sig":"MEUCIAdGkeKS6dSNR4+priPE4K2iJ7NQ1gI8WrNlch3qNyX1AiEA8YhWS6fXr+z5Fea42DyPYQ4XLIfg8GUunfJG/eVKfEk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8548626,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjaqCAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrfPA/9Gk14d6FVF2yT3O50TfO19p912lWhAwYhaDZZ5CrDw5XbfxVj\r\nLBKLDlx40QghDEnl2wIbUEAb4et5MDANeOdeggV228ZyVs5farSowAM2tk47\r\nKKSytexmvM+g5gRbLT/vwKvnSHxruTEq2fWlba+xNxtLRtIyPYD1cJhxFfXr\r\naHYHStrAekwf/kmAxBunP1YfowJ5E8bP5oHl6XTJ7Tk1dAZYtftVX2PQIvlC\r\nytreNAsaMkfgJCiD7PZXxJv6JjiyFk+D/CyBIjbvTL1+UhDQ7phpSIDGSRT4\r\nTQsGGjuBBbl6705Cchc0/m0SVa7ah6FLr8P9M8bE3p0UYjmGvj3p6q9XxwqO\r\n7EBjc5BBAy7J1HKX0X0Q6pO/MENKrHwJ8WZgboCMnh8fn2v+kqdLAjWhvss/\r\nglsKfC7EDSqbfuvVYhsNYwT2+2+SJDaDJc74HaIRvmrtoCKUQ2JzBocYCuvt\r\nikgE6MTz0VZU8ODqeKs0GmUKtt6BpBmXD7I5gNX6OwGtljX+MmyU4urH8rac\r\nTrAMJ36CRpkrIbOanwuvrkbVXS4JpuSKjdL2+5TIDkRw+gFMzLz4u1mWsnBg\r\n/VHSadsxqJ2hIZsHWUu28X42AuSg2oTcMIp0bZgxZMGQl7sKBsw+4oouw3ey\r\n1eBmenVx7It1o0rdnsz4L224NddNOPvRXRY=\r\n=D0X4\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","readme":"# @observablehq/database-proxy\n\nThe database proxy is a simple Node.js webserver that accepts secure requests from your Observable notebooks, and proxies queries to a PostgreSQL or MySQL database — one that is not necessarily exposed to the web. You can use the database proxy to securely connect to databases on your local computer, on an intranet or within a VPN.\n\n## Installation\n\nInstall the database proxy locally or globally with `npm` or `yarn`:\n\n```\n  npm install -g @observablehq/database-proxy\n  yarn global add @observablehq/database-proxy\n```\n\n## Running the database proxy\n\nUsage: `observable-database-proxy <command> <name> [options]`\n\nCommands:\n\n- `start <name> [ssl options]` Start a database proxy server\n- `add <name>` Add a new database proxy configuration\n- `remove <name>` Remove an existing database proxy configuration\n- `reset <name>` Reset the shared secret for an existing database proxy configuration\n- `list` List all configured database proxies\n\nWhen adding a database proxy configuration, a window will be opened to ObservableHQ.com to configure the connection in your Database Settings and set the shared secret. Subsequent starts of the database proxy do not require re-configuration.\n\nExamples:\n\n```\n  $ observable-database-proxy start localdb\n\n  $ observable-database-proxy add localssl\n  $ observable-database-proxy start localssl --sslcert ~/.ssl/localhost.crt --sslkey ~/.ssl/localhost.key\n```\n\n## Configuration storage\n\nAll proxy configuration is stored in `~/.observablehq`. You can delete the file to remove all of your database proxy configuration at once.\n\n## SSL Certificates\n\nIf you’re using Chrome or Edge, and running the database proxy on your local computer (at 127.0.0.1), you can connect to it directly with HTTP — there’s no need to set up a self-signed SSL certificate for the proxy.\n\nIf you’re using Firefox or Safari, or if you wish to run the database proxy on a different computer on your intranet, you can create a self-signed SSL certificate and configure the database proxy to use it in order to proxy over HTTPS. Be sure to “Require SSL/TLS” in the Observable configuration, and specify the `--sslcert` and `--sslkey` options when running the database proxy.\n\n## Using from notebooks\n\nAfter the proxy is running, in one of your private notebooks, use `DatabaseClient(\"name\")` to create a database client pointed at your local proxy. When querying, your data and database credentials never leave your local computer. Please check [this notebook for more information on how to use it from Observable](https://observablehq.com/@observablehq/self-hosted-database-proxies)\n","engines":{"node":">=14.19.0"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js"},"gitHead":"470fca838e411975ff150df155925bef93cc9e43","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"visnup","email":"visnup@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"8.19.2","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"18.12.1","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^9.0.1","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_2.1.0-mssql.0_1667932288612_0.9817332478423313","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"@observablehq/database-proxy","version":"3.0.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@3.0.0","maintainers":[{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"sydneypalumbo","email":"sydney@observablehq.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"},{"name":"duaneobservable","email":"duane@observablehq.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"bb35d8c4d788ad3d58da20fe7fd1f23535b39fb8","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-3.0.0.tgz","fileCount":25,"integrity":"sha512-ziUbJ2mMbhY+mBgy+iq3TpUzayGPl6eLzMfykOzwrPIHw/aJnRlIxwlUeFOQJD3zFrXL25YrMY6b2OWP5Jb/pQ==","signatures":[{"sig":"MEUCIHaos503omY13YMXxywf1SzBLXAdb0HdQ1jlmsdK+4MTAiEAiYZo9txQ9E2r32nJRWXtsFXBX/DOAKVjCCKvpn9Z5CU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8551291,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjdofyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpVUQ/+KZ52+nkHHnkTkpCE5iFJ4sj8BFmKbKo6LKxcp0NLdku8TSwN\r\ndP1Y8XTR0PoW9cvjkHTUVPG+iVhF69CXG6SqV1+a11OjiGsCKVuQUF81jmXQ\r\nqSMJjyyYHxAIndp/k+LkGQ6O+HEdCihQkZN4Xk3mwhOQh9ZGyGYPZ7ppPYJR\r\n65osH/KNEqFRSZX6sVVbG5PO7fvCWJSjcutHN2B2vgFHqJx5ZwYgIndiBH/I\r\n/WCS6J8m1uv1hWia5f2bmqWYv6cuMMyrOdD0RkWNmLyzNBG0nlWN2Dl3EZyW\r\nkZ86qfgFNbZPjliHV3baY4TfVE+ER996Tbu1xL9WsPEVkglR8R6HqL6iH5jT\r\ni3BsnYNB+aIVoXILypwZJGHvuNrIRkLx6eZUKiQtF/HFeuD1gO55Ae18xoc0\r\n6OdYqXTxqM2BTeqHLHBZLs9gsgGjbSvEJJLbsX8rqrsVBga8VwXNOZJG7XQ9\r\n9PJRXfO7qQ8XjShWXse7LV7dX05rtRPTZEKEU4Ntxu4apNiSONoly5Kmq6le\r\nVb7ryfsUbacedSq49hl9Doq9xgz9N8lBWACY6htSnbb0mJdbTg3wIKQeYkE/\r\nzrbRKPEbjNLpdlPkV5sdTDlknWm//CP2zFpsv4on7oJmPfYFTFICE23/ivYK\r\nMHhXC6qfuP4kVvoakX8GtLWMdbZsU/9YKF0=\r\n=ggnD\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","engines":{"node":">=14.19.0"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js"},"gitHead":"533b228320ef9f7b4d34e962ec28ddb345c20b38","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"visnup","email":"visnup@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"8.19.2","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"18.12.1","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^9.0.1","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_3.0.0_1668712434381_0.8957668486104842","host":"s3://npm-registry-packages"}},"3.1.0-databricks.0":{"name":"@observablehq/database-proxy","version":"3.1.0-databricks.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@3.1.0-databricks.0","maintainers":[{"name":"recifs","email":"fil@rezo.net"},{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"},{"name":"duaneobservable","email":"duane@observablehq.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"91081b6c2e1ec84aaabd5d5b39cbf1055531950a","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-3.1.0-databricks.0.tgz","fileCount":28,"integrity":"sha512-vnGNFltYPqZdvPD1OOFoSw2xjMjPtfo4xeKd+W0AzLND2OYcp1k7vP1VqqV7uXDbIcMhoYwQ4nrWFAc/tiwcnQ==","signatures":[{"sig":"MEUCIGSHYxWIWVtgWYilDuP+1OHULTO7DtVShjsYOCBxgEMhAiEAwc2KqFqmSTuIMluxGuQwx44dteh2jugCT1bcmPIEx4I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8569349,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjvcBMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmomDBAAo0PEkevW8yhRPVvBCfHxWDZ5cLt2SL2DH4u1F3CxvLS9UgaM\r\niJfqH43wn3PwAoruAVn0wv9B6YZpZfRHPi1+Yhk4Pa0qjxYJs7TYC+WhIHiG\r\n+AJDZW3o9kZLL5D+NjW217ictDxhuxeJliriLlDH7mcl0JpY2AaClEwUqjoh\r\ngHsHvuVNVnzv4voqkhTHza5QljSF4SNDwGrS1ycbTJ6IqrIVgXMG1zMw3NnI\r\nW/z3lXuGOGO7CnLb8EqG2McopjGuDSIHfRarpWI8fTK/A2+bzRZToiJrsaUM\r\nfXCCcd53sUeDMEyvknmgSenwYyKRgEeULMOqEwV8ym3BIYo8pAEiMJ96AgSF\r\nfn8kgSphQaqdHrXTgi+YdpOEZG08LJnkqAMUZ1qac4vc4K+GX721frDw11BQ\r\ntYCA0HQMjIhv+wcm4w2Oz+RRK2lW7MpbUWboPVjQgbHwbK2RoPQoC9EOBq2e\r\nQ/1aTqknFBEC6qIyBhaRZOmbTFbjl0cjFqioC8mxls6GQFRGBWc6k0McK4LF\r\n0XgoxJ2SeMzHv/yq8pysvHKKvNYcnEyVZbkGYGdmkh45klbko3cWKdrzxc8/\r\n5tMxCL9nv5apFBEgT2EtGmMc1ducr4ICH1iqw5FohHWNnAwP1bez9vB6S5B1\r\n57ZAEn9d9zdaHMPDGJn+8Wmfm+jbC7ADjd8=\r\n=kkmg\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","readme":"# @observablehq/database-proxy\n\nThe database proxy is a simple Node.js webserver that accepts secure requests from your Observable notebooks, and proxies queries to a PostgreSQL or MySQL database — one that is not necessarily exposed to the web. You can use the database proxy to securely connect to databases on your local computer, on an intranet or within a VPN.\n\n## Installation\n\nInstall the database proxy locally or globally with `npm` or `yarn`:\n\n```\n  npm install -g @observablehq/database-proxy\n  yarn global add @observablehq/database-proxy\n```\n\n## Running the database proxy\n\nUsage: `observable-database-proxy <command> <name> [options]`\n\nCommands:\n\n- `start <name> [ssl options]` Start a database proxy server\n- `add <name>` Add a new database proxy configuration\n- `remove <name>` Remove an existing database proxy configuration\n- `reset <name>` Reset the shared secret for an existing database proxy configuration\n- `list` List all configured database proxies\n\nWhen adding a database proxy configuration, a window will be opened to ObservableHQ.com to configure the connection in your Database Settings and set the shared secret. Subsequent starts of the database proxy do not require re-configuration.\n\nExamples:\n\n```\n  $ observable-database-proxy start localdb\n\n  $ observable-database-proxy add localssl\n  $ observable-database-proxy start localssl --sslcert ~/.ssl/localhost.crt --sslkey ~/.ssl/localhost.key\n```\n\n## Configuration storage\n\nAll proxy configuration is stored in `~/.observablehq`. You can delete the file to remove all of your database proxy configuration at once.\n\n## SSL Certificates\n\nIf you’re using Chrome or Edge, and running the database proxy on your local computer (at 127.0.0.1), you can connect to it directly with HTTP — there’s no need to set up a self-signed SSL certificate for the proxy.\n\nIf you’re using Firefox or Safari, or if you wish to run the database proxy on a different computer on your intranet, you can create a self-signed SSL certificate and configure the database proxy to use it in order to proxy over HTTPS. Be sure to “Require SSL/TLS” in the Observable configuration, and specify the `--sslcert` and `--sslkey` options when running the database proxy.\n\n## Using from notebooks\n\nAfter the proxy is running, in one of your private notebooks, use `DatabaseClient(\"name\")` to create a database client pointed at your local proxy. When querying, your data and database credentials never leave your local computer. Please check [this notebook for more information on how to use it from Observable](https://observablehq.com/@observablehq/self-hosted-database-proxies)\n","engines":{"node":">=14.19.0"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./oracle.js":"./lib/oracle.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js","./databricks.js":"./lib/databricks.js"},"gitHead":"77a4c66a897ee0fb083d2630b3cdaed7bfc11394","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","start":"nodemon bin/observable-database-proxy.js","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"visnup","email":"visnup@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"8.19.3","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"18.13.0","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^9.0.1","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","@databricks/sql":"git+https://github.com/observablehq/databricks-sql-nodejs.git","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4"},"peerDependencies":{"oracledb":"https://github.com/oracle/node-oracledb/releases/download/v5.5.0/oracledb-src-5.5.0.tgz"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_3.1.0-databricks.0_1673379915838_0.7514941668245416","host":"s3://npm-registry-packages"}},"3.1.0":{"name":"@observablehq/database-proxy","version":"3.1.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@3.1.0","maintainers":[{"name":"recifs","email":"fil@rezo.net"},{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"},{"name":"duaneobservable","email":"duane@observablehq.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"ae56f6e730cff0e51b5f2ff649e21cfb0f7df942","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-3.1.0.tgz","fileCount":28,"integrity":"sha512-zQHM49kMQ7wdmDmw3rawSqx5HwqR2aBFFZL5FhigJHzMmrCAePWKbk8SEyo+8ClihrJcbClvgaCkjOagypS49Q==","signatures":[{"sig":"MEQCIGhHw78F1Xo5Mjp6YGPEmaVjMEgq1G7u2i7QSpHJ1RcrAiBDcUlDdGiXTVcbdjZdz+u437d1m7e/A3IJzrnAH8/QXg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8570505,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyF3iACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr9cA//elT33IGUBQpsQD7+i3BARwRcf/oNbXEpu9qYMTWPvNpgbeXD\r\nz2TtAibzAxu0DRKdAjXLqKc/NDowrkleZnxjv7O07EBGy91hVqbSDVvC2sph\r\nqJkk0hCn2OxmhwcmQtbr7jedjERgnfQTCJY1k3LG8U1Z5nOs0u9OmytpXjOT\r\n/Mt6vIxhmmzu7658U8/qUkRNbTRSAgsZyAgLFVUv0DebnfGavvMEKeIJOslv\r\ns1rqKA7hAE4o+v1/dU+IIssiQRGfxuGX8KiXOVGIIBoIleGdSRdK0Y1xvxwA\r\n0h+k02FsGNMOp1yhv7COalspyhqm921+l+pUwr+WCwSYi6Q3zVQ3nZrtDkGs\r\nfph9woVtjlRBY/yMsTf0mb8ECB1qTqD9HcDsgIazoYJVibQA+4kWWoHVSsao\r\nY98Ya2Uto7//ITKUYpVsIcvFv9Obf3WasGMN8G8xYlxOYFW91WOdtIu04IKx\r\nqb+fUtEh/fGMYgc5gP5Thmic+cKI5P+z3jdz5doWgOzgmVWSm9GFmS2A7Hdo\r\nTSn+oqZmHXZnCtjtsXIK1lL5fwUKWTy4TpXAKZe7q5/pa8vSqulhB5iJ+gCj\r\nF2gwmdEEke7wEVRGAXqH6e6PYwMtfL5vkT2rXwZiBltVbH6il6TFrymrvm2n\r\nmMKOU/KBPmr5AORf/O1G7o/Qy0po27ZwJkk=\r\n=rU08\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","engines":{"node":">=14.19.0"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./oracle.js":"./lib/oracle.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js","./databricks.js":"./lib/databricks.js"},"gitHead":"c4737ddf99bd443ab603e90e7c5b3e43943c65bc","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","start":"nodemon bin/observable-database-proxy.js","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"visnup","email":"visnup@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"8.19.3","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"18.13.0","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^9.0.1","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","@databricks/sql":"git+https://github.com/observablehq/databricks-sql-nodejs.git","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4"},"peerDependencies":{"oracledb":"https://github.com/oracle/node-oracledb/releases/download/v5.5.0/oracledb-src-5.5.0.tgz"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_3.1.0_1674075618421_0.3641990679914824","host":"s3://npm-registry-packages"}},"3.2.0":{"name":"@observablehq/database-proxy","version":"3.2.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@3.2.0","maintainers":[{"name":"recifs","email":"fil@rezo.net"},{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"},{"name":"duaneobservable","email":"duane@observablehq.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"a5a17ad21de8e31518fbafe3e7b0d3099344e563","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-3.2.0.tgz","fileCount":28,"integrity":"sha512-TWln0TGSiDcVmKlG0KCXWdsjamGo8+Msdr+n64/ijfknemdSgd2F2KqIm/5dZW9P+86tvk/XdjQFAkt5ftVkSA==","signatures":[{"sig":"MEUCIQCL3Ad5g4LexLETcC5utJniI4hFgCd1NdaOcZUHkx3jngIgL2v1YgLXsS+r9WYkJiTN3U7FiSPrnWCBHzBRnOaANpo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8572005,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyYnSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZdw//aGWXxKwe+55TuWRQOZj90ZVw/zqyg5GSwAOhFGBilA6FoUkj\r\nsSlouF5KWAAFpXQy17T586Xsgz6SbYgia2CiRinaBCI2wolUMKfBEpM6cfZN\r\ngOum53uD7chJVsHLMsGp/gmdf/OSJSJKqEYtMAUngafz7K15t+yiR2CQQvq9\r\nt/ULZn6NS/BaRSQPKHLaDJ/ELtD9M42yPx/4ZaqaEIpVTXfBYsG75QHufRwG\r\n5bOGf0lVwcancIVkiEkNxuH+4GAOUTpueK7YZ9I8Ha20myGwcGDDzmulwGzT\r\nVBBwGFMQakmrc5Moaj2ULJBNwPl2PIW7QPH2KIVxQUnCT4G6NtKLIqhR0skd\r\nSpkBjODeNgD+AUjuLMQnccTfRMRvISXXI6UMIOfMI5PKBnXVGMa+dRtLuUDp\r\ndlxJhOcJW6qXulpDnTcaVY2nN55BcRLN+iGq5oHkHDLtX1ZfXeBTN9oOy7Y1\r\n7QKKTgMbLP2dB3O7ika2X44sVIOzcdNtYLho/+ga1WFMPtou1H+HIw1y/x+a\r\n+aOeR/nTot0viF5jIfQ66CVtpA6Lc12Q1oUwb/+n8i8DYVttZ/f3I3MILL24\r\nl4aHpkyqdTW9aQNGNYeJSfEI/0+uTDLm/keizzKE1dMOVb/6MuknCrDCV+i1\r\n9179rx5ZjCNP6j+lm8yn6w9iulbgpQ26Wkg=\r\n=d5Pa\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","engines":{"node":">=14.19.0"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./oracle.js":"./lib/oracle.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js","./databricks.js":"./lib/databricks.js"},"gitHead":"50c5c94050db17f5c953a8e578b93e5ae96834c9","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","start":"nodemon bin/observable-database-proxy.js","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"visnup","email":"visnup@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"8.19.3","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"18.13.0","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^9.0.1","mysql":"^2.17.1","yargs":"^13.2.4","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","@databricks/sql":"git+https://github.com/observablehq/databricks-sql-nodejs.git","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4"},"peerDependencies":{"oracledb":"https://github.com/oracle/node-oracledb/releases/download/v5.5.0/oracledb-src-5.5.0.tgz"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_3.2.0_1674152402387_0.9150942068897112","host":"s3://npm-registry-packages"}},"3.3.0":{"name":"@observablehq/database-proxy","version":"3.3.0","author":{"name":"Observable"},"license":"ISC","_id":"@observablehq/database-proxy@3.3.0","maintainers":[{"name":"sylvestre67","email":"sylvestre.gug@gmail.com"},{"name":"recifs","email":"fil@rezo.net"},{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"},{"name":"duaneobservable","email":"duane@observablehq.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"138cda22586582479720f53cbb6939c5c5464ad4","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-3.3.0.tgz","fileCount":37,"integrity":"sha512-b8LIk2Kw8YhAODiv4d0iBjtqcxM/1k80HNX5WFfjr0HbKhcfMNzhuXxq4Iyk106C1fPahgu3hqIxFC4WBCwHlg==","signatures":[{"sig":"MEQCICs+WNTu6B24595REIjSj+Bj0GA33SU8Vs5AjcfoY+2iAiAZa9bfhxNH1V9zp73+ZMHRSka5h0VwiwoVFfOwk5FWfw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8581510,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj2XkXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoWkw/+K8Us/EdHyfslQ6KJqwD2QOubUN/F1JJjX185TnQnmvGm5xqX\r\nzNQIHk0TyK7+W1jA+gz4f5wTSQ8sMGXvqswVkpPIoRmdYTWC9yAz7vPWKB0h\r\n3ijCIWY9RDcc/cqe+jgjQ9g3ptBpoE69SQEzovrohA1ows0ySe0WXsyHBFYv\r\n88IKQfv1iTi3q9/bB3mhTQ4argalV6F/Xmh8tOSItzwTGLCc/YV1bF6JhG04\r\nlBsbvfjuTRKVNeRGKOvhkHf0lDdCe48EWQbaiREHIldc/2NJ/e8JlDVc5qJH\r\nUpq0WSwkfY1Da1u3CKsuhhW1zOY+GLktBUARV8dPRdBZbaPzpg/KPWkQEnrT\r\n4aoSQFp9GgHvtElytvLmcO3TBa+6cuMhOAK2cMFAbJjkdBGdF3pciVYEvNOk\r\nNh6Id436zPYx6ThYHCPFWIaGTBUe8fi6xhweC8EOe3gRcCAvu4VSWPvjLtER\r\nyKH19kyHEm1qwYMrBoJcj5YpJyp7/qOt04Lu8SU78HCd6I6m+sD874M/0tiq\r\nUVKj/PyCxYncbW7gHH8IYByvwHqjkT3axv9EJD0tOp9JWqYHPMO9iYRFFVrV\r\nRiE2NrUV57SmkNst53SJ34eB30AzAb85QDDUPGCJYJOBs2AHv4hOSqvLR6ho\r\nzQpwpmbZ+2fOW+V71xkufn5e3F2D2PO+Or0=\r\n=GKNq\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","engines":{"node":">=14.19.0"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./oracle.js":"./lib/oracle.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js","./databricks.js":"./lib/databricks.js"},"gitHead":"007ba5ea3e91d5ae488d1b9ba717633b806a1ac3","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","start":"nodemon bin/observable-database-proxy.js","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"sylvestre67","email":"sylvestre.gug@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"8.19.2","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"18.12.1","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^9.0.1","yargs":"^13.2.4","mysql2":"^3.0.1","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","@databricks/sql":"git+https://github.com/observablehq/databricks-sql-nodejs.git","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4"},"peerDependencies":{"oracledb":"https://github.com/oracle/node-oracledb/releases/download/v5.5.0/oracledb-src-5.5.0.tgz"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_3.3.0_1675196694858_0.8925985211426162","host":"s3://npm-registry-packages"}},"3.4.0":{"name":"@observablehq/database-proxy","version":"3.4.0","author":{"name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/database-proxy@3.4.0","maintainers":[{"name":"duaneobservable","email":"duane@observablehq.com"},{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"tophtucker","email":"tophtucker@gmail.com"},{"name":"sylvestre67","email":"sylvestre.gug@gmail.com"},{"name":"recifs","email":"fil@rezo.net"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"07d3b8f45c714e0cbc1c7a59ec4eee160f52b973","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-3.4.0.tgz","fileCount":37,"integrity":"sha512-xAmaxqtbAnB8cq+5EusM79kiwKzlL9s31rCzUwWy5LCdj/objMv0zMMWwSgmKkRZnKQhgCH5arklRe6v+HF8YQ==","signatures":[{"sig":"MEQCIEXmRug1QrWSe56G4r7zqdeligkEws775Bk3VtkYYHxVAiBQ/9BN2EugEJp1m3T3+0PKq2YPs78WfnjrKFePpTDKjg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8581521},"type":"module","engines":{"node":">=14.19.0"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./oracle.js":"./lib/oracle.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js","./databricks.js":"./lib/databricks.js"},"gitHead":"cec312ad79a9306a67389db5336c6d93a59588b5","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","start":"nodemon bin/observable-database-proxy.js","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"sylvestre67","email":"sylvestre.gug@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"8.19.2","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"18.12.1","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^9.1.1","yargs":"^13.2.4","mysql2":"^3.0.1","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","@databricks/sql":"git+https://github.com/observablehq/databricks-sql-nodejs.git","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4"},"peerDependencies":{"oracledb":"https://github.com/oracle/node-oracledb/releases/download/v5.5.0/oracledb-src-5.5.0.tgz"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_3.4.0_1687267050772_0.776815655993125","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"@observablehq/database-proxy","version":"4.0.0","author":{"name":"Observable, Inc."},"license":"ISC","_id":"@observablehq/database-proxy@4.0.0","maintainers":[{"name":"azhang496","email":"azhang496@gmail.com"},{"name":"tophtucker","email":"tophtucker@gmail.com"},{"name":"sylvestre67","email":"sylvestre.gug@gmail.com"},{"name":"recifs","email":"fil@rezo.net"},{"name":"mbostock","email":"mike@ocks.org"},{"name":"visnup","email":"visnup@gmail.com"}],"homepage":"https://github.com/observablehq/database-proxy#readme","bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"bin":{"observable-database-proxy":"bin/observable-database-proxy.js"},"dist":{"shasum":"9e90c09c3f8024c6b0b0b501598a78f4af8dbe63","tarball":"https://registry.npmjs.org/@observablehq/database-proxy/-/database-proxy-4.0.0.tgz","fileCount":29,"integrity":"sha512-Ds7p3RcOcPy7yb4UkgFGihis96OZeosLS7rAnVDXu1mxm1xJL3Ljsu6eQFkdPlvs6P0VEGwmF46fp3Am9AXUOw==","signatures":[{"sig":"MEYCIQDZ9Nt/tNcvXdh3IcXSVzYfO+56JTE1ogqcBkv1HCrckwIhAKtifU/fVGH8fcCxrvoyfxbDJ/XEBeBrMyc2wDtrBFF2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8579286},"type":"module","engines":{"node":">=16"},"exports":{"./mssql.js":"./lib/mssql.js","./mysql.js":"./lib/mysql.js","./oracle.js":"./lib/oracle.js","./postgres.js":"./lib/postgres.js","./snowflake.js":"./lib/snowflake.js","./databricks.js":"./lib/databricks.js"},"gitHead":"1d5884d475608045b2b1cf0097956898222bae50","scripts":{"dev":"NODE_ENV=development nodemon bin/observable-database-proxy.js","test":"mocha","start":"nodemon bin/observable-database-proxy.js","test:ci":"docker-compose -f docker-compose.yml up --build --exit-code-from test","test:db":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up mssql","test:local":"docker-compose -f docker-compose.yml -f docker-compose.local.yml up --build"},"_npmUser":{"name":"visnup","email":"visnup@gmail.com"},"repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"_npmVersion":"10.2.4","description":"A local proxy to connect private Observable notebooks to private databases","directories":{},"_nodeVersion":"20.11.0","dependencies":{"pg":"^8.7.1","ajv":"^8.11.0","open":"^6.3.0","micro":"^9.3.4","mssql":"^10.0.1","yargs":"^13.2.4","mysql2":"^3.0.1","JSONStream":"^1.3.5","snowflake-sdk":"^1.5.0","@databricks/sql":"git+https://github.com/observablehq/databricks-sql-nodejs.git","pg-query-stream":"^4.2.1","serialize-error":"^4.1.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.1.0","eslint":"^8.50.0","nodemon":"^1.19.1","wait-on":"^6.0.1","mock-req":"^0.2.0","mock-res":"^0.6.0","prettier":"^3.0.3","@babel/core":"^7.19.6","@babel/register":"^7.18.9","@babel/preset-env":"^7.19.4","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0"},"peerDependencies":{"oracledb":"https://github.com/oracle/node-oracledb/releases/download/v5.5.0/oracledb-src-5.5.0.tgz"},"_npmOperationalInternal":{"tmp":"tmp/database-proxy_4.0.0_1709667001290_0.2915858731707006","host":"s3://npm-registry-packages"}}},"time":{"created":"2019-07-12T17:43:13.039Z","modified":"2026-04-06T17:49:32.443Z","1.0.0":"2019-07-12T17:43:13.286Z","1.0.1":"2019-07-12T17:51:21.221Z","2.0.0":"2021-08-24T16:15:46.962Z","2.1.0-mssql.0":"2022-11-08T18:31:28.841Z","3.0.0":"2022-11-17T19:13:54.688Z","3.1.0-databricks.0":"2023-01-10T19:45:16.096Z","3.1.0":"2023-01-18T21:00:18.650Z","3.2.0":"2023-01-19T18:20:02.694Z","3.3.0":"2023-01-31T20:24:55.110Z","3.4.0":"2023-06-20T13:17:30.996Z","4.0.0":"2024-03-05T19:30:01.592Z"},"bugs":{"url":"https://github.com/observablehq/database-proxy/issues"},"author":{"name":"Observable, Inc."},"license":"ISC","homepage":"https://github.com/observablehq/database-proxy#readme","repository":{"url":"git+https://github.com/observablehq/database-proxy.git","type":"git"},"description":"A local proxy to connect private Observable notebooks to private databases","maintainers":[{"email":"mike@ocks.org","name":"mbostock"},{"email":"visnup@gmail.com","name":"visnup"},{"email":"fil@rezo.net","name":"recifs"},{"email":"tophtucker@gmail.com","name":"tophtucker"}],"readme":"# @observablehq/database-proxy\n\nThe database proxy is a simple Node.js webserver that accepts secure requests from your Observable notebooks, and proxies queries to a PostgreSQL, MySQL, Snowflake, SQL Server, Databricks or Oracle database — one that is not necessarily exposed to the web. You can use the database proxy to securely connect to databases on your local computer, on an intranet or within a VPN.\n\n## Installation\n\nInstall the database proxy locally or globally with `npm` or `yarn`:\n\n```\n  npm install -g @observablehq/database-proxy\n  yarn global add @observablehq/database-proxy\n```\n\n### Installing for Oracle Databases\n\nTo use the Oracle database client, you will also need to install the `oracledb` npm library with `npm` or `yarn`: \n```\n  npm install -g oracledb\n  yarn global add oracldeb\n```\n#### Architecture \nNode-oracledb is an [add-on](https://nodejs.org/api/addons.html) available as C source code. Pre-built binaries are available as a convenience for common architectures (Windows 64-bit, Linux x86_64, and macOS (Intel x86)). For other architectures (i.e `macOS (ARM64)`), you will need to build from the source code as described [here](https://node-oracledb.readthedocs.io/en/latest/user_guide/installation.html#quick-start-node-oracledb-installation). \n\n#### Oracle Client Library\nOne of the Oracle Client libraries version 21, 19, 18, 12, or 11.2 needs to be installed in your operating system library search path such as `PATH` on Windows or `LD_LIBRARY_PATH` on Linux. On macOS link the libraries to `/usr/local/lib`.\n\nFor more information see [node-oracldb](https://node-oracledb.readthedocs.io/en/latest/user_guide/installation.html) documentation.\n\n## Running the database proxy\n\nUsage: `observable-database-proxy <command> <name> [options]`\n\nCommands:\n\n- `start <name> [ssl options]` Start a database proxy server\n- `add <name>` Add a new database proxy configuration\n- `remove <name>` Remove an existing database proxy configuration\n- `reset <name>` Reset the shared secret for an existing database proxy configuration\n- `list` List all configured database proxies\n\nWhen adding a database proxy configuration, a window will be opened to ObservableHQ.com to configure the connection in your Database Settings and set the shared secret. Subsequent starts of the database proxy do not require re-configuration.\n\nExamples:\n\n```\n  $ observable-database-proxy start localdb\n\n  $ observable-database-proxy add localssl\n  $ observable-database-proxy start localssl --sslcert ~/.ssl/localhost.crt --sslkey ~/.ssl/localhost.key\n```\n\n## Configuration storage\n\nAll proxy configuration is stored in `~/.observablehq`. You can delete the file to remove all of your database proxy configuration at once.\n\n## SSL Certificates\n\nIf you’re using Chrome or Edge, and running the database proxy on your local computer (at 127.0.0.1), you can connect to it directly with HTTP — there’s no need to set up a self-signed SSL certificate for the proxy.\n\nIf you’re using Firefox or Safari, or if you wish to run the database proxy on a different computer on your intranet, you can create a self-signed SSL certificate and configure the database proxy to use it in order to proxy over HTTPS. Be sure to “Require SSL/TLS” in the Observable configuration, and specify the `--sslcert` and `--sslkey` options when running the database proxy.\n\n## Using from notebooks\n\nAfter the proxy is running, in one of your private notebooks, use `DatabaseClient(\"name\")` to create a database client pointed at your local proxy. When querying, your data and database credentials never leave your local computer. Please check [this notebook for more information on how to use it from Observable](https://observablehq.com/@observablehq/self-hosted-database-proxies)\n","readmeFilename":"README.md"}