autotok 2.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,160 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
90
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
91
+ # install all needed dependencies.
92
+ #Pipfile.lock
93
+
94
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95
+ __pypackages__/
96
+
97
+ # Celery stuff
98
+ celerybeat-schedule
99
+ celerybeat.pid
100
+
101
+ # SageMath parsed files
102
+ *.sage.py
103
+
104
+ # Environments
105
+ tests/.env
106
+ .venv
107
+ # env/
108
+ venv/
109
+ ENV/
110
+ env.bak/
111
+ venv.bak/
112
+
113
+ # Spyder project settings
114
+ .spyderproject
115
+ .spyproject
116
+
117
+ # Rope project settings
118
+ .ropeproject
119
+
120
+ # mkdocs documentation
121
+ /site
122
+
123
+ # mypy
124
+ .mypy_cache/
125
+ .dmypy.json
126
+ dmypy.json
127
+
128
+ # Pyre type checker
129
+ .pyre/
130
+
131
+ # Personal Development Files (legacy 1.x data folders)
132
+ CookiesDir/
133
+ VideosDirPath/
134
+ *.cookie
135
+ output/
136
+ *.mp4
137
+ youtube_downloader.py
138
+
139
+ # Local SQLite database (api/scheduler) — contains usernames, login session
140
+ # history, and cookie paths. Never commit.
141
+ data/
142
+ *.db
143
+ *.db-shm
144
+ *.db-wal
145
+ *.sqlite
146
+ *.sqlite3
147
+
148
+ # Environment
149
+ .env
150
+
151
+ # Node
152
+ node_modules/
153
+ *.tsbuildinfo
154
+
155
+ # IDE
156
+ .idea/
157
+ .vscode/
158
+
159
+ # Local autotok data (sessions are account credentials)
160
+ .autotok/
@@ -0,0 +1,67 @@
1
+ # Changelog
2
+
3
+ ## 2.0.0
4
+
5
+ First release on PyPI as **autotok** (`pip install autotok`).
6
+
7
+ ### Added
8
+ - Installable package with an `autotok` command and a Python API (`autotok.Client`,
9
+ `autotok.upload_video`, `autotok.login`, typed exceptions). `python cli.py` still works.
10
+ - Proxy support everywhere an account talks to TikTok: the login browser, signature generation and
11
+ every upload request. Proxies are saved per account (`autotok proxy set|clear|test`,
12
+ `autotok login -p`), accept the common provider formats (including `host:port:user:pass`) and
13
+ SOCKS5, and are always shown with the password masked. The account proxy is pinned on every
14
+ request, so `HTTP(S)_PROXY` environment variables can't redirect an account through another IP,
15
+ and the signing browser can't make direct connections.
16
+ - Cloud browsers: `AUTOTOK_BROWSER=browserbase` or `steel` (Steel Cloud or a self-hosted
17
+ steel-browser) runs the login and signing browser remotely instead of on your machine. Login
18
+ happens through a live-view link; the account's proxy is applied to the cloud session. Providers
19
+ plug into a small factory (`autotok.browsers.register_provider`).
20
+ - Settings can live in a `.env` file (`.env.example` is the template). The CLI reads `./.env`, then
21
+ `~/.autotok/.env`, without overriding real environment variables; `autotok.load_env()` does the
22
+ same from Python.
23
+ - `Dockerfile` for the CLI (with or without a local Chromium) and a CI job that builds it and the
24
+ web app's compose stack.
25
+ - `autotok accounts list|check|remove`, `autotok browser check`, `autotok install-browser`,
26
+ `autotok shell`, `--browser`, and `python -m autotok`.
27
+ - Sessions can be imported from a browser cookie (`autotok login --sessionid`).
28
+ - Web app: per-account proxy editing and testing, session check, video library (add, delete,
29
+ schedule by name), immediate upload from the library, proxy field on browser login.
30
+ - Test suite and CI (Python 3.10–3.13, package build, web app build) and a PyPI publishing
31
+ workflow using trusted publishing.
32
+
33
+ ### Changed
34
+ - Request signing runs in Python Playwright; Node.js is no longer needed.
35
+ - Login uses Playwright Chromium (honours the account's proxy); undetected-chromedriver and Selenium
36
+ are no longer dependencies.
37
+ - Sessions are stored as JSON in `~/.autotok/accounts` (owner-only permissions). 1.x pickle files in
38
+ `CookiesDir/` are migrated automatically with a safe loader.
39
+ - Uploads reuse the user agent of the browser that logged in, instead of a random one per upload.
40
+ - `-sc/--schedule` schedules on TikTok's side again (15 minutes to 10 days).
41
+ - Licence: AGPL-3.0 with a commercial option (see README).
42
+
43
+ ### Fixed
44
+ - Privacy, comment, duet and stitch settings were ignored: every post went out public with
45
+ everything allowed.
46
+ - Hashtags weren't clickable (the caption markup was not sent), and emoji shifted hashtag offsets.
47
+ - Successful uploads were reported as failures by the API and scheduler, which then retried them,
48
+ so a scheduled post could go out up to three times. The scheduler now only retries failures that
49
+ happened before publishing, and never retries a job that was interrupted mid-upload.
50
+ - YouTube downloads always reused the same file name, so a second link re-posted the first video.
51
+ - A missing session made the library call `sys.exit`, killing the API or scheduler.
52
+ - Uploads could hang forever if signing failed; failures are now reported as errors.
53
+ - Web app: uploads over 1 MB were rejected by nginx; uploads blocked the API while running; login
54
+ failures and timeouts were never shown; ticking an option checkbox could stop the form from
55
+ submitting; `docker compose up --build` failed on a clean machine because the shared base image
56
+ was not built first.
57
+ - Login callbacks from the virtual browser are now signed, so other local processes can't inject a
58
+ session.
59
+
60
+ ### Security
61
+ - The web app's API no longer allows cross-origin requests, and `POST`/`PATCH`/`DELETE` requests
62
+ must send `X-Requested-With: autotok`, so other web pages can't drive the local API.
63
+ - Proxy passwords are never returned by the API or shown in logs and `repr()`.
64
+
65
+ ### Removed
66
+ - `config.txt`, `setup.py` and the unused ImageMagick video-editing helpers.
67
+ - The `cli.py schedule list|cancel` commands (use the web app's Schedules page).