├── src ├── TrackerWrapper.ts ├── models │ ├── DynamicUI │ │ ├── WebViewButton │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Form │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Link │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── FormRow.ts │ │ ├── Label │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Header │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Select │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Switch │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Section │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Stepper │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── InputField │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── OAuthButton │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── Button │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── MultilineLabel │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── NavigationButton │ │ │ ├── _impl.ts │ │ │ └── index.ts │ │ ├── impl_export.ts │ │ └── index.ts │ ├── Constants │ │ └── index.ts │ ├── Manga │ │ ├── _impl.ts │ │ └── index.ts │ ├── Chapter │ │ ├── _impl.ts │ │ └── index.ts │ ├── MangaUpdate │ │ ├── index.ts │ │ └── _impl.ts │ ├── SearchField │ │ ├── _impl.ts │ │ └── index.ts │ ├── SourceManga │ │ ├── _impl.ts │ │ └── index.ts │ ├── TrackedManga │ │ ├── _impl.ts │ │ └── index.ts │ ├── HomeSection │ │ ├── _impl.ts │ │ └── index.ts │ ├── PagedResults │ │ ├── _impl.ts │ │ └── index.ts │ ├── ChapterDetails │ │ ├── _impl.ts │ │ └── index.ts │ ├── TrackedMangaChapterReadAction │ │ └── index.ts │ ├── TagSection │ │ ├── _impl.ts │ │ └── index.ts │ ├── MangaTile │ │ ├── _impl.ts │ │ └── index.ts │ ├── RequestHeaders │ │ └── index.ts │ ├── RequestObject │ │ ├── _impl.ts │ │ └── index.ts │ ├── impl_export.ts │ ├── TrackerActionQueue │ │ └── index.ts │ ├── SourceStateManager │ │ ├── index.ts │ │ └── _impl.ts │ ├── RequestManager │ │ ├── index.ts │ │ └── _impl.ts │ ├── ResponseObject │ │ └── index.ts │ ├── SourceTag │ │ └── index.ts │ ├── RequestInterceptor │ │ └── index.ts │ ├── index.ts │ ├── Languages │ │ └── index.ts │ ├── SearchRequest │ │ └── index.ts │ ├── RawData │ │ ├── _impl.ts │ │ └── index.ts │ └── SourceInfo │ │ └── index.ts ├── base │ ├── index.ts │ ├── Requestable.ts │ ├── Searchable.ts │ └── Tracker.ts ├── index.ts └── APIWrapper.ts ├── .npmignore ├── docs ├── assets │ └── images │ │ ├── icons.png │ │ ├── widgets.png │ │ ├── icons@2x.png │ │ └── widgets@2x.png └── modules │ ├── _models_impl_export_.html │ ├── _base_madara_.html │ ├── _base_source_.html │ ├── _models_languages_index_.html │ ├── _models_constants_index_.html │ ├── _models_sourcetag_index_.html │ ├── _models_chapter_index_.html │ ├── _models_mangaupdate_index_.html │ ├── _models_pagedresults_index_.html │ ├── _models_searchrequest_index_.html │ ├── _models_chapterdetails_index_.html │ ├── _base_index_.html │ ├── _models_manga__impl_.html │ ├── _models_chapter__impl_.html │ ├── _models_mangatile__impl_.html │ ├── _models_tagsection__impl_.html │ ├── _models_homesection__impl_.html │ ├── _models_mangaupdate__impl_.html │ ├── _models_pagedresults__impl_.html │ ├── _models_requestobject__impl_.html │ ├── _models_searchrequest__impl_.html │ ├── _models_chapterdetails__impl_.html │ ├── _models_tagsection_index_.html │ ├── _models_mangatile_index_.html │ ├── _models_requestobject_index_.html │ ├── _models_manga_index_.html │ └── _models_homesection_index_.html ├── .gitignore ├── .run └── current Mocha test file.run.xml ├── .github └── workflows │ └── main.yml ├── README.md ├── package.json ├── .vscode └── launch.json ├── LICENSE └── tsconfig.json /src/TrackerWrapper.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .github/ 2 | docs/ 3 | src/ -------------------------------------------------------------------------------- /src/models/DynamicUI/WebViewButton/_impl.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/base/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Source' 2 | export * from './Tracker' -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './base' 2 | export * from './models' 3 | export * from './APIWrapper' -------------------------------------------------------------------------------- /docs/assets/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Paperback-iOS/extensions-common/HEAD/docs/assets/images/icons.png -------------------------------------------------------------------------------- /docs/assets/images/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Paperback-iOS/extensions-common/HEAD/docs/assets/images/widgets.png -------------------------------------------------------------------------------- /docs/assets/images/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Paperback-iOS/extensions-common/HEAD/docs/assets/images/icons@2x.png -------------------------------------------------------------------------------- /docs/assets/images/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Paperback-iOS/extensions-common/HEAD/docs/assets/images/widgets@2x.png -------------------------------------------------------------------------------- /src/base/Requestable.ts: -------------------------------------------------------------------------------- 1 | import { RequestManager } from ".." 2 | 3 | export interface Requestable { 4 | readonly requestManager: RequestManager 5 | } -------------------------------------------------------------------------------- /src/models/Constants/index.ts: -------------------------------------------------------------------------------- 1 | declare global { 2 | const USER_AGENT: string; 3 | const APP_VERSION: string; 4 | const IS_PUBLIC: string; 5 | } 6 | 7 | export {} -------------------------------------------------------------------------------- /src/models/DynamicUI/Form/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Form } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createForm = function(info: Form): Form { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Link/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Link } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createLink = function(info: Link): Link { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/Manga/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Manga } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createManga = function (manga: Manga): Manga { 6 | return manga 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/FormRow.ts: -------------------------------------------------------------------------------- 1 | export interface FormRow { 2 | id: string 3 | value: any 4 | } 5 | 6 | export interface FormRowTyped extends FormRow { 7 | value: T 8 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Label/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Label } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createLabel = function(info: Label): Label { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Header/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Header } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createHeader = function(info: Header): Header { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Select/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Select } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createSelect = function(info: Select): Select { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Switch/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Switch } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createSwitch = function(info: Switch): Switch { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/Chapter/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Chapter } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createChapter = function (chapter: Chapter): Chapter { 6 | return chapter 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Section/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Section } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createSection = function(info: Section): Section { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Stepper/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Stepper } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createStepper = function(info: Stepper): Stepper { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/MangaUpdate/index.ts: -------------------------------------------------------------------------------- 1 | export interface MangaUpdates { 2 | ids: string[] 3 | } 4 | 5 | declare global { 6 | function createMangaUpdates(update: MangaUpdates): MangaUpdates 7 | } -------------------------------------------------------------------------------- /src/models/SearchField/_impl.ts: -------------------------------------------------------------------------------- 1 | import { SearchField } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createSearchField = function(info: SearchField): SearchField { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/SourceManga/_impl.ts: -------------------------------------------------------------------------------- 1 | import { SourceManga } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createSourceManga = function(info: SourceManga): SourceManga { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/InputField/_impl.ts: -------------------------------------------------------------------------------- 1 | import { InputField } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createInputField = function(info: InputField): InputField { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/TrackedManga/_impl.ts: -------------------------------------------------------------------------------- 1 | import { TrackedManga } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createTrackedManga = function(info: TrackedManga): TrackedManga { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/OAuthButton/_impl.ts: -------------------------------------------------------------------------------- 1 | import { OAuthButton } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createOAuthButton = function(info: OAuthButton): OAuthButton { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/HomeSection/_impl.ts: -------------------------------------------------------------------------------- 1 | import { HomeSection } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createHomeSection = function (section: HomeSection): HomeSection { 6 | return section 7 | } -------------------------------------------------------------------------------- /src/models/MangaUpdate/_impl.ts: -------------------------------------------------------------------------------- 1 | import { MangaUpdates } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createMangaUpdates = function (update: MangaUpdates): MangaUpdates { 6 | return update 7 | } -------------------------------------------------------------------------------- /src/models/PagedResults/_impl.ts: -------------------------------------------------------------------------------- 1 | import { PagedResults } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createPagedResults = function (update: PagedResults): PagedResults { 6 | return update 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Button/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Button } from "." 2 | import { FormRow } from "../FormRow" 3 | 4 | let _global = global as any 5 | 6 | _global.createButton = function(info: Button): Button { 7 | return info 8 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/MultilineLabel/_impl.ts: -------------------------------------------------------------------------------- 1 | import { MultilineLabel } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createMultilineLabel = function(info: MultilineLabel): MultilineLabel { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/WebViewButton/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface WebViewButton extends FormRowTyped { 4 | label: string 5 | completionHandler: () => void 6 | } -------------------------------------------------------------------------------- /src/models/ChapterDetails/_impl.ts: -------------------------------------------------------------------------------- 1 | import { ChapterDetails } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createChapterDetails = function (chapterDetails: ChapterDetails): ChapterDetails { 6 | return chapterDetails 7 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/NavigationButton/_impl.ts: -------------------------------------------------------------------------------- 1 | import { NavigationButton } from "." 2 | 3 | let _global = global as any 4 | 5 | _global.createNavigationButton = function(info: NavigationButton): NavigationButton { 6 | return info 7 | } -------------------------------------------------------------------------------- /src/models/SearchField/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface SearchField { 3 | id: string 4 | placeholder: string 5 | name: string 6 | } 7 | 8 | declare global { 9 | function createSearchField(info: SearchField): SearchField 10 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Link/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface Link extends FormRowTyped { 4 | label: string 5 | } 6 | 7 | declare global { 8 | function createLink(info: Link): Link 9 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Switch/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface Switch extends FormRowTyped { 4 | label: string 5 | } 6 | 7 | declare global { 8 | function createSwitch(info: Switch): Switch 9 | } -------------------------------------------------------------------------------- /src/models/SourceManga/index.ts: -------------------------------------------------------------------------------- 1 | import { Manga } from ".." 2 | 3 | export interface SourceManga { 4 | id: string 5 | mangaInfo: Manga 6 | } 7 | 8 | declare global { 9 | function createSourceManga(info: SourceManga): SourceManga 10 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Label/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface Label extends FormRowTyped { 4 | label: string 5 | } 6 | 7 | declare global { 8 | function createLabel(info: Label): Label 9 | } -------------------------------------------------------------------------------- /src/models/TrackedManga/index.ts: -------------------------------------------------------------------------------- 1 | import { Manga } from ".." 2 | 3 | export interface TrackedManga { 4 | id: string 5 | mangaInfo: Manga 6 | } 7 | 8 | declare global { 9 | function createTrackedManga(info: TrackedManga): TrackedManga 10 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #compiled files and the monstor that node usually is 2 | node_modules 3 | dist 4 | bundles 5 | 6 | #compiled sources 7 | 8 | reference 9 | 10 | .prettierrc 11 | .nyc_output 12 | coverage 13 | 14 | .idea 15 | 16 | # mac stuff 17 | .DS_Store 18 | -------------------------------------------------------------------------------- /src/models/PagedResults/index.ts: -------------------------------------------------------------------------------- 1 | import { MangaTile } from ".."; 2 | 3 | export interface PagedResults { 4 | results: MangaTile[] 5 | metadata?: any 6 | } 7 | 8 | declare global { 9 | function createPagedResults(update: PagedResults): PagedResults 10 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/MultilineLabel/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface MultilineLabel extends FormRowTyped { 4 | label: string 5 | } 6 | 7 | declare global { 8 | function createMultilineLabel(info: MultilineLabel): MultilineLabel 9 | } -------------------------------------------------------------------------------- /src/models/TrackedMangaChapterReadAction/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface TrackedMangaChapterReadAction { 3 | mangaId: string 4 | sourceMangaId: string 5 | sourceChapterId: string 6 | sourceId: string 7 | chapterNumber: number 8 | volumeNumber: number 9 | readTime: Date 10 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Button/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface Button extends FormRowTyped { 4 | label: string 5 | onTap: () => void 6 | } 7 | 8 | declare global { 9 | function createButton(info: Button): Button 10 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Header/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface Header extends FormRowTyped { 4 | title: string 5 | subtitle: string 6 | imageUrl: string 7 | } 8 | declare global { 9 | function createHeader(info: Header): Header 10 | } -------------------------------------------------------------------------------- /src/models/TagSection/_impl.ts: -------------------------------------------------------------------------------- 1 | import { TagSection, Tag } from '.' 2 | 3 | const _global = global as any 4 | 5 | _global.createTagSection = function (tagSection: TagSection): TagSection { 6 | return tagSection 7 | } 8 | 9 | _global.createTag = function (tag: Tag): Tag { 10 | return tag 11 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Section/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRow } from "../FormRow" 2 | 3 | export interface Section { 4 | id: string 5 | header?: string 6 | footer?: string 7 | rows: () => Promise 8 | } 9 | 10 | declare global { 11 | function createSection(section: Section): Section 12 | } -------------------------------------------------------------------------------- /src/models/MangaTile/_impl.ts: -------------------------------------------------------------------------------- 1 | import { MangaTile, IconText } from "." 2 | 3 | const _global = global as any 4 | _global.createMangaTile = function (mangaTile: MangaTile): MangaTile { 5 | return mangaTile 6 | } 7 | 8 | _global.createIconText = function (iconText: IconText): IconText { 9 | return iconText 10 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Stepper/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface Stepper extends FormRowTyped { 4 | label: string 5 | min?: number 6 | max?: number 7 | step?: number 8 | } 9 | 10 | declare global { 11 | function createStepper(info: Stepper): Stepper 12 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Form/index.ts: -------------------------------------------------------------------------------- 1 | import { Section } from '../Section' 2 | 3 | export interface Form { 4 | sections: () => Promise 5 | onSubmit: (values: any) => Promise 6 | validate: (values: any) => Promise 7 | } 8 | 9 | declare global { 10 | function createForm(info: Form): Form 11 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/InputField/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface InputField extends FormRowTyped { 4 | placeholder: string 5 | label?: string 6 | maskInput: boolean 7 | } 8 | 9 | declare global { 10 | function createInputField(info: InputField): InputField 11 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/NavigationButton/index.ts: -------------------------------------------------------------------------------- 1 | import { Form } from "../Form" 2 | import { FormRowTyped } from "../FormRow" 3 | 4 | export interface NavigationButton extends FormRowTyped { 5 | label: string 6 | form: Form 7 | } 8 | 9 | declare global { 10 | function createNavigationButton(info: NavigationButton): NavigationButton 11 | } -------------------------------------------------------------------------------- /src/models/RequestHeaders/index.ts: -------------------------------------------------------------------------------- 1 | interface RequestHeadersAny { 2 | [header: string]: string 3 | } 4 | 5 | interface RequestHeadersDefined { 6 | 'user-agent'?: string 7 | 'content-type'?: string 8 | 'content-length'?: string 9 | 'authorization'?: string 10 | 'accept-encoding'?: string 11 | 'referer'?: string 12 | } 13 | 14 | export type RequestHeaders = RequestHeadersAny & RequestHeadersDefined -------------------------------------------------------------------------------- /src/models/RequestObject/_impl.ts: -------------------------------------------------------------------------------- 1 | import { Request, Cookie } from '.' 2 | 3 | const _global = global as any 4 | 5 | _global.createCookie = function (cookie: Cookie): Cookie { 6 | return cookie 7 | } 8 | 9 | _global.createRequestObject = function(request: Request): Request { 10 | return request 11 | } 12 | 13 | _global.createRequestObject = function (requestObject: Request): Request { 14 | return requestObject 15 | } 16 | -------------------------------------------------------------------------------- /src/models/DynamicUI/impl_export.ts: -------------------------------------------------------------------------------- 1 | import './Button/_impl' 2 | import './Form/_impl' 3 | import './Header/_impl' 4 | import './InputField/_impl' 5 | import './Label/_impl' 6 | import './Link/_impl' 7 | import './MultilineLabel/_impl' 8 | import './NavigationButton/_impl' 9 | import './OAuthButton/_impl' 10 | import './Section/_impl' 11 | import './Select/_impl' 12 | import './Switch/_impl' 13 | import './WebViewButton/_impl' 14 | import './Stepper/_impl' -------------------------------------------------------------------------------- /.run/current Mocha test file.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/models/DynamicUI/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button' 2 | export * from './Form' 3 | export * from './Header' 4 | export * from './InputField' 5 | export * from './Label' 6 | export * from './Link' 7 | export * from './MultilineLabel' 8 | export * from './NavigationButton' 9 | export * from './OAuthButton' 10 | export * from './Section' 11 | export * from './Select' 12 | export * from './Switch' 13 | export * from './WebViewButton' 14 | export * from './FormRow' 15 | export * from './Stepper' -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v1 12 | - uses: actions/setup-node@v1 13 | with: 14 | node-version: 12 15 | registry-url: https://registry.npmjs.org/ 16 | - run: npm install 17 | - run: npm publish --access public 18 | env: 19 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} -------------------------------------------------------------------------------- /src/base/Searchable.ts: -------------------------------------------------------------------------------- 1 | import { PagedResults, SearchField, SearchRequest, TagSection } from "../models" 2 | import { Requestable } from "./Requestable" 3 | 4 | export interface Searchable extends Requestable { 5 | getSearchResults(query: SearchRequest, metadata: unknown): Promise 6 | 7 | getSearchTags?(): Promise 8 | getSearchFields?(): Promise 9 | 10 | supportsTagExclusion?(): Promise 11 | supportsSearchOperators?(): Promise 12 | } -------------------------------------------------------------------------------- /src/models/impl_export.ts: -------------------------------------------------------------------------------- 1 | import './Chapter/_impl' 2 | import './ChapterDetails/_impl' 3 | import './HomeSection/_impl' 4 | import './Manga/_impl' 5 | import './MangaTile/_impl' 6 | import './RequestObject/_impl' 7 | import './TagSection/_impl' 8 | import './MangaUpdate/_impl' 9 | import './PagedResults/_impl' 10 | import './SourceStateManager/_impl' 11 | import './RequestManager/_impl' 12 | import './DynamicUI/impl_export' 13 | import './TrackedManga/_impl' 14 | import './SourceManga/_impl' 15 | import './SearchField/_impl' 16 | import './RawData/_impl' 17 | -------------------------------------------------------------------------------- /src/models/TrackerActionQueue/index.ts: -------------------------------------------------------------------------------- 1 | import { Manga } from ".." 2 | import { TrackedMangaChapterReadAction } from "../TrackedMangaChapterReadAction" 3 | 4 | export interface TrackerActionQueue { 5 | queuedChapterReadActions(): Promise 6 | 7 | retryChapterReadAction(chapterReadAction: TrackedMangaChapterReadAction): Promise 8 | discardChapterReadAction(chapterReadACtion: TrackedMangaChapterReadAction): Promise 9 | 10 | retryAllChapterReadAction(): Promise 11 | discardAllChapterReadAction(): Promise 12 | } -------------------------------------------------------------------------------- /src/models/DynamicUI/Select/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | import { Label } from "../Label" 3 | 4 | export interface Select extends FormRowTyped { 5 | label: string 6 | options: string[] 7 | 8 | allowsMultiselect?: boolean 9 | /// If multiselect is allowed, specify the minimum number of selected items required 10 | minimumOptionCount?: number 11 | 12 | /// Returns the label for the given option 13 | displayLabel: (option: string) => string 14 | } 15 | 16 | declare global { 17 | function createSelect(info: Select): Select 18 | } -------------------------------------------------------------------------------- /src/models/SourceStateManager/index.ts: -------------------------------------------------------------------------------- 1 | // Any dependent objects? Probably not, json objects from this point on. 2 | export interface SourceStateManagerInfo { 3 | 4 | } 5 | 6 | export interface SourceStateManager extends SourceStateManagerInfo { 7 | store: (key: string, value: unknown) => Promise 8 | retrieve: (key: string) => Promise 9 | 10 | keychain: SourceKeychain 11 | } 12 | 13 | export interface SourceKeychain { 14 | store: (key: string, value: unknown) => Promise 15 | retrieve: (key: string) => Promise 16 | } 17 | 18 | declare global { 19 | function createSourceStateManager(info:SourceStateManagerInfo): SourceStateManager 20 | } -------------------------------------------------------------------------------- /src/models/RequestManager/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "../RequestObject" 2 | import { Response } from "../ResponseObject" 3 | import { RequestInterceptor } from "../RequestInterceptor" 4 | 5 | export interface RequestManagerInfo { 6 | requestsPerSecond: number 7 | 8 | /** 9 | * The time (in milliseconds) before a request is retried or dropped 10 | */ 11 | requestTimeout?: number 12 | 13 | interceptor?: RequestInterceptor 14 | } 15 | 16 | export interface RequestManager extends RequestManagerInfo { 17 | schedule: (request: Request, retryCount: number) => Promise 18 | } 19 | 20 | declare global { 21 | function createRequestManager(info: RequestManagerInfo): RequestManager 22 | } 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Paperback Sources 2 | ## About Sources 3 | Sources were a highly requested feature for Paperback as it allows users to read manga that are otherwise not on Paperback (The default source of the app). The sources are community-driven, and may be updated and changed without requiring an application update. This allows for a rolling development process, implementing changes as they come in, rather than waiting for the application developer to implement new sources and bugfixes. 4 | 5 | ## Developing A Source 6 | To find out more about developing a source, check out the [website](https://paperback.moe/help/contribution/extension-development/), use one of the current implementations in the repo as an example, and/or be sure to ask in the [Discord](https://discord.gg/Ny83JV3)! 7 | -------------------------------------------------------------------------------- /src/models/ResponseObject/index.ts: -------------------------------------------------------------------------------- 1 | import { RawData } from "../RawData" 2 | import { Request } from "../RequestObject" 3 | 4 | export interface Response { 5 | rawData: RawData 6 | 7 | /** 8 | * The response which was provided from the server 9 | */ 10 | data: string 11 | 12 | /** 13 | * The HTTP status code from the server response 14 | */ 15 | status: number 16 | 17 | /** 18 | * The HTTP headers that the server responded with 19 | * All header names are lower cased and can be accessed 20 | * using the bracket notation. 21 | * Example: response.headers['content-type'] 22 | */ 23 | headers: any 24 | 25 | /** 26 | * The request which generated this response. 27 | */ 28 | request: Request 29 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "paperback-extensions-common", 3 | "version": "4.3.5", 4 | "description": "The base methods and structures for a Paperback extension repo", 5 | "main": "dist/index.js", 6 | "types": "dist/index.d.ts", 7 | "scripts": { 8 | "start": "tsc && node dist/index.js", 9 | "build": "tsc", 10 | "prepare": "tsc" 11 | }, 12 | "author": "Paperback", 13 | "license": "ISC", 14 | "dependencies": { 15 | "axios": "^0.21.1", 16 | "cheerio": "^1.0.0-rc.3", 17 | "typescript": "^3.9.7" 18 | }, 19 | "devDependencies": { 20 | "@types/cheerio": "^0.22.21", 21 | "@types/mocha": "^8.2.2", 22 | "chai": "^4.3.4", 23 | "chai-as-promised": "^7.1.1", 24 | "mocha": "^7.2.0", 25 | "ts-mocha": "^8.0.0", 26 | "typedoc": "^0.20.34" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/models/SourceTag/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * The {@link SourceTags} interface is an optional metadata interface which the Website uses to 3 | * render pretty HTML elements relating to your source. 4 | * The color of the tag is defined by the {@link TagType} enumeration 5 | */ 6 | export interface SourceTag { 7 | text: string 8 | type: TagType 9 | } 10 | 11 | /** 12 | * An enumerator which {@link SourceTags} uses to define the color of the tag rendered on the website. 13 | * Five types are available: blue, green, grey, yellow and red, the default one is blue. 14 | * Common colors are red for (Broken), yellow for (+18), grey for (Country-Proof) 15 | */ 16 | export enum TagType { 17 | BLUE = 'default', 18 | GREEN = 'success', 19 | GREY = 'info', 20 | YELLOW = 'warning', 21 | RED = 'danger' 22 | } -------------------------------------------------------------------------------- /src/models/RequestInterceptor/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from "../RequestObject" 2 | import { Response } from "../ResponseObject" 3 | 4 | export interface RequestInterceptor { 5 | /** 6 | * This method is invoked asynchronously 7 | * @param request The intercepted request 8 | */ 9 | interceptRequest(request: Request): Promise 10 | 11 | /** 12 | * While this method can be marked async, you should not 13 | * do any long running/blocking tasks here. The underlying swift 14 | * implementation does not run asynchronously and blocks the 15 | * thread it was invoked on 16 | * 17 | * You *cannot* modify anything other than the data in a Response 18 | * @param response The intercepted response 19 | */ 20 | interceptResponse(response: Response): Promise 21 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "launch", 10 | "name": "Mocha Current File", 11 | "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", 12 | "args": [ 13 | "--no-timeouts", 14 | "--trace-warnings", 15 | "--colors", 16 | "${file}", 17 | "--require", 18 | "ts-node/register" 19 | ], 20 | "console": "integratedTerminal", 21 | "sourceMaps": true, 22 | "internalConsoleOptions": "neverOpen" 23 | } 24 | ] 25 | } -------------------------------------------------------------------------------- /src/models/TagSection/index.ts: -------------------------------------------------------------------------------- 1 | export interface Tag { 2 | /** 3 | * An internal identifier of this tag 4 | */ 5 | id: string 6 | 7 | /** 8 | * A user-presentable representation of how people read the tag. This 9 | * may be the same as {@link Tag.id} 10 | */ 11 | label: string 12 | } 13 | 14 | /** 15 | * A category of tags 16 | */ 17 | export interface TagSection { 18 | /** 19 | * The internal identifier of this tag category 20 | */ 21 | id: string 22 | 23 | /** 24 | * How the tag category should be rendered to the user 25 | */ 26 | label: string 27 | 28 | /** 29 | * A list of {@link Tag} objects which should be rendered under this category 30 | */ 31 | tags: Tag[] 32 | } 33 | 34 | declare global { 35 | function createTag(tag: Tag): Tag 36 | function createTagSection(tagSection: TagSection): TagSection 37 | } -------------------------------------------------------------------------------- /src/models/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Chapter' 2 | export * from './ChapterDetails' 3 | export * from './HomeSection' 4 | export * from './Manga' 5 | export * from './MangaTile' 6 | export * from './RequestObject' 7 | export * from './SearchRequest' 8 | export * from './TagSection' 9 | export * from './SourceTag' 10 | export * from './Languages' 11 | export * from './Constants' 12 | export * from './MangaUpdate' 13 | export * from './PagedResults' 14 | export * from './ResponseObject' 15 | export * from './RequestManager' 16 | export * from './RequestHeaders' 17 | export * from './SourceInfo' 18 | export * from './SourceStateManager' 19 | export * from './RequestInterceptor' 20 | export * from './DynamicUI' 21 | export * from './TrackedManga' 22 | export * from './SourceManga' 23 | export * from './TrackedMangaChapterReadAction' 24 | export * from './TrackerActionQueue' 25 | export * from './SearchField' 26 | export * from './RawData' 27 | -------------------------------------------------------------------------------- /src/models/DynamicUI/OAuthButton/index.ts: -------------------------------------------------------------------------------- 1 | import { FormRowTyped } from "../FormRow" 2 | 3 | export interface OAuthButton extends FormRowTyped { 4 | label: string 5 | 6 | authorizeEndpoint: String 7 | clientId: String 8 | responseType: OAuthResponseType 9 | redirectUri?: string 10 | scopes?: string[] 11 | 12 | /// Store this inside the keychain in the state manager 13 | successHandler: (accessToken: string, refreshToken?: string) => Promise 14 | } 15 | 16 | /// No need to make a wrapper for this, you can use it directly 17 | interface OAuthResponseType { 18 | type: "code" | "pkce" | "token" 19 | 20 | /// Only required for "pkce" and "code" response types 21 | tokenEndpoint?: string 22 | 23 | /// Only required for "pkce" response type 24 | pkceCodeLength?: number 25 | } 26 | 27 | declare global { 28 | function createOAuthButton(info: OAuthButton): OAuthButton 29 | } -------------------------------------------------------------------------------- /src/models/Languages/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export enum LanguageCode { 3 | UNKNOWN = '_unknown', 4 | BENGALI = 'bd', 5 | BULGARIAN = 'bg', 6 | BRAZILIAN = 'br', 7 | CHINEESE = 'cn', 8 | CZECH = 'cz', 9 | GERMAN = 'de', 10 | DANISH = 'dk', 11 | ENGLISH = 'gb', 12 | SPANISH = 'es', 13 | FINNISH = 'fi', 14 | FRENCH = 'fr', 15 | WELSH = 'gb', 16 | GREEK = 'gr', 17 | CHINEESE_HONGKONG = 'hk', 18 | HUNGARIAN = 'hu', 19 | INDONESIAN = 'id', 20 | ISRELI = 'il', 21 | INDIAN = 'in', 22 | IRAN = 'ir', 23 | ITALIAN = 'it', 24 | JAPANESE = 'jp', 25 | KOREAN = 'kr', 26 | LITHUANIAN = 'lt', 27 | MONGOLIAN = 'mn', 28 | MEXIAN = 'mx', 29 | MALAY = 'my', 30 | DUTCH = 'nl', 31 | NORWEGIAN = 'no', 32 | PHILIPPINE = 'ph', 33 | POLISH = 'pl', 34 | PORTUGUESE = 'pt', 35 | ROMANIAN = 'ro', 36 | RUSSIAN = 'ru', 37 | SANSKRIT = 'sa', // in the year of our lord >2000 A.D 38 | SAMI = 'si', 39 | THAI = 'th', 40 | TURKISH = 'tr', 41 | UKRAINIAN = 'ua', 42 | VIETNAMESE = 'vn' 43 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Daniel Kovalevich 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/models/SearchRequest/index.ts: -------------------------------------------------------------------------------- 1 | import { Tag } from "../TagSection" 2 | 3 | /** 4 | * The {@link SearchRequest} interface is a list of optional queries, which 5 | * can be packed together into a search request. 6 | * Everything is optional, allowing users flexibility to make a search however they 7 | * desire. As a Source developer, you should ensure that as many of these fields are handled 8 | * as fine searching is an important user feature. 9 | */ 10 | export interface SearchRequest { 11 | /** 12 | * The title of the search request. This usually is the plaintext query you are 13 | * making as a user 14 | */ 15 | title?: string 16 | 17 | includedTags?: Tag[] 18 | excludedTags?: Tag[] 19 | 20 | includeOperator?: SearchOperator 21 | excludeOperator?: SearchOperator 22 | 23 | /** 24 | * This is basically anything other than tags that the user enters such as: 25 | * author: ShindoL author: Miyazuki 26 | * where `author` would be the key and `ShindoL`, `Myazuki` would be the values. 27 | */ 28 | parameters: Record 29 | } 30 | 31 | export enum SearchOperator { 32 | AND = 'AND', OR = 'OR' 33 | } -------------------------------------------------------------------------------- /src/models/ChapterDetails/index.ts: -------------------------------------------------------------------------------- 1 | export interface ChapterDetails { 2 | /** 3 | * The chapter identifier which this source uses. This may be unique to the source. 4 | * For example, one source may use 'Chapter-1' in it's URLs to identify this chapter, 5 | * whereas other sources may use some numeric identifier 6 | */ 7 | id: string 8 | 9 | /** 10 | * The given identifier of the Manga that owns this chapter. This may be unique to the source 11 | * which uses it. For example, one source may use the value '1234' to 12 | * identify a manga, whereas another one may use the value 'One-Piece' to identify 13 | */ 14 | mangaId: string 15 | 16 | /** 17 | * A list of page URLs which directly reference the image on the page. 18 | * Example: http://yoursource.com/manga/mangaPage.jpg 19 | * These are what the application renders when the chapter is pulled up 20 | */ 21 | pages: string[] 22 | 23 | /** 24 | * A mode flag. Should this manga be rendered in longStrip mode? 25 | */ 26 | longStrip: boolean 27 | } 28 | 29 | declare global { 30 | 31 | function createChapterDetails(chapterDetails: ChapterDetails): ChapterDetails 32 | } -------------------------------------------------------------------------------- /src/models/SourceStateManager/_impl.ts: -------------------------------------------------------------------------------- 1 | import { SourceStateManagerInfo, SourceStateManager } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createSourceStateManager = function (info: SourceStateManagerInfo): SourceStateManager { 6 | return { 7 | ...info, 8 | store: function (key: string, value: unknown) { 9 | // Fill this in so the test classes don't commit sudoku 10 | virtualStateStore[key] = value 11 | return Promise.resolve() 12 | }, 13 | retrieve: function (key: string) { 14 | return Promise.resolve(virtualStateStore[key] ?? "") 15 | }, 16 | keychain: { 17 | store: function (key: string, value: unknown) { 18 | // Fill this in so the test classes don't commit sudoku 19 | virtualKeychainStore[key] = value 20 | return Promise.resolve() 21 | }, 22 | retrieve: function (key: string) { 23 | return Promise.resolve(virtualKeychainStore[key] ?? "") 24 | } 25 | } 26 | } 27 | } 28 | 29 | var virtualStateStore: any = {} 30 | var virtualKeychainStore: any = {} -------------------------------------------------------------------------------- /src/base/Tracker.ts: -------------------------------------------------------------------------------- 1 | import { Form, PagedResults, RequestManager, SearchRequest } from ".." 2 | import { Section, TrackerActionQueue } from "../models" 3 | import { TrackedManga } from "../models/TrackedManga" 4 | import { Requestable } from "./Requestable" 5 | import { Searchable } from "./Searchable" 6 | 7 | export abstract class Tracker implements Requestable, Searchable { 8 | /** 9 | * Manages the ratelimits and the number of requests that can be done per second 10 | * This is also used to fetch pages when a chapter is downloading 11 | */ 12 | abstract readonly requestManager: RequestManager 13 | constructor(protected cheerio: CheerioAPI) {} 14 | 15 | abstract getSearchResults(query: SearchRequest, metadata: unknown): Promise 16 | 17 | /// This cannot be async since the app expects a form as soon as this function is called 18 | /// for async tasks handle them in `sections`. 19 | abstract getMangaForm(mangaId: string): Form 20 | 21 | abstract getTrackedManga(mangaId: string): Promise 22 | abstract getSourceMenu(): Promise
23 | 24 | /// This method MUST dequeue all actions and process them, any unsuccessful actions 25 | /// must be marked for retry instead of being left in the queue. 26 | /// NOTE: Retried actions older than 24 hours will be discarded 27 | abstract processActionQueue(actionQueue: TrackerActionQueue): Promise 28 | } -------------------------------------------------------------------------------- /src/models/HomeSection/index.ts: -------------------------------------------------------------------------------- 1 | import { Request } from '../RequestObject' 2 | import { MangaTile } from '../MangaTile' 3 | 4 | export interface HomeSection { 5 | /** 6 | * An internal identifier of this HomeSection 7 | */ 8 | id: string 9 | 10 | /** 11 | * The title of this section. 12 | * Common examples of HomeSection titles would be 'Latest Manga', 'Updated Manga', 13 | * 'Hot Manga', etc. 14 | */ 15 | title: string 16 | 17 | /** 18 | * Type of the section 19 | * Defaults to HomeSectionType.singleRowNormal 20 | */ 21 | type?: HomeSectionType 22 | 23 | /** 24 | * A list of {@link MangaTile} objects which should be shown under this section 25 | */ 26 | items?: MangaTile[] 27 | 28 | //TODO: Do I have this right? 29 | /** 30 | * Should you be able to scroll, and view more manga on this section? 31 | * This method, when true, triggers the {@link Source.getViewMoreRequest} method 32 | * when the user tries to scroll further on the HomePage section. This usually means 33 | * that it will traverse to another page, and render more information 34 | */ 35 | view_more?: any 36 | } 37 | 38 | export enum HomeSectionType { 39 | singleRowNormal = "singleRowNormal", 40 | singleRowLarge = "singleRowLarge", 41 | doubleRow = "doubleRow", 42 | featured = "featured" 43 | } 44 | 45 | declare global { 46 | function createHomeSection(section: HomeSection): HomeSection 47 | } 48 | -------------------------------------------------------------------------------- /src/models/Chapter/index.ts: -------------------------------------------------------------------------------- 1 | 2 | import { LanguageCode } from '../../models/Languages' 3 | 4 | export interface Chapter { 5 | 6 | /** 7 | * A given identifier of this chapter. This may be unique to the source. 8 | * For example, one source may use 'Chapter-1' in it's URLs to identify this chapter, 9 | * whereas other sources may use some numeric identifier 10 | */ 11 | id: string 12 | 13 | /** 14 | * The given identifier of the Manga that owns this chapter. This may be unique to the source 15 | * which uses it. For example, one source may use the value '1234' to 16 | * identify a manga, whereas another one may use the value 'One-Piece' to identify 17 | */ 18 | mangaId: string 19 | 20 | /** 21 | * An identifier of which chapter number this is, in a given {@link Manga} 22 | */ 23 | chapNum: number 24 | 25 | /** 26 | * The language code which this chapter is associated with. 27 | * This allows the application to filter by language 28 | */ 29 | langCode: LanguageCode 30 | 31 | /** 32 | * The title of this chapter, if one exists 33 | */ 34 | name?: string 35 | 36 | /** 37 | * The volume number that this chapter belongs in, if one exists 38 | */ 39 | volume?: number 40 | 41 | /** 42 | * A grouping of chapters that this belongs to 43 | */ 44 | group?: string 45 | 46 | /** 47 | * The {@link Date} in which this chapter was released 48 | */ 49 | time?: Date 50 | } 51 | 52 | declare global { 53 | function createChapter(chapter: Chapter): Chapter 54 | } -------------------------------------------------------------------------------- /src/models/MangaTile/index.ts: -------------------------------------------------------------------------------- 1 | export interface MangaTile { 2 | /** 3 | * The given identifier of this Manga. This may be unique to the source 4 | * which uses it. For example, one source may use the value '1234' to 5 | * identify a manga, whereas another one may use the value 'One-Piece' to identify 6 | */ 7 | id: string 8 | 9 | /** 10 | * What is this manga called? How should it be rendered on the MangaTile? 11 | */ 12 | title: IconText 13 | 14 | /** 15 | * A URL pointing to the image thumbnail which should be displayed on the tile 16 | */ 17 | image: string 18 | 19 | /** 20 | * Any available text which can be displayed as a subtitle to the tile 21 | * This is what is displayed directly below the title 22 | */ 23 | subtitleText?: IconText 24 | 25 | //TODO: The next few documentations are weak, needs refining 26 | /** 27 | * IconText which can be shown as primary text to the thumbnail 28 | * This is rendered in the bottom left of the manga object on the view. 29 | */ 30 | primaryText?: IconText 31 | 32 | /** 33 | * IconText which can be shown as secondary text to the thumbnail 34 | * This is rendered on the bottom right of the manga object on the view 35 | */ 36 | secondaryText?: IconText 37 | 38 | /** 39 | * The badge value which should be shown on this tile 40 | */ 41 | badge?: number 42 | } 43 | 44 | export interface IconText { 45 | text: string 46 | icon?: string 47 | } 48 | 49 | declare global { 50 | function createMangaTile(mangaTile: MangaTile): MangaTile 51 | function createIconText(iconText: IconText): IconText 52 | } 53 | -------------------------------------------------------------------------------- /src/models/RawData/_impl.ts: -------------------------------------------------------------------------------- 1 | import { ByteArray, RawData } from "." 2 | 3 | const _global = global as any 4 | 5 | _global.createByteArray = function (rawData: RawData): ByteArray { 6 | return new Uint8Array(rawData) 7 | } 8 | 9 | _global.createRawData = function (byteArray: ByteArray): RawData { 10 | return { 11 | ...byteArray, 12 | length: byteArray.length, 13 | toString: () => { 14 | var out, i, len, c; 15 | var char2, char3; 16 | 17 | out = ""; 18 | len = this.length; 19 | i = 0; 20 | while(i < len) { 21 | c = this[i++]; 22 | switch(c >> 4) 23 | { 24 | case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: 25 | // 0xxxxxxx 26 | out += String.fromCharCode(c); 27 | break; 28 | case 12: case 13: 29 | // 110x xxxx 10xx xxxx 30 | char2 = this[i++]; 31 | out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); 32 | break; 33 | case 14: 34 | // 1110 xxxx 10xx xxxx 10xx xxxx 35 | char2 = this[i++]; 36 | char3 = this[i++]; 37 | out += String.fromCharCode(((c & 0x0F) << 12) | 38 | ((char2 & 0x3F) << 6) | 39 | ((char3 & 0x3F) << 0)); 40 | break; 41 | } 42 | } 43 | 44 | return out; 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /src/models/RequestObject/index.ts: -------------------------------------------------------------------------------- 1 | import { RequestHeaders } from "../RequestHeaders" 2 | 3 | export interface Request { 4 | /** 5 | * The URL which this HTTP request should be delivered to 6 | */ 7 | url: string 8 | 9 | /** 10 | * The type of HTTP method. Usually GET or POST 11 | */ 12 | method: string 13 | 14 | /** 15 | * Metadata is something which can be applied to a Request, which will 16 | * be passed on to the function which consumes this request. By inserting 17 | * data here, you are able to forward any data you need as a Source developer 18 | * to the methods meant to parse the returning data 19 | */ 20 | metadata?: any 21 | 22 | /** 23 | * Any HTTP headers which should be applied to this request 24 | */ 25 | headers?: RequestHeaders 26 | 27 | //TODO: Data documentation may need edited 28 | /** 29 | * Data which 30 | */ 31 | data?: any 32 | 33 | /** 34 | * Formatted parameters which are to be associated to the end of the URL. 35 | * Eg: ?paramOne=ImportantData¶mTwo=MoreData 36 | */ 37 | param?: string // parameters need to be formatted to be attached to url 38 | 39 | /** 40 | * Any formatted cookies which should be inserted into the header 41 | */ 42 | cookies?: Cookie[] // cookies need to be formatted to be put into headers 43 | 44 | /** 45 | * A toggle for if this request should be made in incognito mode or not 46 | */ 47 | incognito?: boolean 48 | } 49 | 50 | export interface Cookie { 51 | name: string 52 | value: string 53 | domain: string 54 | path?: string 55 | created?: Date 56 | expires?: Date 57 | } 58 | 59 | declare global { 60 | function createRequestObject(requestObject: Request): Request 61 | function createCookie(cookie: Cookie): Cookie 62 | } 63 | -------------------------------------------------------------------------------- /src/models/RawData/index.ts: -------------------------------------------------------------------------------- 1 | import { Source } from "../.." 2 | 3 | export type Uint8 = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254; 4 | export type ByteArray = Uint8Array 5 | 6 | export interface RawData { 7 | [index: number]: Uint8 8 | 9 | length: number 10 | toString: () => string 11 | } 12 | 13 | declare global { 14 | function createRawData(byteArray: ByteArray): RawData 15 | function createByteArray(rawData: RawData): ByteArray 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | // "incremental": true, /* Enable incremental compilation */ 5 | "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ 6 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ 7 | // "lib": [], /* Specify library files to be included in the compilation. */ 8 | // "allowJs": true, /* Allow javascript files to be compiled. */ 9 | // "checkJs": true, /* Report errors in .js files. */ 10 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 11 | "declaration": true, /* Generates corresponding '.d.ts' file. */ 12 | //"declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 13 | //"sourceMap": true, /* Generates corresponding '.map' file. */ 14 | // "outFile": "./", /* Concatenate and emit output to single file. */ 15 | "outDir": "dist", /* Redirect output structure to the directory. */ 16 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 17 | // "composite": true, /* Enable project compilation */ 18 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 19 | // "removeComments": true, /* Do not emit comments to output. */ 20 | // "noEmit": true, /* Do not emit outputs. */ 21 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 22 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 23 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 24 | "moduleResolution": "node", 25 | /* Strict Type-Checking Options */ 26 | "strict": true, 27 | "esModuleInterop": true, 28 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 29 | }, 30 | "include": [ 31 | "src/**/*.ts" 32 | ], 33 | "exclude": [ 34 | "node_modules" 35 | ] 36 | } -------------------------------------------------------------------------------- /src/models/Manga/index.ts: -------------------------------------------------------------------------------- 1 | import { LanguageCode } from "../Languages"; 2 | import { TagSection } from "../TagSection"; 3 | 4 | export interface Manga { 5 | /** 6 | * A list of titles which this Manga is called. 7 | * There may be secondary titles, which can be pushed to this variable 8 | */ 9 | titles: string[] 10 | 11 | /** 12 | * A URL pointing to a thumbnail which can be displayed to present the manga 13 | */ 14 | image: string 15 | 16 | /** 17 | * The rating which users have given this manga 18 | */ 19 | rating?: number 20 | 21 | /** 22 | * A status code for this manga. This is likely different each source. 23 | * For example, a zero might mean that it is unreleased. A one may mean it is ongoing. etc. 24 | */ 25 | status: MangaStatus 26 | 27 | /** 28 | * A language code for the Manga, if one is available. 29 | * Examples: en is English, jp is Japanese, etc 30 | */ 31 | langFlag?: string 32 | 33 | /** 34 | * The name of the artist who has worked on this manga 35 | */ 36 | artist?: string 37 | 38 | /** 39 | * The author which has written this manga 40 | */ 41 | author?: string 42 | 43 | /** 44 | * If the manga has additional pictures past the title thumbnail, covers may be used 45 | * to display other pieces of art. 46 | * The contents of this array should be URLs to the images 47 | */ 48 | covers?: string[] 49 | 50 | /** 51 | * A description of this manga, if available 52 | */ 53 | desc?: string 54 | 55 | /** 56 | * The number of followers on the source, which follow this manga 57 | */ 58 | follows?: number 59 | 60 | /** 61 | * A list of {@link TagSection}, tags, which this Manga has 62 | */ 63 | tags?: TagSection[] 64 | 65 | /** 66 | * How many views has this manga had up to date 67 | */ 68 | views?: number 69 | 70 | /** 71 | * Is this manga Hentai? 72 | */ 73 | hentai?: boolean 74 | 75 | /** 76 | * Any manga IDs which are related to this entry. 77 | * See {@link Manga.id} for additional information as to what 78 | * this should hold 79 | */ 80 | relatedIds?: string[] 81 | 82 | /** 83 | * The time which this manga has been updated last 84 | */ 85 | lastUpdate?: Date 86 | } 87 | 88 | export enum MangaStatus { 89 | ONGOING = 1, 90 | COMPLETED = 0, 91 | UNKNOWN = 2, 92 | ABANDONED = 3, 93 | HIATUS = 4 94 | } 95 | 96 | declare global { 97 | // @deprecated use `createSourceManga` along with `createMangaInfo` 98 | function createManga(info: {id: string} & Manga): Manga 99 | function createMangaInfo(info: Manga): Manga 100 | } -------------------------------------------------------------------------------- /src/models/RequestManager/_impl.ts: -------------------------------------------------------------------------------- 1 | import { RequestManager, RequestManagerInfo } from "." 2 | import { Request } from "../RequestObject" 3 | import { Response } from "../ResponseObject" 4 | //@ts-ignore 5 | import axios, { Method } from 'axios' 6 | 7 | const _global = global as any 8 | 9 | _global.createRequestManager = function (info: RequestManagerInfo): RequestManager { 10 | return { 11 | ...info, 12 | schedule: async function (request: Request, retryCount: number) { 13 | 14 | // Pass this request through the interceptor if one exists 15 | if(info.interceptor) { 16 | request = await info.interceptor.interceptRequest(request) 17 | } 18 | 19 | // Append any cookies into the header properly 20 | let headers: any = request.headers ?? {} 21 | 22 | let cookieData = '' 23 | for (let cookie of request.cookies ?? []) 24 | cookieData += `${cookie.name}=${cookie.value};` 25 | 26 | headers['cookie'] = cookieData 27 | 28 | // If no user agent has been supplied, default to a basic Paperback-iOS agent 29 | headers['user-agent'] = headers["user-agent"] ?? 'Paperback-iOS' 30 | 31 | // If we are using a urlencoded form data as a post body, we need to decode the request for Axios 32 | let decodedData = request.data 33 | if(typeof decodedData == 'object') { 34 | if(headers['content-type']?.includes('application/x-www-form-urlencoded')) { 35 | decodedData = "" 36 | Object.keys(request.data).forEach(attribute => { 37 | if(decodedData.length > 0) { 38 | decodedData += "&" 39 | } 40 | decodedData += `${attribute}=${request.data[attribute]}` 41 | }) 42 | } 43 | } 44 | 45 | // We must first get the response object from Axios, and then transcribe it into our own Response type before returning 46 | let response = await axios(`${request.url}${request.param ?? ''}`, { 47 | method: request.method, 48 | headers: headers, 49 | data: decodedData, 50 | timeout: info.requestTimeout || 0, 51 | responseType: 'arraybuffer' 52 | }) 53 | 54 | let responsePacked: Response = { 55 | rawData: createRawData(response.data), 56 | data: Buffer.from(response.data, 'binary').toString(), 57 | status: response.status, 58 | headers: response.headers, 59 | request: request 60 | } 61 | 62 | // Pass this through the response interceptor if one exists 63 | if(info.interceptor) { 64 | responsePacked = await info.interceptor.interceptResponse(responsePacked) 65 | } 66 | 67 | return responsePacked 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /src/models/SourceInfo/index.ts: -------------------------------------------------------------------------------- 1 | import { SourceTag } from ".." 2 | 3 | export interface SourceInfo { 4 | // Returns the version of the source 5 | // Ensures that the app is using the most up to date version 6 | /** 7 | * Required class variable which denotes the current version of the application. 8 | * This is what the application uses to determine whether it needs to update it's local 9 | * version of the source, to a new version on the repository 10 | */ 11 | readonly version: string 12 | 13 | /** 14 | * The title of this source, this is what will show up in the application 15 | * to identify what Manga location is being targeted 16 | */ 17 | readonly name: string 18 | 19 | /** 20 | * An INTERNAL reference to an icon which is associated with this source. 21 | * This Icon should ideally be a matching aspect ratio (a cube) 22 | * The location of this should be in an includes directory next to your source. 23 | * For example, the MangaPark link sits at: sources/MangaPark/includes/icon.png 24 | * This {@link Source.icon} field would then be simply referenced as 'icon.png' and 25 | * the path will then resolve correctly internally 26 | */ 27 | readonly icon: string 28 | 29 | /** 30 | * The author of this source. The string here will be shown off to the public on the application 31 | * interface, so only write what you're comfortable with showing 32 | */ 33 | readonly author: string 34 | 35 | /** 36 | * A brief description of what this source targets. This is additional content displayed to the user when 37 | * browsing sources. 38 | * What website does it target? What features are working? Etc. 39 | */ 40 | readonly description: string 41 | 42 | /** 43 | * A content rating attributed to each source. This can be one of three values, and should be set appropriately. 44 | * Everyone: This source does not have any sort of adult content available. Each title within is assumed safe for all audiences 45 | * Mature: This source MAY have mature content inside of it. Even if most content is safe, mature should be selected even if a small subset applies 46 | * Adult: This source probably has straight up pornography available. 47 | * 48 | * This rating helps us filter your source to users who have the necessary visibility rules toggled for their profile. 49 | * Naturally, only 'Everyone' sources will show up for users without an account, or without any mode toggles changed. 50 | */ 51 | readonly contentRating: ContentRating 52 | 53 | /** 54 | * A required field which points to the source's front-page. 55 | * Eg. https://mangadex.org 56 | * This must be a fully qualified URL 57 | */ 58 | readonly websiteBaseURL: string 59 | 60 | /** 61 | * An optional field where the author may put a link to their website 62 | */ 63 | readonly authorWebsite?: string 64 | 65 | /** 66 | * An optional field that defines the language of the extension's source 67 | */ 68 | readonly language?: string 69 | 70 | /** 71 | * An optional field of source tags: Little bits of metadata which is rendered on the website 72 | * under your repositories section 73 | */ 74 | readonly sourceTags?: SourceTag[] 75 | 76 | } 77 | 78 | /** 79 | * A content rating to be attributed to each source. 80 | */ 81 | export enum ContentRating { 82 | EVERYONE = "EVERYONE", 83 | MATURE = "MATURE", 84 | ADULT = "ADULT" 85 | } -------------------------------------------------------------------------------- /docs/modules/_models_impl_export_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/impl_export" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/impl_export"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | 86 |
87 |
88 |
89 |
90 |

