diff options
35 files changed, 1742 insertions, 611 deletions
diff --git a/.github/deploy.yml b/.github/deploy.yml new file mode 100644 index 0000000..0a766e7 --- /dev/null +++ b/.github/deploy.yml @@ -0,0 +1,64 @@ +# Sample workflow for building and deploying a VitePress site to GitHub Pages +# +name: Deploy VitePress site to Pages + +on: + # Runs on pushes targeting the `main` branch. Change this to `master` if you're + # using the `master` branch as the default branch. + push: + branches: [main] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Not needed if lastUpdated is not enabled + # - uses: pnpm/action-setup@v3 # Uncomment this if you're using pnpm + # - uses: oven-sh/setup-bun@v1 # Uncomment this if you're using Bun + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm # or pnpm / yarn + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Install dependencies + run: npm ci # or pnpm install / yarn install / bun install + - name: Build with VitePress + run: npm run docs:build # or pnpm docs:build / yarn docs:build / bun run docs:build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/.vitepress/dist + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4
\ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b2c89f --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +/coverage +/src/client/shared.ts +/src/node/shared.ts +*.log +*.tgz +.DS_Store +.idea +.temp +.vite_opt_cache +.vscode +dist +cache +temp +examples-temp +node_modules +pnpm-global +TODOs.md
\ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/KnowledgeBase.iml b/.idea/KnowledgeBase.iml deleted file mode 100644 index 6102194..0000000 --- a/.idea/KnowledgeBase.iml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="EMPTY_MODULE" version="4"> - <component name="NewModuleRootManager"> - <content url="file://$MODULE_DIR$" /> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - </component> -</module>
\ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 76dfed3..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ProjectModuleManager"> - <modules> - <module fileurl="file://$PROJECT_DIR$/.idea/KnowledgeBase.iml" filepath="$PROJECT_DIR$/.idea/KnowledgeBase.iml" /> - </modules> - </component> -</project>
\ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="VcsDirectoryMappings"> - <mapping directory="$PROJECT_DIR$" vcs="Git" /> - </component> -</project>
\ No newline at end of file diff --git a/.vitepress/config.mts b/.vitepress/config.mts new file mode 100644 index 0000000..ef8d676 --- /dev/null +++ b/.vitepress/config.mts @@ -0,0 +1,28 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Knowledge Base", + description: "Another Knowledge Base", + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Home', link: '/' }, + ], + + sidebar: [ + { + text: 'Projects', + items: [ + { text: 'Patchwork Archive API', link: '/docs/patchwork-archive-api' }, + { text: 'I Miss Someone VT', link: '/docs/i-miss-someone-vt' }, + { text: 'VTuber Captcha', link: '/docs/vtuber-captcha' } + ] + } + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/pinapelz' } + ] + } +}) @@ -1 +0,0 @@ -knowledge.pinapelz.com
\ No newline at end of file diff --git a/HelpTOC.json b/HelpTOC.json deleted file mode 100644 index e6314ae..0000000 --- a/HelpTOC.json +++ /dev/null @@ -1 +0,0 @@ -{"entities":{"pages":{"Welcome":{"id":"Welcome","title":"Welcome","url":"welcome.html","level":0,"tabIndex":0},"Patchwork-Archive":{"id":"Patchwork-Archive","title":"Patchwork Archive","url":"patchwork-archive.html","level":0,"pages":["Patchwork-API"],"tabIndex":1},"Patchwork-API":{"id":"Patchwork-API","title":"Patchwork Archive API","url":"patchwork-api.html","level":1,"parentId":"Patchwork-Archive","tabIndex":0},"VTuber-Captcha":{"id":"VTuber-Captcha","title":"VTuber Captcha","url":"vtuber-captcha.html","level":0,"tabIndex":2},"IMissSomeone-VT":{"id":"IMissSomeone-VT","title":"IMissSomeone-VT","url":"imisssomeone-vt.html","level":0,"tabIndex":3}}},"topLevelIds":["Welcome","Patchwork-Archive","VTuber-Captcha","IMissSomeone-VT"]}
\ No newline at end of file diff --git a/Map.jhm b/Map.jhm deleted file mode 100644 index eb5883d..0000000 --- a/Map.jhm +++ /dev/null @@ -1 +0,0 @@ -<?xml version='1.0' encoding='UTF-8'?><map version="2.0"><mapID target="Welcome.md" url="welcome.html" default="yes"/><mapID target="Welcome" url="welcome.html" default="yes"/><mapID target="Patchwork-Archive.md" url="patchwork-archive.html" default="no"/><mapID target="Patchwork-Archive" url="patchwork-archive.html" default="no"/><mapID target="Patchwork-API.md" url="patchwork-api.html" default="no"/><mapID target="Patchwork-API" url="patchwork-api.html" default="no"/><mapID target="VTuber-Captcha.md" url="vtuber-captcha.html" default="no"/><mapID target="VTuber-Captcha" url="vtuber-captcha.html" default="no"/><mapID target="IMissSomeone-VT.md" url="imisssomeone-vt.html" default="no"/><mapID target="IMissSomeone-VT" url="imisssomeone-vt.html" default="no"/></map>
\ No newline at end of file diff --git a/Writerside/api-docs/patchwork-archive-api.yml b/Writerside/api-docs/patchwork-archive-api.yml deleted file mode 100644 index c17c0c6..0000000 --- a/Writerside/api-docs/patchwork-archive-api.yml +++ /dev/null @@ -1,324 +0,0 @@ -openapi: 3.0.3 -info: - title: Patchwork Archive API - description: |- - API data from Patchwork Archive is public and **no API key** is required to access what is publicly available on the frontend. - - license: - name: MIT License - url: https://opensource.org/license/mit/ - version: MIT -servers: - - url: https://archive.pinapelz.moe/api -tags: - - name: channel - description: Data regarding a specific channel - - name: video - description: Data regarding archived videos - - name: database - description: More detailed data regarding videos -paths: - /channel/{channel_id}: - get: - tags: - - channel - summary: Gets archived videos from a particular channel - description: Gets a paginated result of archived videos matching a channel id - parameters: - - name: channel_id - in: path - description: YouTube Channel ID - required: true - schema: - type: string - - name: page - in: query - description: Page of video to show (starts on page 1) - required: true - schema: - type: integer - responses: - '200': - description: successful operation - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Video' - /channel_name: - get: - tags: - - channel - summary: Gets archived videos from a particular channel - description: Gets a paginated result of archived videos matching a channel id - parameters: - - name: channel_id - in: query - description: YouTube Channel ID - required: true - schema: - type: string - responses: - '200': - description: successful operation - content: - application/json: - schema: - type: object - properties: - channel_name: - type: string - example: Erina Ch. エリナ・マキナ 【Phase Connect】 - - - /video/{video_id}: - get: - tags: - - video - summary: Get basic information regarding a specific video - description: Pulls basic information about a video from fallback database only - operationId: getBasicVideoInfo - parameters: - - name: video_id - in: path - description: YouTube Video ID - required: true - schema: - type: string - responses: - '200': - description: successful operation - content: - application/json: - schema: - type: object - properties: - channel_id: - type: string - example: UCupmjRr7kPgzXKh-cPxxGbg - channel_name: - type: string - example: Erina Ch. エリナ・マキナ 【Phase Connect】 - description: - type: string - example: The very long description portion - title: - type: string - example: イート / jon-YAKITORY feat.Ado - eat / cover by erina makina - upload_date: - type: string - example: 2022-07-11 - video_id: - type: string - example: bX8-8928lcM - '404': - description: Video not found - content: - application/json: - schema: - type: object - properties: - error: - type: string - example: "Video ID does not exist" - - /random_video: - get: - tags: - - video - summary: Get a singular random video - responses: - '200': - description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/Video' - - /discover_videos: - get: - tags: - - video - summary: Get multiple random videos - parameters: - - name: count - in: query - description: Number of random videos to get (default=1) - required: false - schema: - type: integer - responses: - '200': - description: successful operation - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Video' - - /search/results: - get: - tags: - - video - summary: Get paginated search results for some keyword - parameters: - - name: q - in: query - description: Keywords to search for - required: true - schema: - type: string - - name: page - in: query - description: Page number for results (default=1) - required: false - schema: - type: integer - responses: - '200': - description: successful operation - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Video' - - /daily_featured_videos: - get: - tags: - - video - summary: Get today's daily features videos - description: Either 1 or 2 video objects in an array depending on calculated hash - responses: - '200': - description: successful operation - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Video' - - /recently_archived: - get: - tags: - - video - summary: Get the 6 most recently archived videos - responses: - '200': - description: successful operation - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/Video' - - /database/video_data/{video_id}: - get: - tags: - - database - summary: Get detailed information about the video if available - description: If info.json generated by yt-dlp is available it will be directly delivered here, if not, fallback video data from the database is used instead - parameters: - - name: video_id - in: path - description: YouTube Video ID - required: true - schema: - type: string - responses: - '200': - description: successful operation. - content: - application/json: - schema: - $ref: '#/components/schemas/Video' - - /database/status: - get: - tags: - - database - summary: Get the status of the database - responses: - '200': - description: successful operation. - content: - application/json: - schema: - properties: - OK: - type: string - example: "OK" - '500': - description: database is down - content: - application/json: - schema: - properties: - FAIL: - type: string - example: "500" - - /storage/status: - get: - tags: - - database - summary: Get the status of the database - description: Gets the number of videos archived and space used in GB - responses: - '200': - description: successful operation. - content: - application/json: - schema: - properties: - number_of_files: - type: integer - example: 3823 - storage_size: - type: integer - example: 900 - - -components: - schemas: - Channel: - type: object - required: - - channel_name - properties: - channel_name: - type: string - example: Erina Ch. エリナ・マキナ 【Phase Connect】 - Video: - type: object - required: - - channel_id - - channel_name - - description - - title - - upload_date - - video_id - properties: - channel_id: - type: string - example: UCupmjRr7kPgzXKh-cPxxGbg - channel_name: - type: string - example: Erina Ch. エリナ・マキナ 【Phase Connect】 - description: - type: string - example: The very long description portion - title: - type: string - example: イート / jon-YAKITORY feat.Ado - eat / cover by erina makina - upload_date: - type: string - example: 2022-07-11 - video_id: - type: string - example: bX8-8928lcM
\ No newline at end of file diff --git a/Writerside/c.list b/Writerside/c.list deleted file mode 100644 index c4c77a2..0000000 --- a/Writerside/c.list +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE categories - SYSTEM "https://resources.jetbrains.com/writerside/1.0/categories.dtd"> -<categories> - <category id="wrs" name="Writerside documentation" order="1"/> -</categories>
\ No newline at end of file diff --git a/Writerside/hi.tree b/Writerside/hi.tree deleted file mode 100644 index 1780f40..0000000 --- a/Writerside/hi.tree +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE instance-profile - SYSTEM "https://resources.jetbrains.com/writerside/1.0/product-profile.dtd"> - -<instance-profile id="hi" - name="Project Knowledge Base" - start-page="Welcome.md"> - <toc-element topic="Welcome.md"/> - <toc-element topic="Patchwork-Archive.md"> - <toc-element topic="Patchwork-API.md"/> - </toc-element> - <toc-element topic="VTuber-Captcha.md"/> - <toc-element topic="IMissSomeone-VT.md"/> -</instance-profile>
\ No newline at end of file diff --git a/Writerside/topics/Default-topic.md b/Writerside/topics/Default-topic.md deleted file mode 100644 index dd51468..0000000 --- a/Writerside/topics/Default-topic.md +++ /dev/null @@ -1,80 +0,0 @@ -# This is the first topic - -<!--Writerside adds this topic when you create a new documentation project. -You can use it as a sandbox to play with Writerside features, and remove it from the TOC when you don't need it anymore. -If you want to re-add it for your experiments, click + to create a new topic, choose Topic from Template, and select the -"Starter" template.--> - -## Add new topics -You can create empty topics, or choose a template for different types of content that contains some boilerplate structure to help you get started: - -{ width=290 }{border-effect=line} - -## Write content -%product% supports two types of markup: Markdown and XML. -When you create a new help article, you can choose between two topic types, but this doesn't mean you have to stick to a single format. -You can author content in Markdown and extend it with semantic attributes or inject entire XML elements. - -## Inject XML -For example, this is how you inject a procedure: - -<procedure title="Inject a procedure" id="inject-a-procedure"> - <step> - <p>Start typing and select a procedure type from the completion suggestions:</p> - <img src="completion_procedure.png" alt="completion suggestions for procedure" border-effect="line"/> - </step> - <step> - <p>Press <shortcut>Tab</shortcut> or <shortcut>Enter</shortcut> to insert the markup.</p> - </step> -</procedure> - -## Add interactive elements - -### Tabs -To add switchable content, you can make use of tabs (inject them by starting to type `tab` on a new line): - -<tabs> - <tab title="Markdown"> - <code-block lang="plain text">{ width=450 }</code-block> - </tab> - <tab title="Semantic markup"> - <code-block lang="xml"> - <![CDATA[<img src="new_topic_options.png" alt="Alt text" width="450px"/>]]></code-block> - </tab> -</tabs> - -### Collapsible blocks -Apart from injecting entire XML elements, you can use attributes to configure the behavior of certain elements. -For example, you can collapse a chapter that contains non-essential information: - -#### Supplementary info {collapsible="true"} -Content under such header will be collapsed by default, but you can modify the behavior by adding the following attribute: -`default-state="expanded"` - -### Convert selection to XML -If you need to extend an element with more functions, you can convert selected content from Markdown to semantic markup. -For example, if you want to merge cells in a table, it's much easier to convert it to XML than do this in Markdown. -Position the caret anywhere in the table and press <shortcut>Alt+Enter</shortcut>: - -<img src="convert_table_to_xml.png" alt="Convert table to XML" width="706" border-effect="line"/> - -## Feedback and support -Please report any issues, usability improvements, or feature requests to our -<a href="https://youtrack.jetbrains.com/newIssue?project=WRS">YouTrack project</a> -(you will need to register). - -You are welcome to join our -<a href="https://join.slack.com/t/writerside/shared_invite/zt-1hnvxnl0z-Nc6RWXTppRI2Oc566vumYw">public Slack workspace</a>. -Before you do, please read our [Code of conduct](https://plugins.jetbrains.com/plugin/20158-writerside/docs/writerside-code-of-conduct.html). -We assume that you’ve read and acknowledged it before joining. - -You can also always send an email to [writerside@jetbrains.com](mailto:writerside@jetbrains.com). - -<seealso> - <category ref="wrs"> - <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/markup-reference.html">Markup reference</a> - <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/manage-table-of-contents.html">Reorder topics in the TOC</a> - <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/local-build.html">Build and publish</a> - <a href="https://plugins.jetbrains.com/plugin/20158-writerside/docs/configure-search.html">Configure Search</a> - </category> -</seealso> diff --git a/Writerside/topics/Patchwork-API.md b/Writerside/topics/Patchwork-API.md deleted file mode 100644 index 165c7db..0000000 --- a/Writerside/topics/Patchwork-API.md +++ /dev/null @@ -1,7 +0,0 @@ -# Patchwork Archive API -API data from Patchwork Archive is public and **no API key** is required to access what is publicly available on the frontend. - -Below is an offering of what endpoints are available publicly. -If you are for whatever reason hosting an instance of **Patchwork-Backend** please refer to the **README** in the repository for worker and queuer API endpoints -<api-doc openapi-path="../api-docs/patchwork-archive-api.yml" /> - diff --git a/Writerside/topics/Patchwork-Archive.md b/Writerside/topics/Patchwork-Archive.md deleted file mode 100644 index 22c0ebb..0000000 --- a/Writerside/topics/Patchwork-Archive.md +++ /dev/null @@ -1,9 +0,0 @@ -# Patchwork Archive - -Patchwork Archive is a project that centers around the preservation and archival of music created by virtual youtubers. - -Worker scripts are ran which download and store videos identified as music, which are then hosted at *[patchwork.moekyun.me](https://patchwork.moekyun.me)* - -In this section you'll find various information about Patchwork Archive as well as the documentation for how to call the publicly available API. - - diff --git a/Writerside/topics/Welcome.md b/Writerside/topics/Welcome.md deleted file mode 100644 index df9139a..0000000 --- a/Writerside/topics/Welcome.md +++ /dev/null @@ -1,6 +0,0 @@ -# Welcome - -Welcome to a collection of documentation for some of the various things I have over on GitHub. - -These docs should serve -as both a guide and archive of previously of both currently active and previously projects.
\ No newline at end of file diff --git a/Writerside/v.list b/Writerside/v.list deleted file mode 100644 index 2d12cb3..0000000 --- a/Writerside/v.list +++ /dev/null @@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE vars SYSTEM "https://resources.jetbrains.com/writerside/1.0/vars.dtd"> -<vars> - <var name="product" value="Writerside"/> -</vars> diff --git a/Writerside/writerside.cfg b/Writerside/writerside.cfg deleted file mode 100644 index 5f10ad4..0000000 --- a/Writerside/writerside.cfg +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE ihp SYSTEM "https://resources.jetbrains.com/writerside/1.0/ihp.dtd"> - -<ihp version="2.0"> - <topics dir="topics" web-path="topics"/> - <images dir="images" web-path="images"/> - <categories src="c.list"/> - <vars src="v.list"/> - <instance src="hi.tree"/> -</ihp>
\ No newline at end of file diff --git a/api-examples.md b/api-examples.md new file mode 100644 index 0000000..6bd8bb5 --- /dev/null +++ b/api-examples.md @@ -0,0 +1,49 @@ +--- +outline: deep +--- + +# Runtime API Examples + +This page demonstrates usage of some of the runtime APIs provided by VitePress. + +The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: + +```md +<script setup> +import { useData } from 'vitepress' + +const { theme, page, frontmatter } = useData() +</script> + +## Results + +### Theme Data +<pre>{{ theme }}</pre> + +### Page Data +<pre>{{ page }}</pre> + +### Page Frontmatter +<pre>{{ frontmatter }}</pre> +``` + +<script setup> +import { useData } from 'vitepress' + +const { site, theme, page, frontmatter } = useData() +</script> + +## Results + +### Theme Data +<pre>{{ theme }}</pre> + +### Page Data +<pre>{{ page }}</pre> + +### Page Frontmatter +<pre>{{ frontmatter }}</pre> + +## More + +Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). diff --git a/config.json b/config.json deleted file mode 100644 index be9cf97..0000000 --- a/config.json +++ /dev/null @@ -1 +0,0 @@ -{"productVersion":"","productId":"hi","stage":"release","downloadTitle":"Get Project Knowledge Base","keymaps":{},"searchMaxHits":75,"productName":"Project Knowledge Base"}
\ No newline at end of file diff --git a/current.help.version b/current.help.version deleted file mode 100644 index e69de29..0000000 --- a/current.help.version +++ /dev/null diff --git a/Writerside/topics/IMissSomeone-VT.md b/docs/i-miss-someone-vt.md index 1b8a775..e172a5e 100644 --- a/Writerside/topics/IMissSomeone-VT.md +++ b/docs/i-miss-someone-vt.md @@ -1,5 +1,8 @@ +--- +title: IMissSomeone-VT Docs +lang: en-US +--- # IMissSomeone-VT - Miss your favorite VTuber? "I Miss Someone VT" is a template for deploying a fansite for any particular VTuber. This page serves as documentation for necessary configuration diff --git a/docs/patchwork-archive-api.md b/docs/patchwork-archive-api.md new file mode 100644 index 0000000..4ccff24 --- /dev/null +++ b/docs/patchwork-archive-api.md @@ -0,0 +1,366 @@ +--- +title: Patchwork Archive API Docs +lang: en-US +outline: deep +--- +# Patchwork Archive API + +> Version MIT + +API data from Patchwork Archive is public and **no API key** is required to access it (subject to change) +## Path Table + +| Method | Path | Description | +| --- | --- | --- | +| GET | [/channel/{channel_id}](#get-channel) | Gets archived videos from a particular channel | +| GET | [/channel_name](#get-channel-name) | Gets archived videos from a particular channel | +| GET | [/daily_featured_videos](#getdaily_featured_videos) | Get today's daily features videos | +| GET | [/database/status](#getdatabasestatus) | Get the status of the database | +| GET | [/database/video_data/{video_id}](#getdatabasevideo_datavideo_id) | Get detailed information about the video if available | +| GET | [/discover_videos](#getdiscover_videos) | Get multiple random videos | +| GET | [/random_video](#getrandom_video) | Get a singular random video | +| GET | [/recently_archived](#getrecently_archived) | Get the 6 most recently archived videos | +| GET | [/search/results](#getsearchresults) | Get paginated search results for some keyword | +| GET | [/storage/status](#getstoragestatus) | Get the status of the database | +| GET | [/video/{video_id}](#getvideovideo_id) | Get basic information regarding a specific video | + +## Reference Table + +| Name | Path | Description | +| --- | --- | --- | +| Channel | [#/components/schemas/Channel](#componentsschemaschannel) | | +| Video | [#/components/schemas/Video](#componentsschemasvideo) | | + +## Path Details + +*** + +### [GET]/channel/{channel_id} + +- Summary +Gets archived videos from a particular channel as a paginated result + +- Description +Gets a paginated result of archived videos matching a channel id. Returns 12 videos per page. Pages is the number of pages available + +#### Parameters(Query) + +```ts +page: integer +``` + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +pages: int +{ + channel_id: string + channel_name: string + description: string + title: string + upload_date: string + video_id: string +}[] +``` + +*** + +### [GET]/channel_name + +- Summary +Gets the name of a particular channel by channel id + +- Description +Returns an alternative JSON if the look up fails or the channel id doesn't exist in the database + +#### Parameters(Query) + +```ts +channel_id: string +``` + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +{ + channel_name?: string +} +``` + +- 200 successful operation but failed look up +```ts +{ + error?: string +} +``` +*** + +### [GET]/daily_featured_videos + +- Summary +Get today's daily featured videos + +- Description +Either 1 or 2 video objects in an array depending on calculated hash + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +{ + channel_id: string + channel_name: string + description: string + title: string + upload_date: string + video_id: string +}[] +``` + +*** + +### [GET]/database/status + +- Summary +Get the status of the database + +#### Responses + +- 200 successful operation. + +`text/plain` + +```ts +{ + "properties": { + "OK": { + "type": "string", + "example": "OK" + } + } +} +``` + +- 500 database is down + +`application/json` + +```ts +{ + "properties": { + "FAIL": { + "type": "string", + "example": "500" + } + } +} +``` + +*** + +### [GET]/database/video_data/{video_id} + +- Summary +Get detailed information about the video if available + +- Description +If info.json generated by yt-dlp is available it will be directly delivered here, if not, fallback video data from the database is used instead + +#### Responses + +- 200 successful operation. + +`application/json` + +```ts +{ + channel_id: string + channel_name: string + description: string + title: string + upload_date: string + video_id: string +} +``` + +*** + +### [GET]/discover_videos + +- Summary +Gets randomly chosen videos from the database + +#### Parameters(Query) + +```ts +count?: integer +``` + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +{ + channel_id: string + channel_name: string + description: string + title: string + upload_date: string + video_id: string +}[] +``` + +*** + +### [GET]/random_video + +- Summary +Get a singular random video + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +{ + channel_id: string + channel_name: string + description: string + title: string + upload_date: string + video_id: string +} +``` + +*** + +### [GET]/recently_archived + +- Summary +Get the 6 most recently archived videos + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +{ + channel_id: string + channel_name: string + description: string + title: string + upload_date: string + video_id: string +}[] +``` + +*** + +### [GET]/search/results + +- Summary +Get paginated search results for some keyword + +#### Parameters(Query) + +```ts +q: string +``` + +```ts +page?: integer +``` + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +page: integer +{ + channel_id: string + channel_name: string + description: string + title: string + upload_date: string + video_id: string +}[] +``` + +*** + +### [GET]/storage/status + +- Summary +Get the status of the database + +- Description +Gets the number of videos archived and space used in GB + +#### Responses + +- 200 successful operation. + +`application/json` + +```ts +number_of_files: integer +storage_size: string +``` + +*** + +### [GET]/video/{video_id} + +- Summary +Get basic information regarding a specific video + +- Description +Pulls basic information about a video from fallback database only + +#### Responses + +- 200 successful operation + +`application/json` + +```ts +{ + channel_id?: string + channel_name?: string + description?: string + title?: string + upload_date?: string + video_id?: string +} +``` + +- 404 Video not found + +`application/json` + +```ts +{ + error?: string +} +```
\ No newline at end of file diff --git a/Writerside/topics/VTuber-Captcha.md b/docs/vtuber-captcha.md index 3129f1c..48dad08 100644 --- a/Writerside/topics/VTuber-Captcha.md +++ b/docs/vtuber-captcha.md @@ -1,15 +1,18 @@ +--- +title: VTuber Captcha Docs +--- # VTuber Captcha A simple web API that serves VTuber related CAPTCHAs including server-side verification. Bring your own frontend to display the data. -# Available Endpoints +## Available Endpoints The base URL or the API currently is: `https://vtuber-captcha.vercel.app/api` Below are the current API endpoints supported: [Authenticating Against the API](https://github.com/pinapelz/vtuber-captcha/wiki/Authenticating-Answers-Against-the-API) -## `/affiliation/<org>` +### `/affiliation/<org>` Returns a captcha asking user to identify which of the VTubers are affiliated with a particular organization or group **Path Parameters** @@ -21,7 +24,7 @@ Returns a captcha asking user to identify which of the VTubers are affiliated wi -# Authenticating Answers Against The Server +## Authenticating Answers Against The Server The API supports server-side verification meaning that the answer to the CAPTCHA is never sent to you after making the initial request. Instead, each request will be assigned a session-token which uniquely identifies the CAPTCHA. The server then saves the answer to the CAPTCHA. @@ -30,7 +33,7 @@ This makes it safe for you to directly call the API client-side from a frontend To authenticate answers against the API. You need to specify the query parameter `?server_auth=true` **Example Response with `?server_auth=true`** -``` +```json { "category": "affiliation", "onFail": { @@ -132,7 +135,7 @@ session: "j4WjkoMcPgNX8_gnNXf8HA" answer: "UC0ZTVxCHkZanT5dnP2FZD4Q,UC4WvIIAo89_AzGUh1AZ6Dkg,UCe0JiGnjPfEwEIbWASbOimw" ``` Response: -``` +```json4 { success: false } @@ -146,7 +149,7 @@ and their answer was incorrect. After failing a captcha, the token becomes invalidated and a request for a new CAPTCHA must be made -# Supported Keywords -## Organization +## Supported Keywords +### Organization - Hololive: All hololive Production affiliated members, including Holostars - Nijisanji: All Nijisanji affiliated livers, including EN branches (does not include VirtuaReal)
\ No newline at end of file diff --git a/imisssomeone-vt.html b/imisssomeone-vt.html deleted file mode 100644 index 68738b3..0000000 --- a/imisssomeone-vt.html +++ /dev/null @@ -1 +0,0 @@ -<!DOCTYPE html SYSTEM "about:legacy-compat"><html lang="en-US" data-colors-preset="contrast" data-primary-color="#307FFF"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"><meta name="robots" content="noindex"> <meta name="built-on" content="2023-12-16T15:56:55.958438227"><meta name="build-number" content="${buildNumber}"> <title>IMissSomeone-VT | Project Knowledge Base</title><script id="virtual-toc-data" type="application/json">[{"id":"environment-variables","level":0,"title":"Environment Variables","anchor":"#environment-variables"},{"id":"site-config","level":0,"title":"Site Config","anchor":"#site-config"}]</script><script id="topic-shortcuts" type="application/json"></script><link href="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.css" rel="stylesheet"> <link rel="apple-touch-icon" sizes="180x180" href="https://jetbrains.com/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="https://jetbrains.com/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="https://jetbrains.com/favicon-16x16.png"><link rel="manifest" href="https://jetbrains.com/site.webmanifest"><link rel="mask-icon" href="https://jetbrains.com/safari-pinned-tab.svg" color="#000000"><meta name="msapplication-TileColor" content="#000000"/><meta name="msapplication-TileImage" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-144x144.png"/><meta name="msapplication-square70x70logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-70x70.png"/><meta name="msapplication-square150x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-150x150.png"/><meta name="msapplication-wide310x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x150.png"/><meta name="msapplication-square310x310logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x310.png"/> <meta name="image" content=""><!-- Open Graph --><meta property="og:title" content="IMissSomeone-VT | Project Knowledge Base"/><meta property="og:description" content=""/><meta property="og:image" content=""/><meta property="og:site_name" content="Project Knowledge Base Help"/><meta property="og:type" content="website"/><meta property="og:locale" content="en_US"/><meta property="og:url" content="imisssomeone-vt.html"/><!-- End Open Graph --><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content=""><meta name="twitter:title" content="IMissSomeone-VT | Project Knowledge Base"><meta name="twitter:description" content=""><meta name="twitter:creator" content=""><meta name="twitter:image:src" content=""><!-- End Twitter Card --><!-- Schema.org WebPage --><script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebPage", "@id": "imisssomeone-vt.html#webpage", "url": "imisssomeone-vt.html", "name": "IMissSomeone-VT | Project Knowledge Base", "description": "", "image": "", "inLanguage":"en-US" }</script><!-- End Schema.org --><!-- Schema.org WebSite --><script type="application/ld+json"> { "@type": "WebSite", "@id": "/#website", "url": "/", "name": "Project Knowledge Base Help" }</script><!-- End Schema.org --></head> <body data-id="IMissSomeone-VT" data-main-title="IMissSomeone-VT" data-article-props="{"seeAlsoStyle":"links"}" data-template="article" data-breadcrumbs="" > <div class="wrapper"><main class="panel _main"><header class="panel__header"><div class="container"><h3>Project Knowledge Base Help</h3><div class="panel-trigger"></div></div></header><section class="panel__content"><div class="container"><article class="article" data-shortcut-switcher="inactive"><h1 data-toc="IMissSomeone-VT" id="IMissSomeone-VT.md">IMissSomeone-VT</h1> <p id="948406f2_154">Miss your favorite VTuber? "I Miss Someone VT" is a template for deploying a fansite for any particular VTuber.</p><p id="948406f2_155">This page serves as documentation for necessary configuration</p><section class="chapter"><h2 id="environment-variables" data-toc="environment-variables" >Environment Variables</h2><p id="948406f2_156">The Flask backend relies on environment variables for configuration.</p><ul class="list _ul" id="948406f2_157"><li class="list__item" id="948406f2_158"><p><span class="control" id="948406f2_159">KV_REST_API_URL</span></p><ul class="list _ul" id="948406f2_160"><li class="list__item" id="948406f2_161"><p>Redis KV database REST API URL</p></li></ul></li><li class="list__item" id="948406f2_162"><p><span class="control" id="948406f2_163">KV_REST_API_TOKEN</span></p><ul class="list _ul" id="948406f2_164"><li class="list__item" id="948406f2_165"><p>Redis KV API Token</p></li></ul></li><li class="list__item" id="948406f2_166"><p><span class="control" id="948406f2_167">FREE_CHAT_ID</span></p><ul class="list _ul" id="948406f2_168"><li class="list__item" id="948406f2_169"><p>Video ID of the free chat/waiting room. The thumbnail from this scheduled waiting room is used as the schedule page PNG</p></li></ul></li><li class="list__item" id="948406f2_170"><p><span class="control" id="948406f2_171">CHANNEL_ID</span></p><ul class="list _ul" id="948406f2_172"><li class="list__item" id="948406f2_173"><p>YouTube Channel ID of the tracked channel</p></li></ul></li><li class="list__item" id="948406f2_174"><p><span class="control" id="948406f2_175">API_KEY</span></p><ul class="list _ul" id="948406f2_176"><li class="list__item" id="948406f2_177"><p>Holodex API Key</p></li></ul></li><li class="list__item" id="948406f2_178"><p><span class="control" id="948406f2_179">MANUAL_OVERRIDE</span></p><ul class="list _ul" id="948406f2_180"><li class="list__item" id="948406f2_181"><p>In case Holodex misreports a video as a stream, this can be used to ignore a particular video (insert video ID)</p></li></ul></li></ul></section><section class="chapter"><h2 id="site-config" data-toc="site-config" >Site Config</h2><p id="948406f2_182">The configuration for the frontend can be found within <code class="code" id="948406f2_183">site-config.json</code></p><ul class="list _ul" id="948406f2_184"><li class="list__item" id="948406f2_185"><p><span class="control" id="948406f2_186">soundUrls</span></p><ul class="list _ul" id="948406f2_187"><li class="list__item" id="948406f2_188"><p>List of soundbites that will play when the button is clicked</p></li></ul></li><li class="list__item" id="948406f2_189"><p><span class="control" id="948406f2_190">rareSoundUrls</span></p><ul class="list _ul" id="948406f2_191"><li class="list__item" id="948406f2_192"><p>An extended list of soundUrls but these will only play 10% of the time</p></li></ul></li><li class="list__item" id="948406f2_193"><p><span class="emphasis" id="948406f2_194">pastImages</span></p><ul class="list _ul" id="948406f2_195"><li class="list__item" id="948406f2_196"><p>A list of images that are cycled through on the landing page</p></li></ul></li><li class="list__item" id="948406f2_197"><p><span class="emphasis" id="948406f2_198">buttonIcon</span></p><ul class="list _ul" id="948406f2_199"><li class="list__item" id="948406f2_200"><p>Icon that appears in the background when the button is clicked (img)</p></li></ul></li></ul><p id="948406f2_201">The project itself is reliant on Holodex API for data and Redis KV for storing information regarding the button's global click count</p><figure id="948406f2_202"><img alt="Cc0f1230 76a4 416c 8aa7 eb88172679b4" src="https://github.com/pinapelz/pinapelz/assets/21994085/cc0f1230-76a4-416c-8aa7-eb88172679b4" title="Cc0f1230 76a4 416c 8aa7 eb88172679b4" ></figure></section><div class="last-modified"> Last modified: 16 December 2023</div><div data-feedback-placeholder="true"></div><div class="navigation-links _bottom"> <a class="navigation-links__prev" href="vtuber-captcha.html">VTuber Captcha</a> </div></article><div id="disqus_thread"></div></div></section></main></div> <script src="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.js"></script></body></html>
\ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index 1072df3..0000000 --- a/index.html +++ /dev/null @@ -1,9 +0,0 @@ -<!DOCTYPE html> -<html lang="en-US"> -<meta charset="utf-8"> -<title>You will be redirected shortly</title> -<meta http-equiv="refresh" content="0; url=welcome.html"> -<h1>Redirecting…</h1> -<a href="welcome.html">Click here if you are not redirected.</a> -<script>location = "welcome.html"</script> -</html> diff --git a/index.md b/index.md new file mode 100644 index 0000000..f718db3 --- /dev/null +++ b/index.md @@ -0,0 +1,21 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "knowlegebase" + text: "Yet Another Bunch of Expertise (YABE)" + actions: + - theme: brand + text: Patchwork Archive API + link: /docs/patchwork-archive-api + +features: + - title: Patchwork Archive API + details: Public Patchwork Archive API Documentation + - title: Good to Know + details: Set of useful tricks/knowledge to know + - title: Project Information + details: Various information about how to deploy certain projects +--- + diff --git a/markdown-examples.md b/markdown-examples.md new file mode 100644 index 0000000..f9258a5 --- /dev/null +++ b/markdown-examples.md @@ -0,0 +1,85 @@ +# Markdown Extension Examples + +This page demonstrates some of the built-in markdown extensions provided by VitePress. + +## Syntax Highlighting + +VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: + +**Input** + +````md +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` +```` + +**Output** + +```js{4} +export default { + data () { + return { + msg: 'Highlighted!' + } + } +} +``` + +## Custom Containers + +**Input** + +```md +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: +``` + +**Output** + +::: info +This is an info box. +::: + +::: tip +This is a tip. +::: + +::: warning +This is a warning. +::: + +::: danger +This is a dangerous warning. +::: + +::: details +This is a details block. +::: + +## More + +Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). diff --git a/package.json b/package.json new file mode 100644 index 0000000..38e0e36 --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "devDependencies": { + "vitepress": "^1.0.2" + }, + "scripts": { + "docs:dev": "vitepress dev", + "docs:build": "vitepress build", + "docs:preview": "vitepress preview" + } +}
\ No newline at end of file diff --git a/patchwork-api.html b/patchwork-api.html deleted file mode 100644 index a4a0481..0000000 --- a/patchwork-api.html +++ /dev/null @@ -1 +0,0 @@ -<!DOCTYPE html SYSTEM "about:legacy-compat"><html lang="en-US" data-colors-preset="contrast" data-primary-color="#307FFF"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"><meta name="robots" content="noindex"> <meta name="built-on" content="2023-12-16T15:56:55.96231188"><meta name="build-number" content="${buildNumber}"> <title>Patchwork Archive API | Project Knowledge Base</title><script id="virtual-toc-data" type="application/json">[]</script><script id="topic-shortcuts" type="application/json"></script><link href="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.css" rel="stylesheet"> <link rel="apple-touch-icon" sizes="180x180" href="https://jetbrains.com/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="https://jetbrains.com/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="https://jetbrains.com/favicon-16x16.png"><link rel="manifest" href="https://jetbrains.com/site.webmanifest"><link rel="mask-icon" href="https://jetbrains.com/safari-pinned-tab.svg" color="#000000"><meta name="msapplication-TileColor" content="#000000"/><meta name="msapplication-TileImage" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-144x144.png"/><meta name="msapplication-square70x70logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-70x70.png"/><meta name="msapplication-square150x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-150x150.png"/><meta name="msapplication-wide310x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x150.png"/><meta name="msapplication-square310x310logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x310.png"/> <meta name="image" content=""><!-- Open Graph --><meta property="og:title" content="Patchwork Archive API | Project Knowledge Base"/><meta property="og:description" content=""/><meta property="og:image" content=""/><meta property="og:site_name" content="Project Knowledge Base Help"/><meta property="og:type" content="website"/><meta property="og:locale" content="en_US"/><meta property="og:url" content="patchwork-api.html"/><!-- End Open Graph --><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content=""><meta name="twitter:title" content="Patchwork Archive API | Project Knowledge Base"><meta name="twitter:description" content=""><meta name="twitter:creator" content=""><meta name="twitter:image:src" content=""><!-- End Twitter Card --><!-- Schema.org WebPage --><script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebPage", "@id": "patchwork-api.html#webpage", "url": "patchwork-api.html", "name": "Patchwork Archive API | Project Knowledge Base", "description": "", "image": "", "inLanguage":"en-US" }</script><!-- End Schema.org --><!-- Schema.org WebSite --><script type="application/ld+json"> { "@type": "WebSite", "@id": "/#website", "url": "/", "name": "Project Knowledge Base Help" }</script><!-- End Schema.org --></head> <body data-id="Patchwork-API" data-main-title="Patchwork Archive API" data-article-props="{"seeAlsoStyle":"links"}" data-template="article" data-breadcrumbs="Patchwork-Archive.md|Patchwork Archive" > <div class="wrapper"><main class="panel _main"><header class="panel__header"><div class="container"><h3>Project Knowledge Base Help</h3><div class="panel-trigger"></div></div></header><section class="panel__content"><div class="container"><article class="article" data-shortcut-switcher="inactive"><h1 data-toc="Patchwork-API" id="Patchwork-API.md">Patchwork Archive API</h1> <p id="7cf9558d_39">API data from Patchwork Archive is public and <span class="control" id="7cf9558d_40">no API key</span> is required to access what is publicly available on the frontend.</p><p id="7cf9558d_41">Below is an offering of what endpoints are available publicly. If you are for whatever reason hosting an instance of <span class="control" id="7cf9558d_42">Patchwork-Backend</span> please refer to the <span class="control" id="7cf9558d_43">README</span> in the repository for worker and queuer API endpoints <section class="chapter"><h2 id="7cf9558d_44" data-toc="7cf9558d_44" >Gets archived videos from a particular channel</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /channel/{channel_id}"><span>/channel/{channel_id}</span></copier></div><p id="7cf9558d_46">Gets a paginated result of archived videos matching a channel id</p><section class="chapter"><h3 id="7cf9558d_47" data-toc="7cf9558d_47" >Request parameters</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_49" master-collapse="true" data-chapter-level="3"><script type="application/json">{"header":"Path","contents":[{"id":"api_doc_1","name":"channel_id","description":"YouTube Channel ID","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}],"kind":"ApiParamGroup"}</script></api-param-group><api-param-group id="7cf9558d_50" master-collapse="true" data-chapter-level="3"><script type="application/json">{"header":"Query","contents":[{"id":"api_doc_2","name":"page","description":"Page of video to show (starts on page 1)","required":"true","typeName":"integer","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}],"kind":"ApiParamGroup"}</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section><section class="chapter"><h3 id="7cf9558d_51" data-toc="7cf9558d_51" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_52" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"Array of Video","typeKind":"ARRAY","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_54" data-toc="7cf9558d_54" >Gets archived videos from a particular channel</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /channel_name"><span>/channel_name</span></copier></div><p id="7cf9558d_56">Gets a paginated result of archived videos matching a channel id</p><section class="chapter"><h3 id="7cf9558d_57" data-toc="7cf9558d_57" >Request parameters</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_59" master-collapse="true" data-chapter-level="3"><script type="application/json">{"header":"Query","contents":[{"id":"api_doc_1","name":"channel_id","description":"YouTube Channel ID","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}],"kind":"ApiParamGroup"}</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section><section class="chapter"><h3 id="7cf9558d_60" data-toc="7cf9558d_60" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_61" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_2","name":"application/json","typeName":"object","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_name","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_63" data-toc="7cf9558d_63" >Get basic information regarding a specific video</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /video/{video_id}"><span>/video/{video_id}</span></copier></div><p id="7cf9558d_65">Pulls basic information about a video from fallback database only</p><section class="chapter"><h3 id="7cf9558d_66" data-toc="7cf9558d_66" >Request parameters</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_68" master-collapse="true" data-chapter-level="3"><script type="application/json">{"header":"Path","contents":[{"id":"api_doc_1","name":"video_id","description":"YouTube Video ID","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}],"kind":"ApiParamGroup"}</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section><section class="chapter"><h3 id="7cf9558d_69" data-toc="7cf9558d_69" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_70" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"object","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}, {"statusCode":"404","statusType":"ERROR","name":"Video not found","description":"Video not found","contentType":["application/json"],"contents":[{"id":"api_doc_2","name":"application/json","typeName":"object","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"error","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_74" data-toc="7cf9558d_74" >Get a singular random video</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /random_video"><span>/random_video</span></copier></div><section class="chapter"><h3 id="7cf9558d_76" data-toc="7cf9558d_76" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_77" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"Video","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_79" data-toc="7cf9558d_79" >Get multiple random videos</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /discover_videos"><span>/discover_videos</span></copier></div><section class="chapter"><h3 id="7cf9558d_81" data-toc="7cf9558d_81" >Request parameters</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_83" master-collapse="true" data-chapter-level="3"><script type="application/json">{"header":"Query","contents":[{"id":"api_doc_1","name":"count","description":"Number of random videos to get (default\u003d1)","typeName":"integer","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}],"kind":"ApiParamGroup"}</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section><section class="chapter"><h3 id="7cf9558d_84" data-toc="7cf9558d_84" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_85" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"Array of Video","typeKind":"ARRAY","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_87" data-toc="7cf9558d_87" >Get paginated search results for some keyword</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /search/results"><span>/search/results</span></copier></div><section class="chapter"><h3 id="7cf9558d_89" data-toc="7cf9558d_89" >Request parameters</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_91" master-collapse="true" data-chapter-level="3"><script type="application/json">{"header":"Query","contents":[{"id":"api_doc_1","name":"q","description":"Keywords to search for","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"page","description":"Page number for results (default\u003d1)","typeName":"integer","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}],"kind":"ApiParamGroup"}</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section><section class="chapter"><h3 id="7cf9558d_92" data-toc="7cf9558d_92" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_93" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"Array of Video","typeKind":"ARRAY","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_95" data-toc="7cf9558d_95" >Get today's daily features videos</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /daily_featured_videos"><span>/daily_featured_videos</span></copier></div><p id="7cf9558d_97">Either 1 or 2 video objects in an array depending on calculated hash</p><section class="chapter"><h3 id="7cf9558d_98" data-toc="7cf9558d_98" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_99" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"Array of Video","typeKind":"ARRAY","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_101" data-toc="7cf9558d_101" >Get the 6 most recently archived videos</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /recently_archived"><span>/recently_archived</span></copier></div><section class="chapter"><h3 id="7cf9558d_103" data-toc="7cf9558d_103" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_104" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation","description":"successful operation","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"Array of Video","typeKind":"ARRAY","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_106" data-toc="7cf9558d_106" >Get detailed information about the video if available</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /database/video_data/{video_id}"><span>/database/video_data/{video_id}</span></copier></div><p id="7cf9558d_108">If info.json generated by yt-dlp is available it will be directly delivered here, if not, fallback video data from the database is used instead</p><section class="chapter"><h3 id="7cf9558d_109" data-toc="7cf9558d_109" >Request parameters</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_111" master-collapse="true" data-chapter-level="3"><script type="application/json">{"header":"Path","contents":[{"id":"api_doc_1","name":"video_id","description":"YouTube Video ID","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}],"kind":"ApiParamGroup"}</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section><section class="chapter"><h3 id="7cf9558d_112" data-toc="7cf9558d_112" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_113" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation.","description":"successful operation.","contentType":["application/json"],"contents":[{"id":"api_doc_7","name":"application/json","typeName":"Video","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"channel_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"channel_name","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_3","name":"description","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_4","name":"title","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_5","name":"upload_date","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_6","name":"video_id","required":"true","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_115" data-toc="7cf9558d_115" >Get the status of the database</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /database/status"><span>/database/status</span></copier></div><section class="chapter"><h3 id="7cf9558d_117" data-toc="7cf9558d_117" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_118" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation.","description":"successful operation.","contentType":["application/json"],"contents":[{"id":"api_doc_2","name":"application/json","typeName":"object","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"OK","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}, {"statusCode":"500","statusType":"ERROR","name":"database is down","description":"database is down","contentType":["application/json"],"contents":[{"id":"api_doc_2","name":"application/json","typeName":"object","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"FAIL","typeName":"string","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section><section class="chapter"><h2 id="7cf9558d_122" data-toc="7cf9558d_122" >Get the status of the database</h2><div class="api-endpoint"><img alt="GET method" src="https://img.shields.io/badge/-GET-167DFF" title="GET method"><copier tooltip-text="Copy path: /storage/status"><span>/storage/status</span></copier></div><p id="7cf9558d_124">Gets the number of videos archived and space used in GB</p><section class="chapter"><h3 id="7cf9558d_125" data-toc="7cf9558d_125" >Responses</h3><api-block data-chapter-level="3"><primary-column><api-param-group id="7cf9558d_126" master-collapse="true" data-chapter-level="3"><script type="application/json">{ "contents" : [{"statusCode":"200","statusType":"OK","name":"successful operation.","description":"successful operation.","contentType":["application/json"],"contents":[{"id":"api_doc_3","name":"application/json","typeName":"object","typeKind":"OBJECT","recursive":false,"contentsLabel":"Child attributes","contents":[{"id":"api_doc_1","name":"number_of_files","typeName":"integer","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"},{"id":"api_doc_2","name":"storage_size","typeName":"integer","typeKind":"PRIMITIVE","contentsLabel":"Child attributes"}]}],"kind":"ApiResponse"}] }</script></api-param-group></primary-column><secondary-column></secondary-column></api-block></section></section></p><div class="last-modified"> Last modified: 16 December 2023</div><div data-feedback-placeholder="true"></div><div class="navigation-links _bottom"> <a class="navigation-links__prev" href="patchwork-archive.html">Patchwork Archive</a> <a class="navigation-links__next" href="vtuber-captcha.html">VTuber Captcha</a> </div></article><div id="disqus_thread"></div></div></section></main></div> <script src="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.js"></script></body></html>
\ No newline at end of file diff --git a/patchwork-archive.html b/patchwork-archive.html deleted file mode 100644 index 82bdcaf..0000000 --- a/patchwork-archive.html +++ /dev/null @@ -1 +0,0 @@ -<!DOCTYPE html SYSTEM "about:legacy-compat"><html lang="en-US" data-colors-preset="contrast" data-primary-color="#307FFF"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"><meta name="robots" content="noindex"> <meta name="built-on" content="2023-12-16T15:56:55.957783364"><meta name="build-number" content="${buildNumber}"> <title>Patchwork Archive | Project Knowledge Base</title><script id="virtual-toc-data" type="application/json">[]</script><script id="topic-shortcuts" type="application/json"></script><link href="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.css" rel="stylesheet"> <link rel="apple-touch-icon" sizes="180x180" href="https://jetbrains.com/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="https://jetbrains.com/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="https://jetbrains.com/favicon-16x16.png"><link rel="manifest" href="https://jetbrains.com/site.webmanifest"><link rel="mask-icon" href="https://jetbrains.com/safari-pinned-tab.svg" color="#000000"><meta name="msapplication-TileColor" content="#000000"/><meta name="msapplication-TileImage" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-144x144.png"/><meta name="msapplication-square70x70logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-70x70.png"/><meta name="msapplication-square150x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-150x150.png"/><meta name="msapplication-wide310x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x150.png"/><meta name="msapplication-square310x310logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x310.png"/> <meta name="image" content=""><!-- Open Graph --><meta property="og:title" content="Patchwork Archive | Project Knowledge Base"/><meta property="og:description" content=""/><meta property="og:image" content=""/><meta property="og:site_name" content="Project Knowledge Base Help"/><meta property="og:type" content="website"/><meta property="og:locale" content="en_US"/><meta property="og:url" content="patchwork-archive.html"/><!-- End Open Graph --><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content=""><meta name="twitter:title" content="Patchwork Archive | Project Knowledge Base"><meta name="twitter:description" content=""><meta name="twitter:creator" content=""><meta name="twitter:image:src" content=""><!-- End Twitter Card --><!-- Schema.org WebPage --><script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebPage", "@id": "patchwork-archive.html#webpage", "url": "patchwork-archive.html", "name": "Patchwork Archive | Project Knowledge Base", "description": "", "image": "", "inLanguage":"en-US" }</script><!-- End Schema.org --><!-- Schema.org WebSite --><script type="application/ld+json"> { "@type": "WebSite", "@id": "/#website", "url": "/", "name": "Project Knowledge Base Help" }</script><!-- End Schema.org --></head> <body data-id="Patchwork-Archive" data-main-title="Patchwork Archive" data-article-props="{"seeAlsoStyle":"links"}" data-template="article" data-breadcrumbs="" > <div class="wrapper"><main class="panel _main"><header class="panel__header"><div class="container"><h3>Project Knowledge Base Help</h3><div class="panel-trigger"></div></div></header><section class="panel__content"><div class="container"><article class="article" data-shortcut-switcher="inactive"><h1 data-toc="Patchwork-Archive" id="Patchwork-Archive.md">Patchwork Archive</h1> <p id="e61746b1_7">Patchwork Archive is a project that centers around the preservation and archival of music created by virtual youtubers.</p><p id="e61746b1_8">Worker scripts are ran which download and store videos identified as music, which are then hosted at <span class="emphasis" id="e61746b1_9"><a href="https://patchwork.moekyun.me" id="e61746b1_10" data-external="true" rel="noopener noreferrer" >patchwork.moekyun.me</a></span></p><p id="e61746b1_11">In this section you'll find various information about Patchwork Archive as well as the documentation for how to call the publicly available API.</p><figure id="e61746b1_12"><img alt="Patchwork Archive Video Page" src="https://github.com/Patchwork-Archive/Patchwork-Browser/assets/21994085/30b2cabf-07b4-4331-8ebf-709520d42baa" title="Patchwork Archive Video Page" ></figure><div class="last-modified"> Last modified: 16 December 2023</div><div data-feedback-placeholder="true"></div><div class="navigation-links _bottom"> <a class="navigation-links__prev" href="welcome.html">Welcome</a> <a class="navigation-links__next" href="patchwork-api.html">Patchwork Archive API</a> </div></article><div id="disqus_thread"></div></div></section></main></div> <script src="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.js"></script></body></html>
\ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..09463df --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1088 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + vitepress: + specifier: ^1.0.2 + version: 1.0.2(@algolia/client-search@4.23.2)(search-insights@2.13.0) + +packages: + + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: true + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + search-insights: 2.13.0 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: true + + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2): + resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + '@algolia/client-search': 4.23.2 + algoliasearch: 4.23.2 + dev: true + + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 4.23.2 + algoliasearch: 4.23.2 + dev: true + + /@algolia/cache-browser-local-storage@4.23.2: + resolution: {integrity: sha512-PvRQdCmtiU22dw9ZcTJkrVKgNBVAxKgD0/cfiqyxhA5+PHzA2WDt6jOmZ9QASkeM2BpyzClJb/Wr1yt2/t78Kw==} + dependencies: + '@algolia/cache-common': 4.23.2 + dev: true + + /@algolia/cache-common@4.23.2: + resolution: {integrity: sha512-OUK/6mqr6CQWxzl/QY0/mwhlGvS6fMtvEPyn/7AHUx96NjqDA4X4+Ju7aXFQKh+m3jW9VPB0B9xvEQgyAnRPNw==} + dev: true + + /@algolia/cache-in-memory@4.23.2: + resolution: {integrity: sha512-rfbi/SnhEa3MmlqQvgYz/9NNJ156NkU6xFxjbxBtLWnHbpj+qnlMoKd+amoiacHRITpajg6zYbLM9dnaD3Bczw==} + dependencies: + '@algolia/cache-common': 4.23.2 + dev: true + + /@algolia/client-account@4.23.2: + resolution: {integrity: sha512-VbrOCLIN/5I7iIdskSoSw3uOUPF516k4SjDD4Qz3BFwa3of7D9A0lzBMAvQEJJEPHWdVraBJlGgdJq/ttmquJQ==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-analytics@4.23.2: + resolution: {integrity: sha512-lLj7irsAztGhMoEx/SwKd1cwLY6Daf1Q5f2AOsZacpppSvuFvuBrmkzT7pap1OD/OePjLKxicJS8wNA0+zKtuw==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-common@4.23.2: + resolution: {integrity: sha512-Q2K1FRJBern8kIfZ0EqPvUr3V29ICxCm/q42zInV+VJRjldAD9oTsMGwqUQ26GFMdFYmqkEfCbY4VGAiQhh22g==} + dependencies: + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-personalization@4.23.2: + resolution: {integrity: sha512-vwPsgnCGhUcHhhQG5IM27z8q7dWrN9itjdvgA6uKf2e9r7vB+WXt4OocK0CeoYQt3OGEAExryzsB8DWqdMK5wg==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/client-search@4.23.2: + resolution: {integrity: sha512-CxSB29OVGSE7l/iyoHvamMonzq7Ev8lnk/OkzleODZ1iBcCs3JC/XgTIKzN/4RSTrJ9QybsnlrN/bYCGufo7qw==} + dependencies: + '@algolia/client-common': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/logger-common@4.23.2: + resolution: {integrity: sha512-jGM49Q7626cXZ7qRAWXn0jDlzvoA1FvN4rKTi1g0hxKsTTSReyYk0i1ADWjChDPl3Q+nSDhJuosM2bBUAay7xw==} + dev: true + + /@algolia/logger-console@4.23.2: + resolution: {integrity: sha512-oo+lnxxEmlhTBTFZ3fGz1O8PJ+G+8FiAoMY2Qo3Q4w23xocQev6KqDTA1JQAGPDxAewNA2VBwWOsVXeXFjrI/Q==} + dependencies: + '@algolia/logger-common': 4.23.2 + dev: true + + /@algolia/recommend@4.23.2: + resolution: {integrity: sha512-Q75CjnzRCDzgIlgWfPnkLtrfF4t82JCirhalXkSSwe/c1GH5pWh4xUyDOR3KTMo+YxxX3zTlrL/FjHmUJEWEcg==} + dependencies: + '@algolia/cache-browser-local-storage': 4.23.2 + '@algolia/cache-common': 4.23.2 + '@algolia/cache-in-memory': 4.23.2 + '@algolia/client-common': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/logger-common': 4.23.2 + '@algolia/logger-console': 4.23.2 + '@algolia/requester-browser-xhr': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/requester-node-http': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /@algolia/requester-browser-xhr@4.23.2: + resolution: {integrity: sha512-TO9wLlp8+rvW9LnIfyHsu8mNAMYrqNdQ0oLF6eTWFxXfxG3k8F/Bh7nFYGk2rFAYty4Fw4XUtrv/YjeNDtM5og==} + dependencies: + '@algolia/requester-common': 4.23.2 + dev: true + + /@algolia/requester-common@4.23.2: + resolution: {integrity: sha512-3EfpBS0Hri0lGDB5H/BocLt7Vkop0bTTLVUBB844HH6tVycwShmsV6bDR7yXbQvFP1uNpgePRD3cdBCjeHmk6Q==} + dev: true + + /@algolia/requester-node-http@4.23.2: + resolution: {integrity: sha512-SVzgkZM/malo+2SB0NWDXpnT7nO5IZwuDTaaH6SjLeOHcya1o56LSWXk+3F3rNLz2GVH+I/rpYKiqmHhSOjerw==} + dependencies: + '@algolia/requester-common': 4.23.2 + dev: true + + /@algolia/transporter@4.23.2: + resolution: {integrity: sha512-GY3aGKBy+8AK4vZh8sfkatDciDVKad5rTY2S10Aefyjh7e7UGBP4zigf42qVXwU8VOPwi7l/L7OACGMOFcjB0Q==} + dependencies: + '@algolia/cache-common': 4.23.2 + '@algolia/logger-common': 4.23.2 + '@algolia/requester-common': 4.23.2 + dev: true + + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.1 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@docsearch/css@3.6.0: + resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} + dev: true + + /@docsearch/js@3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} + dependencies: + '@docsearch/react': 3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0) + preact: 10.20.1 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + dev: true + + /@docsearch/react@3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2)(search-insights@2.13.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.2)(algoliasearch@4.23.2) + '@docsearch/css': 3.6.0 + algoliasearch: 4.23.2 + search-insights: 2.13.0 + transitivePeerDependencies: + - '@algolia/client-search' + dev: true + + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@rollup/rollup-android-arm-eabi@4.14.0: + resolution: {integrity: sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.14.0: + resolution: {integrity: sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.14.0: + resolution: {integrity: sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.14.0: + resolution: {integrity: sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.14.0: + resolution: {integrity: sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.14.0: + resolution: {integrity: sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.14.0: + resolution: {integrity: sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.14.0: + resolution: {integrity: sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==} + cpu: [ppc64le] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.14.0: + resolution: {integrity: sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.14.0: + resolution: {integrity: sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.14.0: + resolution: {integrity: sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.14.0: + resolution: {integrity: sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.14.0: + resolution: {integrity: sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.14.0: + resolution: {integrity: sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.14.0: + resolution: {integrity: sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@shikijs/core@1.2.4: + resolution: {integrity: sha512-ClaUWpt8oTzjcF0MM1P81AeWyzc1sNSJlAjMG80CbwqbFqXSNz+NpQVUC0icobt3sZn43Sn27M4pHD/Jmp3zHw==} + dev: true + + /@shikijs/transformers@1.2.4: + resolution: {integrity: sha512-ysGkpsHxRxLmz8nGKeFdV+gKj1NXt+88sM/34kfKVWTWIXg5gsFOJxJBbG7k+fUR5JlD6sNh65W9qPXrbVE1wQ==} + dependencies: + shiki: 1.2.4 + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/linkify-it@3.0.5: + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + dev: true + + /@types/markdown-it@13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + dev: true + + /@types/mdurl@1.0.5: + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + dev: true + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + + /@vitejs/plugin-vue@5.0.4(vite@5.2.8)(vue@3.4.21): + resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + dependencies: + vite: 5.2.8 + vue: 3.4.21 + dev: true + + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} + dependencies: + '@babel/parser': 7.24.4 + '@vue/shared': 3.4.21 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} + dependencies: + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} + dependencies: + '@babel/parser': 7.24.4 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + estree-walker: 2.0.2 + magic-string: 0.30.9 + postcss: 8.4.38 + source-map-js: 1.2.0 + dev: true + + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/devtools-api@7.0.25(vue@3.4.21): + resolution: {integrity: sha512-fL6DlRp4MSXCLYcqYvKU7QhQZWE3Hfu7X8pC25BS74coJi7uJeSWs4tmrITcwFihNmC9S5GPiffkMdckkeWjzg==} + dependencies: + '@vue/devtools-kit': 7.0.25(vue@3.4.21) + transitivePeerDependencies: + - vue + dev: true + + /@vue/devtools-kit@7.0.25(vue@3.4.21): + resolution: {integrity: sha512-wbLkSnOTsKHPb1mB9koFHUoSAF8Dp6Ii/ocR2+DeXFY4oKqIjCeJb/4Lihk4rgqEhCy1WwxLfTgNDo83VvDYkQ==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-shared': 7.0.25 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + vue: 3.4.21 + dev: true + + /@vue/devtools-shared@7.0.25: + resolution: {integrity: sha512-5+XYhcHSXuJSguYnNwL6/e6VTmXwCfryWQOkffh9ZU2zMByybqqqBrMWqvBkqTmMFCjPdzulo66xXbVbwLaElQ==} + dependencies: + rfdc: 1.3.1 + dev: true + + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} + dependencies: + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-core@3.4.21: + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} + dependencies: + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 + dev: true + + /@vue/runtime-dom@3.4.21: + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} + dependencies: + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 + csstype: 3.1.3 + dev: true + + /@vue/server-renderer@3.4.21(vue@3.4.21): + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} + peerDependencies: + vue: 3.4.21 + dependencies: + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21 + dev: true + + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} + dev: true + + /@vueuse/core@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.9.0 + '@vueuse/shared': 10.9.0(vue@3.4.21) + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.21): + resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} + peerDependencies: + async-validator: '*' + axios: '*' + change-case: '*' + drauu: '*' + focus-trap: '*' + fuse.js: '*' + idb-keyval: '*' + jwt-decode: '*' + nprogress: '*' + qrcode: '*' + sortablejs: '*' + universal-cookie: '*' + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + dependencies: + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/shared': 10.9.0(vue@3.4.21) + focus-trap: 7.5.4 + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata@10.9.0: + resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} + dev: true + + /@vueuse/shared@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} + dependencies: + vue-demi: 0.14.7(vue@3.4.21) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /algoliasearch@4.23.2: + resolution: {integrity: sha512-8aCl055IsokLuPU8BzLjwzXjb7ty9TPcUFFOk0pYOwsE5DMVhE3kwCMFtsCFKcnoPZK7oObm+H5mbnSO/9ioxQ==} + dependencies: + '@algolia/cache-browser-local-storage': 4.23.2 + '@algolia/cache-common': 4.23.2 + '@algolia/cache-in-memory': 4.23.2 + '@algolia/client-account': 4.23.2 + '@algolia/client-analytics': 4.23.2 + '@algolia/client-common': 4.23.2 + '@algolia/client-personalization': 4.23.2 + '@algolia/client-search': 4.23.2 + '@algolia/logger-common': 4.23.2 + '@algolia/logger-console': 4.23.2 + '@algolia/recommend': 4.23.2 + '@algolia/requester-browser-xhr': 4.23.2 + '@algolia/requester-common': 4.23.2 + '@algolia/requester-node-http': 4.23.2 + '@algolia/transporter': 4.23.2 + dev: true + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /focus-trap@7.5.4: + resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} + dependencies: + tabbable: 6.2.0 + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + dev: true + + /magic-string@0.30.9: + resolution: {integrity: sha512-S1+hd+dIrC8EZqKyT9DstTH/0Z+f76kmmvZnkfQVmOpDEF9iVgdYif3Q/pIWHmCoo59bQVGW0kVL3e2nl+9+Sw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + dev: true + + /minisearch@6.3.0: + resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} + dev: true + + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + + /preact@10.20.1: + resolution: {integrity: sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==} + dev: true + + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + dev: true + + /rollup@4.14.0: + resolution: {integrity: sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.14.0 + '@rollup/rollup-android-arm64': 4.14.0 + '@rollup/rollup-darwin-arm64': 4.14.0 + '@rollup/rollup-darwin-x64': 4.14.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.14.0 + '@rollup/rollup-linux-arm64-gnu': 4.14.0 + '@rollup/rollup-linux-arm64-musl': 4.14.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.14.0 + '@rollup/rollup-linux-riscv64-gnu': 4.14.0 + '@rollup/rollup-linux-s390x-gnu': 4.14.0 + '@rollup/rollup-linux-x64-gnu': 4.14.0 + '@rollup/rollup-linux-x64-musl': 4.14.0 + '@rollup/rollup-win32-arm64-msvc': 4.14.0 + '@rollup/rollup-win32-ia32-msvc': 4.14.0 + '@rollup/rollup-win32-x64-msvc': 4.14.0 + fsevents: 2.3.3 + dev: true + + /search-insights@2.13.0: + resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==} + dev: true + + /shiki@1.2.4: + resolution: {integrity: sha512-Q9n9jKiOjJCRPztA9POn3/uZXNySHDNKAsPNpmtHDcFyi6ZQhx5vQKZW3Nhrwn8TWW3RudSRk66zqY603EZDeg==} + dependencies: + '@shikijs/core': 1.2.4 + dev: true + + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + dev: true + + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + + /tabbable@6.2.0: + resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /vite@5.2.8: + resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitepress@1.0.2(@algolia/client-search@4.23.2)(search-insights@2.13.0): + resolution: {integrity: sha512-bEj9yTEdWyewJFOhEREZF+mXuAgOq27etuJZT6DZSp+J3XpQstXMJc5piSVwhZBtuj8OfA0iXy+jdP1c71KMYQ==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + dependencies: + '@docsearch/css': 3.6.0 + '@docsearch/js': 3.6.0(@algolia/client-search@4.23.2)(search-insights@2.13.0) + '@shikijs/core': 1.2.4 + '@shikijs/transformers': 1.2.4 + '@types/markdown-it': 13.0.7 + '@vitejs/plugin-vue': 5.0.4(vite@5.2.8)(vue@3.4.21) + '@vue/devtools-api': 7.0.25(vue@3.4.21) + '@vueuse/core': 10.9.0(vue@3.4.21) + '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(vue@3.4.21) + focus-trap: 7.5.4 + mark.js: 8.11.1 + minisearch: 6.3.0 + shiki: 1.2.4 + vite: 5.2.8 + vue: 3.4.21 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + dev: true + + /vue-demi@0.14.7(vue@3.4.21): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.4.21 + dev: true + + /vue@3.4.21: + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21) + '@vue/shared': 3.4.21 + dev: true diff --git a/vtuber-captcha.html b/vtuber-captcha.html deleted file mode 100644 index 1709849..0000000 --- a/vtuber-captcha.html +++ /dev/null @@ -1,100 +0,0 @@ -<!DOCTYPE html SYSTEM "about:legacy-compat"><html lang="en-US" data-colors-preset="contrast" data-primary-color="#307FFF"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"><meta name="robots" content="noindex"> <meta name="built-on" content="2023-12-16T15:56:55.95957412"><meta name="build-number" content="${buildNumber}"> <title>VTuber Captcha | Project Knowledge Base</title><script id="virtual-toc-data" type="application/json">[{"id":"available-endpoints","level":0,"title":"Available Endpoints","anchor":"#available-endpoints"},{"id":"affiliation-org","level":0,"title":"/affiliation/\u003corg\u003e","anchor":"#affiliation-org"},{"id":"authenticating-answers-against-the-server","level":0,"title":"Authenticating Answers Against The Server","anchor":"#authenticating-answers-against-the-server"},{"id":"supported-keywords","level":0,"title":"Supported Keywords","anchor":"#supported-keywords"},{"id":"organization","level":0,"title":"Organization","anchor":"#organization"}]</script><script id="topic-shortcuts" type="application/json"></script><link href="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.css" rel="stylesheet"> <link rel="apple-touch-icon" sizes="180x180" href="https://jetbrains.com/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="https://jetbrains.com/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="https://jetbrains.com/favicon-16x16.png"><link rel="manifest" href="https://jetbrains.com/site.webmanifest"><link rel="mask-icon" href="https://jetbrains.com/safari-pinned-tab.svg" color="#000000"><meta name="msapplication-TileColor" content="#000000"/><meta name="msapplication-TileImage" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-144x144.png"/><meta name="msapplication-square70x70logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-70x70.png"/><meta name="msapplication-square150x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-150x150.png"/><meta name="msapplication-wide310x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x150.png"/><meta name="msapplication-square310x310logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x310.png"/> <meta name="image" content=""><!-- Open Graph --><meta property="og:title" content="VTuber Captcha | Project Knowledge Base"/><meta property="og:description" content=""/><meta property="og:image" content=""/><meta property="og:site_name" content="Project Knowledge Base Help"/><meta property="og:type" content="website"/><meta property="og:locale" content="en_US"/><meta property="og:url" content="vtuber-captcha.html"/><!-- End Open Graph --><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content=""><meta name="twitter:title" content="VTuber Captcha | Project Knowledge Base"><meta name="twitter:description" content=""><meta name="twitter:creator" content=""><meta name="twitter:image:src" content=""><!-- End Twitter Card --><!-- Schema.org WebPage --><script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebPage", "@id": "vtuber-captcha.html#webpage", "url": "vtuber-captcha.html", "name": "VTuber Captcha | Project Knowledge Base", "description": "", "image": "", "inLanguage":"en-US" }</script><!-- End Schema.org --><!-- Schema.org WebSite --><script type="application/ld+json"> { "@type": "WebSite", "@id": "/#website", "url": "/", "name": "Project Knowledge Base Help" }</script><!-- End Schema.org --></head> <body data-id="VTuber-Captcha" data-main-title="VTuber Captcha" data-article-props="{"seeAlsoStyle":"links"}" data-template="article" data-breadcrumbs="" > <div class="wrapper"><main class="panel _main"><header class="panel__header"><div class="container"><h3>Project Knowledge Base Help</h3><div class="panel-trigger"></div></div></header><section class="panel__content"><div class="container"><article class="article" data-shortcut-switcher="inactive"><h1 data-toc="VTuber-Captcha" id="VTuber-Captcha.md">VTuber Captcha</h1> <p id="3dd194a4_7">A simple web API that serves VTuber related CAPTCHAs including server-side verification. Bring your own frontend to display the data.</p><section class="chapter"><h2 id="available-endpoints" data-toc="available-endpoints" >Available Endpoints</h2><p id="3dd194a4_8">The base URL or the API currently is: <code class="code" id="3dd194a4_9">https://vtuber-captcha.vercel.app/api</code></p><p id="3dd194a4_10">Below are the current API endpoints supported: <a href="https://github.com/pinapelz/vtuber-captcha/wiki/Authenticating-Answers-Against-the-API" id="3dd194a4_11" data-external="true" rel="noopener noreferrer" >Authenticating Against the API</a></p></section><section class="chapter"><h2 id="affiliation-org" data-toc="affiliation-org" >/affiliation/<org></h2><p id="3dd194a4_12">Returns a captcha asking user to identify which of the VTubers are affiliated with a particular organization or group</p><p id="3dd194a4_13"><span class="control" id="3dd194a4_14">Path Parameters</span></p><ul class="list _ul" id="3dd194a4_15"><li class="list__item" id="3dd194a4_16"><p><code class="code" id="3dd194a4_17"><org></code>: Refer to <a href="https://github.com/pinapelz/vtuber-captcha/wiki/Supported-Terms#organizations" id="3dd194a4_18" data-external="true" rel="noopener noreferrer" >organization page</a> for a list of supported terms <span class="control" id="3dd194a4_19">Query Parameters</span></p></li><li class="list__item" id="3dd194a4_20"><p><code class="code" id="3dd194a4_21">server_auth</code>: false if answers to captcha should be sent to response, true if you would like the API to store the answer and authenticate against it. </p><ul class="list _ul" id="3dd194a4_22"><li class="list__item" id="3dd194a4_23"><p>Default: <code class="code" id="3dd194a4_24">false</code></p></li><li class="list__item" id="3dd194a4_25"><p>Enums: <code class="code" id="3dd194a4_26">true, false</code></p></li></ul></li></ul></section><section class="chapter"><h2 id="authenticating-answers-against-the-server" data-toc="authenticating-answers-against-the-server" >Authenticating Answers Against The Server</h2><p id="3dd194a4_27">The API supports server-side verification meaning that the answer to the CAPTCHA is never sent to you after making the initial request.</p><p id="3dd194a4_28">Instead, each request will be assigned a session-token which uniquely identifies the CAPTCHA. The server then saves the answer to the CAPTCHA. This makes it safe for you to directly call the API client-side from a frontend without the need for a middle-man to store the answer.</p><p id="3dd194a4_29">To authenticate answers against the API. You need to specify the query parameter <code class="code" id="3dd194a4_30">?server_auth=true</code></p><p id="3dd194a4_31"><span class="control" id="3dd194a4_32">Example Response with <code class="code" id="3dd194a4_33">?server_auth=true</code></span></p><div class="code-block" data-lang="none" > -{ - "category": "affiliation", - "onFail": { - "extra": null, - "text": "You got some wrong" - }, - "questions": [ - { - "id": "UCgZuwn-O7Szh9cAgHqJ6vjw", - "image": "https://yt3.ggpht.com/ytc/AMLnZu_aQ3akSpFc9SVPcFMXATjdKZAcmy1aXtGq364A=s800-c-k-c0x00ffffff-no-rj", - "name": "Aloe Ch.魔乃アロエ" - }, - { - "id": "UC7MMNHR-kf9EN1rXiesMTMw", - "image": "https://yt3.ggpht.com/8SFoIMf_6XTf0jyeLd6Txdl96BqSyGhb250P3qEh7E4ui8fLNxLXLiLf7phYVy0CIYx3as42=s800-c-k-c0x00ffffff-no-rj", - "name": "Magni Dezmond Ch. HOLOSTARS-EN" - }, - { - "id": "UCwL7dgTxKo8Y4RFIKWaf8gA", - "image": "https://yt3.ggpht.com/ytc/AOPolaStFlTJ6ISi2Wuwz7L_OLHHShXfoVPDDnqsPWLb=s800-c-k-c0x00ffffff-no-rj", - "name": "Oga Ch.荒咬オウガ" - }, - { - "id": "UCdn5BQ06XqgXoAxIhbqw5Rg", - "image": "https://yt3.ggpht.com/ytc/AOPolaSFPK_6xlqthNXIpMC7OTWfGsDAoNkR9OexBYxcpA=s800-c-k-c0x00ffffff-no-rj", - "name": "フブキCh。白上フブキ" - }, - { - "id": "UCa9Y57gfeY0Zro_noHRVrnw", - "image": "https://yt3.ggpht.com/O7m_5HMY_O8yxR3Jhn9cEO1fLNL_GifMERExnAmfY7JrdTRsTjNijTcNYTPN97Llj3zGn8Susw=s800-c-k-c0x00ffffff-no-rj", - "name": "Luna Ch. 姫森ルーナ" - }, - { - "id": "UC1CfXB_kRs3C-zaeTG3oGyg", - "image": "https://yt3.ggpht.com/B2tq3IQAFxUe9W3MaMc0V62bmlTWCSoTuCk-Y-Ab8yXkZKdIswQhHABZhz2e4YM1-B_Kxen_7w=s800-c-k-c0x00ffffff-no-rj", - "name": "HAACHAMA Ch 赤井はあと" - }, - { - "id": "UCw1KNjVqfrJSfcFd6zlcSzA", - "image": "https://yt3.ggpht.com/7QQ7vnkdwS7e8cLY6YYRoLTLftUxQCopsIxE7L9Qd6vXW_TsCjb4YZDVqYTJ3qceAAqWtwQH=s800-c-k-c0x00ffffff-no-rj", - "name": "Nia Suzune / 鈴音にあ [PRISM Project]" - }, - { - "id": "UCambvP8yxNDot4FzQc9cgiw", - "image": "https://yt3.ggpht.com/EgL9iOOKL7KiLIBxjqJO6gmVJE7BJ4xqfmgyis_QQ9zdbYAD_Pco7xagjdpWCTFoPbgxEXyJ=s800-c-k-c0x00ffffff-no-rj", - "name": "宇佐美リト / Usami Rito【にじさんじ】" - }, - { - "id": "UCqEp6RdtsMbUNrCdCswr6pA", - "image": "https://yt3.ggpht.com/ytc/AMLnZu9ZF7fPn4IghqjrWH-SFrdSzlY9EMtkkoUntGLWLA=s800-c-k-c0x00ffffff-no-rj", - "name": "海夜叉神/黄泉波咲夜【にじさんじ】" - }, - { - "id": "UC6TfqY40Xt1Y0J-N18c85qQ", - "image": "https://yt3.ggpht.com/50JCdIpi9B-ZxDaveVfSyKuvRyj8d2DgLe0sMkd_UxuxN-VcGQ54W4M-6T0wXzJV2TdfAeZglSc=s800-c-k-c0x00ffffff-no-rj", - "name": "安土桃" - }, - { - "id": "UCFTLzh12_nrtzqBPsTCqenA", - "image": "https://yt3.ggpht.com/ytc/AOPolaRF12upNUVmDXfH2A7ViS-gyKCcAvAQXTyEmbWAcA=s800-c-k-c0x00ffffff-no-rj", - "name": "アキロゼCh。Vtuber/ホロライブ所属" - }, - { - "id": "UCMwGHR0BTZuLsmjY_NT5Pwg", - "image": "https://yt3.ggpht.com/f4uYWHJxiGwyXm8NUlm818N1MRnywtgL6wM8JdWqWsKBzI7v1eg8dxDWG7igkWuukUSiufydqPg=s800-c-k-c0x00ffffff-no-rj", - "name": "Ninomae Ina'nis Ch. hololive-EN" - }, - { - "id": "UC6oW4FXETgEGOFTxWmI2h5Q", - "image": "https://yt3.ggpht.com/ytc/AMLnZu_clEsYJi5qCPCpxCuw2qMwB5rfcm2hgDITVRRn=s800-c-k-c0x00ffffff-no-rj", - "name": "Noor【NIJISANJI IN】" - }, - { - "id": "UC_sFNM0z0MWm9A6WlKPuMMg", - "image": "https://yt3.ggpht.com/JDCIBWj11TgjY2Uyba_efZ0n5hzjysMB9GxkvHGkIN_sfFQJR5mx3iVPqgJ96IPcYjZpCLsb=s800-c-k-c0x00ffffff-no-rj", - "name": "Nerissa Ravencroft Ch. hololive-EN" - }, - { - "id": "UCnYhIk9aGEx_bIgheVjs53w", - "image": "https://yt3.ggpht.com/ytc/AOPolaRL4Pk2cC2Q0GXLV-N9tSPZkCDp_c2RqdQEBpY-=s800-c-k-c0x00ffffff-no-rj", - "name": "Luto Araka / 新火ると [PRISM Project]" - }, - { - "id": "UCIytNcoz4pWzXfLda0DoULQ", - "image": "https://yt3.ggpht.com/21x1Ab6pEffGItAcNTjcYUkG3IzQ1y--5cUUjtEhrUEuz2iCttL08vswnPRe1XvtBaZ0yUAm=s800-c-k-c0x00ffffff-no-rj", - "name": "エクス・アルビオ -Ex Albio-" - } - ], - "session": "GUQkquh03dwF84EAxif_EA", - "title": "Select all the VTuber affiliated with Hololive" -} -</div><p id="3dd194a4_35">To check your answers against the API. Send <code class="code" id="3dd194a4_36">session</code> token and the <code class="code" id="3dd194a4_37">id</code> of each selected element as a string comma separated as part of a data payload to <code class="code" id="3dd194a4_38">/api/verify</code></p><p id="3dd194a4_39">Example Payload</p><div class="code-block" data-lang="none" > -session: "j4WjkoMcPgNX8_gnNXf8HA" -answer: "UC0ZTVxCHkZanT5dnP2FZD4Q,UC4WvIIAo89_AzGUh1AZ6Dkg,UCe0JiGnjPfEwEIbWASbOimw" -</div><p id="3dd194a4_41">Response:</p><div class="code-block" data-lang="none" > -{ - success: false -} -</div><p id="3dd194a4_43">In the case above the user selected:</p><ul class="list _ul" id="3dd194a4_44"><li class="list__item" id="3dd194a4_45"><p>UC0ZTVxCHkZanT5dnP2FZD4Q</p></li><li class="list__item" id="3dd194a4_46"><p>UC4WvIIAo89_AzGUh1AZ6Dkg</p></li><li class="list__item" id="3dd194a4_47"><p>UCe0JiGnjPfEwEIbWASbOimw</p></li></ul><p id="3dd194a4_48">and their answer was incorrect.</p><p id="3dd194a4_49">After failing a captcha, the token becomes invalidated and a request for a new CAPTCHA must be made</p></section><section class="chapter"><h2 id="supported-keywords" data-toc="supported-keywords" >Supported Keywords</h2></section><section class="chapter"><h2 id="organization" data-toc="organization" >Organization</h2><ul class="list _ul" id="3dd194a4_50"><li class="list__item" id="3dd194a4_51"><p>Hololive: All hololive Production affiliated members, including Holostars</p></li><li class="list__item" id="3dd194a4_52"><p>Nijisanji: All Nijisanji affiliated livers, including EN branches (does not include VirtuaReal)</p></li></ul></section><div class="last-modified"> Last modified: 16 December 2023</div><div data-feedback-placeholder="true"></div><div class="navigation-links _bottom"> <a class="navigation-links__prev" href="patchwork-api.html">Patchwork Archive API</a> <a class="navigation-links__next" href="imisssomeone-vt.html">IMissSomeone-VT</a> </div></article><div id="disqus_thread"></div></div></section></main></div> <script src="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.js"></script></body></html>
\ No newline at end of file diff --git a/welcome.html b/welcome.html deleted file mode 100644 index f8bb724..0000000 --- a/welcome.html +++ /dev/null @@ -1 +0,0 @@ -<!DOCTYPE html SYSTEM "about:legacy-compat"><html lang="en-US" data-colors-preset="contrast" data-primary-color="#307FFF"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"><meta name="robots" content="noindex"> <meta name="built-on" content="2023-12-16T15:56:55.953569157"><meta name="build-number" content="${buildNumber}"> <title>Welcome | Project Knowledge Base</title><script id="virtual-toc-data" type="application/json">[]</script><script id="topic-shortcuts" type="application/json"></script><link href="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.css" rel="stylesheet"> <link rel="apple-touch-icon" sizes="180x180" href="https://jetbrains.com/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="https://jetbrains.com/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="https://jetbrains.com/favicon-16x16.png"><link rel="manifest" href="https://jetbrains.com/site.webmanifest"><link rel="mask-icon" href="https://jetbrains.com/safari-pinned-tab.svg" color="#000000"><meta name="msapplication-TileColor" content="#000000"/><meta name="msapplication-TileImage" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-144x144.png"/><meta name="msapplication-square70x70logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-70x70.png"/><meta name="msapplication-square150x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-150x150.png"/><meta name="msapplication-wide310x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x150.png"/><meta name="msapplication-square310x310logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x310.png"/> <meta name="image" content=""><!-- Open Graph --><meta property="og:title" content="Welcome | Project Knowledge Base"/><meta property="og:description" content=""/><meta property="og:image" content=""/><meta property="og:site_name" content="Project Knowledge Base Help"/><meta property="og:type" content="website"/><meta property="og:locale" content="en_US"/><meta property="og:url" content="welcome.html"/><!-- End Open Graph --><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content=""><meta name="twitter:title" content="Welcome | Project Knowledge Base"><meta name="twitter:description" content=""><meta name="twitter:creator" content=""><meta name="twitter:image:src" content=""><!-- End Twitter Card --><!-- Schema.org WebPage --><script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebPage", "@id": "welcome.html#webpage", "url": "welcome.html", "name": "Welcome | Project Knowledge Base", "description": "", "image": "", "inLanguage":"en-US" }</script><!-- End Schema.org --><!-- Schema.org WebSite --><script type="application/ld+json"> { "@type": "WebSite", "@id": "/#website", "url": "/", "name": "Project Knowledge Base Help" }</script><!-- End Schema.org --></head> <body data-id="Welcome" data-main-title="Welcome" data-article-props="{"seeAlsoStyle":"links"}" data-template="article" data-breadcrumbs="" > <div class="wrapper"><main class="panel _main"><header class="panel__header"><div class="container"><h3>Project Knowledge Base Help</h3><div class="panel-trigger"></div></div></header><section class="panel__content"><div class="container"><article class="article" data-shortcut-switcher="inactive"><h1 data-toc="Welcome" id="Welcome.md">Welcome</h1> <p id="b3e4f46_7">Welcome to a collection of documentation for some of the various things I have over on GitHub.</p><p id="b3e4f46_8">These docs should serve as both a guide and archive of previously of both currently active and previously projects.</p><div class="last-modified"> Last modified: 16 December 2023</div><div data-feedback-placeholder="true"></div><div class="navigation-links _bottom"> <a class="navigation-links__next" href="patchwork-archive.html">Patchwork Archive</a> </div></article><div id="disqus_thread"></div></div></section></main></div> <script src="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.js"></script></body></html>
\ No newline at end of file |
