Commit graph

69 commits

Author SHA1 Message Date
DESKTOP-RTLN3BA\$punk
1c8a15dfab refactor: consolidate browser loop management across Google Search, Indeed Jobs, and Reddit platforms 2026-07-24 15:01:01 -07:00
DESKTOP-RTLN3BA\$punk
4a727a2c57 chore: linting 2026-07-24 14:30:46 -07:00
Anish Sarkar
6068472ecc feat(tests): add unit tests for community listing scraping and name normalization 2026-07-25 02:55:12 +05:30
CREDO23
6330d5a789 fix: reject spoofed non-YouTube URLs 2026-07-23 18:52:50 +02:00
CREDO23
ca317c4686 Merge remote-tracking branch 'upstream/dev' into feature-walmart-scraper
# Conflicts:
#	docker/.env.example
#	surfsense_backend/app/capabilities/core/billing.py
#	surfsense_backend/app/capabilities/core/types.py
#	surfsense_backend/app/config/__init__.py
#	surfsense_mcp/mcp_server/features/scrapers/__init__.py
#	surfsense_web/content/docs/connectors/index.mdx
#	surfsense_web/content/docs/connectors/native/index.mdx
#	surfsense_web/content/docs/how-to/mcp-server.mdx
2026-07-21 02:42:41 +02:00
CREDO23
f6970b90e8 fix(walmart): parse category breadcrumb path into breadCrumbs and category 2026-07-19 09:10:03 +02:00
CREDO23
7b5e09c528 test(walmart): add parser and flow tests with e2e harness 2026-07-19 08:19:22 +02:00
CREDO23
91aa265afb Merge remote-tracking branch 'upstream/dev' into feature-indeed-jobs-scraper
# Conflicts:
#	README.es.md
#	README.hi.md
#	README.md
#	README.pt-BR.md
#	README.zh-CN.md
#	surfsense_backend/tests/unit/capabilities/google_maps/test_registry.py
#	surfsense_backend/tests/unit/capabilities/reddit/test_registry.py
#	surfsense_backend/tests/unit/capabilities/youtube/test_registry.py
#	surfsense_mcp/mcp_server/features/scrapers/__init__.py
#	surfsense_web/content/docs/connectors/index.mdx
#	surfsense_web/content/docs/connectors/native/index.mdx
#	surfsense_web/content/docs/connectors/native/meta.json
#	surfsense_web/content/docs/how-to/mcp-server.mdx
#	surfsense_web/lib/connectors-marketing/index.ts
#	surfsense_web/lib/playground/catalog.ts
2026-07-18 22:11:30 +02:00
DESKTOP-RTLN3BA\$punk
87b0ba86e4 feat: bumped version to 0.0.34 2026-07-17 19:42:10 -07:00
DESKTOP-RTLN3BA\$punk
8a5d37a4db refactor: implement cross-country proxy rotation for Reddit and TikTok scrapers, enhancing resilience against IP blocks and improving search query handling 2026-07-17 16:30:26 -07:00
DESKTOP-RTLN3BA\$punk
68d1832f10 refactor: enhance Google search scraping capabilities with warm sticky-IP pool and improved captcha handling 2026-07-17 03:27:43 -07:00
CREDO23
c485fe4c43 fix: scrape indeed first page only, steer subagent to one query 2026-07-15 20:54:37 +02:00
CREDO23
6180b96912 fix: fail fast on gated indeed pagination, keep collected pages 2026-07-15 20:24:22 +02:00
CREDO23
b53f00231d fix: parse indeed /viewjob detail from window._rootProps 2026-07-15 19:57:19 +02:00
CREDO23
d2af2402b4 test: indeed detail and enrichment flow 2026-07-15 17:54:38 +02:00
CREDO23
38c98ba0e4 test: indeed detail parser 2026-07-15 17:54:38 +02:00
CREDO23
0b73581cbe test: indeed viewjob detail fixture 2026-07-15 17:54:38 +02:00
Anish Sarkar
78fe22735e test(amazon): update proxy configuration in AmazonScrapeInput to use residential proxy 2026-07-15 16:04:02 +05:30
Anish Sarkar
01308055dd chore: ran linting 2026-07-15 15:48:54 +05:30
Anish Sarkar
07fe0203e3 test(amazon): cover localized scraper flows 2026-07-15 15:32:50 +05:30
Anish Sarkar
799ec5a907 test(amazon): cover block detection and localized price parsing 2026-07-15 15:32:29 +05:30
Anish Sarkar
b47566c68d test(amazon): cover marketplace locale helpers 2026-07-15 15:31:59 +05:30
Anish Sarkar
e19c9b292f test(amazon): cover sticky proxy country rewrite 2026-07-15 15:31:48 +05:30
Anish Sarkar
b5b700c853 test(proxy): cover dataimpulse sticky-session urls 2026-07-15 01:57:12 +05:30
Anish Sarkar
f1ee166f19 test(amazon): cover orchestrator flows 2026-07-15 01:57:05 +05:30
Anish Sarkar
a7e854c815 test(amazon): cover html parsers against fixtures 2026-07-15 01:56:55 +05:30
Anish Sarkar
3dfcee697b test(amazon): cover schema and url-resolver contract 2026-07-15 01:56:45 +05:30
Anish Sarkar
e8d4d8a1f9 test(amazon): add offline html fixtures 2026-07-15 01:56:42 +05:30
CREDO23
063faf4bd6 test: indeed scraper orchestration 2026-07-14 21:42:00 +02:00
CREDO23
a60aba112c test: indeed fetch rotation resilience 2026-07-14 21:42:00 +02:00
CREDO23
91e868fc26 test: indeed url resolver 2026-07-14 21:42:00 +02:00
CREDO23
37963c64f1 test: indeed parsers 2026-07-14 21:42:00 +02:00
CREDO23
3d6da91bf3 test: indeed trimmed jobcards fixture 2026-07-14 21:42:00 +02:00
CREDO23
794b127136 test: indeed_jobs test package 2026-07-14 21:42:00 +02:00
DESKTOP-RTLN3BA\$punk
2b018c4474 refactor: streamline TikTok and Instagram scraping logic by removing search_queries and enhancing documentation for clarity 2026-07-13 17:11:25 -07:00
DESKTOP-RTLN3BA\$punk
1131da5ed7 feat: bumped version to 0.0.32 2026-07-13 16:29:39 -07:00
Anish Sarkar
e38ca19b18 Merge remote-tracking branch 'upstream/dev' into feat/instagram-scraper 2026-07-11 04:31:11 +05:30
Anish Sarkar
75c3addd2b test(instagram): cover PolarisMedia relay parsing and enriched media fields 2026-07-11 03:44:33 +05:30
Anish Sarkar
457be1871c feat(instagram): improve parsing of Instagram media IDs and mentions
- Enhanced the regular expression for mentions to prevent trailing punctuation from being included in handles.
- Added support for extracting media IDs from deep-link meta tags in anonymous posts.
- Updated unit tests to validate the new media ID extraction and ensure proper handling of mentions.
2026-07-11 03:06:04 +05:30
Anish Sarkar
d41ccb7edd feat(instagram): enhance Open Graph parsing for anonymous posts
- Added support for extracting likes, comments, username, timestamp, and caption from Open Graph meta tags.
- Implemented fallback mechanisms to ensure graceful degradation when expected data is missing.
- Updated unit tests to validate new parsing logic and ensure robustness against unrecognized formats.
2026-07-11 02:56:29 +05:30
Anish Sarkar
4bd3ec275c delete(instagram): remove obsolete post fixture for Instagram tests 2026-07-11 02:50:26 +05:30
Anish Sarkar
ba70ae1f45 test(instagram): update platform tests and add discovery fixtures 2026-07-11 02:21:14 +05:30
CREDO23
8f825b7b3c test(tiktok): cover item_list retry-on-empty loop 2026-07-10 17:25:48 +02:00
CREDO23
67b5472b9f feat(tiktok): add tiktok.trending verb for the Explore feed
The Explore feed (/api/explore/item_list) is a global trending-video feed
served to anonymous sessions, and it returns the same itemStruct shape as the
other listings — so the verb reuses parse_video, the listing flow, the
TikTokVideoItem output, and the per-video billing meter wholesale. Adds a
browser-capture marker + fetch_trending, a synthetic-target orchestrator entry,
and the tiktok.trending capability, surfaced on the chat subagent.
2026-07-09 18:52:56 +02:00
CREDO23
7723b5b8b6 feat(tiktok): add tiktok.comments verb for public comment scraping
Comments load over a signed /api/comment/list XHR that TikTok serves to
anonymous sessions once the comments panel is opened (unlike profile-video and
general-search feeds), so this is a reliable verb. Given video URLs it returns
CommentItems (text, author, likes, reply counts; replies carry repliesToId),
deduped per video, capped, and degraded to an ErrorItem for empty/withheld
videos or a bad_url ErrorItem for non-video inputs.

