diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index c5bec2b..21ec5c7 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "last30days", - "version": "3.0.0", + "version": "3.0.1", "description": "Research any topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, GitHub, and 5+ more sources. AI agent scores by upvotes, likes, and real money - not editors.", "author": { "name": "Matt Van Horn", diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..20465e4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,43 @@ +# Exclude non-runtime files from `git archive` output. +# Used by scripts/build-skill.sh to produce a claude.ai-upload-ready .skill file. +# See docs/plans/2026-04-14-001-fix-skill-upload-200-file-limit-plan.md. + +# Anthropic canonical skill-packaging excludes +# (mirrors anthropics/skills/skills/skill-creator/scripts/package_skill.py) +__pycache__/ export-ignore +node_modules/ export-ignore +*.pyc export-ignore +.DS_Store export-ignore +evals/ export-ignore + +# Dev, docs, test, and media - not needed at skill runtime +tests/ export-ignore +docs/ export-ignore +fixtures/ export-ignore +assets/ export-ignore + +# Second SKILL.md files would confuse claude.ai's uploader +# (skills/last30days/ is an internal spec; skills/last30days-nux/ is a symlink) +skills/ export-ignore + +# Historical + repo-only manifests +SKILL-original.md export-ignore +SPEC.md export-ignore +TASKS.md export-ignore +test-run.log export-ignore +CONTRIBUTORS.md export-ignore +HERMES_SETUP.md export-ignore +release-notes.md export-ignore +CHANGELOG.md export-ignore +uv.lock export-ignore + +# Platform adapters - skill-upload path is platform-agnostic +.agents/ export-ignore +.codex-plugin/ export-ignore +.hermes-plugin/ export-ignore +.claude-plugin/ export-ignore + +# Build config itself +.clawhubignore export-ignore +.gitignore export-ignore +.gitattributes export-ignore diff --git a/.gitignore b/.gitignore index 8ba4d4b..82ca0e9 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,9 @@ mise.toml .venv/ .coverage htmlcov/ + +# Root vendor/ is accidental - real vendored client lives at scripts/lib/vendor/bird-search/ +/vendor/ + +# build artifact from scripts/build-skill.sh +/dist/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 295bd04..9016772 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.0.1] - 2026-04-14 + +### Fixed + +- **Skill upload packaging** - `scripts/build-skill.sh` produces a claude.ai-upload-ready `.skill` file that fits under the 200-file cap. Previously, zipping the repo hit 406 files and the "Upload skill" UI rejected it outright. +- **SKILL.md description length** - trimmed from 228 to 167 chars (Anthropic caps descriptions at 200). + +### Removed + +- Unused root `vendor/` directory (215 files from an accidental commit in PR #48 - the real vendored X client lives at `scripts/lib/vendor/bird-search/`). +- Legacy top-level `plans/` directory (superseded by `docs/plans/`; both plans described work that was already shipped in v3). + +### Added + +- `.gitattributes` with `export-ignore` entries so `git archive` drops tests, docs, fixtures, assets, historical manifests, and internal skill subdirs. Mirrors Anthropic's canonical `package_skill.py` exclusions. +- `scripts/build-skill.sh` - one-command path to produce `dist/last30days.skill` with a single top-level `last30days/` folder, defensive `=200` file check, and dirty-tree refusal. +- `README.md` section documenting the claude.ai skill upload workflow. + ## [3.0.0] - 2026-04-11 ### Highlights diff --git a/README.md b/README.md index 3b5875c..64ed341 100644 --- a/README.md +++ b/README.md @@ -182,6 +182,17 @@ Workarounds: git clone https://github.com/mvanhorn/last30days-skill.git ~/.claude/skills/last30days ``` +### Upload as a Claude Skill (claude.ai) + +To upload `last30days` via the claude.ai skill UI, produce a `.skill` file: + +```bash +bash scripts/build-skill.sh +# -> dist/last30days.skill +``` + +Then drag `dist/last30days.skill` into the "Upload skill" dialog. The script honors claude.ai's 200-file upload cap and ships a single `SKILL.md` at the skill-folder root. + Reddit (with comments), Hacker News, Polymarket, and GitHub work immediately. Zero configuration. Run `/last30days` once and the setup wizard unlocks more sources in 30 seconds. ## Bring your own keys diff --git a/SKILL.md b/SKILL.md index 5286a72..a269316 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,7 +1,7 @@ --- name: last30days -version: "3.0.0" -description: "Multi-query social search with intelligent planning. Agent plans queries when possible, falls back to Gemini/OpenAI when not. Research any topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web." +version: "3.0.1" +description: "Multi-query social research across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web. Intelligent query planning with Gemini/OpenAI fallback." argument-hint: 'last30days AI video tools, last30days best noise cancelling headphones' allowed-tools: Bash, Read, Write, AskUserQuestion, WebSearch homepage: https://github.com/mvanhorn/last30days-skill @@ -59,7 +59,7 @@ metadata: - clawhub --- -# last30days v3.0.0: Research Any Topic from the Last 30 Days +# last30days v3.0.1: Research Any Topic from the Last 30 Days > **Permissions overview:** Reads public web/platform data and optionally saves research briefings to `~/Documents/Last30Days/`. X/Twitter search uses optional user-provided tokens (AUTH_TOKEN/CT0 env vars). Bluesky search uses optional app password (BSKY_HANDLE/BSKY_APP_PASSWORD env vars - create at bsky.app/settings/app-passwords). All credential usage and data writes are documented in the [Security & Permissions](#security--permissions) section. diff --git a/docs/plans/2026-04-14-001-fix-skill-upload-200-file-limit-plan.md b/docs/plans/2026-04-14-001-fix-skill-upload-200-file-limit-plan.md new file mode 100644 index 0000000..b60458b --- /dev/null +++ b/docs/plans/2026-04-14-001-fix-skill-upload-200-file-limit-plan.md @@ -0,0 +1,445 @@ +--- +title: Fix skill upload 200-file limit + packaging hygiene (public repo) +type: fix +status: active +date: 2026-04-14 +deepened: 2026-04-14 +--- + +# Fix skill upload 200-file limit + packaging hygiene (public repo) + +## Overview + +claude.ai's "Upload skill" UI rejects zips with more than 200 files. Zipping the public `mvanhorn/last30days-skill` repo produces 406 files, so the upload fails outright (evidence: Trevin's 2026-04-14 report). Root cause is an accidentally committed npm package under `vendor/` (215 files of dead weight from PR #48) plus the absence of a user-facing packaging path that matches Anthropic's canonical `.skill` format. + +Goal: let any user produce a compliant `last30days.skill` file in one command, matching Anthropic's skill-creator packaging contract, while also removing genuine dead weight from the repo (unused vendor, legacy plans). + +## Problem Frame + +- Trevin tried to upload the public repo as a Claude Skill and hit the 200-file limit +- 215 of 406 files are `vendor/package/` - an extracted `steipete-bird-0.8.0.tgz` that no code imports +- The real runtime X client lives at `scripts/lib/vendor/bird-search/` (15 files, referenced by `scripts/lib/bird_x.py:5` and `tests/test_bird_x.py:133`) +- `.clawhubignore` is ClawHub-specific and does not affect a hand-rolled zip upload +- Users have no documented path to produce a compliant upload zip +- Legacy top-level `plans/` folder holds pre-`docs/plans/` planning artifacts (confirmed waste by Matt, 2026-04-14 chat) + +## Requirements Trace + +- R1. After this plan lands, the produced upload zip is =200 files +- R2. The X/bird-search runtime still works - no regression in `tests/test_bird_x.py` +- R3. A contributor following README instructions can produce a Claude-Skill-upload-compatible `.skill` file in one command +- R4. Re-introduction of a root `vendor/` directory is prevented via `.gitignore` +- R5. No runtime behavior changes for existing skill consumers (Claude Code plugin, ClawHub, Gemini) +- R6. Produced zip matches Anthropic's canonical skill-folder layout: top-level directory named exactly `last30days` containing `SKILL.md` at its root, with YAML frontmatter `name: last30days` +- R7. Root `SKILL.md` frontmatter passes Anthropic's documented limits: `name` =64 chars (currently 10), `description` =200 chars (currently 228, needs trimming) +- R8. Produced zip contains exactly one `SKILL.md` (at `last30days/SKILL.md`) - no conflicting second skill spec, no symlinks that the uploader may reject or break +- R9. No runtime import reaches an excluded path (proven by import-graph audit, not just asserted) + +## Scope Boundaries + +Non-goals: +- Not touching the private repo or ClawHub publish flow (those have their own strip script) +- Not resolving the adjacent open issues (#239 plugin loader path-escape, #236 OpenClaw paths, #231 security scan, #190 version drift, #184 Gemini install) - each deserves its own plan +- Not redesigning the skill into self-contained subfolders or splitting scripts into a separate package +- Not adding CI enforcement of the 200-file cap (possible follow-up) + +## Context and Research + +### Anthropic's canonical skill-upload contract + +Sourced from Anthropic's skill-creator repo (`anthropics/skills/skills/skill-creator/scripts/package_skill.py`) and help-center docs: + +1. **Output format:** a `.skill` file, which is a standard zip with the `.skill` extension. +2. **Top-level entry in the zip must be a single directory** whose name matches `name:` in the skill's YAML frontmatter. Anthropic's packager uses `arcname = file_path.relative_to(skill_path.parent)`, so the zip always contains `/...`. +3. **That directory must contain `SKILL.md`** at its root (the packager explicitly validates this). +4. **Required YAML frontmatter:** `name` (=64 chars, lowercase + hyphens) and `description` (=200 chars). Our root SKILL.md already satisfies both. +5. **Canonical exclusions** applied by Anthropic's packager: + - Directories: `__pycache__`, `node_modules` + - Root-only: `evals/` + - File globs: `*.pyc` + - Files: `.DS_Store` +6. **Empirical limit:** the upload UI rejects =200 files (screenshot 2026-04-14). Not documented, but confirmed. +7. **Per-file size cap** is not publicly documented; general claude.ai uploads cap at 30MB per file. Conservative target: keep any single file under 10MB. + +### Relevant code and patterns in this repo + +- `SKILL.md` (root, 1382 lines, 80KB) - `name: last30days`, `user-invocable: true`. This is the skill. +- `skills/last30days/SKILL.md` (230 lines) - `name: last30days-v3-spec`, `user-invocable: false`. Internal architecture spec, separate skill name - not the upload target. +- `vendor/package/` - accidental commit from PR #48, 215 files, zero importers. +- `vendor/steipete-bird-0.8.0.tgz` - source tarball, also unused at runtime. +- `scripts/lib/vendor/bird-search/` - the ACTUAL vendored bird-search client (15 files). Keep. +- `plans/` (top-level, 2 files: `feat-add-websearch-source.md`, `fix-strict-date-filtering.md`) - legacy, pre-`docs/plans/` convention. Matt confirmed delete. +- `scripts/sync.sh` - deploys skill to `~/.claude`, `~/.agents`, `~/.codex`. Reference for runtime-required files. +- `.clawhubignore` - existing exclude list for the ClawHub path. Not used here, but good cross-reference for what is runtime-irrelevant. +- `.gitignore` - current dev excludes (`.venv/`, `__pycache__/`, `.DS_Store`, etc). + +### Institutional learnings + +- Private repo has `scripts/clawhub-publish.sh` + `scripts/strip_for_openclaw.py` that build a staging dir with only OpenClaw-safe files. Not needed for this public-path upload; `git archive` with `--prefix` is sufficient and dependency-free. +- PR #48 introduced `vendor/package/` unintentionally. No code imports from it. + +### File count math (verified via dry run) + +| Strategy | File count | Under cap? | +|---|---|---| +| Current repo, zip as-is | 406 | No | +| After `vendor/` deleted | 191 | Yes (thin margin) | +| After `vendor/` + `plans/` deleted, no further excludes | 189 | Yes | +| With full planned excludes (Anthropic canonical + tests/docs/fixtures/assets/dev manifests/nested skill dirs) | 81 | Comfortable headroom | + +Dry run run on 2026-04-14 against the current working tree. Simulated the proposed `.gitattributes` with a `find` filter matching the intended exclude list. Result: 81 files, 868KB uncompressed. Actual `git archive` output may differ slightly (by 1-2 files) but will land well under 200. + +### Runtime import audit (proves core experience unchanged) + +Grepped all `import`/`from` statements in `scripts/**/*.py`. Non-stdlib imports resolve to only: +- `lib.*` (internal package at `scripts/lib/`) +- `store` (internal module at `scripts/store.py`) +- `scripts.*` (internal) + +No runtime import reaches `tests/`, `docs/`, `fixtures/`, `vendor/` (root), `plans/`, `assets/`, `.agents/`, `.codex-plugin/`, `.hermes-plugin/`, or any other excluded path. The shipped `.skill` file contains everything the runtime needs and nothing it does not. + +### Symlink and multi-SKILL.md audit + +The repo contains one symlink: `skills/last30days-nux/SKILL.md -> ../../SKILL.md`. Three SKILL.md files in total: +- `SKILL.md` (root, `name: last30days`, `user-invocable: true`) - the actual skill +- `skills/last30days/SKILL.md` (`name: last30days-v3-spec`, `user-invocable: false`) - internal architecture doc +- `skills/last30days-nux/SKILL.md` (symlink to root) - nux variant reference + +Shipping all three inside one zip creates two rejection risks: +1. Uploader sees multiple `SKILL.md` with conflicting `name:` values and refuses or misbinds +2. `git archive` stores the symlink as a symlink entry; the uploader may reject symlinked entries on principle + +Both risks disappear by excluding `skills/` entirely from the zip. The two internal skill definitions are not needed for claude.ai skill execution - they serve the repo as documentation / Claude Code plugin layout, not the direct upload path. + +### Sources consulted + +- Anthropic skill help center article (general upload guidance, no file-count number documented) +- [anthropics/skills README](https://github.com/anthropics/skills/blob/main/README.md) - YAML frontmatter requirements +- [anthropics/skills package_skill.py](https://github.com/anthropics/skills/blob/main/skills/skill-creator/scripts/package_skill.py) - canonical exclusions and arcname shape +- Trevin's 2026-04-14 chat screenshot (empirical 200-file cap) +- Adjacent issues #239, #236, #190 for context on current packaging mess + +## Key Technical Decisions + +- **Delete `vendor/` outright** rather than gitignore-and-leave. Pure dead weight. Rationale: the real vendored client is at `scripts/lib/vendor/bird-search/`, root `vendor/` has zero importers; keeping it invites re-upload. +- **Delete top-level `plans/`** (Matt confirmed). Rationale: superseded by `docs/plans/`. Moving content into `docs/plans/` if any is still relevant; otherwise just delete. +- **Produce a `.skill` file (not a plain `.zip`)** via `git archive --format=zip --prefix=last30days/ -o dist/last30days.skill HEAD`. Rationale: matches Anthropic's canonical contract - zip extension is cosmetic, but the `.skill` affordance is what the upload UI expects. +- **Use `git archive` + `.gitattributes export-ignore`** rather than a Python packager. Rationale: no Python dependency at build time, honors git's declarative exclude model, reusable by anyone running `git archive` directly. +- **Mirror Anthropic's canonical exclusions in `.gitattributes`** (`__pycache__`, `node_modules`, `*.pyc`, `.DS_Store`, `evals/`) alongside our repo-specific excludes. Rationale: future-proof if a contributor adds node deps; keeps us aligned with the Anthropic baseline. +- **Exclude `skills/` from the upload zip** (covers `skills/last30days/SKILL.md` and `skills/last30days-nux/SKILL.md`). Rationale: shipping multiple SKILL.md files with different `name:` values is a likely uploader-rejection cause, and the symlink at `skills/last30days-nux/SKILL.md` is an independent rejection risk. Repo contents stay intact - Claude Code plugin and GitHub viewers still see the directory. +- **Keep `.clawhubignore` as-is** - it serves the ClawHub publish path separately. Do not merge the two lists; different consumers, different exclusions. +- **Prevent regression with a `/vendor/` entry in `.gitignore`** (leading slash, so `scripts/lib/vendor/` is unaffected). +- **Do not address #239 `"skills": ["./"]` path-escape here.** That is a plugin.json change, not a zip-packaging change. Separate plan. + +## Open Questions + +### Resolved during planning + +- Is root `vendor/` used? No. Grep for `vendor/package`, `vendor/steipete`, `from vendor` returns zero hits outside `scripts/lib/vendor/`. +- Is `scripts/lib/vendor/bird-search/` safe? Yes. Referenced by `scripts/lib/bird_x.py:5` and `tests/test_bird_x.py:133`. +- What name does the top-level zip directory need? `last30days` - matches `name: last30days` in the root `SKILL.md` frontmatter. +- Does `skills/last30days/SKILL.md` conflict? No. It declares a different skill name (`last30days-v3-spec`) and is `user-invocable: false`. Not the upload target, and safe to ship inside the zip. +- Is there a documented file-count cap? No. 200 is empirical from the UI error screenshot. +- Should we gate this on a version bump? Yes, 3.0.0 - 3.0.1. Same API, same runtime, smaller and uploadable package. + +### Deferred to implementation + +- Exact `.gitattributes` export-ignore entries may need one tuning pass if `git archive` surfaces a file we forgot. Verification step catches it. +- Whether to delete `SKILL-original.md` from the repo entirely or just export-ignore. Leaning export-ignore to preserve git history context. +- Whether any content in `plans/*.md` is still live reference material. If so, move to `docs/plans/` under new naming convention; if not, delete outright. + +## Implementation Units + +- [ ] **Unit 1: Remove accidental `vendor/` commit** + +**Goal:** Delete the root `vendor/` directory and the stray `.tgz`, both unused at runtime. + +**Requirements:** R1, R2, R5 + +**Dependencies:** None + +**Files:** +- Delete: `vendor/` (entire tree, 215 files) +- Delete: `vendor/steipete-bird-0.8.0.tgz` +- Modify: `.gitignore` (add `/vendor/` to prevent regression - leading slash to avoid matching `scripts/lib/vendor/`) + +**Approach:** +- Single commit: `chore: remove unused root vendor/ directory (215 files from PR #48)` +- Verify `scripts/lib/vendor/bird-search/` is untouched +- Verify no `from vendor` or `vendor/package` references appear in the diff + +**Patterns to follow:** +- Commit message style matches recent history + +**Test scenarios:** +- Happy path: `find . -type f -not -path './.git/*' | wc -l` returns =200 after commit +- Integration: `python -m pytest tests/test_bird_x.py -q` passes - confirms the real vendored client still resolves +- Integration: `bash scripts/sync.sh` completes without error + +**Verification:** +- Zero files remain under `vendor/` on `main` +- `tests/test_bird_x.py` still passes +- `.gitignore` now contains `/vendor/` + +- [ ] **Unit 2: Remove legacy top-level `plans/` directory** + +**Goal:** Delete the pre-`docs/plans/` folder (Matt confirmed waste). + +**Requirements:** R1, R5 + +**Dependencies:** None (independent of Unit 1) + +**Files:** +- Delete: `plans/feat-add-websearch-source.md` +- Delete: `plans/fix-strict-date-filtering.md` +- Delete: `plans/` (now empty) + +**Approach:** +- Skim both files first. If either still reflects real upcoming work, port it to `docs/plans/YYYY-MM-DD-NNN--*-plan.md` before deletion. If not, delete. +- Commit: `chore: remove legacy plans/ directory (superseded by docs/plans/)` + +**Test scenarios:** +- Test expectation: none - pure housekeeping, no code paths affected + +**Verification:** +- `plans/` does not exist on `main` +- Nothing in the repo references `plans/feat-add-websearch-source.md` or `plans/fix-strict-date-filtering.md` (grep to confirm) + +- [ ] **Unit 3: Declare zip-time excludes via `.gitattributes`** + +**Goal:** Use `export-ignore` so `git archive` produces a skill-shaped zip without hand-filtering. + +**Requirements:** R1, R3, R6 + +**Dependencies:** Unit 1, Unit 2 + +**Files:** +- Create: `.gitattributes` + +**Approach:** +- Anthropic canonical exclusions (match `package_skill.py`): + - `__pycache__/` export-ignore + - `node_modules/` export-ignore + - `*.pyc` export-ignore + - `.DS_Store` export-ignore + - `evals/` export-ignore +- Repo-specific exclusions (dev/docs/build artifacts not needed at runtime): + - `tests/` (64 files) + - `docs/` (17 files including `docs/test-results/`) + - `fixtures/` (7 files) + - `assets/` (5 files, 14MB of README media) + - `SKILL-original.md` (historical) + - `SPEC.md`, `TASKS.md`, `test-run.log`, `CONTRIBUTORS.md`, `HERMES_SETUP.md`, `release-notes.md`, `CHANGELOG.md` + - `uv.lock` + - `.agents/`, `.codex-plugin/`, `.hermes-plugin/`, `.claude-plugin/` (platform adapters - skill-upload path is platform-agnostic) + - `.clawhubignore`, `.gitignore`, `.gitattributes` + - `skills/` (avoid second SKILL.md with conflicting `name:`; also drops the symlink at `skills/last30days-nux/SKILL.md`) +- Keep in archive: `scripts/` (runtime), root `SKILL.md`, `README.md`, `LICENSE`, `pyproject.toml`, `CLAUDE.md`, `gemini-extension.json`, `agents/`, `hooks/` + +**Technical design:** *(directional guidance, not implementation spec)* + +```gitattributes +# Anthropic canonical skill-packaging excludes +__pycache__/ export-ignore +node_modules/ export-ignore +*.pyc export-ignore +.DS_Store export-ignore +evals/ export-ignore + +# Repo-specific: tests + docs + media (not runtime) +tests/ export-ignore +docs/ export-ignore +fixtures/ export-ignore +assets/ export-ignore + +# Repo-specific: historical + dev manifests +SKILL-original.md export-ignore +SPEC.md export-ignore +... +``` + +**Patterns to follow:** +- `.gitattributes` export-ignore syntax per [git docs](https://git-scm.com/docs/gitattributes#_creating_an_archive) + +**Test scenarios:** +- Happy path: `git archive --format=zip HEAD | zipinfo -1 - | wc -l` returns =200 +- Happy path: zip contains `SKILL.md`, `scripts/last30days.py`, `scripts/lib/bird_x.py`, `scripts/lib/vendor/bird-search/lib/cookies.js` +- Happy path: zip contains exactly one `SKILL.md` entry at the top level (not multiple, not a symlink) +- Edge case: zip does NOT contain `tests/`, `docs/`, `assets/*.jpeg`, `*.mp3`, `skills/` +- Edge case: no symlink entries in the zip (`unzip -l` lines starting with `l`) +- Edge case: zip size stays under ~2MB (if over 5MB an unintended large file slipped through) + +**Verification:** +- Running `git archive --format=zip --output=/tmp/test.zip HEAD && unzip -l /tmp/test.zip | tail -1` reports =200 files and a sane byte count + +- [ ] **Unit 4: Add `scripts/build-skill.sh` user-facing builder** + +**Goal:** One-command path to produce a Claude-upload-compatible `.skill` file. + +**Requirements:** R3, R6 + +**Dependencies:** Unit 3 + +**Files:** +- Create: `scripts/build-skill.sh` +- Modify: `.gitignore` (add `/dist/` for build artifact) + +**Approach:** +- Bash, executable, `set -euo pipefail` +- `git archive --format=zip --prefix=last30days/ --output=dist/last30days.skill HEAD` +- The `--prefix=last30days/` nests everything under `last30days/` inside the zip, matching Anthropic's arcname contract +- Refuse to build if working tree is dirty (`git diff --quiet && git diff --cached --quiet`) +- Print file count, archive size, and path to paste into the upload UI +- Fail with a clear error if count exceeds 200 (defensive check) + +**Technical design:** *(directional guidance, not implementation spec)* + +```bash +#!/usr/bin/env bash +# build-skill.sh - package repo as a Claude-upload-ready .skill file +# Usage: bash scripts/build-skill.sh +set -euo pipefail + +if ! git diff --quiet || ! git diff --cached --quiet; then + echo "error: working tree is dirty - commit or stash first" >&2; exit 1 +fi + +mkdir -p dist +out="dist/last30days.skill" +git archive --format=zip --prefix=last30days/ --output="$out" HEAD + +count=$(unzip -l "$out" | tail -1 | awk '{print $2}') +[ "$count" -le 200 ] || { echo "error: $count files in zip, cap is 200" >&2; exit 1; } +echo "built $out ($count files, $(du -h "$out" | cut -f1))" +``` + +**Patterns to follow:** +- Style of `scripts/sync.sh` (bash, top-of-file comment, `set -euo pipefail`) + +**Test scenarios:** +- Happy path: clean tree, `bash scripts/build-skill.sh` produces `dist/last30days.skill` with =200 files and the top-level entry is `last30days/` +- Happy path: `unzip -p dist/last30days.skill last30days/SKILL.md | head -2` shows `---` (frontmatter start) confirming SKILL.md is at the right location +- Edge case: dirty working tree - script exits non-zero with clear error +- Edge case: idempotent - running twice overwrites cleanly +- Error path: if a future change inflates file count past 200, the defensive `[ "$count" -le 200 ]` check fails and the script refuses to produce a broken output + +**Verification:** +- `bash scripts/build-skill.sh && unzip -l dist/last30days.skill | grep "^ 0 .* last30days/$"` confirms the prefix directory exists +- `unzip -l dist/last30days.skill | grep "last30days/SKILL.md"` confirms SKILL.md is at the expected path +- `unzip -l dist/last30days.skill | grep -c "SKILL.md"` returns exactly 1 +- `unzip -l dist/last30days.skill | awk '{print $NF}' | grep -v "^$" | sort -u | grep "skills/" || true` returns nothing (confirms internal skill dirs excluded) +- Gate: a contributor must run `bash scripts/build-skill.sh` on their branch and attach the produced file to their PR before merging any change that touches `.gitattributes` or exclude-sensitive paths + +- [ ] **Unit 5: Document the upload path in README** + +**Goal:** Users know how to produce an upload `.skill` without reading the source. + +**Requirements:** R3 + +**Dependencies:** Unit 4 + +**Files:** +- Modify: `README.md` (add a short "Upload as a Claude Skill" subsection under the existing install section) + +**Approach:** +- One paragraph plus a single command block: `bash scripts/build-skill.sh` +- Mention the 200-file cap as context so future changes do not bust it +- Point users at the claude.ai skill upload UI (note: link only if a stable URL exists at implementation time, otherwise describe the UI path) + +**Test scenarios:** +- Test expectation: none - pure documentation change + +**Verification:** +- `grep -n "build-skill" README.md` returns a hit +- Instructions match actual script behavior + +- [ ] **Unit 6: Trim SKILL.md description to =200 chars** + +**Goal:** Make root `SKILL.md` frontmatter pass Anthropic's documented `description` limit. + +**Requirements:** R7 + +**Dependencies:** None (independent of other units) + +**Files:** +- Modify: `SKILL.md` (frontmatter `description:` field only) + +**Approach:** +- Current description is 228 chars. Cut 28+ chars without losing signal. +- Suggested rewrite (196 chars): `"Multi-query social search with planned queries. Research any topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web. Gemini/OpenAI fallback when needed."` +- Confirm the trimmed version still surfaces for the right prompts (smoke test: run `python scripts/last30days.py "test" --emit=compact` and confirm behavior unchanged; description is metadata, not runtime input) +- Update `skills/last30days/SKILL.md` description too if it exceeds 200 chars (check during implementation) + +**Test scenarios:** +- Happy path: `python3 -c "import re; d=open('SKILL.md').read(); m=re.search(r'^description:\s*\"(.+?)\"', d, re.M); assert len(m.group(1)) <= 200, len(m.group(1))"` passes + +**Verification:** +- Description field is =200 chars in root SKILL.md +- Skill still triggers on relevant prompts (manual smoke check) + +- [ ] **Unit 7: Version bump and changelog** + +**Goal:** Ship as 3.0.1 so consumers see the packaging fix. + +**Requirements:** R5 + +**Dependencies:** Units 1-6 + +**Files:** +- Modify: `.claude-plugin/plugin.json` (3.0.0 - 3.0.1) +- Modify: `SKILL.md` frontmatter version +- Modify: `skills/last30days/SKILL.md` frontmatter version +- Modify: `gemini-extension.json` version (note: #190 flags this as stale at 2.9.5; bumping here partially addresses that but full resolution is out of scope) +- Modify: `CHANGELOG.md` +- Modify: `release-notes.md` + +**Approach:** +- Atomic version bump across all manifests +- Changelog entry: "Packaging: `scripts/build-skill.sh` produces a compliant `.skill` file; removed unused root `vendor/` (215 files) and legacy `plans/`; repo file count fits under claude.ai's 200-file upload cap" + +**Test scenarios:** +- Happy path: `grep -rn "3.0.1" SKILL.md skills/last30days/SKILL.md .claude-plugin/plugin.json gemini-extension.json` returns four consistent hits +- Integration: `bash scripts/sync.sh` completes cleanly + +**Verification:** +- All four version declarations read `3.0.1` +- CHANGELOG and release-notes have dated entries + +## System-Wide Impact + +- **Interaction graph:** Skill-runtime import graph is unchanged. Removed code (root `vendor/`, `plans/`) has zero importers. +- **Error propagation:** `build-skill.sh` is a new surface; failure mode is non-zero exit with clear stderr. No runtime error paths touched. +- **State lifecycle risks:** None. `dist/` is gitignored build output. +- **API surface parity:** No change to any user-facing API, CLI flag, config key, or SKILL.md contract. +- **Integration coverage:** `tests/test_bird_x.py` exercises the real vendored client - if it regressed, the test fails. Run it after Unit 1. +- **Unchanged invariants:** `scripts/lib/vendor/bird-search/` stays. `scripts/sync.sh` deploy behavior unchanged. ClawHub publish flow (private repo) untouched. Claude Code plugin install via GitHub URL still works. + +## Risks and Dependencies + +| Risk | Mitigation | +|------|------------| +| Deleting `vendor/` silently breaks something we missed | Run `pytest tests/test_bird_x.py` and `bash scripts/sync.sh` after the delete; grep for `vendor/package` before merging | +| claude.ai rejects the `.skill` file for a reason other than file count (e.g., frontmatter character, hidden file) | Test-upload the produced artifact against claude.ai once before merging; iterate on `.gitattributes` if needed | +| `.gitattributes` over-excludes and breaks the runtime skill | Unit 3 verification step explicitly checks runtime paths are present in the produced archive | +| A future PR re-vendors something at `/vendor/` and busts the 200 cap again | `/vendor/` in `.gitignore` plus the defensive `=200` check in `build-skill.sh` catches it | +| Version bump collides with in-flight PRs that also bump versions | Coordinate with #229, #217 which touched version strings; check before merging | +| `skills/last30days/SKILL.md` (internal spec) being shipped inside the zip confuses the claude.ai uploader | Resolved by excluding `skills/` from the zip (Unit 3). Internal spec remains in the repo for plugin consumers | +| `skills/last30days-nux/SKILL.md` is a symlink to `../../SKILL.md`; claude.ai may reject zips with symlink entries | Resolved by excluding `skills/` from the zip (Unit 3). Symlink never enters the archive | + +## Documentation and Operational Notes + +- Update README only (Unit 5). No runbook, no migration, no flag. +- No deployment step - plugin consumers get the packaging fix automatically on next update. +- Release notes flag: manual uploaders should re-zip via `scripts/build-skill.sh`. +- Opportunistic future work (out of scope here): CI check that fails PRs that push the zip over 200 files. + +## Sources and References + +- Trevin's 2026-04-14 chat screenshot: "Zip contains too many files (maximum 200)" +- [anthropics/skills README](https://github.com/anthropics/skills/blob/main/README.md) - YAML frontmatter requirements +- [anthropics/skills package_skill.py](https://github.com/anthropics/skills/blob/main/skills/skill-creator/scripts/package_skill.py) - canonical exclusions, arcname convention, validation gates +- [claude.ai skill help center](https://support.claude.com/en/articles/12512180-use-skills-in-claude) - upload failure modes (zip size, folder-name mismatch, missing SKILL.md) +- PR #48 (2026-02) - the merge that introduced `vendor/package/` +- Open issues adjacent but out of scope: #239, #236, #231, #190, #184 +- Related code: `scripts/lib/bird_x.py:5`, `tests/test_bird_x.py:133`, `.clawhubignore`, `scripts/sync.sh`, root `SKILL.md` frontmatter +- Private-repo reference pattern: `scripts/clawhub-publish.sh` + `scripts/strip_for_openclaw.py` - not copied here; `git archive` is simpler for the public path diff --git a/gemini-extension.json b/gemini-extension.json index 062efdf..9111c79 100644 --- a/gemini-extension.json +++ b/gemini-extension.json @@ -1,6 +1,6 @@ { "name": "last30days-skill", - "version": "3.0.0", + "version": "3.0.1", "description": "Research a topic from the last 30 days across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web.", "settings": [ { diff --git a/plans/feat-add-websearch-source.md b/plans/feat-add-websearch-source.md deleted file mode 100644 index d9cc103..0000000 --- a/plans/feat-add-websearch-source.md +++ /dev/null @@ -1,395 +0,0 @@ -# feat: Add WebSearch as Third Source (Zero-Config Fallback) - -## Overview - -Add Claude's built-in WebSearch tool as a third research source for `/last30days`. This enables the skill to work **out of the box with zero API keys** while preserving the primacy of Reddit/X as the "voice of real humans with popularity signals." - -**Key principle**: WebSearch is supplementary, not primary. Real human voices on Reddit/X with engagement metrics (upvotes, likes, comments) are more valuable than general web content. - -## Problem Statement - -Currently `/last30days` requires at least one API key (OpenAI or xAI) to function. Users without API keys get an error. Additionally, web search could fill gaps where Reddit/X coverage is thin. - -**User requirements**: -- Work out of the box (no API key needed) -- Must NOT overpower Reddit/X results -- Needs proper weighting -- Validate with before/after testing - -## Proposed Solution - -### Weighting Strategy: "Engagement-Adjusted Scoring" - -**Current formula** (same for Reddit/X): -``` -score = 0.45*relevance + 0.25*recency + 0.30*engagement - penalties -``` - -**Problem**: WebSearch has NO engagement metrics. Giving it `DEFAULT_ENGAGEMENT=35` with `-10 penalty` = 25 base, which still competes unfairly. - -**Solution**: Source-specific scoring with **engagement substitution**: - -| Source | Relevance | Recency | Engagement | Source Penalty | -|--------|-----------|---------|------------|----------------| -| Reddit | 45% | 25% | 30% (real metrics) | 0 | -| X | 45% | 25% | 30% (real metrics) | 0 | -| WebSearch | 55% | 35% | 0% (no data) | -15 points | - -**Rationale**: -- WebSearch items compete on relevance + recency only (reweighted to 100%) -- `-15 point source penalty` ensures WebSearch ranks below comparable Reddit/X items -- High-quality WebSearch can still surface (score 60-70) but won't dominate (Reddit/X score 70-85) - -### Mode Behavior - -| API Keys Available | Default Behavior | `--include-web` | -|--------------------|------------------|-----------------| -| None | **WebSearch only** | n/a | -| OpenAI only | Reddit only | Reddit + WebSearch | -| xAI only | X only | X + WebSearch | -| Both | Reddit + X | Reddit + X + WebSearch | - -**CLI flag**: `--include-web` (default: false when other sources available) - -## Technical Approach - -### Architecture - -``` -┌─────────────────────────────────────────────────────────────────┐ -│ last30days.py orchestrator │ -├─────────────────────────────────────────────────────────────────┤ -│ run_research() │ -│ ├── if sources includes "reddit": openai_reddit.search_reddit()│ -│ ├── if sources includes "x": xai_x.search_x() │ -│ └── if sources includes "web": websearch.search_web() ← NEW │ -└─────────────────────────────────────────────────────────────────┘ - │ - ▼ -┌─────────────────────────────────────────────────────────────────┐ -│ Processing Pipeline │ -├─────────────────────────────────────────────────────────────────┤ -│ normalize_websearch_items() → WebSearchItem schema ← NEW │ -│ score_websearch_items() → engagement-free scoring ← NEW │ -│ dedupe_websearch() → deduplication ← NEW │ -│ render_websearch_section() → output formatting ← NEW │ -└─────────────────────────────────────────────────────────────────┘ -``` - -### Implementation Phases - -#### Phase 1: Schema & Core Infrastructure - -**Files to create/modify:** - -```python -# scripts/lib/websearch.py (NEW) -"""Claude WebSearch API client for general web discovery.""" - -WEBSEARCH_PROMPT = """Search the web for content about: {topic} - -CRITICAL: Only include results from the last 30 days (after {from_date}). - -Find {min_items}-{max_items} high-quality, relevant web pages. Prefer: -- Blog posts, tutorials, documentation -- News articles, announcements -- Authoritative sources (official docs, reputable publications) - -AVOID: -- Reddit (covered separately) -- X/Twitter (covered separately) -- YouTube without transcripts -- Forum threads without clear answers - -Return ONLY valid JSON: -{{ - "items": [ - {{ - "title": "Page title", - "url": "https://...", - "source_domain": "example.com", - "snippet": "Brief excerpt (100-200 chars)", - "date": "YYYY-MM-DD or null", - "why_relevant": "Brief explanation", - "relevance": 0.85 - }} - ] -}} -""" - -def search_web(topic: str, from_date: str, to_date: str, depth: str = "default") -> dict: - """Search web using Claude's built-in WebSearch tool. - - NOTE: This runs INSIDE Claude Code, so we use the WebSearch tool directly. - No API key needed - uses Claude's session. - """ - # Implementation uses Claude's web_search_20250305 tool - pass - -def parse_websearch_response(response: dict) -> list[dict]: - """Parse WebSearch results into normalized format.""" - pass -``` - -```python -# scripts/lib/schema.py - ADD WebSearchItem - -@dataclass -class WebSearchItem: - """Normalized web search item.""" - id: str - title: str - url: str - source_domain: str # e.g., "medium.com", "github.com" - snippet: str - date: Optional[str] = None - date_confidence: str = "low" - relevance: float = 0.5 - why_relevant: str = "" - subs: SubScores = field(default_factory=SubScores) - score: int = 0 - - def to_dict(self) -> Dict[str, Any]: - return { - 'id': self.id, - 'title': self.title, - 'url': self.url, - 'source_domain': self.source_domain, - 'snippet': self.snippet, - 'date': self.date, - 'date_confidence': self.date_confidence, - 'relevance': self.relevance, - 'why_relevant': self.why_relevant, - 'subs': self.subs.to_dict(), - 'score': self.score, - } -``` - -#### Phase 2: Scoring System Updates - -```python -# scripts/lib/score.py - ADD websearch scoring - -# New constants -WEBSEARCH_SOURCE_PENALTY = 15 # Points deducted for lacking engagement - -# Reweighted for no engagement -WEBSEARCH_WEIGHT_RELEVANCE = 0.55 -WEBSEARCH_WEIGHT_RECENCY = 0.45 - -def score_websearch_items(items: List[schema.WebSearchItem]) -> List[schema.WebSearchItem]: - """Score WebSearch items WITHOUT engagement metrics. - - Uses reweighted formula: 55% relevance + 45% recency - 15pt source penalty - """ - for item in items: - rel_score = int(item.relevance * 100) - rec_score = dates.recency_score(item.date) - - item.subs = schema.SubScores( - relevance=rel_score, - recency=rec_score, - engagement=0, # Explicitly zero - no engagement data - ) - - overall = ( - WEBSEARCH_WEIGHT_RELEVANCE * rel_score + - WEBSEARCH_WEIGHT_RECENCY * rec_score - ) - - # Apply source penalty (WebSearch < Reddit/X) - overall -= WEBSEARCH_SOURCE_PENALTY - - # Apply date confidence penalty (same as other sources) - if item.date_confidence == "low": - overall -= 10 - elif item.date_confidence == "med": - overall -= 5 - - item.score = max(0, min(100, int(overall))) - - return items -``` - -#### Phase 3: Orchestrator Integration - -```python -# scripts/last30days.py - UPDATE run_research() - -def run_research(...) -> tuple: - """Run the research pipeline. - - Returns: (reddit_items, x_items, web_items, raw_openai, raw_xai, - raw_websearch, reddit_error, x_error, web_error) - """ - # ... existing Reddit/X code ... - - # WebSearch (new) - web_items = [] - raw_websearch = None - web_error = None - - if sources in ("all", "web", "reddit-web", "x-web"): - if progress: - progress.start_web() - - try: - raw_websearch = websearch.search_web(topic, from_date, to_date, depth) - web_items = websearch.parse_websearch_response(raw_websearch) - except Exception as e: - web_error = f"{type(e).__name__}: {e}" - - if progress: - progress.end_web(len(web_items)) - - return (reddit_items, x_items, web_items, raw_openai, raw_xai, - raw_websearch, reddit_error, x_error, web_error) -``` - -#### Phase 4: CLI & Environment Updates - -```python -# scripts/last30days.py - ADD CLI flag - -parser.add_argument( - "--include-web", - action="store_true", - help="Include general web search alongside Reddit/X (lower weighted)", -) - -# scripts/lib/env.py - UPDATE get_available_sources() - -def get_available_sources(config: dict) -> str: - """Determine available sources. WebSearch always available (no API key).""" - has_openai = bool(config.get('OPENAI_API_KEY')) - has_xai = bool(config.get('XAI_API_KEY')) - - if has_openai and has_xai: - return 'both' # WebSearch available but not default - elif has_openai: - return 'reddit' - elif has_xai: - return 'x' - else: - return 'web' # Fallback: WebSearch only (no keys needed) -``` - -## Acceptance Criteria - -### Functional Requirements - -- [x] Skill works with zero API keys (WebSearch-only mode) -- [x] `--include-web` flag adds WebSearch to Reddit/X searches -- [x] WebSearch items have lower average scores than Reddit/X items with similar relevance -- [x] WebSearch results exclude Reddit/X URLs (handled separately) -- [x] Date filtering uses natural language ("last 30 days") in prompt -- [x] Output clearly labels source type: `[WEB]`, `[Reddit]`, `[X]` - -### Non-Functional Requirements - -- [x] WebSearch adds <10s latency to total research time (0s - deferred to Claude) -- [x] Graceful degradation if WebSearch fails -- [ ] Cache includes WebSearch results appropriately - -### Quality Gates - -- [x] Before/after testing shows WebSearch doesn't dominate rankings (via -15pt penalty) -- [x] Test: 10 Reddit + 10 X + 10 WebSearch → WebSearch avg score 15-20pts lower (scoring formula verified) -- [x] Test: WebSearch-only mode produces useful results for common topics - -## Testing Plan - -### Before/After Comparison Script - -```python -# tests/test_websearch_weighting.py - -""" -Test harness to validate WebSearch doesn't overpower Reddit/X. - -Run same queries with: -1. Reddit + X only (baseline) -2. Reddit + X + WebSearch (comparison) - -Verify: WebSearch items rank lower on average. -""" - -TEST_QUERIES = [ - "best practices for react server components", - "AI coding assistants comparison", - "typescript 5.5 new features", -] - -def test_websearch_weighting(): - for query in TEST_QUERIES: - # Run without WebSearch - baseline = run_research(query, sources="both") - baseline_scores = [item.score for item in baseline.reddit + baseline.x] - - # Run with WebSearch - with_web = run_research(query, sources="both", include_web=True) - web_scores = [item.score for item in with_web.web] - reddit_x_scores = [item.score for item in with_web.reddit + with_web.x] - - # Assertions - avg_reddit_x = sum(reddit_x_scores) / len(reddit_x_scores) - avg_web = sum(web_scores) / len(web_scores) if web_scores else 0 - - assert avg_web < avg_reddit_x - 10, \ - f"WebSearch avg ({avg_web}) too close to Reddit/X avg ({avg_reddit_x})" - - # Check top 5 aren't all WebSearch - top_5 = sorted(with_web.reddit + with_web.x + with_web.web, - key=lambda x: -x.score)[:5] - web_in_top_5 = sum(1 for item in top_5 if isinstance(item, WebSearchItem)) - assert web_in_top_5 <= 2, f"Too many WebSearch items in top 5: {web_in_top_5}" -``` - -### Manual Test Scenarios - -| Scenario | Expected Outcome | -|----------|------------------| -| No API keys, run `/last30days AI tools` | WebSearch-only results, useful output | -| Both keys + `--include-web`, run `/last30days react` | Mix of all 3 sources, Reddit/X dominate top 10 | -| Niche topic (no Reddit/X coverage) | WebSearch fills gap, becomes primary | -| Popular topic (lots of Reddit/X) | WebSearch present but lower-ranked | - -## Dependencies & Prerequisites - -- Claude Code's WebSearch tool (`web_search_20250305`) - already available -- No new API keys required -- Existing test infrastructure in `tests/` - -## Risk Analysis & Mitigation - -| Risk | Likelihood | Impact | Mitigation | -|------|------------|--------|------------| -| WebSearch returns stale content | Medium | Medium | Enforce date in prompt, apply low-confidence penalty | -| WebSearch dominates rankings | Low | High | Source penalty (-15pts), testing validates | -| WebSearch adds spam/low-quality | Medium | Medium | Exclude social media domains, domain filtering | -| Date parsing unreliable | High | Medium | Accept "low" confidence as normal for WebSearch | - -## Future Considerations - -1. **Domain authority scoring**: Could proxy engagement with domain reputation -2. **User-configurable weights**: Let users adjust WebSearch penalty -3. **Domain whitelist/blacklist**: Filter WebSearch to trusted sources -4. **Parallel execution**: Run all 3 sources concurrently for speed - -## References - -### Internal References -- Scoring algorithm: `scripts/lib/score.py:8-15` -- Source detection: `scripts/lib/env.py:57-72` -- Schema patterns: `scripts/lib/schema.py:76-138` -- Orchestrator: `scripts/last30days.py:54-164` - -### External References -- Claude WebSearch docs: https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool -- WebSearch pricing: $10/1K searches + token costs -- Date filtering limitation: No explicit date params, use natural language - -### Research Findings -- Reddit upvotes are ~12% of ranking value in SEO (strong signal) -- E-E-A-T framework: Engagement metrics = trust signal -- MSA2C2 approach: Dynamic weight learning for multi-source aggregation diff --git a/plans/fix-strict-date-filtering.md b/plans/fix-strict-date-filtering.md deleted file mode 100644 index 2c0cd85..0000000 --- a/plans/fix-strict-date-filtering.md +++ /dev/null @@ -1,328 +0,0 @@ -# fix: Enforce Strict 30-Day Date Filtering - -## Overview - -The `/last30days` skill is returning content older than 30 days, violating its core promise. Analysis shows: -- **Reddit**: Only 40% of results within 30 days (9/15 were older, some from 2022!) -- **X**: 100% within 30 days (working correctly) -- **WebSearch**: 90% had unknown dates (can't verify freshness) - -## Problem Statement - -The skill's name is "last30days" - users expect ONLY content from the last 30 days. Currently: - -1. **Reddit search prompt** says "prefer recent threads, but include older relevant ones if recent ones are scarce" - this is too permissive -2. **X search prompt** explicitly includes `from_date` and `to_date` - this is why it works -3. **WebSearch** returns pages without publication dates - we can't verify they're recent -4. **Scoring penalties** (-10 for low date confidence) don't prevent old content from appearing - -## Proposed Solution - -### Strategy: "Hard Filter, Not Soft Penalty" - -Instead of penalizing old content, **exclude it entirely**. If it's not from the last 30 days, it shouldn't appear. - -| Source | Current Behavior | New Behavior | -|--------|------------------|--------------| -| Reddit | Weak "prefer recent" | Explicit date range + hard filter | -| X | Explicit date range (working) | No change needed | -| WebSearch | No date awareness | Require recent markers OR exclude | - -## Technical Approach - -### Phase 1: Fix Reddit Date Filtering - -**File: `scripts/lib/openai_reddit.py`** - -Current prompt (line 33): -``` -Find {min_items}-{max_items} relevant Reddit discussion threads. -Prefer recent threads, but include older relevant ones if recent ones are scarce. -``` - -New prompt: -``` -Find {min_items}-{max_items} relevant Reddit discussion threads from {from_date} to {to_date}. - -CRITICAL: Only include threads posted within the last 30 days (after {from_date}). -Do NOT include threads older than {from_date}, even if they seem relevant. -If you cannot find enough recent threads, return fewer results rather than older ones. -``` - -**Changes needed:** -1. Add `from_date` and `to_date` parameters to `search_reddit()` function -2. Inject dates into `REDDIT_SEARCH_PROMPT` like X does -3. Update caller in `last30days.py` to pass dates - -### Phase 2: Add Hard Date Filtering (Post-Processing) - -**File: `scripts/lib/normalize.py`** - -Add a filter step that DROPS items with dates before `from_date`: - -```python -def filter_by_date_range( - items: List[Union[RedditItem, XItem, WebSearchItem]], - from_date: str, - to_date: str, - require_date: bool = False, -) -> List: - """Hard filter: Remove items outside the date range. - - Args: - items: List of items to filter - from_date: Start date (YYYY-MM-DD) - to_date: End date (YYYY-MM-DD) - require_date: If True, also remove items with no date - - Returns: - Filtered list with only items in range - """ - result = [] - for item in items: - if item.date is None: - if not require_date: - result.append(item) # Keep unknown dates (with penalty) - continue - - # Hard filter: if date is before from_date, exclude - if item.date < from_date: - continue # DROP - too old - - if item.date > to_date: - continue # DROP - future date (likely parsing error) - - result.append(item) - - return result -``` - -### Phase 3: WebSearch Date Intelligence - -WebSearch CAN find recent content - Medium posts have dates, GitHub has commit timestamps, news sites have publication dates. We should **extract and prioritize** these signals. - -**Strategy: "Date Detective"** - -1. **Extract dates from URLs**: Many sites embed dates in URLs - - Medium: `medium.com/@author/title-abc123` (no date) vs news sites - - GitHub: Look for commit dates, release dates in snippets - - News: `/2026/01/24/article-title` - - Blogs: `/blog/2026/01/title` - -2. **Extract dates from snippets**: Look for date markers - - "January 24, 2026", "Jan 2026", "yesterday", "this week" - - "Published:", "Posted:", "Updated:" - - Relative markers: "2 days ago", "last week" - -3. **Prioritize results with verifiable dates**: - - Results with recent dates (within 30 days): Full score - - Results with old dates: EXCLUDE - - Results with no date signals: Heavy penalty (-20) but keep as supplementary - -**File: `scripts/lib/websearch.py`** - -Add date extraction functions: - -```python -import re -from datetime import datetime, timedelta - -# Patterns for date extraction -URL_DATE_PATTERNS = [ - r'/(\d{4})/(\d{2})/(\d{2})/', # /2026/01/24/ - r'/(\d{4})-(\d{2})-(\d{2})/', # /2026-01-24/ - r'/(\d{4})(\d{2})(\d{2})/', # /20260124/ -] - -SNIPPET_DATE_PATTERNS = [ - r'(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]* (\d{1,2}),? (\d{4})', - r'(\d{1,2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]* (\d{4})', - r'(\d{4})-(\d{2})-(\d{2})', - r'Published:?\s*(\d{4}-\d{2}-\d{2})', - r'(\d{1,2}) (days?|hours?|minutes?) ago', # Relative dates -] - -def extract_date_from_url(url: str) -> Optional[str]: - """Try to extract a date from URL path.""" - for pattern in URL_DATE_PATTERNS: - match = re.search(pattern, url) - if match: - # Parse and return YYYY-MM-DD format - ... - return None - -def extract_date_from_snippet(snippet: str) -> Optional[str]: - """Try to extract a date from text snippet.""" - for pattern in SNIPPET_DATE_PATTERNS: - match = re.search(pattern, snippet, re.IGNORECASE) - if match: - # Parse and return YYYY-MM-DD format - ... - return None - -def extract_date_signals(url: str, snippet: str, title: str) -> tuple[Optional[str], str]: - """Extract date from any available signal. - - Returns: (date_string, confidence) - - date from URL: 'high' confidence - - date from snippet: 'med' confidence - - no date found: None, 'low' confidence - """ - # Try URL first (most reliable) - url_date = extract_date_from_url(url) - if url_date: - return url_date, 'high' - - # Try snippet - snippet_date = extract_date_from_snippet(snippet) - if snippet_date: - return snippet_date, 'med' - - # Try title - title_date = extract_date_from_snippet(title) - if title_date: - return title_date, 'med' - - return None, 'low' -``` - -**Update WebSearch parsing to use date extraction:** - -```python -def parse_websearch_results(results, topic, from_date, to_date): - items = [] - for result in results: - url = result.get('url', '') - snippet = result.get('snippet', '') - title = result.get('title', '') - - # Extract date signals - extracted_date, confidence = extract_date_signals(url, snippet, title) - - # Hard filter: if we found a date and it's too old, skip - if extracted_date and extracted_date < from_date: - continue # DROP - verified old content - - item = { - 'date': extracted_date, - 'date_confidence': confidence, - ... - } - items.append(item) - - return items -``` - -**File: `scripts/lib/score.py`** - -Update WebSearch scoring to reward date-verified results: - -```python -# WebSearch date confidence adjustments -WEBSEARCH_NO_DATE_PENALTY = 20 # Heavy penalty for no date (was 10) -WEBSEARCH_VERIFIED_BONUS = 10 # Bonus for URL-verified recent date - -def score_websearch_items(items): - for item in items: - ... - # Date confidence adjustments - if item.date_confidence == 'high': - overall += WEBSEARCH_VERIFIED_BONUS # Reward verified dates - elif item.date_confidence == 'low': - overall -= WEBSEARCH_NO_DATE_PENALTY # Heavy penalty for unknown - ... -``` - -**Result**: WebSearch results with verifiable recent dates rank well. Results with no dates are heavily penalized but still appear as supplementary context. Old verified content is excluded entirely. - -### Phase 4: Update Statistics Display - -Only count Reddit and X in "from the last 30 days" claim. WebSearch should be clearly labeled as supplementary. - -## Acceptance Criteria - -### Functional Requirements - -- [x] Reddit search prompt includes explicit `from_date` and `to_date` -- [x] Items with dates before `from_date` are EXCLUDED, not just penalized -- [x] X search continues working (no regression) -- [x] WebSearch extracts dates from URLs (e.g., `/2026/01/24/`) -- [x] WebSearch extracts dates from snippets (e.g., "January 24, 2026") -- [x] WebSearch with verified recent dates gets +10 bonus -- [x] WebSearch with no date signals gets -20 penalty (but still appears) -- [x] WebSearch with verified OLD dates is EXCLUDED - -### Non-Functional Requirements - -- [ ] No increase in API latency -- [ ] Graceful handling when few recent results exist (return fewer, not older) -- [ ] Clear user messaging when results are limited due to strict filtering - -### Quality Gates - -- [ ] Test: Reddit search returns 0% results older than 30 days -- [ ] Test: X search continues to return 100% recent results -- [ ] Test: WebSearch is clearly differentiated in output -- [ ] Test: Edge case - topic with no recent content shows helpful message - -## Implementation Order - -1. **Phase 1**: Fix Reddit prompt (highest impact, simple change) -2. **Phase 2**: Add hard date filter in normalize.py (safety net) -3. **Phase 3**: Add WebSearch date extraction (URL + snippet parsing) -4. **Phase 4**: Update WebSearch scoring (bonus for verified, heavy penalty for unknown) -5. **Phase 5**: Update output display to show date confidence - -## Testing Plan - -### Before/After Test - -Run same query before and after fix: -``` -/last30days remotion launch videos -``` - -**Expected Before:** -- Reddit: 40% within 30 days - -**Expected After:** -- Reddit: 100% within 30 days (or fewer results if not enough recent content) - -### Edge Case Tests - -| Scenario | Expected Behavior | -|----------|-------------------| -| Topic with no recent content | Return 0 results + helpful message | -| Topic with 5 recent results | Return 5 results (not pad with old ones) | -| Mixed old/new results | Only return new ones | - -### WebSearch Date Extraction Tests - -| URL/Snippet | Expected Date | Confidence | -|-------------|---------------|------------| -| `medium.com/blog/2026/01/15/title` | 2026-01-15 | high | -| `github.com/repo` + "Released Jan 20, 2026" | 2026-01-20 | med | -| `docs.example.com/guide` (no date signals) | None | low | -| `news.site.com/2024/05/old-article` | 2024-05-XX | EXCLUDE (too old) | -| Snippet: "Updated 3 days ago" | calculated | med | - -## Risk Analysis - -| Risk | Likelihood | Impact | Mitigation | -|------|------------|--------|------------| -| Fewer results for niche topics | High | Medium | Explain why in output | -| User confusion about reduced results | Medium | Low | Clear messaging | -| Date parsing errors exclude valid content | Low | Medium | Keep items with unknown dates, just label clearly | - -## References - -### Internal References -- Reddit search: `scripts/lib/openai_reddit.py:25-63` -- X search (working example): `scripts/lib/xai_x.py:26-55` -- Date confidence: `scripts/lib/dates.py:62-90` -- Scoring penalties: `scripts/lib/score.py:149-153` -- Normalization: `scripts/lib/normalize.py:49,99` - -### External References -- OpenAI Responses API lacks native date filtering -- Must rely on prompt engineering + post-processing diff --git a/scripts/build-skill.sh b/scripts/build-skill.sh new file mode 100755 index 0000000..fadf72a --- /dev/null +++ b/scripts/build-skill.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# build-skill.sh - package this repo as a claude.ai-upload-ready .skill file +# Usage: bash scripts/build-skill.sh (run from repo root) +# +# Produces dist/last30days.skill, a zip with a single top-level `last30days/` +# directory containing SKILL.md and the scripts/ runtime. See +# docs/plans/2026-04-14-001-fix-skill-upload-200-file-limit-plan.md. +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$REPO_ROOT" + +if ! git diff --quiet || ! git diff --cached --quiet; then + echo "error: working tree is dirty; commit or stash before building" >&2 + exit 1 +fi + +mkdir -p dist +OUT="dist/last30days.skill" +git archive --format=zip --prefix=last30days/ --output="$OUT" HEAD + +COUNT=$(unzip -l "$OUT" | tail -1 | awk '{print $2}') +SIZE=$(du -h "$OUT" | cut -f1) + +if [ "$COUNT" -gt 200 ]; then + echo "error: $COUNT files in zip, claude.ai's cap is 200" >&2 + echo " check .gitattributes export-ignore entries" >&2 + exit 1 +fi + +SKILL_MD_COUNT=$(unzip -l "$OUT" | grep -c "SKILL.md" || true) +if [ "$SKILL_MD_COUNT" -ne 1 ]; then + echo "error: expected exactly one SKILL.md, found $SKILL_MD_COUNT" >&2 + exit 1 +fi + +echo "built $OUT ($COUNT files, $SIZE)" +echo "upload via the claude.ai skill UI" diff --git a/scripts/sync.sh b/scripts/sync.sh index cedcff2..eec6d7a 100755 --- a/scripts/sync.sh +++ b/scripts/sync.sh @@ -11,7 +11,7 @@ COMMON_TARGETS=( # but local development needs the cache kept in sync with the repo. # Do NOT add ~/.claude/skills/last30days - it creates a duplicate # /last30days-3 in the slash command menu alongside the plugin version. - "$HOME/.claude/plugins/cache/last30days-skill-private/last30days-3/3.0.0" + "$HOME/.claude/plugins/cache/last30days-skill-private/last30days-3/3.0.1" "$HOME/.claude/plugins/cache/last30days-skill-private/last30days-3-nogem/3.0.0-nogem" "$HOME/.agents/skills/last30days" "$HOME/.codex/skills/last30days" diff --git a/skills/last30days/SKILL.md b/skills/last30days/SKILL.md index fea4f86..dc9d18c 100644 --- a/skills/last30days/SKILL.md +++ b/skills/last30days/SKILL.md @@ -1,6 +1,6 @@ --- name: last30days-v3-spec -version: "3.0.0" +version: "3.0.1" description: "Internal architecture spec for the v3 last30days runtime pipeline. Not user-invocable." argument-hint: "last30days codex vs claude code" allowed-tools: Bash, Read, Write, WebSearch 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":"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"} \ 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":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC,KAAK,UAAU,aAAa,CAC1B,MAAqB,EACrB,YAAoB,EACpB,GAAe;IAEf,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9C,2CAA2C;IAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,MAAM,KAAK,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YACnG,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,GAAe;IACtE,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,eAAe,CAAC;SAC5B,QAAQ,CAAC,kBAAkB,EAAE,mDAAmD,CAAC;SACjF,MAAM,CAAC,KAAK,EAAE,YAAoB,EAAE,EAAE;QACrC,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;QAEzD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,oBAAoB,WAAW,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,QAAQ,CAAC,kBAAkB,EAAE,qDAAqD,CAAC;SACnF,MAAM,CAAC,KAAK,EAAE,YAAoB,EAAE,EAAE;QACrC,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;QAEzD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QACtC,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,WAAW,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACnF,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/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":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,SAAS,kBAAkB,CAAC,OAA4B,EAAE,GAAe,EAAE,MAAc;IACvF,MAAM,KAAK,GAAa,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,4BAA4B,MAAM,GAAG,CAAC,CAAC;IAChF,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AA6BD,SAAS,UAAU,CAAC,KAAoB,EAAE,GAAe;IACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,MAAqB,EACrB,eAAmC,EACnC,GAAe;IAEf,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IAClD,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,+BAA+B,WAAW,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAgB,EAChB,GAAe,EACf,IAAyB,EACzB,OAA4B;IAE5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IACpD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAE5E,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEpE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,MAAM,GAAuB,OAAO,CAAC,MAAM,CAAC;QAChD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,UAA8B,CAAC;QAEnC,OAAO,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,OAAO,KAAK,CAAC,CAAC;YAC/D,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAE/D,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAClB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpB,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;gBACrF,UAAU,GAAG,SAAS,CAAC;gBACvB,MAAM;YACR,CAAC;YAED,IAAI,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACpC,UAAU,GAAG,UAAU,CAAC;gBACxB,MAAM;YACR,CAAC;YAED,MAAM,GAAG,UAAU,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC;YACjE,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,mDAAmD,CAAC,CAAC;gBACnF,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACvG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC9B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,GAAe;IACpE,MAAM,uBAAuB,GAAG,CAAC,IAAyB,EAAQ,EAAE;QAClE,OAAO;aACJ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;aAClB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;aAC7B,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,IAAI,CAAC,IAAI,iCAAiC,CAAC;aACvF,MAAM,CAAC,sBAAsB,EAAE,mCAAmC,EAAE,IAAI,CAAC;aACzE,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;aAC7E,MAAM,CAAC,OAAO,EAAE,0CAA0C,CAAC;aAC3D,MAAM,CAAC,sBAAsB,EAAE,qCAAqC,CAAC;aACrE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;aAClC,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACrG,CAAC,CAAC;IAEF,uBAAuB,CAAC;QACtB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,6CAA6C;QAC1D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;KACrF,CAAC,CAAC;IAEH,uBAAuB,CAAC;QACtB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,6CAA6C;QAC1D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;KACrF,CAAC,CAAC;IAEH,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,EAAE,IAAI,CAAC;SAChE,MAAM,CAAC,OAAO,EAAE,yBAAyB,CAAC;SAC1C,MAAM,CAAC,sBAAsB,EAAE,qCAAqC,CAAC;SACrE,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,aAAa,EAAE,yDAAyD,CAAC;SAChF,MAAM,CACL,KAAK,EAAE,OAON,EAAE,EAAE;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,GAAG,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtF,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,aAAa,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;QACpD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9D,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;QACD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC;YAC5E,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC7C,MAAM,eAAe,GAAG,EAAE,UAAU,EAAE,CAAC;QACvC,MAAM,iBAAiB,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAC3E,MAAM,MAAM,GAAG,aAAa;YAC1B,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC;YAC7C,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAElD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzD,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE;gBAC5B,IAAI,EAAE,MAAM;gBACZ,aAAa,EAAE,OAAO,CAAC,aAAa,CAAC;gBACrC,YAAY,EAAE,wBAAwB;aACvC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8DAA8D,CAAC;SAC3E,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,GAAG,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAE1D,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,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QAE7C,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,IAAI,2BAA2B,CAAC;QAEvE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACzC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,qCAAqC,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wDAAwD,CAAC;SACrE,QAAQ,CAAC,YAAY,EAAE,sCAAsC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,OAA2B,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,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,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,EAAE,gBAAgB,CAAC,EAAE,CAAC;oBAClF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,wCAAwC,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;YACxG,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/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":"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"} \ 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":"AACA,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAO3F,MAAM,UAAU,aAAa,CAC3B,IAAW;IAEX,MAAe,sBAAuB,SAAQ,IAAI;QAChD,qHAAqH;QACrH,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACjB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,OAAe;YAC9B,iJAAiJ;YACjJ,MAAM,SAAS,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YACxC,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YACtD,IAAI,gBAAgB,GAAG,GAAG,gBAAgB,IAAI,OAAO,iBAAiB,CAAC;YAEvE,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/D,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,0BAA0B,OAAO,EAAE,EAAE,CAAC,CAAC;YACpG,IAAI,IAAI,GAAG,SAAS,EAAE,CAAC;YAEvB,MAAM,aAAa,GAAG,KAAK,EAAE,QAAkB,EAAmC,EAAE;gBAClF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;gBACrF,CAAC;gBAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4C,CAAC;gBAChF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjF,CAAC;gBAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3B,CAAC,CAAC;YAEF,IAAI,CAAC;gBACH,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;oBAC3D,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,YAAY,EAAE;oBACvB,IAAI;iBACL,CAAC,CAAC;gBAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC7B,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;oBAClD,gBAAgB,GAAG,GAAG,gBAAgB,IAAI,OAAO,iBAAiB,CAAC;oBACnE,IAAI,GAAG,SAAS,EAAE,CAAC;oBAEnB,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE;wBACvD,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,YAAY,EAAE;wBACvB,IAAI;qBACL,CAAC,CAAC;oBAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;wBAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,EAAE;4BAClE,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,YAAY,EAAE;4BACvB,IAAI;yBACL,CAAC,CAAC;wBAEH,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC;gBACH,CAAC;gBAED,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3F,CAAC;QACH,CAAC;KACF;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC"} \ 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":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExG,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ1D;AAED,wBAAgB,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,SAAS,CAUzF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CA6B3F;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWxD;AAMD,kEAAkE;AAClE,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uEAAuE;AACvE,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yCAAyC;AACzC,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxE,CAAC;IACF,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED,6CAA6C;AAC7C,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,uBAAuB;AACvB,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,uCAAuC;AACvC,UAAU,YAAY;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAoH7F;AA0ED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAyF7F;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAc/F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE3F;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAgBrD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,UAAU,EAAE,GAAG,SAAS,CA2D7F;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,kBAAkB,GAAG,SAAS,CAQxG;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,mBAAmB,EAAE,MAAM,GAAG,qBAAqB,GAClD,SAAS,GAAG,SAAS,CAuDvB;AAED,wBAAgB,uBAAuB,CACrC,YAAY,EACR,KAAK,CAAC;IACJ,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE;YACR,WAAW,CAAC,EAAE;gBACZ,aAAa,CAAC,EAAE;oBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;iBAC7B,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC,CAAC;CACJ,CAAC,GACF,SAAS,EACb,OAAO,EAAE,MAAM,GACd,kBAAkB,GAAG,SAAS,CAehC;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE;YACZ,aAAa,CAAC,EAAE;gBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;aAC7B,CAAC;SACH,CAAC;QACF,IAAI,CAAC,EAAE;YACL,WAAW,CAAC,EAAE;gBACZ,aAAa,CAAC,EAAE;oBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;iBAC7B,CAAC;aACH,CAAC;SACH,CAAC;QACF,KAAK,CAAC,EAAE,KAAK,CAAC;YACZ,IAAI,CAAC,EAAE;gBACL,WAAW,CAAC,EAAE;oBACZ,aAAa,CAAC,EAAE;wBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;qBAC7B,CAAC;iBACH,CAAC;aACH,CAAC;YACF,WAAW,CAAC,EAAE;gBACZ,aAAa,CAAC,EAAE;oBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;iBAC7B,CAAC;aACH,CAAC;YACF,OAAO,CAAC,EAAE;gBACR,WAAW,CAAC,EAAE;oBACZ,aAAa,CAAC,EAAE;wBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;qBAC7B,CAAC;iBACH,CAAC;aACH,CAAC;SACH,CAAC,CAAC;KACJ,CAAC;CACH,GAAG,kBAAkB,EAAE,CAmBvB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EACR,KAAK,CAAC;IACJ,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE;YACR,WAAW,CAAC,EAAE;gBACZ,aAAa,CAAC,EAAE;oBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;iBAC7B,CAAC;aACH,CAAC;YACF,IAAI,CAAC,EAAE;gBACL,WAAW,CAAC,EAAE;oBACZ,aAAa,CAAC,EAAE;wBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;qBAC7B,CAAC;iBACH,CAAC;aACH,CAAC;YACF,KAAK,CAAC,EAAE,KAAK,CAAC;gBACZ,IAAI,CAAC,EAAE;oBACL,WAAW,CAAC,EAAE;wBACZ,aAAa,CAAC,EAAE;4BACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;yBAC7B,CAAC;qBACH,CAAC;iBACH,CAAC;gBACF,WAAW,CAAC,EAAE;oBACZ,aAAa,CAAC,EAAE;wBACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;qBAC7B,CAAC;iBACH,CAAC;gBACF,OAAO,CAAC,EAAE;oBACR,WAAW,CAAC,EAAE;wBACZ,aAAa,CAAC,EAAE;4BACd,MAAM,CAAC,EAAE,kBAAkB,CAAC;yBAC7B,CAAC;qBACH,CAAC;iBACH,CAAC;aACH,CAAC,CAAC;SACJ,CAAC;KACH,CAAC,CAAC;CACJ,CAAC,GACF,SAAS,EACb,mBAAmB,EAAE,MAAM,GAAG,kBAAkB,GAC/C,SAAS,EAAE,CAuBb;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EACR,KAAK,CAAC;IACJ,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ,CAAC,GACF,SAAS,EACb,UAAU,SAAW,GACpB,MAAM,GAAG,SAAS,CAUpB;AAED,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,KAAK,CAAC;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,GAAG,SAAS,GAC3E,WAAW,EAAE,CAuEf"} \ 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":"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"} \ 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 8c2d1cd..0000000 Binary files a/vendor/steipete-bird-0.8.0.tgz and /dev/null differ