Perform auth operations (/request_token and /access_token) against the ETrade Web UI and ETrade API using a headless browser.
I am not uploading this to NPM. You are free to fork and do so.
CD into src/etrade-token-fetcher-cli,
npm install and you should be able to run the CLI. You could use
npm link for this or you could
npm pack and then install the pack globally.
Headless browser login to etrade, and call request_token and authorize_token. USAGE $ ETradeAuth OPTIONS -h, --help show CLI help -k, --consumerKey=consumerKey (required) Consumer Key received from ETrade API access request. -p, --webPassword=webPassword (required) Password used to login to ETrade Web UI. -s, --consumerSecret=consumerSecret (required) Consumer Secret received from ETrade API access request. -u, --webUsername=webUsername (required) Username used to login to ETrade Web UI. -v, --version show CLI version --noHeadless Show the browser during automation. DESCRIPTION Use the consumer key and secret to get a request token via /request_token Use a headless Chromium browser to login via the ETrade web UI (THIS WILL LOG YOU OUT) Use a headless browser to hit /authorize endpoint using the request token and accept and grab the validation code Use the validation code to call /access_token EXAMPLES $ ETradeAuth --webUsername "" --webPassword '' --consumerKey "" --consumerSecret "" $ env:DEBUG="etradeTokenFetcher"; --webUsername "" --webPassword '' --consumerKey "" --consumerSecret "" --noHeadless
Debug by setting the
DEBUG environment variable. Like so:
Currently the command can report the following errors
- Wrong Password
- Bot detected (error code 942 from ETrade)
- Account locked
- Request token fetch failed
- Access token request failed
Most of the unique logic exists in a separate package included in the
src directory called
Use the environment var
DEBUG=etradeTokenFetcher to enable verbose logging. This will log sensitive data.
This was two separate repos, and I combined them into one to more easily share the code
ETrade appears to be doing some really basic headless browser detection. A lot of trial and error went into subverting this. At the time of writing this README (1/4/2019) this CLI worked perfectly.
However, I can not promise this will always work, and I do not intend to offer support. I wanted to release this internal tool to the community to both help others with this task, and to also add some examples of my software to my portfolio.