Generalizes the browser capture over a pluggable interaction step so the
comments flow (open panel, scroll the panel to paginate) reuses the same
warm+capture scaffolding as listing/user-search. Billed per comment on a new
TIKTOK_COMMENT meter (TIKTOK_MICROS_PER_COMMENT, matching the per-comment
market), surfaced on the chat subagent alongside tiktok.scrape/user_search.
2026-07-09 18:35:26 +02:00
CREDO23
192b6dc31a feat(tiktok): add tiktok.user_search verb for account discovery
Video/general search is login-walled for anonymous sessions, but the Users
tab (/api/search/user) returns public account records without a redirect, so
this exposes the one reliably-unblocked search path. A keyword yields
TikTokProfileItems (name, followers, bio, verification), deduped per query,
capped, and degraded to an ErrorItem when a query is empty/withheld.

Reuses the browser capture (generalized over XHR markers + extractor) and the
shared profile item shape. Billed per account on a new TIKTOK_USER meter
(TIKTOK_MICROS_PER_USER), surfaced on the chat subagent alongside tiktok.scrape.
2026-07-09 18:00:40 +02:00
CREDO23
6652efd035 feat(tiktok): return profile metadata even when video listing is gated
A profile's account data (name, followers, bio, verification) lives in the
page's rehydration blob and loads over plain HTTP without a signed request,
so emit it first and always. The video listing needs a signed item_list XHR
that TikTok withholds from anonymous sessions, so it stays best-effort and
degrades to an ErrorItem. A blocked profile now yields its metadata instead
of only an ErrorItem.
2026-07-09 17:48:19 +02:00
Anish Sarkar
2c251f9e07 test(instagram): add tests for anonymous profile and hashtag discovery
Introduced new tests to validate the behavior of the Instagram scraper when discovering anonymous profiles and handling hashtag searches. The tests ensure that profile lookups succeed without requiring authentication, while hashtag searches correctly raise an error when access is blocked, enhancing the robustness of the scraper's functionality.
2026-07-09 20:26:18 +05:30
Anish Sarkar
0309e1d28a refactor(instagram): streamline login redirect handling in tests
Revised tests for handling login redirects to improve clarity and efficiency. The test for immediate failure on endpoint-level walls was updated to prevent unnecessary IP rotations. Additionally, new tests were added to ensure that partial results are returned when encountering blocked targets, enhancing the resilience of the scraper's batch processing.
2026-07-09 19:56:55 +05:30
Anish Sarkar
4af0b9dbbd test(instagram): add regression test for InstagramAccessBlockedError handling
Introduced a new test to ensure that InstagramAccessBlockedError is properly propagated without causing deadlocks in the scraper's fan_out function. This regression test verifies that the error surfaces correctly when a blocked job is encountered, enhancing the resilience of the fetch process.
2026-07-09 19:09:06 +05:30