diff --git a/.env.example b/.env.example
index a1230c2..52abfc8 100644
--- a/.env.example
+++ b/.env.example
@@ -34,12 +34,6 @@ CLOUDFLARE_EMAIL=
# Cloudflare zone name, example: wr.do
CLOUDFLARE_ZONE_NAME=
-# -----------------------------------------------------------------------------
-# About to be deprecated
-# -----------------------------------------------------------------------------
-NEXT_PUBLIC_FREE_RECORD_QUOTA=3
-NEXT_PUBLIC_FREE_URL_QUOTA=100
-
# Open Signup
NEXT_PUBLIC_OPEN_SIGNUP=1
diff --git a/app/api/record/add/route.ts b/app/api/record/add/route.ts
index d6c727b..6fd3c5c 100644
--- a/app/api/record/add/route.ts
+++ b/app/api/record/add/route.ts
@@ -21,7 +21,6 @@ export async function POST(req: Request) {
CLOUDFLARE_ZONE_NAME,
CLOUDFLARE_API_KEY,
CLOUDFLARE_EMAIL,
- NEXT_PUBLIC_FREE_RECORD_QUOTA,
} = env;
if (
diff --git a/config/docs.ts b/config/docs.ts
index e818062..e909d2c 100644
--- a/config/docs.ts
+++ b/config/docs.ts
@@ -111,6 +111,11 @@ export const docsConfig: DocsConfig = {
href: "/docs/developer/installation",
icon: "page",
},
+ {
+ title: "Quick Start",
+ href: "/docs/developer/quick-start",
+ icon: "page",
+ },
{
title: "Cloudflare",
href: "/docs/developer/cloudflare",
diff --git a/config/site.ts b/config/site.ts
index bd29214..57192fe 100644
--- a/config/site.ts
+++ b/config/site.ts
@@ -2,8 +2,6 @@ import { SidebarNavItem, SiteConfig } from "types";
import { env } from "@/env.mjs";
const site_url = env.NEXT_PUBLIC_APP_URL;
-const free_recored_quota = env.NEXT_PUBLIC_FREE_RECORD_QUOTA;
-const free_url_quota = env.NEXT_PUBLIC_FREE_URL_QUOTA;
const open_signup = env.NEXT_PUBLIC_OPEN_SIGNUP;
const short_domains = env.NEXT_PUBLIC_SHORT_DOMAINS || "";
const email_domains = env.NEXT_PUBLIC_EMAIL_DOMAINS || "";
@@ -21,10 +19,6 @@ export const siteConfig: SiteConfig = {
discord: "https://discord.gg/AHPQYuZu3m",
},
mailSupport: "support@wr.do",
- freeQuota: {
- record: Number(free_recored_quota),
- url: Number(free_url_quota),
- },
openSignup: open_signup === "1" ? true : false,
shortDomains: short_domains.split(","),
emailDomains: email_domains.split(","),
diff --git a/content/docs/developer/authentification.mdx b/content/docs/developer/authentification.mdx
index 59327c3..180d2ed 100644
--- a/content/docs/developer/authentification.mdx
+++ b/content/docs/developer/authentification.mdx
@@ -27,7 +27,7 @@ Alternatively, you can use the `openssl` CLI, `openssl rand -base64 33`.
Then add it to your `.env` file:
-```js title=".env.local"
+```js title=".env"
AUTH_SECRET = secret;
```
diff --git a/content/docs/developer/installation.mdx b/content/docs/developer/installation.mdx
index 41a2119..d4d43fc 100644
--- a/content/docs/developer/installation.mdx
+++ b/content/docs/developer/installation.mdx
@@ -42,7 +42,7 @@ Copy/paste the `.env.example` in the `.env` file:
|----------------------|-------|-------------|
| NEXTAUTH_URL | `http://localhost:3000` | The URL of the Next.js application. |
| AUTH_SECRET | `123465` | The secret used to encrypt tokens and email verification hashes. |
-| DATABASE_URL | `file:./db.sqlite` | The path to the postgres database. |
+| DATABASE_URL | `postgres://username:password@host:port/database` | The path to the postgres database. |
| GOOGLE_CLIENT_ID | `123465` | The ID of the Google OAuth client. |
| GOOGLE_CLIENT_SECRET | `123465` | The secret of the Google OAuth client. |
| GITHUB_ID | `123465` | The ID of the GitHub OAuth client. |
@@ -51,8 +51,6 @@ Copy/paste the `.env.example` in the `.env` file:
| CLOUDFLARE_ZONE_ID | `123465` | The zone ID for Cloudflare. |
| CLOUDFLARE_API_KEY | `123465` | The API key for Cloudflare. |
| CLOUDFLARE_EMAIL | `123465` | The email for Cloudflare. |
-| NEXT_PUBLIC_FREE_RECORD_QUOTA | `3` | The number of free records. |
-| NEXT_PUBLIC_FREE_URL_QUOTA | `100` | The number of free URLs. |
| NEXT_PUBLIC_OPEN_SIGNUP | `1` | Open signup. |
| SCREENSHOTONE_BASE_URL | `https://api.example.com` | pending |
| GITHUB_TOKEN | `ghp_sscsfarwetqet` | https://github.com/settings/tokens |
@@ -67,6 +65,8 @@ Copy/paste the `.env.example` in the `.env` file:
- How to get `DATABASE_URL`, see [Database](/docs/developer/database).
- How to active email worker, see [Email Worker](/docs/developer/cloudflare-email-worker).
+For step by step installation, see [Quick Start](/docs/developer/quick-start).
+
### Configuration part
Let's check the configuration part for update all environment variables before use `pnpm run dev`.
diff --git a/content/docs/developer/quick-start.mdx b/content/docs/developer/quick-start.mdx
new file mode 100644
index 0000000..3089621
--- /dev/null
+++ b/content/docs/developer/quick-start.mdx
@@ -0,0 +1,215 @@
+---
+title: Quick Start for Developer
+description: Step by step installation
+---
+
+## 0. Installation
+
+```bash
+git clone https://github.com/oiov/wr.do
+```
+
+Enter in the folder and install dependencies for your project:
+
+```bash
+cd wrdo
+pnpm install
+```
+
+### Create a `.env` file
+
+Copy/paste the `.env.example` in the `.env` file
+
+## 1. Configure the Database
+
+### Prepare the Server Database Instance and Obtain the Connection URL
+
+Before deployment, make sure you have prepared a Postgres database instance. You can choose one of the following methods:
+
+- A. Use Serverless Postgres instances like Vercel / Neon;
+- B. Use self-deployed Postgres instances like Docker.
+
+The configuration for both methods is slightly different, and will be distinguished in the next step.
+
+### Add Environment Variables in Vercel
+
+In Vercel's deployment environment variables, add `DATABASE_URL` and other environment variables,
+and fill in the Postgres database connection URL prepared in the previous step.
+The typical format for the database connection URL is
+
+`postgres://username:password@host:port/database`.
+
+```js title=".env"
+DATABASE_URL=
+```
+
+### Deploy Postgres
+
+```bash
+pnpm postinstall
+pnpm db:push
+```
+
+### Add the AUTH_SECRET Environment Variable
+
+The `AUTH_SECRET` environment variable is used to encrypt tokens and email verification hashes(NextAuth.js).
+You can generate one from https://generate-secret.vercel.app/32:
+
+```js title=".env"
+AUTH_SECRET=a3e686f39b2a878c6866e4604e6f1b1b
+```
+
+## 2. Configure Authentication Service
+
+The server-side database needs to be paired with a user authentication service to function properly.
+Therefore, the corresponding authentication service needs to be configured.
+
+We provide the following authentication services:
+
+- Google
+- Github
+- LinuxDo
+- Resend Email Verification
+
+### Google config
+
+In this section, you can update these variables:
+
+```js title=".env"
+GOOGLE_CLIENT_ID = your_secret_client_id.apps.googleusercontent.com;
+GOOGLE_CLIENT_SECRET = your_secret_client;
+```
+
+See config tutorial in [Authjs - Google OAuth](https://authjs.dev/getting-started/providers/google).
+
+### Github config
+
+In this section, you can update these variables:
+
+```js title=".env"
+GITHUB_ID = your_secret_client_id;
+GITHUB_SECRET = your_secret_client;
+```
+
+See config tutorial in [Authjs - Github OAuth](https://authjs.dev/getting-started/providers/github).
+
+### LinuxDo config
+
+```js title=".env"
+LinuxDo_CLIENT_ID=
+LinuxDo_CLIENT_SECRET=
+```
+
+See config tutorial in [Connect LinuxDo](https://connect.linux.do).
+
+### Resend Email Verification config
+
+
+ The email part is similar at the [resend](https://resend.com/) documentation.
+ You can find the official documentation
+ [here](https://authjs.dev/getting-started/installation#setup-environment) if
+ you want.
+
+
+
+
+#### Create an account
+
+If don't have an account on Resend, just follow their steps after signup [here](https://resend.com/signup).
+
+#### Create an API key
+
+After signin on Resend, he propurse you to create your first API key.
+
+Copy/paste in your `.env` file.
+
+```js
+RESEND_API_KEY = re_your_resend_api_key;
+```
+
+
+
+## 3. Cloudflare Configs
+
+Before you start, you must have a Cloudflare account and be hosted on Cloudflare.
+
+### Add the CLOUDFLARE_ZONE_ID Environment Variable
+
+This is the unique identifier for your Cloudflare zone. You can find it in the Cloudflare dashboard under the Overview section of your domain.
+
+> Follow [this way](https://dash.cloudflare.com/Your_Acount_Id/wr.do), and scroll down to `Zone ID`.
+
+### Add the CLOUDFLARE_API_KEY Environment Variable
+
+ This is the API key that you use to authenticate requests to the Cloudflare API. You can generate or find your API key in the Cloudflare dashboard under the `profile` -> `api-tokens` section.
+
+ > Follow [https://dash.cloudflare.com/profile/api-tokens](https://dash.cloudflare.com/profile/api-tokens), and scroll down to `API Token`, the `Global API Key` should be used.
+
+### Add the CLOUDFLARE_EMAIL Environment Variable
+
+This is the email address associated with your Cloudflare account. It is used for authentication alongside the API key.
+
+### Add the CLOUDFLARE_ZONE_NAME Environment Variable
+
+This is the name of your Cloudflare zone. It is used to specify the zone in the Cloudflare API requests.
+
+In this section, you can update these variables:
+
+```js title=".env"
+CLOUDFLARE_ZONE_ID=abcdef1234567890
+CLOUDFLARE_ZONE_NAME=wr.do
+CLOUDFLARE_API_KEY=1234567890abcdef1234567890abcdef
+CLOUDFLARE_EMAIL=user@example.com
+```
+
+## 4. Email Worker Configs
+
+See detail in [Email Worker](/docs/developer/cloudflare-email-worker).
+
+After you have completed the above steps, you need add a public domain for r2 storage.
+
+Via `https://dash.cloudflare.com/[account_id]/r2/default/buckets/[bucket]/settings`:
+
+
+
+```js title=".env"
+NEXT_PUBLIC_EMAIL_R2_DOMAIN=https://email-attachment.wr.do
+```
+
+## 5. Add the Bussiness Configs
+
+```js title=".env"
+# Allow anyone to sign up
+NEXT_PUBLIC_OPEN_SIGNUP=1
+
+# Short domains. Separated by `,`
+NEXT_PUBLIC_SHORT_DOMAINS=wr.do,uv.do
+
+# Email domains. Separated by `,`
+NEXT_PUBLIC_EMAIL_DOMAINS=wr.do,uv.do
+```
+
+## 6. Add the SCREENSHOTONE_BASE_URL Environment Variable
+
+It's the base URL for the screenshotone API.
+
+You can deploy your own screenshotone API from [jasonraimondi/url-to-png](https://github.com/jasonraimondi/url-to-png).
+Deploy docs via [here](https://jasonraimondi.github.io/url-to-png/)
+
+```js title=".env"
+SCREENSHOTONE_BASE_URL=https://api.screenshotone.com
+```
+
+## 7. Add the GITHUB_TOKEN Environment Variable
+
+Via https://github.com/settings/tokens to get your token.
+
+```js title=".env"
+GITHUB_TOKEN=
+```
+## 8. Start the Dev Server
+
+```bash
+pnpm dev
+```
+Via [http://localhost:3000](http://localhost:3000)
\ No newline at end of file
diff --git a/env.mjs b/env.mjs
index 3c24a03..2b423fd 100644
--- a/env.mjs
+++ b/env.mjs
@@ -24,8 +24,6 @@ export const env = createEnv({
},
client: {
NEXT_PUBLIC_APP_URL: z.string().min(1),
- NEXT_PUBLIC_FREE_RECORD_QUOTA: z.string().min(1).default("3"),
- NEXT_PUBLIC_FREE_URL_QUOTA: z.string().min(1).default("100"),
NEXT_PUBLIC_OPEN_SIGNUP: z.string().min(1).default("1"),
NEXT_PUBLIC_SHORT_DOMAINS: z.string().min(1).default(""),
NEXT_PUBLIC_EMAIL_DOMAINS: z.string().min(1).default(""),
@@ -41,8 +39,6 @@ export const env = createEnv({
DATABASE_URL: process.env.DATABASE_URL,
RESEND_API_KEY: process.env.RESEND_API_KEY,
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
- NEXT_PUBLIC_FREE_RECORD_QUOTA: process.env.NEXT_PUBLIC_FREE_RECORD_QUOTA,
- NEXT_PUBLIC_FREE_URL_QUOTA: process.env.NEXT_PUBLIC_FREE_URL_QUOTA,
NEXT_PUBLIC_OPEN_SIGNUP: process.env.NEXT_PUBLIC_OPEN_SIGNUP,
NEXT_PUBLIC_SHORT_DOMAINS: process.env.NEXT_PUBLIC_SHORT_DOMAINS,
NEXT_PUBLIC_EMAIL_DOMAINS: process.env.NEXT_PUBLIC_EMAIL_DOMAINS,
diff --git a/package.json b/package.json
index eb6bfdd..d10f2e5 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,6 @@
{
"name": "wr.do",
- "version": "0.2.1",
- "private": true,
+ "version": "0.5.0",
"author": {
"name": "oiov",
"url": "https://github.com/oiov"
diff --git a/public/_static/docs/r2-domain.png b/public/_static/docs/r2-domain.png
new file mode 100644
index 0000000..81695ca
Binary files /dev/null and b/public/_static/docs/r2-domain.png differ
diff --git a/public/sw.js.map b/public/sw.js.map
index 2d6c480..caf43ad 100644
--- a/public/sw.js.map
+++ b/public/sw.js.map
@@ -1 +1 @@
-{"version":3,"file":"sw.js","sources":["../../../../../../private/var/folders/9b/3qmyp8zd2xvdspdrp149fyg00000gn/T/27bede768d2e2c514c44697095db0e38/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-routing@6.6.0/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-strategies@6.6.0/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-strategies@6.6.0/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-core@6.6.0/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({ request, response, event, state }) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, { status: 200, statusText: 'OK', headers: response.headers }) } return response } }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_NetworkOnly"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa,EAEZ,CAAA;EAQDC,CAAI,CAAA,CAAA,CAAA,CAACC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAA;AAElBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAyB,EAAE,CAAA;AAI3BC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA6B,CAAC,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAIC,oBAA+B,CAAC,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,EAAE,CAAC,CAAA;GAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAe,EAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAEC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAEC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAEC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIF,QAAQ,CAAIA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAACG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,gBAAgB,CAAE,CAAA,CAAA;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAACJ,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAACK,IAAI,CAAE,CAAA,CAAA;EAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,EAAE,CAAG,CAAA,CAAA,CAAA;EAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA;YAAEC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAER,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAACQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;EAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOR,QAAQ,CAAA;EAAC,CAAA,CAAA,CAAA,CAAA,CAAA;KAAG,CAAA;AAAE,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA;AACxWL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA6B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAIc,mBAA8B,CAAC,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;EAAEZ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,EAAE,CAAA,CAAA;EAAG,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;;"}
\ No newline at end of file
+{"version":3,"file":"sw.js","sources":["../../../../../../private/var/folders/9b/3qmyp8zd2xvdspdrp149fyg00000gn/T/42041de28b9ccaface55002c87fcc70c/sw.js"],"sourcesContent":["import {registerRoute as workbox_routing_registerRoute} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-routing@6.6.0/node_modules/workbox-routing/registerRoute.mjs';\nimport {NetworkFirst as workbox_strategies_NetworkFirst} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-strategies@6.6.0/node_modules/workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly as workbox_strategies_NetworkOnly} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-strategies@6.6.0/node_modules/workbox-strategies/NetworkOnly.mjs';\nimport {clientsClaim as workbox_core_clientsClaim} from '/Users/songjunxi/Desktop/repos/wrdo-app/wr.do/node_modules/.pnpm/workbox-core@6.6.0/node_modules/workbox-core/clientsClaim.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\nimportScripts(\n \n);\n\n\n\n\n\n\n\nself.skipWaiting();\n\nworkbox_core_clientsClaim();\n\n\n\nworkbox_routing_registerRoute(\"/\", new workbox_strategies_NetworkFirst({ \"cacheName\":\"start-url\", plugins: [{ cacheWillUpdate: async ({ request, response, event, state }) => { if (response && response.type === 'opaqueredirect') { return new Response(response.body, { status: 200, statusText: 'OK', headers: response.headers }) } return response } }] }), 'GET');\nworkbox_routing_registerRoute(/.*/i, new workbox_strategies_NetworkOnly({ \"cacheName\":\"dev\", plugins: [] }), 'GET');\n\n\n\n\n"],"names":["importScripts","self","skipWaiting","workbox_core_clientsClaim","workbox_routing_registerRoute","workbox_strategies_NetworkFirst","plugins","cacheWillUpdate","request","response","event","state","type","Response","body","status","statusText","headers","workbox_strategies_NetworkOnly"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAa,EAEZ,CAAA;EAQDC,CAAI,CAAA,CAAA,CAAA,CAACC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAA;AAElBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAyB,EAAE,CAAA;AAI3BC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA6B,CAAC,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAIC,oBAA+B,CAAC,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,EAAE,CAAC,CAAA;GAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAe,EAAE,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAEC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAEC,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;QAAEC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAIF,QAAQ,CAAIA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAACG,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,gBAAgB,CAAE,CAAA,CAAA;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAIC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAACJ,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAACK,IAAI,CAAE,CAAA,CAAA;EAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAM,EAAE,CAAG,CAAA,CAAA,CAAA;EAAEC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAU,EAAE,CAAI,CAAA,CAAA,CAAA,CAAA;YAAEC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAER,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAACQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA;EAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOR,QAAQ,CAAA;EAAC,CAAA,CAAA,CAAA,CAAA,CAAA;KAAG,CAAA;AAAE,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA;AACxWL,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA6B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAIc,mBAA8B,CAAC,CAAA;EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;EAAEZ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAO,EAAE,CAAA,CAAA;EAAG,CAAC,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA;;"}
\ No newline at end of file
diff --git a/types/index.d.ts b/types/index.d.ts
index a2ee855..899aec5 100644
--- a/types/index.d.ts
+++ b/types/index.d.ts
@@ -15,10 +15,6 @@ export type SiteConfig = {
feedback: string;
discord: string;
};
- freeQuota: {
- record: number;
- url: number;
- };
openSignup: boolean;
shortDomains: string[];
emailDomains: string[];