aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPinapelz <yukais@pinapelz.com>2024-04-07 01:19:17 -0700
committerPinapelz <yukais@pinapelz.com>2024-04-07 01:19:17 -0700
commitc95c0a56cd994ff09c3aee767949a88752642409 (patch)
tree0d89cb2e4a17cd8c004b3b2a3a1e648f1b720492
parent8e1b5f1acb359bdd2fd8fa644f97274e6429b779 (diff)
migrate docs to vitepress
-rw-r--r--.github/deploy.yml64
-rw-r--r--.gitignore17
-rw-r--r--.idea/.gitignore3
-rw-r--r--.idea/KnowledgeBase.iml8
-rw-r--r--.idea/modules.xml8
-rw-r--r--.idea/vcs.xml6
-rw-r--r--.vitepress/config.mts28
-rw-r--r--CNAME1
-rw-r--r--HelpTOC.json1
-rw-r--r--Map.jhm1
-rw-r--r--Writerside/api-docs/patchwork-archive-api.yml324
-rw-r--r--Writerside/c.list6
-rw-r--r--Writerside/hi.tree14
-rw-r--r--Writerside/topics/Default-topic.md80
-rw-r--r--Writerside/topics/Patchwork-API.md7
-rw-r--r--Writerside/topics/Patchwork-Archive.md9
-rw-r--r--Writerside/topics/Welcome.md6
-rw-r--r--Writerside/v.list5
-rw-r--r--Writerside/writerside.cfg10
-rw-r--r--api-examples.md49
-rw-r--r--config.json1
-rw-r--r--current.help.version0
-rw-r--r--docs/i-miss-someone-vt.md (renamed from Writerside/topics/IMissSomeone-VT.md)5
-rw-r--r--docs/patchwork-archive-api.md366
-rw-r--r--docs/vtuber-captcha.md (renamed from Writerside/topics/VTuber-Captcha.md)17
-rw-r--r--imisssomeone-vt.html1
-rw-r--r--index.html9
-rw-r--r--index.md21
-rw-r--r--markdown-examples.md85
-rw-r--r--package.json10
-rw-r--r--patchwork-api.html1
-rw-r--r--patchwork-archive.html1
-rw-r--r--pnpm-lock.yaml1088
-rw-r--r--vtuber-captcha.html100
-rw-r--r--welcome.html1
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' }
+ ]
+ }
+})
diff --git a/CNAME b/CNAME
deleted file mode 100644
index d3ca82c..0000000
--- a/CNAME
+++ /dev/null
@@ -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:
-
-![Create new topic options](new_topic_options.png){ 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">![Alt Text](new_topic_options.png){ 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.
-
-![Patchwork Archive Video Page](https://github.com/Patchwork-Archive/Patchwork-Browser/assets/21994085/30b2cabf-07b4-4331-8ebf-709520d42baa)
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="{&quot;seeAlsoStyle&quot;:&quot;links&quot;}" 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? &quot;I Miss Someone VT&quot; 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&hellip;</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="{&quot;seeAlsoStyle&quot;:&quot;links&quot;}" 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="{&quot;seeAlsoStyle&quot;:&quot;links&quot;}" 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="{&quot;seeAlsoStyle&quot;:&quot;links&quot;}" 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/&lt;org&gt;</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">&lt;org&gt;</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" >
-{
- &quot;category&quot;: &quot;affiliation&quot;,
- &quot;onFail&quot;: {
- &quot;extra&quot;: null,
- &quot;text&quot;: &quot;You got some wrong&quot;
- },
- &quot;questions&quot;: [
- {
- &quot;id&quot;: &quot;UCgZuwn-O7Szh9cAgHqJ6vjw&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/ytc/AMLnZu_aQ3akSpFc9SVPcFMXATjdKZAcmy1aXtGq364A=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Aloe Ch.魔乃アロエ&quot;
- },
- {
- &quot;id&quot;: &quot;UC7MMNHR-kf9EN1rXiesMTMw&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/8SFoIMf_6XTf0jyeLd6Txdl96BqSyGhb250P3qEh7E4ui8fLNxLXLiLf7phYVy0CIYx3as42=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Magni Dezmond Ch. HOLOSTARS-EN&quot;
- },
- {
- &quot;id&quot;: &quot;UCwL7dgTxKo8Y4RFIKWaf8gA&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/ytc/AOPolaStFlTJ6ISi2Wuwz7L_OLHHShXfoVPDDnqsPWLb=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Oga Ch.荒咬オウガ&quot;
- },
- {
- &quot;id&quot;: &quot;UCdn5BQ06XqgXoAxIhbqw5Rg&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/ytc/AOPolaSFPK_6xlqthNXIpMC7OTWfGsDAoNkR9OexBYxcpA=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;フブキCh。白上フブキ&quot;
- },
- {
- &quot;id&quot;: &quot;UCa9Y57gfeY0Zro_noHRVrnw&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/O7m_5HMY_O8yxR3Jhn9cEO1fLNL_GifMERExnAmfY7JrdTRsTjNijTcNYTPN97Llj3zGn8Susw=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Luna Ch. 姫森ルーナ&quot;
- },
- {
- &quot;id&quot;: &quot;UC1CfXB_kRs3C-zaeTG3oGyg&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/B2tq3IQAFxUe9W3MaMc0V62bmlTWCSoTuCk-Y-Ab8yXkZKdIswQhHABZhz2e4YM1-B_Kxen_7w=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;HAACHAMA Ch 赤井はあと&quot;
- },
- {
- &quot;id&quot;: &quot;UCw1KNjVqfrJSfcFd6zlcSzA&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/7QQ7vnkdwS7e8cLY6YYRoLTLftUxQCopsIxE7L9Qd6vXW_TsCjb4YZDVqYTJ3qceAAqWtwQH=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Nia Suzune / 鈴音にあ [PRISM Project]&quot;
- },
- {
- &quot;id&quot;: &quot;UCambvP8yxNDot4FzQc9cgiw&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/EgL9iOOKL7KiLIBxjqJO6gmVJE7BJ4xqfmgyis_QQ9zdbYAD_Pco7xagjdpWCTFoPbgxEXyJ=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;宇佐美リト / Usami Rito【にじさんじ】&quot;
- },
- {
- &quot;id&quot;: &quot;UCqEp6RdtsMbUNrCdCswr6pA&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/ytc/AMLnZu9ZF7fPn4IghqjrWH-SFrdSzlY9EMtkkoUntGLWLA=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;海夜叉神/黄泉波咲夜【にじさんじ】&quot;
- },
- {
- &quot;id&quot;: &quot;UC6TfqY40Xt1Y0J-N18c85qQ&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/50JCdIpi9B-ZxDaveVfSyKuvRyj8d2DgLe0sMkd_UxuxN-VcGQ54W4M-6T0wXzJV2TdfAeZglSc=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;安土桃&quot;
- },
- {
- &quot;id&quot;: &quot;UCFTLzh12_nrtzqBPsTCqenA&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/ytc/AOPolaRF12upNUVmDXfH2A7ViS-gyKCcAvAQXTyEmbWAcA=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;アキロゼCh。Vtuber/ホロライブ所属&quot;
- },
- {
- &quot;id&quot;: &quot;UCMwGHR0BTZuLsmjY_NT5Pwg&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/f4uYWHJxiGwyXm8NUlm818N1MRnywtgL6wM8JdWqWsKBzI7v1eg8dxDWG7igkWuukUSiufydqPg=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Ninomae Ina'nis Ch. hololive-EN&quot;
- },
- {
- &quot;id&quot;: &quot;UC6oW4FXETgEGOFTxWmI2h5Q&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/ytc/AMLnZu_clEsYJi5qCPCpxCuw2qMwB5rfcm2hgDITVRRn=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Noor【NIJISANJI IN】&quot;
- },
- {
- &quot;id&quot;: &quot;UC_sFNM0z0MWm9A6WlKPuMMg&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/JDCIBWj11TgjY2Uyba_efZ0n5hzjysMB9GxkvHGkIN_sfFQJR5mx3iVPqgJ96IPcYjZpCLsb=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Nerissa Ravencroft Ch. hololive-EN&quot;
- },
- {
- &quot;id&quot;: &quot;UCnYhIk9aGEx_bIgheVjs53w&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/ytc/AOPolaRL4Pk2cC2Q0GXLV-N9tSPZkCDp_c2RqdQEBpY-=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;Luto Araka / 新火ると [PRISM Project]&quot;
- },
- {
- &quot;id&quot;: &quot;UCIytNcoz4pWzXfLda0DoULQ&quot;,
- &quot;image&quot;: &quot;https://yt3.ggpht.com/21x1Ab6pEffGItAcNTjcYUkG3IzQ1y--5cUUjtEhrUEuz2iCttL08vswnPRe1XvtBaZ0yUAm=s800-c-k-c0x00ffffff-no-rj&quot;,
- &quot;name&quot;: &quot;エクス・アルビオ -Ex Albio-&quot;
- }
- ],
- &quot;session&quot;: &quot;GUQkquh03dwF84EAxif_EA&quot;,
- &quot;title&quot;: &quot;Select all the VTuber affiliated with Hololive&quot;
-}
-</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: &quot;j4WjkoMcPgNX8_gnNXf8HA&quot;
-answer: &quot;UC0ZTVxCHkZanT5dnP2FZD4Q,UC4WvIIAo89_AzGUh1AZ6Dkg,UCe0JiGnjPfEwEIbWASbOimw&quot;
-</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="{&quot;seeAlsoStyle&quot;:&quot;links&quot;}" 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
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage