docs: spec 003 (Tapas source), its plan, and captured Tapas fixtures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a7253940fa
commit
d5c07465da
8 files changed
+15003
No files matched your search
@@ -0,0 +1,47 @@
|
||||
# Tapas source — implementation plan
|
||||
|
||||
> **For agentic workers:** superpowers:executing-plans (native, the user's standing choice). Checkbox steps.
|
||||
|
||||
**Goal:** a `tapas` Source (comics and novels) registered next to `webtoons`.
|
||||
**Architecture:** `src/core/sources/tapas/{urls,parse,index}.ts` mirroring `webtoons/`; one registry line; host
|
||||
lists; source-neutral copy. **Spec:** [`docs/specs/003-tapas.md`](../specs/003-tapas.md).
|
||||
|
||||
## Global constraints
|
||||
- `src/core` pure (no DOM/Bun/node/GM). Tests offline, fixtures captured (done: `test/fixtures/tapas/*`,
|
||||
`test/fixtures/wayback/tapas-villains-*`). No new dependencies.
|
||||
|
||||
## Review focus
|
||||
1. Wayback rows for `<slug>-novel` must not count as the comic. → Task 1 same-series test, Task 3 history test.
|
||||
2. Age-gated series must not fail the run. → Task 3 test.
|
||||
3. CloudFront URLs from 2020 normalise to `us-a.tapas.io` without the size suffix. → Task 1 test.
|
||||
4. Episode links resolve to the series. → Task 3 test.
|
||||
5. Capitalised/underscored slugs (`RU_Screwed`) parse. → Task 1 test.
|
||||
|
||||
### Task 1: URLs (`tapas/urls.ts`)
|
||||
**Produces:** `TAPAS_HOSTS`, `IMAGE_HOST = "us-a.tapas.io"`, `IMAGE_HOSTS`, `parseTapasUrl(url): TapasRef`
|
||||
(`{ kind: "series", key: string /* slug or id */ } | { kind: "episode", id: string }`), `isTapasUrl(url)`,
|
||||
`infoUrl(key)`, `normalizeImageUrl(raw)`, `isSameTapasSeries(linkUrl, slug, id)`, `slugOf(canonicalUrl)`.
|
||||
- [ ] Tests: every link form; non-series paths rejected (`/comics`, `/series/`); normalisation (cloudfront → us-a,
|
||||
`_z`/`_m` dropped, query dropped, other hosts untouched); same-series by slug (case-insensitive, `/info`,
|
||||
trailing slash), by id, `-novel` rejected. RED → implement → GREEN → commit.
|
||||
|
||||
### Task 2: Parsing (`tapas/parse.ts`)
|
||||
**Produces:** `parseInfoPage(html, pageUrl): { id, title, canonicalUrl, novel, covers }`, `extractCovers(html,
|
||||
pageUrl)`, `episodeSeriesId(html)`, `ageGateTarget(html): string | null`.
|
||||
- [ ] Tests on fixtures: comic (id 186414, title, not novel, poster 960×1440 URL, banner), novel (266599, novel),
|
||||
2020 archive (cloudfront poster + banner normalised), reader page (`seriesId` 186414), age check (`from` URL).
|
||||
RED → implement → GREEN → commit.
|
||||
|
||||
### Task 3: Source (`tapas/index.ts`) and registry
|
||||
- [ ] Tests through `FakeTransport`: info link; `/series/<id>` (fake redirect = info page served for id URL);
|
||||
episode link (two fetches); age check (mature, no covers, warning via a `SourceSeries` flag read by the
|
||||
pipeline → add `ageGated` flag and pipeline warning); Wayback history over the CDX fixture keeps only the
|
||||
comic rows. Register in `SOURCES`; hosts. RED → implement → GREEN → commit.
|
||||
|
||||
### Task 4: Copy, userscript @connect, docs
|
||||
- [ ] Link hint, "No rehosting" warning, userscript description/@connect (+ gm test), README sources section,
|
||||
ARCHITECTURE map, DECISIONS entry. Commit.
|
||||
|
||||
### Task 5: Verify
|
||||
- [ ] Real run in headless Chrome: comic and novel (no Wayback), and one with Wayback every 12 months; final
|
||||
review; remove this plan; merge; push.
|
||||
@@ -0,0 +1,69 @@
|
||||
---
|
||||
status: approved
|
||||
---
|
||||
|
||||
# 003 — Tapas source
|
||||
|
||||
A second source (spec 001 §4.1): covers of a [Tapas](https://tapas.io) series, comics and novels. Design approved
|
||||
by the user in chat on 2026-10-15 ("Comics and novels"). Everything else — inspection, dedupe, Wayback history,
|
||||
hosting, download, history — is the existing pipeline.
|
||||
|
||||
## 1. Verified facts (2026-10-15)
|
||||
|
||||
Checked against *Villains Are Destined to Die* (comic, id 186414) and its novel (id 266599), a mature series
|
||||
(id 286112) and Wayback captures since 2020-10. Fixtures in `test/fixtures/tapas/` and `test/fixtures/wayback/tapas-*`.
|
||||
|
||||
- **Series page:** `https://tapas.io/series/<slug>/info` (its own canonical URL). `/series/<slug>` serves the
|
||||
episode reader (canonical `/episode/<id>`). `/series/<id>/info` redirects to the slug form. Slugs may contain
|
||||
capitals and underscores (`/series/RU_Screwed`).
|
||||
- **Series id:** on the info page `pageMeta : { id: <id>, type: 'series_id' }`; on the reader `seriesId: <id>`.
|
||||
- **Comic or novel:** the stats row links `/static-landing/genre?category=COMIC` or `…=NOVEL`. `og:type` is
|
||||
`comicpanda:webcomic_series` for both.
|
||||
- **Title:** the cover image's `alt` in `.thumb-wrapper`; `og:title` is "Read <title> | Tapas Web Comics".
|
||||
- **Images** (`us-a.tapas.io/sa/<xx>/<uuid>[_<size>].<ext>`, no token, no Referer needed):
|
||||
- **Portrait cover:** the `<img>` in `.thumb-wrapper` (both the info page and the 2020 reader page),
|
||||
`…_z.jpg` = 400×600. Without the suffix: the original, 960×1440.
|
||||
- **Banner:** `og:image` (also the `js-top-banner` / `header-layer` background), 1280×460, no suffix.
|
||||
- Lists use `_m` (180 px) of other images; `pc/…` images are signed promotions of other series. Neither is used.
|
||||
- Older pages use `d30womf5coomej.cloudfront.net/sa/…`; the same paths answer on `us-a.tapas.io`.
|
||||
- **Mature series:** without a signed-in, age-verified account, `/series/…/info` redirects to
|
||||
`/account/verify-age?from=https://tapas.io/series/<slug>/info`, a page with no series data. The userscript's
|
||||
`GM_xmlhttpRequest` sends the user's own tapas.io cookies, so a signed-in adult gets the real page there.
|
||||
- **Language:** English only (MangaBaka `en`).
|
||||
- **Wayback:** `tapas.io/series/<slug>` captured about monthly since 2020; the prefix also matches
|
||||
`<slug>-novel` and other longer slugs.
|
||||
|
||||
## 2. Behaviour
|
||||
|
||||
- **Links accepted:** `tapas.io/series/<slug>`, `…/info`, `…/<id>`, `…/<id>/info`, and `tapas.io/episode/<id>`
|
||||
(the reader page names its series id). `www.` and `m.` hosts too. Fetched as `https://tapas.io/series/<slug or
|
||||
id>/info`; an episode link first fetches the episode page for its series id.
|
||||
- **Series:** `externalId` = the numeric id, `title`, `language: "en"`, `canonicalUrl` =
|
||||
`https://tapas.io/series/<slug>/info`, `flags.novel`, `archiveUrls` = [`tapas.io/series/<slug>`].
|
||||
- **Current covers:** portrait (role `poster`, suffix removed) and banner (role `banner`). The poster is the
|
||||
suggested main cover as for Webtoons.
|
||||
- **Mature (age check):** the series is resolved from the `from=` link (slug; title from the slug), `mature: true`,
|
||||
no current covers, and a warning: Tapas shows this series only to signed-in adults; use the userscript while
|
||||
signed in, or tick the Wayback history. History still runs.
|
||||
- **Image URLs:** `normalizeImageUrl` maps both image hosts to `us-a.tapas.io`, drops `_<letters>` size suffixes
|
||||
after the UUID and any query.
|
||||
- **Same series:** a link is the same series when it is a tapas.io `/series/<slug>[/info][/]` with the same slug
|
||||
(case-insensitive) or `/series/<id>[/info]` with the same id. This also filters Wayback rows (`-novel`).
|
||||
- **Hosts:** fetch `tapas.io`, `www.tapas.io`, `m.tapas.io`, `us-a.tapas.io`, `d30womf5coomej.cloudfront.net`;
|
||||
images `us-a.tapas.io`, `d30womf5coomej.cloudfront.net`. The userscript `@connect`s `tapas.io` and the
|
||||
CloudFront host.
|
||||
- **Chrome:** source-neutral where it named WEBTOON: the link hint ("WEBTOON or Tapas for now"), the
|
||||
"No rehosting" warning ("the source's own image URL"), the userscript description.
|
||||
|
||||
## 3. Testing
|
||||
|
||||
Unit tests on the captured pages, no network: link parsing (every form, rejects), page parsing (comic, novel,
|
||||
reader, 2020 archive, age check), URL normalisation, same-series (slug, id, `-novel` rejected), and the source
|
||||
end to end through the fake transport (info page, episode link, age check, `/series/<id>` redirect).
|
||||
Then a real run in headless Chrome for one comic and one novel.
|
||||
|
||||
## 4. Risks
|
||||
|
||||
- Tapas markup changes; the parser looks for two stable hooks (`thumb-wrapper`, `og:image`) and the page type link.
|
||||
- The info page may show a mature badge to signed-in users that we never saw; mature is only known from the
|
||||
age check.
|
||||
+1740
File diff suppressed because it is too large.
Load diff
+3308
File diff suppressed because it is too large.
Load diff
+3785
File diff suppressed because it is too large.
Load diff
+3698
File diff suppressed because it is too large.
Load diff
+2174
File diff suppressed because it is too large.
Load diff
+182
@@ -0,0 +1,182 @@
|
||||
20201031233824 https://tapas.io/series/villains-are-destined-to-die
|
||||
20201101073743 https://tapas.io/series/villains-are-destined-to-die
|
||||
20201201230244 https://tapas.io/series/villains-are-destined-to-die
|
||||
20210115210204 https://tapas.io/series/villains-are-destined-to-die
|
||||
20210310220234 https://tapas.io/series/villains-are-destined-to-die
|
||||
20210815193810 https://tapas.io/series/villains-are-destined-to-die
|
||||
20220207235742 https://tapas.io/series/villains-are-destined-to-die/
|
||||
20220314091858 https://tapas.io/series/villains-are-destined-to-die
|
||||
20221020175350 https://tapas.io/series/villains-are-destined-to-die
|
||||
20230130104227 https://tapas.io/series/villains-are-destined-to-die
|
||||
20230216203609 https://tapas.io/series/villains-are-destined-to-die
|
||||
20230711060200 https://tapas.io/series/villains-are-destined-to-die
|
||||
20240324214731 https://tapas.io/series/villains-are-destined-to-die
|
||||
20240722175417 https://tapas.io/series/villains-are-destined-to-die
|
||||
20240910161454 https://tapas.io/series/villains-are-destined-to-die
|
||||
20241002071717 https://tapas.io/series/villains-are-destined-to-die
|
||||
20241122170150 https://tapas.io/series/villains-are-destined-to-die
|
||||
20241210090231 https://tapas.io/series/villains-are-destined-to-die
|
||||
20250321012616 https://tapas.io/series/villains-are-destined-to-die
|
||||
20250401004641 https://tapas.io/series/villains-are-destined-to-die
|
||||
20250801205333 https://tapas.io/series/villains-are-destined-to-die
|
||||
20251112024545 https://tapas.io/series/villains-are-destined-to-die
|
||||
20251201020925 https://tapas.io/series/villains-are-destined-to-die
|
||||
20260112215610 https://tapas.io/series/villains-are-destined-to-die
|
||||
20260309000646 https://tapas.io/series/villains-are-destined-to-die
|
||||
20260527150043 https://tapas.io/series/villains-are-destined-to-die
|
||||
20260701201337 https://tapas.io/series/villains-are-destined-to-die
|
||||
20260825092034 https://tapas.io/series/villains-are-destined-to-die
|
||||
20260908215721 https://tapas.io/series/villains-are-destined-to-die
|
||||
20261011020749 https://tapas.io/series/villains-are-destined-to-die
|
||||
20230916222951 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20231207104017 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240101234523 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240203072125 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240302031318 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240402010836 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240502022841 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240605030250 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240705062104 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240801210136 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20240902111241 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20241109074723 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20241210034115 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20250115001019 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20250203123143 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20250403074738 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20250711024058 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20251116194411 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20251219041119 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20260214141029 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20260819182839 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20260913185942 https://tapas.io/series/villains-are-destined-to-die-novel
|
||||
20231221015719 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20240322004209 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20240506074459 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20240623184336 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20240712220349 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20240905185533 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20241203140218 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20250124084148 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20250228023359 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20250319155034 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20250426151250 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20250729162654 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20251008221657 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20251208081857 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20260215113844 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20260913185954 https://tapas.io/series/villains-are-destined-to-die-novel/info
|
||||
20261003173459 https://tapas.io/series/villains-are-destined-to-die-novel/?_escaped_fragment_=/go-to-top
|
||||
20260923013556 https://tapas.io/series/villains-are-destined-to-die-novel?c_id=1881&c_title=%F0%9F%8F%86Tapas%20Top%20Titles%F0%9F%8F%86
|
||||
20241004093328 https://tapas.io/series/villains-are-destined-to-die-novel?c_id=1888&c_title=%F0%9F%8E%86March%20Series%20Finale%20Sale%F0%9F%8E%87
|
||||
20260923025415 https://tapas.io/series/villains-are-destined-to-die-novel?c_id=1888&c_title=%F0%9F%8E%86March%20Series%20Finale%20Sale%F0%9F%8E%87
|
||||
20260227125134 https://tapas.io/series/villains-are-destined-to-die/announcement
|
||||
20201101061815 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20201209223441 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20210720144012 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20220307133159 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20220616190944 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20221024005722 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20221105204538 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20230325233316 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20230417173531 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20241109074750 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20241207140447 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20250116032916 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20250203123325 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20250304001719 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20250419222427 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20250801205419 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20251002220415 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20251124103547 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20251213022322 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20260306115123 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20260604195453 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20260815195119 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20260905232522 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20261003190724 https://tapas.io/series/villains-are-destined-to-die/info
|
||||
20260925012911 https://tapas.io/series/villains-are-destined-to-die/?_escaped_fragment_=
|
||||
20230127171805 https://tapas.io/series/villains-are-destined-to-die?c_id=1002&c_title=Destined%20to%20be%20Royal%20Collection
|
||||
20250513063636 https://tapas.io/series/villains-are-destined-to-die?c_id=1002&c_title=Destined%20to%20be%20Royal%20Collection
|
||||
20260923015219 https://tapas.io/series/villains-are-destined-to-die?c_id=1002&c_title=Destined%20to%20be%20Royal%20Collection
|
||||
20240224192751 https://tapas.io/series/villains-are-destined-to-die?c_id=1011&c_title=Women%27s%20History%20Month
|
||||
20260923024728 https://tapas.io/series/villains-are-destined-to-die?c_id=1011&c_title=Women%27s%20History%20Month
|
||||
20230329141002 https://tapas.io/series/villains-are-destined-to-die?c_id=1031&c_title=Fight%20for%20Love
|
||||
20260923014557 https://tapas.io/series/villains-are-destined-to-die?c_id=1031&c_title=Fight%20for%20Love
|
||||
20240225201156 https://tapas.io/series/villains-are-destined-to-die?c_id=1055&c_title=Best%20of%20Romance
|
||||
20260923013434 https://tapas.io/series/villains-are-destined-to-die?c_id=1055&c_title=Best%20of%20Romance
|
||||
20220521225521 https://tapas.io/series/villains-are-destined-to-die?c_id=1069&c_title=the%20Best%20Romance%20Fantasy%20collection
|
||||
20230321044352 https://tapas.io/series/villains-are-destined-to-die?c_id=1069&c_title=the%20Best%20Romance%20Fantasy%20collection
|
||||
20240418234531 https://tapas.io/series/villains-are-destined-to-die?c_id=1069&c_title=the%20Best%20Romance%20Fantasy%20collection
|
||||
20260923022147 https://tapas.io/series/villains-are-destined-to-die?c_id=1069&c_title=the%20Best%20Romance%20Fantasy%20collection
|
||||
20230325201634 https://tapas.io/series/villains-are-destined-to-die?c_id=1078&c_title=Most_viewed_comics_romance
|
||||
20260923021822 https://tapas.io/series/villains-are-destined-to-die?c_id=1078&c_title=Most_viewed_comics_romance
|
||||
20240302232254 https://tapas.io/series/villains-are-destined-to-die?c_id=1092&c_title=the%20Love%20to%20Remember%20collection
|
||||
20241208054523 https://tapas.io/series/villains-are-destined-to-die?c_id=1092&c_title=the%20Love%20to%20Remember%20collection
|
||||
20260923025515 https://tapas.io/series/villains-are-destined-to-die?c_id=1092&c_title=the%20Love%20to%20Remember%20collection
|
||||
20220523165656 https://tapas.io/series/villains-are-destined-to-die?c_id=1113&c_title=The%20Immersive%20Gaming%20collection
|
||||
20260923032027 https://tapas.io/series/villains-are-destined-to-die?c_id=1113&c_title=The%20Immersive%20Gaming%20collection
|
||||
20230131004552 https://tapas.io/series/villains-are-destined-to-die?c_id=1124&c_title=Play%20Now%21
|
||||
20250514082332 https://tapas.io/series/villains-are-destined-to-die?c_id=1124&c_title=Play%20Now%21
|
||||
20260608085958 https://tapas.io/series/villains-are-destined-to-die?c_id=1124&c_title=Play%20Now%21
|
||||
20260923015655 https://tapas.io/series/villains-are-destined-to-die?c_id=1124&c_title=Play%20Now%21
|
||||
20230202081423 https://tapas.io/series/villains-are-destined-to-die?c_id=1126&c_title=The%20Ultimate%20Villainess%20Collection
|
||||
20260423000531 https://tapas.io/series/villains-are-destined-to-die?c_id=1126&c_title=The%20Ultimate%20Villainess%20Collection
|
||||
20260923020956 https://tapas.io/series/villains-are-destined-to-die?c_id=1126&c_title=The%20Ultimate%20Villainess%20Collection
|
||||
20250319165522 https://tapas.io/series/villains-are-destined-to-die?c_id=1397&c_title=Tyrants%20in%20love
|
||||
20260923030759 https://tapas.io/series/villains-are-destined-to-die?c_id=1397&c_title=Tyrants%20in%20love
|
||||
20250113210223 https://tapas.io/series/villains-are-destined-to-die?c_id=1419&c_title=The%20Deadliest%20of%20Games
|
||||
20260422152724 https://tapas.io/series/villains-are-destined-to-die?c_id=1419&c_title=The%20Deadliest%20of%20Games
|
||||
20260923025934 https://tapas.io/series/villains-are-destined-to-die?c_id=1419&c_title=The%20Deadliest%20of%20Games
|
||||
20240724005926 https://tapas.io/series/villains-are-destined-to-die?c_id=1447&c_title=The%20Villainess%20Collection
|
||||
20250213134412 https://tapas.io/series/villains-are-destined-to-die?c_id=1447&c_title=The%20Villainess%20Collection
|
||||
20260923020807 https://tapas.io/series/villains-are-destined-to-die?c_id=1447&c_title=The%20Villainess%20Collection
|
||||
20240616181138 https://tapas.io/series/villains-are-destined-to-die?c_id=1465&c_title=Top%20Tapas%2010
|
||||
20250907141930 https://tapas.io/series/villains-are-destined-to-die?c_id=1465&c_title=Top%20Tapas%2010
|
||||
20260923024142 https://tapas.io/series/villains-are-destined-to-die?c_id=1465&c_title=Top%20Tapas%2010
|
||||
20250714001404 https://tapas.io/series/villains-are-destined-to-die?c_id=1474&c_title=Villainesses%20are%20here%20to%20Stay
|
||||
20260923013259 https://tapas.io/series/villains-are-destined-to-die?c_id=1474&c_title=Villainesses%20are%20here%20to%20Stay
|
||||
20251011045613 https://tapas.io/series/villains-are-destined-to-die?c_id=1479&c_title=March%20Takeover%20Week%203%20Collection
|
||||
20260923014334 https://tapas.io/series/villains-are-destined-to-die?c_id=1479&c_title=March%20Takeover%20Week%203%20Collection
|
||||
20250126055929 https://tapas.io/series/villains-are-destined-to-die?c_id=1491&c_title=Best%20Dramatic%20Stories%21
|
||||
20260923020334 https://tapas.io/series/villains-are-destined-to-die?c_id=1491&c_title=Best%20Dramatic%20Stories%21
|
||||
20250217164440 https://tapas.io/series/villains-are-destined-to-die?c_id=1498&c_title=Top%2010%20Romance%20Stories
|
||||
20260923023032 https://tapas.io/series/villains-are-destined-to-die?c_id=1498&c_title=Top%2010%20Romance%20Stories
|
||||
20250206141557 https://tapas.io/series/villains-are-destined-to-die?c_id=1554&c_title=I%20am%20the%20Villainess%3F%21
|
||||
20260608151039 https://tapas.io/series/villains-are-destined-to-die?c_id=1554&c_title=I%20am%20the%20Villainess%3F%21
|
||||
20260923021013 https://tapas.io/series/villains-are-destined-to-die?c_id=1554&c_title=I%20am%20the%20Villainess%3F%21
|
||||
20250616192131 https://tapas.io/series/villains-are-destined-to-die?c_id=1556&c_title=Romance%20with%20Fantasy
|
||||
20260923030730 https://tapas.io/series/villains-are-destined-to-die?c_id=1556&c_title=Romance%20with%20Fantasy
|
||||
20230606014551 https://tapas.io/series/villains-are-destined-to-die?c_id=1594&c_title=Devastatingly%20Handsome%21
|
||||
20250123124357 https://tapas.io/series/villains-are-destined-to-die?c_id=1594&c_title=Devastatingly%20Handsome%21
|
||||
20260923020103 https://tapas.io/series/villains-are-destined-to-die?c_id=1594&c_title=Devastatingly%20Handsome%21
|
||||
20240715233146 https://tapas.io/series/villains-are-destined-to-die?c_id=1670&c_title=Strategic%20Leads
|
||||
20260923012757 https://tapas.io/series/villains-are-destined-to-die?c_id=1670&c_title=Strategic%20Leads
|
||||
20250122205620 https://tapas.io/series/villains-are-destined-to-die?c_id=1681&c_title=September%202022%3A%20The%20Quintessential%20Sale
|
||||
20260219001555 https://tapas.io/series/villains-are-destined-to-die?c_id=1681&c_title=September%202022%3A%20The%20Quintessential%20Sale
|
||||
20260923021113 https://tapas.io/series/villains-are-destined-to-die?c_id=1681&c_title=September%202022%3A%20The%20Quintessential%20Sale
|
||||
20240811222255 https://tapas.io/series/villains-are-destined-to-die?c_id=1684&c_title=September%20Binge-A-Thon%3A%20Hand-picked%20series%20for%20you%21
|
||||
20260923023244 https://tapas.io/series/villains-are-destined-to-die?c_id=1684&c_title=September%20Binge-A-Thon%3A%20Hand-picked%20series%20for%20you%21
|
||||
20251010161412 https://tapas.io/series/villains-are-destined-to-die?c_id=1688&c_title=Hand-picked%20series%20for%20you%21
|
||||
20260923012845 https://tapas.io/series/villains-are-destined-to-die?c_id=1688&c_title=Hand-picked%20series%20for%20you%21
|
||||
20250326011650 https://tapas.io/series/villains-are-destined-to-die?c_id=1832&c_title=%F0%9F%8E%B9A%20Helpful%20Guide%20to%20Tapas%20July%20Deals%F0%9F%8E%B9
|
||||
20260923022750 https://tapas.io/series/villains-are-destined-to-die?c_id=1832&c_title=%F0%9F%8E%B9A%20Helpful%20Guide%20to%20Tapas%20July%20Deals%F0%9F%8E%B9
|
||||
20250804191603 https://tapas.io/series/villains-are-destined-to-die?c_id=1880&c_title=%F0%9F%8E%89Tapas%2012th%20Birthday%20Bash%F0%9F%8E%82
|
||||
20260923020934 https://tapas.io/series/villains-are-destined-to-die?c_id=1880&c_title=%F0%9F%8E%89Tapas%2012th%20Birthday%20Bash%F0%9F%8E%82
|
||||
20250521233327 https://tapas.io/series/villains-are-destined-to-die?c_id=1882&c_title=%5BBirthday%20Bash%5D%20Romance
|
||||
20260923020348 https://tapas.io/series/villains-are-destined-to-die?c_id=1882&c_title=%5BBirthday%20Bash%5D%20Romance
|
||||
20220129003329 https://tapas.io/series/villains-are-destined-to-die?c_id=400&c_title=Featured%20comics
|
||||
20221207052610 https://tapas.io/series/villains-are-destined-to-die?c_id=400&c_title=Featured%20comics
|
||||
20230321162858 https://tapas.io/series/villains-are-destined-to-die?c_id=400&c_title=Featured%20comics
|
||||
20220309091051 https://tapas.io/series/villains-are-destined-to-die?c_id=400&c_title=Featured+comics
|
||||
20260923015856 https://tapas.io/series/villains-are-destined-to-die?c_id=911&c_title=Grateful%20for%20Love%F0%9F%92%9D
|
||||
20240221075429 https://tapas.io/series/villains-are-destined-to-die?c_id=937&c_title=Best%20of%202020
|
||||
20260923021202 https://tapas.io/series/villains-are-destined-to-die?c_id=937&c_title=Best%20of%202020
|
||||
20250719171504 https://tapas.io/series/villains-are-destined-to-die?c_id=953&c_title=%E2%9D%84%EF%B8%8FLet%20It%20Snow%20Hide%20and%20Seek%20Challenge%E2%9D%84%EF%B8%8F
|
||||
20260923033236 https://tapas.io/series/villains-are-destined-to-die?c_id=953&c_title=%E2%9D%84%EF%B8%8FLet%20It%20Snow%20Hide%20and%20Seek%20Challenge%E2%9D%84%EF%B8%8F
|
||||
20230127080232 https://tapas.io/series/villains-are-destined-to-die?c_id=956&c_title=Game%20on
|
||||
20241011084243 https://tapas.io/series/villains-are-destined-to-die?c_id=956&c_title=Game%20on
|
||||
20260923015454 https://tapas.io/series/villains-are-destined-to-die?c_id=956&c_title=Game%20on
|
||||
20220521133810 https://tapas.io/series/villains-are-destined-to-die?c_id=975&c_title=Villainess%20Face-off%21
|
||||
20230320232000 https://tapas.io/series/villains-are-destined-to-die?c_id=975&c_title=Villainess%20Face-off%21
|
||||
20260923020331 https://tapas.io/series/villains-are-destined-to-die?c_id=975&c_title=Villainess%20Face-off%21
|
||||
Reference in new issue
Block a user