Skip to content
This repository has been archived by the owner on Jun 25, 2024. It is now read-only.

Commit

Permalink
chore(README): documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
yuchanns committed Mar 17, 2024
1 parent fb24fe6 commit 85c5e97
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 2 deletions.
67 changes: 67 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,69 @@
# warpflare

![GitHub License](https://img.shields.io/github/license/yuchanns/warpflare)

Keep your WARP+ traffic topped up with Cloudflare Workers.

This project is inspired by [WARP-CLASH](https://github.com/vvbbnn00/WARP-Clash-API).

> **Warning**
>
> This project is entirely non-commercial and is intended solely for educational
> and communicative purposes. Please do not use it for illegal activities, as
> the consequences will be borne by the user.
>
> This project is exclusively for advanced users with programming skills and is not recommended for beginners.
## Requirement
- A Cloudflare account is required.

## Instructions
To get started, follow these steps:

1. Fork this project.
2. Add three required secrets to `Settings > Security > Secrets and variables > Actions > Repository Secrets > New repository secrets`:
- `CLOUDFLARE_ACCOUNT_ID`: Find your account ID using the [instructions here](https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/).
- `CLOUDFLARE_API_TOKEN`: Create this token with the `Edit Cloudflare Workers` template and permission of `D1 Edit` included. See image below for reference:
![api token](https://github.com/yuchanns/warpflare/assets/25029451/89da63d6-6db4-4320-8d63-46b8fd11fe8d)
- `SECRET_KEY`: Choose any value for authorizing access to the subscription URL.

3. Go to `Actions > Deploy` and manually run the workflow by clicking `Run workflow`.
4. Find the route for your worker in your Cloudflare dashboard under `Workers & Pages`.
5. Assuming the route is `warp.xxx.workers.dev`, you can access the subscription using:
- `https://warp.xxx.workers.dev/sub?token=${SECRET_KEY}&proxyFormat=full&randomName=true&best=true`: detect the subscription type based on user-agent.
- `https://warp.xxx.workers.dev/api/:subType?token=${SECRET_KEY}&proxyFormat=full&randomName=true&best=true`: manually specify the subscription type to use.

The available parameters are shown in the table below:

|Name|Options|Description|
|---|---|---|
|subType|clash, quantumult, v2ray, shadowrocket, sing-box|**PR**s are welcome|
|proxyFormat|only_proxies, with_groups, full|only for clash|

You can control the worker behavior using the following environment variables:

|Name|Default|Description|
|---|---|---|
|LOSS_THRESHOLD|10|Packet loss rate (percentage)|
|DELAY_THRESHOLD|500|Delay threshold (ms)|
|RANDOM_COUNT|The number of nodes|10|
|GET_DATA_INTERVAL|2|Interval for replenishing `WARP+` traffic (min)|
|SAVE_ACCOUNT_INTERVAL|10|Interval for dropping accounts (min)|

## Optimization

Even though default IPs are embedded, you may encounter varying levels of loss and delay based on your location. To enhance your overall experience, it is essential to optimize your IP.

To get started, clone this project and turn off all the proxies on your local network. Make sure to have a node environment and pnpm installed. Install project dependencies for the first time using `pnpm install`.

Next, navigate to the project path and run the following command:

```bash
pnpm optimize
```

This will upload a sql to your worker to obtain optimized IPs. Once the subscription is refreshed, a set of optimized nodes will be distributed.

## Roadmap

- [ ] Telegram bot
16 changes: 16 additions & 0 deletions src/client/repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,22 @@ const tableIP = sqliteTable("IP", {
unique_name: text("unique_name").notNull()
})

export const generateDefaultIPv4 = () => {
return [
{ ip: "162.159.192.116", "port": 3854, loss: 0.00, delay: 165, name: "🇺🇸 US-CF-Orange" },
{ ip: "162.159.192.237", "port": 8742, loss: 0.00, delay: 165, name: "🇺🇸 US-CF-Brown" },
{ ip: "162.159.195.211", "port": 939, loss: 0.00, delay: 165, name: "🇺🇸 US-CF-Indigo" },
{ ip: "162.159.195.122", "port": 8742, loss: 0.00, delay: 166, name: "🇺🇸 US-CF-Green" },
{ ip: "162.159.195.122", "port": 4177, loss: 0.00, delay: 166, name: "🇺🇸 US-CF-Gray" },
{ ip: "162.159.195.202", "port": 4177, loss: 0.00, delay: 166, name: "🇺🇸 US-CF-Yellow" },
{ ip: "162.159.195.78", "port": 8742, loss: 0.00, delay: 166, name: "🇺🇸 US-CF-Red" },
{ ip: "162.159.192.197", "port": 8742, loss: 0.00, delay: 167, name: "🇺🇸 US-CF-White" },
{ ip: "162.159.195.186", "port": 8742, loss: 0.00, delay: 167, name: "🇺🇸 US-CF-Blue" },
{ ip: "162.159.195.186", "port": 4177, loss: 0.00, delay: 167, name: "🇺🇸 US-CF-Pink" },
{ ip: "162.159.195.199", "port": 2408, loss: 0.00, delay: 167, name: "🇺🇸 US-CF-Purple" },
]
}

export const getIPv4All = async (
{ DATABASE: DB, LOSS_THRESHOLD = 10, DELAY_THRESHOLD = 500 }: Bindings,
randomName: boolean,
Expand Down
7 changes: 5 additions & 2 deletions src/server/sub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Bindings } from '.'
import { zValidator } from '@hono/zod-validator'
import { z } from 'zod'
import { ProxyFormat, SubType, generateClash, generateShadowrocket, generateSingBox, getRandomEntryPoints } from '../utils'
import { getCurrentAccount, getIPv4All } from '../client'
import { generateDefaultIPv4, getCurrentAccount, getIPv4All } from '../client'
import { HTTPException } from 'hono/http-exception'

const app = new Hono<{ Bindings: Bindings }>()
Expand All @@ -14,7 +14,10 @@ export const sub = async (
proxyFormat: ProxyFormat, isAndroid: boolean,
) => {
// TODO: support IPv6
const ips = await getIPv4All(env, randomName)
let ips = await getIPv4All(env, randomName)
if (ips.length == 0) {
ips = generateDefaultIPv4()
}
const random = getRandomEntryPoints(env, ips, best)
const { private_key: privateKey } = await getCurrentAccount(env)
switch (subType) {
Expand Down

0 comments on commit 85c5e97

Please sign in to comment.