From 61ee0e13fa0b56e78576319d32adcdc3be3d7598 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Wed, 23 Aug 2023 17:56:18 +0200 Subject: [PATCH] Start building a provider scrape system --- src/index.ts | 6 +----- src/main/builder.ts | 16 ++++++++++++++++ src/providers/all.ts | 3 +++ src/providers/base.ts | 14 ++++++++++++++ src/providers/embeds/.gitkeep | 0 src/providers/sources/.gitkeep | 0 src/providers/streams.ts | 18 ++++++++++++++++++ src/testing/oof.ts | 1 - src/utils/context.ts | 6 ++++++ src/utils/fetcher.ts | 11 +++++++++++ 10 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 src/main/builder.ts create mode 100644 src/providers/all.ts create mode 100644 src/providers/base.ts create mode 100644 src/providers/embeds/.gitkeep create mode 100644 src/providers/sources/.gitkeep create mode 100644 src/providers/streams.ts delete mode 100644 src/testing/oof.ts create mode 100644 src/utils/context.ts create mode 100644 src/utils/fetcher.ts diff --git a/src/index.ts b/src/index.ts index 6cce377..89e547d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1 @@ -import { LOG } from '@/testing/oof'; - -export function test() { - console.log(LOG); -} +export { ProviderBuilderOptions, Providers, makeProviders } from '@/main/builder'; diff --git a/src/main/builder.ts b/src/main/builder.ts new file mode 100644 index 0000000..8033ca7 --- /dev/null +++ b/src/main/builder.ts @@ -0,0 +1,16 @@ +import { Fetcher } from '@/utils/fetcher'; + +export interface ProviderBuilderOptions { + // fetcher, every web request gets called through here + fetcher: Fetcher; + + // proxied fetcher, if the scraper needs to access a CORS proxy. this fetcher will be called instead + // of the normal fetcher. Defaults to the normal fetcher. + proxiedFetcher?: Fetcher; +} + +export interface Providers {} + +export function makeProviders(ops: ProviderBuilderOptions): Providers { + return {}; +} diff --git a/src/providers/all.ts b/src/providers/all.ts new file mode 100644 index 0000000..eb474bb --- /dev/null +++ b/src/providers/all.ts @@ -0,0 +1,3 @@ +import { Sourcerer } from '@/providers/base'; + +export const sources: Array = []; diff --git a/src/providers/base.ts b/src/providers/base.ts new file mode 100644 index 0000000..210ce3a --- /dev/null +++ b/src/providers/base.ts @@ -0,0 +1,14 @@ +import { ScrapeContext } from '@/utils/context'; + +export type Sourcerer = { + id: string; + name: string; // displayed in the UI + rank: number; // the higher the number, the earlier it gets put on the queue + disabled?: boolean; + scrape: (input: ScrapeContext) => void; +}; + +export function makeSourcerer(state: Sourcerer): Sourcerer | null { + if (state.disabled) return null; + return state; +} diff --git a/src/providers/embeds/.gitkeep b/src/providers/embeds/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/providers/sources/.gitkeep b/src/providers/sources/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/providers/streams.ts b/src/providers/streams.ts new file mode 100644 index 0000000..6078628 --- /dev/null +++ b/src/providers/streams.ts @@ -0,0 +1,18 @@ +export type StreamFile = { + type: 'mp4'; + url: string; +}; + +export type Qualities = '360' | '480' | '720' | '1080'; + +export type FileBasedStream = { + type: 'file'; + qualities: Record; +}; + +export type HlsBasedStream = { + type: 'hls'; + playlist: string; +}; + +export type Stream = FileBasedStream | HlsBasedStream; diff --git a/src/testing/oof.ts b/src/testing/oof.ts deleted file mode 100644 index 5cfd8a6..0000000 --- a/src/testing/oof.ts +++ /dev/null @@ -1 +0,0 @@ -export const LOG = 'hello world'; diff --git a/src/utils/context.ts b/src/utils/context.ts new file mode 100644 index 0000000..4bbe37d --- /dev/null +++ b/src/utils/context.ts @@ -0,0 +1,6 @@ +import { Fetcher } from '@/utils/fetcher'; + +export interface ScrapeContext { + proxiedFetcher: Fetcher; + fetcher: Fetcher; +} diff --git a/src/utils/fetcher.ts b/src/utils/fetcher.ts new file mode 100644 index 0000000..83dd608 --- /dev/null +++ b/src/utils/fetcher.ts @@ -0,0 +1,11 @@ +export type FetcherOptions = { + baseUrl?: string; + headers?: Record; + query?: Record; + method?: 'GET' | 'POST'; + body?: Record | string | FormData; +}; + +export type Fetcher = { + (url: string, ops?: FetcherOptions): T; +};