Legend

91 |
92 |
    93 |
  • Namespace
  • 94 |
  • Variable
  • 95 |
96 |
    97 |
  • Enumeration
  • 98 |
99 |
    100 |
  • Interface
  • 101 |
102 |
    103 |
  • Class
  • 104 |
105 |
106 |
107 |
108 |
109 |

Generated using TypeDoc

110 |
111 |
112 | 113 | 114 | -------------------------------------------------------------------------------- /src/APIWrapper.ts: -------------------------------------------------------------------------------- 1 | import { Chapter, ChapterDetails, HomeSection, Manga, MangaTile, MangaUpdates, PagedResults, SearchRequest, Source, TagSection } from "."; 2 | import "./models/impl_export" 3 | 4 | export class APIWrapper { 5 | 6 | async getMangaDetails(source: Source, mangaId: string): Promise { 7 | return source.getMangaDetails(mangaId) 8 | } 9 | 10 | async getChapters(source: Source, mangaId: string): Promise { 11 | return source.getChapters(mangaId) 12 | } 13 | 14 | async getChapterDetails(source: Source, mangaId: string, chapterId: string): Promise { 15 | return source.getChapterDetails(mangaId, chapterId) 16 | } 17 | 18 | async searchRequest(source: Source, query: SearchRequest, metadata?: any ): Promise { 19 | return source.searchRequest(query, metadata) 20 | } 21 | 22 | async getTags(source: Source): Promise { 23 | 24 | if(!source.getTags) { 25 | return null 26 | } 27 | 28 | return source.getTags() 29 | } 30 | 31 | async filterUpdatedManga(source: Source, time: Date, ids: string[]): Promise { 32 | 33 | if(!source.filterUpdatedManga) { 34 | return [] 35 | } 36 | 37 | // This method uses a callback to get multiple batches of updated manga. Aggrigate the data here 38 | // and return it all at once as a response 39 | 40 | var updateList: MangaUpdates[] = [] 41 | let callbackFunc = function(updates: MangaUpdates) { 42 | updateList.push(updates) 43 | } 44 | 45 | await source.filterUpdatedManga(callbackFunc, time, ids) 46 | 47 | return updateList 48 | } 49 | 50 | async getHomePageSections(source: Source): Promise { 51 | 52 | if(!source.getHomePageSections) { 53 | return [] 54 | } 55 | 56 | // This method uses a callback to get multiple batches of a homesection. Aggrigate data and return all at once 57 | var sections: HomeSection[] = []; 58 | 59 | let callbackFunc = function(section: HomeSection) { 60 | sections.push(section) 61 | } 62 | 63 | await source.getHomePageSections(callbackFunc) 64 | 65 | return sections 66 | } 67 | 68 | /** 69 | * Performs a 'get more' request. Usually this is done when a homesection has it's 'View More' button tapped, and the user 70 | * is starting to scroll through all of the available titles in each section. 71 | * It is recommended that when you write your tests for a source, that you run one test using this function, 72 | * for each homepageSectionId that the source offers, if those sections are expected to traverse multiple pages 73 | * @param source 74 | * @param homepageSectionId 75 | * @param metadata 76 | * @param resultPageLimiter How many pages this should attempt to iterate through at most. This prevents 77 | * you from being in an infinite loop. Defaults to 3. 78 | */ 79 | async getViewMoreItems(source: Source, homepageSectionId: string, metadata: any, resultPageLimiter: number = 3): Promise { 80 | 81 | if(!source.getViewMoreItems) { 82 | return null 83 | } 84 | 85 | var results: MangaTile[] = [] 86 | 87 | // This may (and likely will) run multiple times, for multiple pages. Aggrigate up to the page limiter 88 | for(let i = 0; i < resultPageLimiter; i++) { 89 | 90 | let sourceResults: PagedResults | null = await source.getViewMoreItems(homepageSectionId, metadata) 91 | 92 | if(sourceResults === null || sourceResults.results.length == 0) { 93 | console.error(`getViewMoreItems was asked to run to a maximum of ${resultPageLimiter} pages, but retrieved no results on page ${i}`) 94 | return results 95 | } 96 | 97 | results = results.concat(sourceResults.results) 98 | metadata = sourceResults.metadata 99 | 100 | // If there is no other pages available, meaning the metadata is empty, exit the loop and do not try again 101 | if(!sourceResults.metadata) { 102 | break 103 | } 104 | } 105 | 106 | return results 107 | } 108 | 109 | async getWebsiteMangaDirectory(source: Source, metadata: any): Promise { 110 | if(!source.getWebsiteMangaDirectory) { 111 | return null 112 | } 113 | 114 | return source.getWebsiteMangaDirectory(metadata) 115 | } 116 | 117 | } -------------------------------------------------------------------------------- /docs/modules/_base_madara_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "base/Madara" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "base/Madara"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Classes

75 | 78 |
79 |
80 |
81 |
82 |
83 | 102 |
103 |
104 |
105 |
106 |

Legend

107 |
108 |
    109 |
  • Namespace
  • 110 |
  • Variable
  • 111 |
112 |
    113 |
  • Enumeration
  • 114 |
115 |
    116 |
  • Interface
  • 117 |
118 |
    119 |
  • Class
  • 120 |
121 |
122 |
123 |
124 |
125 |

Generated using TypeDoc

126 |
127 |
128 | 129 | 130 | -------------------------------------------------------------------------------- /docs/modules/_base_source_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "base/Source" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "base/Source"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Classes

75 | 78 |
79 |
80 |
81 |
82 |
83 | 102 |
103 |
104 |
105 |
106 |

Legend

107 |
108 |
    109 |
  • Namespace
  • 110 |
  • Variable
  • 111 |
112 |
    113 |
  • Enumeration
  • 114 |
115 |
    116 |
  • Interface
  • 117 |
118 |
    119 |
  • Class
  • 120 |
121 |
122 |
123 |
124 |
125 |

Generated using TypeDoc

126 |
127 |
128 | 129 | 130 | -------------------------------------------------------------------------------- /docs/modules/_models_languages_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/Languages/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/Languages/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Enumerations

75 | 78 |
79 |
80 |
81 |
82 |
83 | 102 |
103 |
104 |
105 |
106 |

Legend

107 |
108 |
    109 |
  • Namespace
  • 110 |
  • Variable
  • 111 |
112 |
    113 |
  • Enumeration
  • 114 |
115 |
    116 |
  • Interface
  • 117 |
118 |
    119 |
  • Class
  • 120 |
121 |
122 |
123 |
124 |
125 |

Generated using TypeDoc

126 |
127 |
128 | 129 | 130 | -------------------------------------------------------------------------------- /docs/modules/_models_constants_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/Constants/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/Constants/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |
81 |
82 |
83 | 104 |
105 |
106 |
107 |
108 |

Legend

109 |
110 |
    111 |
  • Namespace
  • 112 |
  • Variable
  • 113 |
114 |
    115 |
  • Enumeration
  • 116 |
117 |
    118 |
  • Interface
  • 119 |
120 |
    121 |
  • Class
  • 122 |
123 |
124 |
125 |
126 |
127 |

Generated using TypeDoc

128 |
129 |
130 | 131 | 132 | -------------------------------------------------------------------------------- /docs/modules/_models_sourcetag_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/SourceTag/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/SourceTag/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Enumerations

75 | 78 |
79 |
80 |

Interfaces

81 | 84 |
85 |
86 |
87 |
88 |
89 | 111 |
112 |
113 |
114 |
115 |

Legend

116 |
117 |
    118 |
  • Namespace
  • 119 |
  • Variable
  • 120 |
121 |
    122 |
  • Enumeration
  • 123 |
124 |
    125 |
  • Interface
  • 126 |
127 |
    128 |
  • Class
  • 129 |
130 |
131 |
132 |
133 |
134 |

Generated using TypeDoc

135 |
136 |
137 | 138 | 139 | -------------------------------------------------------------------------------- /docs/modules/_models_chapter_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/Chapter/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/Chapter/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 84 |
85 |
86 |
87 |
88 |
89 | 113 |
114 |
115 |
116 |
117 |

Legend

118 |
119 |
    120 |
  • Namespace
  • 121 |
  • Variable
  • 122 |
123 |
    124 |
  • Enumeration
  • 125 |
126 |
    127 |
  • Interface
  • 128 |
129 |
    130 |
  • Class
  • 131 |
132 |
133 |
134 |
135 |
136 |

Generated using TypeDoc

137 |
138 |
139 | 140 | 141 | -------------------------------------------------------------------------------- /docs/modules/_models_mangaupdate_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/MangaUpdate/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/MangaUpdate/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 84 |
85 |
86 |
87 |
88 |
89 | 113 |
114 |
115 |
116 |
117 |

Legend

118 |
119 |
    120 |
  • Namespace
  • 121 |
  • Variable
  • 122 |
123 |
    124 |
  • Enumeration
  • 125 |
126 |
    127 |
  • Interface
  • 128 |
129 |
    130 |
  • Class
  • 131 |
132 |
133 |
134 |
135 |
136 |

Generated using TypeDoc

137 |
138 |
139 | 140 | 141 | -------------------------------------------------------------------------------- /docs/modules/_models_pagedresults_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/PagedResults/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/PagedResults/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 84 |
85 |
86 |
87 |
88 |
89 | 113 |
114 |
115 |
116 |
117 |

Legend

118 |
119 |
    120 |
  • Namespace
  • 121 |
  • Variable
  • 122 |
123 |
    124 |
  • Enumeration
  • 125 |
126 |
    127 |
  • Interface
  • 128 |
129 |
    130 |
  • Class
  • 131 |
132 |
133 |
134 |
135 |
136 |

Generated using TypeDoc

137 |
138 |
139 | 140 | 141 | -------------------------------------------------------------------------------- /docs/modules/_models_searchrequest_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/SearchRequest/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/SearchRequest/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 84 |
85 |
86 |
87 |
88 |
89 | 113 |
114 |
115 |
116 |
117 |

Legend

118 |
119 |
    120 |
  • Namespace
  • 121 |
  • Variable
  • 122 |
123 |
    124 |
  • Enumeration
  • 125 |
126 |
    127 |
  • Interface
  • 128 |
129 |
    130 |
  • Class
  • 131 |
132 |
133 |
134 |
135 |
136 |

Generated using TypeDoc

137 |
138 |
139 | 140 | 141 | -------------------------------------------------------------------------------- /docs/modules/_models_chapterdetails_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/ChapterDetails/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/ChapterDetails/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 84 |
85 |
86 |
87 |
88 |
89 | 113 |
114 |
115 |
116 |
117 |

Legend

118 |
119 |
    120 |
  • Namespace
  • 121 |
  • Variable
  • 122 |
123 |
    124 |
  • Enumeration
  • 125 |
126 |
    127 |
  • Interface
  • 128 |
129 |
    130 |
  • Class
  • 131 |
132 |
133 |
134 |
135 |
136 |

Generated using TypeDoc

137 |
138 |
139 | 140 | 141 | -------------------------------------------------------------------------------- /docs/modules/_base_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "base/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "base/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

References

75 | 79 |
80 |
81 |
82 |
83 |
84 |

References

85 |
86 | 87 |

Madara

88 | Re-exports Madara 89 |
90 |
91 | 92 |

Source

93 | Re-exports Source 94 |
95 |
96 |
97 | 119 |
120 |
121 |
122 |
123 |

Legend

124 |
125 |
    126 |
  • Namespace
  • 127 |
  • Variable
  • 128 |
129 |
    130 |
  • Enumeration
  • 131 |
132 |
    133 |
  • Interface
  • 134 |
135 |
    136 |
  • Class
  • 137 |
138 |
139 |
140 |
141 |
142 |

Generated using TypeDoc

143 |
144 |
145 | 146 | 147 | -------------------------------------------------------------------------------- /docs/modules/_models_manga__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/Manga/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/Manga/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_chapter__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/Chapter/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/Chapter/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_mangatile__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/MangaTile/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/MangaTile/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_tagsection__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/TagSection/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/TagSection/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_homesection__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/HomeSection/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/HomeSection/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_mangaupdate__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/MangaUpdate/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/MangaUpdate/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_pagedresults__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/PagedResults/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/PagedResults/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_requestobject__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/RequestObject/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/RequestObject/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_searchrequest__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/SearchRequest/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/SearchRequest/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_chapterdetails__impl_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/ChapterDetails/_impl" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/ChapterDetails/_impl"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Variables

75 | 78 |
79 |
80 |
81 |
82 |
83 |

Variables

84 |
85 | 86 |

Const _global

87 |
_global: any = global as any
88 | 93 |
94 |
95 |
96 | 115 |
116 |
117 |
118 |
119 |

Legend

120 |
121 |
    122 |
  • Namespace
  • 123 |
  • Variable
  • 124 |
125 |
    126 |
  • Enumeration
  • 127 |
128 |
    129 |
  • Interface
  • 130 |
131 |
    132 |
  • Class
  • 133 |
134 |
135 |
136 |
137 |
138 |

Generated using TypeDoc

139 |
140 |
141 | 142 | 143 | -------------------------------------------------------------------------------- /docs/modules/_models_tagsection_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/TagSection/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/TagSection/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 85 |
86 |
87 |
88 |
89 |
90 | 117 |
118 |
119 |
120 |
121 |

Legend

122 |
123 |
    124 |
  • Namespace
  • 125 |
  • Variable
  • 126 |
127 |
    128 |
  • Enumeration
  • 129 |
130 |
    131 |
  • Interface
  • 132 |
133 |
    134 |
  • Class
  • 135 |
136 |
137 |
138 |
139 |
140 |

Generated using TypeDoc

141 |
142 |
143 | 144 | 145 | -------------------------------------------------------------------------------- /docs/modules/_models_mangatile_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/MangaTile/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/MangaTile/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 85 |
86 |
87 |
88 |
89 |
90 | 117 |
118 |
119 |
120 |
121 |

Legend

122 |
123 |
    124 |
  • Namespace
  • 125 |
  • Variable
  • 126 |
127 |
    128 |
  • Enumeration
  • 129 |
130 |
    131 |
  • Interface
  • 132 |
133 |
    134 |
  • Class
  • 135 |
136 |
137 |
138 |
139 |
140 |

Generated using TypeDoc

141 |
142 |
143 | 144 | 145 | -------------------------------------------------------------------------------- /docs/modules/_models_requestobject_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/RequestObject/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/RequestObject/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 85 |
86 |
87 |
88 |
89 |
90 | 117 |
118 |
119 |
120 |
121 |

Legend

122 |
123 |
    124 |
  • Namespace
  • 125 |
  • Variable
  • 126 |
127 |
    128 |
  • Enumeration
  • 129 |
130 |
    131 |
  • Interface
  • 132 |
133 |
    134 |
  • Class
  • 135 |
136 |
137 |
138 |
139 |
140 |

Generated using TypeDoc

141 |
142 |
143 | 144 | 145 | -------------------------------------------------------------------------------- /docs/modules/_models_manga_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/Manga/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/Manga/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Enumerations

81 | 84 |
85 |
86 |

Interfaces

87 | 90 |
91 |
92 |
93 |
94 |
95 | 122 |
123 |
124 |
125 |
126 |

Legend

127 |
128 |
    129 |
  • Namespace
  • 130 |
  • Variable
  • 131 |
132 |
    133 |
  • Enumeration
  • 134 |
135 |
    136 |
  • Interface
  • 137 |
138 |
    139 |
  • Class
  • 140 |
141 |
142 |
143 |
144 |
145 |

Generated using TypeDoc

146 |
147 |
148 | 149 | 150 | -------------------------------------------------------------------------------- /docs/modules/_models_homesection_index_.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | "models/HomeSection/index" | paperback-extensions-common 7 | 8 | 9 | 10 | 11 | 12 |
13 |
14 |
15 |
16 | 27 |
28 |
29 | Options 30 |
31 |
32 | All 33 |
    34 |
  • Public
  • 35 |
  • Public/Protected
  • 36 |
  • All
  • 37 |
38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 |
47 | Menu 48 |
49 |
50 |
51 |
52 |
53 |
54 | 62 |

Module "models/HomeSection/index"

63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |

Index

71 |
72 |
73 |
74 |

Namespaces

75 | 78 |
79 |
80 |

Interfaces

81 | 85 |
86 |
87 |
88 |
89 |
90 | 117 |
118 |
119 |
120 |
121 |

Legend

122 |
123 |
    124 |
  • Namespace
  • 125 |
  • Variable
  • 126 |
127 |
    128 |
  • Enumeration
  • 129 |
130 |
    131 |
  • Interface
  • 132 |
133 |
    134 |
  • Class
  • 135 |
136 |
137 |
138 |
139 |
140 |

Generated using TypeDoc

141 |
142 |
143 | 144 | 145 | --------------------------------------------------------------------------------