From cb88bd2eedabeeac5e33095e87836e6616fc7fb9 Mon Sep 17 00:00:00 2001 From: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Date: Tue, 14 Apr 2026 12:17:58 -0400 Subject: [PATCH] chore: remove unused root vendor/ directory (215 files from PR #48) Root vendor/package/ was an accidentally committed extracted npm tarball (steipete-bird-0.8.0). Zero importers: the real vendored X client lives at scripts/lib/vendor/bird-search/, referenced by scripts/lib/bird_x.py and tests/test_bird_x.py. Removes 215 files + 1 .tgz, dropping repo from 406 to 191 files and clearing the claude.ai skill-upload 200-file cap. Adds /vendor/ to .gitignore (leading slash so scripts/lib/vendor/ is unaffected). --- .gitignore | 3 + vendor/package/CHANGELOG.md | 176 ------ vendor/package/LICENSE | 21 - vendor/package/README.md | 385 ------------- vendor/package/dist/cli.d.ts | 12 - vendor/package/dist/cli.d.ts.map | 1 - vendor/package/dist/cli.js | 29 - vendor/package/dist/cli.js.map | 1 - vendor/package/dist/cli/pagination.d.ts | 35 -- vendor/package/dist/cli/pagination.d.ts.map | 1 - vendor/package/dist/cli/pagination.js | 43 -- vendor/package/dist/cli/pagination.js.map | 1 - vendor/package/dist/cli/program.d.ts | 5 - vendor/package/dist/cli/program.d.ts.map | 1 - vendor/package/dist/cli/program.js | 113 ---- vendor/package/dist/cli/program.js.map | 1 - vendor/package/dist/cli/shared.d.ts | 77 --- vendor/package/dist/cli/shared.d.ts.map | 1 - vendor/package/dist/cli/shared.js | 327 ----------- vendor/package/dist/cli/shared.js.map | 1 - vendor/package/dist/commands/bookmarks.d.ts | 4 - .../package/dist/commands/bookmarks.d.ts.map | 1 - vendor/package/dist/commands/bookmarks.js | 189 ------- vendor/package/dist/commands/bookmarks.js.map | 1 - vendor/package/dist/commands/check.d.ts | 4 - vendor/package/dist/commands/check.d.ts.map | 1 - vendor/package/dist/commands/check.js | 43 -- vendor/package/dist/commands/check.js.map | 1 - vendor/package/dist/commands/follow.d.ts | 4 - vendor/package/dist/commands/follow.d.ts.map | 1 - vendor/package/dist/commands/follow.js | 91 ---- vendor/package/dist/commands/follow.js.map | 1 - vendor/package/dist/commands/help.d.ts | 4 - vendor/package/dist/commands/help.d.ts.map | 1 - vendor/package/dist/commands/help.js | 19 - vendor/package/dist/commands/help.js.map | 1 - vendor/package/dist/commands/home.d.ts | 4 - vendor/package/dist/commands/home.d.ts.map | 1 - vendor/package/dist/commands/home.js | 43 -- vendor/package/dist/commands/home.js.map | 1 - vendor/package/dist/commands/lists.d.ts | 4 - vendor/package/dist/commands/lists.d.ts.map | 1 - vendor/package/dist/commands/lists.js | 125 ----- vendor/package/dist/commands/lists.js.map | 1 - vendor/package/dist/commands/news.d.ts | 4 - vendor/package/dist/commands/news.d.ts.map | 1 - vendor/package/dist/commands/news.js | 131 ----- vendor/package/dist/commands/news.js.map | 1 - vendor/package/dist/commands/post.d.ts | 4 - vendor/package/dist/commands/post.d.ts.map | 1 - vendor/package/dist/commands/post.js | 101 ---- vendor/package/dist/commands/post.js.map | 1 - vendor/package/dist/commands/query-ids.d.ts | 4 - .../package/dist/commands/query-ids.d.ts.map | 1 - vendor/package/dist/commands/query-ids.js | 80 --- vendor/package/dist/commands/query-ids.js.map | 1 - vendor/package/dist/commands/read.d.ts | 4 - vendor/package/dist/commands/read.d.ts.map | 1 - vendor/package/dist/commands/read.js | 152 ------ vendor/package/dist/commands/read.js.map | 1 - vendor/package/dist/commands/search.d.ts | 4 - vendor/package/dist/commands/search.d.ts.map | 1 - vendor/package/dist/commands/search.js | 115 ---- vendor/package/dist/commands/search.js.map | 1 - vendor/package/dist/commands/unbookmark.d.ts | 4 - .../package/dist/commands/unbookmark.d.ts.map | 1 - vendor/package/dist/commands/unbookmark.js | 36 -- .../package/dist/commands/unbookmark.js.map | 1 - vendor/package/dist/commands/user-tweets.d.ts | 4 - .../dist/commands/user-tweets.d.ts.map | 1 - vendor/package/dist/commands/user-tweets.js | 109 ---- .../package/dist/commands/user-tweets.js.map | 1 - vendor/package/dist/commands/users.d.ts | 4 - vendor/package/dist/commands/users.d.ts.map | 1 - vendor/package/dist/commands/users.js | 295 ---------- vendor/package/dist/commands/users.js.map | 1 - vendor/package/dist/index.d.ts | 2 - vendor/package/dist/index.d.ts.map | 1 - vendor/package/dist/index.js | 2 - vendor/package/dist/index.js.map | 1 - vendor/package/dist/lib/cli-args.d.ts | 7 - vendor/package/dist/lib/cli-args.d.ts.map | 1 - vendor/package/dist/lib/cli-args.js | 25 - vendor/package/dist/lib/cli-args.js.map | 1 - vendor/package/dist/lib/cookies.d.ts | 31 -- vendor/package/dist/lib/cookies.d.ts.map | 1 - vendor/package/dist/lib/cookies.js | 173 ------ vendor/package/dist/lib/cookies.js.map | 1 - .../dist/lib/extract-bookmark-folder-id.d.ts | 2 - .../lib/extract-bookmark-folder-id.d.ts.map | 1 - .../dist/lib/extract-bookmark-folder-id.js | 20 - .../lib/extract-bookmark-folder-id.js.map | 1 - vendor/package/dist/lib/extract-list-id.d.ts | 2 - .../package/dist/lib/extract-list-id.d.ts.map | 1 - vendor/package/dist/lib/extract-list-id.js | 19 - .../package/dist/lib/extract-list-id.js.map | 1 - vendor/package/dist/lib/extract-tweet-id.d.ts | 2 - .../dist/lib/extract-tweet-id.d.ts.map | 1 - vendor/package/dist/lib/extract-tweet-id.js | 14 - .../package/dist/lib/extract-tweet-id.js.map | 1 - vendor/package/dist/lib/features.json | 17 - vendor/package/dist/lib/index.d.ts | 10 - vendor/package/dist/lib/index.d.ts.map | 1 - vendor/package/dist/lib/index.js | 4 - vendor/package/dist/lib/index.js.map | 1 - vendor/package/dist/lib/normalize-handle.d.ts | 6 - .../dist/lib/normalize-handle.d.ts.map | 1 - vendor/package/dist/lib/normalize-handle.js | 31 -- .../package/dist/lib/normalize-handle.js.map | 1 - vendor/package/dist/lib/output.d.ts | 29 - vendor/package/dist/lib/output.d.ts.map | 1 - vendor/package/dist/lib/output.js | 88 --- vendor/package/dist/lib/output.js.map | 1 - vendor/package/dist/lib/paginate-cursor.d.ts | 27 - .../package/dist/lib/paginate-cursor.d.ts.map | 1 - vendor/package/dist/lib/paginate-cursor.js | 37 -- .../package/dist/lib/paginate-cursor.js.map | 1 - vendor/package/dist/lib/query-ids.json | 20 - vendor/package/dist/lib/runtime-features.d.ts | 19 - .../dist/lib/runtime-features.d.ts.map | 1 - vendor/package/dist/lib/runtime-features.js | 151 ------ .../package/dist/lib/runtime-features.js.map | 1 - .../package/dist/lib/runtime-query-ids.d.ts | 33 -- .../dist/lib/runtime-query-ids.d.ts.map | 1 - vendor/package/dist/lib/runtime-query-ids.js | 264 --------- .../package/dist/lib/runtime-query-ids.js.map | 1 - vendor/package/dist/lib/thread-filters.d.ts | 8 - .../package/dist/lib/thread-filters.d.ts.map | 1 - vendor/package/dist/lib/thread-filters.js | 124 ----- vendor/package/dist/lib/thread-filters.js.map | 1 - .../package/dist/lib/twitter-client-base.d.ts | 38 -- .../dist/lib/twitter-client-base.d.ts.map | 1 - .../package/dist/lib/twitter-client-base.js | 129 ----- .../dist/lib/twitter-client-base.js.map | 1 - .../dist/lib/twitter-client-bookmarks.d.ts | 7 - .../lib/twitter-client-bookmarks.d.ts.map | 1 - .../dist/lib/twitter-client-bookmarks.js | 61 --- .../dist/lib/twitter-client-bookmarks.js.map | 1 - .../dist/lib/twitter-client-constants.d.ts | 43 -- .../lib/twitter-client-constants.d.ts.map | 1 - .../dist/lib/twitter-client-constants.js | 50 -- .../dist/lib/twitter-client-constants.js.map | 1 - .../dist/lib/twitter-client-engagement.d.ts | 16 - .../lib/twitter-client-engagement.d.ts.map | 1 - .../dist/lib/twitter-client-engagement.js | 81 --- .../dist/lib/twitter-client-engagement.js.map | 1 - .../dist/lib/twitter-client-features.d.ts | 14 - .../dist/lib/twitter-client-features.d.ts.map | 1 - .../dist/lib/twitter-client-features.js | 347 ------------ .../dist/lib/twitter-client-features.js.map | 1 - .../dist/lib/twitter-client-follow.d.ts | 8 - .../dist/lib/twitter-client-follow.d.ts.map | 1 - .../package/dist/lib/twitter-client-follow.js | 178 ------ .../dist/lib/twitter-client-follow.js.map | 1 - .../package/dist/lib/twitter-client-home.d.ts | 13 - .../dist/lib/twitter-client-home.d.ts.map | 1 - .../package/dist/lib/twitter-client-home.js | 138 ----- .../dist/lib/twitter-client-home.js.map | 1 - .../dist/lib/twitter-client-lists.d.ts | 11 - .../dist/lib/twitter-client-lists.d.ts.map | 1 - .../package/dist/lib/twitter-client-lists.js | 321 ----------- .../dist/lib/twitter-client-lists.js.map | 1 - .../dist/lib/twitter-client-media.d.ts | 11 - .../dist/lib/twitter-client-media.d.ts.map | 1 - .../package/dist/lib/twitter-client-media.js | 136 ----- .../dist/lib/twitter-client-media.js.map | 1 - .../package/dist/lib/twitter-client-news.d.ts | 47 -- .../dist/lib/twitter-client-news.d.ts.map | 1 - .../package/dist/lib/twitter-client-news.js | 283 ---------- .../dist/lib/twitter-client-news.js.map | 1 - .../dist/lib/twitter-client-posting.d.ts | 8 - .../dist/lib/twitter-client-posting.d.ts.map | 1 - .../dist/lib/twitter-client-posting.js | 218 -------- .../dist/lib/twitter-client-posting.js.map | 1 - .../dist/lib/twitter-client-search.d.ts | 19 - .../dist/lib/twitter-client-search.d.ts.map | 1 - .../package/dist/lib/twitter-client-search.js | 157 ------ .../dist/lib/twitter-client-search.js.map | 1 - .../dist/lib/twitter-client-timelines.d.ts | 23 - .../lib/twitter-client-timelines.d.ts.map | 1 - .../dist/lib/twitter-client-timelines.js | 471 ---------------- .../dist/lib/twitter-client-timelines.js.map | 1 - .../dist/lib/twitter-client-tweet-detail.d.ts | 25 - .../lib/twitter-client-tweet-detail.d.ts.map | 1 - .../dist/lib/twitter-client-tweet-detail.js | 295 ---------- .../lib/twitter-client-tweet-detail.js.map | 1 - .../dist/lib/twitter-client-types.d.ts | 407 -------------- .../dist/lib/twitter-client-types.d.ts.map | 1 - .../package/dist/lib/twitter-client-types.js | 2 - .../dist/lib/twitter-client-types.js.map | 1 - .../dist/lib/twitter-client-user-lookup.d.ts | 16 - .../lib/twitter-client-user-lookup.d.ts.map | 1 - .../dist/lib/twitter-client-user-lookup.js | 224 -------- .../lib/twitter-client-user-lookup.js.map | 1 - .../dist/lib/twitter-client-user-tweets.d.ts | 22 - .../lib/twitter-client-user-tweets.d.ts.map | 1 - .../dist/lib/twitter-client-user-tweets.js | 154 ------ .../lib/twitter-client-user-tweets.js.map | 1 - .../dist/lib/twitter-client-users.d.ts | 9 - .../dist/lib/twitter-client-users.d.ts.map | 1 - .../package/dist/lib/twitter-client-users.js | 358 ------------ .../dist/lib/twitter-client-users.js.map | 1 - .../dist/lib/twitter-client-utils.d.ts | 173 ------ .../dist/lib/twitter-client-utils.d.ts.map | 1 - .../package/dist/lib/twitter-client-utils.js | 511 ------------------ .../dist/lib/twitter-client-utils.js.map | 1 - vendor/package/dist/lib/twitter-client.d.ts | 23 - .../package/dist/lib/twitter-client.d.ts.map | 1 - vendor/package/dist/lib/twitter-client.js | 21 - vendor/package/dist/lib/twitter-client.js.map | 1 - vendor/package/dist/lib/version.d.ts | 6 - vendor/package/dist/lib/version.d.ts.map | 1 - vendor/package/dist/lib/version.js | 174 ------ vendor/package/dist/lib/version.js.map | 1 - vendor/package/package.json | 61 --- vendor/steipete-bird-0.8.0.tgz | Bin 126139 -> 0 bytes 216 files changed, 3 insertions(+), 9388 deletions(-) delete mode 100644 vendor/package/CHANGELOG.md delete mode 100644 vendor/package/LICENSE delete mode 100644 vendor/package/README.md delete mode 100644 vendor/package/dist/cli.d.ts delete mode 100644 vendor/package/dist/cli.d.ts.map delete mode 100644 vendor/package/dist/cli.js delete mode 100644 vendor/package/dist/cli.js.map delete mode 100644 vendor/package/dist/cli/pagination.d.ts delete mode 100644 vendor/package/dist/cli/pagination.d.ts.map delete mode 100644 vendor/package/dist/cli/pagination.js delete mode 100644 vendor/package/dist/cli/pagination.js.map delete mode 100644 vendor/package/dist/cli/program.d.ts delete mode 100644 vendor/package/dist/cli/program.d.ts.map delete mode 100644 vendor/package/dist/cli/program.js delete mode 100644 vendor/package/dist/cli/program.js.map delete mode 100644 vendor/package/dist/cli/shared.d.ts delete mode 100644 vendor/package/dist/cli/shared.d.ts.map delete mode 100644 vendor/package/dist/cli/shared.js delete mode 100644 vendor/package/dist/cli/shared.js.map delete mode 100644 vendor/package/dist/commands/bookmarks.d.ts delete mode 100644 vendor/package/dist/commands/bookmarks.d.ts.map delete mode 100644 vendor/package/dist/commands/bookmarks.js delete mode 100644 vendor/package/dist/commands/bookmarks.js.map delete mode 100644 vendor/package/dist/commands/check.d.ts delete mode 100644 vendor/package/dist/commands/check.d.ts.map delete mode 100644 vendor/package/dist/commands/check.js delete mode 100644 vendor/package/dist/commands/check.js.map delete mode 100644 vendor/package/dist/commands/follow.d.ts delete mode 100644 vendor/package/dist/commands/follow.d.ts.map delete mode 100644 vendor/package/dist/commands/follow.js delete mode 100644 vendor/package/dist/commands/follow.js.map delete mode 100644 vendor/package/dist/commands/help.d.ts delete mode 100644 vendor/package/dist/commands/help.d.ts.map delete mode 100644 vendor/package/dist/commands/help.js delete mode 100644 vendor/package/dist/commands/help.js.map delete mode 100644 vendor/package/dist/commands/home.d.ts delete mode 100644 vendor/package/dist/commands/home.d.ts.map delete mode 100644 vendor/package/dist/commands/home.js delete mode 100644 vendor/package/dist/commands/home.js.map delete mode 100644 vendor/package/dist/commands/lists.d.ts delete mode 100644 vendor/package/dist/commands/lists.d.ts.map delete mode 100644 vendor/package/dist/commands/lists.js delete mode 100644 vendor/package/dist/commands/lists.js.map delete mode 100644 vendor/package/dist/commands/news.d.ts delete mode 100644 vendor/package/dist/commands/news.d.ts.map delete mode 100644 vendor/package/dist/commands/news.js delete mode 100644 vendor/package/dist/commands/news.js.map delete mode 100644 vendor/package/dist/commands/post.d.ts delete mode 100644 vendor/package/dist/commands/post.d.ts.map delete mode 100644 vendor/package/dist/commands/post.js delete mode 100644 vendor/package/dist/commands/post.js.map delete mode 100644 vendor/package/dist/commands/query-ids.d.ts delete mode 100644 vendor/package/dist/commands/query-ids.d.ts.map delete mode 100644 vendor/package/dist/commands/query-ids.js delete mode 100644 vendor/package/dist/commands/query-ids.js.map delete mode 100644 vendor/package/dist/commands/read.d.ts delete mode 100644 vendor/package/dist/commands/read.d.ts.map delete mode 100644 vendor/package/dist/commands/read.js delete mode 100644 vendor/package/dist/commands/read.js.map delete mode 100644 vendor/package/dist/commands/search.d.ts delete mode 100644 vendor/package/dist/commands/search.d.ts.map delete mode 100644 vendor/package/dist/commands/search.js delete mode 100644 vendor/package/dist/commands/search.js.map delete mode 100644 vendor/package/dist/commands/unbookmark.d.ts delete mode 100644 vendor/package/dist/commands/unbookmark.d.ts.map delete mode 100644 vendor/package/dist/commands/unbookmark.js delete mode 100644 vendor/package/dist/commands/unbookmark.js.map delete mode 100644 vendor/package/dist/commands/user-tweets.d.ts delete mode 100644 vendor/package/dist/commands/user-tweets.d.ts.map delete mode 100644 vendor/package/dist/commands/user-tweets.js delete mode 100644 vendor/package/dist/commands/user-tweets.js.map delete mode 100644 vendor/package/dist/commands/users.d.ts delete mode 100644 vendor/package/dist/commands/users.d.ts.map delete mode 100644 vendor/package/dist/commands/users.js delete mode 100644 vendor/package/dist/commands/users.js.map delete mode 100644 vendor/package/dist/index.d.ts delete mode 100644 vendor/package/dist/index.d.ts.map delete mode 100644 vendor/package/dist/index.js delete mode 100644 vendor/package/dist/index.js.map delete mode 100644 vendor/package/dist/lib/cli-args.d.ts delete mode 100644 vendor/package/dist/lib/cli-args.d.ts.map delete mode 100644 vendor/package/dist/lib/cli-args.js delete mode 100644 vendor/package/dist/lib/cli-args.js.map delete mode 100644 vendor/package/dist/lib/cookies.d.ts delete mode 100644 vendor/package/dist/lib/cookies.d.ts.map delete mode 100644 vendor/package/dist/lib/cookies.js delete mode 100644 vendor/package/dist/lib/cookies.js.map delete mode 100644 vendor/package/dist/lib/extract-bookmark-folder-id.d.ts delete mode 100644 vendor/package/dist/lib/extract-bookmark-folder-id.d.ts.map delete mode 100644 vendor/package/dist/lib/extract-bookmark-folder-id.js delete mode 100644 vendor/package/dist/lib/extract-bookmark-folder-id.js.map delete mode 100644 vendor/package/dist/lib/extract-list-id.d.ts delete mode 100644 vendor/package/dist/lib/extract-list-id.d.ts.map delete mode 100644 vendor/package/dist/lib/extract-list-id.js delete mode 100644 vendor/package/dist/lib/extract-list-id.js.map delete mode 100644 vendor/package/dist/lib/extract-tweet-id.d.ts delete mode 100644 vendor/package/dist/lib/extract-tweet-id.d.ts.map delete mode 100644 vendor/package/dist/lib/extract-tweet-id.js delete mode 100644 vendor/package/dist/lib/extract-tweet-id.js.map delete mode 100644 vendor/package/dist/lib/features.json delete mode 100644 vendor/package/dist/lib/index.d.ts delete mode 100644 vendor/package/dist/lib/index.d.ts.map delete mode 100644 vendor/package/dist/lib/index.js delete mode 100644 vendor/package/dist/lib/index.js.map delete mode 100644 vendor/package/dist/lib/normalize-handle.d.ts delete mode 100644 vendor/package/dist/lib/normalize-handle.d.ts.map delete mode 100644 vendor/package/dist/lib/normalize-handle.js delete mode 100644 vendor/package/dist/lib/normalize-handle.js.map delete mode 100644 vendor/package/dist/lib/output.d.ts delete mode 100644 vendor/package/dist/lib/output.d.ts.map delete mode 100644 vendor/package/dist/lib/output.js delete mode 100644 vendor/package/dist/lib/output.js.map delete mode 100644 vendor/package/dist/lib/paginate-cursor.d.ts delete mode 100644 vendor/package/dist/lib/paginate-cursor.d.ts.map delete mode 100644 vendor/package/dist/lib/paginate-cursor.js delete mode 100644 vendor/package/dist/lib/paginate-cursor.js.map delete mode 100644 vendor/package/dist/lib/query-ids.json delete mode 100644 vendor/package/dist/lib/runtime-features.d.ts delete mode 100644 vendor/package/dist/lib/runtime-features.d.ts.map delete mode 100644 vendor/package/dist/lib/runtime-features.js delete mode 100644 vendor/package/dist/lib/runtime-features.js.map delete mode 100644 vendor/package/dist/lib/runtime-query-ids.d.ts delete mode 100644 vendor/package/dist/lib/runtime-query-ids.d.ts.map delete mode 100644 vendor/package/dist/lib/runtime-query-ids.js delete mode 100644 vendor/package/dist/lib/runtime-query-ids.js.map delete mode 100644 vendor/package/dist/lib/thread-filters.d.ts delete mode 100644 vendor/package/dist/lib/thread-filters.d.ts.map delete mode 100644 vendor/package/dist/lib/thread-filters.js delete mode 100644 vendor/package/dist/lib/thread-filters.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-base.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-base.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-base.js delete mode 100644 vendor/package/dist/lib/twitter-client-base.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-bookmarks.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-bookmarks.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-bookmarks.js delete mode 100644 vendor/package/dist/lib/twitter-client-bookmarks.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-constants.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-constants.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-constants.js delete mode 100644 vendor/package/dist/lib/twitter-client-constants.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-engagement.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-engagement.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-engagement.js delete mode 100644 vendor/package/dist/lib/twitter-client-engagement.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-features.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-features.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-features.js delete mode 100644 vendor/package/dist/lib/twitter-client-features.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-follow.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-follow.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-follow.js delete mode 100644 vendor/package/dist/lib/twitter-client-follow.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-home.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-home.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-home.js delete mode 100644 vendor/package/dist/lib/twitter-client-home.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-lists.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-lists.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-lists.js delete mode 100644 vendor/package/dist/lib/twitter-client-lists.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-media.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-media.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-media.js delete mode 100644 vendor/package/dist/lib/twitter-client-media.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-news.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-news.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-news.js delete mode 100644 vendor/package/dist/lib/twitter-client-news.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-posting.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-posting.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-posting.js delete mode 100644 vendor/package/dist/lib/twitter-client-posting.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-search.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-search.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-search.js delete mode 100644 vendor/package/dist/lib/twitter-client-search.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-timelines.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-timelines.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-timelines.js delete mode 100644 vendor/package/dist/lib/twitter-client-timelines.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-tweet-detail.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-tweet-detail.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-tweet-detail.js delete mode 100644 vendor/package/dist/lib/twitter-client-tweet-detail.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-types.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-types.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-types.js delete mode 100644 vendor/package/dist/lib/twitter-client-types.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-user-lookup.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-user-lookup.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-user-lookup.js delete mode 100644 vendor/package/dist/lib/twitter-client-user-lookup.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-user-tweets.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-user-tweets.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-user-tweets.js delete mode 100644 vendor/package/dist/lib/twitter-client-user-tweets.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-users.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-users.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-users.js delete mode 100644 vendor/package/dist/lib/twitter-client-users.js.map delete mode 100644 vendor/package/dist/lib/twitter-client-utils.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client-utils.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client-utils.js delete mode 100644 vendor/package/dist/lib/twitter-client-utils.js.map delete mode 100644 vendor/package/dist/lib/twitter-client.d.ts delete mode 100644 vendor/package/dist/lib/twitter-client.d.ts.map delete mode 100644 vendor/package/dist/lib/twitter-client.js delete mode 100644 vendor/package/dist/lib/twitter-client.js.map delete mode 100644 vendor/package/dist/lib/version.d.ts delete mode 100644 vendor/package/dist/lib/version.d.ts.map delete mode 100644 vendor/package/dist/lib/version.js delete mode 100644 vendor/package/dist/lib/version.js.map delete mode 100644 vendor/package/package.json delete mode 100644 vendor/steipete-bird-0.8.0.tgz diff --git a/.gitignore b/.gitignore index 8ba4d4b..e367f05 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ mise.toml .venv/ .coverage htmlcov/ + +# Root vendor/ is accidental - real vendored client lives at scripts/lib/vendor/bird-search/ +/vendor/ diff --git a/vendor/package/CHANGELOG.md b/vendor/package/CHANGELOG.md deleted file mode 100644 index 3773fd3..0000000 --- a/vendor/package/CHANGELOG.md +++ /dev/null @@ -1,176 +0,0 @@ -# Changelog - -## 0.8.0 — 2026-01-19 - -### Added -- `bookmarks` thread expansion controls (`--expand-root-only`, `--author-chain`, `--author-only`, `--full-chain-only`, `--include-ancestor-branches`, `--include-parent`, `--thread-meta`, `--sort-chronological`) for richer context exports (#55) — thanks @kkretschmer2. -- `--chrome-profile-dir` to point at Chromium profile directories or cookie DB files (Arc/Brave/etc) for cookie extraction (#16) — thanks @tekumara. -- `about` command to report account origin/location metadata (#51) — thanks @pjtf93. -- `follow`/`unfollow` commands to manage follows (#54) — thanks @citizenlee. -- Twitter client now supports like/unlike/retweet/unretweet/bookmark via the engagement mixin (#53) — thanks @the-vampiire. - -### Fixed -- `bookmarks` expanded JSON now preserves pagination `nextCursor`, and full-chain filtering only includes ancestor branches when requested. -- Follow/unfollow REST fallback now supports cursor pagination for followers/following (#54). -- About account live coverage now verifies data extraction paths (#51) — thanks @pjtf93. - -### Tests -- Live tests now exercise engagement mutations (opt-in) (#53) — thanks @the-vampiire. - -## 0.7.0 — 2026-01-12 - -### Added -- `home` command for the "For You" and "Following" home timelines (#31) — thanks @odysseus0. -- `news`/`trending` command for Explore tabs with AI-curated headlines (#39) — thanks @aavetis. -- `user-tweets` command to fetch a user's profile timeline (#34) — thanks @crcatala. -- `replies` and `thread` now support pagination (`--all`, `--max-pages`, `--cursor`, `--delay`) (#35) — thanks @crcatala. -- `search` now supports pagination (`--all`, `--max-pages`, `--cursor`) (#42) — thanks @pjtf93. -- `likes` now supports pagination (`--all`, `--max-pages`, `--cursor`) (#44) — thanks @jsholmes. -- `list-timeline` now supports pagination (`--all`, `--max-pages`, `--cursor`) (#30) — thanks @zheli. -- Rich text output now shows article previews, quoted tweets, and media links (#32) — thanks @odysseus0. -- Long-form article tweets now render rich Draft.js content blocks/entities (#36) — thanks @crcatala. - -### Changed -- Library typing: `SearchResult` is now a discriminated union (so `error` only exists when `success: false`). - -### Fixed -- Lists GraphQL feature flags updated to prevent 400s (#27) — thanks @zheli. -- Lists feature overrides now scope new GraphQL flags correctly (#50) — thanks @ryanh-ai. -- Tweet detail parsing now tolerates partial GraphQL errors when usable data exists (#48) — thanks @jsholmes. -- News output now respects `--tweets-per-item`, keeps unique IDs, and parses non-add entry instructions (#39) — thanks @aavetis. -- Following/followers pagination now guards repeat cursors and standardizes JSON output (#28) — thanks @malpern. -- Likes pagination now follows cursors and avoids stalling on duplicate pages (#12) — thanks @titouv. -- macOS cookie extraction now supports Brave keychain storage (#40) — thanks @gakonst. -- Terminal hyperlinks now sanitize control characters before emitting OSC 8 sequences (#29) — thanks @mafulafunk. -- `pnpm run build:dist` now succeeds after tightening JSON/pagination option typing in tweet output commands. - -### Tests -- Following: split following/likes tests + cover cursor handling (#33) — thanks @VACInc. - -## 0.6.0 — 2026-01-05 - -### Added -- Bookmark exports now support pagination (`--all`, `--max-pages`) with retries (#15) — thanks @Nano1337. -- `lists` + `list-timeline` commands for Twitter Lists (#21) — thanks @harperreed -- Tweet JSON output now includes media items (photos, videos, GIFs) (#14) — thanks @Hormold -- Bookmarks can resume pagination from a cursor (#26) — thanks @leonho -- `unbookmark` command to remove bookmarked tweets (#22) — thanks @mbelinky. - -### Changed -- Feature flags can be overridden at runtime via `features.json` (refreshable via `query-ids`). - -### Fixed -- GraphQL feature flags now include `post_ctas_fetch_enabled` to avoid 400s (#38) — thanks @philipp-spiess. - -## 0.5.1 — 2026-01-01 - -### Changed -- `bird --help` now includes explicit “Shortcuts” and “JSON Output” sections (documents `bird ` shorthand + `--json`). -- Release docs now include explicit npm publish verification steps. - -### Fixed -- `pnpm bird --help` now works (dev script runs the CLI entrypoint, not the library entrypoint). -- `following`/`followers` now fall back to internal v1.1 REST endpoints when GraphQL returns `404`. - -### Tests -- Add root help output regression test. -- Add opt-in live CLI test suite (real GraphQL calls; skipped by default; gated via `BIRD_LIVE=1`). - -## 0.5.0 — 2026-01-01 - -### Added -- `likes` command to list your liked tweets (thanks @swairshah). -- Quoted tweet data in JSON output + `--quote-depth` (thanks @alexknowshtml). -- `following`/`followers` commands to list users (thanks @lockmeister). - -### Changed -- Query ID updater now tracks the Likes GraphQL operation. -- Query ID updater now tracks Following/Followers GraphQL operations. -- Query ID updater now tracks BookmarkFolderTimeline and keeps bookmark query IDs seeded. -- `following`/`followers` JSON user fields are now camelCase (`followersCount`, `followingCount`, `isBlueVerified`, `profileImageUrl`, `createdAt`). -- Cookie extraction timeout is now configurable (default 30s on macOS) via `--cookie-timeout` / `BIRD_COOKIE_TIMEOUT_MS` (thanks @tylerseymour). -- Search now paginates beyond 20 results when using `-n` (thanks @ryanh-ai). -- Library exports are now separated from the CLI entrypoint for easier embedding. - -## 0.4.1 — 2025-12-31 - -### Added -- `bookmarks` command to list your bookmarked tweets. -- `bookmarks --folder-id` to fetch bookmark folders (thanks @tylerseymour). - -### Changed -- Cookie extraction now uses `@steipete/sweet-cookie` (drops `sqlite3` CLI + custom browser readers in `bird`). -- Query ID updater now tracks the Bookmarks GraphQL operation. -- Lint rules stricter (block statements, no-negation-else, useConst/useTemplate, top-level regex, import extension enforcement). -- `pnpm lint` now runs both Biome and oxlint (type-aware). - -### Tests -- Coverage thresholds raised to 90% statements/lines/functions (80% branches). -- Added targeted Twitter client coverage suites. - -## 0.4.0 — 2025-12-26 - -### Added -- Cookie source selection: `--cookie-source safari|chrome|firefox` (repeatable) + `cookieSource` config (string or array). - -### Fixed -- `tweet`/`reply`: fallback to `statuses/update.json` when GraphQL `CreateTweet` returns error 226 (“automated request”). - -### Breaking -- Remove `allowSafari`/`allowChrome`/`allowFirefox` config toggles in favor of `cookieSource` ordering. - -## 0.3.0 — 2025-12-26 - -### Added -- Safari cookie extraction (`Cookies.binarycookies`) + `allowSafari` config toggle. - -### Changed -- Removed the Sweetistics engine + fallback. `bird` is GraphQL-only. -- Browser cookie fallback order: Safari → Chrome → Firefox. - -### Tests -- Enforce coverage thresholds (>= 70% statements/branches/functions/lines) + expand unit coverage for version/output/Twitter client branches. - -## 0.2.0 — 2025-12-26 - -### Added -- Output controls: `--plain`, `--no-emoji`, `--no-color` (respects `NO_COLOR`). -- `help` command: `bird help `. -- Runtime GraphQL query ID refresh: `bird query-ids --fresh` (cached on disk; auto-retry on 404; override cache via `BIRD_QUERY_IDS_CACHE`). -- GraphQL media uploads via `--media` (up to 4 images/GIFs, or 1 video). - -### Fixed -- CLI `--version`: read version from `package.json`/`VERSION` (no hardcoded string) + append git sha when available. - -### Changed -- `mentions`: no hardcoded user; defaults to authenticated user or accepts `--user @handle`. -- GraphQL query ID updater: correctly pairs `operationName` ↔ `queryId` (CreateTweet/CreateRetweet/etc). -- `build:dist`: copies `src/lib/query-ids.json` into `dist/lib/query-ids.json` (keeps `dist/` in sync). -- `--engine graphql`: strict GraphQL-only (disables Sweetistics fallback). - -## 0.1.1 — 2025-12-26 - -### Changed -- Engine default now `auto` (GraphQL primary; Sweetistics only on fallback when configured). - -### Tests -- Add engine resolution tests for auto/default behavior. - -### Fixed -- GraphQL read: rotate TweetDetail query IDs with fallback to avoid 404s. - -## 0.1.0 — 2025-12-20 - -### Added -- CLI commands: `tweet`, `reply`, `read`, `replies`, `thread`, `search`, `mentions`, `whoami`, `check`. -- URL/ID shorthand for `read`, plus `--json` output where supported. -- GraphQL engine with cookie auth from Firefox/Chrome/env/flags (macOS browsers). -- Sweetistics engine (API key) with automatic fallback when configured. -- Media uploads via Sweetistics with per-item alt text (images or single video). -- Long-form Notes and Articles extraction for full text output. -- Thread + reply fetching with full conversation parsing. -- Search + mentions via GraphQL (latest timeline). -- JSON5 config files (`~/.config/bird/config.json5`, `./.birdrc.json5`) with engine defaults, profiles, allowChrome/allowFirefox, and timeoutMs. -- Request timeouts (`--timeout`, `timeoutMs`) for GraphQL and Sweetistics calls. -- Bun-compiled standalone binary via `pnpm run build`. -- Query ID refresh helper: `pnpm run graphql:update`. diff --git a/vendor/package/LICENSE b/vendor/package/LICENSE deleted file mode 100644 index f7b5266..0000000 --- a/vendor/package/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 Peter Steinberger - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/package/README.md b/vendor/package/README.md deleted file mode 100644 index 1538741..0000000 --- a/vendor/package/README.md +++ /dev/null @@ -1,385 +0,0 @@ -# bird 🐦 — fast X CLI for tweeting, replying, and reading - -`bird` is a fast X CLI for tweeting, replying, and reading via X/Twitter GraphQL (cookie auth). - -## Disclaimer - -This project uses X/Twitter’s **undocumented** web GraphQL API (and cookie auth). X can change endpoints, query IDs, -and anti-bot behavior at any time — **expect this to break without notice**. - -## Install - -```bash -npm install -g @steipete/bird -# or -pnpm add -g @steipete/bird -# or -bun add -g @steipete/bird - -# one-shot (no install) -bunx @steipete/bird whoami -``` - -Homebrew (macOS, prebuilt Bun binary): - -```bash -brew install steipete/tap/bird -``` - -## Quickstart - -```bash -# Show the logged-in account -bird whoami - -# Discover command help -bird help whoami - -# Read a tweet (URL or ID) -bird read https://x.com/user/status/1234567890123456789 -bird 1234567890123456789 --json - -# Thread + replies -bird thread https://x.com/user/status/1234567890123456789 -bird replies 1234567890123456789 -bird replies 1234567890123456789 --max-pages 3 --json -bird thread 1234567890123456789 --max-pages 3 --json - -# Search + mentions -bird search "from:steipete" -n 5 -bird mentions -n 5 -bird mentions --user @steipete -n 5 - -# User tweets (profile timeline) -bird user-tweets @steipete -n 20 -bird user-tweets @steipete -n 50 --json - -# Bookmarks -bird bookmarks -n 5 -bird bookmarks --folder-id 123456789123456789 -n 5 # https://x.com/i/bookmarks/ -bird bookmarks --all --json -bird bookmarks --all --max-pages 2 --json -bird bookmarks --include-parent --json -bird unbookmark 1234567890123456789 -bird unbookmark https://x.com/user/status/1234567890123456789 - -# Likes -bird likes -n 5 - -# News and trending topics (AI-curated from Explore tabs) -bird news --ai-only -n 10 -bird news --sports -n 5 - -# Lists -bird list-timeline 1234567890 -n 20 -bird list-timeline https://x.com/i/lists/1234567890 --all --json -bird list-timeline 1234567890 --max-pages 3 --json - -# Following (who you follow) -bird following -n 20 -bird following --user 12345678 -n 10 # by user ID - -# Followers (who follows you) -bird followers -n 20 -bird followers --user 12345678 -n 10 # by user ID - -# Refresh GraphQL query IDs cache (no rebuild) -bird query-ids --fresh -``` - -## News & Trending - -Fetch AI-curated news and trending topics from X's Explore page tabs: - -```bash -# Fetch 10 news items from all tabs (default: For You, News, Sports, Entertainment) -bird news -n 10 - -# Fetch only AI-curated news (filters out regular trends) -bird news --ai-only -n 20 - -# Fetch from specific tabs -bird news --news-only --ai-only -n 10 -bird news --sports -n 15 -bird news --entertainment --ai-only -n 5 - -# Include related tweets for each news item -bird news --with-tweets --tweets-per-item 3 -n 10 - -# Combine multiple tab filters -bird news --sports --entertainment -n 20 - -# JSON output -bird news --json -n 5 -bird news --json-full --ai-only -n 10 # includes raw API response -``` - -Tab options (can be combined): -- `--for-you` — Fetch from For You tab only -- `--news-only` — Fetch from News tab only -- `--sports` — Fetch from Sports tab only -- `--entertainment` — Fetch from Entertainment tab only -- `--trending-only` — Fetch from Trending tab only - -By default, the command fetches from For You, News, Sports, and Entertainment tabs (Trending excluded to reduce noise). Headlines are automatically deduplicated across tabs. - -## Library - -`bird` can be used as a library (same GraphQL client as the CLI): - -```ts -import { TwitterClient, resolveCredentials } from '@steipete/bird'; - -const { cookies } = await resolveCredentials({ cookieSource: 'safari' }); -const client = new TwitterClient({ cookies }); - -// Search for tweets -const searchResult = await client.search('from:steipete', 50); - -// Fetch news and trending topics from all tabs (default: For You, News, Sports, Entertainment) -const newsResult = await client.getNews(10, { aiOnly: true }); - -// Fetch from specific tabs with related tweets -const sportsNews = await client.getNews(10, { - aiOnly: true, - withTweets: true, - tabs: ['sports', 'entertainment'] -}); -``` - -Account details (About profile): - -```ts -const aboutResult = await client.getUserAboutAccount('steipete'); -if (aboutResult.success && aboutResult.aboutProfile) { - console.log(aboutResult.aboutProfile.accountBasedIn); -} -``` - -Fields: -- `accountBasedIn` -- `source` -- `createdCountryAccurate` -- `locationAccurate` -- `learnMoreUrl` - -## Commands - -- `bird tweet ""` — post a new tweet. -- `bird reply ""` — reply to a tweet using its ID or URL. -- `bird help [command]` — show help (or help for a subcommand). -- `bird query-ids [--fresh] [--json]` — inspect or refresh cached GraphQL query IDs. -- `bird home [-n count] [--following] [--json] [--json-full]` — fetch your home timeline (For You) or Following feed. -- `bird read [--json]` — fetch tweet content as text or JSON. -- `bird [--json]` — shorthand for `read` when only a URL or ID is provided. -- `bird replies [--all] [--max-pages n] [--cursor string] [--delay ms] [--json]` — list replies to a tweet. -- `bird thread [--all] [--max-pages n] [--cursor string] [--delay ms] [--json]` — show the full conversation thread. -- `bird search "" [-n count] [--all] [--max-pages n] [--cursor string] [--json]` — search for tweets matching a query; `--max-pages` requires `--all` or `--cursor`. -- `bird mentions [-n count] [--user @handle] [--json]` — find tweets mentioning a user (defaults to the authenticated user). -- `bird user-tweets <@handle> [-n count] [--cursor string] [--max-pages n] [--delay ms] [--json]` — get tweets from a user's profile timeline. -- `bird bookmarks [-n count] [--folder-id id] [--all] [--max-pages n] [--cursor string] [--expand-root-only] [--author-chain] [--author-only] [--full-chain-only] [--include-ancestor-branches] [--include-parent] [--thread-meta] [--sort-chronological] [--json]` — list your bookmarked tweets (or a specific bookmark folder); expansion flags control thread context; `--max-pages` requires `--all` or `--cursor`. -- `bird unbookmark ` — remove one or more bookmarks by tweet ID or URL. -- `bird likes [-n count] [--all] [--max-pages n] [--cursor string] [--json] [--json-full]` — list your liked tweets; `--max-pages` requires `--all` or `--cursor`. -- `bird news [-n count] [--ai-only] [--with-tweets] [--tweets-per-item n] [--for-you] [--news-only] [--sports] [--entertainment] [--trending-only] [--json]` — fetch news and trending topics from X's Explore tabs. -- `bird trending` — alias for `news` command. -- `bird lists [--member-of] [-n count] [--json]` — list your lists (owned or memberships). -- `bird list-timeline [-n count] [--all] [--max-pages n] [--cursor string] [--json]` — get tweets from a list timeline; `--max-pages` implies `--all`. -- `bird following [--user ] [-n count] [--cursor string] [--all] [--max-pages n] [--json]` — list users that you (or another user) follow; `--max-pages` requires `--all`. -- `bird followers [--user ] [-n count] [--cursor string] [--all] [--max-pages n] [--json]` — list users that follow you (or another user); `--max-pages` requires `--all`. -- `bird about <@handle> [--json]` — get account origin and location information for a user. -- `bird whoami` — print which Twitter account your cookies belong to. -- `bird check` — show which credentials are available and where they were sourced from. - -Bookmarks flags: -- `--expand-root-only`: expand threads only when the bookmark is a root tweet. -- `--author-chain`: keep only the bookmarked author's connected self-reply chain. -- `--author-only`: include all tweets from the bookmarked author within the thread. -- `--full-chain-only`: keep the entire reply chain connected to the bookmarked tweet (all authors). -- `--include-ancestor-branches`: include sibling branches for ancestors when using `--full-chain-only`. -- `--include-parent`: include the direct parent tweet for non-root bookmarks. -- `--thread-meta`: add thread metadata fields to each tweet. -- `--sort-chronological`: sort output globally oldest to newest (default preserves bookmark order). - -Global options: -- `--auth-token `: set the `auth_token` cookie manually. -- `--ct0 `: set the `ct0` cookie manually. -- `--cookie-source `: choose browser cookie source (repeatable; order matters). -- `--chrome-profile `: Chrome profile name for cookie extraction (e.g., `Default`, `Profile 2`). -- `--chrome-profile-dir `: Chrome/Chromium profile directory or cookie DB path for cookie extraction. -- `--firefox-profile `: Firefox profile for cookie extraction. -- `--cookie-timeout `: cookie extraction timeout for keychain/OS helpers (milliseconds). -- `--timeout `: abort requests after the given timeout (milliseconds). -- `--quote-depth `: max quoted tweet depth in JSON output (default: 1; 0 disables). -- `--plain`: stable output (no emoji, no color). -- `--no-emoji`: disable emoji output. -- `--no-color`: disable ANSI colors (or set `NO_COLOR=1`). -- `--media `: attach media file (repeatable, up to 4 images or 1 video). -- `--alt `: alt text for the corresponding `--media` (repeatable). - -## Authentication (GraphQL) - -GraphQL mode uses your existing X/Twitter web session (no password prompt). It sends requests to internal -X endpoints and authenticates via cookies (`auth_token`, `ct0`). - -Write operations: -- `tweet`/`reply` primarily use GraphQL (`CreateTweet`). -- If GraphQL returns error `226` (“automated request”), `bird` falls back to the legacy `statuses/update.json` endpoint. - -`bird` resolves credentials in this order: - -1. CLI flags: `--auth-token`, `--ct0` -2. Environment variables: `AUTH_TOKEN`, `CT0` (fallback: `TWITTER_AUTH_TOKEN`, `TWITTER_CT0`) -3. Browser cookies via `@steipete/sweet-cookie` (override via `--cookie-source` order) - -Browser cookie sources: -- Safari: `~/Library/Cookies/Cookies.binarycookies` (fallback: `~/Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookies`) -- Chrome: `~/Library/Application Support/Google/Chrome//Cookies` -- Firefox: `~/Library/Application Support/Firefox/Profiles//cookies.sqlite` - - For Chromium variants (Arc/Brave/etc), pass a profile directory or cookie DB via `--chrome-profile-dir`. - -## Config (JSON5) - -Config precedence: CLI flags > env vars > project config > global config. - -- Global: `~/.config/bird/config.json5` -- Project: `./.birdrc.json5` - -Example `~/.config/bird/config.json5`: - -```json5 -{ - // Cookie source order for browser extraction (string or array) - cookieSource: ["firefox", "safari"], - chromeProfileDir: "/path/to/Chromium/Profile", - firefoxProfile: "default-release", - cookieTimeoutMs: 30000, - timeoutMs: 20000, - quoteDepth: 1 -} -``` - -Environment shortcuts: -- `BIRD_TIMEOUT_MS` -- `BIRD_COOKIE_TIMEOUT_MS` -- `BIRD_QUOTE_DEPTH` - -## Output - -- `--json` prints raw tweet objects for read/replies/thread/search/mentions/user-tweets/bookmarks/likes. -- When using `--json` with pagination (`--all`, `--cursor`, `--max-pages`, or for `user-tweets` when `-n > 20`), output is `{ tweets, nextCursor }`. -- `read` returns full text for Notes and Articles when present. -- Use `--plain` for stable, script-friendly output (no emoji, no color). - -### JSON Schema - -When using `--json`, tweet objects include: - -| Field | Type | Description | -|-------|------|-------------| -| `id` | string | Tweet ID | -| `text` | string | Full tweet text (includes Note/Article content when present) | -| `author` | object | `{ username, name }` | -| `authorId` | string? | Author's user ID | -| `createdAt` | string | Timestamp | -| `replyCount` | number | Number of replies | -| `retweetCount` | number | Number of retweets | -| `likeCount` | number | Number of likes | -| `conversationId` | string | Thread conversation ID | -| `inReplyToStatusId` | string? | Parent tweet ID (present if this is a reply) | -| `quotedTweet` | object? | Embedded quote tweet (same schema; depth controlled by `--quote-depth`) | - -When using `--json` with `following`/`followers`, user objects include: - -| Field | Type | Description | -|-------|------|-------------| -| `id` | string | User ID | -| `username` | string | Username/handle | -| `name` | string | Display name | -| `description` | string? | User bio | -| `followersCount` | number? | Followers count | -| `followingCount` | number? | Following count | -| `isBlueVerified` | boolean? | Blue verified flag | - | `profileImageUrl` | string? | Profile image URL | - | `createdAt` | string? | Account creation timestamp | - -When using `--json` with `news`/`trending`, news objects include: - -| Field | Type | Description | -|-------|------|-------------| -| `id` | string | Unique identifier for the news item | -| `headline` | string | News headline or trend title | -| `category` | string? | Category (e.g., "AI · Technology", "Trending", "News") | -| `timeAgo` | string? | Relative time (e.g., "2h ago") | -| `postCount` | number? | Number of posts | -| `description` | string? | Item description | -| `url` | string? | URL to the trend or news article | -| `tweets` | array? | Related tweets (only when `--with-tweets` is used) | -| `_raw` | object? | Raw API response (only when `--json-full` is used) | - - -## Query IDs (GraphQL) - -X rotates GraphQL “query IDs” frequently. Each GraphQL operation is addressed as: - -- `operationName` (e.g. `TweetDetail`, `CreateTweet`) -- `queryId` (rotating ID baked into X’s web client bundles) - -`bird` ships with a baseline mapping in `src/lib/query-ids.json` (copied into `dist/` on build). At runtime, -it can refresh that mapping by scraping X’s public web client bundles and caching the result on disk. - -Runtime cache: -- Default path: `~/.config/bird/query-ids-cache.json` -- Override path: `BIRD_QUERY_IDS_CACHE=/path/to/file.json` -- TTL: 24h (stale cache is still used, but marked “not fresh”) - -Auto-recovery: -- On GraphQL `404` (query ID invalid), `bird` forces a refresh once and retries. -- For `TweetDetail`/`SearchTimeline`, `bird` also rotates through a small set of known fallback IDs to reduce - breakage while refreshing. - -Refresh on demand: - -```bash -bird query-ids --fresh -``` - -Exit codes: -- `0`: success -- `1`: runtime error (network/auth/etc) -- `2`: invalid usage/validation (e.g. bad `--user` handle) - -## Version - -`bird --version` prints `package.json` version plus current git sha when available, e.g. `0.3.0 (3df7969b)`. - -## Media uploads - -- Attach media with `--media` (repeatable) and optional `--alt` per item. -- Up to 4 images/GIFs, or 1 video (no mixing). Supported: jpg, jpeg, png, webp, gif, mp4, mov. -- Images/GIFs + 1 video supported (uploads via Twitter legacy upload endpoint + cookies; video may take longer to process). - -Example: - -```bash -bird tweet "hi" --media img.png --alt "desc" -``` - -## Development - -```bash -cd ~/Projects/bird -pnpm install -pnpm run build # dist/ + bun binary -pnpm run build:dist # dist/ only -pnpm run build:binary - -pnpm run dev tweet "Test" -pnpm run dev -- --plain check -pnpm test -pnpm run lint -``` - -## Notes - -- GraphQL uses internal X endpoints and can be rate limited (429). -- Query IDs rotate; refresh at runtime with `bird query-ids --fresh` (or update the baked baseline via `pnpm run graphql:update`). diff --git a/vendor/package/dist/cli.d.ts b/vendor/package/dist/cli.d.ts deleted file mode 100644 index de8e3a0..0000000 --- a/vendor/package/dist/cli.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env node -/** - * bird - CLI tool for posting tweets and replies - * - * Usage: - * bird tweet "Hello world!" - * bird reply "This is a reply" - * bird reply "This is a reply" - * bird read - */ -export {}; -//# sourceMappingURL=cli.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/cli.d.ts.map b/vendor/package/dist/cli.d.ts.map deleted file mode 100644 index c2665e7..0000000 --- a/vendor/package/dist/cli.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"} \ No newline at end of file diff --git a/vendor/package/dist/cli.js b/vendor/package/dist/cli.js deleted file mode 100644 index 603db2d..0000000 --- a/vendor/package/dist/cli.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -/** - * bird - CLI tool for posting tweets and replies - * - * Usage: - * bird tweet "Hello world!" - * bird reply "This is a reply" - * bird reply "This is a reply" - * bird read - */ -import { createProgram, KNOWN_COMMANDS } from './cli/program.js'; -import { createCliContext } from './cli/shared.js'; -import { resolveCliInvocation } from './lib/cli-args.js'; -const rawArgs = process.argv.slice(2); -const normalizedArgs = rawArgs[0] === '--' ? rawArgs.slice(1) : rawArgs; -const ctx = createCliContext(normalizedArgs); -const program = createProgram(ctx); -const { argv, showHelp } = resolveCliInvocation(normalizedArgs, KNOWN_COMMANDS); -if (showHelp) { - program.outputHelp(); - process.exit(0); -} -if (argv) { - program.parse(argv); -} -else { - program.parse(['node', 'bird', ...normalizedArgs]); -} -//# sourceMappingURL=cli.js.map \ No newline at end of file diff --git a/vendor/package/dist/cli.js.map b/vendor/package/dist/cli.js.map deleted file mode 100644 index b732d67..0000000 --- a/vendor/package/dist/cli.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,OAAO,GAAa,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,cAAc,GAAa,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAElF,MAAM,GAAG,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAEnC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEhF,IAAI,QAAQ,EAAE,CAAC;IACb,OAAO,CAAC,UAAU,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,EAAE,CAAC;IACT,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC;AACrD,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/cli/pagination.d.ts b/vendor/package/dist/cli/pagination.d.ts deleted file mode 100644 index e8a4e26..0000000 --- a/vendor/package/dist/cli/pagination.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -export type PaginationCmdOpts = { - all?: boolean; - maxPages?: string; - cursor?: string; - delay?: string; -}; -export declare function parsePositiveIntFlag(raw: string | undefined, flagName: string): { - ok: true; - value: number | undefined; -} | { - ok: false; - error: string; -}; -export declare function parseNonNegativeIntFlag(raw: string | undefined, flagName: string, defaultValue: number): { - ok: true; - value: number; -} | { - ok: false; - error: string; -}; -export declare function parsePaginationFlags(cmdOpts: PaginationCmdOpts, opts?: { - maxPagesImpliesPagination?: boolean; - defaultDelayMs?: number; - includeDelay?: boolean; -}): { - ok: true; - usePagination: boolean; - maxPages?: number; - cursor?: string; - pageDelayMs?: number; -} | { - ok: false; - error: string; -}; -//# sourceMappingURL=pagination.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/cli/pagination.d.ts.map b/vendor/package/dist/cli/pagination.d.ts.map deleted file mode 100644 index ef39cbb..0000000 --- a/vendor/package/dist/cli/pagination.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/cli/pagination.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,MAAM,GACf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASxE;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAM5D;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,iBAAiB,EAC1B,IAAI,CAAC,EAAE;IACL,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAEC;IACE,EAAE,EAAE,IAAI,CAAC;IACT,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CA8B/B"} \ No newline at end of file diff --git a/vendor/package/dist/cli/pagination.js b/vendor/package/dist/cli/pagination.js deleted file mode 100644 index 3d7768a..0000000 --- a/vendor/package/dist/cli/pagination.js +++ /dev/null @@ -1,43 +0,0 @@ -export function parsePositiveIntFlag(raw, flagName) { - if (raw === undefined) { - return { ok: true, value: undefined }; - } - const value = Number.parseInt(raw, 10); - if (!Number.isFinite(value) || value <= 0) { - return { ok: false, error: `Invalid ${flagName}. Expected a positive integer.` }; - } - return { ok: true, value }; -} -export function parseNonNegativeIntFlag(raw, flagName, defaultValue) { - const value = Number.parseInt(raw ?? String(defaultValue), 10); - if (!Number.isFinite(value) || value < 0) { - return { ok: false, error: `Invalid ${flagName}. Expected a non-negative integer.` }; - } - return { ok: true, value }; -} -export function parsePaginationFlags(cmdOpts, opts) { - const maxPagesImpliesPagination = opts?.maxPagesImpliesPagination ?? false; - const includeDelay = opts?.includeDelay ?? false; - const defaultDelayMs = opts?.defaultDelayMs ?? 1000; - const maxPages = parsePositiveIntFlag(cmdOpts.maxPages, '--max-pages'); - if (!maxPages.ok) { - return maxPages; - } - const usePagination = Boolean(cmdOpts.all || cmdOpts.cursor || (maxPagesImpliesPagination && maxPages.value !== undefined)); - let pageDelayMs; - if (includeDelay) { - const delay = parseNonNegativeIntFlag(cmdOpts.delay, '--delay', defaultDelayMs); - if (!delay.ok) { - return delay; - } - pageDelayMs = delay.value; - } - return { - ok: true, - usePagination, - maxPages: maxPages.value, - cursor: cmdOpts.cursor, - pageDelayMs, - }; -} -//# sourceMappingURL=pagination.js.map \ No newline at end of file diff --git a/vendor/package/dist/cli/pagination.js.map b/vendor/package/dist/cli/pagination.js.map deleted file mode 100644 index 3aac4df..0000000 --- a/vendor/package/dist/cli/pagination.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/cli/pagination.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,oBAAoB,CAClC,GAAuB,EACvB,QAAgB;IAEhB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,QAAQ,gCAAgC,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAAuB,EACvB,QAAgB,EAChB,YAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,QAAQ,oCAAoC,EAAE,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAA0B,EAC1B,IAIC;IAUD,MAAM,yBAAyB,GAAG,IAAI,EAAE,yBAAyB,IAAI,KAAK,CAAC;IAC3E,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,KAAK,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC;IAEpD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAC3B,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,yBAAyB,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAC7F,CAAC;IAEF,IAAI,WAA+B,CAAC;IACpC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QACD,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,aAAa;QACb,QAAQ,EAAE,QAAQ,CAAC,KAAK;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW;KACZ,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/cli/program.d.ts b/vendor/package/dist/cli/program.d.ts deleted file mode 100644 index 3288bfa..0000000 --- a/vendor/package/dist/cli/program.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Command } from 'commander'; -import { type CliContext } from './shared.js'; -export declare const KNOWN_COMMANDS: Set; -export declare function createProgram(ctx: CliContext): Command; -//# sourceMappingURL=program.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/cli/program.d.ts.map b/vendor/package/dist/cli/program.d.ts.map deleted file mode 100644 index dd86328..0000000 --- a/vendor/package/dist/cli/program.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,aAAa,CAAC;AAEnE,eAAO,MAAM,cAAc,aAyBzB,CAAC;AAEH,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CA+GtD"} \ No newline at end of file diff --git a/vendor/package/dist/cli/program.js b/vendor/package/dist/cli/program.js deleted file mode 100644 index 1feeb22..0000000 --- a/vendor/package/dist/cli/program.js +++ /dev/null @@ -1,113 +0,0 @@ -import { Command } from 'commander'; -import { registerBookmarksCommand } from '../commands/bookmarks.js'; -import { registerCheckCommand } from '../commands/check.js'; -import { registerFollowCommands } from '../commands/follow.js'; -import { registerHelpCommand } from '../commands/help.js'; -import { registerHomeCommand } from '../commands/home.js'; -import { registerListsCommand } from '../commands/lists.js'; -import { registerNewsCommand } from '../commands/news.js'; -import { registerPostCommands } from '../commands/post.js'; -import { registerQueryIdsCommand } from '../commands/query-ids.js'; -import { registerReadCommands } from '../commands/read.js'; -import { registerSearchCommands } from '../commands/search.js'; -import { registerUnbookmarkCommand } from '../commands/unbookmark.js'; -import { registerUserTweetsCommand } from '../commands/user-tweets.js'; -import { registerUserCommands } from '../commands/users.js'; -import { getCliVersion } from '../lib/version.js'; -import { collectCookieSource } from './shared.js'; -export const KNOWN_COMMANDS = new Set([ - 'tweet', - 'reply', - 'query-ids', - 'read', - 'replies', - 'thread', - 'search', - 'mentions', - 'bookmarks', - 'unbookmark', - 'follow', - 'unfollow', - 'following', - 'followers', - 'likes', - 'lists', - 'list-timeline', - 'home', - 'user-tweets', - 'news', - 'trending', - 'help', - 'whoami', - 'check', -]); -export function createProgram(ctx) { - const program = new Command(); - program.configureHelp({ - showGlobalOptions: true, - styleTitle: (t) => ctx.colors.section(t), - styleUsage: (t) => ctx.colors.description(t), - styleCommandText: (t) => ctx.colors.command(t), - styleCommandDescription: (t) => ctx.colors.muted(t), - styleOptionTerm: (t) => ctx.colors.option(t), - styleOptionText: (t) => ctx.colors.option(t), - styleOptionDescription: (t) => ctx.colors.muted(t), - styleArgumentTerm: (t) => ctx.colors.argument(t), - styleArgumentText: (t) => ctx.colors.argument(t), - styleArgumentDescription: (t) => ctx.colors.muted(t), - styleSubcommandTerm: (t) => ctx.colors.command(t), - styleSubcommandText: (t) => ctx.colors.command(t), - styleSubcommandDescription: (t) => ctx.colors.muted(t), - styleDescriptionText: (t) => ctx.colors.muted(t), - }); - const collect = (value, previous = []) => { - previous.push(value); - return previous; - }; - program.addHelpText('beforeAll', () => `${ctx.colors.banner('bird')} ${ctx.colors.muted(getCliVersion())} ${ctx.colors.subtitle('— fast X CLI for tweeting, replying, and reading')}`); - program.name('bird').description('Post tweets and replies via Twitter/X GraphQL API').version(getCliVersion()); - const formatExample = (command, description) => `${ctx.colors.command(` ${command}`)}\n${ctx.colors.muted(` ${description}`)}`; - program.addHelpText('afterAll', () => `\n${ctx.colors.section('Examples')}\n${[ - formatExample('bird whoami', 'Show the logged-in account via GraphQL cookies'), - formatExample('bird --firefox-profile default-release whoami', 'Use Firefox profile cookies'), - formatExample('bird tweet "hello from bird"', 'Send a tweet'), - formatExample('bird 1234567890123456789 --json', 'Read a tweet (ID or URL shorthand for `read`) and print JSON'), - ].join('\n\n')}\n\n${ctx.colors.section('Shortcuts')}\n${[ - formatExample('bird [--json]', 'Shorthand for `bird read `'), - ].join('\n\n')}\n\n${ctx.colors.section('JSON Output')}\n${ctx.colors.muted(` Add ${ctx.colors.option('--json')} to: read, replies, thread, search, mentions, bookmarks, likes, following, followers, about, lists, list-timeline, user-tweets, query-ids`)}\n${ctx.colors.muted(` Add ${ctx.colors.option('--json-full')} to include raw API response in ${ctx.colors.argument('_raw')} field (tweet commands only)`)}\n${ctx.colors.muted(` (Run ${ctx.colors.command('bird --help')} to see per-command flags.)`)}`); - program.addHelpText('afterAll', () => `\n\n${ctx.colors.section('Config')}\n${ctx.colors.muted(` Reads ${ctx.colors.argument('~/.config/bird/config.json5')} and ${ctx.colors.argument('./.birdrc.json5')} (JSON5)`)}\n${ctx.colors.muted(` Supports: chromeProfile, chromeProfileDir, firefoxProfile, cookieSource, cookieTimeoutMs, timeoutMs, quoteDepth`)}\n\n${ctx.colors.section('Env')}\n${ctx.colors.muted(` ${ctx.colors.option('NO_COLOR')}, ${ctx.colors.option('BIRD_TIMEOUT_MS')}, ${ctx.colors.option('BIRD_COOKIE_TIMEOUT_MS')}, ${ctx.colors.option('BIRD_QUOTE_DEPTH')}`)}`); - program - .option('--auth-token ', 'Twitter auth_token cookie') - .option('--ct0 ', 'Twitter ct0 cookie') - .option('--chrome-profile ', 'Chrome profile name for cookie extraction', ctx.config.chromeProfile) - .option('--chrome-profile-dir ', 'Chrome/Chromium profile directory or cookie DB path for cookie extraction', ctx.config.chromeProfileDir) - .option('--firefox-profile ', 'Firefox profile name for cookie extraction', ctx.config.firefoxProfile) - .option('--cookie-timeout ', 'Cookie extraction timeout in milliseconds (keychain/OS helpers)') - .option('--cookie-source ', 'Cookie source for browser cookie extraction (repeatable)', collectCookieSource) - .option('--media ', 'Attach media file (repeatable, up to 4 images or 1 video)', collect) - .option('--alt ', 'Alt text for the corresponding --media (repeatable)', collect) - .option('--timeout ', 'Request timeout in milliseconds') - .option('--quote-depth ', 'Max quoted tweet depth (default: 1; 0 disables)') - .option('--plain', 'Plain output (stable, no emoji, no color)') - .option('--no-emoji', 'Disable emoji output') - .option('--no-color', 'Disable ANSI colors (or set NO_COLOR)'); - program.hook('preAction', (_thisCommand, actionCommand) => { - ctx.applyOutputFromCommand(actionCommand); - }); - registerHelpCommand(program, ctx); - registerQueryIdsCommand(program, ctx); - registerPostCommands(program, ctx); - registerReadCommands(program, ctx); - registerSearchCommands(program, ctx); - registerBookmarksCommand(program, ctx); - registerUnbookmarkCommand(program, ctx); - registerFollowCommands(program, ctx); - registerListsCommand(program, ctx); - registerHomeCommand(program, ctx); - registerUserCommands(program, ctx); - registerUserTweetsCommand(program, ctx); - registerNewsCommand(program, ctx); - registerCheckCommand(program, ctx); - return program; -} -//# sourceMappingURL=program.js.map \ No newline at end of file diff --git a/vendor/package/dist/cli/program.js.map b/vendor/package/dist/cli/program.js.map deleted file mode 100644 index c2ac975..0000000 --- a/vendor/package/dist/cli/program.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAmB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IACpC,OAAO;IACP,OAAO;IACP,WAAW;IACX,MAAM;IACN,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,WAAW;IACX,WAAW;IACX,OAAO;IACP,OAAO;IACP,eAAe;IACf,MAAM;IACN,aAAa;IACb,MAAM;IACN,UAAU;IACV,MAAM;IACN,QAAQ;IACR,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa,CAAC,GAAe;IAC3C,MAAM,OAAO,GAAY,IAAI,OAAO,EAAE,CAAC;IAEvC,OAAO,CAAC,aAAa,CAAC;QACpB,iBAAiB,EAAE,IAAI;QACvB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5C,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,uBAAuB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,sBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChD,wBAAwB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,0BAA0B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KACjD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,WAAqB,EAAE,EAAY,EAAE;QACnE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,WAAW,CACjB,WAAW,EACX,GAAG,EAAE,CACH,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CACtF,kDAAkD,CACnD,EAAE,CACN,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,mDAAmD,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAE/G,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAU,EAAE,CACrE,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,WAAW,EAAE,CAAC,EAAE,CAAC;IAErF,OAAO,CAAC,WAAW,CACjB,UAAU,EACV,GAAG,EAAE,CACH,KAAK,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;QACtC,aAAa,CAAC,aAAa,EAAE,gDAAgD,CAAC;QAC9E,aAAa,CAAC,+CAA+C,EAAE,6BAA6B,CAAC;QAC7F,aAAa,CAAC,8BAA8B,EAAE,cAAc,CAAC;QAC7D,aAAa,CACX,iCAAiC,EACjC,8DAA8D,CAC/D;KACF,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK;QACvD,aAAa,CAAC,iCAAiC,EAAE,6CAA6C,CAAC;KAChG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CACzE,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,2IAA2I,CAChL,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CACpB,SAAS,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CACtI,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,6BAA6B,CAAC,EAAE,CAC/G,CAAC;IAEF,OAAO,CAAC,WAAW,CACjB,UAAU,EACV,GAAG,EAAE,CACH,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CACtD,WAAW,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CACtH,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CACpB,mHAAmH,CACpH,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CACpD,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CACxK,EAAE,CACN,CAAC;IAEF,OAAO;SACJ,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,CAAC;SAC3D,MAAM,CAAC,eAAe,EAAE,oBAAoB,CAAC;SAC7C,MAAM,CAAC,yBAAyB,EAAE,2CAA2C,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;SACxG,MAAM,CACL,6BAA6B,EAC7B,2EAA2E,EAC3E,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAC5B;SACA,MAAM,CAAC,0BAA0B,EAAE,4CAA4C,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC;SAC3G,MAAM,CAAC,uBAAuB,EAAE,iEAAiE,CAAC;SAClG,MAAM,CAAC,0BAA0B,EAAE,0DAA0D,EAAE,mBAAmB,CAAC;SACnH,MAAM,CAAC,gBAAgB,EAAE,2DAA2D,EAAE,OAAO,CAAC;SAC9F,MAAM,CAAC,cAAc,EAAE,qDAAqD,EAAE,OAAO,CAAC;SACtF,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC;SAC3D,MAAM,CAAC,uBAAuB,EAAE,iDAAiD,CAAC;SAClF,MAAM,CAAC,SAAS,EAAE,2CAA2C,CAAC;SAC9D,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,uCAAuC,CAAC,CAAC;IAEjE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE;QACxD,GAAG,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACtC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,wBAAwB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvC,yBAAyB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,yBAAyB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAEnC,OAAO,OAAO,CAAC;AACjB,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/cli/shared.d.ts b/vendor/package/dist/cli/shared.d.ts deleted file mode 100644 index bfd7e5f..0000000 --- a/vendor/package/dist/cli/shared.d.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Command } from 'commander'; -import { type CookieSource, resolveCredentials } from '../lib/cookies.js'; -import { labelPrefix, type OutputConfig, statusPrefix } from '../lib/output.js'; -import type { TweetData } from '../lib/twitter-client.js'; -export type BirdConfig = { - chromeProfile?: string; - chromeProfileDir?: string; - firefoxProfile?: string; - cookieSource?: CookieSource | CookieSource[]; - cookieTimeoutMs?: number; - timeoutMs?: number; - quoteDepth?: number; -}; -export type MediaSpec = { - path: string; - alt?: string; - mime: string; - buffer: Buffer; -}; -export type CliContext = { - isTty: boolean; - getOutput: () => OutputConfig; - colors: { - banner: (t: string) => string; - subtitle: (t: string) => string; - section: (t: string) => string; - bullet: (t: string) => string; - command: (t: string) => string; - option: (t: string) => string; - argument: (t: string) => string; - description: (t: string) => string; - muted: (t: string) => string; - accent: (t: string) => string; - }; - p: (kind: Parameters[0]) => string; - l: (kind: Parameters[0]) => string; - config: BirdConfig; - applyOutputFromCommand: (command: Command) => void; - resolveTimeoutFromOptions: (options: { - timeout?: string | number; - }) => number | undefined; - resolveQuoteDepthFromOptions: (options: { - quoteDepth?: string | number; - }) => number | undefined; - resolveCredentialsFromOptions: (opts: CredentialsOptions) => ReturnType; - loadMedia: (opts: { - media: string[]; - alts: string[]; - }) => MediaSpec[]; - printTweets: (tweets: TweetData[], opts?: { - json?: boolean; - emptyMessage?: string; - showSeparator?: boolean; - }) => void; - printTweetsResult: (result: { - tweets?: TweetData[]; - nextCursor?: string; - }, opts: { - json: boolean; - usePagination: boolean; - emptyMessage: string; - }) => void; - extractTweetId: (tweetIdOrUrl: string) => string; -}; -export declare const collectCookieSource: (value: string, previous?: CookieSource[]) => CookieSource[]; -type CredentialsOptions = { - authToken?: string; - ct0?: string; - chromeProfile?: string; - chromeProfileDir?: string; - firefoxProfile?: string; - cookieSource?: CookieSource[]; - cookieTimeout?: string | number; -}; -export declare function createCliContext(normalizedArgs: string[], env?: NodeJS.ProcessEnv): CliContext; -export {}; -//# sourceMappingURL=shared.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/cli/shared.d.ts.map b/vendor/package/dist/cli/shared.d.ts.map deleted file mode 100644 index 1d4a929..0000000 --- a/vendor/package/dist/cli/shared.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/cli/shared.js b/vendor/package/dist/cli/shared.js deleted file mode 100644 index 8848447..0000000 --- a/vendor/package/dist/cli/shared.js +++ /dev/null @@ -1,327 +0,0 @@ -import { existsSync, readFileSync } from 'node:fs'; -import { homedir } from 'node:os'; -import { join } from 'node:path'; -import JSON5 from 'json5'; -import kleur from 'kleur'; -import { resolveCredentials } from '../lib/cookies.js'; -import { extractTweetId } from '../lib/extract-tweet-id.js'; -import { hyperlink, labelPrefix, resolveOutputConfigFromArgv, resolveOutputConfigFromCommander, statusPrefix, } from '../lib/output.js'; -const COOKIE_SOURCES = ['safari', 'chrome', 'firefox']; -function parseCookieSource(value) { - const normalized = value.trim().toLowerCase(); - if (normalized === 'safari' || normalized === 'chrome' || normalized === 'firefox') { - return normalized; - } - throw new Error(`Invalid --cookie-source "${value}". Allowed: safari, chrome, firefox.`); -} -export const collectCookieSource = (value, previous = []) => { - previous.push(parseCookieSource(value)); - return previous; -}; -function resolveCookieSourceOrder(input) { - if (typeof input === 'string') { - return [parseCookieSource(input)]; - } - if (Array.isArray(input)) { - const result = []; - for (const entry of input) { - if (typeof entry !== 'string') { - continue; - } - result.push(parseCookieSource(entry)); - } - return result.length > 0 ? result : undefined; - } - return undefined; -} -function resolveTimeoutMs(...values) { - for (const value of values) { - if (value === undefined || value === null || value === '') { - continue; - } - const parsed = typeof value === 'number' ? value : Number(value); - if (Number.isFinite(parsed) && parsed > 0) { - return parsed; - } - } - return undefined; -} -function resolveQuoteDepth(...values) { - for (const value of values) { - if (value === undefined || value === null || value === '') { - continue; - } - const parsed = typeof value === 'number' ? value : Number.parseInt(value, 10); - if (Number.isFinite(parsed) && parsed >= 0) { - return Math.floor(parsed); - } - } - return undefined; -} -function detectMime(path) { - const ext = path.toLowerCase(); - if (ext.endsWith('.jpg') || ext.endsWith('.jpeg')) { - return 'image/jpeg'; - } - if (ext.endsWith('.png')) { - return 'image/png'; - } - if (ext.endsWith('.webp')) { - return 'image/webp'; - } - if (ext.endsWith('.gif')) { - return 'image/gif'; - } - if (ext.endsWith('.mp4') || ext.endsWith('.m4v')) { - return 'video/mp4'; - } - if (ext.endsWith('.mov')) { - return 'video/quicktime'; - } - return null; -} -function readConfigFile(path, warn) { - if (!existsSync(path)) { - return {}; - } - try { - const raw = readFileSync(path, 'utf8'); - const parsed = JSON5.parse(raw); - return parsed ?? {}; - } - catch (error) { - warn(`Failed to parse config at ${path}: ${error instanceof Error ? error.message : String(error)}`); - return {}; - } -} -function loadConfig(warn) { - const globalPath = join(homedir(), '.config', 'bird', 'config.json5'); - const localPath = join(process.cwd(), '.birdrc.json5'); - return { - ...readConfigFile(globalPath, warn), - ...readConfigFile(localPath, warn), - }; -} -export function createCliContext(normalizedArgs, env = process.env) { - const isTty = process.stdout.isTTY; - let output = resolveOutputConfigFromArgv(normalizedArgs, env, isTty); - kleur.enabled = output.color; - const wrap = (styler) => (text) => isTty ? styler(text) : text; - const colors = { - banner: wrap((t) => kleur.bold().blue(t)), - subtitle: wrap((t) => kleur.dim(t)), - section: wrap((t) => kleur.bold().white(t)), - bullet: wrap((t) => kleur.blue(t)), - command: wrap((t) => kleur.bold().cyan(t)), - option: wrap((t) => kleur.cyan(t)), - argument: wrap((t) => kleur.magenta(t)), - description: wrap((t) => kleur.white(t)), - muted: wrap((t) => kleur.gray(t)), - accent: wrap((t) => kleur.green(t)), - }; - const p = (kind) => { - const prefix = statusPrefix(kind, output); - if (output.plain || !output.color) { - return prefix; - } - if (kind === 'ok') { - return kleur.green(prefix); - } - if (kind === 'warn') { - return kleur.yellow(prefix); - } - if (kind === 'err') { - return kleur.red(prefix); - } - if (kind === 'info') { - return kleur.cyan(prefix); - } - return kleur.gray(prefix); - }; - const l = (kind) => { - const prefix = labelPrefix(kind, output); - if (output.plain || !output.color) { - return prefix; - } - if (kind === 'url') { - return kleur.cyan(prefix); - } - if (kind === 'date') { - return kleur.magenta(prefix); - } - if (kind === 'source') { - return kleur.gray(prefix); - } - if (kind === 'engine') { - return kleur.blue(prefix); - } - if (kind === 'credentials') { - return kleur.yellow(prefix); - } - if (kind === 'user') { - return kleur.cyan(prefix); - } - if (kind === 'userId') { - return kleur.magenta(prefix); - } - if (kind === 'email') { - return kleur.green(prefix); - } - return kleur.gray(prefix); - }; - const config = loadConfig((message) => { - console.error(colors.muted(`${p('warn')}${message}`)); - }); - function applyOutputFromCommand(command) { - const opts = command.optsWithGlobals(); - output = resolveOutputConfigFromCommander(opts, env, isTty); - kleur.enabled = output.color; - } - function resolveTimeoutFromOptions(options) { - return resolveTimeoutMs(options.timeout, config.timeoutMs, env.BIRD_TIMEOUT_MS); - } - function resolveCookieTimeoutFromOptions(options) { - return resolveTimeoutMs(options.cookieTimeout, config.cookieTimeoutMs, env.BIRD_COOKIE_TIMEOUT_MS); - } - function resolveQuoteDepthFromOptions(options) { - return resolveQuoteDepth(options.quoteDepth, config.quoteDepth, env.BIRD_QUOTE_DEPTH); - } - function resolveCredentialsFromOptions(opts) { - const cookieSource = opts.cookieSource?.length - ? opts.cookieSource - : (resolveCookieSourceOrder(config.cookieSource) ?? COOKIE_SOURCES); - const chromeProfile = opts.chromeProfileDir || opts.chromeProfile || config.chromeProfileDir || config.chromeProfile; - return resolveCredentials({ - authToken: opts.authToken, - ct0: opts.ct0, - cookieSource, - chromeProfile, - firefoxProfile: opts.firefoxProfile || config.firefoxProfile, - cookieTimeoutMs: resolveCookieTimeoutFromOptions(opts), - }); - } - function loadMedia(opts) { - if (opts.media.length === 0) { - return []; - } - const specs = []; - for (const [index, path] of opts.media.entries()) { - const mime = detectMime(path); - if (!mime) { - throw new Error(`Unsupported media type for ${path}. Supported: jpg, jpeg, png, webp, gif, mp4, mov`); - } - const buffer = readFileSync(path); - specs.push({ path, mime, buffer, alt: opts.alts[index] }); - } - const videoCount = specs.filter((m) => m.mime.startsWith('video/')).length; - if (videoCount > 1) { - throw new Error('Only one video can be attached'); - } - if (videoCount === 1 && specs.length > 1) { - throw new Error('Video cannot be combined with other media'); - } - if (specs.length > 4) { - throw new Error('Maximum 4 media attachments'); - } - return specs; - } - function printTweets(tweets, opts = {}) { - if (opts.json) { - console.log(JSON.stringify(tweets, null, 2)); - return; - } - if (tweets.length === 0) { - console.log(opts.emptyMessage ?? 'No tweets found.'); - return; - } - const useEmoji = output.emoji && !output.plain; - const articleLabel = useEmoji ? '📰' : 'Article:'; - const mediaLabel = (type) => { - if (useEmoji) { - return type === 'video' ? '🎬' : type === 'animated_gif' ? '🔄' : '🖼️'; - } - return type === 'video' ? 'VIDEO:' : type === 'animated_gif' ? 'GIF:' : 'PHOTO:'; - }; - const quotePrefix = useEmoji ? { top: '┌─', mid: '│ ', bot: '└─' } : { top: '> ', mid: '> ', bot: '> ' }; - for (const tweet of tweets) { - console.log(`\n@${tweet.author.username} (${tweet.author.name}):`); - // Display tweet text, with article indicator if present - if (tweet.article) { - // Full body mode: text starts with article title (from extractArticleText) - // Preview mode: text is short tweet intro that doesn't start with title - const hasFullBody = tweet.text.startsWith(tweet.article.title); - if (hasFullBody) { - console.log(`${articleLabel} ${tweet.text}`); - } - else { - console.log(`${articleLabel} ${tweet.article.title}`); - if (tweet.article.previewText) { - console.log(` ${tweet.article.previewText}`); - } - } - } - else { - console.log(tweet.text); - } - // Display media attachments - if (tweet.media && tweet.media.length > 0) { - for (const m of tweet.media) { - console.log(`${mediaLabel(m.type)} ${m.url}`); - } - } - // Display quoted tweet - if (tweet.quotedTweet) { - console.log(`${quotePrefix.top} QT @${tweet.quotedTweet.author.username}:`); - const qtText = tweet.quotedTweet.article - ? `${articleLabel} ${tweet.quotedTweet.article.title}` - : tweet.quotedTweet.text; - // Indent and truncate quoted tweet text - const maxLen = 280; - const truncated = qtText.length > maxLen ? `${qtText.slice(0, maxLen)}...` : qtText; - for (const line of truncated.split('\n').slice(0, 4)) { - console.log(`${quotePrefix.mid}${line}`); - } - // Display quoted tweet media - if (tweet.quotedTweet.media && tweet.quotedTweet.media.length > 0) { - for (const m of tweet.quotedTweet.media) { - console.log(`${quotePrefix.mid}${mediaLabel(m.type)} ${m.url}`); - } - } - console.log(`${quotePrefix.bot} https://x.com/${tweet.quotedTweet.author.username}/status/${tweet.quotedTweet.id}`); - } - if (tweet.createdAt) { - console.log(`${l('date')}${tweet.createdAt}`); - } - const tweetUrl = `https://x.com/${tweet.author.username}/status/${tweet.id}`; - console.log(`${l('url')}${hyperlink(tweetUrl, tweetUrl, output)}`); - if (opts.showSeparator ?? true) { - console.log('─'.repeat(50)); - } - } - } - function printTweetsResult(result, opts) { - const tweets = result.tweets ?? []; - if (opts.json && opts.usePagination) { - console.log(JSON.stringify({ tweets, nextCursor: result.nextCursor ?? null }, null, 2)); - return; - } - printTweets(tweets, { json: opts.json, emptyMessage: opts.emptyMessage }); - } - return { - isTty, - getOutput: () => output, - colors, - p, - l, - config, - applyOutputFromCommand, - resolveTimeoutFromOptions, - resolveQuoteDepthFromOptions, - resolveCredentialsFromOptions, - loadMedia, - printTweets, - printTweetsResult, - extractTweetId, - }; -} -//# sourceMappingURL=shared.js.map \ No newline at end of file diff --git a/vendor/package/dist/cli/shared.js.map b/vendor/package/dist/cli/shared.js.map deleted file mode 100644 index 84f92cf..0000000 --- a/vendor/package/dist/cli/shared.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/cli/shared.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/bookmarks.d.ts b/vendor/package/dist/commands/bookmarks.d.ts deleted file mode 100644 index 9c04f03..0000000 --- a/vendor/package/dist/commands/bookmarks.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerBookmarksCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=bookmarks.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/bookmarks.d.ts.map b/vendor/package/dist/commands/bookmarks.d.ts.map deleted file mode 100644 index e81b302..0000000 --- a/vendor/package/dist/commands/bookmarks.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bookmarks.d.ts","sourceRoot":"","sources":["../../src/commands/bookmarks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAsOhF"} \ No newline at end of file diff --git a/vendor/package/dist/commands/bookmarks.js b/vendor/package/dist/commands/bookmarks.js deleted file mode 100644 index 339e35a..0000000 --- a/vendor/package/dist/commands/bookmarks.js +++ /dev/null @@ -1,189 +0,0 @@ -import { parsePaginationFlags } from '../cli/pagination.js'; -import { extractBookmarkFolderId } from '../lib/extract-bookmark-folder-id.js'; -import { addThreadMetadata, filterAuthorChain, filterAuthorOnly, filterFullChain } from '../lib/thread-filters.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -export function registerBookmarksCommand(program, ctx) { - program - .command('bookmarks') - .description('Get your bookmarked tweets') - .option('-n, --count ', 'Number of bookmarks to fetch', '20') - .option('--folder-id ', 'Bookmark folder (collection) id') - .option('--all', 'Fetch all bookmarks (paged)') - .option('--max-pages ', 'Stop after N pages when using --all') - .option('--cursor ', 'Resume pagination from a cursor') - .option('--expand-root-only', 'Only expand threads when bookmarked tweet is root') - .option('--author-chain', 'Only include author self-reply chains connected to the bookmark') - .option('--author-only', 'Include all tweets from bookmarked tweet author in thread') - .option('--full-chain-only', 'Save entire reply chain connected to the bookmarked tweet') - .option('--include-ancestor-branches', 'Include sibling branches for ancestors when using --full-chain-only') - .option('--include-parent', 'Include direct parent tweet for non-root bookmarks') - .option('--thread-meta', 'Add metadata fields (isThread, threadPosition, etc.)') - .option('--sort-chronological', 'Sort output globally oldest -> newest') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '20', 10); - const pagination = parsePaginationFlags(cmdOpts); - if (!pagination.ok) { - console.error(`${ctx.p('err')}${pagination.error}`); - process.exit(1); - } - const maxPages = pagination.maxPages; - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const usePagination = pagination.usePagination; - if (maxPages !== undefined && !usePagination) { - console.error(`${ctx.p('err')}--max-pages requires --all or --cursor.`); - process.exit(1); - } - if (!usePagination && (!Number.isFinite(count) || count <= 0)) { - console.error(`${ctx.p('err')}Invalid --count. Expected a positive integer.`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - const folderId = cmdOpts.folderId ? extractBookmarkFolderId(cmdOpts.folderId) : null; - if (cmdOpts.folderId && !folderId) { - console.error(`${ctx.p('err')}Invalid --folder-id. Expected numeric ID or https://x.com/i/bookmarks/.`); - process.exit(1); - } - const includeRaw = cmdOpts.jsonFull ?? false; - const timelineOptions = { includeRaw }; - const paginationOptions = { includeRaw, maxPages, cursor: pagination.cursor }; - const result = folderId - ? usePagination - ? await client.getAllBookmarkFolderTimeline(folderId, paginationOptions) - : await client.getBookmarkFolderTimeline(folderId, count, timelineOptions) - : usePagination - ? await client.getAllBookmarks(paginationOptions) - : await client.getBookmarks(count, timelineOptions); - if (!result.success) { - console.error(`${ctx.p('err')}Failed to fetch bookmarks: ${result.error}`); - process.exit(1); - } - if (cmdOpts.authorChain && (cmdOpts.authorOnly || cmdOpts.fullChainOnly)) { - console.error(`${ctx.p('warn')}--author-chain already limits to the connected self-reply chain; ` + - 'other chain filters are redundant.'); - } - if (cmdOpts.includeAncestorBranches && !cmdOpts.fullChainOnly) { - console.error(`${ctx.p('warn')}--include-ancestor-branches only applies with --full-chain-only.`); - } - const bookmarks = result.tweets; - if (!bookmarks || bookmarks.length === 0) { - const emptyMessage = folderId ? 'No bookmarks found in folder.' : 'No bookmarks found.'; - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - ctx.printTweetsResult(result, { json: isJson, usePagination, emptyMessage }); - return; - } - const expandedResults = []; - const threadCache = new Map(); - const includeMeta = Boolean(cmdOpts.threadMeta); - const includeParent = Boolean(cmdOpts.includeParent); - const expandRootOnly = Boolean(cmdOpts.expandRootOnly); - const filterAuthorChainFlag = Boolean(cmdOpts.authorChain); - const filterAuthorOnlyFlag = Boolean(cmdOpts.authorOnly); - const filterFullChainFlag = Boolean(cmdOpts.fullChainOnly); - const includeAncestorBranches = Boolean(cmdOpts.includeAncestorBranches) && filterFullChainFlag; - const useChronologicalSort = Boolean(cmdOpts.sortChronological); - const shouldAttemptExpand = expandRootOnly || filterAuthorChainFlag || filterAuthorOnlyFlag || filterFullChainFlag; - const shouldFetchThread = shouldAttemptExpand || includeMeta; - const fetchThread = async (tweet) => { - const cachedKey = tweet.conversationId ?? tweet.id; - const cached = threadCache.get(cachedKey); - if (cached) { - return cached; - } - const threadResult = await client.getThread(tweet.id, { includeRaw }); - if (!threadResult.success) { - console.error(`${ctx.p('warn')}Failed to expand thread for ${tweet.id}: ${threadResult.error ?? 'Unknown error'}`); - return null; - } - if (!threadResult.tweets) { - console.error(`${ctx.p('warn')}No thread tweets returned for ${tweet.id}.`); - return null; - } - const rootKey = threadResult.tweets[0]?.conversationId ?? cachedKey; - threadCache.set(rootKey, threadResult.tweets); - return threadResult.tweets; - }; - const delayBetweenExpansionsMs = 1000; - for (let index = 0; index < bookmarks.length; index += 1) { - const bookmark = bookmarks[index]; - const isRoot = !bookmark.inReplyToStatusId; - let threadTweets = null; - if (shouldFetchThread) { - if (!expandRootOnly || isRoot || includeMeta) { - if (index > 0) { - await new Promise((resolve) => setTimeout(resolve, delayBetweenExpansionsMs)); - } - threadTweets = await fetchThread(bookmark); - } - } - let outputTweets = [bookmark]; - if (shouldAttemptExpand) { - if (expandRootOnly && !isRoot) { - outputTweets = [bookmark]; - } - else if (threadTweets) { - if (filterAuthorChainFlag) { - outputTweets = filterAuthorChain(threadTweets, bookmark); - } - else { - outputTweets = filterFullChainFlag - ? filterFullChain(threadTweets, bookmark, { includeAncestorBranches }) - : threadTweets; - if (filterAuthorOnlyFlag) { - outputTweets = filterAuthorOnly(outputTweets, bookmark); - } - } - } - } - if (includeParent && bookmark.inReplyToStatusId) { - const alreadyIncluded = outputTweets.some((tweet) => tweet.id === bookmark.inReplyToStatusId); - if (!alreadyIncluded) { - const parentFromThread = threadTweets?.find((tweet) => tweet.id === bookmark.inReplyToStatusId); - if (parentFromThread) { - expandedResults.push(parentFromThread); - } - else { - const parentResult = await client.getTweet(bookmark.inReplyToStatusId, { includeRaw }); - if (parentResult.success && parentResult.tweet) { - expandedResults.push(parentResult.tweet); - } - } - } - } - expandedResults.push(...outputTweets); - } - let finalResults = expandedResults; - if (includeMeta) { - finalResults = expandedResults.map((tweet) => { - const cacheKey = tweet.conversationId ?? tweet.id; - let conversationTweets = threadCache.get(cacheKey); - if (!conversationTweets) { - conversationTweets = [tweet]; - } - return addThreadMetadata(tweet, conversationTweets); - }); - } - const uniqueTweets = Array.from(new Map(finalResults.map((tweet) => [tweet.id, tweet])).values()); - if (useChronologicalSort) { - uniqueTweets.sort((a, b) => { - const aTime = a.createdAt ? Date.parse(a.createdAt) : 0; - const bTime = b.createdAt ? Date.parse(b.createdAt) : 0; - return aTime - bTime; - }); - } - const emptyMessage = folderId ? 'No bookmarks found in folder.' : 'No bookmarks found.'; - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - ctx.printTweetsResult({ tweets: uniqueTweets, nextCursor: result.nextCursor }, { json: isJson, usePagination, emptyMessage }); - }); -} -//# sourceMappingURL=bookmarks.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/bookmarks.js.map b/vendor/package/dist/commands/bookmarks.js.map deleted file mode 100644 index 80a0666..0000000 --- a/vendor/package/dist/commands/bookmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bookmarks.js","sourceRoot":"","sources":["../../src/commands/bookmarks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/check.d.ts b/vendor/package/dist/commands/check.d.ts deleted file mode 100644 index d4ca6df..0000000 --- a/vendor/package/dist/commands/check.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerCheckCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=check.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/check.d.ts.map b/vendor/package/dist/commands/check.d.ts.map deleted file mode 100644 index 20ee921..0000000 --- a/vendor/package/dist/commands/check.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA4C5E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/check.js b/vendor/package/dist/commands/check.js deleted file mode 100644 index a6e2108..0000000 --- a/vendor/package/dist/commands/check.js +++ /dev/null @@ -1,43 +0,0 @@ -export function registerCheckCommand(program, ctx) { - program - .command('check') - .description('Check credential availability') - .action(async () => { - const opts = program.opts(); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - console.log(`${ctx.p('info')}Credential check`); - console.log('─'.repeat(40)); - if (cookies.authToken) { - console.log(`${ctx.p('ok')}auth_token: ${cookies.authToken.slice(0, 10)}...`); - } - else { - console.log(`${ctx.p('err')}auth_token: not found`); - } - if (cookies.ct0) { - console.log(`${ctx.p('ok')}ct0: ${cookies.ct0.slice(0, 10)}...`); - } - else { - console.log(`${ctx.p('err')}ct0: not found`); - } - if (cookies.source) { - console.log(`${ctx.l('source')}${cookies.source}`); - } - if (warnings.length > 0) { - console.log(`\n${ctx.p('warn')}Warnings:`); - for (const warning of warnings) { - console.log(` - ${warning}`); - } - } - if (cookies.authToken && cookies.ct0) { - console.log(`\n${ctx.p('ok')}Ready to tweet!`); - } - else { - console.log(`\n${ctx.p('err')}Missing credentials. Options:`); - console.log(' 1. Login to x.com in Safari/Chrome/Firefox'); - console.log(' 2. Set AUTH_TOKEN and CT0 environment variables'); - console.log(' 3. Use --auth-token and --ct0 flags'); - process.exit(1); - } - }); -} -//# sourceMappingURL=check.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/check.js.map b/vendor/package/dist/commands/check.js.map deleted file mode 100644 index 6332a11..0000000 --- a/vendor/package/dist/commands/check.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,GAAe;IACpE,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAE5E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/commands/follow.d.ts b/vendor/package/dist/commands/follow.d.ts deleted file mode 100644 index f80d3e1..0000000 --- a/vendor/package/dist/commands/follow.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerFollowCommands(program: Command, ctx: CliContext): void; -//# sourceMappingURL=follow.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/follow.d.ts.map b/vendor/package/dist/commands/follow.d.ts.map deleted file mode 100644 index 3d1e942..0000000 --- a/vendor/package/dist/commands/follow.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"follow.d.ts","sourceRoot":"","sources":["../../src/commands/follow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAmCnD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA8E9E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/follow.js b/vendor/package/dist/commands/follow.js deleted file mode 100644 index 908ddee..0000000 --- a/vendor/package/dist/commands/follow.js +++ /dev/null @@ -1,91 +0,0 @@ -import { normalizeHandle } from '../lib/normalize-handle.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -const ONLY_DIGITS_REGEX = /^\d+$/; -async function resolveUserId(client, usernameOrId, ctx) { - const raw = usernameOrId.trim(); - const isNumeric = ONLY_DIGITS_REGEX.test(raw); - // Otherwise, treat as username and look up - const handle = normalizeHandle(raw); - if (handle) { - const lookup = await client.getUserIdByUsername(handle); - if (lookup.success && lookup.userId) { - return { userId: lookup.userId, username: lookup.username }; - } - if (!isNumeric) { - console.error(`${ctx.p('err')}Failed to find user @${handle}: ${lookup.error ?? 'Unknown error'}`); - return null; - } - } - if (isNumeric) { - return { userId: raw }; - } - console.error(`${ctx.p('err')}Invalid username: ${usernameOrId}`); - return null; -} -export function registerFollowCommands(program, ctx) { - program - .command('follow') - .description('Follow a user') - .argument('', 'Username (with or without @) or user ID to follow') - .action(async (usernameOrId) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - const resolved = await resolveUserId(client, usernameOrId, ctx); - if (!resolved) { - process.exit(1); - } - const { userId, username } = resolved; - const displayName = username ? `@${username}` : userId; - const result = await client.follow(userId); - if (result.success) { - const finalName = result.username ? `@${result.username}` : displayName; - console.log(`${ctx.p('ok')}Now following ${finalName}`); - } - else { - console.error(`${ctx.p('err')}Failed to follow ${displayName}: ${result.error}`); - process.exit(1); - } - }); - program - .command('unfollow') - .description('Unfollow a user') - .argument('', 'Username (with or without @) or user ID to unfollow') - .action(async (usernameOrId) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - const resolved = await resolveUserId(client, usernameOrId, ctx); - if (!resolved) { - process.exit(1); - } - const { userId, username } = resolved; - const displayName = username ? `@${username}` : userId; - const result = await client.unfollow(userId); - if (result.success) { - const finalName = result.username ? `@${result.username}` : displayName; - console.log(`${ctx.p('ok')}Unfollowed ${finalName}`); - } - else { - console.error(`${ctx.p('err')}Failed to unfollow ${displayName}: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=follow.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/follow.js.map b/vendor/package/dist/commands/follow.js.map deleted file mode 100644 index b21dcc4..0000000 --- a/vendor/package/dist/commands/follow.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"follow.js","sourceRoot":"","sources":["../../src/commands/follow.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/help.d.ts b/vendor/package/dist/commands/help.d.ts deleted file mode 100644 index 335fbe0..0000000 --- a/vendor/package/dist/commands/help.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerHelpCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=help.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/help.d.ts.map b/vendor/package/dist/commands/help.d.ts.map deleted file mode 100644 index d89e7eb..0000000 --- a/vendor/package/dist/commands/help.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAmB3E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/help.js b/vendor/package/dist/commands/help.js deleted file mode 100644 index b607c7e..0000000 --- a/vendor/package/dist/commands/help.js +++ /dev/null @@ -1,19 +0,0 @@ -export function registerHelpCommand(program, ctx) { - program - .command('help [command]') - .description('Show help for a command') - .action((commandName) => { - if (!commandName) { - program.outputHelp(); - return; - } - const cmd = program.commands.find((c) => c.name() === commandName); - if (!cmd) { - console.error(`${ctx.p('err')}Unknown command: ${commandName}`); - process.exitCode = 2; - return; - } - cmd.outputHelp(); - }); -} -//# sourceMappingURL=help.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/help.js.map b/vendor/package/dist/commands/help.js.map deleted file mode 100644 index e4c9333..0000000 --- a/vendor/package/dist/commands/help.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAe;IACnE,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,yBAAyB,CAAC;SACtC,MAAM,CAAC,CAAC,WAAoB,EAAE,EAAE;QAC/B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,GAAG,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/commands/home.d.ts b/vendor/package/dist/commands/home.d.ts deleted file mode 100644 index 1e21040..0000000 --- a/vendor/package/dist/commands/home.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerHomeCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=home.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/home.d.ts.map b/vendor/package/dist/commands/home.d.ts.map deleted file mode 100644 index 5271787..0000000 --- a/vendor/package/dist/commands/home.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../src/commands/home.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA8C3E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/home.js b/vendor/package/dist/commands/home.js deleted file mode 100644 index ab1da93..0000000 --- a/vendor/package/dist/commands/home.js +++ /dev/null @@ -1,43 +0,0 @@ -import { TwitterClient } from '../lib/twitter-client.js'; -export function registerHomeCommand(program, ctx) { - program - .command('home') - .description('Get your home timeline ("For You" feed)') - .option('-n, --count ', 'Number of tweets to fetch', '20') - .option('--following', 'Get "Following" feed (chronological) instead of "For You"') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '20', 10); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - if (!Number.isFinite(count) || count <= 0) { - console.error(`${ctx.p('err')}Invalid --count. Expected a positive integer.`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - const includeRaw = cmdOpts.jsonFull ?? false; - const result = cmdOpts.following - ? await client.getHomeLatestTimeline(count, { includeRaw }) - : await client.getHomeTimeline(count, { includeRaw }); - if (result.success) { - const feedType = cmdOpts.following ? 'Following' : 'For You'; - const emptyMessage = `No tweets found in ${feedType} timeline.`; - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - ctx.printTweets(result.tweets, { json: isJson, emptyMessage }); - } - else { - console.error(`${ctx.p('err')}Failed to fetch home timeline: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=home.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/home.js.map b/vendor/package/dist/commands/home.js.map deleted file mode 100644 index d7de109..0000000 --- a/vendor/package/dist/commands/home.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/commands/home.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,GAAe;IACnE,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,IAAI,CAAC;SACjE,MAAM,CAAC,aAAa,EAAE,2DAA2D,CAAC;SAClF,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,aAAa,EAAE,yDAAyD,CAAC;SAChF,MAAM,CAAC,KAAK,EAAE,OAAoF,EAAE,EAAE;QACrG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAEzD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAE5E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAE7C,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS;YAC9B,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC;YAC3D,CAAC,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,MAAM,YAAY,GAAG,sBAAsB,QAAQ,YAAY,CAAC;YAChE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzD,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/commands/lists.d.ts b/vendor/package/dist/commands/lists.d.ts deleted file mode 100644 index aa365d6..0000000 --- a/vendor/package/dist/commands/lists.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerListsCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=lists.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/lists.d.ts.map b/vendor/package/dist/commands/lists.d.ts.map deleted file mode 100644 index 5c78aaa..0000000 --- a/vendor/package/dist/commands/lists.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/commands/lists.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA4BnD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAyH5E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/lists.js b/vendor/package/dist/commands/lists.js deleted file mode 100644 index 6b7aeab..0000000 --- a/vendor/package/dist/commands/lists.js +++ /dev/null @@ -1,125 +0,0 @@ -// ABOUTME: CLI command for fetching Twitter Lists. -// ABOUTME: Supports listing owned lists, memberships, and list timelines. -import { parsePaginationFlags } from '../cli/pagination.js'; -import { extractListId } from '../lib/extract-list-id.js'; -import { hyperlink } from '../lib/output.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -function printLists(lists, ctx) { - if (lists.length === 0) { - console.log('No lists found.'); - return; - } - for (const list of lists) { - const visibility = list.isPrivate ? '[private]' : '[public]'; - console.log(`${list.name} ${ctx.colors.muted(visibility)}`); - if (list.description) { - console.log(` ${list.description.slice(0, 100)}${list.description.length > 100 ? '...' : ''}`); - } - console.log(` ${ctx.p('info')}${list.memberCount?.toLocaleString() ?? 0} members`); - if (list.owner) { - console.log(` ${ctx.colors.muted(`Owner: @${list.owner.username}`)}`); - } - const listUrl = `https://x.com/i/lists/${list.id}`; - console.log(` ${ctx.colors.accent(hyperlink(listUrl, listUrl, ctx.getOutput()))}`); - console.log('──────────────────────────────────────────────────'); - } -} -export function registerListsCommand(program, ctx) { - program - .command('lists') - .description('Get your Twitter lists') - .option('--member-of', 'Show lists you are a member of (instead of owned lists)') - .option('-n, --count ', 'Number of lists to fetch', '100') - .option('--json', 'Output as JSON') - .action(async (cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '100', 10); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - const result = cmdOpts.memberOf ? await client.getListMemberships(count) : await client.getOwnedLists(count); - if (result.success && result.lists) { - if (cmdOpts.json) { - console.log(JSON.stringify(result.lists, null, 2)); - } - else { - const emptyMessage = cmdOpts.memberOf ? 'You are not a member of any lists.' : 'You do not own any lists.'; - if (result.lists.length === 0) { - console.log(emptyMessage); - } - else { - printLists(result.lists, ctx); - } - } - } - else { - console.error(`${ctx.p('err')}Failed to fetch lists: ${result.error}`); - process.exit(1); - } - }); - program - .command('list-timeline ') - .description('Get tweets from a list timeline') - .option('-n, --count ', 'Number of tweets to fetch', '20') - .option('--all', 'Fetch all tweets from list (paged). WARNING: your account might get banned using this flag') - .option('--max-pages ', 'Fetch N pages (implies --all)') - .option('--cursor ', 'Resume pagination from a cursor') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (listIdOrUrl, cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '20', 10); - const pagination = parsePaginationFlags(cmdOpts, { maxPagesImpliesPagination: true }); - if (!pagination.ok) { - console.error(`${ctx.p('err')}${pagination.error}`); - process.exit(1); - } - const listId = extractListId(listIdOrUrl); - if (!listId) { - console.error(`${ctx.p('err')}Invalid list ID or URL. Expected numeric ID or https://x.com/i/lists/.`); - process.exit(2); - } - const usePagination = pagination.usePagination; - if (!usePagination && (!Number.isFinite(count) || count <= 0)) { - console.error(`${ctx.p('err')}Invalid --count. Expected a positive integer.`); - process.exit(1); - } - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const includeRaw = cmdOpts.jsonFull ?? false; - const timelineOptions = { includeRaw }; - const paginationOptions = { includeRaw, maxPages: pagination.maxPages, cursor: pagination.cursor }; - const result = usePagination - ? await client.getAllListTimeline(listId, paginationOptions) - : await client.getListTimeline(listId, count, timelineOptions); - if (result.success) { - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - ctx.printTweetsResult(result, { - json: isJson, - usePagination, - emptyMessage: 'No tweets found in this list.', - }); - } - else { - console.error(`${ctx.p('err')}Failed to fetch list timeline: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=lists.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/lists.js.map b/vendor/package/dist/commands/lists.js.map deleted file mode 100644 index 9919aed..0000000 --- a/vendor/package/dist/commands/lists.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/commands/lists.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/news.d.ts b/vendor/package/dist/commands/news.d.ts deleted file mode 100644 index 5ab9191..0000000 --- a/vendor/package/dist/commands/news.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerNewsCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=news.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/news.d.ts.map b/vendor/package/dist/commands/news.d.ts.map deleted file mode 100644 index 9022ebe..0000000 --- a/vendor/package/dist/commands/news.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"news.d.ts","sourceRoot":"","sources":["../../src/commands/news.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAmEnD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAuG3E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/news.js b/vendor/package/dist/commands/news.js deleted file mode 100644 index 949a8b1..0000000 --- a/vendor/package/dist/commands/news.js +++ /dev/null @@ -1,131 +0,0 @@ -import { TwitterClient } from '../lib/twitter-client.js'; -function formatPostCount(count) { - if (count >= 1_000_000) { - return `${(count / 1_000_000).toFixed(1)}M`; - } - if (count >= 1_000) { - return `${(count / 1_000).toFixed(1)}K`; - } - return String(count); -} -function printNewsItems(items, ctx, opts = {}) { - if (opts.json) { - console.log(JSON.stringify(items, null, 2)); - return; - } - if (items.length === 0) { - console.log(opts.emptyMessage ?? 'No news items found.'); - return; - } - for (const item of items) { - const categoryLabel = item.category ? `[${item.category}]` : ''; - console.log(`\n${ctx.colors.accent(categoryLabel)} ${ctx.colors.command(item.headline)}`); - if (item.description) { - console.log(` ${ctx.colors.muted(item.description)}`); - } - const meta = []; - if (item.timeAgo) { - meta.push(item.timeAgo); - } - if (item.postCount) { - meta.push(`${formatPostCount(item.postCount)} posts`); - } - if (meta.length > 0) { - console.log(` ${ctx.colors.muted(meta.join(' | '))}`); - } - if (item.url) { - console.log(` ${ctx.l('url')}${item.url}`); - } - // Print related tweets if available - if (item.tweets && item.tweets.length > 0) { - console.log(` ${ctx.colors.section('Related tweets:')}`); - const tweetLimit = opts.tweetLimit ?? item.tweets.length; - for (const tweet of item.tweets.slice(0, tweetLimit)) { - console.log(` @${tweet.author.username}: ${tweet.text.slice(0, 100)}${tweet.text.length > 100 ? '...' : ''}`); - } - } - console.log(ctx.colors.muted('─'.repeat(50))); - } -} -export function registerNewsCommand(program, ctx) { - program - .command('news') - .alias('trending') - .description('Fetch AI-curated news and trending topics from Explore tabs') - .option('-n, --count ', 'Number of items to fetch', '10') - .option('--ai-only', 'Show only AI-curated news items') - .option('--with-tweets', 'Also fetch related tweets for each news item') - .option('--tweets-per-item ', 'Number of tweets to fetch per news item (default: 5)', '5') - .option('--for-you', 'Fetch only from For You tab') - .option('--news-only', 'Fetch only from News tab') - .option('--sports', 'Fetch only from Sports tab') - .option('--entertainment', 'Fetch only from Entertainment tab') - .option('--trending-only', 'Fetch only from Trending tab') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '10', 10); - const tweetsPerItem = Number.parseInt(cmdOpts.tweetsPerItem || '5', 10); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (Number.isNaN(count) || count < 1) { - console.error(`${ctx.p('err')}--count must be a positive number`); - process.exit(1); - } - if (Number.isNaN(tweetsPerItem) || tweetsPerItem < 1) { - console.error(`${ctx.p('err')}--tweets-per-item must be a positive number`); - process.exit(1); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - // Determine which tabs to fetch from - const tabs = []; - if (cmdOpts.forYou) { - tabs.push('forYou'); - } - if (cmdOpts.newsOnly) { - tabs.push('news'); - } - if (cmdOpts.sports) { - tabs.push('sports'); - } - if (cmdOpts.entertainment) { - tabs.push('entertainment'); - } - if (cmdOpts.trendingOnly) { - tabs.push('trending'); - } - // If no specific tabs selected, use defaults (all tabs except trending) - const tabsToFetch = tabs.length > 0 ? tabs : undefined; - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const includeRaw = cmdOpts.jsonFull ?? false; - const withTweets = cmdOpts.withTweets ?? false; - const aiOnly = cmdOpts.aiOnly ?? false; - const result = await client.getNews(count, { - includeRaw, - withTweets, - tweetsPerItem, - aiOnly, - tabs: tabsToFetch, - }); - if (result.success) { - printNewsItems(result.items, ctx, { - json: cmdOpts.json || cmdOpts.jsonFull, - emptyMessage: 'No news items found.', - tweetLimit: withTweets ? tweetsPerItem : undefined, - }); - } - else { - console.error(`${ctx.p('err')}Failed to fetch news: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=news.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/news.js.map b/vendor/package/dist/commands/news.js.map deleted file mode 100644 index bb0c56c..0000000 --- a/vendor/package/dist/commands/news.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"news.js","sourceRoot":"","sources":["../../src/commands/news.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/post.d.ts b/vendor/package/dist/commands/post.d.ts deleted file mode 100644 index e15ffa0..0000000 --- a/vendor/package/dist/commands/post.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerPostCommands(program: Command, ctx: CliContext): void; -//# sourceMappingURL=post.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/post.d.ts.map b/vendor/package/dist/commands/post.d.ts.map deleted file mode 100644 index 87b133a..0000000 --- a/vendor/package/dist/commands/post.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../src/commands/post.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AAyB9D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA4F5E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/post.js b/vendor/package/dist/commands/post.js deleted file mode 100644 index 7ffa6ff..0000000 --- a/vendor/package/dist/commands/post.js +++ /dev/null @@ -1,101 +0,0 @@ -import { formatTweetUrlLine } from '../lib/output.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -async function uploadMediaOrExit(client, media, ctx) { - if (media.length === 0) { - return undefined; - } - const uploaded = []; - for (const item of media) { - const res = await client.uploadMedia({ data: item.buffer, mimeType: item.mime, alt: item.alt }); - if (!res.success || !res.mediaId) { - console.error(`${ctx.p('err')}Media upload failed: ${res.error ?? 'Unknown error'}`); - process.exit(1); - } - uploaded.push(res.mediaId); - } - return uploaded; -} -export function registerPostCommands(program, ctx) { - program - .command('tweet') - .description('Post a new tweet') - .argument('', 'Tweet text') - .action(async (text) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - let media = []; - try { - media = ctx.loadMedia({ media: opts.media ?? [], alts: opts.alt ?? [] }); - } - catch (error) { - console.error(`${ctx.p('err')}${error instanceof Error ? error.message : String(error)}`); - process.exit(1); - } - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - if (cookies.source) { - console.error(`${ctx.l('source')}${cookies.source}`); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const mediaIds = await uploadMediaOrExit(client, media, ctx); - const result = await client.tweet(text, mediaIds); - if (result.success) { - console.log(`${ctx.p('ok')}Tweet posted successfully!`); - console.log(formatTweetUrlLine(result.tweetId, ctx.getOutput())); - } - else { - console.error(`${ctx.p('err')}Failed to post tweet: ${result.error}`); - process.exit(1); - } - }); - program - .command('reply') - .description('Reply to an existing tweet') - .argument('', 'Tweet ID or URL to reply to') - .argument('', 'Reply text') - .action(async (tweetIdOrUrl, text) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - let media = []; - try { - media = ctx.loadMedia({ media: opts.media ?? [], alts: opts.alt ?? [] }); - } - catch (error) { - console.error(`${ctx.p('err')}${error instanceof Error ? error.message : String(error)}`); - process.exit(1); - } - const tweetId = ctx.extractTweetId(tweetIdOrUrl); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - if (cookies.source) { - console.error(`${ctx.l('source')}${cookies.source}`); - } - console.error(`${ctx.p('info')}Replying to tweet: ${tweetId}`); - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const mediaIds = await uploadMediaOrExit(client, media, ctx); - const result = await client.reply(text, tweetId, mediaIds); - if (result.success) { - console.log(`${ctx.p('ok')}Reply posted successfully!`); - console.log(formatTweetUrlLine(result.tweetId, ctx.getOutput())); - } - else { - console.error(`${ctx.p('err')}Failed to post reply: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=post.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/post.js.map b/vendor/package/dist/commands/post.js.map deleted file mode 100644 index be6200e..0000000 --- a/vendor/package/dist/commands/post.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/commands/post.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/query-ids.d.ts b/vendor/package/dist/commands/query-ids.d.ts deleted file mode 100644 index 2c02e55..0000000 --- a/vendor/package/dist/commands/query-ids.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerQueryIdsCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=query-ids.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/query-ids.d.ts.map b/vendor/package/dist/commands/query-ids.d.ts.map deleted file mode 100644 index c216075..0000000 --- a/vendor/package/dist/commands/query-ids.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"query-ids.d.ts","sourceRoot":"","sources":["../../src/commands/query-ids.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAqBnD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAgF/E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/query-ids.js b/vendor/package/dist/commands/query-ids.js deleted file mode 100644 index dfb1482..0000000 --- a/vendor/package/dist/commands/query-ids.js +++ /dev/null @@ -1,80 +0,0 @@ -import { getFeatureOverridesSnapshot, refreshFeatureOverridesCache, } from '../lib/runtime-features.js'; -import { runtimeQueryIds } from '../lib/runtime-query-ids.js'; -function countFeatureOverrides(overrides) { - let count = 0; - if (overrides.global) { - count += Object.keys(overrides.global).length; - } - if (overrides.sets) { - for (const setOverrides of Object.values(overrides.sets)) { - count += Object.keys(setOverrides).length; - } - } - return count; -} -export function registerQueryIdsCommand(program, ctx) { - program - .command('query-ids') - .description('Show or refresh cached Twitter GraphQL query IDs') - .option('--json', 'Output as JSON') - .option('--fresh', 'Force refresh (downloads X client bundles)', false) - .action(async (cmdOpts) => { - const operations = [ - 'CreateTweet', - 'CreateRetweet', - 'FavoriteTweet', - 'TweetDetail', - 'SearchTimeline', - 'UserArticlesTweets', - 'Bookmarks', - 'Following', - 'Followers', - 'Likes', - ]; - if (cmdOpts.fresh) { - console.error(`${ctx.p('info')}Refreshing GraphQL query IDs…`); - await runtimeQueryIds.refresh(operations, { force: true }); - console.error(`${ctx.p('info')}Refreshing feature overrides…`); - await refreshFeatureOverridesCache(); - } - const featureSnapshot = getFeatureOverridesSnapshot(); - const info = await runtimeQueryIds.getSnapshotInfo(); - if (!info) { - if (cmdOpts.json) { - console.log(JSON.stringify({ - cached: false, - cachePath: runtimeQueryIds.cachePath, - featuresPath: featureSnapshot.cachePath, - features: featureSnapshot.overrides, - }, null, 2)); - return; - } - console.log(`${ctx.p('warn')}No cached query IDs yet.`); - console.log(`${ctx.p('info')}Run: bird query-ids --fresh`); - console.log(`features_path: ${featureSnapshot.cachePath}`); - return; - } - if (cmdOpts.json) { - console.log(JSON.stringify({ - cached: true, - cachePath: info.cachePath, - fetchedAt: info.snapshot.fetchedAt, - isFresh: info.isFresh, - ageMs: info.ageMs, - ids: info.snapshot.ids, - discovery: info.snapshot.discovery, - featuresPath: featureSnapshot.cachePath, - features: featureSnapshot.overrides, - }, null, 2)); - return; - } - console.log(`${ctx.p('ok')}GraphQL query IDs cached`); - console.log(`path: ${info.cachePath}`); - console.log(`fetched_at: ${info.snapshot.fetchedAt}`); - console.log(`fresh: ${info.isFresh ? 'yes' : 'no'}`); - console.log(`ops: ${Object.keys(info.snapshot.ids).length}`); - console.log(`features_path: ${featureSnapshot.cachePath}`); - console.log(`features: ${countFeatureOverrides(featureSnapshot.overrides)}`); - }); -} -//# sourceMappingURL=query-ids.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/query-ids.js.map b/vendor/package/dist/commands/query-ids.js.map deleted file mode 100644 index 65a6b7c..0000000 --- a/vendor/package/dist/commands/query-ids.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"query-ids.js","sourceRoot":"","sources":["../../src/commands/query-ids.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/read.d.ts b/vendor/package/dist/commands/read.d.ts deleted file mode 100644 index ed56932..0000000 --- a/vendor/package/dist/commands/read.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerReadCommands(program: Command, ctx: CliContext): void; -//# sourceMappingURL=read.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/read.d.ts.map b/vendor/package/dist/commands/read.d.ts.map deleted file mode 100644 index 4aa4aa8..0000000 --- a/vendor/package/dist/commands/read.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAqM5E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/read.js b/vendor/package/dist/commands/read.js deleted file mode 100644 index 9d239d6..0000000 --- a/vendor/package/dist/commands/read.js +++ /dev/null @@ -1,152 +0,0 @@ -import { parsePaginationFlags } from '../cli/pagination.js'; -import { formatStatsLine } from '../lib/output.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -export function registerReadCommands(program, ctx) { - program - .command('read') - .description('Read/fetch a tweet by ID or URL') - .argument('', 'Tweet ID or URL to read') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (tweetIdOrUrl, cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const tweetId = ctx.extractTweetId(tweetIdOrUrl); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const includeRaw = cmdOpts.jsonFull ?? false; - const result = await client.getTweet(tweetId, { includeRaw }); - if (result.success && result.tweet) { - if (cmdOpts.json || cmdOpts.jsonFull) { - console.log(JSON.stringify(result.tweet, null, 2)); - } - else { - ctx.printTweets([result.tweet], { showSeparator: false }); - console.log(formatStatsLine(result.tweet, ctx.getOutput())); - } - } - else { - console.error(`${ctx.p('err')}Failed to read tweet: ${result.error}`); - process.exit(1); - } - }); - program - .command('replies') - .description('List replies to a tweet (by ID or URL)') - .argument('', 'Tweet ID or URL') - .option('--all', 'Fetch all replies (paged)') - .option('--max-pages ', 'Fetch N pages (implies pagination)') - .option('--delay ', 'Delay in ms between page fetches', '1000') - .option('--cursor ', 'Resume pagination from a cursor') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (tweetIdOrUrl, cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const tweetId = ctx.extractTweetId(tweetIdOrUrl); - const pagination = parsePaginationFlags(cmdOpts, { maxPagesImpliesPagination: true, includeDelay: true }); - if (!pagination.ok) { - console.error(`${ctx.p('err')}${pagination.error}`); - process.exit(1); - } - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const includeRaw = cmdOpts.jsonFull ?? false; - const result = pagination.usePagination - ? await client.getRepliesPaged(tweetId, { - includeRaw, - maxPages: pagination.maxPages, - cursor: pagination.cursor, - pageDelayMs: pagination.pageDelayMs, - }) - : await client.getReplies(tweetId, { includeRaw }); - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - if (result.tweets) { - ctx.printTweetsResult(result, { - json: isJson, - usePagination: pagination.usePagination, - emptyMessage: 'No replies found.', - }); - // Show pagination hint if there's more - if (result.nextCursor && !isJson) { - console.error(`${ctx.p('info')}More replies available. Use --cursor "${result.nextCursor}" to continue.`); - } - } - if (!result.success) { - console.error(`${ctx.p('err')}Failed to fetch replies: ${result.error}`); - process.exit(1); - } - }); - program - .command('thread') - .description('Show the full conversation thread containing the tweet') - .argument('', 'Tweet ID or URL') - .option('--all', 'Fetch all thread tweets (paged)') - .option('--max-pages ', 'Fetch N pages (implies pagination)') - .option('--delay ', 'Delay in ms between page fetches', '1000') - .option('--cursor ', 'Resume pagination from a cursor') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (tweetIdOrUrl, cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const tweetId = ctx.extractTweetId(tweetIdOrUrl); - const pagination = parsePaginationFlags(cmdOpts, { maxPagesImpliesPagination: true, includeDelay: true }); - if (!pagination.ok) { - console.error(`${ctx.p('err')}${pagination.error}`); - process.exit(1); - } - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const includeRaw = cmdOpts.jsonFull ?? false; - const result = pagination.usePagination - ? await client.getThreadPaged(tweetId, { - includeRaw, - maxPages: pagination.maxPages, - cursor: pagination.cursor, - pageDelayMs: pagination.pageDelayMs, - }) - : await client.getThread(tweetId, { includeRaw }); - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - if (result.tweets) { - ctx.printTweetsResult(result, { - json: isJson, - usePagination: pagination.usePagination, - emptyMessage: 'No thread tweets found.', - }); - // Show pagination hint if there's more - if (result.nextCursor && !isJson) { - console.error(`${ctx.p('info')}More thread tweets available. Use --cursor "${result.nextCursor}" to continue.`); - } - } - if (!result.success) { - console.error(`${ctx.p('err')}Failed to fetch thread: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=read.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/read.js.map b/vendor/package/dist/commands/read.js.map deleted file mode 100644 index de87637..0000000 --- a/vendor/package/dist/commands/read.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/search.d.ts b/vendor/package/dist/commands/search.d.ts deleted file mode 100644 index a2178b7..0000000 --- a/vendor/package/dist/commands/search.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerSearchCommands(program: Command, ctx: CliContext): void; -//# sourceMappingURL=search.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/search.d.ts.map b/vendor/package/dist/commands/search.d.ts.map deleted file mode 100644 index 04db00d..0000000 --- a/vendor/package/dist/commands/search.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CA0I9E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/search.js b/vendor/package/dist/commands/search.js deleted file mode 100644 index 4b5c2cc..0000000 --- a/vendor/package/dist/commands/search.js +++ /dev/null @@ -1,115 +0,0 @@ -import { parsePaginationFlags } from '../cli/pagination.js'; -import { mentionsQueryFromUserOption, normalizeHandle } from '../lib/normalize-handle.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -export function registerSearchCommands(program, ctx) { - program - .command('search') - .description('Search for tweets') - .argument('', 'Search query (e.g., "@clawdbot" or "from:clawdbot")') - .option('-n, --count ', 'Number of tweets to fetch', '10') - .option('--all', 'Fetch all search results (paged)') - .option('--max-pages ', 'Stop after N pages when using --all') - .option('--cursor ', 'Resume pagination from a cursor') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (query, cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '10', 10); - const pagination = parsePaginationFlags(cmdOpts); - if (!pagination.ok) { - console.error(`${ctx.p('err')}${pagination.error}`); - process.exit(1); - } - const maxPages = pagination.maxPages; - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const usePagination = pagination.usePagination; - if (maxPages !== undefined && !usePagination) { - console.error(`${ctx.p('err')}--max-pages requires --all or --cursor.`); - process.exit(1); - } - if (!usePagination && (!Number.isFinite(count) || count <= 0)) { - console.error(`${ctx.p('err')}Invalid --count. Expected a positive integer.`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const includeRaw = cmdOpts.jsonFull ?? false; - const searchOptions = { includeRaw }; - const paginationOptions = { includeRaw, maxPages, cursor: pagination.cursor }; - const result = usePagination - ? await client.getAllSearchResults(query, paginationOptions) - : await client.search(query, count, searchOptions); - if (result.success) { - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - ctx.printTweetsResult(result, { - json: isJson, - usePagination: Boolean(usePagination), - emptyMessage: 'No tweets found.', - }); - } - else { - console.error(`${ctx.p('err')}Search failed: ${result.error}`); - process.exit(1); - } - }); - program - .command('mentions') - .description('Find tweets mentioning a user (defaults to current user)') - .option('-u, --user ', 'User handle (e.g. @steipete)') - .option('-n, --count ', 'Number of tweets to fetch', '10') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '10', 10); - const fromUserOpt = mentionsQueryFromUserOption(cmdOpts.user); - if (fromUserOpt.error) { - console.error(`${ctx.p('err')}${fromUserOpt.error}`); - process.exit(2); - } - let query = fromUserOpt.query; - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - if (!query) { - const who = await client.getCurrentUser(); - const handle = normalizeHandle(who.user?.username); - if (handle) { - query = `@${handle}`; - } - else { - console.error(`${ctx.p('err')}Could not determine current user (${who.error ?? 'Unknown error'}). Use --user .`); - process.exit(1); - } - } - const includeRaw = cmdOpts.jsonFull ?? false; - const result = await client.search(query, count, { includeRaw }); - if (result.success) { - ctx.printTweets(result.tweets, { - json: cmdOpts.json || cmdOpts.jsonFull, - emptyMessage: 'No mentions found.', - }); - } - else { - console.error(`${ctx.p('err')}Failed to fetch mentions: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=search.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/search.js.map b/vendor/package/dist/commands/search.js.map deleted file mode 100644 index 354c892..0000000 --- a/vendor/package/dist/commands/search.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/unbookmark.d.ts b/vendor/package/dist/commands/unbookmark.d.ts deleted file mode 100644 index eebb34a..0000000 --- a/vendor/package/dist/commands/unbookmark.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerUnbookmarkCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=unbookmark.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/unbookmark.d.ts.map b/vendor/package/dist/commands/unbookmark.d.ts.map deleted file mode 100644 index f940b3b..0000000 --- a/vendor/package/dist/commands/unbookmark.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"unbookmark.d.ts","sourceRoot":"","sources":["../../src/commands/unbookmark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAsCjF"} \ No newline at end of file diff --git a/vendor/package/dist/commands/unbookmark.js b/vendor/package/dist/commands/unbookmark.js deleted file mode 100644 index 5115b95..0000000 --- a/vendor/package/dist/commands/unbookmark.js +++ /dev/null @@ -1,36 +0,0 @@ -import { TwitterClient } from '../lib/twitter-client.js'; -export function registerUnbookmarkCommand(program, ctx) { - program - .command('unbookmark') - .description('Remove bookmarked tweets') - .argument('', 'Tweet IDs or URLs to remove from bookmarks') - .action(async (tweetIdOrUrls) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - let failures = 0; - for (const input of tweetIdOrUrls) { - const tweetId = ctx.extractTweetId(input); - const result = await client.unbookmark(tweetId); - if (result.success) { - console.log(`${ctx.p('ok')}Removed bookmark for ${tweetId}`); - } - else { - failures += 1; - console.error(`${ctx.p('err')}Failed to remove bookmark for ${tweetId}: ${result.error}`); - } - } - if (failures > 0) { - process.exit(1); - } - }); -} -//# sourceMappingURL=unbookmark.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/unbookmark.js.map b/vendor/package/dist/commands/unbookmark.js.map deleted file mode 100644 index 6f85d0f..0000000 --- a/vendor/package/dist/commands/unbookmark.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"unbookmark.js","sourceRoot":"","sources":["../../src/commands/unbookmark.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,UAAU,yBAAyB,CAAC,OAAgB,EAAE,GAAe;IACzE,OAAO;SACJ,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,0BAA0B,CAAC;SACvC,QAAQ,CAAC,sBAAsB,EAAE,4CAA4C,CAAC;SAC9E,MAAM,CAAC,KAAK,EAAE,aAAuB,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAEtD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAE5E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,CAAC,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,iCAAiC,OAAO,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/commands/user-tweets.d.ts b/vendor/package/dist/commands/user-tweets.d.ts deleted file mode 100644 index c239634..0000000 --- a/vendor/package/dist/commands/user-tweets.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerUserTweetsCommand(program: Command, ctx: CliContext): void; -//# sourceMappingURL=user-tweets.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/user-tweets.d.ts.map b/vendor/package/dist/commands/user-tweets.d.ts.map deleted file mode 100644 index deed518..0000000 --- a/vendor/package/dist/commands/user-tweets.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user-tweets.d.ts","sourceRoot":"","sources":["../../src/commands/user-tweets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAInD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAwIjF"} \ No newline at end of file diff --git a/vendor/package/dist/commands/user-tweets.js b/vendor/package/dist/commands/user-tweets.js deleted file mode 100644 index 8c718e3..0000000 --- a/vendor/package/dist/commands/user-tweets.js +++ /dev/null @@ -1,109 +0,0 @@ -import { parseNonNegativeIntFlag, parsePositiveIntFlag } from '../cli/pagination.js'; -import { normalizeHandle } from '../lib/normalize-handle.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -export function registerUserTweetsCommand(program, ctx) { - const formatExample = (cmd, desc) => ` ${ctx.colors.command(cmd)}\n ${ctx.colors.muted(desc)}`; - program - .command('user-tweets') - .description("Get tweets from a user's profile timeline") - .argument('', 'Username to fetch tweets from (e.g., @steipete or steipete)') - .option('-n, --count ', 'Number of tweets to fetch', '20') - .option('--max-pages ', 'Stop after N pages (max: 10)') - .option('--delay ', 'Delay in ms between page fetches', '1000') - .option('--cursor ', 'Resume pagination from a cursor') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .addHelpText('after', () => `\n${ctx.colors.section('Command Examples')}\n${[ - formatExample('bird user-tweets @steipete', 'Get recent tweets from a user'), - formatExample('bird user-tweets steipete -n 10', 'Get 10 tweets (@ is optional)'), - formatExample('bird user-tweets @steipete -n 50', 'Fetch 50 tweets (paged)'), - formatExample('bird user-tweets @steipete --max-pages 3 -n 200', 'Safety cap (max 3 pages)'), - formatExample('bird user-tweets @steipete --json', 'Output as JSON'), - formatExample('bird user-tweets @steipete --cursor "DAABCg..."', 'Resume from cursor'), - ].join('\n')}`) - .action(async (handle, cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '20', 10); - const maxPagesParsed = parsePositiveIntFlag(cmdOpts.maxPages, '--max-pages'); - if (!maxPagesParsed.ok) { - console.error(`${ctx.p('err')}${maxPagesParsed.error}`); - process.exit(2); - } - const maxPages = maxPagesParsed.value; - const delayParsed = parseNonNegativeIntFlag(cmdOpts.delay, '--delay', 1000); - if (!delayParsed.ok) { - console.error(`${ctx.p('err')}${delayParsed.error}`); - process.exit(2); - } - const pageDelayMs = delayParsed.value; - // Validate inputs - if (!Number.isFinite(count) || count <= 0) { - console.error(`${ctx.p('err')}Invalid --count. Expected a positive integer.`); - process.exit(2); - } - const pageSize = 20; - const hardMaxPages = 10; - const hardMaxTweets = pageSize * hardMaxPages; - if (count > hardMaxTweets) { - console.error(`${ctx.p('err')}Invalid --count. Max ${hardMaxTweets} tweets per run (safety cap: ${hardMaxPages} pages). Use --cursor to continue.`); - process.exit(2); - } - if (maxPages !== undefined && maxPages > hardMaxPages) { - console.error(`${ctx.p('err')}Invalid --max-pages. Expected a positive integer (max: ${hardMaxPages}).`); - process.exit(2); - } - // Normalize handle (strip @ if present) - const username = normalizeHandle(handle); - if (!username) { - console.error(`${ctx.p('err')}Invalid handle: ${handle}`); - process.exit(2); - } - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - // Look up user ID from username - console.error(`${ctx.p('info')}Looking up @${username}...`); - const userLookup = await client.getUserIdByUsername(username); - if (!userLookup.success || !userLookup.userId) { - console.error(`${ctx.p('err')}${userLookup.error || `Could not find user @${username}`}`); - process.exit(1); - } - const displayName = userLookup.name - ? `${userLookup.name} (@${userLookup.username})` - : `@${userLookup.username}`; - console.error(`${ctx.p('info')}Fetching tweets from ${displayName}...`); - const includeRaw = cmdOpts.jsonFull ?? false; - const wantsPaginationOutput = Boolean(cmdOpts.cursor) || maxPages !== undefined || count > pageSize; - const result = await client.getUserTweetsPaged(userLookup.userId, count, { - includeRaw, - maxPages, - cursor: cmdOpts.cursor, - pageDelayMs, - }); - if (result.success) { - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - ctx.printTweetsResult(result, { - json: isJson, - usePagination: wantsPaginationOutput, - emptyMessage: `No tweets found for @${username}.`, - }); - // Show pagination hint if there's more - if (result.nextCursor && !cmdOpts.json && !cmdOpts.jsonFull) { - console.error(`${ctx.p('info')}More tweets available. Use --cursor "${result.nextCursor}" to continue.`); - } - } - else { - console.error(`${ctx.p('err')}Failed to fetch tweets: ${result.error}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=user-tweets.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/user-tweets.js.map b/vendor/package/dist/commands/user-tweets.js.map deleted file mode 100644 index 6a5e639..0000000 --- a/vendor/package/dist/commands/user-tweets.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user-tweets.js","sourceRoot":"","sources":["../../src/commands/user-tweets.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/commands/users.d.ts b/vendor/package/dist/commands/users.d.ts deleted file mode 100644 index 1ca7c91..0000000 --- a/vendor/package/dist/commands/users.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Command } from 'commander'; -import type { CliContext } from '../cli/shared.js'; -export declare function registerUserCommands(program: Command, ctx: CliContext): void; -//# sourceMappingURL=users.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/commands/users.d.ts.map b/vendor/package/dist/commands/users.d.ts.map deleted file mode 100644 index 1b89906..0000000 --- a/vendor/package/dist/commands/users.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAwMnD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAkL5E"} \ No newline at end of file diff --git a/vendor/package/dist/commands/users.js b/vendor/package/dist/commands/users.js deleted file mode 100644 index be3a2ea..0000000 --- a/vendor/package/dist/commands/users.js +++ /dev/null @@ -1,295 +0,0 @@ -import { normalizeHandle } from '../lib/normalize-handle.js'; -import { TwitterClient } from '../lib/twitter-client.js'; -function formatAboutProfile(profile, ctx, handle) { - const lines = [`${ctx.p('info')}Account information for @${handle}:`]; - if (profile.accountBasedIn) { - lines.push(` Account based in: ${profile.accountBasedIn}`); - } - if (profile.createdCountryAccurate !== undefined) { - lines.push(` Creation country accurate: ${profile.createdCountryAccurate ? 'Yes' : 'No'}`); - } - if (profile.locationAccurate !== undefined) { - lines.push(` Location accurate: ${profile.locationAccurate ? 'Yes' : 'No'}`); - } - if (profile.source) { - lines.push(`${ctx.l('source')}${profile.source}`); - } - if (profile.learnMoreUrl) { - lines.push(` Learn more: ${profile.learnMoreUrl}`); - } - return lines; -} -function printUsers(users, ctx) { - for (const user of users) { - console.log(`@${user.username} (${user.name})`); - if (user.description) { - console.log(` ${user.description.slice(0, 100)}${user.description.length > 100 ? '...' : ''}`); - } - if (user.followersCount !== undefined) { - console.log(` ${ctx.p('info')}${user.followersCount.toLocaleString()} followers`); - } - console.log('──────────────────────────────────────────────────'); - } -} -async function resolveUserIdOrExit(client, requestedUserId, ctx) { - if (requestedUserId) { - return requestedUserId; - } - const currentUser = await client.getCurrentUser(); - if (!currentUser.success || !currentUser.user?.id) { - console.error(`${ctx.p('err')}Failed to get current user: ${currentUser.error || 'Unknown error'}`); - process.exit(1); - } - return currentUser.user.id; -} -async function runUserListCommand(program, ctx, spec, cmdOpts) { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '20', 10); - const maxPages = cmdOpts.maxPages ? Number.parseInt(cmdOpts.maxPages, 10) : undefined; - const usePagination = cmdOpts.all || cmdOpts.cursor; - if (maxPages !== undefined && !cmdOpts.all) { - console.error(`${ctx.p('err')}--max-pages requires --all.`); - process.exit(1); - } - if (maxPages !== undefined && (!Number.isFinite(maxPages) || maxPages <= 0)) { - console.error(`${ctx.p('err')}Invalid --max-pages. Expected a positive integer.`); - process.exit(1); - } - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - const userId = await resolveUserIdOrExit(client, cmdOpts.user, ctx); - if (cmdOpts.all) { - const allUsers = []; - const seen = new Set(); - let cursor = cmdOpts.cursor; - let pageNum = 0; - let nextCursor; - while (true) { - pageNum += 1; - if (!cmdOpts.json) { - console.error(`${ctx.p('info')}Fetching page ${pageNum}...`); - } - const result = await spec.fetch(client, userId, count, cursor); - if (!result.success || !result.users) { - console.error(`${ctx.p('err')}Failed to fetch ${spec.name}: ${result.error}`); - process.exit(1); - } - let added = 0; - for (const user of result.users) { - if (!seen.has(user.id)) { - seen.add(user.id); - allUsers.push(user); - added += 1; - } - } - const pageCursor = result.nextCursor; - if (!pageCursor || result.users.length === 0 || added === 0 || pageCursor === cursor) { - nextCursor = undefined; - break; - } - if (maxPages && pageNum >= maxPages) { - nextCursor = pageCursor; - break; - } - cursor = pageCursor; - await new Promise((resolve) => setTimeout(resolve, 1000)); - } - if (cmdOpts.json) { - console.log(JSON.stringify({ users: allUsers, nextCursor: nextCursor ?? null }, null, 2)); - } - else { - console.error(`${ctx.p('info')}Total: ${allUsers.length} users`); - if (nextCursor) { - console.error(`${ctx.p('info')}Stopped at --max-pages. Use --cursor to continue.`); - console.error(`${ctx.p('info')}Next cursor: ${nextCursor}`); - } - printUsers(allUsers, ctx); - } - return; - } - const result = await spec.fetch(client, userId, count, cmdOpts.cursor); - if (result.success && result.users) { - if (cmdOpts.json) { - if (usePagination) { - console.log(JSON.stringify({ users: result.users, nextCursor: result.nextCursor ?? null }, null, 2)); - } - else { - console.log(JSON.stringify(result.users, null, 2)); - } - } - else { - if (result.users.length === 0) { - console.log('No users found.'); - } - else { - printUsers(result.users, ctx); - if (result.nextCursor) { - console.error(`${ctx.p('info')}Next cursor: ${result.nextCursor}`); - } - } - } - } - else { - console.error(`${ctx.p('err')}Failed to fetch ${spec.name}: ${result.error}`); - process.exit(1); - } -} -export function registerUserCommands(program, ctx) { - const registerUserListCommand = (spec) => { - program - .command(spec.name) - .description(spec.description) - .option('--user ', `User ID to get ${spec.name} for (defaults to current user)`) - .option('-n, --count ', 'Number of users to fetch per page', '20') - .option('--cursor ', 'Cursor for pagination (from previous response)') - .option('--all', 'Fetch all users (paginate automatically)') - .option('--max-pages ', 'Stop after N pages when using --all') - .option('--json', 'Output as JSON') - .action(async (cmdOpts) => runUserListCommand(program, ctx, spec, cmdOpts)); - }; - registerUserListCommand({ - name: 'following', - description: 'Get users that you (or another user) follow', - fetch: (client, userId, count, cursor) => client.getFollowing(userId, count, cursor), - }); - registerUserListCommand({ - name: 'followers', - description: 'Get users that follow you (or another user)', - fetch: (client, userId, count, cursor) => client.getFollowers(userId, count, cursor), - }); - program - .command('likes') - .description('Get your liked tweets') - .option('-n, --count ', 'Number of likes to fetch', '20') - .option('--all', 'Fetch all likes (paged)') - .option('--max-pages ', 'Stop after N pages when using --all') - .option('--cursor ', 'Resume pagination from a cursor') - .option('--json', 'Output as JSON') - .option('--json-full', 'Output as JSON with full raw API response in _raw field') - .action(async (cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const count = Number.parseInt(cmdOpts.count || '20', 10); - const maxPages = cmdOpts.maxPages ? Number.parseInt(cmdOpts.maxPages, 10) : undefined; - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const usePagination = cmdOpts.all || cmdOpts.cursor; - if (maxPages !== undefined && !usePagination) { - console.error(`${ctx.p('err')}--max-pages requires --all or --cursor.`); - process.exit(1); - } - if (!usePagination && (!Number.isFinite(count) || count <= 0)) { - console.error(`${ctx.p('err')}Invalid --count. Expected a positive integer.`); - process.exit(1); - } - if (maxPages !== undefined && (!Number.isFinite(maxPages) || maxPages <= 0)) { - console.error(`${ctx.p('err')}Invalid --max-pages. Expected a positive integer.`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const includeRaw = cmdOpts.jsonFull ?? false; - const timelineOptions = { includeRaw }; - const paginationOptions = { includeRaw, maxPages, cursor: cmdOpts.cursor }; - const result = usePagination - ? await client.getAllLikes(paginationOptions) - : await client.getLikes(count, timelineOptions); - if (result.success) { - const isJson = Boolean(cmdOpts.json || cmdOpts.jsonFull); - ctx.printTweetsResult(result, { - json: isJson, - usePagination: Boolean(usePagination), - emptyMessage: 'No liked tweets found.', - }); - } - else { - console.error(`${ctx.p('err')}Failed to fetch likes: ${result.error}`); - process.exit(1); - } - }); - program - .command('whoami') - .description('Show which Twitter account the current credentials belong to') - .action(async () => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const quoteDepth = ctx.resolveQuoteDepthFromOptions(opts); - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - if (cookies.source) { - console.error(`${ctx.l('source')}${cookies.source}`); - } - const client = new TwitterClient({ cookies, timeoutMs, quoteDepth }); - const result = await client.getCurrentUser(); - const credentialSource = cookies.source ?? 'env/auto-detected cookies'; - if (result.success && result.user) { - console.log(`${ctx.l('user')}@${result.user.username} (${result.user.name})`); - console.log(`${ctx.l('userId')}${result.user.id}`); - console.log(`${ctx.l('engine')}graphql`); - console.log(`${ctx.l('credentials')}${credentialSource}`); - } - else { - console.error(`${ctx.p('err')}Failed to determine current user: ${result.error ?? 'Unknown error'}`); - process.exit(1); - } - }); - program - .command('about') - .description('Get account origin and location information for a user') - .argument('', 'Twitter username (with or without @)') - .option('--json', 'Output as JSON') - .action(async (username, cmdOpts) => { - const opts = program.opts(); - const timeoutMs = ctx.resolveTimeoutFromOptions(opts); - const normalizedHandle = normalizeHandle(username); - if (!normalizedHandle) { - console.error(`${ctx.p('err')}Invalid username: ${username}`); - process.exit(1); - } - const { cookies, warnings } = await ctx.resolveCredentialsFromOptions(opts); - for (const warning of warnings) { - console.error(`${ctx.p('warn')}${warning}`); - } - if (!cookies.authToken || !cookies.ct0) { - console.error(`${ctx.p('err')}Missing required credentials`); - process.exit(1); - } - const client = new TwitterClient({ cookies, timeoutMs }); - const result = await client.getUserAboutAccount(normalizedHandle); - if (result.success && result.aboutProfile) { - if (cmdOpts.json) { - console.log(JSON.stringify(result.aboutProfile, null, 2)); - } - else { - for (const line of formatAboutProfile(result.aboutProfile, ctx, normalizedHandle)) { - console.log(line); - } - } - } - else { - console.error(`${ctx.p('err')}Failed to fetch account information: ${result.error ?? 'Unknown error'}`); - process.exit(1); - } - }); -} -//# sourceMappingURL=users.js.map \ No newline at end of file diff --git a/vendor/package/dist/commands/users.js.map b/vendor/package/dist/commands/users.js.map deleted file mode 100644 index b8d4c3c..0000000 --- a/vendor/package/dist/commands/users.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/commands/users.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/index.d.ts b/vendor/package/dist/index.d.ts deleted file mode 100644 index 345f6ae..0000000 --- a/vendor/package/dist/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib/index.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/index.d.ts.map b/vendor/package/dist/index.d.ts.map deleted file mode 100644 index 7b421cf..0000000 --- a/vendor/package/dist/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/index.js b/vendor/package/dist/index.js deleted file mode 100644 index 6be7947..0000000 --- a/vendor/package/dist/index.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib/index.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vendor/package/dist/index.js.map b/vendor/package/dist/index.js.map deleted file mode 100644 index 52c226c..0000000 --- a/vendor/package/dist/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/cli-args.d.ts b/vendor/package/dist/lib/cli-args.d.ts deleted file mode 100644 index cb3c2fc..0000000 --- a/vendor/package/dist/lib/cli-args.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type CliInvocation = { - argv: string[] | null; - showHelp: boolean; -}; -export declare function looksLikeTweetInput(value: string): boolean; -export declare function resolveCliInvocation(rawArgs: string[], knownCommands: Set): CliInvocation; -//# sourceMappingURL=cli-args.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/cli-args.d.ts.map b/vendor/package/dist/lib/cli-args.d.ts.map deleted file mode 100644 index ed66475..0000000 --- a/vendor/package/dist/lib/cli-args.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../../src/lib/cli-args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAKF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM1D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,aAAa,CAiBjG"} \ No newline at end of file diff --git a/vendor/package/dist/lib/cli-args.js b/vendor/package/dist/lib/cli-args.js deleted file mode 100644 index 5c2737d..0000000 --- a/vendor/package/dist/lib/cli-args.js +++ /dev/null @@ -1,25 +0,0 @@ -const TWEET_URL_REGEX = /^(?:https?:\/\/)?(?:www\.)?(?:twitter\.com|x\.com)\/[^/]+\/status\/\d+/i; -const TWEET_ID_REGEX = /^\d{8,}$/; -export function looksLikeTweetInput(value) { - const trimmed = value.trim(); - if (!trimmed) { - return false; - } - return TWEET_URL_REGEX.test(trimmed) || TWEET_ID_REGEX.test(trimmed); -} -export function resolveCliInvocation(rawArgs, knownCommands) { - if (rawArgs.length === 0) { - return { argv: null, showHelp: true }; - } - const hasKnownCommand = rawArgs.some((arg) => knownCommands.has(arg)); - if (!hasKnownCommand) { - const tweetArgIndex = rawArgs.findIndex(looksLikeTweetInput); - if (tweetArgIndex >= 0) { - const rewrittenArgs = [...rawArgs]; - rewrittenArgs.splice(tweetArgIndex, 0, 'read'); - return { argv: ['node', 'bird', ...rewrittenArgs], showHelp: false }; - } - } - return { argv: null, showHelp: false }; -} -//# sourceMappingURL=cli-args.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/cli-args.js.map b/vendor/package/dist/lib/cli-args.js.map deleted file mode 100644 index c6f1fb6..0000000 --- a/vendor/package/dist/lib/cli-args.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../src/lib/cli-args.ts"],"names":[],"mappings":"AAKA,MAAM,eAAe,GAAG,yEAAyE,CAAC;AAClG,MAAM,cAAc,GAAG,UAAU,CAAC;AAElC,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAiB,EAAE,aAA0B;IAChF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;YACnC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/C,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/cookies.d.ts b/vendor/package/dist/lib/cookies.d.ts deleted file mode 100644 index 3f52794..0000000 --- a/vendor/package/dist/lib/cookies.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Browser cookie extraction for Twitter authentication. - * Delegates to @steipete/sweet-cookie for Safari/Chrome/Firefox reads. - */ -export interface TwitterCookies { - authToken: string | null; - ct0: string | null; - cookieHeader: string | null; - source: string | null; -} -export interface CookieExtractionResult { - cookies: TwitterCookies; - warnings: string[]; -} -export type CookieSource = 'safari' | 'chrome' | 'firefox'; -export declare function extractCookiesFromSafari(): Promise; -export declare function extractCookiesFromChrome(profile?: string): Promise; -export declare function extractCookiesFromFirefox(profile?: string): Promise; -/** - * Resolve Twitter credentials from multiple sources. - * Priority: CLI args > environment variables > browsers (ordered). - */ -export declare function resolveCredentials(options: { - authToken?: string; - ct0?: string; - cookieSource?: CookieSource | CookieSource[]; - chromeProfile?: string; - firefoxProfile?: string; - cookieTimeoutMs?: number; -}): Promise; -//# sourceMappingURL=cookies.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/cookies.d.ts.map b/vendor/package/dist/lib/cookies.d.ts.map deleted file mode 100644 index 35bf7c3..0000000 --- a/vendor/package/dist/lib/cookies.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/lib/cookies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAsI3D,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAEhF;AAED,wBAAsB,wBAAwB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAEhG;AAED,wBAAsB,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAEjG;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAC;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA0DlC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/cookies.js b/vendor/package/dist/lib/cookies.js deleted file mode 100644 index 83ca799..0000000 --- a/vendor/package/dist/lib/cookies.js +++ /dev/null @@ -1,173 +0,0 @@ -/** - * Browser cookie extraction for Twitter authentication. - * Delegates to @steipete/sweet-cookie for Safari/Chrome/Firefox reads. - */ -import { getCookies } from '@steipete/sweet-cookie'; -const TWITTER_COOKIE_NAMES = ['auth_token', 'ct0']; -const TWITTER_URL = 'https://x.com/'; -const TWITTER_ORIGINS = ['https://x.com/', 'https://twitter.com/']; -const DEFAULT_COOKIE_TIMEOUT_MS = 30_000; -function normalizeValue(value) { - if (typeof value !== 'string') { - return null; - } - const trimmed = value.trim(); - return trimmed.length > 0 ? trimmed : null; -} -function cookieHeader(authToken, ct0) { - return `auth_token=${authToken}; ct0=${ct0}`; -} -function buildEmpty() { - return { authToken: null, ct0: null, cookieHeader: null, source: null }; -} -function readEnvCookie(cookies, keys, field) { - if (cookies[field]) { - return; - } - for (const key of keys) { - const value = normalizeValue(process.env[key]); - if (!value) { - continue; - } - cookies[field] = value; - if (!cookies.source) { - cookies.source = `env ${key}`; - } - break; - } -} -function resolveSources(cookieSource) { - if (Array.isArray(cookieSource)) { - return cookieSource; - } - if (cookieSource) { - return [cookieSource]; - } - return ['safari', 'chrome', 'firefox']; -} -function labelForSource(source, profile) { - if (source === 'safari') { - return 'Safari'; - } - if (source === 'chrome') { - return profile ? `Chrome profile "${profile}"` : 'Chrome default profile'; - } - return profile ? `Firefox profile "${profile}"` : 'Firefox default profile'; -} -function pickCookieValue(cookies, name) { - const matches = cookies.filter((c) => c?.name === name && typeof c.value === 'string'); - if (matches.length === 0) { - return null; - } - const preferred = matches.find((c) => (c.domain ?? '').endsWith('x.com')); - if (preferred?.value) { - return preferred.value; - } - const twitter = matches.find((c) => (c.domain ?? '').endsWith('twitter.com')); - if (twitter?.value) { - return twitter.value; - } - return matches[0]?.value ?? null; -} -async function readTwitterCookiesFromBrowser(options) { - const warnings = []; - const out = buildEmpty(); - const { cookies, warnings: providerWarnings } = await getCookies({ - url: TWITTER_URL, - origins: TWITTER_ORIGINS, - names: [...TWITTER_COOKIE_NAMES], - browsers: [options.source], - mode: 'merge', - chromeProfile: options.chromeProfile, - firefoxProfile: options.firefoxProfile, - timeoutMs: options.cookieTimeoutMs, - }); - warnings.push(...providerWarnings); - const authToken = pickCookieValue(cookies, 'auth_token'); - const ct0 = pickCookieValue(cookies, 'ct0'); - if (authToken) { - out.authToken = authToken; - } - if (ct0) { - out.ct0 = ct0; - } - if (out.authToken && out.ct0) { - out.cookieHeader = cookieHeader(out.authToken, out.ct0); - out.source = labelForSource(options.source, options.source === 'chrome' ? options.chromeProfile : options.firefoxProfile); - return { cookies: out, warnings }; - } - if (options.source === 'safari') { - warnings.push('No Twitter cookies found in Safari. Make sure you are logged into x.com in Safari.'); - } - else if (options.source === 'chrome') { - warnings.push('No Twitter cookies found in Chrome. Make sure you are logged into x.com in Chrome.'); - } - else { - warnings.push('No Twitter cookies found in Firefox. Make sure you are logged into x.com in Firefox and the profile exists.'); - } - return { cookies: out, warnings }; -} -export async function extractCookiesFromSafari() { - return readTwitterCookiesFromBrowser({ source: 'safari' }); -} -export async function extractCookiesFromChrome(profile) { - return readTwitterCookiesFromBrowser({ source: 'chrome', chromeProfile: profile }); -} -export async function extractCookiesFromFirefox(profile) { - return readTwitterCookiesFromBrowser({ source: 'firefox', firefoxProfile: profile }); -} -/** - * Resolve Twitter credentials from multiple sources. - * Priority: CLI args > environment variables > browsers (ordered). - */ -export async function resolveCredentials(options) { - const warnings = []; - const cookies = buildEmpty(); - const cookieTimeoutMs = typeof options.cookieTimeoutMs === 'number' && - Number.isFinite(options.cookieTimeoutMs) && - options.cookieTimeoutMs > 0 - ? options.cookieTimeoutMs - : process.platform === 'darwin' - ? DEFAULT_COOKIE_TIMEOUT_MS - : undefined; - if (options.authToken) { - cookies.authToken = options.authToken; - cookies.source = 'CLI argument'; - } - if (options.ct0) { - cookies.ct0 = options.ct0; - if (!cookies.source) { - cookies.source = 'CLI argument'; - } - } - readEnvCookie(cookies, ['AUTH_TOKEN', 'TWITTER_AUTH_TOKEN'], 'authToken'); - readEnvCookie(cookies, ['CT0', 'TWITTER_CT0'], 'ct0'); - if (cookies.authToken && cookies.ct0) { - cookies.cookieHeader = cookieHeader(cookies.authToken, cookies.ct0); - return { cookies, warnings }; - } - const sourcesToTry = resolveSources(options.cookieSource); - for (const source of sourcesToTry) { - const res = await readTwitterCookiesFromBrowser({ - source, - chromeProfile: options.chromeProfile, - firefoxProfile: options.firefoxProfile, - cookieTimeoutMs, - }); - warnings.push(...res.warnings); - if (res.cookies.authToken && res.cookies.ct0) { - return { cookies: res.cookies, warnings }; - } - } - if (!cookies.authToken) { - warnings.push('Missing auth_token - provide via --auth-token, AUTH_TOKEN env var, or login to x.com in Safari/Chrome/Firefox'); - } - if (!cookies.ct0) { - warnings.push('Missing ct0 - provide via --ct0, CT0 env var, or login to x.com in Safari/Chrome/Firefox'); - } - if (cookies.authToken && cookies.ct0) { - cookies.cookieHeader = cookieHeader(cookies.authToken, cookies.ct0); - } - return { cookies, warnings }; -} -//# sourceMappingURL=cookies.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/cookies.js.map b/vendor/package/dist/lib/cookies.js.map deleted file mode 100644 index b2ac953..0000000 --- a/vendor/package/dist/lib/cookies.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/lib/cookies.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-bookmark-folder-id.d.ts b/vendor/package/dist/lib/extract-bookmark-folder-id.d.ts deleted file mode 100644 index af97eb5..0000000 --- a/vendor/package/dist/lib/extract-bookmark-folder-id.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function extractBookmarkFolderId(input: string): string | null; -//# sourceMappingURL=extract-bookmark-folder-id.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-bookmark-folder-id.d.ts.map b/vendor/package/dist/lib/extract-bookmark-folder-id.d.ts.map deleted file mode 100644 index b492723..0000000 --- a/vendor/package/dist/lib/extract-bookmark-folder-id.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extract-bookmark-folder-id.d.ts","sourceRoot":"","sources":["../../src/lib/extract-bookmark-folder-id.ts"],"names":[],"mappings":"AAMA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAapE"} \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-bookmark-folder-id.js b/vendor/package/dist/lib/extract-bookmark-folder-id.js deleted file mode 100644 index af68602..0000000 --- a/vendor/package/dist/lib/extract-bookmark-folder-id.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Extract bookmark folder (collection) ID from an X/Twitter bookmarks URL. - */ -const BOOKMARK_FOLDER_URL_REGEX = /(?:twitter\.com|x\.com)\/i\/bookmarks\/(\d+)/i; -const BOOKMARK_FOLDER_ID_REGEX = /^\d{5,}$/; -export function extractBookmarkFolderId(input) { - const trimmed = input.trim(); - if (!trimmed) { - return null; - } - const urlMatch = BOOKMARK_FOLDER_URL_REGEX.exec(trimmed); - if (urlMatch) { - return urlMatch[1]; - } - if (BOOKMARK_FOLDER_ID_REGEX.test(trimmed)) { - return trimmed; - } - return null; -} -//# sourceMappingURL=extract-bookmark-folder-id.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-bookmark-folder-id.js.map b/vendor/package/dist/lib/extract-bookmark-folder-id.js.map deleted file mode 100644 index ed681e0..0000000 --- a/vendor/package/dist/lib/extract-bookmark-folder-id.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extract-bookmark-folder-id.js","sourceRoot":"","sources":["../../src/lib/extract-bookmark-folder-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,yBAAyB,GAAG,+CAA+C,CAAC;AAClF,MAAM,wBAAwB,GAAG,UAAU,CAAC;AAE5C,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-list-id.d.ts b/vendor/package/dist/lib/extract-list-id.d.ts deleted file mode 100644 index 42427bc..0000000 --- a/vendor/package/dist/lib/extract-list-id.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function extractListId(input: string): string | null; -//# sourceMappingURL=extract-list-id.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-list-id.d.ts.map b/vendor/package/dist/lib/extract-list-id.d.ts.map deleted file mode 100644 index e70d7c7..0000000 --- a/vendor/package/dist/lib/extract-list-id.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extract-list-id.d.ts","sourceRoot":"","sources":["../../src/lib/extract-list-id.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa1D"} \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-list-id.js b/vendor/package/dist/lib/extract-list-id.js deleted file mode 100644 index 450ffb0..0000000 --- a/vendor/package/dist/lib/extract-list-id.js +++ /dev/null @@ -1,19 +0,0 @@ -// ABOUTME: Extract list ID from an X/Twitter list URL. -// ABOUTME: Returns list ID or null if input is invalid. -const LIST_URL_REGEX = /(?:twitter\.com|x\.com)\/i\/lists\/(\d+)/i; -const LIST_ID_REGEX = /^\d{5,}$/; -export function extractListId(input) { - const trimmed = input.trim(); - if (!trimmed) { - return null; - } - const urlMatch = LIST_URL_REGEX.exec(trimmed); - if (urlMatch) { - return urlMatch[1]; - } - if (LIST_ID_REGEX.test(trimmed)) { - return trimmed; - } - return null; -} -//# sourceMappingURL=extract-list-id.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-list-id.js.map b/vendor/package/dist/lib/extract-list-id.js.map deleted file mode 100644 index 327f5d4..0000000 --- a/vendor/package/dist/lib/extract-list-id.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extract-list-id.js","sourceRoot":"","sources":["../../src/lib/extract-list-id.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,wDAAwD;AAExD,MAAM,cAAc,GAAG,2CAA2C,CAAC;AACnE,MAAM,aAAa,GAAG,UAAU,CAAC;AAEjC,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-tweet-id.d.ts b/vendor/package/dist/lib/extract-tweet-id.d.ts deleted file mode 100644 index f86631d..0000000 --- a/vendor/package/dist/lib/extract-tweet-id.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export declare function extractTweetId(input: string): string; -//# sourceMappingURL=extract-tweet-id.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-tweet-id.d.ts.map b/vendor/package/dist/lib/extract-tweet-id.d.ts.map deleted file mode 100644 index b17ca49..0000000 --- a/vendor/package/dist/lib/extract-tweet-id.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extract-tweet-id.d.ts","sourceRoot":"","sources":["../../src/lib/extract-tweet-id.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQpD"} \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-tweet-id.js b/vendor/package/dist/lib/extract-tweet-id.js deleted file mode 100644 index b27fbb1..0000000 --- a/vendor/package/dist/lib/extract-tweet-id.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Extract tweet ID from a Twitter/X URL or return the input unchanged if it's already an ID. - */ -const TWEET_URL_REGEX = /(?:twitter\.com|x\.com)\/(?:\w+\/status|i\/web\/status)\/(\d+)/i; -export function extractTweetId(input) { - // If it's a URL, extract the tweet ID - const urlMatch = TWEET_URL_REGEX.exec(input); - if (urlMatch) { - return urlMatch[1]; - } - // Assume it's already an ID - return input; -} -//# sourceMappingURL=extract-tweet-id.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/extract-tweet-id.js.map b/vendor/package/dist/lib/extract-tweet-id.js.map deleted file mode 100644 index 3e2eb7d..0000000 --- a/vendor/package/dist/lib/extract-tweet-id.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"extract-tweet-id.js","sourceRoot":"","sources":["../../src/lib/extract-tweet-id.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,eAAe,GAAG,iEAAiE,CAAC;AAE1F,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,sCAAsC;IACtC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,4BAA4B;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/features.json b/vendor/package/dist/lib/features.json deleted file mode 100644 index c43e03c..0000000 --- a/vendor/package/dist/lib/features.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "global": { - "responsive_web_grok_annotations_enabled": false, - "post_ctas_fetch_enabled": true, - "responsive_web_graphql_exclude_directive_enabled": true - }, - "sets": { - "lists": { - "blue_business_profile_image_shape_enabled": true, - "tweetypie_unmention_optimization_enabled": true, - "responsive_web_text_conversations_enabled": false, - "interactive_text_enabled": true, - "vibe_api_enabled": true, - "responsive_web_twitter_blue_verified_badge_is_enabled": true - } - } -} diff --git a/vendor/package/dist/lib/index.d.ts b/vendor/package/dist/lib/index.d.ts deleted file mode 100644 index 14a511f..0000000 --- a/vendor/package/dist/lib/index.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -export { type CookieExtractionResult, type CookieSource, extractCookiesFromChrome, extractCookiesFromFirefox, extractCookiesFromSafari, resolveCredentials, type TwitterCookies, } from './cookies.js'; -export { runtimeQueryIds } from './runtime-query-ids.js'; -export { type CurrentUserResult, type FollowingResult, type GetTweetResult, type SearchResult, type TweetData, TwitterClient, type TwitterClientOptions, type TwitterUser, } from './twitter-client.js'; -export type { HomeTimelineFetchOptions } from './twitter-client-home.js'; -export type { ExploreTab, NewsFetchOptions, NewsItem, NewsResult } from './twitter-client-news.js'; -export type { SearchFetchOptions } from './twitter-client-search.js'; -export type { TimelineFetchOptions } from './twitter-client-timelines.js'; -export type { TweetFetchOptions } from './twitter-client-tweet-detail.js'; -export type { AboutAccountProfile, AboutAccountResult, TweetResult, UploadMediaResult, } from './twitter-client-types.js'; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/index.d.ts.map b/vendor/package/dist/lib/index.d.ts.map deleted file mode 100644 index 466c5c7..0000000 --- a/vendor/package/dist/lib/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACnG,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,2BAA2B,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/index.js b/vendor/package/dist/lib/index.js deleted file mode 100644 index e3b0eca..0000000 --- a/vendor/package/dist/lib/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { extractCookiesFromChrome, extractCookiesFromFirefox, extractCookiesFromSafari, resolveCredentials, } from './cookies.js'; -export { runtimeQueryIds } from './runtime-query-ids.js'; -export { TwitterClient, } from './twitter-client.js'; -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/index.js.map b/vendor/package/dist/lib/index.js.map deleted file mode 100644 index 1f1ce56..0000000 --- a/vendor/package/dist/lib/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAML,aAAa,GAGd,MAAM,qBAAqB,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/normalize-handle.d.ts b/vendor/package/dist/lib/normalize-handle.d.ts deleted file mode 100644 index 9bab3be..0000000 --- a/vendor/package/dist/lib/normalize-handle.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare function normalizeHandle(input?: string | null): string | null; -export declare function mentionsQueryFromUserOption(userOption?: string | null): { - query: string | null; - error: string | null; -}; -//# sourceMappingURL=normalize-handle.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/normalize-handle.d.ts.map b/vendor/package/dist/lib/normalize-handle.d.ts.map deleted file mode 100644 index b3f7cda..0000000 --- a/vendor/package/dist/lib/normalize-handle.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"normalize-handle.d.ts","sourceRoot":"","sources":["../../src/lib/normalize-handle.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAkBpE;AAED,wBAAgB,2BAA2B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG;IACvE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAcA"} \ No newline at end of file diff --git a/vendor/package/dist/lib/normalize-handle.js b/vendor/package/dist/lib/normalize-handle.js deleted file mode 100644 index c75011a..0000000 --- a/vendor/package/dist/lib/normalize-handle.js +++ /dev/null @@ -1,31 +0,0 @@ -const HANDLE_REGEX = /^[A-Za-z0-9_]{1,15}$/; -export function normalizeHandle(input) { - const raw = (input ?? '').trim(); - if (!raw) { - return null; - } - const withoutAt = raw.startsWith('@') ? raw.slice(1) : raw; - const handle = withoutAt.trim(); - if (!handle) { - return null; - } - // X/Twitter handles are traditionally max 15 chars; keep strict to avoid surprising queries. - if (!HANDLE_REGEX.test(handle)) { - return null; - } - return handle; -} -export function mentionsQueryFromUserOption(userOption) { - if (typeof userOption === 'undefined') { - return { query: null, error: null }; - } - const handle = normalizeHandle(userOption); - if (!handle) { - return { - query: null, - error: 'Invalid --user handle. Expected something like @steipete (letters, digits, underscore; max 15).', - }; - } - return { query: `@${handle}`, error: null }; -} -//# sourceMappingURL=normalize-handle.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/normalize-handle.js.map b/vendor/package/dist/lib/normalize-handle.js.map deleted file mode 100644 index bf3c747..0000000 --- a/vendor/package/dist/lib/normalize-handle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"normalize-handle.js","sourceRoot":"","sources":["../../src/lib/normalize-handle.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAE5C,MAAM,UAAU,eAAe,CAAC,KAAqB;IACnD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6FAA6F;IAC7F,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,UAA0B;IAIpE,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,iGAAiG;SACzG,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/output.d.ts b/vendor/package/dist/lib/output.d.ts deleted file mode 100644 index e29cc87..0000000 --- a/vendor/package/dist/lib/output.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export type OutputConfig = { - plain: boolean; - emoji: boolean; - color: boolean; - hyperlinks: boolean; -}; -export type StatusKind = 'ok' | 'warn' | 'err' | 'info' | 'hint'; -export type LabelKind = 'url' | 'date' | 'source' | 'engine' | 'credentials' | 'user' | 'userId' | 'email'; -export declare function resolveOutputConfigFromArgv(argv: string[], env: NodeJS.ProcessEnv, isTty: boolean): OutputConfig; -export declare function resolveOutputConfigFromCommander(opts: { - plain?: boolean; - emoji?: boolean; - color?: boolean; -}, env: NodeJS.ProcessEnv, isTty: boolean): OutputConfig; -export declare function statusPrefix(kind: StatusKind, cfg: OutputConfig): string; -export declare function labelPrefix(kind: LabelKind, cfg: OutputConfig): string; -export declare function formatStatsLine(stats: { - likeCount?: number | null; - retweetCount?: number | null; - replyCount?: number | null; -}, cfg: OutputConfig): string; -export declare function formatTweetUrl(tweetId: string): string; -/** - * Wraps a URL in OSC 8 escape sequences to make it clickable in supported terminals. - * Falls back to plain text when not in a TTY or when hyperlinks are disabled. - */ -export declare function hyperlink(url: string, text?: string, cfg?: OutputConfig): string; -export declare function formatTweetUrlLine(tweetId: string, cfg: OutputConfig): string; -//# sourceMappingURL=output.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/output.d.ts.map b/vendor/package/dist/lib/output.d.ts.map deleted file mode 100644 index 88929cf..0000000 --- a/vendor/package/dist/lib/output.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAqB3G,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY,CAUhH;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3D,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,KAAK,EAAE,OAAO,GACb,YAAY,CAUd;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAQxE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAQtE;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC9F,GAAG,EAAE,YAAY,GAChB,MAAM,CAYR;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,MAAM,CAUhF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAG7E"} \ No newline at end of file diff --git a/vendor/package/dist/lib/output.js b/vendor/package/dist/lib/output.js deleted file mode 100644 index c51e1f3..0000000 --- a/vendor/package/dist/lib/output.js +++ /dev/null @@ -1,88 +0,0 @@ -const STATUS = { - ok: { emoji: '✅', text: 'OK:', plain: '[ok]' }, - warn: { emoji: '⚠️', text: 'Warning:', plain: '[warn]' }, - err: { emoji: '❌', text: 'Error:', plain: '[err]' }, - info: { emoji: 'ℹ️', text: 'Info:', plain: '[info]' }, - hint: { emoji: 'ℹ️', text: 'Hint:', plain: '[hint]' }, -}; -const LABELS = { - url: { emoji: '🔗', text: 'URL:', plain: 'url:' }, - date: { emoji: '📅', text: 'Date:', plain: 'date:' }, - source: { emoji: '📍', text: 'Source:', plain: 'source:' }, - engine: { emoji: '⚙️', text: 'Engine:', plain: 'engine:' }, - credentials: { emoji: '🔑', text: 'Credentials:', plain: 'credentials:' }, - user: { emoji: '🙋', text: 'User:', plain: 'user:' }, - userId: { emoji: '🪪', text: 'User ID:', plain: 'user_id:' }, - email: { emoji: '📧', text: 'Email:', plain: 'email:' }, -}; -export function resolveOutputConfigFromArgv(argv, env, isTty) { - const hasNoColorEnv = Object.hasOwn(env, 'NO_COLOR') || env.TERM === 'dumb'; - const defaultColor = isTty && !hasNoColorEnv; - const plain = argv.includes('--plain'); - const emoji = !plain && !argv.includes('--no-emoji'); - const color = !plain && !argv.includes('--no-color') && defaultColor; - const hyperlinks = !plain && isTty; - return { plain, emoji, color, hyperlinks }; -} -export function resolveOutputConfigFromCommander(opts, env, isTty) { - const hasNoColorEnv = Object.hasOwn(env, 'NO_COLOR') || env.TERM === 'dumb'; - const defaultColor = isTty && !hasNoColorEnv; - const plain = Boolean(opts.plain); - const emoji = !plain && (opts.emoji ?? true); - const color = !plain && (opts.color ?? true) && defaultColor; - const hyperlinks = !plain && isTty; - return { plain, emoji, color, hyperlinks }; -} -export function statusPrefix(kind, cfg) { - if (cfg.plain) { - return `${STATUS[kind].plain} `; - } - if (cfg.emoji) { - return `${STATUS[kind].emoji} `; - } - return `${STATUS[kind].text} `; -} -export function labelPrefix(kind, cfg) { - if (cfg.plain) { - return `${LABELS[kind].plain} `; - } - if (cfg.emoji) { - return `${LABELS[kind].emoji} `; - } - return `${LABELS[kind].text} `; -} -export function formatStatsLine(stats, cfg) { - const likeCount = stats.likeCount ?? 0; - const retweetCount = stats.retweetCount ?? 0; - const replyCount = stats.replyCount ?? 0; - if (cfg.plain) { - return `likes: ${likeCount} retweets: ${retweetCount} replies: ${replyCount}`; - } - if (!cfg.emoji) { - return `Likes ${likeCount} Retweets ${retweetCount} Replies ${replyCount}`; - } - return `❤️ ${likeCount} 🔁 ${retweetCount} 💬 ${replyCount}`; -} -export function formatTweetUrl(tweetId) { - return `https://x.com/i/status/${tweetId}`; -} -/** - * Wraps a URL in OSC 8 escape sequences to make it clickable in supported terminals. - * Falls back to plain text when not in a TTY or when hyperlinks are disabled. - */ -export function hyperlink(url, text, cfg) { - const displayText = text ?? url; - // Only use hyperlinks when explicitly enabled (requires TTY and not plain mode) - if (!cfg?.hyperlinks) { - return displayText; - } - const safeUrl = url.replaceAll('\x1b', '').replaceAll('\x07', ''); - const safeText = displayText.replaceAll('\x1b', '').replaceAll('\x07', ''); - // OSC 8 hyperlink: \x1b]8;;URL\x07TEXT\x1b]8;;\x07 - return `\x1b]8;;${safeUrl}\x07${safeText}\x1b]8;;\x07`; -} -export function formatTweetUrlLine(tweetId, cfg) { - const url = formatTweetUrl(tweetId); - return `${labelPrefix('url', cfg)}${hyperlink(url, url, cfg)}`; -} -//# sourceMappingURL=output.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/output.js.map b/vendor/package/dist/lib/output.js.map deleted file mode 100644 index 24363ea..0000000 --- a/vendor/package/dist/lib/output.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/paginate-cursor.d.ts b/vendor/package/dist/lib/paginate-cursor.d.ts deleted file mode 100644 index 5ce6e84..0000000 --- a/vendor/package/dist/lib/paginate-cursor.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -export type CursorPage = { - success: true; - items: T[]; - cursor?: string; -} | { - success: false; - error: string; -}; -export type CursorPaginationResult = { - success: true; - items: T[]; - nextCursor?: string; -} | { - success: false; - error: string; - items?: T[]; - nextCursor?: string; -}; -export declare function paginateCursor(opts: { - cursor?: string; - maxPages?: number; - pageDelayMs?: number; - sleep: (ms: number) => Promise; - getKey: (item: T) => string; - fetchPage: (cursor?: string) => Promise>; -}): Promise>; -//# sourceMappingURL=paginate-cursor.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/paginate-cursor.d.ts.map b/vendor/package/dist/lib/paginate-cursor.d.ts.map deleted file mode 100644 index b5d4cf1..0000000 --- a/vendor/package/dist/lib/paginate-cursor.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"paginate-cursor.d.ts","sourceRoot":"","sources":["../../src/lib/paginate-cursor.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,CAAC,CAAC,IACpB;IACE,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAChC;IACE,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEN,wBAAsB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC5B,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CACxD,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAyCrC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/paginate-cursor.js b/vendor/package/dist/lib/paginate-cursor.js deleted file mode 100644 index 6c061fe..0000000 --- a/vendor/package/dist/lib/paginate-cursor.js +++ /dev/null @@ -1,37 +0,0 @@ -export async function paginateCursor(opts) { - const { maxPages, pageDelayMs = 1000 } = opts; - const seen = new Set(); - const items = []; - let cursor = opts.cursor; - let pagesFetched = 0; - while (true) { - if (pagesFetched > 0 && pageDelayMs > 0) { - await opts.sleep(pageDelayMs); - } - const page = await opts.fetchPage(cursor); - if (!page.success) { - if (items.length > 0) { - return { success: false, error: page.error, items, nextCursor: cursor }; - } - return page; - } - pagesFetched += 1; - for (const item of page.items) { - const key = opts.getKey(item); - if (seen.has(key)) { - continue; - } - seen.add(key); - items.push(item); - } - const pageCursor = page.cursor; - if (!pageCursor || pageCursor === cursor) { - return { success: true, items, nextCursor: undefined }; - } - if (maxPages !== undefined && pagesFetched >= maxPages) { - return { success: true, items, nextCursor: pageCursor }; - } - cursor = pageCursor; - } -} -//# sourceMappingURL=paginate-cursor.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/paginate-cursor.js.map b/vendor/package/dist/lib/paginate-cursor.js.map deleted file mode 100644 index 6a5c1c8..0000000 --- a/vendor/package/dist/lib/paginate-cursor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"paginate-cursor.js","sourceRoot":"","sources":["../../src/lib/paginate-cursor.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAI,IAOvC;IACC,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,IAAI,MAAM,GAAuB,IAAI,CAAC,MAAM,CAAC;IAC7C,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,YAAY,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAC1E,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,YAAY,IAAI,CAAC,CAAC;QAElB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QACzD,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,IAAI,YAAY,IAAI,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;QAC1D,CAAC;QAED,MAAM,GAAG,UAAU,CAAC;IACtB,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/query-ids.json b/vendor/package/dist/lib/query-ids.json deleted file mode 100644 index 6033f31..0000000 --- a/vendor/package/dist/lib/query-ids.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "CreateTweet": "nmdAQXJDxw6-0KKF2on7eA", - "CreateRetweet": "LFho5rIi4xcKO90p9jwG7A", - "CreateFriendship": "8h9JVdV8dlSyqyRDJEPCsA", - "DestroyFriendship": "ppXWuagMNXgvzx6WoXBW0Q", - "FavoriteTweet": "lI07N6Otwv1PhnEgXILM7A", - "DeleteBookmark": "Wlmlj2-xzyS1GN3a6cj-mQ", - "TweetDetail": "_NvJCnIjOW__EP5-RF197A", - "SearchTimeline": "6AAys3t42mosm_yTI_QENg", - "Bookmarks": "RV1g3b8n_SGOHwkqKYSCFw", - "BookmarkFolderTimeline": "KJIQpsvxrTfRIlbaRIySHQ", - "Following": "mWYeougg_ocJS2Vr1Vt28w", - "Followers": "SFYY3WsgwjlXSLlfnEUE4A", - "Likes": "ETJflBunfqNa1uE1mBPCaw", - "ExploreSidebar": "lpSN4M6qpimkF4nRFPE3nQ", - "ExplorePage": "kheAINB_4pzRDqkzG3K-ng", - "GenericTimelineById": "uGSr7alSjR9v6QJAIaqSKQ", - "TrendHistory": "Sj4T-jSB9pr0Mxtsc1UKZQ", - "AboutAccountQuery": "zs_jFPFT78rBpXv9Z3U2YQ" -} diff --git a/vendor/package/dist/lib/runtime-features.d.ts b/vendor/package/dist/lib/runtime-features.d.ts deleted file mode 100644 index 3fa1ab3..0000000 --- a/vendor/package/dist/lib/runtime-features.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -export type FeatureOverrides = { - global?: Record; - sets?: Record>; -}; -type NormalizedFeatureOverrides = { - global: Record; - sets: Record>; -}; -export type FeatureOverridesSnapshot = { - cachePath: string; - overrides: FeatureOverrides; -}; -export declare function loadFeatureOverrides(): NormalizedFeatureOverrides; -export declare function getFeatureOverridesSnapshot(): FeatureOverridesSnapshot; -export declare function applyFeatureOverrides(setName: string, base: Record): Record; -export declare function refreshFeatureOverridesCache(): Promise; -export declare function clearFeatureOverridesCache(): void; -export {}; -//# sourceMappingURL=runtime-features.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/runtime-features.d.ts.map b/vendor/package/dist/lib/runtime-features.d.ts.map deleted file mode 100644 index f7e0d14..0000000 --- a/vendor/package/dist/lib/runtime-features.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"runtime-features.d.ts","sourceRoot":"","sources":["../../src/lib/runtime-features.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAwGF,wBAAgB,oBAAoB,IAAI,0BAA0B,CAgBjE;AAED,wBAAgB,2BAA2B,IAAI,wBAAwB,CAMtE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmB7G;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAQtF;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"} \ No newline at end of file diff --git a/vendor/package/dist/lib/runtime-features.js b/vendor/package/dist/lib/runtime-features.js deleted file mode 100644 index 6910e9d..0000000 --- a/vendor/package/dist/lib/runtime-features.js +++ /dev/null @@ -1,151 +0,0 @@ -import { existsSync, readFileSync } from 'node:fs'; -import { mkdir, writeFile } from 'node:fs/promises'; -import { homedir } from 'node:os'; -import path from 'node:path'; -// biome-ignore lint/correctness/useImportExtensions: JSON module import doesn't use .js extension. -import defaultOverrides from './features.json' with { type: 'json' }; -const DEFAULT_CACHE_FILENAME = 'features.json'; -let cachedOverrides = null; -function normalizeFeatureMap(value) { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - return {}; - } - const result = {}; - for (const [key, entry] of Object.entries(value)) { - if (typeof entry === 'boolean') { - result[key] = entry; - } - } - return result; -} -function normalizeOverrides(value) { - if (!value || typeof value !== 'object' || Array.isArray(value)) { - return { global: {}, sets: {} }; - } - const record = value; - const global = normalizeFeatureMap(record.global); - const sets = {}; - const rawSets = record.sets && typeof record.sets === 'object' && !Array.isArray(record.sets) - ? record.sets - : {}; - for (const [setName, setValue] of Object.entries(rawSets)) { - const normalized = normalizeFeatureMap(setValue); - if (Object.keys(normalized).length > 0) { - sets[setName] = normalized; - } - } - return { global, sets }; -} -function mergeOverrides(base, next) { - const sets = { ...base.sets }; - for (const [setName, overrides] of Object.entries(next.sets)) { - const existing = sets[setName]; - sets[setName] = existing ? { ...existing, ...overrides } : { ...overrides }; - } - return { - global: { ...base.global, ...next.global }, - sets, - }; -} -function toFeatureOverrides(overrides) { - const result = {}; - if (Object.keys(overrides.global).length > 0) { - result.global = overrides.global; - } - const setEntries = Object.entries(overrides.sets).filter(([, value]) => Object.keys(value).length > 0); - if (setEntries.length > 0) { - result.sets = Object.fromEntries(setEntries); - } - return result; -} -function resolveFeaturesCachePath() { - const override = process.env.BIRD_FEATURES_CACHE ?? process.env.BIRD_FEATURES_PATH; - if (override && override.trim().length > 0) { - return path.resolve(override.trim()); - } - return path.join(homedir(), '.config', 'bird', DEFAULT_CACHE_FILENAME); -} -function readOverridesFromFile(cachePath) { - if (!existsSync(cachePath)) { - return null; - } - try { - const raw = readFileSync(cachePath, 'utf8'); - return normalizeOverrides(JSON.parse(raw)); - } - catch { - return null; - } -} -function readOverridesFromEnv() { - const raw = process.env.BIRD_FEATURES_JSON; - if (!raw || raw.trim().length === 0) { - return null; - } - try { - return normalizeOverrides(JSON.parse(raw)); - } - catch { - return null; - } -} -function writeOverridesToDisk(cachePath, overrides) { - const payload = toFeatureOverrides(overrides); - return mkdir(path.dirname(cachePath), { recursive: true }).then(() => writeFile(cachePath, `${JSON.stringify(payload, null, 2)}\n`, 'utf8')); -} -export function loadFeatureOverrides() { - if (cachedOverrides) { - return cachedOverrides; - } - const base = normalizeOverrides(defaultOverrides); - const fromFile = readOverridesFromFile(resolveFeaturesCachePath()); - const fromEnv = readOverridesFromEnv(); - let merged = base; - if (fromFile) { - merged = mergeOverrides(merged, fromFile); - } - if (fromEnv) { - merged = mergeOverrides(merged, fromEnv); - } - cachedOverrides = merged; - return merged; -} -export function getFeatureOverridesSnapshot() { - const overrides = toFeatureOverrides(loadFeatureOverrides()); - return { - cachePath: resolveFeaturesCachePath(), - overrides, - }; -} -export function applyFeatureOverrides(setName, base) { - const overrides = loadFeatureOverrides(); - const globalOverrides = overrides.global; - const setOverrides = overrides.sets[setName]; - if (Object.keys(globalOverrides).length === 0 && (!setOverrides || Object.keys(setOverrides).length === 0)) { - return base; - } - if (setOverrides) { - return { - ...base, - ...globalOverrides, - ...setOverrides, - }; - } - return { - ...base, - ...globalOverrides, - }; -} -export async function refreshFeatureOverridesCache() { - const cachePath = resolveFeaturesCachePath(); - const base = normalizeOverrides(defaultOverrides); - const fromFile = readOverridesFromFile(cachePath); - const merged = mergeOverrides(base, fromFile ?? { global: {}, sets: {} }); - await writeOverridesToDisk(cachePath, merged); - cachedOverrides = null; - return { cachePath, overrides: toFeatureOverrides(merged) }; -} -export function clearFeatureOverridesCache() { - cachedOverrides = null; -} -//# sourceMappingURL=runtime-features.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/runtime-features.js.map b/vendor/package/dist/lib/runtime-features.js.map deleted file mode 100644 index b6d558f..0000000 --- a/vendor/package/dist/lib/runtime-features.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"runtime-features.js","sourceRoot":"","sources":["../../src/lib/runtime-features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,mGAAmG;AACnG,OAAO,gBAAgB,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAiBrE,MAAM,sBAAsB,GAAG,eAAe,CAAC;AAC/C,IAAI,eAAe,GAAsC,IAAI,CAAC;AAE9D,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC5E,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,IAAI,GAA4C,EAAE,CAAC;IACzD,MAAM,OAAO,GACX,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3E,CAAC,CAAE,MAAM,CAAC,IAAgC;QAC1C,CAAC,CAAC,EAAE,CAAC;IACT,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CACrB,IAAgC,EAChC,IAAgC;IAEhC,MAAM,IAAI,GAA4C,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACvE,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO;QACL,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;QAC1C,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAqC;IAC/D,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IACnC,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACnF,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC3C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAiB,EAAE,SAAqC;IACpF,MAAM,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CACnE,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACvC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,eAAe,GAAG,MAAM,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,MAAM,SAAS,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC7D,OAAO;QACL,SAAS,EAAE,wBAAwB,EAAE;QACrC,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,IAA6B;IAClF,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC;IACzC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3G,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,GAAG,IAAI;YACP,GAAG,eAAe;YAClB,GAAG,YAAY;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,GAAG,eAAe;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9C,eAAe,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/runtime-query-ids.d.ts b/vendor/package/dist/lib/runtime-query-ids.d.ts deleted file mode 100644 index a3e0756..0000000 --- a/vendor/package/dist/lib/runtime-query-ids.d.ts +++ /dev/null @@ -1,33 +0,0 @@ -export type RuntimeQueryIdSnapshot = { - fetchedAt: string; - ttlMs: number; - ids: Record; - discovery: { - pages: string[]; - bundles: string[]; - }; -}; -export type RuntimeQueryIdSnapshotInfo = { - snapshot: RuntimeQueryIdSnapshot; - cachePath: string; - ageMs: number; - isFresh: boolean; -}; -export type RuntimeQueryIdsOptions = { - cachePath?: string; - ttlMs?: number; - fetchImpl?: typeof fetch; -}; -export type RuntimeQueryIdStore = { - cachePath: string; - ttlMs: number; - getSnapshotInfo: () => Promise; - getQueryId: (operationName: string) => Promise; - refresh: (operationNames: string[], opts?: { - force?: boolean; - }) => Promise; - clearMemory: () => void; -}; -export declare function createRuntimeQueryIdStore(options?: RuntimeQueryIdsOptions): RuntimeQueryIdStore; -export declare const runtimeQueryIds: RuntimeQueryIdStore; -//# sourceMappingURL=runtime-query-ids.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/runtime-query-ids.d.ts.map b/vendor/package/dist/lib/runtime-query-ids.d.ts.map deleted file mode 100644 index af0f299..0000000 --- a/vendor/package/dist/lib/runtime-query-ids.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"runtime-query-ids.d.ts","sourceRoot":"","sources":["../../src/lib/runtime-query-ids.ts"],"names":[],"mappings":"AA+CA,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IAClE,UAAU,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9D,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAC;IAC9G,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AA6JF,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,sBAA2B,GAAG,mBAAmB,CAwGnG;AAED,eAAO,MAAM,eAAe,qBAA8B,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/runtime-query-ids.js b/vendor/package/dist/lib/runtime-query-ids.js deleted file mode 100644 index c09fe62..0000000 --- a/vendor/package/dist/lib/runtime-query-ids.js +++ /dev/null @@ -1,264 +0,0 @@ -import { mkdir, readFile, writeFile } from 'node:fs/promises'; -import { homedir } from 'node:os'; -import path from 'node:path'; -const DEFAULT_CACHE_FILENAME = 'query-ids-cache.json'; -const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000; -const DISCOVERY_PAGES = [ - 'https://x.com/?lang=en', - 'https://x.com/explore', - 'https://x.com/notifications', - 'https://x.com/settings/profile', -]; -const BUNDLE_URL_REGEX = /https:\/\/abs\.twimg\.com\/responsive-web\/client-web(?:-legacy)?\/[A-Za-z0-9.-]+\.js/g; -const QUERY_ID_REGEX = /^[a-zA-Z0-9_-]+$/; -const OPERATION_PATTERNS = [ - { - regex: /e\.exports=\{queryId\s*:\s*["']([^"']+)["']\s*,\s*operationName\s*:\s*["']([^"']+)["']/gs, - operationGroup: 2, - queryIdGroup: 1, - }, - { - regex: /e\.exports=\{operationName\s*:\s*["']([^"']+)["']\s*,\s*queryId\s*:\s*["']([^"']+)["']/gs, - operationGroup: 1, - queryIdGroup: 2, - }, - { - regex: /operationName\s*[:=]\s*["']([^"']+)["'](.{0,4000}?)queryId\s*[:=]\s*["']([^"']+)["']/gs, - operationGroup: 1, - queryIdGroup: 3, - }, - { - regex: /queryId\s*[:=]\s*["']([^"']+)["'](.{0,4000}?)operationName\s*[:=]\s*["']([^"']+)["']/gs, - operationGroup: 3, - queryIdGroup: 1, - }, -]; -const HEADERS = { - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36', - Accept: 'text/html,application/json;q=0.9,*/*;q=0.8', - 'Accept-Language': 'en-US,en;q=0.9', -}; -async function fetchText(fetchImpl, url) { - const response = await fetchImpl(url, { headers: HEADERS }); - if (!response.ok) { - const body = await response.text().catch(() => ''); - throw new Error(`HTTP ${response.status} for ${url}: ${body.slice(0, 120)}`); - } - return response.text(); -} -function resolveDefaultCachePath() { - const override = process.env.BIRD_QUERY_IDS_CACHE; - if (override && override.trim().length > 0) { - return path.resolve(override.trim()); - } - return path.join(homedir(), '.config', 'bird', DEFAULT_CACHE_FILENAME); -} -function parseSnapshot(raw) { - if (!raw || typeof raw !== 'object') { - return null; - } - const record = raw; - const fetchedAt = typeof record.fetchedAt === 'string' ? record.fetchedAt : null; - const ttlMs = typeof record.ttlMs === 'number' && Number.isFinite(record.ttlMs) ? record.ttlMs : null; - const ids = record.ids && typeof record.ids === 'object' ? record.ids : null; - const discovery = record.discovery && typeof record.discovery === 'object' ? record.discovery : null; - if (!fetchedAt || !ttlMs || !ids || !discovery) { - return null; - } - const pages = Array.isArray(discovery.pages) ? discovery.pages : null; - const bundles = Array.isArray(discovery.bundles) ? discovery.bundles : null; - if (!pages || !bundles) { - return null; - } - const normalizedIds = {}; - for (const [key, value] of Object.entries(ids)) { - if (typeof value === 'string' && value.trim().length > 0) { - normalizedIds[key] = value.trim(); - } - } - return { - fetchedAt, - ttlMs, - ids: normalizedIds, - discovery: { - pages: pages.filter((p) => typeof p === 'string'), - bundles: bundles.filter((b) => typeof b === 'string'), - }, - }; -} -async function readSnapshotFromDisk(cachePath) { - try { - const raw = await readFile(cachePath, 'utf8'); - return parseSnapshot(JSON.parse(raw)); - } - catch { - return null; - } -} -async function writeSnapshotToDisk(cachePath, snapshot) { - await mkdir(path.dirname(cachePath), { recursive: true }); - await writeFile(cachePath, `${JSON.stringify(snapshot, null, 2)}\n`, 'utf8'); -} -async function discoverBundles(fetchImpl) { - const bundles = new Set(); - for (const page of DISCOVERY_PAGES) { - try { - const html = await fetchText(fetchImpl, page); - for (const match of html.matchAll(BUNDLE_URL_REGEX)) { - bundles.add(match[0]); - } - } - catch { - // ignore discovery page failures; other pages often work - } - } - const discovered = [...bundles]; - if (discovered.length === 0) { - throw new Error('No client bundles discovered; x.com layout may have changed.'); - } - return discovered; -} -function extractOperations(bundleContents, bundleLabel, targets, discovered) { - for (const pattern of OPERATION_PATTERNS) { - pattern.regex.lastIndex = 0; - while (true) { - const match = pattern.regex.exec(bundleContents); - if (match === null) { - break; - } - const operationName = match[pattern.operationGroup]; - const queryId = match[pattern.queryIdGroup]; - if (!operationName || !queryId) { - continue; - } - if (!targets.has(operationName)) { - continue; - } - if (!QUERY_ID_REGEX.test(queryId)) { - continue; - } - if (discovered.has(operationName)) { - continue; - } - discovered.set(operationName, { queryId, bundle: bundleLabel }); - if (discovered.size === targets.size) { - return; - } - } - } -} -async function fetchAndExtract(fetchImpl, bundleUrls, targets) { - const discovered = new Map(); - const CONCURRENCY = 6; - for (let i = 0; i < bundleUrls.length; i += CONCURRENCY) { - const chunk = bundleUrls.slice(i, i + CONCURRENCY); - await Promise.all(chunk.map(async (url) => { - if (discovered.size === targets.size) { - return; - } - const label = url.split('/').at(-1) ?? url; - try { - const js = await fetchText(fetchImpl, url); - extractOperations(js, label, targets, discovered); - } - catch { - // ignore failed bundles - } - })); - if (discovered.size === targets.size) { - break; - } - } - return discovered; -} -export function createRuntimeQueryIdStore(options = {}) { - const fetchImpl = options.fetchImpl ?? fetch; - const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS; - const cachePath = options.cachePath ? path.resolve(options.cachePath) : resolveDefaultCachePath(); - let memorySnapshot = null; - let loadOnce = null; - let refreshInFlight = null; - const loadSnapshot = async () => { - if (memorySnapshot) { - return memorySnapshot; - } - if (!loadOnce) { - loadOnce = (async () => { - const fromDisk = await readSnapshotFromDisk(cachePath); - memorySnapshot = fromDisk; - return fromDisk; - })(); - } - return loadOnce; - }; - const getSnapshotInfo = async () => { - const snapshot = await loadSnapshot(); - if (!snapshot) { - return null; - } - const fetchedAtMs = new Date(snapshot.fetchedAt).getTime(); - const ageMs = Number.isFinite(fetchedAtMs) ? Math.max(0, Date.now() - fetchedAtMs) : Number.POSITIVE_INFINITY; - const effectiveTtl = Number.isFinite(snapshot.ttlMs) ? snapshot.ttlMs : ttlMs; - const isFresh = ageMs <= effectiveTtl; - return { snapshot, cachePath, ageMs, isFresh }; - }; - const getQueryId = async (operationName) => { - const info = await getSnapshotInfo(); - if (!info) { - return null; - } - return info.snapshot.ids[operationName] ?? null; - }; - const refresh = async (operationNames, opts = {}) => { - if (refreshInFlight) { - return refreshInFlight; - } - refreshInFlight = (async () => { - const current = await getSnapshotInfo(); - if (!opts.force && current?.isFresh) { - return current; - } - const targets = new Set(operationNames); - const bundleUrls = await discoverBundles(fetchImpl); - const discovered = await fetchAndExtract(fetchImpl, bundleUrls, targets); - if (discovered.size === 0) { - return current ?? null; - } - const ids = {}; - for (const name of operationNames) { - const entry = discovered.get(name); - if (entry?.queryId) { - ids[name] = entry.queryId; - } - } - const snapshot = { - fetchedAt: new Date().toISOString(), - ttlMs, - ids, - discovery: { - pages: [...DISCOVERY_PAGES], - bundles: bundleUrls.map((url) => url.split('/').at(-1) ?? url), - }, - }; - await writeSnapshotToDisk(cachePath, snapshot); - memorySnapshot = snapshot; - return getSnapshotInfo(); - })().finally(() => { - refreshInFlight = null; - }); - return refreshInFlight; - }; - return { - cachePath, - ttlMs, - getSnapshotInfo, - getQueryId, - refresh, - clearMemory() { - memorySnapshot = null; - loadOnce = null; - }, - }; -} -export const runtimeQueryIds = createRuntimeQueryIdStore(); -//# sourceMappingURL=runtime-query-ids.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/runtime-query-ids.js.map b/vendor/package/dist/lib/runtime-query-ids.js.map deleted file mode 100644 index 8e9978d..0000000 --- a/vendor/package/dist/lib/runtime-query-ids.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"runtime-query-ids.js","sourceRoot":"","sources":["../../src/lib/runtime-query-ids.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/thread-filters.d.ts b/vendor/package/dist/lib/thread-filters.d.ts deleted file mode 100644 index a85ff1b..0000000 --- a/vendor/package/dist/lib/thread-filters.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { TweetData, TweetWithMeta } from './twitter-client-types.js'; -export declare function filterAuthorChain(tweets: TweetData[], bookmarkedTweet: TweetData): TweetData[]; -export declare function filterAuthorOnly(tweets: TweetData[], bookmarkedTweet: TweetData): TweetData[]; -export declare function filterFullChain(tweets: TweetData[], bookmarkedTweet: TweetData, options?: { - includeAncestorBranches?: boolean; -}): TweetData[]; -export declare function addThreadMetadata(tweet: TweetData, allConversationTweets: TweetData[]): TweetWithMeta; -//# sourceMappingURL=thread-filters.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/thread-filters.d.ts.map b/vendor/package/dist/lib/thread-filters.d.ts.map deleted file mode 100644 index fc1fafa..0000000 --- a/vendor/package/dist/lib/thread-filters.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"thread-filters.d.ts","sourceRoot":"","sources":["../../src/lib/thread-filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAS1E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,eAAe,EAAE,SAAS,GAAG,SAAS,EAAE,CAqC9F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,eAAe,EAAE,SAAS,GAAG,SAAS,EAAE,CAG7F;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,EAAE,EACnB,eAAe,EAAE,SAAS,EAC1B,OAAO,GAAE;IAAE,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAAO,GAClD,SAAS,EAAE,CA4Db;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,GAAG,aAAa,CA0BrG"} \ No newline at end of file diff --git a/vendor/package/dist/lib/thread-filters.js b/vendor/package/dist/lib/thread-filters.js deleted file mode 100644 index 8700ab2..0000000 --- a/vendor/package/dist/lib/thread-filters.js +++ /dev/null @@ -1,124 +0,0 @@ -const sortByCreatedAt = (tweets) => tweets.slice().sort((a, b) => { - const aTime = a.createdAt ? Date.parse(a.createdAt) : 0; - const bTime = b.createdAt ? Date.parse(b.createdAt) : 0; - return aTime - bTime; -}); -export function filterAuthorChain(tweets, bookmarkedTweet) { - const author = bookmarkedTweet.author.username; - const byId = new Map(tweets.map((tweet) => [tweet.id, tweet])); - const chainIds = new Set(); - let current = bookmarkedTweet; - while (current && current.author.username === author) { - chainIds.add(current.id); - const parentId = current.inReplyToStatusId; - if (!parentId) { - break; - } - const parent = byId.get(parentId); - if (!parent || parent.author.username !== author) { - break; - } - current = parent; - } - let changed = true; - while (changed) { - changed = false; - for (const tweet of tweets) { - if (tweet.author.username !== author) { - continue; - } - if (chainIds.has(tweet.id)) { - continue; - } - if (tweet.inReplyToStatusId && chainIds.has(tweet.inReplyToStatusId)) { - chainIds.add(tweet.id); - changed = true; - } - } - } - return sortByCreatedAt(tweets.filter((tweet) => chainIds.has(tweet.id))); -} -export function filterAuthorOnly(tweets, bookmarkedTweet) { - const author = bookmarkedTweet.author.username; - return tweets.filter((tweet) => tweet.author.username === author); -} -export function filterFullChain(tweets, bookmarkedTweet, options = {}) { - const byId = new Map(tweets.map((tweet) => [tweet.id, tweet])); - const repliesByParent = new Map(); - for (const tweet of tweets) { - if (!tweet.inReplyToStatusId) { - continue; - } - const list = repliesByParent.get(tweet.inReplyToStatusId) ?? []; - list.push(tweet); - repliesByParent.set(tweet.inReplyToStatusId, list); - } - const chainIds = new Set(); - const ancestorIds = []; - chainIds.add(bookmarkedTweet.id); - let current = bookmarkedTweet; - while (current?.inReplyToStatusId) { - const parent = byId.get(current.inReplyToStatusId); - if (!parent) { - break; - } - if (!chainIds.has(parent.id)) { - chainIds.add(parent.id); - ancestorIds.push(parent.id); - } - current = parent; - } - const addDescendants = (startIds) => { - const queue = [...startIds]; - while (queue.length > 0) { - const currentId = queue.shift(); - if (!currentId) { - continue; - } - if (!chainIds.has(currentId)) { - chainIds.add(currentId); - } - const replies = repliesByParent.get(currentId) ?? []; - for (const reply of replies) { - if (chainIds.has(reply.id)) { - continue; - } - chainIds.add(reply.id); - queue.push(reply.id); - } - } - }; - addDescendants([bookmarkedTweet.id]); - if (options.includeAncestorBranches) { - for (const ancestorId of ancestorIds) { - addDescendants([ancestorId]); - } - } - return sortByCreatedAt(tweets.filter((tweet) => chainIds.has(tweet.id))); -} -export function addThreadMetadata(tweet, allConversationTweets) { - const author = tweet.author.username; - const hasSelfReplies = allConversationTweets.some((candidate) => candidate.inReplyToStatusId === tweet.id && candidate.author.username === author); - const isRoot = !tweet.inReplyToStatusId; - let threadPosition; - if (isRoot && !hasSelfReplies) { - threadPosition = 'standalone'; - } - else if (isRoot && hasSelfReplies) { - threadPosition = 'root'; - } - else if (!isRoot && hasSelfReplies) { - threadPosition = 'middle'; - } - else { - threadPosition = 'end'; - } - return { - ...tweet, - isThread: hasSelfReplies || !isRoot, - threadPosition, - hasSelfReplies, - threadRootId: tweet.conversationId ?? null, - }; -} -//# sourceMappingURL=thread-filters.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/thread-filters.js.map b/vendor/package/dist/lib/thread-filters.js.map deleted file mode 100644 index 26ae817..0000000 --- a/vendor/package/dist/lib/thread-filters.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"thread-filters.js","sourceRoot":"","sources":["../../src/lib/thread-filters.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-base.d.ts b/vendor/package/dist/lib/twitter-client-base.d.ts deleted file mode 100644 index 258e424..0000000 --- a/vendor/package/dist/lib/twitter-client-base.d.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { type OperationName } from './twitter-client-constants.js'; -import type { CurrentUserResult, TwitterClientOptions } from './twitter-client-types.js'; -export type Constructor = new (...args: any[]) => T; -export type AbstractConstructor = abstract new (...args: any[]) => T; -export type Mixin, TAdded> = abstract new (...args: ConstructorParameters) => TwitterClientBase & TAdded; -export declare abstract class TwitterClientBase { - protected authToken: string; - protected ct0: string; - protected cookieHeader: string; - protected userAgent: string; - protected timeoutMs?: number; - protected quoteDepth: number; - protected clientUuid: string; - protected clientDeviceId: string; - protected clientUserId?: string; - constructor(options: TwitterClientOptions); - protected abstract getCurrentUser(): Promise; - protected sleep(ms: number): Promise; - protected getQueryId(operationName: OperationName): Promise; - protected refreshQueryIds(): Promise; - protected withRefreshedQueryIdsOn404(attempt: () => Promise): Promise<{ - result: T; - refreshed: boolean; - }>; - protected getTweetDetailQueryIds(): Promise; - protected getSearchTimelineQueryIds(): Promise; - protected fetchWithTimeout(url: string, init: RequestInit): Promise; - protected getHeaders(): Record; - protected createTransactionId(): string; - protected getBaseHeaders(): Record; - protected getJsonHeaders(): Record; - protected getUploadHeaders(): Record; - protected ensureClientUserId(): Promise; -} -//# sourceMappingURL=twitter-client-base.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-base.d.ts.map b/vendor/package/dist/lib/twitter-client-base.d.ts.map deleted file mode 100644 index eacd113..0000000 --- a/vendor/package/dist/lib/twitter-client-base.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-base.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAyC,MAAM,+BAA+B,CAAC;AAC1G,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIzF,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAEhE,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjF,MAAM,MAAM,KAAK,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,QAAQ,MACxF,GAAG,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,KAClC,iBAAiB,GAAG,MAAM,CAAC;AAEhC,8BAAsB,iBAAiB;IACrC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,oBAAoB;IAgBzC,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;cAE/C,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAIhC,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;cAKzD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;cAWhC,0BAA0B,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,EACzF,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;cAU7B,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;cAK3C,yBAAyB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;cAK9C,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAcnF,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI9C,SAAS,CAAC,mBAAmB,IAAI,MAAM;IAIvC,SAAS,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IA0BlD,SAAS,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOlD,SAAS,CAAC,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;cAKpC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;CAYpD"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-base.js b/vendor/package/dist/lib/twitter-client-base.js deleted file mode 100644 index 8b7e969..0000000 --- a/vendor/package/dist/lib/twitter-client-base.js +++ /dev/null @@ -1,129 +0,0 @@ -import { randomBytes, randomUUID } from 'node:crypto'; -import { runtimeQueryIds } from './runtime-query-ids.js'; -import { QUERY_IDS, TARGET_QUERY_ID_OPERATIONS } from './twitter-client-constants.js'; -import { normalizeQuoteDepth } from './twitter-client-utils.js'; -export class TwitterClientBase { - authToken; - ct0; - cookieHeader; - userAgent; - timeoutMs; - quoteDepth; - clientUuid; - clientDeviceId; - clientUserId; - constructor(options) { - if (!options.cookies.authToken || !options.cookies.ct0) { - throw new Error('Both authToken and ct0 cookies are required'); - } - this.authToken = options.cookies.authToken; - this.ct0 = options.cookies.ct0; - this.cookieHeader = options.cookies.cookieHeader || `auth_token=${this.authToken}; ct0=${this.ct0}`; - this.userAgent = - options.userAgent || - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'; - this.timeoutMs = options.timeoutMs; - this.quoteDepth = normalizeQuoteDepth(options.quoteDepth); - this.clientUuid = randomUUID(); - this.clientDeviceId = randomUUID(); - } - async sleep(ms) { - await new Promise((resolve) => setTimeout(resolve, ms)); - } - async getQueryId(operationName) { - const cached = await runtimeQueryIds.getQueryId(operationName); - return cached ?? QUERY_IDS[operationName]; - } - async refreshQueryIds() { - if (process.env.NODE_ENV === 'test') { - return; - } - try { - await runtimeQueryIds.refresh(TARGET_QUERY_ID_OPERATIONS, { force: true }); - } - catch { - // ignore refresh failures; callers will fall back to baked-in IDs - } - } - async withRefreshedQueryIdsOn404(attempt) { - const firstAttempt = await attempt(); - if (firstAttempt.success || !firstAttempt.had404) { - return { result: firstAttempt, refreshed: false }; - } - await this.refreshQueryIds(); - const secondAttempt = await attempt(); - return { result: secondAttempt, refreshed: true }; - } - async getTweetDetailQueryIds() { - const primary = await this.getQueryId('TweetDetail'); - return Array.from(new Set([primary, '97JF30KziU00483E_8elBA', 'aFvUsJm2c-oDkJV75blV6g'])); - } - async getSearchTimelineQueryIds() { - const primary = await this.getQueryId('SearchTimeline'); - return Array.from(new Set([primary, 'M1jEez78PEfVfbQLvlWMvQ', '5h0kNbk3ii97rmfY6CdgAA', 'Tp1sewRU1AsZpBWhqCZicQ'])); - } - async fetchWithTimeout(url, init) { - if (!this.timeoutMs || this.timeoutMs <= 0) { - return fetch(url, init); - } - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs); - try { - return await fetch(url, { ...init, signal: controller.signal }); - } - finally { - clearTimeout(timeoutId); - } - } - getHeaders() { - return this.getJsonHeaders(); - } - createTransactionId() { - return randomBytes(16).toString('hex'); - } - getBaseHeaders() { - const headers = { - accept: '*/*', - 'accept-language': 'en-US,en;q=0.9', - authorization: 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA', - 'x-csrf-token': this.ct0, - 'x-twitter-auth-type': 'OAuth2Session', - 'x-twitter-active-user': 'yes', - 'x-twitter-client-language': 'en', - 'x-client-uuid': this.clientUuid, - 'x-twitter-client-deviceid': this.clientDeviceId, - 'x-client-transaction-id': this.createTransactionId(), - cookie: this.cookieHeader, - 'user-agent': this.userAgent, - origin: 'https://x.com', - referer: 'https://x.com/', - }; - if (this.clientUserId) { - headers['x-twitter-client-user-id'] = this.clientUserId; - } - return headers; - } - getJsonHeaders() { - return { - ...this.getBaseHeaders(), - 'content-type': 'application/json', - }; - } - getUploadHeaders() { - // Note: do not set content-type; URLSearchParams/FormData need to set it (incl boundary) themselves. - return this.getBaseHeaders(); - } - async ensureClientUserId() { - if (process.env.NODE_ENV === 'test') { - return; - } - if (this.clientUserId) { - return; - } - const result = await this.getCurrentUser(); - if (result.success && result.user?.id) { - this.clientUserId = result.user.id; - } - } -} -//# sourceMappingURL=twitter-client-base.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-base.js.map b/vendor/package/dist/lib/twitter-client-base.js.map deleted file mode 100644 index 6687bed..0000000 --- a/vendor/package/dist/lib/twitter-client-base.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-base.js","sourceRoot":"","sources":["../../src/lib/twitter-client-base.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-bookmarks.d.ts b/vendor/package/dist/lib/twitter-client-bookmarks.d.ts deleted file mode 100644 index 8a375fd..0000000 --- a/vendor/package/dist/lib/twitter-client-bookmarks.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { BookmarkMutationResult } from './twitter-client-types.js'; -export interface TwitterClientBookmarkMethods { - unbookmark(tweetId: string): Promise; -} -export declare function withBookmarks>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-bookmarks.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-bookmarks.d.ts.map b/vendor/package/dist/lib/twitter-client-bookmarks.d.ts.map deleted file mode 100644 index b6f2f20..0000000 --- a/vendor/package/dist/lib/twitter-client-bookmarks.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-bookmarks.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-bookmarks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC9D;AAED,wBAAgB,aAAa,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAChF,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAqE5C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-bookmarks.js b/vendor/package/dist/lib/twitter-client-bookmarks.js deleted file mode 100644 index 6f78fa1..0000000 --- a/vendor/package/dist/lib/twitter-client-bookmarks.js +++ /dev/null @@ -1,61 +0,0 @@ -import { TWITTER_API_BASE, TWITTER_GRAPHQL_POST_URL } from './twitter-client-constants.js'; -export function withBookmarks(Base) { - class TwitterClientBookmarks extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async unbookmark(tweetId) { - // TODO: verify if DeleteBookmark requires client user ID or additional payload fields; add ensureClientUserId() if needed (needs live API test). - const variables = { tweet_id: tweetId }; - let queryId = await this.getQueryId('DeleteBookmark'); - let urlWithOperation = `${TWITTER_API_BASE}/${queryId}/DeleteBookmark`; - const buildBody = () => JSON.stringify({ variables, queryId }); - const buildHeaders = () => ({ ...this.getHeaders(), referer: `https://x.com/i/status/${tweetId}` }); - let body = buildBody(); - const parseResponse = async (response) => { - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}` }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: data.errors.map((e) => e.message).join(', ') }; - } - return { success: true }; - }; - try { - let response = await this.fetchWithTimeout(urlWithOperation, { - method: 'POST', - headers: buildHeaders(), - body, - }); - if (response.status === 404) { - await this.refreshQueryIds(); - queryId = await this.getQueryId('DeleteBookmark'); - urlWithOperation = `${TWITTER_API_BASE}/${queryId}/DeleteBookmark`; - body = buildBody(); - response = await this.fetchWithTimeout(urlWithOperation, { - method: 'POST', - headers: buildHeaders(), - body, - }); - if (response.status === 404) { - const retry = await this.fetchWithTimeout(TWITTER_GRAPHQL_POST_URL, { - method: 'POST', - headers: buildHeaders(), - body, - }); - return parseResponse(retry); - } - } - return parseResponse(response); - } - catch (error) { - return { success: false, error: error instanceof Error ? error.message : String(error) }; - } - } - } - return TwitterClientBookmarks; -} -//# sourceMappingURL=twitter-client-bookmarks.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-bookmarks.js.map b/vendor/package/dist/lib/twitter-client-bookmarks.js.map deleted file mode 100644 index 9246701..0000000 --- a/vendor/package/dist/lib/twitter-client-bookmarks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-bookmarks.js","sourceRoot":"","sources":["../../src/lib/twitter-client-bookmarks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-constants.d.ts b/vendor/package/dist/lib/twitter-client-constants.d.ts deleted file mode 100644 index a519723..0000000 --- a/vendor/package/dist/lib/twitter-client-constants.d.ts +++ /dev/null @@ -1,43 +0,0 @@ -export declare const TWITTER_API_BASE = "https://x.com/i/api/graphql"; -export declare const TWITTER_GRAPHQL_POST_URL = "https://x.com/i/api/graphql"; -export declare const TWITTER_UPLOAD_URL = "https://upload.twitter.com/i/media/upload.json"; -export declare const TWITTER_MEDIA_METADATA_URL = "https://x.com/i/api/1.1/media/metadata/create.json"; -export declare const TWITTER_STATUS_UPDATE_URL = "https://x.com/i/api/1.1/statuses/update.json"; -export declare const SETTINGS_SCREEN_NAME_REGEX: RegExp; -export declare const SETTINGS_USER_ID_REGEX: RegExp; -export declare const SETTINGS_NAME_REGEX: RegExp; -export declare const FALLBACK_QUERY_IDS: { - readonly CreateTweet: "TAJw1rBsjAtdNgTdlo2oeg"; - readonly CreateRetweet: "ojPdsZsimiJrUGLR1sjUtA"; - readonly DeleteRetweet: "iQtK4dl5hBmXewYZuEOKVw"; - readonly CreateFriendship: "8h9JVdV8dlSyqyRDJEPCsA"; - readonly DestroyFriendship: "ppXWuagMNXgvzx6WoXBW0Q"; - readonly FavoriteTweet: "lI07N6Otwv1PhnEgXILM7A"; - readonly UnfavoriteTweet: "ZYKSe-w7KEslx3JhSIk5LA"; - readonly CreateBookmark: "aoDbu3RHznuiSkQ9aNM67Q"; - readonly DeleteBookmark: "Wlmlj2-xzyS1GN3a6cj-mQ"; - readonly TweetDetail: "97JF30KziU00483E_8elBA"; - readonly SearchTimeline: "M1jEez78PEfVfbQLvlWMvQ"; - readonly UserArticlesTweets: "8zBy9h4L90aDL02RsBcCFg"; - readonly UserTweets: "Wms1GvIiHXAPBaCr9KblaA"; - readonly Bookmarks: "RV1g3b8n_SGOHwkqKYSCFw"; - readonly Following: "BEkNpEt5pNETESoqMsTEGA"; - readonly Followers: "kuFUYP9eV1FPoEy4N-pi7w"; - readonly Likes: "JR2gceKucIKcVNB_9JkhsA"; - readonly BookmarkFolderTimeline: "KJIQpsvxrTfRIlbaRIySHQ"; - readonly ListOwnerships: "wQcOSjSQ8NtgxIwvYl1lMg"; - readonly ListMemberships: "BlEXXdARdSeL_0KyKHHvvg"; - readonly ListLatestTweetsTimeline: "2TemLyqrMpTeAmysdbnVqw"; - readonly ListByRestId: "wXzyA5vM_aVkBL9G8Vp3kw"; - readonly HomeTimeline: "edseUwk9sP5Phz__9TIRnA"; - readonly HomeLatestTimeline: "iOEZpOdfekFsxSlPQCQtPg"; - readonly ExploreSidebar: "lpSN4M6qpimkF4nRFPE3nQ"; - readonly ExplorePage: "kheAINB_4pzRDqkzG3K-ng"; - readonly GenericTimelineById: "uGSr7alSjR9v6QJAIaqSKQ"; - readonly TrendHistory: "Sj4T-jSB9pr0Mxtsc1UKZQ"; - readonly AboutAccountQuery: "zs_jFPFT78rBpXv9Z3U2YQ"; -}; -export type OperationName = keyof typeof FALLBACK_QUERY_IDS; -export declare const QUERY_IDS: Record; -export declare const TARGET_QUERY_ID_OPERATIONS: Array; -//# sourceMappingURL=twitter-client-constants.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-constants.d.ts.map b/vendor/package/dist/lib/twitter-client-constants.d.ts.map deleted file mode 100644 index b749584..0000000 --- a/vendor/package/dist/lib/twitter-client-constants.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-constants.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,gCAAgC,CAAC;AAC9D,eAAO,MAAM,wBAAwB,gCAAgC,CAAC;AACtE,eAAO,MAAM,kBAAkB,mDAAmD,CAAC;AACnF,eAAO,MAAM,0BAA0B,uDAAuD,CAAC;AAC/F,eAAO,MAAM,yBAAyB,iDAAiD,CAAC;AACxF,eAAO,MAAM,0BAA0B,QAA4B,CAAC;AACpE,eAAO,MAAM,sBAAsB,QAA4B,CAAC;AAChE,eAAO,MAAM,mBAAmB,QAAsC,CAAC;AAKvE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BrB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAE5D,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAGnD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAsC,KAAK,CAAC,aAAa,CAAC,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-constants.js b/vendor/package/dist/lib/twitter-client-constants.js deleted file mode 100644 index a9fcde3..0000000 --- a/vendor/package/dist/lib/twitter-client-constants.js +++ /dev/null @@ -1,50 +0,0 @@ -// biome-ignore lint/correctness/useImportExtensions: JSON module import doesn't use .js extension. -import queryIds from './query-ids.json' with { type: 'json' }; -export const TWITTER_API_BASE = 'https://x.com/i/api/graphql'; -export const TWITTER_GRAPHQL_POST_URL = 'https://x.com/i/api/graphql'; -export const TWITTER_UPLOAD_URL = 'https://upload.twitter.com/i/media/upload.json'; -export const TWITTER_MEDIA_METADATA_URL = 'https://x.com/i/api/1.1/media/metadata/create.json'; -export const TWITTER_STATUS_UPDATE_URL = 'https://x.com/i/api/1.1/statuses/update.json'; -export const SETTINGS_SCREEN_NAME_REGEX = /"screen_name":"([^"]+)"/; -export const SETTINGS_USER_ID_REGEX = /"user_id"\s*:\s*"(\d+)"/; -export const SETTINGS_NAME_REGEX = /"name":"([^"\\]*(?:\\.[^"\\]*)*)"/; -// Query IDs rotate frequently; the values in query-ids.json are refreshed by -// scripts/update-query-ids.ts. The fallback values keep the client usable if -// the file is missing or incomplete. -export const FALLBACK_QUERY_IDS = { - CreateTweet: 'TAJw1rBsjAtdNgTdlo2oeg', - CreateRetweet: 'ojPdsZsimiJrUGLR1sjUtA', - DeleteRetweet: 'iQtK4dl5hBmXewYZuEOKVw', - CreateFriendship: '8h9JVdV8dlSyqyRDJEPCsA', - DestroyFriendship: 'ppXWuagMNXgvzx6WoXBW0Q', - FavoriteTweet: 'lI07N6Otwv1PhnEgXILM7A', - UnfavoriteTweet: 'ZYKSe-w7KEslx3JhSIk5LA', - CreateBookmark: 'aoDbu3RHznuiSkQ9aNM67Q', - DeleteBookmark: 'Wlmlj2-xzyS1GN3a6cj-mQ', - TweetDetail: '97JF30KziU00483E_8elBA', - SearchTimeline: 'M1jEez78PEfVfbQLvlWMvQ', - UserArticlesTweets: '8zBy9h4L90aDL02RsBcCFg', - UserTweets: 'Wms1GvIiHXAPBaCr9KblaA', - Bookmarks: 'RV1g3b8n_SGOHwkqKYSCFw', - Following: 'BEkNpEt5pNETESoqMsTEGA', - Followers: 'kuFUYP9eV1FPoEy4N-pi7w', - Likes: 'JR2gceKucIKcVNB_9JkhsA', - BookmarkFolderTimeline: 'KJIQpsvxrTfRIlbaRIySHQ', - ListOwnerships: 'wQcOSjSQ8NtgxIwvYl1lMg', - ListMemberships: 'BlEXXdARdSeL_0KyKHHvvg', - ListLatestTweetsTimeline: '2TemLyqrMpTeAmysdbnVqw', - ListByRestId: 'wXzyA5vM_aVkBL9G8Vp3kw', - HomeTimeline: 'edseUwk9sP5Phz__9TIRnA', - HomeLatestTimeline: 'iOEZpOdfekFsxSlPQCQtPg', - ExploreSidebar: 'lpSN4M6qpimkF4nRFPE3nQ', - ExplorePage: 'kheAINB_4pzRDqkzG3K-ng', - GenericTimelineById: 'uGSr7alSjR9v6QJAIaqSKQ', - TrendHistory: 'Sj4T-jSB9pr0Mxtsc1UKZQ', - AboutAccountQuery: 'zs_jFPFT78rBpXv9Z3U2YQ', -}; -export const QUERY_IDS = { - ...FALLBACK_QUERY_IDS, - ...queryIds, -}; -export const TARGET_QUERY_ID_OPERATIONS = Object.keys(FALLBACK_QUERY_IDS); -//# sourceMappingURL=twitter-client-constants.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-constants.js.map b/vendor/package/dist/lib/twitter-client-constants.js.map deleted file mode 100644 index 63461d9..0000000 --- a/vendor/package/dist/lib/twitter-client-constants.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-constants.js","sourceRoot":"","sources":["../../src/lib/twitter-client-constants.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,OAAO,QAAQ,MAAM,kBAAkB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,6BAA6B,CAAC;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,gDAAgD,CAAC;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,oDAAoD,CAAC;AAC/F,MAAM,CAAC,MAAM,yBAAyB,GAAG,8CAA8C,CAAC;AACxF,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEvE,6EAA6E;AAC7E,6EAA6E;AAC7E,qCAAqC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,wBAAwB;IACrC,aAAa,EAAE,wBAAwB;IACvC,aAAa,EAAE,wBAAwB;IACvC,gBAAgB,EAAE,wBAAwB;IAC1C,iBAAiB,EAAE,wBAAwB;IAC3C,aAAa,EAAE,wBAAwB;IACvC,eAAe,EAAE,wBAAwB;IACzC,cAAc,EAAE,wBAAwB;IACxC,cAAc,EAAE,wBAAwB;IACxC,WAAW,EAAE,wBAAwB;IACrC,cAAc,EAAE,wBAAwB;IACxC,kBAAkB,EAAE,wBAAwB;IAC5C,UAAU,EAAE,wBAAwB;IACpC,SAAS,EAAE,wBAAwB;IACnC,SAAS,EAAE,wBAAwB;IACnC,SAAS,EAAE,wBAAwB;IACnC,KAAK,EAAE,wBAAwB;IAC/B,sBAAsB,EAAE,wBAAwB;IAChD,cAAc,EAAE,wBAAwB;IACxC,eAAe,EAAE,wBAAwB;IACzC,wBAAwB,EAAE,wBAAwB;IAClD,YAAY,EAAE,wBAAwB;IACtC,YAAY,EAAE,wBAAwB;IACtC,kBAAkB,EAAE,wBAAwB;IAC5C,cAAc,EAAE,wBAAwB;IACxC,WAAW,EAAE,wBAAwB;IACrC,mBAAmB,EAAE,wBAAwB;IAC7C,YAAY,EAAE,wBAAwB;IACtC,iBAAiB,EAAE,wBAAwB;CACnC,CAAC;AAIX,MAAM,CAAC,MAAM,SAAS,GAAkC;IACtD,GAAG,kBAAkB;IACrB,GAAI,QAAmD;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAyB,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-engagement.d.ts b/vendor/package/dist/lib/twitter-client-engagement.d.ts deleted file mode 100644 index 0874480..0000000 --- a/vendor/package/dist/lib/twitter-client-engagement.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { BookmarkMutationResult } from './twitter-client-types.js'; -export interface TwitterClientEngagementMethods { - /** Like a tweet. */ - like(tweetId: string): Promise; - /** Remove a like from a tweet. */ - unlike(tweetId: string): Promise; - /** Retweet a tweet. */ - retweet(tweetId: string): Promise; - /** Remove a retweet. */ - unretweet(tweetId: string): Promise; - /** Bookmark a tweet. */ - bookmark(tweetId: string): Promise; -} -export declare function withEngagement>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-engagement.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-engagement.d.ts.map b/vendor/package/dist/lib/twitter-client-engagement.d.ts.map deleted file mode 100644 index 24ba547..0000000 --- a/vendor/package/dist/lib/twitter-client-engagement.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-engagement.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-engagement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,WAAW,8BAA8B;IAC7C,oBAAoB;IACpB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvD,kCAAkC;IAClC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzD,uBAAuB;IACvB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC1D,wBAAwB;IACxB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC5D,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC5D;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EACjF,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAkG9C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-engagement.js b/vendor/package/dist/lib/twitter-client-engagement.js deleted file mode 100644 index 32adf0e..0000000 --- a/vendor/package/dist/lib/twitter-client-engagement.js +++ /dev/null @@ -1,81 +0,0 @@ -import { TWITTER_API_BASE, TWITTER_GRAPHQL_POST_URL } from './twitter-client-constants.js'; -export function withEngagement(Base) { - class TwitterClientEngagement extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async performEngagementMutation(operationName, tweetId) { - await this.ensureClientUserId(); - const variables = operationName === 'DeleteRetweet' ? { tweet_id: tweetId, source_tweet_id: tweetId } : { tweet_id: tweetId }; - let queryId = await this.getQueryId(operationName); - let urlWithOperation = `${TWITTER_API_BASE}/${queryId}/${operationName}`; - const buildBody = () => JSON.stringify({ variables, queryId }); - const buildHeaders = () => ({ ...this.getHeaders(), referer: `https://x.com/i/status/${tweetId}` }); - let body = buildBody(); - const parseResponse = async (response) => { - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}` }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: data.errors.map((e) => e.message).join(', ') }; - } - return { success: true }; - }; - try { - let response = await this.fetchWithTimeout(urlWithOperation, { - method: 'POST', - headers: buildHeaders(), - body, - }); - if (response.status === 404) { - await this.refreshQueryIds(); - queryId = await this.getQueryId(operationName); - urlWithOperation = `${TWITTER_API_BASE}/${queryId}/${operationName}`; - body = buildBody(); - response = await this.fetchWithTimeout(urlWithOperation, { - method: 'POST', - headers: buildHeaders(), - body, - }); - if (response.status === 404) { - const retry = await this.fetchWithTimeout(TWITTER_GRAPHQL_POST_URL, { - method: 'POST', - headers: buildHeaders(), - body, - }); - return parseResponse(retry); - } - } - return parseResponse(response); - } - catch (error) { - return { success: false, error: error instanceof Error ? error.message : String(error) }; - } - } - /** Like a tweet. */ - async like(tweetId) { - return this.performEngagementMutation('FavoriteTweet', tweetId); - } - /** Remove a like from a tweet. */ - async unlike(tweetId) { - return this.performEngagementMutation('UnfavoriteTweet', tweetId); - } - /** Retweet a tweet. */ - async retweet(tweetId) { - return this.performEngagementMutation('CreateRetweet', tweetId); - } - /** Remove a retweet. */ - async unretweet(tweetId) { - return this.performEngagementMutation('DeleteRetweet', tweetId); - } - /** Bookmark a tweet. */ - async bookmark(tweetId) { - return this.performEngagementMutation('CreateBookmark', tweetId); - } - } - return TwitterClientEngagement; -} -//# sourceMappingURL=twitter-client-engagement.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-engagement.js.map b/vendor/package/dist/lib/twitter-client-engagement.js.map deleted file mode 100644 index edda09a..0000000 --- a/vendor/package/dist/lib/twitter-client-engagement.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-engagement.js","sourceRoot":"","sources":["../../src/lib/twitter-client-engagement.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-features.d.ts b/vendor/package/dist/lib/twitter-client-features.d.ts deleted file mode 100644 index 79374e7..0000000 --- a/vendor/package/dist/lib/twitter-client-features.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export declare function buildArticleFeatures(): Record; -export declare function buildTweetDetailFeatures(): Record; -export declare function buildArticleFieldToggles(): Record; -export declare function buildSearchFeatures(): Record; -export declare function buildTweetCreateFeatures(): Record; -export declare function buildTimelineFeatures(): Record; -export declare function buildBookmarksFeatures(): Record; -export declare function buildLikesFeatures(): Record; -export declare function buildListsFeatures(): Record; -export declare function buildHomeTimelineFeatures(): Record; -export declare function buildUserTweetsFeatures(): Record; -export declare function buildFollowingFeatures(): Record; -export declare function buildExploreFeatures(): Record; -//# sourceMappingURL=twitter-client-features.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-features.d.ts.map b/vendor/package/dist/lib/twitter-client-features.d.ts.map deleted file mode 100644 index 5f10d86..0000000 --- a/vendor/package/dist/lib/twitter-client-features.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-features.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-features.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwC9D;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAelE;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASlE;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyC7D;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuClE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAY/D;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKhE;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE5D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6C5D;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAInE;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuCjE;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuChE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0C9D"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-features.js b/vendor/package/dist/lib/twitter-client-features.js deleted file mode 100644 index 6083861..0000000 --- a/vendor/package/dist/lib/twitter-client-features.js +++ /dev/null @@ -1,347 +0,0 @@ -import { applyFeatureOverrides } from './runtime-features.js'; -export function buildArticleFeatures() { - return applyFeatureOverrides('article', { - rweb_video_screen_enabled: true, - profile_label_improvements_pcf_label_in_post_enabled: true, - responsive_web_profile_redirect_enabled: true, - rweb_tipjar_consumption_enabled: true, - verified_phone_label_enabled: false, - creator_subscriptions_tweet_preview_api_enabled: true, - responsive_web_graphql_timeline_navigation_enabled: true, - responsive_web_graphql_exclude_directive_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - premium_content_api_read_enabled: false, - communities_web_enable_tweet_community_results_fetch: true, - c9s_tweet_anatomy_moderator_badge_enabled: true, - responsive_web_grok_analyze_button_fetch_trends_enabled: false, - responsive_web_grok_analyze_post_followups_enabled: false, - responsive_web_grok_annotations_enabled: false, - responsive_web_jetfuel_frame: true, - post_ctas_fetch_enabled: true, - responsive_web_grok_share_attachment_enabled: true, - articles_preview_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - tweet_awards_web_tipping_enabled: false, - responsive_web_grok_show_grok_translated_post: false, - responsive_web_grok_analysis_button_from_backend: true, - creator_subscriptions_quote_tweet_preview_enabled: false, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - responsive_web_grok_image_annotation_enabled: true, - responsive_web_grok_imagine_annotation_enabled: true, - responsive_web_grok_community_note_auto_translation_is_enabled: false, - responsive_web_enhance_cards_enabled: false, - }); -} -export function buildTweetDetailFeatures() { - return applyFeatureOverrides('tweetDetail', { - ...buildArticleFeatures(), - responsive_web_graphql_exclude_directive_enabled: true, - communities_web_enable_tweet_community_results_fetch: true, - responsive_web_twitter_article_plain_text_enabled: true, - responsive_web_twitter_article_seed_tweet_detail_enabled: true, - responsive_web_twitter_article_seed_tweet_summary_enabled: true, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - tweet_awards_web_tipping_enabled: false, - creator_subscriptions_quote_tweet_preview_enabled: false, - verified_phone_label_enabled: false, - }); -} -export function buildArticleFieldToggles() { - return { - withPayments: false, - withAuxiliaryUserLabels: false, - withArticleRichContentState: true, - withArticlePlainText: true, - withGrokAnalyze: false, - withDisallowedReplyControls: false, - }; -} -export function buildSearchFeatures() { - return applyFeatureOverrides('search', { - rweb_video_screen_enabled: true, - profile_label_improvements_pcf_label_in_post_enabled: true, - responsive_web_profile_redirect_enabled: true, - rweb_tipjar_consumption_enabled: true, - verified_phone_label_enabled: false, - creator_subscriptions_tweet_preview_api_enabled: true, - responsive_web_graphql_timeline_navigation_enabled: true, - responsive_web_graphql_exclude_directive_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - premium_content_api_read_enabled: false, - communities_web_enable_tweet_community_results_fetch: true, - c9s_tweet_anatomy_moderator_badge_enabled: true, - responsive_web_grok_analyze_button_fetch_trends_enabled: false, - responsive_web_grok_analyze_post_followups_enabled: false, - responsive_web_grok_annotations_enabled: false, - responsive_web_jetfuel_frame: true, - post_ctas_fetch_enabled: true, - responsive_web_grok_share_attachment_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - tweet_awards_web_tipping_enabled: false, - responsive_web_grok_show_grok_translated_post: false, - responsive_web_grok_analysis_button_from_backend: true, - creator_subscriptions_quote_tweet_preview_enabled: false, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - rweb_video_timestamps_enabled: true, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - responsive_web_grok_image_annotation_enabled: true, - responsive_web_grok_imagine_annotation_enabled: true, - responsive_web_grok_community_note_auto_translation_is_enabled: false, - articles_preview_enabled: true, - responsive_web_enhance_cards_enabled: false, - }); -} -export function buildTweetCreateFeatures() { - return applyFeatureOverrides('tweetCreate', { - rweb_video_screen_enabled: true, - creator_subscriptions_tweet_preview_api_enabled: true, - premium_content_api_read_enabled: false, - communities_web_enable_tweet_community_results_fetch: true, - c9s_tweet_anatomy_moderator_badge_enabled: true, - responsive_web_grok_analyze_button_fetch_trends_enabled: false, - responsive_web_grok_analyze_post_followups_enabled: false, - responsive_web_grok_annotations_enabled: false, - responsive_web_jetfuel_frame: true, - post_ctas_fetch_enabled: true, - responsive_web_grok_share_attachment_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - tweet_awards_web_tipping_enabled: false, - responsive_web_grok_show_grok_translated_post: false, - responsive_web_grok_analysis_button_from_backend: true, - creator_subscriptions_quote_tweet_preview_enabled: false, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - profile_label_improvements_pcf_label_in_post_enabled: true, - responsive_web_profile_redirect_enabled: false, - rweb_tipjar_consumption_enabled: true, - verified_phone_label_enabled: false, - articles_preview_enabled: true, - responsive_web_grok_community_note_auto_translation_is_enabled: false, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - responsive_web_grok_image_annotation_enabled: true, - responsive_web_grok_imagine_annotation_enabled: true, - responsive_web_graphql_timeline_navigation_enabled: true, - responsive_web_enhance_cards_enabled: false, - }); -} -export function buildTimelineFeatures() { - return applyFeatureOverrides('timeline', { - ...buildSearchFeatures(), - blue_business_profile_image_shape_enabled: true, - responsive_web_text_conversations_enabled: false, - tweetypie_unmention_optimization_enabled: true, - vibe_api_enabled: true, - responsive_web_twitter_blue_verified_badge_is_enabled: true, - interactive_text_enabled: true, - longform_notetweets_richtext_consumption_enabled: true, - responsive_web_media_download_video_enabled: false, - }); -} -export function buildBookmarksFeatures() { - return applyFeatureOverrides('bookmarks', { - ...buildTimelineFeatures(), - graphql_timeline_v2_bookmark_timeline: true, - }); -} -export function buildLikesFeatures() { - return applyFeatureOverrides('likes', buildTimelineFeatures()); -} -export function buildListsFeatures() { - return applyFeatureOverrides('lists', { - rweb_video_screen_enabled: true, - profile_label_improvements_pcf_label_in_post_enabled: true, - responsive_web_profile_redirect_enabled: true, - rweb_tipjar_consumption_enabled: true, - verified_phone_label_enabled: false, - creator_subscriptions_tweet_preview_api_enabled: true, - responsive_web_graphql_timeline_navigation_enabled: true, - responsive_web_graphql_exclude_directive_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - premium_content_api_read_enabled: false, - communities_web_enable_tweet_community_results_fetch: true, - c9s_tweet_anatomy_moderator_badge_enabled: true, - responsive_web_grok_analyze_button_fetch_trends_enabled: false, - responsive_web_grok_analyze_post_followups_enabled: false, - responsive_web_grok_annotations_enabled: false, - responsive_web_jetfuel_frame: true, - post_ctas_fetch_enabled: true, - responsive_web_grok_share_attachment_enabled: true, - articles_preview_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - tweet_awards_web_tipping_enabled: false, - responsive_web_grok_show_grok_translated_post: false, - responsive_web_grok_analysis_button_from_backend: true, - creator_subscriptions_quote_tweet_preview_enabled: false, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - responsive_web_grok_image_annotation_enabled: true, - responsive_web_grok_imagine_annotation_enabled: true, - responsive_web_grok_community_note_auto_translation_is_enabled: false, - responsive_web_enhance_cards_enabled: false, - blue_business_profile_image_shape_enabled: false, - responsive_web_text_conversations_enabled: false, - tweetypie_unmention_optimization_enabled: true, - vibe_api_enabled: false, - interactive_text_enabled: false, - }); -} -export function buildHomeTimelineFeatures() { - return applyFeatureOverrides('homeTimeline', { - ...buildTimelineFeatures(), - }); -} -export function buildUserTweetsFeatures() { - return applyFeatureOverrides('userTweets', { - rweb_video_screen_enabled: false, - profile_label_improvements_pcf_label_in_post_enabled: true, - responsive_web_profile_redirect_enabled: false, - rweb_tipjar_consumption_enabled: true, - verified_phone_label_enabled: false, - creator_subscriptions_tweet_preview_api_enabled: true, - responsive_web_graphql_timeline_navigation_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - premium_content_api_read_enabled: false, - communities_web_enable_tweet_community_results_fetch: true, - c9s_tweet_anatomy_moderator_badge_enabled: true, - responsive_web_grok_analyze_button_fetch_trends_enabled: false, - responsive_web_grok_analyze_post_followups_enabled: true, - responsive_web_jetfuel_frame: true, - post_ctas_fetch_enabled: true, - responsive_web_grok_share_attachment_enabled: true, - responsive_web_grok_annotations_enabled: false, - articles_preview_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - tweet_awards_web_tipping_enabled: false, - responsive_web_grok_show_grok_translated_post: true, - responsive_web_grok_analysis_button_from_backend: true, - creator_subscriptions_quote_tweet_preview_enabled: false, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - responsive_web_grok_image_annotation_enabled: true, - responsive_web_grok_imagine_annotation_enabled: true, - responsive_web_grok_community_note_auto_translation_is_enabled: false, - responsive_web_enhance_cards_enabled: false, - }); -} -export function buildFollowingFeatures() { - return applyFeatureOverrides('following', { - rweb_video_screen_enabled: true, - profile_label_improvements_pcf_label_in_post_enabled: false, - responsive_web_profile_redirect_enabled: true, - rweb_tipjar_consumption_enabled: true, - verified_phone_label_enabled: false, - creator_subscriptions_tweet_preview_api_enabled: true, - responsive_web_graphql_timeline_navigation_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - premium_content_api_read_enabled: true, - communities_web_enable_tweet_community_results_fetch: true, - c9s_tweet_anatomy_moderator_badge_enabled: true, - responsive_web_grok_analyze_button_fetch_trends_enabled: false, - responsive_web_grok_analyze_post_followups_enabled: false, - responsive_web_grok_annotations_enabled: false, - responsive_web_jetfuel_frame: false, - post_ctas_fetch_enabled: true, - responsive_web_grok_share_attachment_enabled: false, - articles_preview_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - tweet_awards_web_tipping_enabled: true, - responsive_web_grok_show_grok_translated_post: false, - responsive_web_grok_analysis_button_from_backend: false, - creator_subscriptions_quote_tweet_preview_enabled: false, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - responsive_web_grok_image_annotation_enabled: false, - responsive_web_grok_imagine_annotation_enabled: false, - responsive_web_grok_community_note_auto_translation_is_enabled: false, - responsive_web_enhance_cards_enabled: false, - }); -} -export function buildExploreFeatures() { - return applyFeatureOverrides('explore', { - rweb_video_screen_enabled: true, - profile_label_improvements_pcf_label_in_post_enabled: true, - responsive_web_profile_redirect_enabled: true, - rweb_tipjar_consumption_enabled: true, - verified_phone_label_enabled: false, - creator_subscriptions_tweet_preview_api_enabled: true, - responsive_web_graphql_timeline_navigation_enabled: true, - responsive_web_graphql_exclude_directive_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - premium_content_api_read_enabled: false, - communities_web_enable_tweet_community_results_fetch: true, - c9s_tweet_anatomy_moderator_badge_enabled: true, - responsive_web_grok_analyze_button_fetch_trends_enabled: true, - responsive_web_grok_analyze_post_followups_enabled: true, - responsive_web_grok_annotations_enabled: true, - responsive_web_jetfuel_frame: true, - responsive_web_grok_share_attachment_enabled: true, - articles_preview_enabled: true, - responsive_web_edit_tweet_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - tweet_awards_web_tipping_enabled: false, - responsive_web_grok_show_grok_translated_post: true, - responsive_web_grok_analysis_button_from_backend: true, - creator_subscriptions_quote_tweet_preview_enabled: false, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - longform_notetweets_rich_text_read_enabled: true, - longform_notetweets_inline_media_enabled: true, - responsive_web_grok_image_annotation_enabled: true, - responsive_web_grok_imagine_annotation_enabled: true, - responsive_web_grok_community_note_auto_translation_is_enabled: true, - responsive_web_enhance_cards_enabled: false, - // Additional features required for ExploreSidebar - post_ctas_fetch_enabled: true, - rweb_video_timestamps_enabled: true, - }); -} -//# sourceMappingURL=twitter-client-features.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-features.js.map b/vendor/package/dist/lib/twitter-client-features.js.map deleted file mode 100644 index 7b4f0f0..0000000 --- a/vendor/package/dist/lib/twitter-client-features.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-features.js","sourceRoot":"","sources":["../../src/lib/twitter-client-features.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-follow.d.ts b/vendor/package/dist/lib/twitter-client-follow.d.ts deleted file mode 100644 index cc4daed..0000000 --- a/vendor/package/dist/lib/twitter-client-follow.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { FollowMutationResult } from './twitter-client-types.js'; -export interface TwitterClientFollowMethods { - follow(userId: string): Promise; - unfollow(userId: string): Promise; -} -export declare function withFollow>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-follow.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-follow.d.ts.map b/vendor/package/dist/lib/twitter-client-follow.d.ts.map deleted file mode 100644 index 3c69c13..0000000 --- a/vendor/package/dist/lib/twitter-client-follow.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-follow.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-follow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE9F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACzD;AAED,wBAAgB,UAAU,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC7E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,0BAA0B,CAAC,CA8N1C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-follow.js b/vendor/package/dist/lib/twitter-client-follow.js deleted file mode 100644 index a2e1196..0000000 --- a/vendor/package/dist/lib/twitter-client-follow.js +++ /dev/null @@ -1,178 +0,0 @@ -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -export function withFollow(Base) { - class TwitterClientFollow extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - /** - * Follow a user by their user ID - */ - async follow(userId) { - await this.ensureClientUserId(); - // Try REST API first (more reliable for follow/unfollow) - const restResult = await this.followViaRest(userId, 'create'); - if (restResult.success) { - return restResult; - } - // Fallback to GraphQL - return this.followViaGraphQL(userId, true); - } - /** - * Unfollow a user by their user ID - */ - async unfollow(userId) { - await this.ensureClientUserId(); - // Try REST API first (more reliable for follow/unfollow) - const restResult = await this.followViaRest(userId, 'destroy'); - if (restResult.success) { - return restResult; - } - // Fallback to GraphQL - return this.followViaGraphQL(userId, false); - } - async followViaRest(userId, action) { - const urls = [ - `https://x.com/i/api/1.1/friendships/${action}.json`, - `https://api.twitter.com/1.1/friendships/${action}.json`, - ]; - const params = new URLSearchParams({ - user_id: userId, - skip_status: 'true', - }); - let lastError; - for (const url of urls) { - try { - const response = await this.fetchWithTimeout(url, { - method: 'POST', - headers: { - ...this.getBaseHeaders(), - 'content-type': 'application/x-www-form-urlencoded', - }, - body: params.toString(), - }); - if (!response.ok) { - const text = await response.text(); - // Parse error response - try { - const errorData = JSON.parse(text); - if (errorData.errors && errorData.errors.length > 0) { - const error = errorData.errors[0]; - // Code 160: Already following / already not following - if (error.code === 160) { - return { success: true }; - } - // Code 162: Blocked from following - if (error.code === 162) { - return { success: false, error: 'You have been blocked from following this account' }; - } - // Code 108: Cannot find specified user - if (error.code === 108) { - return { success: false, error: 'User not found' }; - } - lastError = `${error.message} (code ${error.code})`; - continue; - } - } - catch { - // Not JSON, continue with generic error - } - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - lastError = data.errors.map((e) => e.message).join(', '); - continue; - } - // Success - user data returned - if (data.id_str || data.screen_name) { - return { - success: true, - userId: data.id_str, - username: data.screen_name, - }; - } - return { success: true }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? `Unknown error during ${action}` }; - } - async followViaGraphQL(userId, follow) { - const operationName = follow ? 'CreateFriendship' : 'DestroyFriendship'; - const variables = { - user_id: userId, - }; - const tryOnce = async () => { - let lastError; - let had404 = false; - const queryIds = await this.getFollowQueryIds(follow); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/${operationName}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'POST', - headers: this.getHeaders(), - body: JSON.stringify({ variables, queryId }), - }); - if (response.status === 404) { - had404 = true; - lastError = 'HTTP 404'; - continue; - } - if (!response.ok) { - const text = await response.text(); - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - lastError = data.errors.map((e) => e.message).join(', '); - continue; - } - const result = data.data?.user?.result; - return { - success: true, - userId: result?.rest_id, - username: result?.legacy?.screen_name, - had404, - }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { - success: false, - error: lastError ?? `Unknown error during ${operationName}`, - had404, - }; - }; - const firstAttempt = await tryOnce(); - if (firstAttempt.success) { - return { success: true, userId: firstAttempt.userId, username: firstAttempt.username }; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await tryOnce(); - if (secondAttempt.success) { - return { success: true, userId: secondAttempt.userId, username: secondAttempt.username }; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - } - async getFollowQueryIds(follow) { - const primary = await this.getQueryId(follow ? 'CreateFriendship' : 'DestroyFriendship'); - const fallbacks = follow - ? ['8h9JVdV8dlSyqyRDJEPCsA', 'OPwKc1HXnBT_bWXfAlo-9g'] - : ['ppXWuagMNXgvzx6WoXBW0Q', '8h9JVdV8dlSyqyRDJEPCsA']; - return Array.from(new Set([primary, ...fallbacks])); - } - } - return TwitterClientFollow; -} -//# sourceMappingURL=twitter-client-follow.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-follow.js.map b/vendor/package/dist/lib/twitter-client-follow.js.map deleted file mode 100644 index 462ad86..0000000 --- a/vendor/package/dist/lib/twitter-client-follow.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-follow.js","sourceRoot":"","sources":["../../src/lib/twitter-client-follow.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-home.d.ts b/vendor/package/dist/lib/twitter-client-home.d.ts deleted file mode 100644 index ad3baf5..0000000 --- a/vendor/package/dist/lib/twitter-client-home.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { SearchResult } from './twitter-client-types.js'; -/** Options for home timeline fetch methods */ -export interface HomeTimelineFetchOptions { - /** Include raw GraphQL response in `_raw` field */ - includeRaw?: boolean; -} -export interface TwitterClientHomeMethods { - getHomeTimeline(count?: number, options?: HomeTimelineFetchOptions): Promise; - getHomeLatestTimeline(count?: number, options?: HomeTimelineFetchOptions): Promise; -} -export declare function withHome>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-home.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-home.d.ts.map b/vendor/package/dist/lib/twitter-client-home.d.ts.map deleted file mode 100644 index 176c006..0000000 --- a/vendor/package/dist/lib/twitter-client-home.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-home.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-home.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAsB,YAAY,EAAa,MAAM,2BAA2B,CAAC;AAS7F,8CAA8C;AAC9C,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3F,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAClG;AAED,wBAAgB,QAAQ,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC3E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,CA+KxC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-home.js b/vendor/package/dist/lib/twitter-client-home.js deleted file mode 100644 index 69d71cd..0000000 --- a/vendor/package/dist/lib/twitter-client-home.js +++ /dev/null @@ -1,138 +0,0 @@ -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -import { buildHomeTimelineFeatures } from './twitter-client-features.js'; -import { extractCursorFromInstructions, parseTweetsFromInstructions } from './twitter-client-utils.js'; -const QUERY_UNSPECIFIED_REGEX = /query:\s*unspecified/i; -function isQueryIdMismatch(errors) { - return errors.some((error) => QUERY_UNSPECIFIED_REGEX.test(error.message ?? '')); -} -export function withHome(Base) { - class TwitterClientHome extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async getHomeTimelineQueryIds() { - const primary = await this.getQueryId('HomeTimeline'); - return Array.from(new Set([primary, 'edseUwk9sP5Phz__9TIRnA'])); - } - async getHomeLatestTimelineQueryIds() { - const primary = await this.getQueryId('HomeLatestTimeline'); - return Array.from(new Set([primary, 'iOEZpOdfekFsxSlPQCQtPg'])); - } - /** - * Get the authenticated user's "For You" home timeline - */ - async getHomeTimeline(count = 20, options = {}) { - return this.fetchHomeTimeline('HomeTimeline', count, options); - } - /** - * Get the authenticated user's "Following" (latest/chronological) home timeline - */ - async getHomeLatestTimeline(count = 20, options = {}) { - return this.fetchHomeTimeline('HomeLatestTimeline', count, options); - } - async fetchHomeTimeline(operation, count, options) { - const { includeRaw = false } = options; - const features = buildHomeTimelineFeatures(); - const pageSize = 20; - const seen = new Set(); - const tweets = []; - let cursor; - const fetchPage = async (pageCount, pageCursor) => { - let lastError; - let had404 = false; - const queryIds = operation === 'HomeTimeline' - ? await this.getHomeTimelineQueryIds() - : await this.getHomeLatestTimelineQueryIds(); - for (const queryId of queryIds) { - const variables = { - count: pageCount, - includePromotedContent: true, - latestControlAvailable: true, - requestContext: 'launch', - withCommunity: true, - ...(pageCursor ? { cursor: pageCursor } : {}), - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - const url = `${TWITTER_API_BASE}/${queryId}/${operation}?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - const errorMessage = data.errors.map((e) => e.message).join(', '); - return { - success: false, - error: errorMessage, - had404: had404 || isQueryIdMismatch(data.errors), - }; - } - const instructions = data.data?.home?.home_timeline_urt?.instructions; - const pageTweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const nextCursor = extractCursorFromInstructions(instructions); - return { success: true, tweets: pageTweets, cursor: nextCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching home timeline', had404 }; - }; - const fetchWithRefresh = async (pageCount, pageCursor) => { - const firstAttempt = await fetchPage(pageCount, pageCursor); - if (firstAttempt.success) { - return firstAttempt; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await fetchPage(pageCount, pageCursor); - if (secondAttempt.success) { - return secondAttempt; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - }; - while (tweets.length < count) { - const pageCount = Math.min(pageSize, count - tweets.length); - const page = await fetchWithRefresh(pageCount, cursor); - if (!page.success) { - return { success: false, error: page.error }; - } - let added = 0; - for (const tweet of page.tweets) { - if (seen.has(tweet.id)) { - continue; - } - seen.add(tweet.id); - tweets.push(tweet); - added += 1; - if (tweets.length >= count) { - break; - } - } - if (!page.cursor || page.cursor === cursor || page.tweets.length === 0 || added === 0) { - break; - } - cursor = page.cursor; - } - return { success: true, tweets }; - } - } - return TwitterClientHome; -} -//# sourceMappingURL=twitter-client-home.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-home.js.map b/vendor/package/dist/lib/twitter-client-home.js.map deleted file mode 100644 index 9d52b74..0000000 --- a/vendor/package/dist/lib/twitter-client-home.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-home.js","sourceRoot":"","sources":["../../src/lib/twitter-client-home.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-lists.d.ts b/vendor/package/dist/lib/twitter-client-lists.d.ts deleted file mode 100644 index 2ec192b..0000000 --- a/vendor/package/dist/lib/twitter-client-lists.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { TimelineFetchOptions, TimelinePaginationOptions } from './twitter-client-timelines.js'; -import type { ListsResult, SearchResult } from './twitter-client-types.js'; -export interface TwitterClientListMethods { - getOwnedLists(count?: number): Promise; - getListMemberships(count?: number): Promise; - getListTimeline(listId: string, count?: number, options?: TimelineFetchOptions): Promise; - getAllListTimeline(listId: string, options?: TimelinePaginationOptions): Promise; -} -export declare function withLists>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-lists.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-lists.d.ts.map b/vendor/package/dist/lib/twitter-client-lists.d.ts.map deleted file mode 100644 index 9aa2c31..0000000 --- a/vendor/package/dist/lib/twitter-client-lists.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-lists.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-lists.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AACrG,OAAO,KAAK,EAAsB,WAAW,EAAE,YAAY,EAA0B,MAAM,2BAA2B,CAAC;AAGvH,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACzD,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAChG;AAiFD,wBAAgB,SAAS,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC5E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAyYxC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-lists.js b/vendor/package/dist/lib/twitter-client-lists.js deleted file mode 100644 index d31934c..0000000 --- a/vendor/package/dist/lib/twitter-client-lists.js +++ /dev/null @@ -1,321 +0,0 @@ -// ABOUTME: Mixin for Twitter Lists GraphQL operations. -// ABOUTME: Provides methods to fetch user's owned lists, memberships, and list timelines. -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -import { buildListsFeatures } from './twitter-client-features.js'; -import { extractCursorFromInstructions, parseTweetsFromInstructions } from './twitter-client-utils.js'; -function parseList(listResult) { - if (!listResult.id_str || !listResult.name) { - return null; - } - const owner = listResult.user_results?.result; - return { - id: listResult.id_str, - name: listResult.name, - description: listResult.description, - memberCount: listResult.member_count, - subscriberCount: listResult.subscriber_count, - isPrivate: listResult.mode?.toLowerCase() === 'private', - createdAt: listResult.created_at, - owner: owner - ? { - id: owner.rest_id ?? '', - username: owner.legacy?.screen_name ?? '', - name: owner.legacy?.name ?? '', - } - : undefined, - }; -} -function parseListsFromInstructions(instructions) { - const lists = []; - if (!instructions) { - return lists; - } - for (const instruction of instructions) { - if (!instruction.entries) { - continue; - } - for (const entry of instruction.entries) { - const listResult = entry.content?.itemContent?.list; - if (listResult) { - const parsed = parseList(listResult); - if (parsed) { - lists.push(parsed); - } - } - } - } - return lists; -} -export function withLists(Base) { - class TwitterClientLists extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async getListOwnershipsQueryIds() { - const primary = await this.getQueryId('ListOwnerships'); - return Array.from(new Set([primary, 'wQcOSjSQ8NtgxIwvYl1lMg'])); - } - async getListMembershipsQueryIds() { - const primary = await this.getQueryId('ListMemberships'); - return Array.from(new Set([primary, 'BlEXXdARdSeL_0KyKHHvvg'])); - } - async getListTimelineQueryIds() { - const primary = await this.getQueryId('ListLatestTweetsTimeline'); - return Array.from(new Set([primary, '2TemLyqrMpTeAmysdbnVqw'])); - } - /** - * Get lists owned by the authenticated user - */ - async getOwnedLists(count = 100) { - const userResult = await this.getCurrentUser(); - if (!userResult.success || !userResult.user) { - return { success: false, error: userResult.error ?? 'Could not determine current user' }; - } - const variables = { - userId: userResult.user.id, - count, - isListMembershipShown: true, - isListMemberTargetUserId: userResult.user.id, - }; - const features = buildListsFeatures(); - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - const tryOnce = async () => { - let lastError; - let had404 = false; - const queryIds = await this.getListOwnershipsQueryIds(); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/ListOwnerships?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: data.errors.map((e) => e.message).join(', '), had404 }; - } - const instructions = data.data?.user?.result?.timeline?.timeline?.instructions; - const lists = parseListsFromInstructions(instructions); - return { success: true, lists, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching owned lists', had404 }; - }; - const firstAttempt = await tryOnce(); - if (firstAttempt.success) { - return { success: true, lists: firstAttempt.lists }; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await tryOnce(); - if (secondAttempt.success) { - return { success: true, lists: secondAttempt.lists }; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - } - /** - * Get lists the authenticated user is a member of - */ - async getListMemberships(count = 100) { - const userResult = await this.getCurrentUser(); - if (!userResult.success || !userResult.user) { - return { success: false, error: userResult.error ?? 'Could not determine current user' }; - } - const variables = { - userId: userResult.user.id, - count, - isListMembershipShown: true, - isListMemberTargetUserId: userResult.user.id, - }; - const features = buildListsFeatures(); - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - const tryOnce = async () => { - let lastError; - let had404 = false; - const queryIds = await this.getListMembershipsQueryIds(); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/ListMemberships?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: data.errors.map((e) => e.message).join(', '), had404 }; - } - const instructions = data.data?.user?.result?.timeline?.timeline?.instructions; - const lists = parseListsFromInstructions(instructions); - return { success: true, lists, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching list memberships', had404 }; - }; - const firstAttempt = await tryOnce(); - if (firstAttempt.success) { - return { success: true, lists: firstAttempt.lists }; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await tryOnce(); - if (secondAttempt.success) { - return { success: true, lists: secondAttempt.lists }; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - } - /** - * Get tweets from a list timeline - */ - async getListTimeline(listId, count = 20, options = {}) { - return this.getListTimelinePaged(listId, count, options); - } - /** - * Get all tweets from a list timeline (paginated) - */ - async getAllListTimeline(listId, options) { - return this.getListTimelinePaged(listId, Number.POSITIVE_INFINITY, options); - } - /** - * Internal paginated list timeline fetcher - */ - async getListTimelinePaged(listId, limit, options = {}) { - const features = buildListsFeatures(); - const pageSize = 20; - const seen = new Set(); - const tweets = []; - let cursor = options.cursor; - let nextCursor; - let pagesFetched = 0; - const { includeRaw = false, maxPages } = options; - const fetchPage = async (pageCount, pageCursor) => { - let lastError; - let had404 = false; - const queryIds = await this.getListTimelineQueryIds(); - const variables = { - listId, - count: pageCount, - ...(pageCursor ? { cursor: pageCursor } : {}), - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/ListLatestTweetsTimeline?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: data.errors.map((e) => e.message).join(', '), had404 }; - } - const instructions = data.data?.list?.tweets_timeline?.timeline?.instructions; - const pageTweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const nextCursor = extractCursorFromInstructions(instructions); - return { success: true, tweets: pageTweets, cursor: nextCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching list timeline', had404 }; - }; - const fetchWithRefresh = async (pageCount, pageCursor) => { - const firstAttempt = await fetchPage(pageCount, pageCursor); - if (firstAttempt.success) { - return firstAttempt; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await fetchPage(pageCount, pageCursor); - if (secondAttempt.success) { - return secondAttempt; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - }; - const unlimited = limit === Number.POSITIVE_INFINITY; - while (unlimited || tweets.length < limit) { - const pageCount = unlimited ? pageSize : Math.min(pageSize, limit - tweets.length); - const page = await fetchWithRefresh(pageCount, cursor); - if (!page.success) { - return { success: false, error: page.error }; - } - pagesFetched += 1; - let added = 0; - for (const tweet of page.tweets) { - if (seen.has(tweet.id)) { - continue; - } - seen.add(tweet.id); - tweets.push(tweet); - added += 1; - if (!unlimited && tweets.length >= limit) { - break; - } - } - const pageCursor = page.cursor; - if (!pageCursor || pageCursor === cursor || page.tweets.length === 0 || added === 0) { - nextCursor = undefined; - break; - } - if (maxPages && pagesFetched >= maxPages) { - nextCursor = pageCursor; - break; - } - cursor = pageCursor; - nextCursor = pageCursor; - } - return { success: true, tweets, nextCursor }; - } - } - return TwitterClientLists; -} -//# sourceMappingURL=twitter-client-lists.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-lists.js.map b/vendor/package/dist/lib/twitter-client-lists.js.map deleted file mode 100644 index fd4b5c3..0000000 --- a/vendor/package/dist/lib/twitter-client-lists.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-lists.js","sourceRoot":"","sources":["../../src/lib/twitter-client-lists.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-media.d.ts b/vendor/package/dist/lib/twitter-client-media.d.ts deleted file mode 100644 index 3e46fb6..0000000 --- a/vendor/package/dist/lib/twitter-client-media.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { UploadMediaResult } from './twitter-client-types.js'; -export interface TwitterClientMediaMethods { - uploadMedia(input: { - data: Uint8Array; - mimeType: string; - alt?: string; - }): Promise; -} -export declare function withMedia>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-media.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-media.d.ts.map b/vendor/package/dist/lib/twitter-client-media.d.ts.map deleted file mode 100644 index e4fa97e..0000000 --- a/vendor/package/dist/lib/twitter-client-media.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-media.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACtG;AAED,wBAAgB,SAAS,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC5E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAoKzC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-media.js b/vendor/package/dist/lib/twitter-client-media.js deleted file mode 100644 index 16a8439..0000000 --- a/vendor/package/dist/lib/twitter-client-media.js +++ /dev/null @@ -1,136 +0,0 @@ -import { TWITTER_MEDIA_METADATA_URL, TWITTER_UPLOAD_URL } from './twitter-client-constants.js'; -export function withMedia(Base) { - class TwitterClientMedia extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - mediaCategoryForMime(mimeType) { - if (mimeType.startsWith('image/')) { - if (mimeType === 'image/gif') { - return 'tweet_gif'; - } - return 'tweet_image'; - } - if (mimeType.startsWith('video/')) { - return 'tweet_video'; - } - return null; - } - async uploadMedia(input) { - const category = this.mediaCategoryForMime(input.mimeType); - if (!category) { - return { success: false, error: `Unsupported media type: ${input.mimeType}` }; - } - try { - const initParams = new URLSearchParams({ - command: 'INIT', - total_bytes: String(input.data.byteLength), - media_type: input.mimeType, - media_category: category, - }); - const initResp = await this.fetchWithTimeout(TWITTER_UPLOAD_URL, { - method: 'POST', - headers: this.getUploadHeaders(), - body: initParams, - }); - if (!initResp.ok) { - const text = await initResp.text(); - return { success: false, error: `HTTP ${initResp.status}: ${text.slice(0, 200)}` }; - } - const initBody = (await initResp.json()); - const mediaId = typeof initBody.media_id_string === 'string' - ? initBody.media_id_string - : initBody.media_id !== undefined - ? String(initBody.media_id) - : undefined; - if (!mediaId) { - return { success: false, error: 'Media upload INIT did not return media_id' }; - } - const chunkSize = 5 * 1024 * 1024; - let segmentIndex = 0; - for (let offset = 0; offset < input.data.byteLength; offset += chunkSize) { - const chunk = input.data.slice(offset, Math.min(input.data.byteLength, offset + chunkSize)); - const form = new FormData(); - form.set('command', 'APPEND'); - form.set('media_id', mediaId); - form.set('segment_index', String(segmentIndex)); - form.set('media', new Blob([chunk], { type: input.mimeType }), 'media'); - const appendResp = await this.fetchWithTimeout(TWITTER_UPLOAD_URL, { - method: 'POST', - headers: this.getUploadHeaders(), - body: form, - }); - if (!appendResp.ok) { - const text = await appendResp.text(); - return { success: false, error: `HTTP ${appendResp.status}: ${text.slice(0, 200)}` }; - } - segmentIndex += 1; - } - const finalizeParams = new URLSearchParams({ command: 'FINALIZE', media_id: mediaId }); - const finalizeResp = await this.fetchWithTimeout(TWITTER_UPLOAD_URL, { - method: 'POST', - headers: this.getUploadHeaders(), - body: finalizeParams, - }); - if (!finalizeResp.ok) { - const text = await finalizeResp.text(); - return { success: false, error: `HTTP ${finalizeResp.status}: ${text.slice(0, 200)}` }; - } - const finalizeBody = (await finalizeResp.json()); - const info = finalizeBody.processing_info; - if (info?.state && info.state !== 'succeeded') { - let attempts = 0; - while (attempts < 20) { - if (info.state === 'failed') { - const msg = info.error?.message || info.error?.name || 'Media processing failed'; - return { success: false, error: msg }; - } - const delaySecs = Number.isFinite(info.check_after_secs) ? Math.max(1, info.check_after_secs) : 2; - await this.sleep(delaySecs * 1000); - const statusUrl = `${TWITTER_UPLOAD_URL}?${new URLSearchParams({ - command: 'STATUS', - media_id: mediaId, - }).toString()}`; - const statusResp = await this.fetchWithTimeout(statusUrl, { - method: 'GET', - headers: this.getUploadHeaders(), - }); - if (!statusResp.ok) { - const text = await statusResp.text(); - return { success: false, error: `HTTP ${statusResp.status}: ${text.slice(0, 200)}` }; - } - const statusBody = (await statusResp.json()); - if (!statusBody.processing_info) { - break; - } - info.state = statusBody.processing_info.state; - info.check_after_secs = statusBody.processing_info.check_after_secs; - info.error = statusBody.processing_info.error; - if (info.state === 'succeeded') { - break; - } - attempts += 1; - } - } - if (input.alt && input.mimeType.startsWith('image/')) { - const metaResp = await this.fetchWithTimeout(TWITTER_MEDIA_METADATA_URL, { - method: 'POST', - headers: this.getJsonHeaders(), - body: JSON.stringify({ media_id: mediaId, alt_text: { text: input.alt } }), - }); - if (!metaResp.ok) { - const text = await metaResp.text(); - return { success: false, error: `HTTP ${metaResp.status}: ${text.slice(0, 200)}` }; - } - } - return { success: true, mediaId }; - } - catch (error) { - return { success: false, error: error instanceof Error ? error.message : String(error) }; - } - } - } - return TwitterClientMedia; -} -//# sourceMappingURL=twitter-client-media.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-media.js.map b/vendor/package/dist/lib/twitter-client-media.js.map deleted file mode 100644 index 4d2af4f..0000000 --- a/vendor/package/dist/lib/twitter-client-media.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-media.js","sourceRoot":"","sources":["../../src/lib/twitter-client-media.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-news.d.ts b/vendor/package/dist/lib/twitter-client-news.d.ts deleted file mode 100644 index a58e93b..0000000 --- a/vendor/package/dist/lib/twitter-client-news.d.ts +++ /dev/null @@ -1,47 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { TweetData } from './twitter-client-types.js'; -declare const TIMELINE_IDS: { - readonly forYou: "VGltZWxpbmU6DAC2CwABAAAAB2Zvcl95b3UAAA=="; - readonly trending: "VGltZWxpbmU6DAC2CwABAAAACHRyZW5kaW5nAAA="; - readonly news: "VGltZWxpbmU6DAC2CwABAAAABG5ld3MAAA=="; - readonly sports: "VGltZWxpbmU6DAC2CwABAAAABnNwb3J0cwAA"; - readonly entertainment: "VGltZWxpbmU6DAC2CwABAAAADWVudGVydGFpbm1lbnQAAA=="; -}; -export type ExploreTab = keyof typeof TIMELINE_IDS; -/** Options for news fetch methods */ -export interface NewsFetchOptions { - /** Include raw GraphQL response in `_raw` field */ - includeRaw?: boolean; - /** Also fetch related tweets for each news item */ - withTweets?: boolean; - /** Number of tweets to fetch per news item (default: 5) */ - tweetsPerItem?: number; - /** Filter to show only AI-curated news items */ - aiOnly?: boolean; - /** Fetch from specific tabs only (default: all tabs) */ - tabs?: ExploreTab[]; -} -export interface NewsItem { - id: string; - headline: string; - category?: string; - timeAgo?: string; - postCount?: number; - description?: string; - url?: string; - tweets?: TweetData[]; - _raw?: any; -} -export type NewsResult = { - success: true; - items: NewsItem[]; -} | { - success: false; - error: string; -}; -export interface TwitterClientNewsMethods { - getNews(count?: number, options?: NewsFetchOptions): Promise; -} -export declare function withNews>(Base: TBase): Mixin; -export {}; -//# sourceMappingURL=twitter-client-news.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-news.d.ts.map b/vendor/package/dist/lib/twitter-client-news.d.ts.map deleted file mode 100644 index 4da3eb6..0000000 --- a/vendor/package/dist/lib/twitter-client-news.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-news.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-news.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAMzE,QAAA,MAAM,YAAY;;;;;;CAMR,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,YAAY,CAAC;AAEnD,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IAErB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,MAAM,UAAU,GAClB;IACE,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB,GACD;IACE,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC3E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,CA+WxC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-news.js b/vendor/package/dist/lib/twitter-client-news.js deleted file mode 100644 index a261d39..0000000 --- a/vendor/package/dist/lib/twitter-client-news.js +++ /dev/null @@ -1,283 +0,0 @@ -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -import { buildExploreFeatures } from './twitter-client-features.js'; -const POST_COUNT_REGEX = /[\d.]+[KMB]?\s*posts?/i; -const POST_COUNT_MATCH_REGEX = /([\d.]+)([KMB]?)\s*posts?/i; -// Timeline IDs for different Explore tabs -const TIMELINE_IDS = { - forYou: 'VGltZWxpbmU6DAC2CwABAAAAB2Zvcl95b3UAAA==', - trending: 'VGltZWxpbmU6DAC2CwABAAAACHRyZW5kaW5nAAA=', - news: 'VGltZWxpbmU6DAC2CwABAAAABG5ld3MAAA==', - sports: 'VGltZWxpbmU6DAC2CwABAAAABnNwb3J0cwAA', - entertainment: 'VGltZWxpbmU6DAC2CwABAAAADWVudGVydGFpbm1lbnQAAA==', -}; -export function withNews(Base) { - class TwitterClientNews extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - /** - * Fetch news and trending topics from Twitter's Explore page tabs - */ - async getNews(count = 10, options = {}) { - const { includeRaw = false, withTweets = false, tweetsPerItem = 5, aiOnly = false, tabs = ['forYou', 'news', 'sports', 'entertainment'], } = options; - const debug = process.env.BIRD_DEBUG === '1'; - if (debug) { - console.error(`[getNews] Fetching from tabs: ${tabs.join(', ')}`); - } - const allItems = []; - const seenHeadlines = new Set(); - // Fetch from each tab - for (const tab of tabs) { - const timelineId = TIMELINE_IDS[tab]; - if (!timelineId) { - continue; - } - try { - const tabItems = await this.fetchTimelineTab(tab, timelineId, count, aiOnly, includeRaw); - // Deduplicate across tabs - for (const item of tabItems) { - if (!seenHeadlines.has(item.headline)) { - seenHeadlines.add(item.headline); - allItems.push(item); - } - } - if (debug) { - console.error(`[getNews] Tab ${tab}: found ${tabItems.length} items, total unique: ${allItems.length}`); - } - // Stop early if we have enough - if (allItems.length >= count) { - break; - } - } - catch (error) { - if (debug) { - console.error(`[getNews] Error fetching tab ${tab}:`, error); - } - // Continue with other tabs - } - } - if (allItems.length === 0) { - return { success: false, error: 'No news items found' }; - } - // Limit to requested count - const items = allItems.slice(0, count); - if (withTweets) { - await this.enrichWithTweets(items, tweetsPerItem, includeRaw); - } - return { success: true, items }; - } - /** - * Fetch a specific timeline tab using GenericTimelineById - */ - async fetchTimelineTab(tabName, timelineId, maxCount, aiOnly, includeRaw) { - const queryId = await this.getQueryId('GenericTimelineById'); - const features = buildExploreFeatures(); - const variables = { - timelineId: timelineId, - count: maxCount * 2, // Fetch more to account for filtering - includePromotedContent: false, - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - const url = `${TWITTER_API_BASE}/${queryId}/GenericTimelineById?${params.toString()}`; - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (!response.ok) { - const text = await response.text(); - throw new Error(`HTTP ${response.status}: ${text.slice(0, 200)}`); - } - const data = (await response.json()); - // Debug: save response if BIRD_DEBUG_JSON is set - if (process.env.BIRD_DEBUG_JSON) { - const fs = await import('node:fs/promises'); - const debugPath = process.env.BIRD_DEBUG_JSON.replace('.json', `-${tabName}.json`); - await fs.writeFile(debugPath, JSON.stringify(data, null, 2)).catch(() => { }); - } - if (data.errors && data.errors.length > 0) { - throw new Error(data.errors.map((e) => e.message).join('; ')); - } - // Parse timeline response - return this.parseTimelineTabItems(data, tabName, maxCount, aiOnly, includeRaw); - } - /** - * Parse items from a GenericTimelineById response - */ - parseTimelineTabItems( - // biome-ignore lint/suspicious/noExplicitAny: API response structure is complex - data, source, maxCount, aiOnly, includeRaw) { - const items = []; - const seenHeadlines = new Set(); - // Navigate to timeline instructions - const timeline = data?.data?.timeline?.timeline; - if (!timeline) { - return []; - } - const instructions = timeline.instructions || []; - for (const instruction of instructions) { - const entries = instruction.entries ?? (instruction.entry ? [instruction.entry] : []); - if (!entries || entries.length === 0) { - continue; - } - for (const entry of entries) { - if (items.length >= maxCount) { - break; - } - const content = entry.content; - if (!content) { - continue; - } - // Handle TimelineTimelineItem (single trend item) - if (content.itemContent) { - const newsItem = this.parseNewsItemFromContent(content.itemContent, entry.entryId, source, seenHeadlines, aiOnly, includeRaw); - if (newsItem) { - items.push(newsItem); - } - } - // Handle TimelineTimelineModule (multiple items) - const itemsArray = content?.items || []; - for (const data of itemsArray) { - if (items.length >= maxCount) { - break; - } - // Structure can be data.itemContent OR data.item.itemContent - const itemContent = data?.itemContent || data?.item?.itemContent; - if (!itemContent) { - continue; - } - const newsItem = this.parseNewsItemFromContent(itemContent, entry.entryId, source, seenHeadlines, aiOnly, includeRaw); - if (newsItem) { - items.push(newsItem); - } - } - } - } - return items; - } - parseNewsItemFromContent( - // biome-ignore lint/suspicious/noExplicitAny: API response structure is complex - itemContent, entryId, source, seenHeadlines, aiOnly, includeRaw) { - const headline = itemContent.name || itemContent.title; - if (!headline) { - return null; - } - const trendMetadata = itemContent?.trend_metadata; - const trendUrl = itemContent.trend_url?.url || trendMetadata?.url?.url; - // Detect AI news by characteristics: - // 1. Full sentence headlines (contains spaces and is longer) - // 2. Has social_context with "News" category - // 3. Or explicitly marked as is_ai_trend - const socialContext = itemContent?.social_context?.text || ''; - const hasNewsCategory = socialContext.includes('News') || socialContext.includes('hours ago'); - const isFullSentence = headline.split(' ').length >= 5; // AI news are full sentences - const isExplicitlyAiTrend = itemContent.is_ai_trend === true; - const isAiNews = isExplicitlyAiTrend || (isFullSentence && hasNewsCategory); - // Filter AI trends if aiOnly is enabled - if (aiOnly && !isAiNews) { - return null; - } - if (seenHeadlines.has(headline)) { - return null; - } - seenHeadlines.add(headline); - let postCount; - let timeAgo; - let category = 'Trending'; - // Parse social context for metadata - const socialCtx = itemContent?.social_context; - if (socialCtx?.text) { - const socialContextText = socialCtx.text; - const parts = socialContextText.split('·').map((s) => s.trim()); - for (const part of parts) { - if (part.includes('ago')) { - timeAgo = part; - } - else if (part.match(POST_COUNT_REGEX)) { - const match = part.match(POST_COUNT_MATCH_REGEX); - if (match) { - let num = Number.parseFloat(match[1]); - const suffix = match[2]?.toUpperCase(); - if (suffix === 'K') { - num *= 1000; - } - else if (suffix === 'M') { - num *= 1_000_000; - } - else if (suffix === 'B') { - num *= 1_000_000_000; - } - postCount = Math.round(num); - } - } - else { - category = part; - } - } - } - // Parse trend metadata - if (trendMetadata?.meta_description) { - const metaDesc = trendMetadata.meta_description; - const postMatch = metaDesc.match(POST_COUNT_MATCH_REGEX); - if (postMatch) { - let num = Number.parseFloat(postMatch[1]); - const suffix = postMatch[2]?.toUpperCase(); - if (suffix === 'K') { - num *= 1000; - } - else if (suffix === 'M') { - num *= 1_000_000; - } - else if (suffix === 'B') { - num *= 1_000_000_000; - } - postCount = Math.round(num); - } - } - if (trendMetadata?.domain_context && (category === 'Trending' || category === 'News')) { - category = trendMetadata.domain_context; - } - const item = { - id: trendUrl ?? (entryId ? `${entryId}-${headline}` : `${source}-${headline}`), - headline, - category: isAiNews ? `AI · ${category}` : category, - timeAgo, - postCount, - description: itemContent.description, - url: trendUrl, - }; - if (includeRaw) { - item._raw = itemContent; - } - return item; - } - async enrichWithTweets(items, tweetsPerItem, includeRaw) { - const debug = process.env.BIRD_DEBUG === '1'; - for (const item of items) { - try { - const searchQuery = item.headline; - if (!searchQuery) { - continue; - } - // Use the search method if available (requires search mixin) - if ('search' in this && typeof this.search === 'function') { - const result = (await this.search(searchQuery, tweetsPerItem, { includeRaw })); - if (result.success && result.tweets) { - item.tweets = result.tweets; - } - } - } - catch { - if (debug) { - console.error('[getNews] Failed to enrich item with tweets:', item.headline); - } - } - } - } - } - return TwitterClientNews; -} -//# sourceMappingURL=twitter-client-news.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-news.js.map b/vendor/package/dist/lib/twitter-client-news.js.map deleted file mode 100644 index cd24e72..0000000 --- a/vendor/package/dist/lib/twitter-client-news.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-news.js","sourceRoot":"","sources":["../../src/lib/twitter-client-news.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-posting.d.ts b/vendor/package/dist/lib/twitter-client-posting.d.ts deleted file mode 100644 index 2260866..0000000 --- a/vendor/package/dist/lib/twitter-client-posting.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { TweetResult } from './twitter-client-types.js'; -export interface TwitterClientPostingMethods { - tweet(text: string, mediaIds?: string[]): Promise; - reply(text: string, replyToTweetId: string, mediaIds?: string[]): Promise; -} -export declare function withPosting>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-posting.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-posting.d.ts.map b/vendor/package/dist/lib/twitter-client-posting.d.ts.map deleted file mode 100644 index 9fac1c2..0000000 --- a/vendor/package/dist/lib/twitter-client-posting.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-posting.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-posting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAuB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAElF,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACxF;AAED,wBAAgB,WAAW,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC9E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAkR3C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-posting.js b/vendor/package/dist/lib/twitter-client-posting.js deleted file mode 100644 index bc6012e..0000000 --- a/vendor/package/dist/lib/twitter-client-posting.js +++ /dev/null @@ -1,218 +0,0 @@ -import { TWITTER_API_BASE, TWITTER_GRAPHQL_POST_URL, TWITTER_STATUS_UPDATE_URL } from './twitter-client-constants.js'; -import { buildTweetCreateFeatures } from './twitter-client-features.js'; -export function withPosting(Base) { - class TwitterClientPosting extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - /** - * Post a new tweet - */ - async tweet(text, mediaIds) { - const variables = { - tweet_text: text, - dark_request: false, - media: { - media_entities: (mediaIds ?? []).map((id) => ({ media_id: id, tagged_users: [] })), - possibly_sensitive: false, - }, - semantic_annotation_ids: [], - }; - const features = buildTweetCreateFeatures(); - return this.createTweet(variables, features); - } - /** - * Reply to an existing tweet - */ - async reply(text, replyToTweetId, mediaIds) { - const variables = { - tweet_text: text, - reply: { - in_reply_to_tweet_id: replyToTweetId, - exclude_reply_user_ids: [], - }, - dark_request: false, - media: { - media_entities: (mediaIds ?? []).map((id) => ({ media_id: id, tagged_users: [] })), - possibly_sensitive: false, - }, - semantic_annotation_ids: [], - }; - const features = buildTweetCreateFeatures(); - return this.createTweet(variables, features); - } - async createTweet(variables, features) { - await this.ensureClientUserId(); - let queryId = await this.getQueryId('CreateTweet'); - let urlWithOperation = `${TWITTER_API_BASE}/${queryId}/CreateTweet`; - const buildBody = () => JSON.stringify({ variables, features, queryId }); - let body = buildBody(); - try { - const headers = { ...this.getHeaders(), referer: 'https://x.com/compose/post' }; - let response = await this.fetchWithTimeout(urlWithOperation, { - method: 'POST', - headers, - body, - }); - // Twitter increasingly prefers POST to /i/api/graphql with queryId in the payload. - // If the operation URL 404s, retry the generic endpoint. - if (response.status === 404) { - await this.refreshQueryIds(); - queryId = await this.getQueryId('CreateTweet'); - urlWithOperation = `${TWITTER_API_BASE}/${queryId}/CreateTweet`; - body = buildBody(); - response = await this.fetchWithTimeout(urlWithOperation, { - method: 'POST', - headers: { ...this.getHeaders(), referer: 'https://x.com/compose/post' }, - body, - }); - if (response.status === 404) { - const retry = await this.fetchWithTimeout(TWITTER_GRAPHQL_POST_URL, { - method: 'POST', - headers: { ...this.getHeaders(), referer: 'https://x.com/compose/post' }, - body, - }); - if (!retry.ok) { - const text = await retry.text(); - return { success: false, error: `HTTP ${retry.status}: ${text.slice(0, 200)}` }; - } - const data = (await retry.json()); - if (data.errors && data.errors.length > 0) { - const fallback = await this.tryStatusUpdateFallback(data.errors, variables); - if (fallback) { - return fallback; - } - return { success: false, error: this.formatErrors(data.errors) }; - } - const tweetId = data.data?.create_tweet?.tweet_results?.result?.rest_id; - if (tweetId) { - return { success: true, tweetId }; - } - return { success: false, error: 'Tweet created but no ID returned' }; - } - } - if (!response.ok) { - const text = await response.text(); - return { - success: false, - error: `HTTP ${response.status}: ${text.slice(0, 200)}`, - }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - const fallback = await this.tryStatusUpdateFallback(data.errors, variables); - if (fallback) { - return fallback; - } - return { - success: false, - error: this.formatErrors(data.errors), - }; - } - const tweetId = data.data?.create_tweet?.tweet_results?.result?.rest_id; - if (tweetId) { - return { - success: true, - tweetId, - }; - } - return { - success: false, - error: 'Tweet created but no ID returned', - }; - } - catch (error) { - return { - success: false, - error: error instanceof Error ? error.message : String(error), - }; - } - } - formatErrors(errors) { - return errors - .map((error) => (typeof error.code === 'number' ? `${error.message} (${error.code})` : error.message)) - .join(', '); - } - statusUpdateInputFromCreateTweetVariables(variables) { - const text = typeof variables.tweet_text === 'string' ? variables.tweet_text : null; - if (!text) { - return null; - } - const reply = variables.reply; - const inReplyToTweetId = reply && - typeof reply === 'object' && - typeof reply.in_reply_to_tweet_id === 'string' - ? reply.in_reply_to_tweet_id - : undefined; - const media = variables.media; - const mediaEntities = media && typeof media === 'object' ? media.media_entities : undefined; - const mediaIds = Array.isArray(mediaEntities) - ? mediaEntities - .map((entity) => entity && typeof entity === 'object' && 'media_id' in entity - ? entity.media_id - : undefined) - .filter((value) => typeof value === 'string' || typeof value === 'number') - .map((value) => String(value)) - : undefined; - return { text, inReplyToTweetId, mediaIds: mediaIds && mediaIds.length > 0 ? mediaIds : undefined }; - } - async postStatusUpdate(input) { - const params = new URLSearchParams(); - params.set('status', input.text); - if (input.inReplyToTweetId) { - params.set('in_reply_to_status_id', input.inReplyToTweetId); - params.set('auto_populate_reply_metadata', 'true'); - } - if (input.mediaIds && input.mediaIds.length > 0) { - params.set('media_ids', input.mediaIds.join(',')); - } - try { - const response = await this.fetchWithTimeout(TWITTER_STATUS_UPDATE_URL, { - method: 'POST', - headers: { - ...this.getBaseHeaders(), - 'content-type': 'application/x-www-form-urlencoded', - referer: 'https://x.com/compose/post', - }, - body: params.toString(), - }); - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}` }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: this.formatErrors(data.errors) }; - } - const tweetId = typeof data.id_str === 'string' ? data.id_str : data.id !== undefined ? String(data.id) : undefined; - if (tweetId) { - return { success: true, tweetId }; - } - return { success: false, error: 'Tweet created but no ID returned' }; - } - catch (error) { - return { success: false, error: error instanceof Error ? error.message : String(error) }; - } - } - async tryStatusUpdateFallback(errors, variables) { - if (!errors.some((error) => error.code === 226)) { - return null; - } - const input = this.statusUpdateInputFromCreateTweetVariables(variables); - if (!input) { - return null; - } - const fallback = await this.postStatusUpdate(input); - if (fallback.success) { - return fallback; - } - return { - success: false, - error: `${this.formatErrors(errors)} | fallback: ${fallback.error ?? 'Unknown error'}`, - }; - } - } - return TwitterClientPosting; -} -//# sourceMappingURL=twitter-client-posting.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-posting.js.map b/vendor/package/dist/lib/twitter-client-posting.js.map deleted file mode 100644 index 96ff677..0000000 --- a/vendor/package/dist/lib/twitter-client-posting.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-posting.js","sourceRoot":"","sources":["../../src/lib/twitter-client-posting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-search.d.ts b/vendor/package/dist/lib/twitter-client-search.d.ts deleted file mode 100644 index c6eddd3..0000000 --- a/vendor/package/dist/lib/twitter-client-search.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { SearchResult } from './twitter-client-types.js'; -/** Options for search methods */ -export interface SearchFetchOptions { - /** Include raw GraphQL response in `_raw` field */ - includeRaw?: boolean; -} -/** Options for paged search methods */ -export interface SearchPaginationOptions extends SearchFetchOptions { - maxPages?: number; - /** Starting cursor for pagination (resume from previous fetch) */ - cursor?: string; -} -export interface TwitterClientSearchMethods { - search(query: string, count?: number, options?: SearchFetchOptions): Promise; - getAllSearchResults(query: string, options?: SearchPaginationOptions): Promise; -} -export declare function withSearch>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-search.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-search.d.ts.map b/vendor/package/dist/lib/twitter-client-search.d.ts.map deleted file mode 100644 index 63f9216..0000000 --- a/vendor/package/dist/lib/twitter-client-search.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-search.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,2BAA2B,CAAC;AAKzE,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,uCAAuC;AACvC,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3F,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9F;AAuBD,wBAAgB,UAAU,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC7E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,0BAA0B,CAAC,CA0M1C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-search.js b/vendor/package/dist/lib/twitter-client-search.js deleted file mode 100644 index 64d1fdb..0000000 --- a/vendor/package/dist/lib/twitter-client-search.js +++ /dev/null @@ -1,157 +0,0 @@ -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -import { buildSearchFeatures } from './twitter-client-features.js'; -import { extractCursorFromInstructions, parseTweetsFromInstructions } from './twitter-client-utils.js'; -const RAW_QUERY_MISSING_REGEX = /must be defined/i; -function isQueryIdMismatch(payload) { - try { - const parsed = JSON.parse(payload); - return (parsed.errors?.some((error) => { - if (error?.extensions?.code === 'GRAPHQL_VALIDATION_FAILED') { - return true; - } - if (error?.path?.includes('rawQuery') && RAW_QUERY_MISSING_REGEX.test(error.message ?? '')) { - return true; - } - return false; - }) ?? false); - } - catch { - return false; - } -} -export function withSearch(Base) { - class TwitterClientSearch extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - /** - * Search for tweets matching a query - */ - async search(query, count = 20, options = {}) { - return this.searchPaged(query, count, options); - } - /** - * Get all search results (paged) - */ - async getAllSearchResults(query, options) { - return this.searchPaged(query, Number.POSITIVE_INFINITY, options); - } - async searchPaged(query, limit, options = {}) { - const features = buildSearchFeatures(); - const pageSize = 20; - const seen = new Set(); - const tweets = []; - let cursor = options.cursor; - let nextCursor; - let pagesFetched = 0; - const { includeRaw = false, maxPages } = options; - const fetchPage = async (pageCount, pageCursor) => { - let lastError; - let had404 = false; - const queryIds = await this.getSearchTimelineQueryIds(); - for (const queryId of queryIds) { - const variables = { - rawQuery: query, - count: pageCount, - querySource: 'typed_query', - product: 'Latest', - ...(pageCursor ? { cursor: pageCursor } : {}), - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - }); - const url = `${TWITTER_API_BASE}/${queryId}/SearchTimeline?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'POST', - headers: this.getHeaders(), - body: JSON.stringify({ features, queryId }), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - const shouldRefreshQueryIds = (response.status === 400 || response.status === 422) && isQueryIdMismatch(text); - return { - success: false, - error: `HTTP ${response.status}: ${text.slice(0, 200)}`, - had404: had404 || shouldRefreshQueryIds, - }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - const shouldRefreshQueryIds = data.errors.some((error) => error?.extensions?.code === 'GRAPHQL_VALIDATION_FAILED'); - return { - success: false, - error: data.errors.map((e) => e.message).join(', '), - had404: had404 || shouldRefreshQueryIds, - }; - } - const instructions = data.data?.search_by_raw_query?.search_timeline?.timeline?.instructions; - const pageTweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const nextCursor = extractCursorFromInstructions(instructions); - return { success: true, tweets: pageTweets, cursor: nextCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching search results', had404 }; - }; - const fetchWithRefresh = async (pageCount, pageCursor) => { - const firstAttempt = await fetchPage(pageCount, pageCursor); - if (firstAttempt.success) { - return firstAttempt; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await fetchPage(pageCount, pageCursor); - if (secondAttempt.success) { - return secondAttempt; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - }; - const unlimited = limit === Number.POSITIVE_INFINITY; - while (unlimited || tweets.length < limit) { - const pageCount = unlimited ? pageSize : Math.min(pageSize, limit - tweets.length); - const page = await fetchWithRefresh(pageCount, cursor); - if (!page.success) { - return { success: false, error: page.error }; - } - pagesFetched += 1; - let added = 0; - for (const tweet of page.tweets) { - if (seen.has(tweet.id)) { - continue; - } - seen.add(tweet.id); - tweets.push(tweet); - added += 1; - if (!unlimited && tweets.length >= limit) { - break; - } - } - const pageCursor = page.cursor; - if (!pageCursor || pageCursor === cursor || page.tweets.length === 0 || added === 0) { - nextCursor = undefined; - break; - } - if (maxPages && pagesFetched >= maxPages) { - nextCursor = pageCursor; - break; - } - cursor = pageCursor; - nextCursor = pageCursor; - } - return { success: true, tweets, nextCursor }; - } - } - return TwitterClientSearch; -} -//# sourceMappingURL=twitter-client-search.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-search.js.map b/vendor/package/dist/lib/twitter-client-search.js.map deleted file mode 100644 index 3deb1af..0000000 --- a/vendor/package/dist/lib/twitter-client-search.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-search.js","sourceRoot":"","sources":["../../src/lib/twitter-client-search.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-timelines.d.ts b/vendor/package/dist/lib/twitter-client-timelines.d.ts deleted file mode 100644 index 8aa5645..0000000 --- a/vendor/package/dist/lib/twitter-client-timelines.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { SearchResult } from './twitter-client-types.js'; -/** Options for timeline fetch methods */ -export interface TimelineFetchOptions { - /** Include raw GraphQL response in `_raw` field */ - includeRaw?: boolean; -} -/** Options for paged timeline fetch methods */ -export interface TimelinePaginationOptions extends TimelineFetchOptions { - maxPages?: number; - /** Starting cursor for pagination (resume from previous fetch) */ - cursor?: string; -} -export interface TwitterClientTimelineMethods { - getBookmarks(count?: number, options?: TimelineFetchOptions): Promise; - getAllBookmarks(options?: TimelinePaginationOptions): Promise; - getLikes(count?: number, options?: TimelineFetchOptions): Promise; - getAllLikes(options?: TimelinePaginationOptions): Promise; - getBookmarkFolderTimeline(folderId: string, count?: number, options?: TimelineFetchOptions): Promise; - getAllBookmarkFolderTimeline(folderId: string, options?: TimelinePaginationOptions): Promise; -} -export declare function withTimelines>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-timelines.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-timelines.d.ts.map b/vendor/package/dist/lib/twitter-client-timelines.d.ts.map deleted file mode 100644 index 917bd41..0000000 --- a/vendor/package/dist/lib/twitter-client-timelines.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-timelines.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-timelines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAsB,YAAY,EAAa,MAAM,2BAA2B,CAAC;AAG7F,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpF,eAAe,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChF,WAAW,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnH,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5G;AAED,wBAAgB,aAAa,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAChF,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,4BAA4B,CAAC,CA4lB5C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-timelines.js b/vendor/package/dist/lib/twitter-client-timelines.js deleted file mode 100644 index 46df8a7..0000000 --- a/vendor/package/dist/lib/twitter-client-timelines.js +++ /dev/null @@ -1,471 +0,0 @@ -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -import { buildBookmarksFeatures, buildLikesFeatures } from './twitter-client-features.js'; -import { extractCursorFromInstructions, parseTweetsFromInstructions } from './twitter-client-utils.js'; -export function withTimelines(Base) { - class TwitterClientTimelines extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - logBookmarksDebug(message, data) { - if (process.env.BIRD_DEBUG_BOOKMARKS !== '1') { - return; - } - if (data) { - console.error(`[bird][debug][bookmarks] ${message}`, JSON.stringify(data)); - } - else { - console.error(`[bird][debug][bookmarks] ${message}`); - } - } - async getBookmarksQueryIds() { - const primary = await this.getQueryId('Bookmarks'); - return Array.from(new Set([primary, 'RV1g3b8n_SGOHwkqKYSCFw', 'tmd4ifV8RHltzn8ymGg1aw'])); - } - async getBookmarkFolderQueryIds() { - const primary = await this.getQueryId('BookmarkFolderTimeline'); - return Array.from(new Set([primary, 'KJIQpsvxrTfRIlbaRIySHQ'])); - } - async getLikesQueryIds() { - const primary = await this.getQueryId('Likes'); - return Array.from(new Set([primary, 'JR2gceKucIKcVNB_9JkhsA'])); - } - /** - * Get the authenticated user's bookmarks - */ - async getBookmarks(count = 20, options = {}) { - return this.getBookmarksPaged(count, options); - } - async getAllBookmarks(options) { - return this.getBookmarksPaged(Number.POSITIVE_INFINITY, options); - } - /** - * Get the authenticated user's liked tweets - */ - async getLikes(count = 20, options = {}) { - return this.getLikesPaged(count, options); - } - async getAllLikes(options) { - return this.getLikesPaged(Number.POSITIVE_INFINITY, options); - } - async getLikesPaged(limit, options = {}) { - const userResult = await this.getCurrentUser(); - if (!userResult.success || !userResult.user) { - return { success: false, error: userResult.error ?? 'Could not determine current user' }; - } - const userId = userResult.user.id; - const features = buildLikesFeatures(); - const pageSize = 20; - const seen = new Set(); - const tweets = []; - let cursor = options.cursor; - let nextCursor; - let pagesFetched = 0; - const { includeRaw = false, maxPages } = options; - const fetchPage = async (pageCount, pageCursor) => { - let lastError; - let had404 = false; - const queryIds = await this.getLikesQueryIds(); - for (const queryId of queryIds) { - const variables = { - userId, - count: pageCount, - includePromotedContent: false, - withClientEventToken: false, - withBirdwatchNotes: false, - withVoice: true, - ...(pageCursor ? { cursor: pageCursor } : {}), - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - const url = `${TWITTER_API_BASE}/${queryId}/Likes?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - const instructions = data.data?.user?.result?.timeline?.timeline?.instructions; - if (data.errors && data.errors.length > 0) { - const message = data.errors.map((e) => e.message).join(', '); - if (!instructions) { - if (message.includes('Query: Unspecified')) { - lastError = message; - continue; - } - return { success: false, error: message, had404 }; - } - } - const pageTweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const extractedCursor = extractCursorFromInstructions(instructions); - return { success: true, tweets: pageTweets, cursor: extractedCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching likes', had404 }; - }; - const fetchWithRefresh = async (pageCount, pageCursor) => { - const firstAttempt = await fetchPage(pageCount, pageCursor); - if (firstAttempt.success) { - return firstAttempt; - } - const shouldRefresh = firstAttempt.had404 || - (typeof firstAttempt.error === 'string' && firstAttempt.error.includes('Query: Unspecified')); - if (shouldRefresh) { - await this.refreshQueryIds(); - const secondAttempt = await fetchPage(pageCount, pageCursor); - if (secondAttempt.success) { - return secondAttempt; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - }; - const unlimited = limit === Number.POSITIVE_INFINITY; - while (unlimited || tweets.length < limit) { - const pageCount = unlimited ? pageSize : Math.min(pageSize, limit - tweets.length); - const page = await fetchWithRefresh(pageCount, cursor); - if (!page.success) { - return { success: false, error: page.error }; - } - pagesFetched += 1; - let added = 0; - for (const tweet of page.tweets) { - if (seen.has(tweet.id)) { - continue; - } - seen.add(tweet.id); - tweets.push(tweet); - added += 1; - if (!unlimited && tweets.length >= limit) { - break; - } - } - const pageCursor = page.cursor; - if (!pageCursor || pageCursor === cursor || page.tweets.length === 0 || added === 0) { - nextCursor = undefined; - break; - } - if (maxPages && pagesFetched >= maxPages) { - nextCursor = pageCursor; - break; - } - cursor = pageCursor; - nextCursor = pageCursor; - } - return { success: true, tweets, nextCursor }; - } - /** - * Get the authenticated user's bookmark folder timeline - */ - async getBookmarkFolderTimeline(folderId, count = 20, options = {}) { - return this.getBookmarkFolderTimelinePaged(folderId, count, options); - } - async getAllBookmarkFolderTimeline(folderId, options) { - return this.getBookmarkFolderTimelinePaged(folderId, Number.POSITIVE_INFINITY, options); - } - async getBookmarksPaged(limit, options = {}) { - const features = buildBookmarksFeatures(); - const pageSize = 20; - const seen = new Set(); - const tweets = []; - let cursor = options.cursor; - let nextCursor; - let pagesFetched = 0; - const { includeRaw = false, maxPages } = options; - const fetchPage = async (pageCount, pageCursor) => { - let lastError; - let had404 = false; - const queryIds = await this.getBookmarksQueryIds(); - const variables = { - count: pageCount, - includePromotedContent: false, - withDownvotePerspective: false, - withReactionsMetadata: false, - withReactionsPerspective: false, - ...(pageCursor ? { cursor: pageCursor } : {}), - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/Bookmarks?${params.toString()}`; - try { - this.logBookmarksDebug('request bookmarks page', { - queryId, - pageCount, - hasCursor: Boolean(pageCursor), - }); - const response = await this.fetchWithRetry(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - this.logBookmarksDebug('bookmarks 404', { queryId }); - continue; - } - if (!response.ok) { - const text = await response.text(); - this.logBookmarksDebug('bookmarks non-200', { - queryId, - status: response.status, - body: text.slice(0, 200), - }); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - const instructions = data.data?.bookmark_timeline_v2?.timeline?.instructions; - const pageTweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const nextCursor = extractCursorFromInstructions(instructions); - if (data.errors && data.errors.length > 0) { - this.logBookmarksDebug('bookmarks graphql errors (non-fatal)', { queryId, errors: data.errors }); - if (!instructions) { - lastError = data.errors.map((e) => e.message).join(', '); - continue; - } - } - this.logBookmarksDebug('bookmarks page parsed', { - queryId, - tweets: pageTweets.length, - hasNextCursor: Boolean(nextCursor), - }); - return { success: true, tweets: pageTweets, cursor: nextCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - this.logBookmarksDebug('bookmarks request error', { queryId, error: lastError }); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching bookmarks', had404 }; - }; - const fetchWithRefresh = async (pageCount, pageCursor) => { - const firstAttempt = await fetchPage(pageCount, pageCursor); - if (firstAttempt.success) { - return firstAttempt; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await fetchPage(pageCount, pageCursor); - if (secondAttempt.success) { - return secondAttempt; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - }; - const unlimited = limit === Number.POSITIVE_INFINITY; - while (unlimited || tweets.length < limit) { - const pageCount = unlimited ? pageSize : Math.min(pageSize, limit - tweets.length); - const page = await fetchWithRefresh(pageCount, cursor); - if (!page.success) { - return { success: false, error: page.error }; - } - pagesFetched += 1; - let added = 0; - for (const tweet of page.tweets) { - if (seen.has(tweet.id)) { - continue; - } - seen.add(tweet.id); - tweets.push(tweet); - added += 1; - if (!unlimited && tweets.length >= limit) { - break; - } - } - const pageCursor = page.cursor; - if (!pageCursor || pageCursor === cursor || page.tweets.length === 0 || added === 0) { - nextCursor = undefined; - break; - } - if (maxPages && pagesFetched >= maxPages) { - nextCursor = pageCursor; - break; - } - cursor = pageCursor; - nextCursor = pageCursor; - } - return { success: true, tweets, nextCursor }; - } - async getBookmarkFolderTimelinePaged(folderId, limit, options = {}) { - const features = buildBookmarksFeatures(); - const pageSize = 20; - const seen = new Set(); - const tweets = []; - let cursor = options.cursor; - let nextCursor; - let pagesFetched = 0; - const { includeRaw = false, maxPages } = options; - const buildVariables = (pageCount, pageCursor, includeCount) => ({ - bookmark_collection_id: folderId, - includePromotedContent: true, - ...(includeCount ? { count: pageCount } : {}), - ...(pageCursor ? { cursor: pageCursor } : {}), - }); - const fetchPage = async (pageCount, pageCursor) => { - let lastError; - let had404 = false; - const queryIds = await this.getBookmarkFolderQueryIds(); - const tryOnce = async (variables) => { - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/BookmarkFolderTimeline?${params.toString()}`; - try { - this.logBookmarksDebug('request bookmark folder page', { - queryId, - pageCount, - hasCursor: Boolean(pageCursor), - includeCount: Object.hasOwn(variables, 'count'), - }); - const response = await this.fetchWithRetry(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - this.logBookmarksDebug('bookmark folder 404', { queryId }); - continue; - } - if (!response.ok) { - const text = await response.text(); - this.logBookmarksDebug('bookmark folder non-200', { - queryId, - status: response.status, - body: text.slice(0, 200), - }); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - const instructions = data.data?.bookmark_collection_timeline?.timeline?.instructions; - const pageTweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const nextCursor = extractCursorFromInstructions(instructions); - if (data.errors && data.errors.length > 0) { - this.logBookmarksDebug('bookmark folder graphql errors (non-fatal)', { queryId, errors: data.errors }); - if (!instructions) { - lastError = data.errors.map((e) => e.message).join(', '); - continue; - } - } - this.logBookmarksDebug('bookmark folder page parsed', { - queryId, - tweets: pageTweets.length, - hasNextCursor: Boolean(nextCursor), - }); - return { success: true, tweets: pageTweets, cursor: nextCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - this.logBookmarksDebug('bookmark folder request error', { queryId, error: lastError }); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching bookmark folder', had404 }; - }; - let attempt = await tryOnce(buildVariables(pageCount, pageCursor, true)); - if (!attempt.success && attempt.error?.includes('Variable "$count"')) { - attempt = await tryOnce(buildVariables(pageCount, pageCursor, false)); - } - if (!attempt.success && attempt.error?.includes('Variable "$cursor"') && pageCursor) { - return { - success: false, - error: 'Bookmark folder pagination rejected the cursor parameter', - had404: attempt.had404, - }; - } - return attempt; - }; - const fetchWithRefresh = async (pageCount, pageCursor) => { - const firstAttempt = await fetchPage(pageCount, pageCursor); - if (firstAttempt.success) { - return firstAttempt; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await fetchPage(pageCount, pageCursor); - if (secondAttempt.success) { - return secondAttempt; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - }; - const unlimited = limit === Number.POSITIVE_INFINITY; - while (unlimited || tweets.length < limit) { - const pageCount = unlimited ? pageSize : Math.min(pageSize, limit - tweets.length); - const page = await fetchWithRefresh(pageCount, cursor); - if (!page.success) { - return { success: false, error: page.error }; - } - pagesFetched += 1; - let added = 0; - for (const tweet of page.tweets) { - if (seen.has(tweet.id)) { - continue; - } - seen.add(tweet.id); - tweets.push(tweet); - added += 1; - if (!unlimited && tweets.length >= limit) { - break; - } - } - const pageCursor = page.cursor; - if (!pageCursor || pageCursor === cursor || page.tweets.length === 0 || added === 0) { - nextCursor = undefined; - break; - } - if (maxPages && pagesFetched >= maxPages) { - nextCursor = pageCursor; - break; - } - cursor = pageCursor; - nextCursor = pageCursor; - } - return { success: true, tweets, nextCursor }; - } - async fetchWithRetry(url, init) { - const maxRetries = 2; - const baseDelayMs = 500; - const retryable = new Set([429, 500, 502, 503, 504]); - for (let attempt = 0; attempt <= maxRetries; attempt += 1) { - const response = await this.fetchWithTimeout(url, init); - if (!retryable.has(response.status) || attempt === maxRetries) { - return response; - } - this.logBookmarksDebug('retrying bookmarks request', { - status: response.status, - attempt, - }); - // Retry-After supports delta-seconds only; HTTP-date falls back to backoff. - const retryAfter = response.headers?.get?.('retry-after'); - const retryAfterMs = retryAfter ? Number.parseInt(retryAfter, 10) * 1000 : Number.NaN; - const backoffMs = Number.isFinite(retryAfterMs) - ? retryAfterMs - : baseDelayMs * 2 ** attempt + Math.floor(Math.random() * baseDelayMs); - await new Promise((resolve) => setTimeout(resolve, backoffMs)); - } - return this.fetchWithTimeout(url, init); - } - } - return TwitterClientTimelines; -} -//# sourceMappingURL=twitter-client-timelines.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-timelines.js.map b/vendor/package/dist/lib/twitter-client-timelines.js.map deleted file mode 100644 index 453e464..0000000 --- a/vendor/package/dist/lib/twitter-client-timelines.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-timelines.js","sourceRoot":"","sources":["../../src/lib/twitter-client-timelines.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-tweet-detail.d.ts b/vendor/package/dist/lib/twitter-client-tweet-detail.d.ts deleted file mode 100644 index 1876012..0000000 --- a/vendor/package/dist/lib/twitter-client-tweet-detail.d.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { GetTweetResult, SearchResult } from './twitter-client-types.js'; -/** Options for tweet fetching methods */ -export interface TweetFetchOptions { - /** Include raw GraphQL response in `_raw` field */ - includeRaw?: boolean; -} -/** Options for paginated tweet detail fetch */ -export interface TweetDetailPaginationOptions extends TweetFetchOptions { - /** Maximum number of pages to fetch (default: unlimited when using pagination) */ - maxPages?: number; - /** Starting cursor for pagination (resume from previous fetch) */ - cursor?: string; - /** Delay in milliseconds between page fetches (default: 1000) */ - pageDelayMs?: number; -} -export interface TwitterClientTweetDetailMethods { - getTweet(tweetId: string, options?: TweetFetchOptions): Promise; - getReplies(tweetId: string, options?: TweetFetchOptions): Promise; - getThread(tweetId: string, options?: TweetFetchOptions): Promise; - getRepliesPaged(tweetId: string, options?: TweetDetailPaginationOptions): Promise; - getThreadPaged(tweetId: string, options?: TweetDetailPaginationOptions): Promise; -} -export declare function withTweetDetails>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-tweet-detail.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-tweet-detail.d.ts.map b/vendor/package/dist/lib/twitter-client-tweet-detail.d.ts.map deleted file mode 100644 index a968fed..0000000 --- a/vendor/package/dist/lib/twitter-client-tweet-detail.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-tweet-detail.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-tweet-detail.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAE,cAAc,EAAsB,YAAY,EAAa,MAAM,2BAA2B,CAAC;AAU7G,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,+CAA+C;AAC/C,MAAM,WAAW,4BAA6B,SAAQ,iBAAiB;IACrE,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAChF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChF,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,4BAA4B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAChG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EACnF,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,+BAA+B,CAAC,CA0a/C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-tweet-detail.js b/vendor/package/dist/lib/twitter-client-tweet-detail.js deleted file mode 100644 index e2f4160..0000000 --- a/vendor/package/dist/lib/twitter-client-tweet-detail.js +++ /dev/null @@ -1,295 +0,0 @@ -import { paginateCursor } from './paginate-cursor.js'; -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -import { buildArticleFeatures, buildArticleFieldToggles, buildTweetDetailFeatures } from './twitter-client-features.js'; -import { extractArticleText, extractCursorFromInstructions, findTweetInInstructions, firstText, mapTweetResult, parseTweetsFromInstructions, } from './twitter-client-utils.js'; -export function withTweetDetails(Base) { - class TwitterClientTweetDetails extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async fetchUserArticlePlainText(userId, tweetId) { - const variables = { - userId, - count: 20, - includePromotedContent: true, - withVoice: true, - withQuickPromoteEligibilityTweetFields: true, - withBirdwatchNotes: true, - withCommunity: true, - withSafetyModeUserFields: true, - withSuperFollowsUserFields: true, - withDownvotePerspective: false, - withReactionsMetadata: false, - withReactionsPerspective: false, - withSuperFollowsTweetFields: true, - withSuperFollowsReplyCount: false, - withClientEventToken: false, - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(buildArticleFeatures()), - fieldToggles: JSON.stringify(buildArticleFieldToggles()), - }); - const queryId = await this.getQueryId('UserArticlesTweets'); - const url = `${TWITTER_API_BASE}/${queryId}/UserArticlesTweets?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { method: 'GET', headers: this.getHeaders() }); - if (!response.ok) { - return {}; - } - const data = (await response.json()); - const instructions = data.data?.user?.result?.timeline?.timeline?.instructions ?? []; - for (const instruction of instructions) { - for (const entry of instruction.entries ?? []) { - const result = entry.content?.itemContent?.tweet_results?.result; - if (result?.rest_id !== tweetId) { - continue; - } - const articleResult = result.article?.article_results?.result; - const title = firstText(articleResult?.title, result.article?.title); - const plainText = firstText(articleResult?.plain_text, result.article?.plain_text); - return { title, plainText }; - } - } - } - catch { - return {}; - } - return {}; - } - async fetchTweetDetail(tweetId, cursor) { - const variables = { - focalTweetId: tweetId, - with_rux_injections: false, - rankingMode: 'Relevance', - includePromotedContent: true, - withCommunity: true, - withQuickPromoteEligibilityTweetFields: true, - withBirdwatchNotes: true, - withVoice: true, - ...(cursor ? { cursor } : {}), - }; - const features = { - ...buildTweetDetailFeatures(), - articles_preview_enabled: true, - articles_rest_api_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - creator_subscriptions_tweet_preview_api_enabled: true, - graphql_is_translatable_rweb_tweet_is_translatable_enabled: true, - view_counts_everywhere_api_enabled: true, - longform_notetweets_consumption_enabled: true, - responsive_web_twitter_article_tweet_consumption_enabled: true, - freedom_of_speech_not_reach_fetch_enabled: true, - standardized_nudges_misinfo: true, - tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true, - rweb_video_timestamps_enabled: true, - }; - const fieldToggles = { - ...buildArticleFieldToggles(), - withArticleRichContentState: true, - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - fieldToggles: JSON.stringify(fieldToggles), - }); - try { - const parseResponse = async (response) => { - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}` }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - // Twitter API sometimes returns partial errors (e.g., is_translatable failures) - // alongside valid tweet/thread data. Only fail if nothing useful is present. - const hasUsableData = Boolean(data.data?.tweetResult?.result || - data.data?.threaded_conversation_with_injections_v2?.instructions?.length); - if (!hasUsableData) { - return { success: false, error: data.errors.map((e) => e.message).join(', ') }; - } - } - return { success: true, data: data.data ?? {} }; - }; - let lastError; - let had404 = false; - const tryOnce = async () => { - const queryIds = await this.getTweetDetailQueryIds(); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/TweetDetail?${params.toString()}`; - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status !== 404) { - return await parseResponse(response); - } - had404 = true; - const postResponse = await this.fetchWithTimeout(`${TWITTER_API_BASE}/${queryId}/TweetDetail`, { - method: 'POST', - headers: this.getHeaders(), - body: JSON.stringify({ variables, features, queryId }), - }); - if (postResponse.status !== 404) { - return await parseResponse(postResponse); - } - lastError = 'HTTP 404'; - } - return { success: false, error: lastError ?? 'Unknown error fetching tweet detail' }; - }; - const firstAttempt = await tryOnce(); - if (firstAttempt.success) { - return firstAttempt; - } - if (had404) { - await this.refreshQueryIds(); - return await tryOnce(); - } - return firstAttempt; - } - catch (error) { - return { success: false, error: error instanceof Error ? error.message : String(error) }; - } - } - /** - * Get tweet details by ID - */ - async getTweet(tweetId, options = {}) { - const { includeRaw = false } = options; - const response = await this.fetchTweetDetail(tweetId); - if (!response.success) { - return response; - } - const tweetResult = response.data.tweetResult?.result ?? - findTweetInInstructions(response.data.threaded_conversation_with_injections_v2?.instructions, tweetId); - const mapped = mapTweetResult(tweetResult, { quoteDepth: this.quoteDepth, includeRaw }); - if (mapped) { - if (tweetResult?.article) { - const title = firstText(tweetResult.article.article_results?.result?.title, tweetResult.article.title); - const articleText = extractArticleText(tweetResult); - if (title && (!articleText || articleText.trim() === title.trim())) { - const userId = tweetResult.core?.user_results?.result?.rest_id; - if (userId) { - const fallback = await this.fetchUserArticlePlainText(userId, tweetId); - if (fallback.plainText) { - mapped.text = fallback.title ? `${fallback.title}\n\n${fallback.plainText}` : fallback.plainText; - } - } - } - } - return { success: true, tweet: mapped }; - } - return { success: false, error: 'Tweet not found in response' }; - } - /** - * Get replies to a tweet by ID - */ - async getReplies(tweetId, options = {}) { - const { includeRaw = false } = options; - const response = await this.fetchTweetDetail(tweetId); - if (!response.success) { - return response; - } - const instructions = response.data.threaded_conversation_with_injections_v2?.instructions; - const tweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const replies = tweets.filter((tweet) => tweet.inReplyToStatusId === tweetId); - return { success: true, tweets: replies }; - } - /** - * Get full conversation thread for a tweet ID - */ - async getThread(tweetId, options = {}) { - const { includeRaw = false } = options; - const response = await this.fetchTweetDetail(tweetId); - if (!response.success) { - return response; - } - const instructions = response.data.threaded_conversation_with_injections_v2?.instructions; - const tweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const target = tweets.find((t) => t.id === tweetId); - const rootId = target?.conversationId || tweetId; - const thread = tweets.filter((tweet) => tweet.conversationId === rootId); - thread.sort((a, b) => { - const aTime = a.createdAt ? Date.parse(a.createdAt) : 0; - const bTime = b.createdAt ? Date.parse(b.createdAt) : 0; - return aTime - bTime; - }); - return { success: true, tweets: thread }; - } - /** - * Get replies to a tweet with pagination support - */ - async getRepliesPaged(tweetId, options = {}) { - const { includeRaw = false, maxPages, pageDelayMs = 1000 } = options; - const result = await paginateCursor({ - cursor: options.cursor, - maxPages, - pageDelayMs, - sleep: async (ms) => this.sleep(ms), - getKey: (tweet) => tweet.id, - fetchPage: async (cursor) => { - const response = await this.fetchTweetDetail(tweetId, cursor); - if (!response.success) { - return response; - } - const instructions = response.data.threaded_conversation_with_injections_v2?.instructions; - const tweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const replies = tweets.filter((tweet) => tweet.inReplyToStatusId === tweetId); - const pageCursor = extractCursorFromInstructions(instructions); - return { success: true, items: replies, cursor: pageCursor }; - }, - }); - if (result.success) { - return { success: true, tweets: result.items, nextCursor: result.nextCursor }; - } - if (result.items) { - return { success: false, tweets: result.items, nextCursor: result.nextCursor, error: result.error }; - } - return { success: false, error: result.error }; - } - /** - * Get full conversation thread with pagination support - */ - async getThreadPaged(tweetId, options = {}) { - const { includeRaw = false, maxPages, pageDelayMs = 1000 } = options; - let rootId; - const result = await paginateCursor({ - cursor: options.cursor, - maxPages, - pageDelayMs, - sleep: async (ms) => this.sleep(ms), - getKey: (tweet) => tweet.id, - fetchPage: async (cursor) => { - const response = await this.fetchTweetDetail(tweetId, cursor); - if (!response.success) { - return response; - } - const instructions = response.data.threaded_conversation_with_injections_v2?.instructions; - const tweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - if (!rootId) { - const target = tweets.find((t) => t.id === tweetId); - rootId = target?.conversationId || tweetId; - } - const threadTweets = tweets.filter((tweet) => tweet.conversationId === rootId); - const pageCursor = extractCursorFromInstructions(instructions); - return { success: true, items: threadTweets, cursor: pageCursor }; - }, - }); - const sortedTweets = (result.items ?? []).slice().sort((a, b) => { - const aTime = a.createdAt ? Date.parse(a.createdAt) : 0; - const bTime = b.createdAt ? Date.parse(b.createdAt) : 0; - return aTime - bTime; - }); - if (result.success) { - return { success: true, tweets: sortedTweets, nextCursor: result.nextCursor }; - } - if (result.items) { - return { success: false, tweets: sortedTweets, nextCursor: result.nextCursor, error: result.error }; - } - return { success: false, error: result.error }; - } - } - return TwitterClientTweetDetails; -} -//# sourceMappingURL=twitter-client-tweet-detail.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-tweet-detail.js.map b/vendor/package/dist/lib/twitter-client-tweet-detail.js.map deleted file mode 100644 index 4e100b3..0000000 --- a/vendor/package/dist/lib/twitter-client-tweet-detail.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-tweet-detail.js","sourceRoot":"","sources":["../../src/lib/twitter-client-tweet-detail.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-types.d.ts b/vendor/package/dist/lib/twitter-client-types.d.ts deleted file mode 100644 index cfa7d10..0000000 --- a/vendor/package/dist/lib/twitter-client-types.d.ts +++ /dev/null @@ -1,407 +0,0 @@ -import type { TwitterCookies } from './cookies.js'; -export interface GraphqlMediaEntity { - id_str?: string; - media_url_https?: string; - type?: 'photo' | 'video' | 'animated_gif'; - url?: string; - expanded_url?: string; - sizes?: { - thumb?: { - w: number; - h: number; - resize: string; - }; - small?: { - w: number; - h: number; - resize: string; - }; - medium?: { - w: number; - h: number; - resize: string; - }; - large?: { - w: number; - h: number; - resize: string; - }; - }; - video_info?: { - duration_millis?: number; - variants?: Array<{ - bitrate?: number; - content_type?: string; - url?: string; - }>; - }; -} -export type GraphqlTweetResult = { - __typename?: string; - rest_id?: string; - legacy?: { - full_text?: string; - created_at?: string; - reply_count?: number; - retweet_count?: number; - favorite_count?: number; - conversation_id_str?: string; - in_reply_to_status_id_str?: string | null; - entities?: { - media?: GraphqlMediaEntity[]; - }; - extended_entities?: { - media?: GraphqlMediaEntity[]; - }; - }; - core?: { - user_results?: { - result?: { - rest_id?: string; - id?: string; - legacy?: { - screen_name?: string; - name?: string; - }; - core?: { - screen_name?: string; - name?: string; - }; - }; - }; - }; - note_tweet?: { - note_tweet_results?: { - result?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - content?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - }; - }; - }; - }; - article?: { - title?: string; - preview_text?: string; - article_results?: { - result?: { - title?: string; - preview_text?: string; - plain_text?: string; - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - body?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - }; - content?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - items?: Array<{ - text?: string; - content?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - }; - }>; - }; - sections?: Array<{ - items?: Array<{ - text?: string; - content?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - }; - }>; - }>; - /** Draft.js content state for rich article content */ - content_state?: { - blocks: Array<{ - key: string; - type: string; - text: string; - data?: Record; - entityRanges?: Array<{ - key: number; - offset: number; - length: number; - }>; - inlineStyleRanges?: Array<{ - offset: number; - length: number; - style: string; - }>; - }>; - entityMap?: Array<{ - key: string; - value: { - type: string; - mutability: string; - data: Record; - }; - }> | Record; - }>; - }; - }; - }; - plain_text?: string; - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - body?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - }; - content?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - items?: Array<{ - text?: string; - content?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - }; - }>; - }; - sections?: Array<{ - items?: Array<{ - text?: string; - content?: { - text?: string; - richtext?: { - text?: string; - }; - rich_text?: { - text?: string; - }; - }; - }>; - }>; - }; - tweet?: GraphqlTweetResult; - quoted_status_result?: { - result?: GraphqlTweetResult; - }; -}; -export type TweetResult = { - success: true; - tweetId: string; -} | { - success: false; - error: string; -}; -export type BookmarkMutationResult = { - success: true; -} | { - success: false; - error: string; -}; -export type FollowMutationResult = { - success: true; - userId?: string; - username?: string; -} | { - success: false; - error: string; -}; -export interface UploadMediaResult { - success: boolean; - mediaId?: string; - error?: string; -} -export interface TweetMedia { - type: 'photo' | 'video' | 'animated_gif'; - url: string; - previewUrl?: string; - width?: number; - height?: number; - videoUrl?: string; - durationMs?: number; -} -export interface TweetData { - id: string; - text: string; - author: { - username: string; - name: string; - }; - authorId?: string; - createdAt?: string; - replyCount?: number; - retweetCount?: number; - likeCount?: number; - conversationId?: string; - inReplyToStatusId?: string; - quotedTweet?: TweetData; - media?: TweetMedia[]; - article?: { - title: string; - previewText?: string; - }; - _raw?: GraphqlTweetResult; -} -export interface TweetWithMeta extends TweetData { - isThread: boolean; - threadPosition: 'root' | 'middle' | 'end' | 'standalone'; - hasSelfReplies: boolean; - threadRootId: string | null; -} -export interface GetTweetResult { - success: boolean; - tweet?: TweetData; - error?: string; -} -export type SearchResult = { - success: true; - tweets: TweetData[]; - /** Cursor for fetching the next page of results */ - nextCursor?: string; -} | { - success: false; - error: string; - tweets?: TweetData[]; - /** Cursor for fetching the next page of results */ - nextCursor?: string; -}; -export interface CurrentUserResult { - success: boolean; - user?: { - id: string; - username: string; - name: string; - }; - error?: string; -} -export interface TwitterUser { - id: string; - username: string; - name: string; - description?: string; - followersCount?: number; - followingCount?: number; - isBlueVerified?: boolean; - profileImageUrl?: string; - createdAt?: string; -} -export interface FollowingResult { - success: boolean; - users?: TwitterUser[]; - error?: string; - /** Cursor for fetching the next page of results */ - nextCursor?: string; -} -export interface AboutAccountProfile { - accountBasedIn?: string; - source?: string; - createdCountryAccurate?: boolean; - locationAccurate?: boolean; - learnMoreUrl?: string; -} -export interface AboutAccountResult { - success: boolean; - aboutProfile?: AboutAccountProfile; - error?: string; -} -export interface TwitterClientOptions { - cookies: TwitterCookies; - userAgent?: string; - timeoutMs?: number; - quoteDepth?: number; -} -export interface TwitterList { - id: string; - name: string; - description?: string; - memberCount?: number; - subscriberCount?: number; - isPrivate?: boolean; - createdAt?: string; - owner?: { - id: string; - username: string; - name: string; - }; -} -export interface ListsResult { - success: boolean; - lists?: TwitterList[]; - error?: string; -} -export interface CreateTweetResponse { - data?: { - create_tweet?: { - tweet_results?: { - result?: { - rest_id?: string; - legacy?: { - full_text?: string; - }; - }; - }; - }; - }; - errors?: Array<{ - message: string; - code?: number; - }>; -} -//# sourceMappingURL=twitter-client-types.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-types.d.ts.map b/vendor/package/dist/lib/twitter-client-types.d.ts.map deleted file mode 100644 index 05748c3..0000000 --- a/vendor/package/dist/lib/twitter-client-types.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-types.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-types.js b/vendor/package/dist/lib/twitter-client-types.js deleted file mode 100644 index 3277c71..0000000 --- a/vendor/package/dist/lib/twitter-client-types.js +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=twitter-client-types.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-types.js.map b/vendor/package/dist/lib/twitter-client-types.js.map deleted file mode 100644 index cc4bbcc..0000000 --- a/vendor/package/dist/lib/twitter-client-types.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-types.js","sourceRoot":"","sources":["../../src/lib/twitter-client-types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-lookup.d.ts b/vendor/package/dist/lib/twitter-client-user-lookup.d.ts deleted file mode 100644 index 0719e20..0000000 --- a/vendor/package/dist/lib/twitter-client-user-lookup.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { AboutAccountResult } from './twitter-client-types.js'; -/** Result of username to userId lookup */ -export interface UserLookupResult { - success: boolean; - userId?: string; - username?: string; - name?: string; - error?: string; -} -export interface TwitterClientUserLookupMethods { - getUserIdByUsername(username: string): Promise; - getUserAboutAccount(username: string): Promise; -} -export declare function withUserLookup>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-user-lookup.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-lookup.d.ts.map b/vendor/package/dist/lib/twitter-client-user-lookup.d.ts.map deleted file mode 100644 index b093894..0000000 --- a/vendor/package/dist/lib/twitter-client-user-lookup.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-user-lookup.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-user-lookup.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACpE;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EACjF,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAyS9C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-lookup.js b/vendor/package/dist/lib/twitter-client-user-lookup.js deleted file mode 100644 index 1701c19..0000000 --- a/vendor/package/dist/lib/twitter-client-user-lookup.js +++ /dev/null @@ -1,224 +0,0 @@ -import { normalizeHandle } from './normalize-handle.js'; -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -export function withUserLookup(Base) { - class TwitterClientUserLookup extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async getUserByScreenNameGraphQL(screenName) { - // UserByScreenName query IDs observed from web client - const queryIds = ['xc8f1g7BYqr6VTzTbvNlGw', 'qW5u-DAuXpMEG0zA1F7UGQ', 'sLVLhk0bGj3MVFEKTdax1w']; - const variables = { - screen_name: screenName, - withSafetyModeUserFields: true, - }; - const features = { - hidden_profile_subscriptions_enabled: true, - hidden_profile_likes_enabled: true, - rweb_tipjar_consumption_enabled: true, - responsive_web_graphql_exclude_directive_enabled: true, - verified_phone_label_enabled: false, - subscriptions_verification_info_is_identity_verified_enabled: true, - subscriptions_verification_info_verified_since_enabled: true, - highlights_tweets_tab_ui_enabled: true, - responsive_web_twitter_article_notes_tab_enabled: true, - subscriptions_feature_can_gift_premium: true, - creator_subscriptions_tweet_preview_api_enabled: true, - responsive_web_graphql_skip_user_profile_image_extensions_enabled: false, - responsive_web_graphql_timeline_navigation_enabled: true, - blue_business_profile_image_shape_enabled: true, - }; - const fieldToggles = { - withAuxiliaryUserLabels: false, - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - fieldToggles: JSON.stringify(fieldToggles), - }); - let lastError; - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/UserByScreenName?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (!response.ok) { - const text = await response.text(); - if (response.status === 404) { - // Try next query ID - lastError = `HTTP ${response.status}`; - continue; - } - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - const data = (await response.json()); - // Check for user not found - if (data.data?.user?.result?.__typename === 'UserUnavailable') { - return { success: false, error: `User @${screenName} not found or unavailable` }; - } - const userResult = data.data?.user?.result; - const userId = userResult?.rest_id; - const username = userResult?.legacy?.screen_name ?? userResult?.core?.screen_name; - const name = userResult?.legacy?.name ?? userResult?.core?.name; - if (userId && username) { - return { - success: true, - userId, - username, - name, - }; - } - if (data.errors && data.errors.length > 0) { - lastError = data.errors.map((e) => e.message).join(', '); - continue; - } - lastError = 'Could not parse user data from response'; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error looking up user' }; - } - /** - * Look up a user's ID by their username/handle. - * Uses GraphQL UserByScreenName first, then falls back to REST on transient failures. - */ - async getUserIdByUsername(username) { - const cleanUsername = normalizeHandle(username); - if (!cleanUsername) { - return { success: false, error: `Invalid username: ${username}` }; - } - const graphqlResult = await this.getUserByScreenNameGraphQL(cleanUsername); - if (graphqlResult.success) { - return graphqlResult; - } - // If GraphQL definitively says user is unavailable, don't retry with REST - if (graphqlResult.error?.includes('not found or unavailable')) { - return graphqlResult; - } - // Fallback to REST API for transient GraphQL errors - const urls = [ - `https://x.com/i/api/1.1/users/show.json?screen_name=${encodeURIComponent(cleanUsername)}`, - `https://api.twitter.com/1.1/users/show.json?screen_name=${encodeURIComponent(cleanUsername)}`, - ]; - let lastError = graphqlResult.error; - for (const url of urls) { - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (!response.ok) { - const text = await response.text(); - if (response.status === 404) { - return { success: false, error: `User @${cleanUsername} not found` }; - } - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - const data = (await response.json()); - const userId = data.id_str ?? (data.id ? String(data.id) : null); - if (!userId) { - lastError = 'Could not parse user ID from response'; - continue; - } - return { - success: true, - userId, - username: data.screen_name ?? cleanUsername, - name: data.name, - }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error looking up user' }; - } - async getAboutAccountQueryIds() { - const primary = await this.getQueryId('AboutAccountQuery'); - return Array.from(new Set([primary, 'zs_jFPFT78rBpXv9Z3U2YQ'])); - } - /** - * Get account origin and location information for a user. - * Returns data from Twitter's "About this account" feature. - */ - async getUserAboutAccount(username) { - const cleanUsername = normalizeHandle(username); - if (!cleanUsername) { - return { success: false, error: `Invalid username: ${username}` }; - } - const variables = { - screenName: cleanUsername, - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - }); - const tryOnce = async () => { - let lastError; - let had404 = false; - const queryIds = await this.getAboutAccountQueryIds(); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/AboutAccountQuery?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (!response.ok) { - const text = await response.text(); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - lastError = data.errors.map((e) => e.message).join(', '); - continue; - } - const aboutProfile = data.data?.user_result_by_screen_name?.result?.about_profile; - if (!aboutProfile) { - lastError = 'Missing about_profile in response'; - continue; - } - return { - success: true, - aboutProfile: { - accountBasedIn: aboutProfile.account_based_in, - source: aboutProfile.source, - createdCountryAccurate: aboutProfile.created_country_accurate, - locationAccurate: aboutProfile.location_accurate, - learnMoreUrl: aboutProfile.learn_more_url, - }, - had404, - }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { - success: false, - error: lastError ?? 'Unknown error fetching account details', - had404, - }; - }; - const { result } = await this.withRefreshedQueryIdsOn404(tryOnce); - if (result.success) { - return { success: true, aboutProfile: result.aboutProfile }; - } - return { success: false, error: result.error }; - } - } - return TwitterClientUserLookup; -} -//# sourceMappingURL=twitter-client-user-lookup.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-lookup.js.map b/vendor/package/dist/lib/twitter-client-user-lookup.js.map deleted file mode 100644 index cd56c3b..0000000 --- a/vendor/package/dist/lib/twitter-client-user-lookup.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-user-lookup.js","sourceRoot":"","sources":["../../src/lib/twitter-client-user-lookup.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-tweets.d.ts b/vendor/package/dist/lib/twitter-client-user-tweets.d.ts deleted file mode 100644 index a4feab2..0000000 --- a/vendor/package/dist/lib/twitter-client-user-tweets.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { SearchResult } from './twitter-client-types.js'; -/** Options for user tweets fetch methods */ -export interface UserTweetsFetchOptions { - /** Include raw GraphQL response in `_raw` field */ - includeRaw?: boolean; -} -/** Options for paginated user tweets fetch */ -export interface UserTweetsPaginationOptions extends UserTweetsFetchOptions { - /** Maximum number of pages to fetch (default: 1) */ - maxPages?: number; - /** Starting cursor for pagination (resume from previous fetch) */ - cursor?: string; - /** Delay in milliseconds between page fetches (default: 1000) */ - pageDelayMs?: number; -} -export interface TwitterClientUserTweetsMethods { - getUserTweets(userId: string, count?: number, options?: UserTweetsFetchOptions): Promise; - getUserTweetsPaged(userId: string, limit: number, options?: UserTweetsPaginationOptions): Promise; -} -export declare function withUserTweets>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-user-tweets.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-tweets.d.ts.map b/vendor/package/dist/lib/twitter-client-user-tweets.d.ts.map deleted file mode 100644 index f983540..0000000 --- a/vendor/package/dist/lib/twitter-client-user-tweets.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-user-tweets.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-user-tweets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG9F,OAAO,KAAK,EAAsB,YAAY,EAAa,MAAM,2BAA2B,CAAC;AAG7F,4CAA4C;AAC5C,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,8CAA8C;AAC9C,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACjH;AAED,wBAAgB,cAAc,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EACjF,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAwO9C"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-tweets.js b/vendor/package/dist/lib/twitter-client-user-tweets.js deleted file mode 100644 index 5d10c8e..0000000 --- a/vendor/package/dist/lib/twitter-client-user-tweets.js +++ /dev/null @@ -1,154 +0,0 @@ -import { TWITTER_API_BASE } from './twitter-client-constants.js'; -import { buildUserTweetsFeatures } from './twitter-client-features.js'; -import { extractCursorFromInstructions, parseTweetsFromInstructions } from './twitter-client-utils.js'; -export function withUserTweets(Base) { - class TwitterClientUserTweets extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async getUserTweetsQueryIds() { - const primary = await this.getQueryId('UserTweets'); - // Fallback query ID observed from web client - return Array.from(new Set([primary, 'Wms1GvIiHXAPBaCr9KblaA'])); - } - /** - * Get tweets from a user's profile timeline (single page). - */ - async getUserTweets(userId, count = 20, options = {}) { - return this.getUserTweetsPaged(userId, count, options); - } - /** - * Get tweets from a user's profile timeline with pagination support. - */ - async getUserTweetsPaged(userId, limit, options = {}) { - if (!Number.isFinite(limit) || limit <= 0) { - return { success: false, error: `Invalid limit: ${limit}` }; - } - const { includeRaw = false, maxPages, pageDelayMs = 1000 } = options; - const features = buildUserTweetsFeatures(); - const pageSize = 20; - const seen = new Set(); - const tweets = []; - let cursor = options.cursor; - let nextCursor; - let pagesFetched = 0; - const hardMaxPages = 10; - const computedMaxPages = Math.max(1, Math.ceil(limit / pageSize)); - const effectiveMaxPages = Math.min(hardMaxPages, maxPages ?? computedMaxPages); - const fetchPage = async (pageCount, pageCursor) => { - let lastError; - let had404 = false; - const queryIds = await this.getUserTweetsQueryIds(); - const variables = { - userId, - count: pageCount, - includePromotedContent: false, // Filter out ads - withQuickPromoteEligibilityTweetFields: true, - withVoice: true, - ...(pageCursor ? { cursor: pageCursor } : {}), - }; - const fieldToggles = { - withArticlePlainText: false, - }; - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - fieldToggles: JSON.stringify(fieldToggles), - }); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/UserTweets?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - // Check for common errors - const errorMsg = data.errors.map((e) => e.message).join(', '); - if (errorMsg.includes('User has been suspended') || errorMsg.includes('User not found')) { - return { success: false, error: errorMsg, had404 }; - } - // Some errors are non-fatal if we got data - if (!data.data?.user?.result?.timeline?.timeline?.instructions) { - return { success: false, error: errorMsg, had404 }; - } - } - const instructions = data.data?.user?.result?.timeline?.timeline?.instructions; - const pageTweets = parseTweetsFromInstructions(instructions, { quoteDepth: this.quoteDepth, includeRaw }); - const pageCursorValue = extractCursorFromInstructions(instructions); - return { success: true, tweets: pageTweets, cursor: pageCursorValue, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching user tweets', had404 }; - }; - const fetchWithRefresh = async (pageCount, pageCursor) => { - const firstAttempt = await fetchPage(pageCount, pageCursor); - if (firstAttempt.success) { - return firstAttempt; - } - if (firstAttempt.had404) { - await this.refreshQueryIds(); - const secondAttempt = await fetchPage(pageCount, pageCursor); - if (secondAttempt.success) { - return secondAttempt; - } - return { success: false, error: secondAttempt.error }; - } - return { success: false, error: firstAttempt.error }; - }; - while (tweets.length < limit) { - // Add delay between pages (but not before the first page) - if (pagesFetched > 0 && pageDelayMs > 0) { - await this.sleep(pageDelayMs); - } - const remaining = limit - tweets.length; - const pageCount = Math.min(pageSize, remaining); - const page = await fetchWithRefresh(pageCount, cursor); - if (!page.success) { - return { success: false, error: page.error }; - } - pagesFetched += 1; - let added = 0; - for (const tweet of page.tweets) { - if (seen.has(tweet.id)) { - continue; - } - seen.add(tweet.id); - tweets.push(tweet); - added += 1; - if (tweets.length >= limit) { - break; - } - } - const pageCursor = page.cursor; - if (!pageCursor || pageCursor === cursor || page.tweets.length === 0 || added === 0) { - nextCursor = undefined; - break; - } - if (pagesFetched >= effectiveMaxPages) { - nextCursor = pageCursor; - break; - } - cursor = pageCursor; - nextCursor = pageCursor; - } - return { success: true, tweets, nextCursor }; - } - } - return TwitterClientUserTweets; -} -//# sourceMappingURL=twitter-client-user-tweets.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-user-tweets.js.map b/vendor/package/dist/lib/twitter-client-user-tweets.js.map deleted file mode 100644 index 51f81da..0000000 --- a/vendor/package/dist/lib/twitter-client-user-tweets.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-user-tweets.js","sourceRoot":"","sources":["../../src/lib/twitter-client-user-tweets.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-users.d.ts b/vendor/package/dist/lib/twitter-client-users.d.ts deleted file mode 100644 index b93fdcc..0000000 --- a/vendor/package/dist/lib/twitter-client-users.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { AbstractConstructor, Mixin, TwitterClientBase } from './twitter-client-base.js'; -import type { CurrentUserResult, FollowingResult } from './twitter-client-types.js'; -export interface TwitterClientUserMethods { - getCurrentUser(): Promise; - getFollowing(userId: string, count?: number, cursor?: string): Promise; - getFollowers(userId: string, count?: number, cursor?: string): Promise; -} -export declare function withUsers>(Base: TBase): Mixin; -//# sourceMappingURL=twitter-client-users.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-users.d.ts.map b/vendor/package/dist/lib/twitter-client-users.d.ts.map deleted file mode 100644 index e81482a..0000000 --- a/vendor/package/dist/lib/twitter-client-users.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-users.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAe,MAAM,2BAA2B,CAAC;AAgBjG,MAAM,WAAW,wBAAwB;IACvC,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7C,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACxF,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACzF;AAED,wBAAgB,SAAS,CAAC,KAAK,SAAS,mBAAmB,CAAC,iBAAiB,CAAC,EAC5E,IAAI,EAAE,KAAK,GACV,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,CA4cxC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-users.js b/vendor/package/dist/lib/twitter-client-users.js deleted file mode 100644 index e1e931f..0000000 --- a/vendor/package/dist/lib/twitter-client-users.js +++ /dev/null @@ -1,358 +0,0 @@ -import { SETTINGS_NAME_REGEX, SETTINGS_SCREEN_NAME_REGEX, SETTINGS_USER_ID_REGEX, TWITTER_API_BASE, } from './twitter-client-constants.js'; -import { buildFollowingFeatures } from './twitter-client-features.js'; -import { extractCursorFromInstructions, parseUsersFromInstructions } from './twitter-client-utils.js'; -export function withUsers(Base) { - class TwitterClientUsers extends Base { - // biome-ignore lint/complexity/noUselessConstructor lint/suspicious/noExplicitAny: TS mixin constructor requirement. - constructor(...args) { - super(...args); - } - async getFollowingQueryIds() { - const primary = await this.getQueryId('Following'); - return Array.from(new Set([primary, 'BEkNpEt5pNETESoqMsTEGA'])); - } - async getFollowersQueryIds() { - const primary = await this.getQueryId('Followers'); - return Array.from(new Set([primary, 'kuFUYP9eV1FPoEy4N-pi7w'])); - } - parseUsersFromRestResponse(users) { - return (users ?? []) - .map((u) => { - const id = typeof u.id_str === 'string' ? u.id_str : typeof u.id === 'number' ? String(u.id) : null; - const username = typeof u.screen_name === 'string' ? u.screen_name : null; - if (!id || !username) { - return null; - } - return { - id, - username, - name: typeof u.name === 'string' && u.name.length > 0 ? u.name : username, - description: typeof u.description === 'string' ? u.description : undefined, - followersCount: typeof u.followers_count === 'number' ? u.followers_count : undefined, - followingCount: typeof u.friends_count === 'number' ? u.friends_count : undefined, - isBlueVerified: typeof u.verified === 'boolean' ? u.verified : undefined, - profileImageUrl: typeof u.profile_image_url_https === 'string' ? u.profile_image_url_https : undefined, - createdAt: typeof u.created_at === 'string' ? u.created_at : undefined, - }; - }) - .filter((u) => u !== null); - } - async getFollowersViaRest(userId, count, cursor) { - const params = new URLSearchParams({ - user_id: userId, - count: String(count), - skip_status: 'true', - include_user_entities: 'false', - }); - if (cursor) { - params.set('cursor', cursor); - } - const urls = [ - `https://x.com/i/api/1.1/followers/list.json?${params.toString()}`, - `https://api.twitter.com/1.1/followers/list.json?${params.toString()}`, - ]; - let lastError; - for (const url of urls) { - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (!response.ok) { - const text = await response.text(); - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - const data = (await response.json()); - const users = this.parseUsersFromRestResponse(data.users); - const nextCursor = data.next_cursor_str && data.next_cursor_str !== '0' ? data.next_cursor_str : undefined; - return { success: true, users, nextCursor }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching followers' }; - } - async getFollowingViaRest(userId, count, cursor) { - const params = new URLSearchParams({ - user_id: userId, - count: String(count), - skip_status: 'true', - include_user_entities: 'false', - }); - if (cursor) { - params.set('cursor', cursor); - } - const urls = [ - `https://x.com/i/api/1.1/friends/list.json?${params.toString()}`, - `https://api.twitter.com/1.1/friends/list.json?${params.toString()}`, - ]; - let lastError; - for (const url of urls) { - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (!response.ok) { - const text = await response.text(); - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - const data = (await response.json()); - const users = this.parseUsersFromRestResponse(data.users); - const nextCursor = data.next_cursor_str && data.next_cursor_str !== '0' ? data.next_cursor_str : undefined; - return { success: true, users, nextCursor }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching following' }; - } - /** - * Fetch the account associated with the current cookies - */ - async getCurrentUser() { - const candidateUrls = [ - 'https://x.com/i/api/account/settings.json', - 'https://api.twitter.com/1.1/account/settings.json', - 'https://x.com/i/api/account/verify_credentials.json?skip_status=true&include_entities=false', - 'https://api.twitter.com/1.1/account/verify_credentials.json?skip_status=true&include_entities=false', - ]; - let lastError; - for (const url of candidateUrls) { - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (!response.ok) { - const text = await response.text(); - lastError = `HTTP ${response.status}: ${text.slice(0, 200)}`; - continue; - } - // biome-ignore lint/suspicious/noExplicitAny: Twitter API response is dynamic here - let data; - try { - data = await response.json(); - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - continue; - } - const username = typeof data?.screen_name === 'string' - ? data.screen_name - : typeof data?.user?.screen_name === 'string' - ? data.user.screen_name - : null; - const name = typeof data?.name === 'string' - ? data.name - : typeof data?.user?.name === 'string' - ? data.user.name - : (username ?? ''); - const userId = typeof data?.user_id === 'string' - ? data.user_id - : typeof data?.user_id_str === 'string' - ? data.user_id_str - : typeof data?.user?.id_str === 'string' - ? data.user.id_str - : typeof data?.user?.id === 'string' - ? data.user.id - : null; - if (username && userId) { - this.clientUserId = userId; - return { - success: true, - user: { - id: userId, - username, - name: name || username, - }, - }; - } - lastError = 'Could not determine current user from response'; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - // Fallback: scrape the authenticated settings page (HTML) for screen_name/user_id - const profilePages = ['https://x.com/settings/account', 'https://twitter.com/settings/account']; - for (const page of profilePages) { - try { - const response = await this.fetchWithTimeout(page, { - headers: { - cookie: this.cookieHeader, - 'user-agent': this.userAgent, - }, - }); - if (!response.ok) { - lastError = `HTTP ${response.status} (settings page)`; - continue; - } - const html = await response.text(); - const usernameMatch = SETTINGS_SCREEN_NAME_REGEX.exec(html); - const idMatch = SETTINGS_USER_ID_REGEX.exec(html); - const nameMatch = SETTINGS_NAME_REGEX.exec(html); - const username = usernameMatch?.[1]; - const userId = idMatch?.[1]; - const name = nameMatch?.[1]?.replace(/\\"/g, '"'); - if (username && userId) { - return { - success: true, - user: { - id: userId, - username, - name: name || username, - }, - }; - } - lastError = 'Could not parse settings page for user info'; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { - success: false, - error: lastError ?? 'Unknown error fetching current user', - }; - } - /** - * Get users that a user is following - */ - async getFollowing(userId, count = 20, cursor) { - const variables = { - userId, - count, - includePromotedContent: false, - }; - if (cursor) { - variables.cursor = cursor; - } - const features = buildFollowingFeatures(); - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - const tryOnce = async () => { - let lastError; - let had404 = false; - const queryIds = await this.getFollowingQueryIds(); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/Following?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: data.errors.map((e) => e.message).join(', '), had404 }; - } - const instructions = data.data?.user?.result?.timeline?.timeline?.instructions; - const users = parseUsersFromInstructions(instructions); - const nextCursor = extractCursorFromInstructions(instructions); - return { success: true, users, nextCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching following', had404 }; - }; - const { result, refreshed } = await this.withRefreshedQueryIdsOn404(tryOnce); - if (result.success) { - return { success: true, users: result.users, nextCursor: result.nextCursor }; - } - if (refreshed) { - // GraphQL Following can also return 404 (queryId churn / endpoint flakiness). - // Fallback to the internal v1.1 REST endpoint used by the web client (cookie-auth; no dev API key). - const restAttempt = await this.getFollowingViaRest(userId, count, cursor); - if (restAttempt.success) { - return restAttempt; - } - } - return { success: false, error: result.error }; - } - /** - * Get users that follow a user - */ - async getFollowers(userId, count = 20, cursor) { - const variables = { - userId, - count, - includePromotedContent: false, - }; - if (cursor) { - variables.cursor = cursor; - } - const features = buildFollowingFeatures(); - const params = new URLSearchParams({ - variables: JSON.stringify(variables), - features: JSON.stringify(features), - }); - const tryOnce = async () => { - let lastError; - let had404 = false; - const queryIds = await this.getFollowersQueryIds(); - for (const queryId of queryIds) { - const url = `${TWITTER_API_BASE}/${queryId}/Followers?${params.toString()}`; - try { - const response = await this.fetchWithTimeout(url, { - method: 'GET', - headers: this.getHeaders(), - }); - if (response.status === 404) { - had404 = true; - lastError = `HTTP ${response.status}`; - continue; - } - if (!response.ok) { - const text = await response.text(); - return { success: false, error: `HTTP ${response.status}: ${text.slice(0, 200)}`, had404 }; - } - const data = (await response.json()); - if (data.errors && data.errors.length > 0) { - return { success: false, error: data.errors.map((e) => e.message).join(', '), had404 }; - } - const instructions = data.data?.user?.result?.timeline?.timeline?.instructions; - const users = parseUsersFromInstructions(instructions); - const nextCursor = extractCursorFromInstructions(instructions); - return { success: true, users, nextCursor, had404 }; - } - catch (error) { - lastError = error instanceof Error ? error.message : String(error); - } - } - return { success: false, error: lastError ?? 'Unknown error fetching followers', had404 }; - }; - const { result, refreshed } = await this.withRefreshedQueryIdsOn404(tryOnce); - if (result.success) { - return { success: true, users: result.users, nextCursor: result.nextCursor }; - } - if (refreshed) { - // GraphQL Followers regularly returns 404 (queryId churn / endpoint flakiness). - // Fallback to the internal v1.1 REST endpoint used by the web client (cookie-auth; no dev API key). - const restAttempt = await this.getFollowersViaRest(userId, count, cursor); - if (restAttempt.success) { - return restAttempt; - } - } - return { success: false, error: result.error }; - } - } - return TwitterClientUsers; -} -//# sourceMappingURL=twitter-client-users.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-users.js.map b/vendor/package/dist/lib/twitter-client-users.js.map deleted file mode 100644 index b99d6e7..0000000 --- a/vendor/package/dist/lib/twitter-client-users.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-users.js","sourceRoot":"","sources":["../../src/lib/twitter-client-users.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-utils.d.ts b/vendor/package/dist/lib/twitter-client-utils.d.ts deleted file mode 100644 index c41d2f6..0000000 --- a/vendor/package/dist/lib/twitter-client-utils.d.ts +++ /dev/null @@ -1,173 +0,0 @@ -import type { GraphqlTweetResult, TweetData, TweetMedia, TwitterUser } from './twitter-client-types.js'; -export declare function normalizeQuoteDepth(value?: number): number; -export declare function firstText(...values: Array): string | undefined; -export declare function collectTextFields(value: unknown, keys: Set, output: string[]): void; -export declare function uniqueOrdered(values: string[]): string[]; -/** Inline style range for text formatting (Bold, Italic, etc.) */ -interface InlineStyleRange { - offset: number; - length: number; - style: string; -} -/** Entity range linking a portion of text to an entity in entityMap */ -interface EntityRange { - key: number; - offset: number; - length: number; -} -/** A content block in Draft.js format */ -interface ContentBlock { - key: string; - type: string; - text: string; - data?: { - mentions?: Array<{ - fromIndex: number; - toIndex: number; - text: string; - }>; - }; - entityRanges?: EntityRange[]; - inlineStyleRanges?: InlineStyleRange[]; -} -/** Entity data for different entity types */ -interface EntityValue { - type: string; - mutability: string; - data: { - markdown?: string; - url?: string; - tweetId?: string; - }; -} -/** Entity map entry */ -interface EntityMapEntry { - key: string; - value: EntityValue; -} -/** Draft.js content state structure */ -interface ContentState { - blocks: ContentBlock[]; - entityMap?: Array | Record; -} -/** - * Renders a Draft.js content_state into readable markdown/text format. - * Handles blocks (paragraphs, headers, lists) and entities (code blocks, links, tweets, dividers). - */ -export declare function renderContentState(contentState: ContentState | undefined): string | undefined; -export declare function extractArticleText(result: GraphqlTweetResult | undefined): string | undefined; -export declare function extractNoteTweetText(result: GraphqlTweetResult | undefined): string | undefined; -export declare function extractTweetText(result: GraphqlTweetResult | undefined): string | undefined; -export declare function extractArticleMetadata(result: GraphqlTweetResult | undefined): { - title: string; - previewText?: string; -} | undefined; -export declare function extractMedia(result: GraphqlTweetResult | undefined): TweetMedia[] | undefined; -export declare function unwrapTweetResult(result: GraphqlTweetResult | undefined): GraphqlTweetResult | undefined; -export interface MapTweetResultOptions { - quoteDepth: number; - includeRaw?: boolean; -} -export declare function mapTweetResult(result: GraphqlTweetResult | undefined, quoteDepthOrOptions: number | MapTweetResultOptions): TweetData | undefined; -export declare function findTweetInInstructions(instructions: Array<{ - entries?: Array<{ - content?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - }; - }>; -}> | undefined, tweetId: string): GraphqlTweetResult | undefined; -export declare function collectTweetResultsFromEntry(entry: { - content?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - item?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - }; - items?: Array<{ - item?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - }; - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - content?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - }; - }>; - }; -}): GraphqlTweetResult[]; -export interface ParseTweetsOptions { - quoteDepth: number; - includeRaw?: boolean; -} -export declare function parseTweetsFromInstructions(instructions: Array<{ - entries?: Array<{ - content?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - item?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - }; - items?: Array<{ - item?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - }; - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - content?: { - itemContent?: { - tweet_results?: { - result?: GraphqlTweetResult; - }; - }; - }; - }>; - }; - }>; -}> | undefined, quoteDepthOrOptions: number | ParseTweetsOptions): TweetData[]; -export declare function extractCursorFromInstructions(instructions: Array<{ - entries?: Array<{ - content?: unknown; - }>; -}> | undefined, cursorType?: string): string | undefined; -export declare function parseUsersFromInstructions(instructions: Array<{ - type?: string; - entries?: Array; -}> | undefined): TwitterUser[]; -export {}; -//# sourceMappingURL=twitter-client-utils.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-utils.d.ts.map b/vendor/package/dist/lib/twitter-client-utils.d.ts.map deleted file mode 100644 index 72c881b..0000000 --- a/vendor/package/dist/lib/twitter-client-utils.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-utils.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-utils.js b/vendor/package/dist/lib/twitter-client-utils.js deleted file mode 100644 index b6e869d..0000000 --- a/vendor/package/dist/lib/twitter-client-utils.js +++ /dev/null @@ -1,511 +0,0 @@ -export function normalizeQuoteDepth(value) { - if (value === undefined || value === null) { - return 1; - } - if (!Number.isFinite(value)) { - return 1; - } - return Math.max(0, Math.floor(value)); -} -export function firstText(...values) { - for (const value of values) { - if (typeof value === 'string') { - const trimmed = value.trim(); - if (trimmed) { - return trimmed; - } - } - } - return undefined; -} -export function collectTextFields(value, keys, output) { - if (!value) { - return; - } - if (typeof value === 'string') { - return; - } - if (Array.isArray(value)) { - for (const item of value) { - collectTextFields(item, keys, output); - } - return; - } - if (typeof value === 'object') { - for (const [key, nested] of Object.entries(value)) { - if (keys.has(key)) { - if (typeof nested === 'string') { - const trimmed = nested.trim(); - if (trimmed) { - output.push(trimmed); - } - continue; - } - } - collectTextFields(nested, keys, output); - } - } -} -export function uniqueOrdered(values) { - const seen = new Set(); - const result = []; - for (const value of values) { - if (seen.has(value)) { - continue; - } - seen.add(value); - result.push(value); - } - return result; -} -/** - * Renders a Draft.js content_state into readable markdown/text format. - * Handles blocks (paragraphs, headers, lists) and entities (code blocks, links, tweets, dividers). - */ -export function renderContentState(contentState) { - if (!contentState?.blocks || contentState.blocks.length === 0) { - return undefined; - } - // Build entity lookup map from array/object formats - const entityMap = new Map(); - const rawEntityMap = contentState.entityMap ?? []; - if (Array.isArray(rawEntityMap)) { - for (const entry of rawEntityMap) { - const key = Number.parseInt(entry.key, 10); - if (!Number.isNaN(key)) { - entityMap.set(key, entry.value); - } - } - } - else { - for (const [key, value] of Object.entries(rawEntityMap)) { - const keyNumber = Number.parseInt(key, 10); - if (!Number.isNaN(keyNumber)) { - entityMap.set(keyNumber, value); - } - } - } - const outputLines = []; - let orderedListCounter = 0; - let previousBlockType; - for (const block of contentState.blocks) { - // Reset ordered list counter when leaving ordered list context - if (block.type !== 'ordered-list-item' && previousBlockType === 'ordered-list-item') { - orderedListCounter = 0; - } - switch (block.type) { - case 'unstyled': { - // Plain paragraph - just output text with any inline formatting - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(text); - } - break; - } - case 'header-one': { - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(`# ${text}`); - } - break; - } - case 'header-two': { - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(`## ${text}`); - } - break; - } - case 'header-three': { - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(`### ${text}`); - } - break; - } - case 'unordered-list-item': { - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(`- ${text}`); - } - break; - } - case 'ordered-list-item': { - orderedListCounter++; - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(`${orderedListCounter}. ${text}`); - } - break; - } - case 'blockquote': { - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(`> ${text}`); - } - break; - } - case 'atomic': { - // Atomic blocks are placeholders for embedded entities - const entityContent = renderAtomicBlock(block, entityMap); - if (entityContent) { - outputLines.push(entityContent); - } - break; - } - default: { - // Fallback: just output the text - const text = renderBlockText(block, entityMap); - if (text) { - outputLines.push(text); - } - } - } - previousBlockType = block.type; - } - const result = outputLines.join('\n\n'); - return result.trim() || undefined; -} -/** - * Renders text content of a block, applying inline link entities. - */ -function renderBlockText(block, entityMap) { - let text = block.text; - // Handle LINK entities by appending URL in markdown format - // Process in reverse order to not mess up offsets - const linkRanges = (block.entityRanges ?? []) - .filter((range) => { - const entity = entityMap.get(range.key); - return entity?.type === 'LINK' && entity.data.url; - }) - .sort((a, b) => b.offset - a.offset); - for (const range of linkRanges) { - const entity = entityMap.get(range.key); - if (entity?.data.url) { - const linkText = text.slice(range.offset, range.offset + range.length); - const markdownLink = `[${linkText}](${entity.data.url})`; - text = text.slice(0, range.offset) + markdownLink + text.slice(range.offset + range.length); - } - } - return text.trim(); -} -/** - * Renders an atomic block by looking up its entity and returning appropriate content. - */ -function renderAtomicBlock(block, entityMap) { - const entityRanges = block.entityRanges ?? []; - if (entityRanges.length === 0) { - return undefined; - } - const entityKey = entityRanges[0].key; - const entity = entityMap.get(entityKey); - if (!entity) { - return undefined; - } - switch (entity.type) { - case 'MARKDOWN': - // Code blocks and other markdown content - output as-is - return entity.data.markdown?.trim(); - case 'DIVIDER': - return '---'; - case 'TWEET': - if (entity.data.tweetId) { - return `[Embedded Tweet: https://x.com/i/status/${entity.data.tweetId}]`; - } - return undefined; - case 'LINK': - if (entity.data.url) { - return `[Link: ${entity.data.url}]`; - } - return undefined; - case 'IMAGE': - // Images in atomic blocks - could extract URL if available - return '[Image]'; - default: - return undefined; - } -} -export function extractArticleText(result) { - const article = result?.article; - if (!article) { - return undefined; - } - const articleResult = article.article_results?.result ?? article; - if (process.env.BIRD_DEBUG_ARTICLE === '1') { - console.error('[bird][debug][article] payload:', JSON.stringify({ - rest_id: result?.rest_id, - article: articleResult, - note_tweet: result?.note_tweet?.note_tweet_results?.result ?? null, - }, null, 2)); - } - const title = firstText(articleResult.title, article.title); - // Try to render from rich content_state first (Draft.js format with blocks + entityMap) - // This preserves code blocks, embedded tweets, markdown, etc. - const contentState = article.article_results?.result?.content_state; - const richBody = renderContentState(contentState); - if (richBody) { - // Rich content found - prepend title if not already included - if (title) { - const normalizedTitle = title.trim(); - const trimmedBody = richBody.trimStart(); - const headingMatches = [`# ${normalizedTitle}`, `## ${normalizedTitle}`, `### ${normalizedTitle}`]; - const hasTitle = trimmedBody === normalizedTitle || - trimmedBody.startsWith(`${normalizedTitle}\n`) || - headingMatches.some((heading) => trimmedBody.startsWith(heading)); - if (!hasTitle) { - return `${title}\n\n${richBody}`; - } - } - return richBody; - } - // Fallback to plain text extraction for articles without rich content_state - let body = firstText(articleResult.plain_text, article.plain_text, articleResult.body?.text, articleResult.body?.richtext?.text, articleResult.body?.rich_text?.text, articleResult.content?.text, articleResult.content?.richtext?.text, articleResult.content?.rich_text?.text, articleResult.text, articleResult.richtext?.text, articleResult.rich_text?.text, article.body?.text, article.body?.richtext?.text, article.body?.rich_text?.text, article.content?.text, article.content?.richtext?.text, article.content?.rich_text?.text, article.text, article.richtext?.text, article.rich_text?.text); - if (body && title && body.trim() === title.trim()) { - body = undefined; - } - if (!body) { - const collected = []; - collectTextFields(articleResult, new Set(['text', 'title']), collected); - collectTextFields(article, new Set(['text', 'title']), collected); - const unique = uniqueOrdered(collected); - const filtered = title ? unique.filter((value) => value !== title) : unique; - if (filtered.length > 0) { - body = filtered.join('\n\n'); - } - } - if (title && body && !body.startsWith(title)) { - return `${title}\n\n${body}`; - } - return body ?? title; -} -export function extractNoteTweetText(result) { - const note = result?.note_tweet?.note_tweet_results?.result; - if (!note) { - return undefined; - } - return firstText(note.text, note.richtext?.text, note.rich_text?.text, note.content?.text, note.content?.richtext?.text, note.content?.rich_text?.text); -} -export function extractTweetText(result) { - return extractArticleText(result) ?? extractNoteTweetText(result) ?? firstText(result?.legacy?.full_text); -} -export function extractArticleMetadata(result) { - const article = result?.article; - if (!article) { - return undefined; - } - const articleResult = article.article_results?.result ?? article; - const title = firstText(articleResult.title, article.title); - if (!title) { - return undefined; - } - // preview_text is available in home timeline responses - const previewText = firstText(articleResult.preview_text, article.preview_text); - return { title, previewText }; -} -export function extractMedia(result) { - // Prefer extended_entities (has video info), fall back to entities - const rawMedia = result?.legacy?.extended_entities?.media ?? result?.legacy?.entities?.media; - if (!rawMedia || rawMedia.length === 0) { - return undefined; - } - const media = []; - for (const item of rawMedia) { - if (!item.type || !item.media_url_https) { - continue; - } - const mediaItem = { - type: item.type, - url: item.media_url_https, - }; - // Get dimensions from largest available size - const sizes = item.sizes; - if (sizes?.large) { - mediaItem.width = sizes.large.w; - mediaItem.height = sizes.large.h; - } - else if (sizes?.medium) { - mediaItem.width = sizes.medium.w; - mediaItem.height = sizes.medium.h; - } - // For thumbnails/previews - if (sizes?.small) { - mediaItem.previewUrl = `${item.media_url_https}:small`; - } - // Extract video URL for video/animated_gif - if ((item.type === 'video' || item.type === 'animated_gif') && item.video_info?.variants) { - // Prefer highest bitrate MP4, fall back to first MP4 when bitrate is missing. - const mp4Variants = item.video_info.variants.filter((v) => v.content_type === 'video/mp4' && typeof v.url === 'string'); - const mp4WithBitrate = mp4Variants - .filter((v) => typeof v.bitrate === 'number') - .sort((a, b) => b.bitrate - a.bitrate); - const selectedVariant = mp4WithBitrate[0] ?? mp4Variants[0]; - if (selectedVariant) { - mediaItem.videoUrl = selectedVariant.url; - } - if (typeof item.video_info.duration_millis === 'number') { - mediaItem.durationMs = item.video_info.duration_millis; - } - } - media.push(mediaItem); - } - return media.length > 0 ? media : undefined; -} -export function unwrapTweetResult(result) { - if (!result) { - return undefined; - } - if (result.tweet) { - return result.tweet; - } - return result; -} -export function mapTweetResult(result, quoteDepthOrOptions) { - const options = typeof quoteDepthOrOptions === 'number' ? { quoteDepth: quoteDepthOrOptions } : quoteDepthOrOptions; - const { quoteDepth, includeRaw = false } = options; - const userResult = result?.core?.user_results?.result; - const userLegacy = userResult?.legacy; - const userCore = userResult?.core; - const username = userLegacy?.screen_name ?? userCore?.screen_name; - const name = userLegacy?.name ?? userCore?.name ?? username; - const userId = userResult?.rest_id; - if (!result?.rest_id || !username) { - return undefined; - } - const text = extractTweetText(result); - if (!text) { - return undefined; - } - let quotedTweet; - if (quoteDepth > 0) { - const quotedResult = unwrapTweetResult(result.quoted_status_result?.result); - if (quotedResult) { - quotedTweet = mapTweetResult(quotedResult, { quoteDepth: quoteDepth - 1, includeRaw }); - } - } - const media = extractMedia(result); - const article = extractArticleMetadata(result); - const tweetData = { - id: result.rest_id, - text, - createdAt: result.legacy?.created_at, - replyCount: result.legacy?.reply_count, - retweetCount: result.legacy?.retweet_count, - likeCount: result.legacy?.favorite_count, - conversationId: result.legacy?.conversation_id_str, - inReplyToStatusId: result.legacy?.in_reply_to_status_id_str ?? undefined, - author: { - username, - name: name || username, - }, - authorId: userId, - quotedTweet, - media, - article, - }; - if (includeRaw) { - tweetData._raw = result; - } - return tweetData; -} -export function findTweetInInstructions(instructions, tweetId) { - if (!instructions) { - return undefined; - } - for (const instruction of instructions) { - for (const entry of instruction.entries || []) { - const result = entry.content?.itemContent?.tweet_results?.result; - if (result?.rest_id === tweetId) { - return result; - } - } - } - return undefined; -} -export function collectTweetResultsFromEntry(entry) { - const results = []; - const pushResult = (result) => { - if (result?.rest_id) { - results.push(result); - } - }; - const content = entry.content; - pushResult(content?.itemContent?.tweet_results?.result); - pushResult(content?.item?.itemContent?.tweet_results?.result); - for (const item of content?.items ?? []) { - pushResult(item?.item?.itemContent?.tweet_results?.result); - pushResult(item?.itemContent?.tweet_results?.result); - pushResult(item?.content?.itemContent?.tweet_results?.result); - } - return results; -} -export function parseTweetsFromInstructions(instructions, quoteDepthOrOptions) { - const options = typeof quoteDepthOrOptions === 'number' ? { quoteDepth: quoteDepthOrOptions } : quoteDepthOrOptions; - const { quoteDepth, includeRaw = false } = options; - const tweets = []; - const seen = new Set(); - for (const instruction of instructions ?? []) { - for (const entry of instruction.entries ?? []) { - const results = collectTweetResultsFromEntry(entry); - for (const result of results) { - const mapped = mapTweetResult(result, { quoteDepth, includeRaw }); - if (!mapped || seen.has(mapped.id)) { - continue; - } - seen.add(mapped.id); - tweets.push(mapped); - } - } - } - return tweets; -} -export function extractCursorFromInstructions(instructions, cursorType = 'Bottom') { - for (const instruction of instructions ?? []) { - for (const entry of instruction.entries ?? []) { - const content = entry.content; - if (content?.cursorType === cursorType && typeof content.value === 'string' && content.value.length > 0) { - return content.value; - } - } - } - return undefined; -} -export function parseUsersFromInstructions(instructions) { - if (!instructions) { - return []; - } - const users = []; - for (const instruction of instructions) { - if (!instruction.entries) { - continue; - } - for (const entry of instruction.entries) { - const content = entry?.content; - const rawUserResult = content?.itemContent?.user_results?.result; - const userResult = rawUserResult?.__typename === 'UserWithVisibilityResults' && rawUserResult.user - ? rawUserResult.user - : rawUserResult; - if (!userResult || userResult.__typename !== 'User') { - continue; - } - const legacy = userResult.legacy; - const core = userResult.core; - const username = legacy?.screen_name ?? core?.screen_name; - if (!userResult.rest_id || !username) { - continue; - } - users.push({ - id: userResult.rest_id, - username, - name: legacy?.name ?? core?.name ?? username, - description: legacy?.description, - followersCount: legacy?.followers_count, - followingCount: legacy?.friends_count, - isBlueVerified: userResult.is_blue_verified, - profileImageUrl: legacy?.profile_image_url_https ?? userResult.avatar?.image_url, - createdAt: legacy?.created_at ?? core?.created_at, - }); - } - } - return users; -} -//# sourceMappingURL=twitter-client-utils.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client-utils.js.map b/vendor/package/dist/lib/twitter-client-utils.js.map deleted file mode 100644 index 3c7eb80..0000000 --- a/vendor/package/dist/lib/twitter-client-utils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client-utils.js","sourceRoot":"","sources":["../../src/lib/twitter-client-utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAG,MAAwC;IACnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,IAAiB,EAAE,MAAgB;IACnF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YAC7E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC9B,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvB,CAAC;oBACD,SAAS;gBACX,CAAC;YACH,CAAC;YACD,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAgB;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAuDD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,YAAsC;IACvE,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oDAAoD;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjD,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACxD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,iBAAqC,CAAC;IAE1C,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACxC,+DAA+D;QAC/D,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,iBAAiB,KAAK,mBAAmB,EAAE,CAAC;YACpF,kBAAkB,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,gEAAgE;gBAChE,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACjC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,kBAAkB,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,GAAG,kBAAkB,KAAK,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uDAAuD;gBACvD,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC1D,IAAI,aAAa,EAAE,CAAC;oBAClB,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAClC,CAAC;gBACD,MAAM;YACR,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,iCAAiC;gBACjC,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC/C,IAAI,IAAI,EAAE,CAAC;oBACT,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAmB,EAAE,SAAmC;IAC/E,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAEtB,2DAA2D;IAC3D,kDAAkD;IAClD,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;SAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACpD,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,YAAY,GAAG,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACzD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAmB,EAAE,SAAmC;IACjF,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;IAC9C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,UAAU;YACb,wDAAwD;YACxD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAEtC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC;QAEf,KAAK,OAAO;YACV,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,2CAA2C,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC;YAC3E,CAAC;YACD,OAAO,SAAS,CAAC;QAEnB,KAAK,MAAM;YACT,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACpB,OAAO,UAAU,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YACtC,CAAC;YACD,OAAO,SAAS,CAAC;QAEnB,KAAK,OAAO;YACV,2DAA2D;YAC3D,OAAO,SAAS,CAAC;QAEnB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAsC;IACvE,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,MAAM,IAAI,OAAO,CAAC;IACjE,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;QAC3C,OAAO,CAAC,KAAK,CACX,iCAAiC,EACjC,IAAI,CAAC,SAAS,CACZ;YACE,OAAO,EAAE,MAAM,EAAE,OAAO;YACxB,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,IAAI,IAAI;SACnE,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAE5D,wFAAwF;IACxF,8DAA8D;IAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,EAAE,MAAM,EAAE,aAAa,CAAC;IACpE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,6DAA6D;QAC7D,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,cAAc,GAAG,CAAC,KAAK,eAAe,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,OAAO,eAAe,EAAE,CAAC,CAAC;YACnG,MAAM,QAAQ,GACZ,WAAW,KAAK,eAAe;gBAC/B,WAAW,CAAC,UAAU,CAAC,GAAG,eAAe,IAAI,CAAC;gBAC9C,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,GAAG,KAAK,OAAO,QAAQ,EAAE,CAAC;YACnC,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,4EAA4E;IAC5E,IAAI,IAAI,GAAG,SAAS,CAClB,aAAa,CAAC,UAAU,EACxB,OAAO,CAAC,UAAU,EAClB,aAAa,CAAC,IAAI,EAAE,IAAI,EACxB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAClC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EACnC,aAAa,CAAC,OAAO,EAAE,IAAI,EAC3B,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EACrC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EACtC,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,QAAQ,EAAE,IAAI,EAC5B,aAAa,CAAC,SAAS,EAAE,IAAI,EAC7B,OAAO,CAAC,IAAI,EAAE,IAAI,EAClB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAC5B,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAC7B,OAAO,CAAC,OAAO,EAAE,IAAI,EACrB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAC/B,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAChC,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,QAAQ,EAAE,IAAI,EACtB,OAAO,CAAC,SAAS,EAAE,IAAI,CACxB,CAAC;IAEF,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,iBAAiB,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACxE,iBAAiB,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5E,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,IAAI,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAsC;IACzE,MAAM,IAAI,GAAG,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CACd,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,EAAE,IAAI,EACnB,IAAI,CAAC,SAAS,EAAE,IAAI,EACpB,IAAI,CAAC,OAAO,EAAE,IAAI,EAClB,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAC5B,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAsC;IACrE,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAsC;IAEtC,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,MAAM,IAAI,OAAO,CAAC;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,uDAAuD;IACvD,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAEhF,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAsC;IACjE,mEAAmE;IACnE,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;IAC7F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAe;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,eAAe;SAC1B,CAAC;QAEF,6CAA6C;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;YACjB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAChC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;YACzB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,0BAA0B;QAC1B,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;YACjB,SAAS,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC,eAAe,QAAQ,CAAC;QACzD,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;YACzF,8EAA8E;YAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CACjD,CAAC,CAAC,EAAgE,EAAE,CAClE,CAAC,CAAC,YAAY,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,CAC9D,CAAC;YACF,MAAM,cAAc,GAAG,WAAW;iBAC/B,MAAM,CAAC,CAAC,CAAC,EAA+D,EAAE,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;iBACzG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,eAAe,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;YAE5D,IAAI,eAAe,EAAE,CAAC;gBACpB,SAAS,CAAC,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC;YAC3C,CAAC;YAED,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACxD,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YACzD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAsC;IACtE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,UAAU,cAAc,CAC5B,MAAsC,EACtC,mBAAmD;IAEnD,MAAM,OAAO,GACX,OAAO,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACtG,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEnD,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,UAAU,EAAE,MAAM,CAAC;IACtC,MAAM,QAAQ,GAAG,UAAU,EAAE,IAAI,CAAC;IAClC,MAAM,QAAQ,GAAG,UAAU,EAAE,WAAW,IAAI,QAAQ,EAAE,WAAW,CAAC;IAClE,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,QAAQ,CAAC;IAC5D,MAAM,MAAM,GAAG,UAAU,EAAE,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,WAAkC,CAAC;IACvC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,YAAY,EAAE,CAAC;YACjB,WAAW,GAAG,cAAc,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAc;QAC3B,EAAE,EAAE,MAAM,CAAC,OAAO;QAClB,IAAI;QACJ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU;QACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW;QACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa;QAC1C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc;QACxC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB;QAClD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,IAAI,SAAS;QACxE,MAAM,EAAE;YACN,QAAQ;YACR,IAAI,EAAE,IAAI,IAAI,QAAQ;SACvB;QACD,QAAQ,EAAE,MAAM;QAChB,WAAW;QACX,KAAK;QACL,OAAO;KACR,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACd,SAAsD,CAAC,IAAI,GAAG,MAAM,CAAC;IACxE,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,YAYa,EACb,OAAe;IAEf,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC;YACjE,IAAI,MAAM,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAoC5C;IACC,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,CAAC,MAA2B,EAAE,EAAE;QACjD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IACxD,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAE9D,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;QACxC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3D,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;QACrD,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAOD,MAAM,UAAU,2BAA2B,CACzC,YAwCa,EACb,mBAAgD;IAEhD,MAAM,OAAO,GACX,OAAO,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACtG,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEnD,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,WAAW,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;YACpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;gBAClE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnC,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,YAMa,EACb,UAAU,GAAG,QAAQ;IAErB,KAAK,MAAM,WAAW,IAAI,YAAY,IAAI,EAAE,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAgE,CAAC;YACvF,IAAI,OAAO,EAAE,UAAU,KAAK,UAAU,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxG,OAAO,OAAO,CAAC,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,YAA4E;IAE5E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,OAAO,GAAI,KAAiF,EAAE,OAAO,CAAC;YAC5G,MAAM,aAAa,GAAG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAwB7C,CAAC;YAEd,MAAM,UAAU,GACd,aAAa,EAAE,UAAU,KAAK,2BAA2B,IAAI,aAAa,CAAC,IAAI;gBAC7E,CAAC,CAAE,aAAa,CAAC,IAA6B;gBAC9C,CAAC,CAAC,aAAa,CAAC;YAEpB,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBACpD,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;YACjC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACrC,SAAS;YACX,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,UAAU,CAAC,OAAO;gBACtB,QAAQ;gBACR,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,QAAQ;gBAC5C,WAAW,EAAE,MAAM,EAAE,WAAW;gBAChC,cAAc,EAAE,MAAM,EAAE,eAAe;gBACvC,cAAc,EAAE,MAAM,EAAE,aAAa;gBACrC,cAAc,EAAE,UAAU,CAAC,gBAAgB;gBAC3C,eAAe,EAAE,MAAM,EAAE,uBAAuB,IAAI,UAAU,CAAC,MAAM,EAAE,SAAS;gBAChF,SAAS,EAAE,MAAM,EAAE,UAAU,IAAI,IAAI,EAAE,UAAU;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client.d.ts b/vendor/package/dist/lib/twitter-client.d.ts deleted file mode 100644 index 8a743cb..0000000 --- a/vendor/package/dist/lib/twitter-client.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { AbstractConstructor } from './twitter-client-base.js'; -import { TwitterClientBase } from './twitter-client-base.js'; -import { type TwitterClientBookmarkMethods } from './twitter-client-bookmarks.js'; -import { type TwitterClientEngagementMethods } from './twitter-client-engagement.js'; -import { type TwitterClientFollowMethods } from './twitter-client-follow.js'; -import { type TwitterClientHomeMethods } from './twitter-client-home.js'; -import { type TwitterClientListMethods } from './twitter-client-lists.js'; -import { type TwitterClientMediaMethods } from './twitter-client-media.js'; -import { type TwitterClientNewsMethods } from './twitter-client-news.js'; -import { type TwitterClientPostingMethods } from './twitter-client-posting.js'; -import { type TwitterClientSearchMethods } from './twitter-client-search.js'; -import { type TwitterClientTimelineMethods } from './twitter-client-timelines.js'; -import { type TwitterClientTweetDetailMethods } from './twitter-client-tweet-detail.js'; -import { type TwitterClientUserLookupMethods } from './twitter-client-user-lookup.js'; -import { type TwitterClientUserTweetsMethods } from './twitter-client-user-tweets.js'; -import { type TwitterClientUserMethods } from './twitter-client-users.js'; -type TwitterClientInstance = TwitterClientBase & TwitterClientBookmarkMethods & TwitterClientEngagementMethods & TwitterClientFollowMethods & TwitterClientHomeMethods & TwitterClientListMethods & TwitterClientMediaMethods & TwitterClientNewsMethods & TwitterClientPostingMethods & TwitterClientSearchMethods & TwitterClientTimelineMethods & TwitterClientTweetDetailMethods & TwitterClientUserMethods & TwitterClientUserLookupMethods & TwitterClientUserTweetsMethods; -declare const MixedTwitterClient: AbstractConstructor; -export declare class TwitterClient extends MixedTwitterClient { -} -export type { NewsFetchOptions, NewsItem, NewsResult } from './twitter-client-news.js'; -export type { BookmarkMutationResult, CurrentUserResult, FollowingResult, FollowMutationResult, GetTweetResult, ListsResult, SearchResult, TweetData, TweetResult, TwitterClientOptions, TwitterList, TwitterUser, UploadMediaResult, } from './twitter-client-types.js'; -//# sourceMappingURL=twitter-client.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client.d.ts.map b/vendor/package/dist/lib/twitter-client.d.ts.map deleted file mode 100644 index 07af398..0000000 --- a/vendor/package/dist/lib/twitter-client.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client.d.ts","sourceRoot":"","sources":["../../src/lib/twitter-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,4BAA4B,EAAiB,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAE,KAAK,8BAA8B,EAAkB,MAAM,gCAAgC,CAAC;AACrG,OAAO,EAAE,KAAK,0BAA0B,EAAc,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,KAAK,wBAAwB,EAAY,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,KAAK,wBAAwB,EAAa,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,KAAK,yBAAyB,EAAa,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,KAAK,wBAAwB,EAAY,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,KAAK,2BAA2B,EAAe,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,KAAK,0BAA0B,EAAc,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,KAAK,4BAA4B,EAAiB,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAE,KAAK,+BAA+B,EAAoB,MAAM,kCAAkC,CAAC;AAC1G,OAAO,EAAE,KAAK,8BAA8B,EAAkB,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAAE,KAAK,8BAA8B,EAAkB,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAAE,KAAK,wBAAwB,EAAa,MAAM,2BAA2B,CAAC;AAErF,KAAK,qBAAqB,GAAG,iBAAiB,GAC5C,4BAA4B,GAC5B,8BAA8B,GAC9B,0BAA0B,GAC1B,wBAAwB,GACxB,wBAAwB,GACxB,yBAAyB,GACzB,wBAAwB,GACxB,2BAA2B,GAC3B,0BAA0B,GAC1B,4BAA4B,GAC5B,+BAA+B,GAC/B,wBAAwB,GACxB,8BAA8B,GAC9B,8BAA8B,CAAC;AAIjC,QAAA,MAAM,kBAAkB,EAgBnB,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;AAEhD,qBAAa,aAAc,SAAQ,kBAAkB;CAAG;AAExD,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvF,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,2BAA2B,CAAC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client.js b/vendor/package/dist/lib/twitter-client.js deleted file mode 100644 index a80c2c1..0000000 --- a/vendor/package/dist/lib/twitter-client.js +++ /dev/null @@ -1,21 +0,0 @@ -import { TwitterClientBase } from './twitter-client-base.js'; -import { withBookmarks } from './twitter-client-bookmarks.js'; -import { withEngagement } from './twitter-client-engagement.js'; -import { withFollow } from './twitter-client-follow.js'; -import { withHome } from './twitter-client-home.js'; -import { withLists } from './twitter-client-lists.js'; -import { withMedia } from './twitter-client-media.js'; -import { withNews } from './twitter-client-news.js'; -import { withPosting } from './twitter-client-posting.js'; -import { withSearch } from './twitter-client-search.js'; -import { withTimelines } from './twitter-client-timelines.js'; -import { withTweetDetails } from './twitter-client-tweet-detail.js'; -import { withUserLookup } from './twitter-client-user-lookup.js'; -import { withUserTweets } from './twitter-client-user-tweets.js'; -import { withUsers } from './twitter-client-users.js'; -// News mixin wraps search because it depends on the search() method -// Engagement mixin adds like/unlike/retweet/unretweet/bookmark methods -const MixedTwitterClient = withNews(withUserTweets(withUserLookup(withUsers(withLists(withHome(withTimelines(withSearch(withTweetDetails(withPosting(withEngagement(withFollow(withBookmarks(withMedia(TwitterClientBase)))))))))))))); -export class TwitterClient extends MixedTwitterClient { -} -//# sourceMappingURL=twitter-client.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/twitter-client.js.map b/vendor/package/dist/lib/twitter-client.js.map deleted file mode 100644 index 030335d..0000000 --- a/vendor/package/dist/lib/twitter-client.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"twitter-client.js","sourceRoot":"","sources":["../../src/lib/twitter-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAqC,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAuC,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrG,OAAO,EAAmC,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAiC,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAiC,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAkC,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAiC,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAoC,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAmC,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAqC,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAwC,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAC1G,OAAO,EAAuC,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAAuC,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtG,OAAO,EAAiC,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAkBrF,oEAAoE;AACpE,uEAAuE;AACvE,MAAM,kBAAkB,GAAG,QAAQ,CACjC,cAAc,CACZ,cAAc,CACZ,SAAS,CACP,SAAS,CACP,QAAQ,CACN,aAAa,CACX,UAAU,CACR,gBAAgB,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACvG,CACF,CACF,CACF,CACF,CACF,CACF,CAC4C,CAAC;AAEhD,MAAM,OAAO,aAAc,SAAQ,kBAAkB;CAAG"} \ No newline at end of file diff --git a/vendor/package/dist/lib/version.d.ts b/vendor/package/dist/lib/version.d.ts deleted file mode 100644 index 5f4a056..0000000 --- a/vendor/package/dist/lib/version.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export declare const FALLBACK_VERSION = "unknown"; -export declare function resolvePackageVersion(importMetaUrl?: string): string; -export declare function resolveGitSha(importMetaUrl?: string): string | null; -export declare function formatVersionLine(importMetaUrl?: string): string; -export declare function getCliVersion(): string; -//# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/vendor/package/dist/lib/version.d.ts.map b/vendor/package/dist/lib/version.d.ts.map deleted file mode 100644 index c3c1417..0000000 --- a/vendor/package/dist/lib/version.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,YAAY,CAAC;AA2C1C,wBAAgB,qBAAqB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BpE;AAgED,wBAAgB,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2CnE;AAED,wBAAgB,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"} \ No newline at end of file diff --git a/vendor/package/dist/lib/version.js b/vendor/package/dist/lib/version.js deleted file mode 100644 index a6bcddc..0000000 --- a/vendor/package/dist/lib/version.js +++ /dev/null @@ -1,174 +0,0 @@ -import fs from 'node:fs'; -import path from 'node:path'; -import { fileURLToPath } from 'node:url'; -export const FALLBACK_VERSION = 'unknown'; -const REF_PREFIX_REGEX = /^ref:\s*/i; -const LINE_SPLIT_REGEX = /\r?\n/; -const GITDIR_REGEX = /gitdir:\s*(.+)\s*$/i; -function readPackageVersionFromJsonFile(candidate) { - try { - const raw = fs.readFileSync(candidate, 'utf8'); - const json = JSON.parse(raw); - if (json && typeof json.version === 'string' && json.version.trim().length > 0) { - return json.version.trim(); - } - return null; - } - catch { - return null; - } -} -function readVersionFromTextFile(candidate) { - try { - const raw = fs.readFileSync(candidate, 'utf8').trim(); - return raw.length > 0 ? raw : null; - } - catch { - return null; - } -} -function resolveStartDir(importMetaUrl) { - if (typeof importMetaUrl === 'string' && importMetaUrl.trim().length > 0) { - try { - return path.dirname(fileURLToPath(importMetaUrl)); - } - catch { - // ignore - } - } - if (typeof __dirname === 'string' && __dirname.length > 0) { - return __dirname; - } - return process.cwd(); -} -export function resolvePackageVersion(importMetaUrl) { - const injected = typeof process !== 'undefined' && typeof process.env.BIRD_VERSION === 'string' - ? process.env.BIRD_VERSION.trim() - : ''; - if (injected.length > 0) { - return injected; - } - let dir = resolveStartDir(importMetaUrl); - for (let i = 0; i < 10; i += 1) { - const version = readPackageVersionFromJsonFile(path.join(dir, 'package.json')) ?? - readVersionFromTextFile(path.join(dir, 'VERSION')); - if (version) { - return version; - } - const parent = path.dirname(dir); - if (parent === dir) { - break; - } - dir = parent; - } - return FALLBACK_VERSION; -} -function truncateSha(sha, length = 8) { - const trimmed = sha.trim(); - if (!trimmed) { - return ''; - } - if (trimmed.length <= length) { - return trimmed; - } - return trimmed.slice(0, length); -} -function resolveGitShaFromGitDir(gitDir) { - const headPath = path.join(gitDir, 'HEAD'); - let head = ''; - try { - head = fs.readFileSync(headPath, 'utf8').trim(); - } - catch { - return null; - } - if (!head) { - return null; - } - if (!head.startsWith('ref:')) { - const sha = truncateSha(head); - return sha.length > 0 ? sha : null; - } - const ref = head.replace(REF_PREFIX_REGEX, '').trim(); - if (!ref) { - return null; - } - const refPath = path.join(gitDir, ref); - try { - const sha = truncateSha(fs.readFileSync(refPath, 'utf8')); - return sha.length > 0 ? sha : null; - } - catch { - // fall through to packed-refs - } - const packedRefsPath = path.join(gitDir, 'packed-refs'); - try { - const packed = fs.readFileSync(packedRefsPath, 'utf8'); - const lines = packed.split(LINE_SPLIT_REGEX); - for (const line of lines) { - if (!line || line.startsWith('#') || line.startsWith('^')) { - continue; - } - const [shaRaw, refName] = line.split(' '); - if (refName?.trim() === ref) { - const sha = truncateSha(shaRaw ?? ''); - return sha.length > 0 ? sha : null; - } - } - } - catch { - // ignore - } - return null; -} -export function resolveGitSha(importMetaUrl) { - const injected = typeof process !== 'undefined' && typeof process.env.BIRD_GIT_SHA === 'string' - ? process.env.BIRD_GIT_SHA.trim() - : ''; - if (injected.length > 0) { - return truncateSha(injected); - } - let dir = resolveStartDir(importMetaUrl); - for (let i = 0; i < 10; i += 1) { - const dotGit = path.join(dir, '.git'); - try { - const stat = fs.statSync(dotGit); - if (stat.isDirectory()) { - const sha = resolveGitShaFromGitDir(dotGit); - if (sha) { - return sha; - } - } - else if (stat.isFile()) { - const txt = fs.readFileSync(dotGit, 'utf8'); - const match = GITDIR_REGEX.exec(txt); - const gitDir = match?.[1]?.trim(); - if (gitDir) { - const resolved = path.isAbsolute(gitDir) ? gitDir : path.resolve(dir, gitDir); - const sha = resolveGitShaFromGitDir(resolved); - if (sha) { - return sha; - } - } - } - } - catch { - // ignore - } - const parent = path.dirname(dir); - if (parent === dir) { - break; - } - dir = parent; - } - return null; -} -export function formatVersionLine(importMetaUrl) { - const version = resolvePackageVersion(importMetaUrl); - const sha = resolveGitSha(importMetaUrl); - return sha ? `${version} (${sha})` : version; -} -export function getCliVersion() { - return formatVersionLine(import.meta.url); -} -//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/vendor/package/dist/lib/version.js.map b/vendor/package/dist/lib/version.js.map deleted file mode 100644 index 56ceddf..0000000 --- a/vendor/package/dist/lib/version.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/vendor/package/package.json b/vendor/package/package.json deleted file mode 100644 index 642bfe8..0000000 --- a/vendor/package/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@steipete/bird", - "version": "0.8.0", - "description": "CLI tool for tweeting and replying via Twitter/X GraphQL API", - "type": "module", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "bin": { - "bird": "dist/cli.js" - }, - "files": [ - "dist", - "README.md", - "CHANGELOG.md", - "LICENSE" - ], - "scripts": { - "build": "pnpm run build:dist && pnpm run build:binary", - "build:dist": "tsc && node scripts/copy-dist-assets.js", - "build:binary": "BIRD_VERSION=$(node -p \"require('./package.json').version\") BIRD_GIT_SHA=$(git rev-parse --short=8 HEAD 2>/dev/null || true) bun build --compile --minify --env=BIRD_* src/cli.ts --outfile bird", - "dev": "tsx src/index.ts", - "bird": "pnpm run build:dist && node dist/cli.js", - "test": "vitest run", - "test:watch": "vitest", - "test:live": "pnpm run build:dist && BIRD_LIVE=1 vitest run --no-file-parallelism tests/live/live.test.ts", - "test:live:all": "pnpm run build:dist && BIRD_LIVE=1 vitest run --no-file-parallelism tests/live/live-all.test.ts", - "lint": "pnpm run lint:biome && pnpm run lint:oxlint", - "lint:biome": "biome check .", - "lint:oxlint": "oxlint --type-aware --tsconfig tsconfig.oxlint.json --import-plugin --node-plugin --vitest-plugin --deny-warnings src tests scripts", - "lint:fix": "pnpm run lint:biome:fix && pnpm run lint:oxlint:fix", - "lint:biome:fix": "biome check --write .", - "lint:oxlint:fix": "oxlint --type-aware --tsconfig tsconfig.oxlint.json --import-plugin --node-plugin --vitest-plugin --deny-warnings --fix src tests scripts", - "format": "biome format --write .", - "binary": "pnpm run build:binary", - "graphql:update": "tsx scripts/update-query-ids.ts" - }, - "dependencies": { - "@steipete/sweet-cookie": "0.1.0", - "commander": "^14.0.2", - "json5": "^2.2.3", - "kleur": "^4.1.5" - }, - "pnpm": { - "patchedDependencies": { - "@steipete/sweet-cookie": "patches/@steipete__sweet-cookie.patch" - } - }, - "devDependencies": { - "@biomejs/biome": "^2.3.10", - "@types/node": "^25.0.3", - "@vitest/coverage-v8": "4.0.16", - "oxlint": "^1.36.0", - "oxlint-tsgolint": "^0.10.0", - "tsx": "^4.21.0", - "typescript": "^5.9.3", - "vitest": "^4.0.16" - }, - "engines": { - "node": ">=22" - } -} diff --git a/vendor/steipete-bird-0.8.0.tgz b/vendor/steipete-bird-0.8.0.tgz deleted file mode 100644 index 8c2d1cd58100e47632bd2ec452aca34b32259961..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126139 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

1<8huZ*XyLax3$+K7c}zv*T7k~ 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