aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/wallet.ipynb153
1 files changed, 153 insertions, 0 deletions
diff --git a/scripts/wallet.ipynb b/scripts/wallet.ipynb
new file mode 100644
index 0000000..12a90be
--- /dev/null
+++ b/scripts/wallet.ipynb
@@ -0,0 +1,153 @@
+{
+ "cells": [
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": [
+ "import uuid\n",
+ "\n",
+ "import requests\n",
+ "from collections import Counter\n",
+ "\n",
+ "FSB_BASE_URL = \"https://fsb.generalresearch.com/\"\n",
+ "JB_BASE_URL = \"https://jamesbillings67.com/\"\n",
+ "product_id = \"888dbc589987425fa846d6e2a8daed04\"\n",
+ "bpuid = uuid.uuid4().hex"
+ ],
+ "id": "initial_id",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": [
+ "# Check their balance\n",
+ "url = FSB_BASE_URL + f\"{product_id}/wallets/?bpuid={bpuid}\"\n",
+ "print(f\"{url=}\")\n",
+ "res = requests.get(url).json()\n",
+ "print(res['displayed_balances'][0])"
+ ],
+ "id": "74a8d7f3452c2372",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": [
+ "# Get user cashout methods\n",
+ "url = FSB_BASE_URL + f\"{product_id}/cashout_methods/?bpuid={bpuid}\"\n",
+ "print(f\"{url=}\")\n",
+ "res = requests.get(url).json()\n",
+ "cms = res['cashout_methods']\n",
+ "print(dict(Counter(x['type'] for x in cms)))\n",
+ "\n",
+ "# Get the paypal method\n",
+ "paypal_cm = next(filter(lambda x: x['type'] == 'PAYPAL', cms))\n",
+ "print(paypal_cm['id'])"
+ ],
+ "id": "e5c4e61b4727912d",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": [
+ "# Log in and retain the jb_session cookie for later requests\n",
+ "from urllib.parse import parse_qs, urlparse\n",
+ "\n",
+ "session = requests.Session()\n",
+ "email = 'your-email@gmail.com'\n",
+ "\n",
+ "res = session.post(\n",
+ " JB_BASE_URL + 'auth/magic-link/request/',\n",
+ " json={'email': email},\n",
+ ")\n",
+ "res.raise_for_status()\n",
+ "print(res.json())"
+ ],
+ "id": "38c7d77b3abf9948",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": [
+ "# Paste the link from the login email. Exchanging it sets jb_session on `session`.\n",
+ "magic_link = \"https://jamesbillings67.com/auth/magic-link/?token=XXXX\"\n",
+ "token = parse_qs(urlparse(magic_link).query)['token'][0]\n",
+ "res = session.post(\n",
+ " JB_BASE_URL + 'auth/magic-link/exchange/',\n",
+ " json={'token': token},\n",
+ ")\n",
+ "res.raise_for_status()\n",
+ "\n",
+ "session_token = session.cookies['jb_session']\n",
+ "print(f'Logged in; captured jb_session ({len(session_token)} characters)')"
+ ],
+ "id": "db3caa6e440619fe",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": [
+ "# Request a PayPal cashout using the authenticated session.\n",
+ "# The response confirms that the cashout confirmation email was sent;\n",
+ "# the payout event is created only after that email link is confirmed.\n",
+ "res = session.post(JB_BASE_URL + 'wallet/cashout/request/', json={\n",
+ " 'amount': 10_00,\n",
+ " 'cashout_method_id': paypal_cm['id'],\n",
+ "})\n",
+ "res.raise_for_status()\n",
+ "print(res.json())"
+ ],
+ "id": "774a00c08ab54d4f",
+ "outputs": [],
+ "execution_count": null
+ },
+ {
+ "metadata": {},
+ "cell_type": "code",
+ "source": [
+ "# Paste link from email\n",
+ "magic_link = \"https://jamesbillings67.com/wallet/cashout/confirm/?token=XXXX\"\n",
+ "token = parse_qs(urlparse(magic_link).query)['token'][0]\n",
+ "res = session.post(\n",
+ " JB_BASE_URL + 'wallet/cashout/confirm/',\n",
+ " json={'token': token},\n",
+ ")\n",
+ "print(res.json())\n",
+ "res.raise_for_status()"
+ ],
+ "id": "894887ddc479eb1a",
+ "outputs": [],
+ "execution_count": null
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}