commit 9923878c5c8b68df7f132efd28f76ce5478a1f1a Author: Xe Iaso Date: Mon Mar 17 19:33:07 2025 -0400 initial import from /x/ monorepo Signed-off-by: Xe Iaso diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..63f4ea8 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,62 @@ +name: Go + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +permissions: + contents: read + actions: write + +jobs: + build: + runs-on: alrest-techarohq + steps: + - uses: actions/checkout@v4 + + - name: build essential + run: | + sudo apt-get update + sudo apt-get install -y build-essential + + - name: Set up Homebrew + uses: Homebrew/actions/setup-homebrew@master + + - name: Setup Homebrew cellar cache + uses: actions/cache@v4 + with: + path: | + /home/linuxbrew/.linuxbrew/Cellar + /home/linuxbrew/.linuxbrew/bin + /home/linuxbrew/.linuxbrew/etc + /home/linuxbrew/.linuxbrew/include + /home/linuxbrew/.linuxbrew/lib + /home/linuxbrew/.linuxbrew/opt + /home/linuxbrew/.linuxbrew/sbin + /home/linuxbrew/.linuxbrew/share + /home/linuxbrew/.linuxbrew/var + key: ${{ runner.os }}-go-homebrew-cellar-${{ hashFiles('go.sum') }} + restore-keys: | + ${{ runner.os }}-go-homebrew-cellar- + + - name: Install Brew dependencies + run: | + brew bundle + + - name: Setup Golang caches + uses: actions/cache@v4 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-golang-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-golang- + + - name: Build + run: go build ./... + + - name: Test + run: go test ./... diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..105385c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.env +*.rpm \ No newline at end of file diff --git a/Brewfile b/Brewfile new file mode 100644 index 0000000..883ba6b --- /dev/null +++ b/Brewfile @@ -0,0 +1,3 @@ +# programming languages +brew "go@1.24" +brew "node" \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..488b74f --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2025 Xe Iaso + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8e42ba1 --- /dev/null +++ b/README.md @@ -0,0 +1,300 @@ +# Anubis + +
+A smiling chibi dark-skinned anthro jackal with brown hair and tall ears looking victorious with a thumbs-up +
+ +![enbyware](https://pride-badges.pony.workers.dev/static/v1?label=enbyware&labelColor=%23555&stripeWidth=8&stripeColors=FCF434%2CFFFFFF%2C9C59D1%2C2C2C2C) +![GitHub Issues or Pull Requests by label](https://img.shields.io/github/issues/TecharoHQ/anubis) +![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/TecharoHQ/anubis) +![language count](https://img.shields.io/github/languages/count/TecharoHQ/anubis) +![repo size](https://img.shields.io/github/repo-size/TecharoHQ/anubis) + +Anubis [weighs the soul of your connection](https://en.wikipedia.org/wiki/Weighing_of_souls) using a sha256 proof-of-work challenge in order to protect upstream resources from scraper bots. + +Installing and using this will likely result in your website not being indexed by some search engines. This is considered a feature of Anubis, not a bug. + +This is a bit of a nuclear response, but AI scraper bots scraping so aggressively have forced my hand. I hate that I have to do this, but this is what we get for the modern Internet because bots don't conform to standards like robots.txt, even when they claim to. + +In most cases, you should not need this and can probably get by using Cloudflare to protect a given origin. However, for circumstances where you can't or won't use Cloudflare, Anubis is there for you. + +If you want to try this out, connect to [git.xeserv.us](https://git.xeserv.us). + +## Support + +If you run into any issues running Anubis, please [open an issue](https://github.com/Xe/x/issues/new?template=Blank+issue) and tag it with the Anubis tag. Please include all the information I would need to diagnose your issue. + +For live chat, please join the [Patreon](https://patreon.com/cadey) and ask in the Patron discord in the channel `#anubis`. + +## How Anubis works + +Anubis uses a proof-of-work challenge to ensure that clients are using a modern browser and are able to calculate SHA-256 checksums. Anubis has a customizable difficulty for this proof-of-work challenge, but defaults to 5 leading zeroes. + +```mermaid +--- +title: Challenge generation and validation +--- + +flowchart TD + Backend("Backend") + Fail("Fail") + + style PresentChallenge color:#FFFFFF, fill:#AA00FF, stroke:#AA00FF + style ValidateChallenge color:#FFFFFF, fill:#AA00FF, stroke:#AA00FF + style Backend color:#FFFFFF, stroke:#00C853, fill:#00C853 + style Fail color:#FFFFFF, stroke:#FF2962, fill:#FF2962 + + subgraph Server + PresentChallenge("Present Challenge") + ValidateChallenge("Validate Challenge") + end + + subgraph Client + Main("main.mjs") + Worker("Worker") + end + + Main -- Request challenge --> PresentChallenge + PresentChallenge -- Return challenge & difficulty --> Main + Main -- Spawn worker --> Worker + Worker -- Successful challenge --> Main + Main -- Validate challenge --> ValidateChallenge + ValidateChallenge -- Return cookie --> Backend + ValidateChallenge -- If anything is wrong --> Fail +``` + +### Challenge presentation + +Anubis decides to present a challenge using this logic: + +- User-Agent contains `"Mozilla"` +- Request path is not in `/.well-known`, `/robots.txt`, or `/favicon.ico` +- Request path is not obviously an RSS feed (ends with `.rss`, `.xml`, or `.atom`) + +This should ensure that git clients, RSS readers, and other low-harm clients can get through without issue, but high-risk clients such as browsers and AI scraper bots will get blocked. + +```mermaid +--- +title: Challenge presentation logic +--- + +flowchart LR + Request("Request") + Backend("Backend") + %%Fail("Fail") + PresentChallenge("Present +challenge") + HasMozilla{"Is browser +or scraper?"} + HasCookie{"Has cookie?"} + HasExpired{"Cookie expired?"} + HasSignature{"Has valid +signature?"} + RandomJitter{"Secondary +screening?"} + POWPass{"Proof of +work valid?"} + + style PresentChallenge color:#FFFFFF, fill:#AA00FF, stroke:#AA00FF + style Backend color:#FFFFFF, stroke:#00C853, fill:#00C853 + %%style Fail color:#FFFFFF, stroke:#FF2962, fill:#FF2962 + + Request --> HasMozilla + HasMozilla -- Yes --> HasCookie + HasMozilla -- No --> Backend + HasCookie -- Yes --> HasExpired + HasCookie -- No --> PresentChallenge + HasExpired -- Yes --> PresentChallenge + HasExpired -- No --> HasSignature + HasSignature -- Yes --> RandomJitter + HasSignature -- No --> PresentChallenge + RandomJitter -- Yes --> POWPass + RandomJitter -- No --> Backend + POWPass -- Yes --> Backend + PowPass -- No --> PresentChallenge + PresentChallenge -- Back again for another cycle --> Request +``` + +### Proof of passing challenges + +When a client passes a challenge, Anubis sets an HTTP cookie named `"within.website-x-cmd-anubis-auth"` containing a signed [JWT](https://jwt.io/) (JSON Web Token). This JWT contains the following claims: + +- `challenge`: The challenge string derived from user request metadata +- `nonce`: The nonce / iteration number used to generate the passing response +- `response`: The hash that passed Anubis' checks +- `iat`: When the token was issued +- `nbf`: One minute prior to when the token was issued +- `exp`: The token's expiry week after the token was issued + +This ensures that the token has enough metadata to prove that the token is valid (due to the token's signature), but also so that the server can independently prove the token is valid. This cookie is allowed to be set without triggering an EU cookie banner notification; but depending on facts and circumstances, you may wish to disclose this to your users. + +### Challenge format + +Challenges are formed by taking some user request metadata and using that to generate a SHA-256 checksum. The following request headers are used: + +- `Accept-Encoding`: The content encodings that the requestor supports, such as gzip. +- `Accept-Language`: The language that the requestor would prefer the server respond in, such as English. +- `X-Real-Ip`: The IP address of the requestor, as set by a reverse proxy server. +- `User-Agent`: The user agent string of the requestor. +- The current time in UTC rounded to the nearest week. +- The fingerprint (checksum) of Anubis' private ED25519 key. + +This forms a fingerprint of the requestor using metadata that any requestor already is sending. It also uses time as an input, which is known to both the server and requestor due to the nature of linear timelines. Depending on facts and circumstances, you may wish to disclose this to your users. + +### JWT signing + +Anubis uses an ed25519 keypair to sign the JWTs issued when challenges are passed. Anubis will generate a new ed25519 keypair every time it starts. At this time, there is no way to share this keypair between instance of Anubis, but that will be addressed in future versions. + +## Setting up Anubis + +Anubis is meant to sit between your reverse proxy (such as Nginx or Caddy) and your target service. One instance of Anubis must be used per service you are protecting. + +Anubis is shipped in the Docker image [`ghcr.io/xe/x/anubis:latest`](https://github.com/Xe/x/pkgs/container/x%2Fanubis). Other methods to install Anubis may exist, but the Docker image is currently the only supported method. + +The Docker image runs Anubis as user ID 1000 and group ID 1000. If you are mounting external volumes into Anubis' container, please be sure they are owned by or writable to this user/group. + +Anubis has very minimal system requirements. I suspect that 128Mi of ram may be sufficient for a large number of concurrent clients. Anubis may be a poor fit for apps that use WebSockets and maintain open connections, but I don't have enough real-world experience to know one way or another. + +Anubis uses these environment variables for configuration: + +| Environment Variable | Default value | Explanation | +| :------------------- | :------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `BIND` | `:8923` | The TCP port that Anubis listens on. | +| `DIFFICULTY` | `5` | The difficulty of the challenge, or the number of leading zeroes that must be in successful responses. | +| `METRICS_BIND` | `:9090` | The TCP port that Anubis serves Prometheus metrics on. | +| `POLICY_FNAME` | `/data/cfg/botPolicy.json` | The file containing [bot policy configuration](./docs/policies.md). See the bot policy documentation for more details. | +| `SERVE_ROBOTS_TXT` | `false` | If set `true`, Anubis will serve a default `robots.txt` file that disallows all known AI scrapers by name and then additionally disallows every scraper. This is useful if facts and circumstances make it difficult to change the underlying service to serve such a `robots.txt` file. | +| `TARGET` | `http://localhost:3923` | The URL of the service that Anubis should forward valid requests to. | + +### Policies + +Anubis has support for custom bot policies, matched by User-Agent string and request path. Check the [bot policy documentation](./docs/policies.md) for more information. + +### Docker compose + +Add Anubis to your compose file pointed at your service: + +```yaml +services: + anubis-nginx: + image: ghcr.io/xe/x/anubis:latest + environment: + BIND: ":8080" + DIFFICULTY: "5" + METRICS_BIND: ":9090" + SERVE_ROBOTS_TXT: "true" + TARGET: "http://nginx" + ports: + - 8080:8080 + nginx: + image: nginx + volumes: + - "./www:/usr/share/nginx/html" +``` + +### Kubernetes + +This example makes the following assumptions: + +- Your target service is listening on TCP port `5000`. +- Anubis will be listening on port `8080`. + +Attach Anubis to your Deployment: + +```yaml +containers: + # ... + - name: anubis + image: ghcr.io/xe/x/anubis:latest + imagePullPolicy: Always + env: + - name: "BIND" + value: ":8080" + - name: "DIFFICULTY" + value: "5" + - name: "METRICS_BIND" + value: ":9090" + - name: "SERVE_ROBOTS_TXT" + value: "true" + - name: "TARGET" + value: "http://localhost:5000" + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 250m + memory: 128Mi + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault +``` + +Then add a Service entry for Anubis: + +```diff +# ... + spec: + ports: ++ - protocol: TCP ++ port: 8080 ++ targetPort: 8080 ++ name: anubis +``` + +Then point your Ingress to the Anubis port: + +```diff + rules: + - host: git.xeserv.us + http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: git + port: +- name: http ++ name: anubis +``` + +## Known caveats + +Anubis works with most programs without any issues as long as they're configured to trust `127.0.0.0/8` and `::1/128` as "valid proxy servers". Some combinations of reverse proxy and target application can have issues. This section documents them so that you can pattern-match and fix them. + +### Caddy + Gitea/Forgejo + +Gitea/Forgejo relies on the reverse proxy setting the `X-Real-Ip` header. Caddy does not do this out of the gate. Modify your Caddyfile like this: + +```diff + ellenjoe.int.within.lgbt { + # ... +- reverse_proxy http://localhost:3000 ++ reverse_proxy http://localhost:3000 { ++ header_up X-Real-Ip {remote_host} ++ } + # ... + } +``` + +Ensure that Gitea/Forgejo have `[security].REVERSE_PROXY_TRUSTED_PROXIES` set to the IP ranges that Anubis will appear from. Typically this is sufficient: + +```ini +[security] +REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128 +``` + +However if you are running Anubis in a separate Pod/Deployment in Kubernetes, you may have to adjust this to the IP range of the Pod space in your Container Networking Interface plugin: + +```ini +[security] +REVERSE_PROXY_TRUSTED_PROXIES = 10.192.0.0/12 +``` diff --git a/cmd/anubis/.gitignore b/cmd/anubis/.gitignore new file mode 100644 index 0000000..061bf12 --- /dev/null +++ b/cmd/anubis/.gitignore @@ -0,0 +1,2 @@ +*.rpm +anubis diff --git a/cmd/anubis/CHANGELOG.md b/cmd/anubis/CHANGELOG.md new file mode 100644 index 0000000..612bec1 --- /dev/null +++ b/cmd/anubis/CHANGELOG.md @@ -0,0 +1,5 @@ +# CHANGELOG + +## 2025-01-24 + +- Added support for custom bot policy documentation, allowing administrators to change how Anubis works to meet their needs. diff --git a/cmd/anubis/botPolicies.json b/cmd/anubis/botPolicies.json new file mode 100644 index 0000000..6e04a11 --- /dev/null +++ b/cmd/anubis/botPolicies.json @@ -0,0 +1,70 @@ +{ + "bots": [ + { + "name": "amazonbot", + "user_agent_regex": "Amazonbot", + "action": "DENY" + }, + { + "name": "googlebot", + "user_agent_regex": "\\+http\\:\\/\\/www\\.google\\.com/bot\\.html", + "action": "ALLOW" + }, + { + "name": "bingbot", + "user_agent_regex": "\\+http\\:\\/\\/www\\.bing\\.com/bingbot\\.htm", + "action": "ALLOW" + }, + { + "name": "qwantbot", + "user_agent_regex": "\\+https\\:\\/\\/help\\.qwant\\.com/bot/", + "action": "ALLOW" + }, + { + "name": "us-artificial-intelligence-scraper", + "user_agent_regex": "\\+https\\:\\/\\/github\\.com\\/US-Artificial-Intelligence\\/scraper", + "action": "DENY" + }, + { + "name": "well-known", + "path_regex": "^/.well-known/.*$", + "action": "ALLOW" + }, + { + "name": "favicon", + "path_regex": "^/favicon.ico$", + "action": "ALLOW" + }, + { + "name": "robots-txt", + "path_regex": "^/robots.txt$", + "action": "ALLOW" + }, + { + "name": "rss-readers", + "path_regex": ".*\\.(rss|xml|atom|json)$", + "action": "ALLOW" + }, + { + "name": "lightpanda", + "user_agent_regex": "^Lightpanda/.*$", + "action": "DENY" + }, + { + "name": "headless-chrome", + "user_agent_regex": "HeadlessChrome", + "action": "DENY" + }, + { + "name": "headless-chromium", + "user_agent_regex": "HeadlessChromium", + "action": "DENY" + }, + { + "name": "generic-browser", + "user_agent_regex": "Mozilla", + "action": "CHALLENGE" + } + ], + "dnsbl": true +} diff --git a/cmd/anubis/decaymap.go b/cmd/anubis/decaymap.go new file mode 100644 index 0000000..dcd2952 --- /dev/null +++ b/cmd/anubis/decaymap.go @@ -0,0 +1,87 @@ +package main + +import ( + "sync" + "time" +) + +func zilch[T any]() T { + var zero T + return zero +} + +// DecayMap is a lazy key->value map. It's a wrapper around a map and a mutex. If values exceed their time-to-live, they are pruned at Get time. +type DecayMap[K comparable, V any] struct { + data map[K]decayMapEntry[V] + lock sync.RWMutex +} + +type decayMapEntry[V any] struct { + Value V + expiry time.Time +} + +// NewDecayMap creates a new DecayMap of key type K and value type V. +// +// Key types must be comparable to work with maps. +func NewDecayMap[K comparable, V any]() *DecayMap[K, V] { + return &DecayMap[K, V]{ + data: make(map[K]decayMapEntry[V]), + } +} + +// expire forcibly expires a key by setting its time-to-live one second in the past. +func (m *DecayMap[K, V]) expire(key K) bool { + m.lock.RLock() + val, ok := m.data[key] + m.lock.RUnlock() + + if !ok { + return false + } + + m.lock.Lock() + val.expiry = time.Now().Add(-1 * time.Second) + m.data[key] = val + m.lock.Unlock() + + return true +} + +// Get gets a value from the DecayMap by key. +// +// If a value has expired, forcibly delete it if it was not updated. +func (m *DecayMap[K, V]) Get(key K) (V, bool) { + m.lock.RLock() + value, ok := m.data[key] + m.lock.RUnlock() + + if !ok { + return zilch[V](), false + } + + if time.Now().After(value.expiry) { + m.lock.Lock() + // Since previously reading m.data[key], the value may have been updated. + // Delete the entry only if the expiry time is still the same. + if m.data[key].expiry == value.expiry { + delete(m.data, key) + } + m.lock.Unlock() + + return zilch[V](), false + } + + return value.Value, true +} + +// Set sets a key value pair in the map. +func (m *DecayMap[K, V]) Set(key K, value V, ttl time.Duration) { + m.lock.Lock() + defer m.lock.Unlock() + + m.data[key] = decayMapEntry[V]{ + Value: value, + expiry: time.Now().Add(ttl), + } +} diff --git a/cmd/anubis/decaymap_test.go b/cmd/anubis/decaymap_test.go new file mode 100644 index 0000000..73e0626 --- /dev/null +++ b/cmd/anubis/decaymap_test.go @@ -0,0 +1,31 @@ +package main + +import ( + "testing" + "time" +) + +func TestDecayMap(t *testing.T) { + dm := NewDecayMap[string, string]() + + dm.Set("test", "hi", 5*time.Minute) + + val, ok := dm.Get("test") + if !ok { + t.Error("somehow the test key was not set") + } + + if val != "hi" { + t.Errorf("wanted value %q, got: %q", "hi", val) + } + + ok = dm.expire("test") + if !ok { + t.Error("somehow could not force-expire the test key") + } + + _, ok = dm.Get("test") + if ok { + t.Error("got value even though it was supposed to be expired") + } +} diff --git a/cmd/anubis/index.templ b/cmd/anubis/index.templ new file mode 100644 index 0000000..e2426d5 --- /dev/null +++ b/cmd/anubis/index.templ @@ -0,0 +1,159 @@ +package main + +import ( + "github.com/TecharoHQ/anubis" + "github.com/TecharoHQ/anubis/xess" +) + +templ base(title string, body templ.Component) { + + + + { title } + + + + + +
+
+

{ title }

+
+ @body + +
+ + +} + +templ index() { +
+ Loading...

+
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func errorPage(message string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var9 := templ.GetChildren(ctx) + if templ_7745c5c3_Var9 == nil { + templ_7745c5c3_Var9 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var11 string + templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(message) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `index.templ`, Line: 155, Col: 14} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, ".

Go home

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/cmd/anubis/internal/config/config.go b/cmd/anubis/internal/config/config.go new file mode 100644 index 0000000..ad338ef --- /dev/null +++ b/cmd/anubis/internal/config/config.go @@ -0,0 +1,99 @@ +package config + +import ( + "errors" + "fmt" + "regexp" +) + +type Rule string + +const ( + RuleUnknown = "" + RuleAllow = "ALLOW" + RuleDeny = "DENY" + RuleChallenge = "CHALLENGE" +) + +type Bot struct { + Name string `json:"name"` + UserAgentRegex *string `json:"user_agent_regex"` + PathRegex *string `json:"path_regex"` + Action Rule `json:"action"` +} + +var ( + ErrNoBotRulesDefined = errors.New("config: must define at least one (1) bot rule") + ErrBotMustHaveName = errors.New("config.Bot: must set name") + ErrBotMustHaveUserAgentOrPath = errors.New("config.Bot: must set either user_agent_regex, path_regex") + ErrBotMustHaveUserAgentOrPathNotBoth = errors.New("config.Bot: must set either user_agent_regex, path_regex, and not both") + ErrUnknownAction = errors.New("config.Bot: unknown action") + ErrInvalidUserAgentRegex = errors.New("config.Bot: invalid user agent regex") + ErrInvalidPathRegex = errors.New("config.Bot: invalid path regex") +) + +func (b Bot) Valid() error { + var errs []error + + if b.Name == "" { + errs = append(errs, ErrBotMustHaveName) + } + + if b.UserAgentRegex == nil && b.PathRegex == nil { + errs = append(errs, ErrBotMustHaveUserAgentOrPath) + } + + if b.UserAgentRegex != nil && b.PathRegex != nil { + errs = append(errs, ErrBotMustHaveUserAgentOrPathNotBoth) + } + + if b.UserAgentRegex != nil { + if _, err := regexp.Compile(*b.UserAgentRegex); err != nil { + errs = append(errs, ErrInvalidUserAgentRegex, err) + } + } + + if b.PathRegex != nil { + if _, err := regexp.Compile(*b.PathRegex); err != nil { + errs = append(errs, ErrInvalidPathRegex, err) + } + } + + switch b.Action { + case RuleAllow, RuleChallenge, RuleDeny: + // okay + default: + errs = append(errs, fmt.Errorf("%w: %q", ErrUnknownAction, b.Action)) + } + + if len(errs) != 0 { + return fmt.Errorf("config: bot entry for %q is not valid:\n%w", b.Name, errors.Join(errs...)) + } + + return nil +} + +type Config struct { + Bots []Bot `json:"bots"` + DNSBL bool `json:"dnsbl"` +} + +func (c Config) Valid() error { + var errs []error + + if len(c.Bots) == 0 { + errs = append(errs, ErrNoBotRulesDefined) + } + + for _, b := range c.Bots { + if err := b.Valid(); err != nil { + errs = append(errs, err) + } + } + + if len(errs) != 0 { + return fmt.Errorf("config is not valid:\n%w", errors.Join(errs...)) + } + + return nil +} diff --git a/cmd/anubis/internal/config/config_test.go b/cmd/anubis/internal/config/config_test.go new file mode 100644 index 0000000..f362a76 --- /dev/null +++ b/cmd/anubis/internal/config/config_test.go @@ -0,0 +1,168 @@ +package config + +import ( + "encoding/json" + "errors" + "os" + "path/filepath" + "testing" +) + +func p[V any](v V) *V { return &v } + +func TestBotValid(t *testing.T) { + var tests = []struct { + name string + bot Bot + err error + }{ + { + name: "simple user agent", + bot: Bot{ + Name: "mozilla-ua", + Action: RuleChallenge, + UserAgentRegex: p("Mozilla"), + }, + err: nil, + }, + { + name: "simple path", + bot: Bot{ + Name: "well-known-path", + Action: RuleAllow, + PathRegex: p("^/.well-known/.*$"), + }, + err: nil, + }, + { + name: "no rule name", + bot: Bot{ + Action: RuleChallenge, + UserAgentRegex: p("Mozilla"), + }, + err: ErrBotMustHaveName, + }, + { + name: "no rule matcher", + bot: Bot{ + Name: "broken-rule", + Action: RuleAllow, + }, + err: ErrBotMustHaveUserAgentOrPath, + }, + { + name: "both user-agent and path", + bot: Bot{ + Name: "path-and-user-agent", + Action: RuleDeny, + UserAgentRegex: p("Mozilla"), + PathRegex: p("^/.secret-place/.*$"), + }, + err: ErrBotMustHaveUserAgentOrPathNotBoth, + }, + { + name: "unknown action", + bot: Bot{ + Name: "Unknown action", + Action: RuleUnknown, + UserAgentRegex: p("Mozilla"), + }, + err: ErrUnknownAction, + }, + { + name: "invalid user agent regex", + bot: Bot{ + Name: "mozilla-ua", + Action: RuleChallenge, + UserAgentRegex: p("a(b"), + }, + err: ErrInvalidUserAgentRegex, + }, + { + name: "invalid path regex", + bot: Bot{ + Name: "mozilla-ua", + Action: RuleChallenge, + PathRegex: p("a(b"), + }, + err: ErrInvalidPathRegex, + }, + } + + for _, cs := range tests { + cs := cs + t.Run(cs.name, func(t *testing.T) { + err := cs.bot.Valid() + if err == nil && cs.err == nil { + return + } + + if err == nil && cs.err != nil { + t.Errorf("didn't get an error, but wanted: %v", cs.err) + } + + if !errors.Is(err, cs.err) { + t.Logf("got wrong error from Valid()") + t.Logf("wanted: %v", cs.err) + t.Logf("got: %v", err) + t.Errorf("got invalid error from check") + } + }) + } +} + +func TestConfigValidKnownGood(t *testing.T) { + finfos, err := os.ReadDir("testdata/good") + if err != nil { + t.Fatal(err) + } + + for _, st := range finfos { + st := st + t.Run(st.Name(), func(t *testing.T) { + fin, err := os.Open(filepath.Join("testdata", "good", st.Name())) + if err != nil { + t.Fatal(err) + } + defer fin.Close() + + var c Config + if err := json.NewDecoder(fin).Decode(&c); err != nil { + t.Fatalf("can't decode file: %v", err) + } + + if err := c.Valid(); err != nil { + t.Fatal(err) + } + }) + } +} + +func TestConfigValidBad(t *testing.T) { + finfos, err := os.ReadDir("testdata/bad") + if err != nil { + t.Fatal(err) + } + + for _, st := range finfos { + st := st + t.Run(st.Name(), func(t *testing.T) { + fin, err := os.Open(filepath.Join("testdata", "bad", st.Name())) + if err != nil { + t.Fatal(err) + } + defer fin.Close() + + var c Config + if err := json.NewDecoder(fin).Decode(&c); err != nil { + t.Fatalf("can't decode file: %v", err) + } + + if err := c.Valid(); err == nil { + t.Fatal("validation should have failed but didn't somehow") + } else { + t.Log(err) + } + }) + } +} diff --git a/cmd/anubis/internal/config/testdata/bad/badregexes.json b/cmd/anubis/internal/config/testdata/bad/badregexes.json new file mode 100644 index 0000000..e85b85b --- /dev/null +++ b/cmd/anubis/internal/config/testdata/bad/badregexes.json @@ -0,0 +1,14 @@ +{ + "bots": [ + { + "name": "path-bad", + "path_regex": "a(b", + "action": "DENY" + }, + { + "name": "user-agent-bad", + "user_agent_regex": "a(b", + "action": "DENY" + } + ] +} \ No newline at end of file diff --git a/cmd/anubis/internal/config/testdata/bad/invalid.json b/cmd/anubis/internal/config/testdata/bad/invalid.json new file mode 100644 index 0000000..c5d1ff6 --- /dev/null +++ b/cmd/anubis/internal/config/testdata/bad/invalid.json @@ -0,0 +1,5 @@ +{ + "bots": [ + {} + ] +} \ No newline at end of file diff --git a/cmd/anubis/internal/config/testdata/bad/nobots.json b/cmd/anubis/internal/config/testdata/bad/nobots.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/cmd/anubis/internal/config/testdata/bad/nobots.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/cmd/anubis/internal/config/testdata/good/challengemozilla.json b/cmd/anubis/internal/config/testdata/good/challengemozilla.json new file mode 100644 index 0000000..e9d34ee --- /dev/null +++ b/cmd/anubis/internal/config/testdata/good/challengemozilla.json @@ -0,0 +1,9 @@ +{ + "bots": [ + { + "name": "generic-browser", + "user_agent_regex": "Mozilla", + "action": "CHALLENGE" + } + ] +} \ No newline at end of file diff --git a/cmd/anubis/internal/config/testdata/good/everything_blocked.json b/cmd/anubis/internal/config/testdata/good/everything_blocked.json new file mode 100644 index 0000000..e1763e4 --- /dev/null +++ b/cmd/anubis/internal/config/testdata/good/everything_blocked.json @@ -0,0 +1,10 @@ +{ + "bots": [ + { + "name": "everything", + "user_agent_regex": ".*", + "action": "DENY" + } + ], + "dnsbl": false +} \ No newline at end of file diff --git a/cmd/anubis/internal/dnsbl/dnsbl.go b/cmd/anubis/internal/dnsbl/dnsbl.go new file mode 100644 index 0000000..60edd5c --- /dev/null +++ b/cmd/anubis/internal/dnsbl/dnsbl.go @@ -0,0 +1,95 @@ +package dnsbl + +import ( + "errors" + "fmt" + "net" + "strings" +) + +//go:generate go tool golang.org/x/tools/cmd/stringer -type=DroneBLResponse + +type DroneBLResponse byte + +const ( + AllGood DroneBLResponse = 0 + IRCDrone DroneBLResponse = 3 + Bottler DroneBLResponse = 5 + UnknownSpambotOrDrone DroneBLResponse = 6 + DDOSDrone DroneBLResponse = 7 + SOCKSProxy DroneBLResponse = 8 + HTTPProxy DroneBLResponse = 9 + ProxyChain DroneBLResponse = 10 + OpenProxy DroneBLResponse = 11 + OpenDNSResolver DroneBLResponse = 12 + BruteForceAttackers DroneBLResponse = 13 + OpenWingateProxy DroneBLResponse = 14 + CompromisedRouter DroneBLResponse = 15 + AutoRootingWorms DroneBLResponse = 16 + AutoDetectedBotIP DroneBLResponse = 17 + Unknown DroneBLResponse = 255 +) + +func Reverse(ip net.IP) string { + if ip.To4() != nil { + return reverse4(ip) + } + + return reverse6(ip) +} + +func reverse4(ip net.IP) string { + splitAddress := strings.Split(ip.String(), ".") + + // swap first and last octet + splitAddress[0], splitAddress[3] = splitAddress[3], splitAddress[0] + // swap middle octets + splitAddress[1], splitAddress[2] = splitAddress[2], splitAddress[1] + + return strings.Join(splitAddress, ".") +} + +func reverse6(ip net.IP) string { + ipBytes := []byte(ip) + var sb strings.Builder + + for i := len(ipBytes) - 1; i >= 0; i-- { + // Split the byte into two nibbles + highNibble := ipBytes[i] >> 4 + lowNibble := ipBytes[i] & 0x0F + + // Append the nibbles in reversed order + sb.WriteString(fmt.Sprintf("%x.%x.", lowNibble, highNibble)) + } + + return sb.String()[:len(sb.String())-1] +} + +func Lookup(ipStr string) (DroneBLResponse, error) { + ip := net.ParseIP(ipStr) + if ip == nil { + return Unknown, errors.New("dnsbl: input is not an IP address") + } + + revIP := Reverse(ip) + ".dnsbl.dronebl.org" + + ips, err := net.LookupIP(revIP) + if err != nil { + var dnserr *net.DNSError + if errors.As(err, &dnserr) { + if dnserr.IsNotFound { + return AllGood, nil + } + } + + return Unknown, err + } + + if len(ips) != 0 { + for _, ip := range ips { + return DroneBLResponse(ip.To4()[3]), nil + } + } + + return UnknownSpambotOrDrone, nil +} diff --git a/cmd/anubis/internal/dnsbl/dnsbl_test.go b/cmd/anubis/internal/dnsbl/dnsbl_test.go new file mode 100644 index 0000000..0ead488 --- /dev/null +++ b/cmd/anubis/internal/dnsbl/dnsbl_test.go @@ -0,0 +1,55 @@ +package dnsbl + +import ( + "fmt" + "net" + "testing" +) + +func TestReverse4(t *testing.T) { + cases := []struct { + inp, out string + }{ + {"1.2.3.4", "4.3.2.1"}, + } + + for _, cs := range cases { + t.Run(fmt.Sprintf("%s->%s", cs.inp, cs.out), func(t *testing.T) { + out := reverse4(net.ParseIP(cs.inp)) + + if out != cs.out { + t.Errorf("wanted %s\ngot: %s", cs.out, out) + } + }) + } +} + +func TestReverse6(t *testing.T) { + cases := []struct { + inp, out string + }{ + { + inp: "1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0", + out: "0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1.0.f.e.d.c.b.a.9.8.7.6.5.4.3.2.1", + }, + } + + for _, cs := range cases { + t.Run(fmt.Sprintf("%s->%s", cs.inp, cs.out), func(t *testing.T) { + out := reverse6(net.ParseIP(cs.inp)) + + if out != cs.out { + t.Errorf("wanted %s, got: %s", cs.out, out) + } + }) + } +} + +func TestLookup(t *testing.T) { + resp, err := Lookup("27.65.243.194") + if err != nil { + t.Fatalf("it broked: %v", err) + } + + t.Logf("response: %d", resp) +} diff --git a/cmd/anubis/internal/dnsbl/droneblresponse_string.go b/cmd/anubis/internal/dnsbl/droneblresponse_string.go new file mode 100644 index 0000000..5104dda --- /dev/null +++ b/cmd/anubis/internal/dnsbl/droneblresponse_string.go @@ -0,0 +1,54 @@ +// Code generated by "stringer -type=DroneBLResponse"; DO NOT EDIT. + +package dnsbl + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[AllGood-0] + _ = x[IRCDrone-3] + _ = x[Bottler-5] + _ = x[UnknownSpambotOrDrone-6] + _ = x[DDOSDrone-7] + _ = x[SOCKSProxy-8] + _ = x[HTTPProxy-9] + _ = x[ProxyChain-10] + _ = x[OpenProxy-11] + _ = x[OpenDNSResolver-12] + _ = x[BruteForceAttackers-13] + _ = x[OpenWingateProxy-14] + _ = x[CompromisedRouter-15] + _ = x[AutoRootingWorms-16] + _ = x[AutoDetectedBotIP-17] + _ = x[Unknown-255] +} + +const ( + _DroneBLResponse_name_0 = "AllGood" + _DroneBLResponse_name_1 = "IRCDrone" + _DroneBLResponse_name_2 = "BottlerUnknownSpambotOrDroneDDOSDroneSOCKSProxyHTTPProxyProxyChainOpenProxyOpenDNSResolverBruteForceAttackersOpenWingateProxyCompromisedRouterAutoRootingWormsAutoDetectedBotIP" + _DroneBLResponse_name_3 = "Unknown" +) + +var ( + _DroneBLResponse_index_2 = [...]uint8{0, 7, 28, 37, 47, 56, 66, 75, 90, 109, 125, 142, 158, 175} +) + +func (i DroneBLResponse) String() string { + switch { + case i == 0: + return _DroneBLResponse_name_0 + case i == 3: + return _DroneBLResponse_name_1 + case 5 <= i && i <= 17: + i -= 5 + return _DroneBLResponse_name_2[_DroneBLResponse_index_2[i]:_DroneBLResponse_index_2[i+1]] + case i == 255: + return _DroneBLResponse_name_3 + default: + return "DroneBLResponse(" + strconv.FormatInt(int64(i), 10) + ")" + } +} diff --git a/cmd/anubis/js/main.mjs b/cmd/anubis/js/main.mjs new file mode 100644 index 0000000..3f2c652 --- /dev/null +++ b/cmd/anubis/js/main.mjs @@ -0,0 +1,71 @@ +import { process } from './proof-of-work.mjs'; +import { testVideo } from './video.mjs'; + +// from Xeact +const u = (url = "", params = {}) => { + let result = new URL(url, window.location.href); + Object.entries(params).forEach((kv) => { + let [k, v] = kv; + result.searchParams.set(k, v); + }); + return result.toString(); +}; + +const imageURL = (mood) => { + return `/.within.website/x/cmd/anubis/static/img/${mood}.webp`; +}; + +(async () => { + const status = document.getElementById('status'); + const image = document.getElementById('image'); + const title = document.getElementById('title'); + const spinner = document.getElementById('spinner'); + // const testarea = document.getElementById('testarea'); + + // const videoWorks = await testVideo(testarea); + // console.log(`videoWorks: ${videoWorks}`); + + // if (!videoWorks) { + // title.innerHTML = "Oh no!"; + // status.innerHTML = "Checks failed. Please check your browser's settings and try again."; + // image.src = imageURL("sad"); + // spinner.innerHTML = ""; + // spinner.style.display = "none"; + // return; + // } + + status.innerHTML = 'Calculating...'; + + const { challenge, difficulty } = await fetch("/.within.website/x/cmd/anubis/api/make-challenge", { method: "POST" }) + .then(r => { + if (!r.ok) { + throw new Error("Failed to fetch config"); + } + return r.json(); + }) + .catch(err => { + title.innerHTML = "Oh no!"; + status.innerHTML = `Failed to fetch config: ${err.message}`; + image.src = imageURL("sad"); + spinner.innerHTML = ""; + spinner.style.display = "none"; + throw err; + }); + + status.innerHTML = `Calculating...
Difficulty: ${difficulty}`; + + const t0 = Date.now(); + const { hash, nonce } = await process(challenge, difficulty); + const t1 = Date.now(); + + title.innerHTML = "Success!"; + status.innerHTML = `Done! Took ${t1 - t0}ms, ${nonce} iterations`; + image.src = imageURL("happy"); + spinner.innerHTML = ""; + spinner.style.display = "none"; + + setTimeout(() => { + const redir = window.location.href; + window.location.href = u("/.within.website/x/cmd/anubis/api/pass-challenge", { response: hash, nonce, redir, elapsedTime: t1 - t0 }); + }, 2000); +})(); \ No newline at end of file diff --git a/cmd/anubis/js/proof-of-work.mjs b/cmd/anubis/js/proof-of-work.mjs new file mode 100644 index 0000000..d71d2db --- /dev/null +++ b/cmd/anubis/js/proof-of-work.mjs @@ -0,0 +1,62 @@ +// https://dev.to/ratmd/simple-proof-of-work-in-javascript-3kgm + +export function process(data, difficulty = 5) { + return new Promise((resolve, reject) => { + let webWorkerURL = URL.createObjectURL(new Blob([ + '(', processTask(), ')()' + ], { type: 'application/javascript' })); + + let worker = new Worker(webWorkerURL); + + worker.onmessage = (event) => { + worker.terminate(); + resolve(event.data); + }; + + worker.onerror = (event) => { + worker.terminate(); + reject(); + }; + + worker.postMessage({ + data, + difficulty + }); + + URL.revokeObjectURL(webWorkerURL); + }); +} + +function processTask() { + return function () { + const sha256 = (text) => { + const encoded = new TextEncoder().encode(text); + return crypto.subtle.digest("SHA-256", encoded.buffer).then((result) => + Array.from(new Uint8Array(result)) + .map((c) => c.toString(16).padStart(2, "0")) + .join(""), + ); + }; + + addEventListener('message', async (event) => { + let data = event.data.data; + let difficulty = event.data.difficulty; + + let hash; + let nonce = 0; + do { + hash = await sha256(data + nonce++); + } while (hash.substring(0, difficulty) !== Array(difficulty + 1).join('0')); + + nonce -= 1; // last nonce was post-incremented + + postMessage({ + hash, + data, + difficulty, + nonce, + }); + }); + }.toString(); +} + diff --git a/cmd/anubis/js/video.mjs b/cmd/anubis/js/video.mjs new file mode 100644 index 0000000..59cde1e --- /dev/null +++ b/cmd/anubis/js/video.mjs @@ -0,0 +1,16 @@ +const videoElement = ``; + +export const testVideo = async (testarea) => { + testarea.innerHTML = videoElement; + return (await new Promise((resolve) => { + const video = document.getElementById('videotest'); + video.oncanplay = () => { + testarea.style.display = "none"; + resolve(true); + }; + video.onerror = (ev) => { + testarea.style.display = "none"; + resolve(false); + }; + })); +}; \ No newline at end of file diff --git a/cmd/anubis/main.go b/cmd/anubis/main.go new file mode 100644 index 0000000..45afeb2 --- /dev/null +++ b/cmd/anubis/main.go @@ -0,0 +1,574 @@ +package main + +import ( + "crypto/ed25519" + "crypto/rand" + "crypto/sha256" + "crypto/subtle" + "embed" + "encoding/hex" + "encoding/json" + "flag" + "fmt" + "io" + "log" + "log/slog" + "math" + mrand "math/rand" + "net/http" + "net/http/httputil" + "net/url" + "os" + "strconv" + "strings" + "time" + + "github.com/TecharoHQ/anubis" + "github.com/TecharoHQ/anubis/cmd/anubis/internal/config" + "github.com/TecharoHQ/anubis/cmd/anubis/internal/dnsbl" + "github.com/TecharoHQ/anubis/internal" + "github.com/TecharoHQ/anubis/xess" + "github.com/a-h/templ" + "github.com/facebookgo/flagenv" + "github.com/golang-jwt/jwt/v5" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/prometheus/client_golang/prometheus/promhttp" +) + +var ( + bind = flag.String("bind", ":8923", "TCP port to bind HTTP to") + challengeDifficulty = flag.Int("difficulty", 5, "difficulty of the challenge") + metricsBind = flag.String("metrics-bind", ":9090", "TCP port to bind metrics to") + robotsTxt = flag.Bool("serve-robots-txt", false, "serve a robots.txt file that disallows all robots") + policyFname = flag.String("policy-fname", "", "full path to anubis policy document (defaults to a sensible built-in policy)") + slogLevel = flag.String("slog-level", "INFO", "logging level (see https://pkg.go.dev/log/slog#hdr-Levels)") + target = flag.String("target", "http://localhost:3923", "target to reverse proxy to") + healthcheck = flag.Bool("healthcheck", false, "run a health check against Anubis") + + //go:embed static botPolicies.json + static embed.FS + + challengesIssued = promauto.NewCounter(prometheus.CounterOpts{ + Name: "anubis_challenges_issued", + Help: "The total number of challenges issued", + }) + + challengesValidated = promauto.NewCounter(prometheus.CounterOpts{ + Name: "anubis_challenges_validated", + Help: "The total number of challenges validated", + }) + + droneBLHits = promauto.NewCounterVec(prometheus.CounterOpts{ + Name: "anubis_dronebl_hits", + Help: "The total number of hits from DroneBL", + }, []string{"status"}) + + failedValidations = promauto.NewCounter(prometheus.CounterOpts{ + Name: "anubis_failed_validations", + Help: "The total number of failed validations", + }) + + timeTaken = promauto.NewHistogram(prometheus.HistogramOpts{ + Name: "anubis_time_taken", + Help: "The time taken for a browser to generate a response (milliseconds)", + Buckets: prometheus.ExponentialBucketsRange(1, math.Pow(2, 18), 19), + }) +) + +const ( + cookieName = "within.website-x-cmd-anubis-auth" + staticPath = "/.within.website/x/cmd/anubis/" +) + +//go:generate go tool github.com/a-h/templ/cmd/templ generate +//go:generate esbuild js/main.mjs --sourcemap --minify --bundle --outfile=static/js/main.mjs +//go:generate gzip -f -k static/js/main.mjs +//go:generate zstd -f -k --ultra -22 static/js/main.mjs +//go:generate brotli -fZk static/js/main.mjs + +func doHealthCheck() error { + resp, err := http.Get("http://localhost" + *metricsBind + "/metrics") + if err != nil { + return fmt.Errorf("failed to fetch metrics: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("unexpected status code: %d", resp.StatusCode) + } + + return nil +} + +func main() { + flagenv.Parse() + flag.Parse() + + internal.InitSlog(*slogLevel) + + if *healthcheck { + if err := doHealthCheck(); err != nil { + log.Fatal(err) + } + return + } + + s, err := New(*target, *policyFname) + if err != nil { + log.Fatal(err) + } + + fmt.Println("Rule error IDs:") + for _, rule := range s.policy.Bots { + if rule.Action != config.RuleDeny { + continue + } + + hash, err := rule.Hash() + if err != nil { + log.Fatalf("can't calculate checksum of rule %s: %v", rule.Name, err) + } + + fmt.Printf("* %s: %s\n", rule.Name, hash) + } + fmt.Println() + + mux := http.NewServeMux() + xess.Mount(mux) + + mux.Handle(staticPath, internal.UnchangingCache(http.StripPrefix(staticPath, http.FileServerFS(static)))) + + // mux.HandleFunc("GET /.within.website/x/cmd/anubis/static/js/main.mjs", serveMainJSWithBestEncoding) + + mux.HandleFunc("POST /.within.website/x/cmd/anubis/api/make-challenge", s.makeChallenge) + mux.HandleFunc("GET /.within.website/x/cmd/anubis/api/pass-challenge", s.passChallenge) + mux.HandleFunc("GET /.within.website/x/cmd/anubis/api/test-error", s.testError) + + if *robotsTxt { + mux.HandleFunc("/robots.txt", func(w http.ResponseWriter, r *http.Request) { + http.ServeFileFS(w, r, static, "static/robots.txt") + }) + + mux.HandleFunc("/.well-known/robots.txt", func(w http.ResponseWriter, r *http.Request) { + http.ServeFileFS(w, r, static, "static/robots.txt") + }) + } + + if *metricsBind != "" { + go metricsServer() + } + + mux.HandleFunc("/", s.maybeReverseProxy) + + slog.Info("listening", "url", "http://localhost"+*bind, "difficulty", *challengeDifficulty, "serveRobotsTXT", *robotsTxt, "target", *target, "version", anubis.Version) + log.Fatal(http.ListenAndServe(*bind, mux)) +} + +func metricsServer() { + http.DefaultServeMux.Handle("/metrics", promhttp.Handler()) + slog.Debug("listening for metrics", "url", "http://localhost"+*metricsBind) + log.Fatal(http.ListenAndServe(*metricsBind, nil)) +} + +func sha256sum(text string) (string, error) { + hash := sha256.New() + _, err := hash.Write([]byte(text)) + if err != nil { + return "", err + } + return hex.EncodeToString(hash.Sum(nil)), nil +} + +func (s *Server) challengeFor(r *http.Request) string { + fp := sha256.Sum256(s.priv.Seed()) + + data := fmt.Sprintf( + "Accept-Language=%s,X-Real-IP=%s,User-Agent=%s,WeekTime=%s,Fingerprint=%x,Difficulty=%d", + r.Header.Get("Accept-Language"), + r.Header.Get("X-Real-Ip"), + r.UserAgent(), + time.Now().UTC().Round(24*7*time.Hour).Format(time.RFC3339), + fp, + *challengeDifficulty, + ) + result, _ := sha256sum(data) + return result +} + +func New(target, policyFname string) (*Server, error) { + u, err := url.Parse(target) + if err != nil { + return nil, fmt.Errorf("failed to parse target URL: %w", err) + } + + pub, priv, err := ed25519.GenerateKey(rand.Reader) + if err != nil { + return nil, fmt.Errorf("failed to generate ed25519 key: %w", err) + } + + rp := httputil.NewSingleHostReverseProxy(u) + + var fin io.ReadCloser + + if policyFname != "" { + fin, err = os.Open(policyFname) + if err != nil { + return nil, fmt.Errorf("can't parse policy file %s: %w", policyFname, err) + } + } else { + policyFname = "(static)/botPolicies.json" + fin, err = static.Open("botPolicies.json") + if err != nil { + return nil, fmt.Errorf("[unexpected] can't parse builtin policy file %s: %w", policyFname, err) + } + } + + defer fin.Close() + + policy, err := parseConfig(fin, policyFname) + if err != nil { + return nil, err // parseConfig sets a fancy error for us + } + + return &Server{ + rp: rp, + priv: priv, + pub: pub, + policy: policy, + dnsblCache: NewDecayMap[string, dnsbl.DroneBLResponse](), + }, nil +} + +type Server struct { + rp *httputil.ReverseProxy + priv ed25519.PrivateKey + pub ed25519.PublicKey + policy *ParsedConfig + dnsblCache *DecayMap[string, dnsbl.DroneBLResponse] +} + +func (s *Server) maybeReverseProxy(w http.ResponseWriter, r *http.Request) { + cr, rule := s.check(r) + r.Header.Add("X-Anubis-Rule", cr.Name) + r.Header.Add("X-Anubis-Action", string(cr.Rule)) + lg := slog.With( + "check_result", cr, + "user_agent", r.UserAgent(), + "accept_language", r.Header.Get("Accept-Language"), + "priority", r.Header.Get("Priority"), + "x-forwarded-for", + r.Header.Get("X-Forwarded-For"), + "x-real-ip", r.Header.Get("X-Real-Ip"), + ) + policyApplications.WithLabelValues(cr.Name, string(cr.Rule)).Add(1) + + ip := r.Header.Get("X-Real-Ip") + + if s.policy.DNSBL && ip != "" { + resp, ok := s.dnsblCache.Get(ip) + if !ok { + lg.Debug("looking up ip in dnsbl") + resp, err := dnsbl.Lookup(ip) + if err != nil { + lg.Error("can't look up ip in dnsbl", "err", err) + } + s.dnsblCache.Set(ip, resp, 24*time.Hour) + droneBLHits.WithLabelValues(resp.String()).Inc() + } + + if resp != dnsbl.AllGood { + lg.Info("DNSBL hit", "status", resp.String()) + templ.Handler(base("Oh noes!", errorPage(fmt.Sprintf("DroneBL reported an entry: %s, see https://dronebl.org/lookup?ip=%s", resp.String(), ip))), templ.WithStatus(http.StatusOK)).ServeHTTP(w, r) + return + } + } + + switch cr.Rule { + case config.RuleAllow: + lg.Debug("allowing traffic to origin (explicit)") + s.rp.ServeHTTP(w, r) + return + case config.RuleDeny: + clearCookie(w) + lg.Info("explicit deny") + if rule == nil { + lg.Error("rule is nil, cannot calculate checksum") + templ.Handler(base("Oh noes!", errorPage("Other internal server error (contact the admin)")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + hash, err := rule.Hash() + if err != nil { + lg.Error("can't calculate checksum of rule", "err", err) + templ.Handler(base("Oh noes!", errorPage("Other internal server error (contact the admin)")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + lg.Debug("rule hash", "hash", hash) + templ.Handler(base("Oh noes!", errorPage(fmt.Sprintf("Access Denied: error code %s", hash))), templ.WithStatus(http.StatusOK)).ServeHTTP(w, r) + return + case config.RuleChallenge: + lg.Debug("challenge requested") + default: + clearCookie(w) + templ.Handler(base("Oh noes!", errorPage("Other internal server error (contact the admin)")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + + ckie, err := r.Cookie(cookieName) + if err != nil { + lg.Debug("cookie not found", "path", r.URL.Path) + clearCookie(w) + s.renderIndex(w, r) + return + } + + if err := ckie.Valid(); err != nil { + lg.Debug("cookie is invalid", "err", err) + clearCookie(w) + s.renderIndex(w, r) + return + } + + if time.Now().After(ckie.Expires) && !ckie.Expires.IsZero() { + lg.Debug("cookie expired", "path", r.URL.Path) + clearCookie(w) + s.renderIndex(w, r) + return + } + + token, err := jwt.ParseWithClaims(ckie.Value, jwt.MapClaims{}, func(token *jwt.Token) (interface{}, error) { + return s.pub, nil + }) + + if !token.Valid { + lg.Debug("invalid token", "path", r.URL.Path) + clearCookie(w) + s.renderIndex(w, r) + return + } + + claims := token.Claims.(jwt.MapClaims) + + exp, ok := claims["exp"].(float64) + if !ok { + lg.Debug("exp is not int64", "ok", ok, "typeof(exp)", fmt.Sprintf("%T", exp)) + clearCookie(w) + s.renderIndex(w, r) + return + } + + if exp := time.Unix(int64(exp), 0); time.Now().After(exp) { + lg.Debug("token has expired", "exp", exp.Format(time.RFC3339)) + clearCookie(w) + s.renderIndex(w, r) + return + } + + if token.Valid && randomJitter() { + r.Header.Add("X-Anubis-Status", "PASS-BRIEF") + lg.Debug("cookie is not enrolled into secondary screening") + s.rp.ServeHTTP(w, r) + return + } + + if claims["challenge"] != s.challengeFor(r) { + lg.Debug("invalid challenge", "path", r.URL.Path) + clearCookie(w) + s.renderIndex(w, r) + return + } + + var nonce int + + if v, ok := claims["nonce"].(float64); ok { + nonce = int(v) + } + + calcString := fmt.Sprintf("%s%d", s.challengeFor(r), nonce) + calculated, err := sha256sum(calcString) + if err != nil { + lg.Error("failed to calculate sha256sum", "path", r.URL.Path, "err", err) + clearCookie(w) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + if subtle.ConstantTimeCompare([]byte(claims["response"].(string)), []byte(calculated)) != 1 { + lg.Debug("invalid response", "path", r.URL.Path) + failedValidations.Inc() + clearCookie(w) + s.renderIndex(w, r) + return + } + + slog.Debug("all checks passed") + r.Header.Add("X-Anubis-Status", "PASS-FULL") + s.rp.ServeHTTP(w, r) +} + +func (s *Server) renderIndex(w http.ResponseWriter, r *http.Request) { + templ.Handler( + base("Making sure you're not a bot!", index()), + ).ServeHTTP(w, r) +} + +func (s *Server) makeChallenge(w http.ResponseWriter, r *http.Request) { + challenge := s.challengeFor(r) + difficulty := *challengeDifficulty + + lg := slog.With("user_agent", r.UserAgent(), "accept_language", r.Header.Get("Accept-Language"), "priority", r.Header.Get("Priority"), "x-forwarded-for", r.Header.Get("X-Forwarded-For"), "x-real-ip", r.Header.Get("X-Real-Ip")) + + json.NewEncoder(w).Encode(struct { + Challenge string `json:"challenge"` + Difficulty int `json:"difficulty"` + }{ + Challenge: challenge, + Difficulty: difficulty, + }) + lg.Debug("made challenge", "challenge", challenge, "difficulty", difficulty) + challengesIssued.Inc() +} + +func (s *Server) passChallenge(w http.ResponseWriter, r *http.Request) { + lg := slog.With("user_agent", r.UserAgent(), "accept_language", r.Header.Get("Accept-Language"), "priority", r.Header.Get("Priority"), "x-forwarded-for", r.Header.Get("X-Forwarded-For"), "x-real-ip", r.Header.Get("X-Real-Ip")) + + nonceStr := r.FormValue("nonce") + if nonceStr == "" { + clearCookie(w) + lg.Debug("no nonce") + templ.Handler(base("Oh noes!", errorPage("missing nonce")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + + elapsedTimeStr := r.FormValue("elapsedTime") + if elapsedTimeStr == "" { + clearCookie(w) + lg.Debug("no elapsedTime") + templ.Handler(base("Oh noes!", errorPage("missing elapsedTime")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + + elapsedTime, err := strconv.ParseFloat(elapsedTimeStr, 64) + if err != nil { + clearCookie(w) + lg.Debug("elapsedTime doesn't parse", "err", err) + templ.Handler(base("Oh noes!", errorPage("invalid elapsedTime")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + + lg.Info("challenge took", "elapsedTime", elapsedTime) + timeTaken.Observe(elapsedTime) + + response := r.FormValue("response") + redir := r.FormValue("redir") + + challenge := s.challengeFor(r) + + nonce, err := strconv.Atoi(nonceStr) + if err != nil { + clearCookie(w) + lg.Debug("nonce doesn't parse", "err", err) + templ.Handler(base("Oh noes!", errorPage("invalid nonce")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + + calcString := fmt.Sprintf("%s%d", challenge, nonce) + calculated, err := sha256sum(calcString) + if err != nil { + clearCookie(w) + lg.Debug("can't parse shasum", "err", err) + templ.Handler(base("Oh noes!", errorPage("failed to calculate sha256sum")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + + if subtle.ConstantTimeCompare([]byte(response), []byte(calculated)) != 1 { + clearCookie(w) + lg.Debug("hash does not match", "got", response, "want", calculated) + templ.Handler(base("Oh noes!", errorPage("invalid response")), templ.WithStatus(http.StatusForbidden)).ServeHTTP(w, r) + failedValidations.Inc() + return + } + + // compare the leading zeroes + if !strings.HasPrefix(response, strings.Repeat("0", *challengeDifficulty)) { + clearCookie(w) + lg.Debug("difficulty check failed", "response", response, "difficulty", *challengeDifficulty) + templ.Handler(base("Oh noes!", errorPage("invalid response")), templ.WithStatus(http.StatusForbidden)).ServeHTTP(w, r) + failedValidations.Inc() + return + } + + // generate JWT cookie + token := jwt.NewWithClaims(jwt.SigningMethodEdDSA, jwt.MapClaims{ + "challenge": challenge, + "nonce": nonce, + "response": response, + "iat": time.Now().Unix(), + "nbf": time.Now().Add(-1 * time.Minute).Unix(), + "exp": time.Now().Add(24 * 7 * time.Hour).Unix(), + }) + tokenString, err := token.SignedString(s.priv) + if err != nil { + lg.Error("failed to sign JWT", "err", err) + clearCookie(w) + templ.Handler(base("Oh noes!", errorPage("failed to sign JWT")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) + return + } + + http.SetCookie(w, &http.Cookie{ + Name: cookieName, + Value: tokenString, + Expires: time.Now().Add(24 * 7 * time.Hour), + SameSite: http.SameSiteLaxMode, + Path: "/", + }) + + challengesValidated.Inc() + lg.Debug("challenge passed, redirecting to app") + http.Redirect(w, r, redir, http.StatusFound) +} + +func (s *Server) testError(w http.ResponseWriter, r *http.Request) { + err := r.FormValue("err") + templ.Handler(base("Oh noes!", errorPage(err)), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) +} + +func ohNoes(w http.ResponseWriter, r *http.Request, err error) { + slog.Error("super fatal error", "err", err) + templ.Handler(base("Oh noes!", errorPage("An internal server error happened")), templ.WithStatus(http.StatusInternalServerError)).ServeHTTP(w, r) +} + +func clearCookie(w http.ResponseWriter) { + http.SetCookie(w, &http.Cookie{ + Name: cookieName, + Value: "", + Expires: time.Now().Add(-1 * time.Hour), + MaxAge: -1, + SameSite: http.SameSiteLaxMode, + }) +} + +func randomJitter() bool { + return mrand.Intn(100) > 10 +} + +func serveMainJSWithBestEncoding(w http.ResponseWriter, r *http.Request) { + priorityList := []string{"zstd", "br", "gzip"} + enc2ext := map[string]string{ + "zstd": "zst", + "br": "br", + "gzip": "gz", + } + + for _, enc := range priorityList { + if strings.Contains(r.Header.Get("Accept-Encoding"), enc) { + w.Header().Set("Content-Type", "text/javascript") + w.Header().Set("Content-Encoding", enc) + http.ServeFileFS(w, r, static, "static/js/main.mjs."+enc2ext[enc]) + return + } + } + + w.Header().Set("Content-Type", "text/javascript") + http.ServeFileFS(w, r, static, "static/js/main.mjs") +} diff --git a/cmd/anubis/policy.go b/cmd/anubis/policy.go new file mode 100644 index 0000000..f636349 --- /dev/null +++ b/cmd/anubis/policy.go @@ -0,0 +1,146 @@ +package main + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "log/slog" + "net/http" + "regexp" + + "github.com/TecharoHQ/anubis/cmd/anubis/internal/config" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" +) + +var ( + policyApplications = promauto.NewCounterVec(prometheus.CounterOpts{ + Name: "anubis_policy_results", + Help: "The results of each policy rule", + }, []string{"rule", "action"}) +) + +type ParsedConfig struct { + orig config.Config + + Bots []Bot + DNSBL bool +} + +type Bot struct { + Name string + UserAgent *regexp.Regexp + Path *regexp.Regexp + Action config.Rule `json:"action"` +} + +func (b Bot) Hash() (string, error) { + var pathRex string + if b.Path != nil { + pathRex = b.Path.String() + } + var userAgentRex string + if b.UserAgent != nil { + userAgentRex = b.UserAgent.String() + } + + return sha256sum(fmt.Sprintf("%s::%s::%s", b.Name, pathRex, userAgentRex)) +} + +func parseConfig(fin io.Reader, fname string) (*ParsedConfig, error) { + var c config.Config + if err := json.NewDecoder(fin).Decode(&c); err != nil { + return nil, fmt.Errorf("can't parse policy config JSON %s: %w", fname, err) + } + + if err := c.Valid(); err != nil { + return nil, err + } + + var err error + + result := &ParsedConfig{ + orig: c, + } + + for _, b := range c.Bots { + if berr := b.Valid(); berr != nil { + err = errors.Join(err, berr) + continue + } + + var botParseErr error + parsedBot := Bot{ + Name: b.Name, + Action: b.Action, + } + + if b.UserAgentRegex != nil { + userAgent, err := regexp.Compile(*b.UserAgentRegex) + if err != nil { + botParseErr = errors.Join(botParseErr, fmt.Errorf("while compiling user agent regexp: %w", err)) + continue + } else { + parsedBot.UserAgent = userAgent + } + } + + if b.PathRegex != nil { + path, err := regexp.Compile(*b.PathRegex) + if err != nil { + botParseErr = errors.Join(botParseErr, fmt.Errorf("while compiling path regexp: %w", err)) + continue + } else { + parsedBot.Path = path + } + } + + result.Bots = append(result.Bots, parsedBot) + } + + if err != nil { + return nil, fmt.Errorf("errors validating policy config JSON %s: %w", fname, err) + } + + result.DNSBL = c.DNSBL + + return result, nil +} + +type CheckResult struct { + Name string + Rule config.Rule +} + +func (cr CheckResult) LogValue() slog.Value { + return slog.GroupValue( + slog.String("name", cr.Name), + slog.String("rule", string(cr.Rule))) +} + +func cr(name string, rule config.Rule) CheckResult { + return CheckResult{ + Name: name, + Rule: rule, + } +} + +// Check evaluates the list of rules, and returns the result +func (s *Server) check(r *http.Request) (CheckResult, *Bot) { + for _, b := range s.policy.Bots { + if b.UserAgent != nil { + if b.UserAgent.MatchString(r.UserAgent()) { + return cr("bot/"+b.Name, b.Action), &b + } + } + + if b.Path != nil { + if b.Path.MatchString(r.URL.Path) { + return cr("bot/"+b.Name, b.Action), &b + } + } + } + + return cr("default/allow", config.RuleAllow), nil +} diff --git a/cmd/anubis/policy_test.go b/cmd/anubis/policy_test.go new file mode 100644 index 0000000..9a5699e --- /dev/null +++ b/cmd/anubis/policy_test.go @@ -0,0 +1,65 @@ +package main + +import ( + "os" + "path/filepath" + "testing" +) + +func TestDefaultPolicyMustParse(t *testing.T) { + fin, err := static.Open("botPolicies.json") + if err != nil { + t.Fatal(err) + } + defer fin.Close() + + if _, err := parseConfig(fin, "botPolicies.json"); err != nil { + t.Fatalf("can't parse config: %v", err) + } +} + +func TestGoodConfigs(t *testing.T) { + finfos, err := os.ReadDir("internal/config/testdata/good") + if err != nil { + t.Fatal(err) + } + + for _, st := range finfos { + st := st + t.Run(st.Name(), func(t *testing.T) { + fin, err := os.Open(filepath.Join("internal", "config", "testdata", "good", st.Name())) + if err != nil { + t.Fatal(err) + } + defer fin.Close() + + if _, err := parseConfig(fin, fin.Name()); err != nil { + t.Fatal(err) + } + }) + } +} + +func TestBadConfigs(t *testing.T) { + finfos, err := os.ReadDir("internal/config/testdata/bad") + if err != nil { + t.Fatal(err) + } + + for _, st := range finfos { + st := st + t.Run(st.Name(), func(t *testing.T) { + fin, err := os.Open(filepath.Join("internal", "config", "testdata", "bad", st.Name())) + if err != nil { + t.Fatal(err) + } + defer fin.Close() + + if _, err := parseConfig(fin, fin.Name()); err == nil { + t.Fatal(err) + } else { + t.Log(err) + } + }) + } +} diff --git a/cmd/anubis/static/img/happy.webp b/cmd/anubis/static/img/happy.webp new file mode 100644 index 0000000..8a49631 Binary files /dev/null and b/cmd/anubis/static/img/happy.webp differ diff --git a/cmd/anubis/static/img/pensive.webp b/cmd/anubis/static/img/pensive.webp new file mode 100644 index 0000000..dc3dff1 Binary files /dev/null and b/cmd/anubis/static/img/pensive.webp differ diff --git a/cmd/anubis/static/img/sad.webp b/cmd/anubis/static/img/sad.webp new file mode 100644 index 0000000..95bebb6 Binary files /dev/null and b/cmd/anubis/static/img/sad.webp differ diff --git a/cmd/anubis/static/js/main.mjs b/cmd/anubis/static/js/main.mjs new file mode 100644 index 0000000..043f617 --- /dev/null +++ b/cmd/anubis/static/js/main.mjs @@ -0,0 +1,2 @@ +(()=>{function l(n,s=5){return new Promise((i,e)=>{let o=URL.createObjectURL(new Blob(["(",w(),")()"],{type:"application/javascript"})),t=new Worker(o);t.onmessage=r=>{t.terminate(),i(r.data)},t.onerror=r=>{t.terminate(),e()},t.postMessage({data:n,difficulty:s}),URL.revokeObjectURL(o)})}function w(){return function(){let n=s=>{let i=new TextEncoder().encode(s);return crypto.subtle.digest("SHA-256",i.buffer).then(e=>Array.from(new Uint8Array(e)).map(o=>o.toString(16).padStart(2,"0")).join(""))};addEventListener("message",async s=>{let i=s.data.data,e=s.data.difficulty,o,t=0;do o=await n(i+t++);while(o.substring(0,e)!==Array(e+1).join("0"));t-=1,postMessage({hash:o,data:i,difficulty:e,nonce:t})})}.toString()}var h=(n="",s={})=>{let i=new URL(n,window.location.href);return Object.entries(s).forEach(e=>{let[o,t]=e;i.searchParams.set(o,t)}),i.toString()},m=n=>`/.within.website/x/cmd/anubis/static/img/${n}.webp`;(async()=>{let n=document.getElementById("status"),s=document.getElementById("image"),i=document.getElementById("title"),e=document.getElementById("spinner");n.innerHTML="Calculating...";let{challenge:o,difficulty:t}=await fetch("/.within.website/x/cmd/anubis/api/make-challenge",{method:"POST"}).then(a=>{if(!a.ok)throw new Error("Failed to fetch config");return a.json()}).catch(a=>{throw i.innerHTML="Oh no!",n.innerHTML=`Failed to fetch config: ${a.message}`,s.src=m("sad"),e.innerHTML="",e.style.display="none",a});n.innerHTML=`Calculating...
Difficulty: ${t}`;let r=Date.now(),{hash:u,nonce:c}=await l(o,t),d=Date.now();i.innerHTML="Success!",n.innerHTML=`Done! Took ${d-r}ms, ${c} iterations`,s.src=m("happy"),e.innerHTML="",e.style.display="none",setTimeout(()=>{let a=window.location.href;window.location.href=h("/.within.website/x/cmd/anubis/api/pass-challenge",{response:u,nonce:c,redir:a,elapsedTime:d-r})},2e3)})();})(); +//# sourceMappingURL=main.mjs.map diff --git a/cmd/anubis/static/js/main.mjs.br b/cmd/anubis/static/js/main.mjs.br new file mode 100644 index 0000000..27625da Binary files /dev/null and b/cmd/anubis/static/js/main.mjs.br differ diff --git a/cmd/anubis/static/js/main.mjs.gz b/cmd/anubis/static/js/main.mjs.gz new file mode 100644 index 0000000..3715f0b Binary files /dev/null and b/cmd/anubis/static/js/main.mjs.gz differ diff --git a/cmd/anubis/static/js/main.mjs.map b/cmd/anubis/static/js/main.mjs.map new file mode 100644 index 0000000..d5b288f --- /dev/null +++ b/cmd/anubis/static/js/main.mjs.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../js/proof-of-work.mjs", "../../js/main.mjs"], + "sourcesContent": ["// https://dev.to/ratmd/simple-proof-of-work-in-javascript-3kgm\n\nexport function process(data, difficulty = 5) {\n return new Promise((resolve, reject) => {\n let webWorkerURL = URL.createObjectURL(new Blob([\n '(', processTask(), ')()'\n ], { type: 'application/javascript' }));\n\n let worker = new Worker(webWorkerURL);\n\n worker.onmessage = (event) => {\n worker.terminate();\n resolve(event.data);\n };\n\n worker.onerror = (event) => {\n worker.terminate();\n reject();\n };\n\n worker.postMessage({\n data,\n difficulty\n });\n\n URL.revokeObjectURL(webWorkerURL);\n });\n}\n\nfunction processTask() {\n return function () {\n const sha256 = (text) => {\n const encoded = new TextEncoder().encode(text);\n return crypto.subtle.digest(\"SHA-256\", encoded.buffer).then((result) =>\n Array.from(new Uint8Array(result))\n .map((c) => c.toString(16).padStart(2, \"0\"))\n .join(\"\"),\n );\n };\n\n addEventListener('message', async (event) => {\n let data = event.data.data;\n let difficulty = event.data.difficulty;\n\n let hash;\n let nonce = 0;\n do {\n hash = await sha256(data + nonce++);\n } while (hash.substring(0, difficulty) !== Array(difficulty + 1).join('0'));\n\n nonce -= 1; // last nonce was post-incremented\n\n postMessage({\n hash,\n data,\n difficulty,\n nonce,\n });\n });\n }.toString();\n}\n\n", "import { process } from './proof-of-work.mjs';\nimport { testVideo } from './video.mjs';\n\n// from Xeact\nconst u = (url = \"\", params = {}) => {\n let result = new URL(url, window.location.href);\n Object.entries(params).forEach((kv) => {\n let [k, v] = kv;\n result.searchParams.set(k, v);\n });\n return result.toString();\n};\n\nconst imageURL = (mood) => {\n return `/.within.website/x/cmd/anubis/static/img/${mood}.webp`;\n};\n\n(async () => {\n const status = document.getElementById('status');\n const image = document.getElementById('image');\n const title = document.getElementById('title');\n const spinner = document.getElementById('spinner');\n // const testarea = document.getElementById('testarea');\n\n // const videoWorks = await testVideo(testarea);\n // console.log(`videoWorks: ${videoWorks}`);\n\n // if (!videoWorks) {\n // title.innerHTML = \"Oh no!\";\n // status.innerHTML = \"Checks failed. Please check your browser's settings and try again.\";\n // image.src = imageURL(\"sad\");\n // spinner.innerHTML = \"\";\n // spinner.style.display = \"none\";\n // return;\n // }\n\n status.innerHTML = 'Calculating...';\n\n const { challenge, difficulty } = await fetch(\"/.within.website/x/cmd/anubis/api/make-challenge\", { method: \"POST\" })\n .then(r => {\n if (!r.ok) {\n throw new Error(\"Failed to fetch config\");\n }\n return r.json();\n })\n .catch(err => {\n title.innerHTML = \"Oh no!\";\n status.innerHTML = `Failed to fetch config: ${err.message}`;\n image.src = imageURL(\"sad\");\n spinner.innerHTML = \"\";\n spinner.style.display = \"none\";\n throw err;\n });\n\n status.innerHTML = `Calculating...
Difficulty: ${difficulty}`;\n\n const t0 = Date.now();\n const { hash, nonce } = await process(challenge, difficulty);\n const t1 = Date.now();\n\n title.innerHTML = \"Success!\";\n status.innerHTML = `Done! Took ${t1 - t0}ms, ${nonce} iterations`;\n image.src = imageURL(\"happy\");\n spinner.innerHTML = \"\";\n spinner.style.display = \"none\";\n\n setTimeout(() => {\n const redir = window.location.href;\n window.location.href = u(\"/.within.website/x/cmd/anubis/api/pass-challenge\", { response: hash, nonce, redir, elapsedTime: t1 - t0 });\n }, 2000);\n})();"], + "mappings": "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", + "names": ["process", "data", "difficulty", "resolve", "reject", "webWorkerURL", "processTask", "worker", "event", "sha256", "text", "encoded", "result", "c", "hash", "nonce", "u", "url", "params", "result", "kv", "k", "v", "imageURL", "mood", "status", "image", "title", "spinner", "challenge", "difficulty", "r", "err", "t0", "hash", "nonce", "process", "t1", "redir"] +} diff --git a/cmd/anubis/static/js/main.mjs.zst b/cmd/anubis/static/js/main.mjs.zst new file mode 100644 index 0000000..3f27a9e Binary files /dev/null and b/cmd/anubis/static/js/main.mjs.zst differ diff --git a/cmd/anubis/static/robots.txt b/cmd/anubis/static/robots.txt new file mode 100644 index 0000000..4d0861c --- /dev/null +++ b/cmd/anubis/static/robots.txt @@ -0,0 +1,47 @@ +User-agent: AI2Bot +User-agent: Ai2Bot-Dolma +User-agent: Amazonbot +User-agent: anthropic-ai +User-agent: Applebot +User-agent: Applebot-Extended +User-agent: Bytespider +User-agent: CCBot +User-agent: ChatGPT-User +User-agent: Claude-Web +User-agent: ClaudeBot +User-agent: cohere-ai +User-agent: cohere-training-data-crawler +User-agent: Diffbot +User-agent: DuckAssistBot +User-agent: FacebookBot +User-agent: FriendlyCrawler +User-agent: Google-Extended +User-agent: GoogleOther +User-agent: GoogleOther-Image +User-agent: GoogleOther-Video +User-agent: GPTBot +User-agent: iaskspider/2.0 +User-agent: ICC-Crawler +User-agent: ImagesiftBot +User-agent: img2dataset +User-agent: ISSCyberRiskCrawler +User-agent: Kangaroo Bot +User-agent: Meta-ExternalAgent +User-agent: Meta-ExternalFetcher +User-agent: OAI-SearchBot +User-agent: omgili +User-agent: omgilibot +User-agent: PanguBot +User-agent: PerplexityBot +User-agent: PetalBot +User-agent: Scrapy +User-agent: SemrushBot +User-agent: Sidetrade indexer bot +User-agent: Timpibot +User-agent: VelenPublicWebCrawler +User-agent: Webzio-Extended +User-agent: YouBot +Disallow: / + +User-agent: * +Disallow: / \ No newline at end of file diff --git a/cmd/anubis/static/testdata/black.mp4 b/cmd/anubis/static/testdata/black.mp4 new file mode 100644 index 0000000..83a9989 Binary files /dev/null and b/cmd/anubis/static/testdata/black.mp4 differ diff --git a/doc.go b/doc.go new file mode 100644 index 0000000..2593bad --- /dev/null +++ b/doc.go @@ -0,0 +1,8 @@ +// Package Anubis contains the version number of Anubis. +package anubis + +// Version is the current version of Anubis. +// +// This variable is set at build time using the -X linker flag. If not set, +// it defaults to "devel". +var Version = "devel" diff --git a/docs/policies.md b/docs/policies.md new file mode 100644 index 0000000..1e1b911 --- /dev/null +++ b/docs/policies.md @@ -0,0 +1,77 @@ +# Policies + +Out of the box, Anubis is pretty heavy-handed. It will aggressively challenge everything that might be a browser (usually indicated by having `Mozilla` in its user agent). However, some bots are smart enough to get past the challenge. Some things that look like bots may actually be fine (IE: RSS readers). Some resources need to be visible no matter what. Some resources and remotes are fine to begin with. + +Bot policies let you customize the rules that Anubis uses to allow, deny, or challenge incoming requests. Currently you can set policies by the following matches: + +- Request path +- User agent string + +Here's an example rule that denies [Amazonbot](https://developer.amazon.com/en/amazonbot): + +```json +{ + "name": "amazonbot", + "user_agent_regex": "Amazonbot", + "action": "DENY" +} +``` + +When this rule is evaluated, Anubis will check the `User-Agent` string of the request. If it contains `Amazonbot`, Anubis will send an error page to the user saying that access is denied, but in such a way that makes scrapers think they have correctly loaded the webpage. + +Right now the only kinds of policies you can write are bot policies. Other forms of policies will be added in the future. + +Here is a minimal policy file that will protect against most scraper bots: + +```json +{ + "bots": [ + { + "name": "well-known", + "path_regex": "^/.well-known/.*$", + "action": "ALLOW" + }, + { + "name": "favicon", + "path_regex": "^/favicon.ico$", + "action": "ALLOW" + }, + { + "name": "robots-txt", + "path_regex": "^/robots.txt$", + "action": "ALLOW" + }, + { + "name": "generic-browser", + "user_agent_regex": "Mozilla", + "action": "CHALLENGE" + } + ] +} +``` + +This allows requests to [`/.well-known`](https://en.wikipedia.org/wiki/Well-known_URI), `/favicon.ico`, `/robots.txt`, and challenges any request that has the word `Mozilla` in its User-Agent string. The [default policy file](../botPolicies.json) is a bit more cohesive, but this should be more than enough for most users. + +If no rules match the request, it is allowed through. + +## Writing your own rules + +There are three actions that can be returned from a rule: + +| Action | Effects | +| :---------- | :-------------------------------------------------------------------------------- | +| `ALLOW` | Bypass all further checks and send the request to the backend. | +| `DENY` | Deny the request and send back an error message that scrapers think is a success. | +| `CHALLENGE` | Show a challenge page and/or validate that clients have passed a challenge. | + +Name your rules in lower case using kebab-case. Rule names will be exposed in Prometheus metrics. + +In case your service needs it for risk calculation reasons, Anubis exposes information about the rules that any requests match using a few headers: + +| Header | Explanation | Example | +| :---------------- | :--------------------------------------------------- | :--------------- | +| `X-Anubis-Rule` | The name of the rule that was matched | `bot/lightpanda` | +| `X-Anubis-Action` | The action that Anubis took in response to that rule | `CHALLENGE` | +| `X-Anubis-Status` | The status and how strict Anubis was in its checks | `PASS-FULL` | + +Policy rules are matched using [Go's standard library regular expressions package](https://pkg.go.dev/regexp). You can mess around with the syntax at [regex101.com](https://regex101.com), make sure to select the Golang option. diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4275c36 --- /dev/null +++ b/go.mod @@ -0,0 +1,47 @@ +module github.com/TecharoHQ/anubis + +go 1.24.1 + +require ( + github.com/a-h/templ v0.3.833 + github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456 + github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/prometheus/client_golang v1.21.1 +) + +require ( + github.com/PuerkitoBio/goquery v1.10.1 // indirect + github.com/a-h/parse v0.0.0-20250122154542-74294addb73e // indirect + github.com/andybalholm/brotli v1.1.0 // indirect + github.com/andybalholm/cascadia v1.3.3 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cli/browser v1.3.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 // indirect + github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect + github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 // indirect + github.com/fatih/color v1.16.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/klauspost/compress v1.17.11 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/natefinch/atomic v1.0.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.62.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + golang.org/x/mod v0.24.0 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/tools v0.31.0 // indirect + google.golang.org/protobuf v1.36.4 // indirect +) + +tool ( + github.com/a-h/templ/cmd/templ + golang.org/x/tools/cmd/stringer +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..61d1cbc --- /dev/null +++ b/go.sum @@ -0,0 +1,141 @@ +github.com/PuerkitoBio/goquery v1.10.1 h1:Y8JGYUkXWTGRB6Ars3+j3kN0xg1YqqlwvdTV8WTFQcU= +github.com/PuerkitoBio/goquery v1.10.1/go.mod h1:IYiHrOMps66ag56LEH7QYDDupKXyo5A8qrjIx3ZtujY= +github.com/a-h/parse v0.0.0-20250122154542-74294addb73e h1:HjVbSQHy+dnlS6C3XajZ69NYAb5jbGNfHanvm1+iYlo= +github.com/a-h/parse v0.0.0-20250122154542-74294addb73e/go.mod h1:3mnrkvGpurZ4ZrTDbYU84xhwXW2TjTKShSwjRi2ihfQ= +github.com/a-h/templ v0.3.833 h1:L/KOk/0VvVTBegtE0fp2RJQiBm7/52Zxv5fqlEHiQUU= +github.com/a-h/templ v0.3.833/go.mod h1:cAu4AiZhtJfBjMY0HASlyzvkrtjnHWPeEsyGK2YYmfk= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= +github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= +github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cli/browser v1.3.0 h1:LejqCrpWr+1pRqmEPDGnTZOjsMe7sehifLynZJuqJpo= +github.com/cli/browser v1.3.0/go.mod h1:HH8s+fOAxjhQoBUAsKuPCbqUuxZDhQ2/aD+SzsEfBTk= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456 h1:CkmB2l68uhvRlwOTPrwnuitSxi/S3Cg4L5QYOcL9MBc= +github.com/facebookgo/flagenv v0.0.0-20160425205200-fcd59fca7456/go.mod h1:zFhibDvPDWmtk4dAQ05sRobtyoffEHygEt3wSNuAzz8= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870 h1:E2s37DuLxFhQDg5gKsWoLBOB0n+ZW8s599zru8FJ2/Y= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A= +github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= +github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= +google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/headers.go b/internal/headers.go new file mode 100644 index 0000000..47aa2cc --- /dev/null +++ b/internal/headers.go @@ -0,0 +1,20 @@ +package internal + +import ( + "net/http" + + "github.com/TecharoHQ/anubis" +) + +// UnchangingCache sets the Cache-Control header to cache a response for 1 year if +// and only if the application is compiled in "release" mode by Docker. +func UnchangingCache(h http.Handler) http.Handler { + if anubis.Version == "devel" { + return h + } + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Cache-Control", "public, max-age=31536000") + h.ServeHTTP(w, r) + }) +} diff --git a/internal/slog.go b/internal/slog.go new file mode 100644 index 0000000..115e1d2 --- /dev/null +++ b/internal/slog.go @@ -0,0 +1,24 @@ +package internal + +import ( + "fmt" + "log/slog" + "os" +) + +func InitSlog(level string) { + var programLevel slog.Level + if err := (&programLevel).UnmarshalText([]byte(level)); err != nil { + fmt.Fprintf(os.Stderr, "invalid log level %s: %v, using info\n", level, err) + programLevel = slog.LevelInfo + } + + leveler := &slog.LevelVar{} + leveler.Set(programLevel) + + h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{ + AddSource: true, + Level: leveler, + }) + slog.SetDefault(slog.New(h)) +} diff --git a/run/anubis.env.default b/run/anubis.env.default new file mode 100644 index 0000000..b72eddd --- /dev/null +++ b/run/anubis.env.default @@ -0,0 +1,5 @@ +BIND=:8923 +DIFFICULTY=3 +METRICS_BIND=:9090 +SERVE_ROBOTS_TXT=0 +TARGET=http://localhost:3000 \ No newline at end of file diff --git a/run/anubis@.service b/run/anubis@.service new file mode 100644 index 0000000..102775f --- /dev/null +++ b/run/anubis@.service @@ -0,0 +1,12 @@ +[Unit] +Description="Anubis HTTP defense proxy (instance %i)" + +[Service] +ExecStart=/usr/bin/anubis +Restart=always +RestartSec=30s +EnvironmentFile=/etc/anubis/anubis-%i.env +LimitNOFILE=infinity + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/var/.gitignore b/var/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/var/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/xess/.gitignore b/xess/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/xess/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/xess/package-lock.json b/xess/package-lock.json new file mode 100644 index 0000000..3941c2f --- /dev/null +++ b/xess/package-lock.json @@ -0,0 +1,2411 @@ +{ + "name": "@xeserv/xess", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@xeserv/xess", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "cssnano": "^7.0.6", + "cssnano-preset-advanced": "^7.0.6", + "postcss-cli": "^11.0.0", + "postcss-import": "^16.1.0", + "postcss-import-url": "^7.2.0", + "postcss-url": "^10.1.3" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001695", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", + "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz", + "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.6", + "lilconfig": "^3.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-7.0.6.tgz", + "integrity": "sha512-wk/YPSv965EjpPNEGteiXZ32BKilJcYNnX4EGUd/AriVGgHL/y59uaWVJ/ZDx69jCNUrmwiBzioCV+SG5wk3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.20", + "browserslist": "^4.23.3", + "cssnano-preset-default": "^7.0.6", + "postcss-discard-unused": "^7.0.3", + "postcss-merge-idents": "^7.0.0", + "postcss-reduce-idents": "^7.0.0", + "postcss-zindex": "^7.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz", + "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.2", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.4", + "postcss-discard-comments": "^7.0.3", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.4", + "postcss-merge-rules": "^7.0.4", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.4", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.0.tgz", + "integrity": "sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.83", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.83.tgz", + "integrity": "sha512-LcUDPqSt+V0QmI47XLzZrz5OqILSMGsPFkDYus22rIbgorSvBYEFqq854ltTmUdHkY92FSdAAvsh4jWEULMdfQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.trim": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz", + "integrity": "sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.0.tgz", + "integrity": "sha512-uQ/LDGsf3mgsSUEXmAt3VsCSHR3aKqtEIkmB+4PhzYwRYOW5MZs/GhCCFpsOtJJkP6EC6uGipbrnaTjqaJZcJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-cli": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz", + "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.3.0", + "dependency-graph": "^0.11.0", + "fs-extra": "^11.0.0", + "get-stdin": "^9.0.0", + "globby": "^14.0.0", + "picocolors": "^1.0.0", + "postcss-load-config": "^5.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^5.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "postcss": "index.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz", + "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz", + "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz", + "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-unused": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-7.0.3.tgz", + "integrity": "sha512-OVxIMVMjkJ1anDTbHFSYUZnmoDWv3vF5JPZvr9hi6HjMNH/RjfR39IMeLThbIjrSb9ZLcwzqziU+XxFQkgF4Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-discard-unused/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-import": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz", + "integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import-url": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/postcss-import-url/-/postcss-import-url-7.2.0.tgz", + "integrity": "sha512-El61K/5+Rv753G9mBiHyQlOIN2mBfN0YHPMXLlgIo/m1+tPDLM32wd97WoUjc8FHUnC6EyyfVA8RDuKoyuVl0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-https": "^1.0.0", + "is-url": "^1.2.4", + "lodash.assign": "^4.2.0", + "lodash.trim": "^4.5.1", + "resolve-relative-url": "^1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz", + "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1", + "yaml": "^2.4.2" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + } + } + }, + "node_modules/postcss-merge-idents": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-7.0.0.tgz", + "integrity": "sha512-Kr+DniMg0IsW7OGoaMB1Foreb3fIE2XcExCRynogQLngkpNVKTX5GlaxyEZDBB8bISeoztFHFK/GcQtFiPTnpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz", + "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.4" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz", + "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz", + "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz", + "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz", + "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz", + "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz", + "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz", + "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz", + "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz", + "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz", + "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz", + "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz", + "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz", + "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-7.0.0.tgz", + "integrity": "sha512-ghFHqxigYW/bbfr+bXSDB5Tv3qPaYZZxiQh+Gne0NYRlTOzFft1V/DUvGFVJbFkackHleSjFdVXdlNB+5f3mKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz", + "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-reporter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", + "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "thenby": "^1.3.4" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz", + "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz", + "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-zindex": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-7.0.0.tgz", + "integrity": "sha512-Agp+5C0qBZxT9S4k9iO/C9oqce3gvPJ/7av4JcAsDl17vsboSN60ncTokIYDtDMlVXvwuhFED3edoy1YG5O1+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-relative-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-relative-url/-/resolve-relative-url-1.0.0.tgz", + "integrity": "sha512-zpcelQBAmrwckiyRmym9os1goECU3EzuTU/UrYkGzXV0i14n8FkyGUvwkOYA5klqVLq1Hz/EiFZMS7bZQdd+EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "url": "0.10.x" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz", + "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/thenby": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", + "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/xess/package.json b/xess/package.json new file mode 100644 index 0000000..2844ca5 --- /dev/null +++ b/xess/package.json @@ -0,0 +1,20 @@ +{ + "name": "@xeserv/xess", + "version": "1.0.0", + "description": "Xe's CSS", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "postcss xess.css -o xess.min.css" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "cssnano": "^7.0.6", + "cssnano-preset-advanced": "^7.0.6", + "postcss-cli": "^11.0.0", + "postcss-import": "^16.1.0", + "postcss-import-url": "^7.2.0", + "postcss-url": "^10.1.3" + } +} \ No newline at end of file diff --git a/xess/postcss.config.js b/xess/postcss.config.js new file mode 100644 index 0000000..7084661 --- /dev/null +++ b/xess/postcss.config.js @@ -0,0 +1,8 @@ +module.exports = { + plugins: [ + require("cssnano")({ + preset: "advanced", + }), + require("postcss-url")({ url: "inline" }), + ], +}; \ No newline at end of file diff --git a/xess/static/geist.woff2 b/xess/static/geist.woff2 new file mode 100644 index 0000000..6fd61c4 Binary files /dev/null and b/xess/static/geist.woff2 differ diff --git a/xess/static/iosevka-curly.woff2 b/xess/static/iosevka-curly.woff2 new file mode 100644 index 0000000..df9df40 Binary files /dev/null and b/xess/static/iosevka-curly.woff2 differ diff --git a/xess/static/podkova.css b/xess/static/podkova.css new file mode 100644 index 0000000..efa1fd7 --- /dev/null +++ b/xess/static/podkova.css @@ -0,0 +1,7 @@ +@font-face { + font-family: "Podkova"; + font-style: normal; + font-weight: 400 800; + font-display: swap; + src: url("podkova.woff2") format("woff2"); +} diff --git a/xess/static/podkova.woff2 b/xess/static/podkova.woff2 new file mode 100644 index 0000000..508f97d Binary files /dev/null and b/xess/static/podkova.woff2 differ diff --git a/xess/xess.css b/xess/xess.css new file mode 100644 index 0000000..631c8c1 --- /dev/null +++ b/xess/xess.css @@ -0,0 +1,111 @@ +@font-face { + font-family: "Geist"; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("./static/geist.woff2") format("woff2"); +} + +@font-face { + font-family: "Podkova"; + font-style: normal; + font-weight: 400 800; + font-display: swap; + src: url("./static/podkova.woff2") format("woff2"); +} + +@font-face { + font-family: "Iosevka Curly"; + font-style: monospace; + font-display: swap; + src: url("./static/iosevka-curly.woff2") format("woff2"); +} + +main { + font-family: Geist, sans-serif; + max-width: 50rem; + padding: 2rem; + margin: auto; +} + +@media only screen and (max-device-width: 736px) { + main { + padding: 0; + } +} + +::selection { + background: #d3869b; +} + +body { + background: #1d2021; + color: #f9f5d7; +} + +pre { + background-color: #3c3836; + padding: 1em; + border: 0; + font-family: Iosevka Curly Iaso, monospace; +} + +a, +a:active, +a:visited { + color: #b16286; + background-color: #282828; +} + +h1, +h2, +h3, +h4, +h5 { + margin-bottom: 0.1rem; + font-family: Podkova, serif; +} + +blockquote { + border-left: 1px solid #bdae93; + margin: 0.5em 10px; + padding: 0.5em 10px; +} + +footer { + text-align: center; +} + +@media (prefers-color-scheme: light) { + body { + background: #f9f5d7; + color: #1d2021; + } + + pre { + background-color: #ebdbb2; + padding: 1em; + border: 0; + } + + a, + a:active, + a:visited { + color: #b16286; + background-color: #fbf1c7; + } + + h1, + h2, + h3, + h4, + h5 { + margin-bottom: 0.1rem; + } + + blockquote { + border-left: 1px solid #655c54; + margin: 0.5em 10px; + padding: 0.5em 10px; + } +} diff --git a/xess/xess.go b/xess/xess.go new file mode 100644 index 0000000..301767b --- /dev/null +++ b/xess/xess.go @@ -0,0 +1,38 @@ +// Package xess vendors a copy of Xess and makes it available at /.xess/xess.css +// +// This is intended to be used as a vendored package in other projects. +package xess + +import ( + "embed" + "net/http" + "path/filepath" + + "github.com/TecharoHQ/anubis" + "github.com/TecharoHQ/anubis/internal" +) + +//go:generate go run github.com/a-h/templ/cmd/templ@latest generate +//go:generate npm ci +//go:generate npm run build + +var ( + //go:embed xess.min.css xess.css static + Static embed.FS + + URL = "/.within.website/x/xess/xess.css" +) + +func init() { + Mount(http.DefaultServeMux) + + if anubis.Version != "devel" { + URL = filepath.Join(filepath.Dir(URL), "xess.min.css") + } + + URL = URL + "?cachebuster=" + anubis.Version +} + +func Mount(mux *http.ServeMux) { + mux.Handle("/.within.website/x/xess/", internal.UnchangingCache(http.StripPrefix("/.within.website/x/xess/", http.FileServerFS(Static)))) +} diff --git a/xess/xess.min.css b/xess/xess.min.css new file mode 100644 index 0000000..deee50c --- /dev/null +++ b/xess/xess.min.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Geist;font-style:normal;font-weight:100 900;src:url("data:font/woff2;base64,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") format("woff2")}@font-face{font-display:swap;font-family:Podkova;font-style:normal;font-weight:400 800;src:url("data:font/woff2;base64,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") format("woff2")}@font-face{font-display:swap;font-family:Iosevka Curly;font-style:monospace;src:url("data:font/woff2;base64,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") format("woff2")}main{font-family:Geist,sans-serif;margin:auto;max-width:50rem;padding:2rem}@media only screen and (max-device-width:736px){main{padding:0}}::selection{background:#d3869b}body{background:#1d2021;color:#f9f5d7}pre{background-color:#3c3836;border:0;font-family:Iosevka Curly Iaso,monospace;padding:1em}a,a:active,a:visited{background-color:#282828;color:#b16286}h1,h2,h3,h4,h5{font-family:Podkova,serif;margin-bottom:.1rem}blockquote{border-left:1px solid #bdae93;margin:.5em 10px;padding:.5em 10px}footer{text-align:center}@media (prefers-color-scheme:light){body{background:#f9f5d7;color:#1d2021}pre{background-color:#ebdbb2;border:0;padding:1em}a,a:active,a:visited{background-color:#fbf1c7;color:#b16286}h1,h2,h3,h4,h5{margin-bottom:.1rem}blockquote{border-left:1px solid #655c54;margin:.5em 10px;padding:.5em 10px}} \ No newline at end of file diff --git a/xess/xess.templ b/xess/xess.templ new file mode 100644 index 0000000..4c010b7 --- /dev/null +++ b/xess/xess.templ @@ -0,0 +1,41 @@ +package xess + +templ Base(title string, headArea, navBar, bodyArea, footer templ.Component) { + + + + { title } + + + if headArea != nil { + @headArea + } + + +
+ if navBar != nil { + + } +

{ title }

+ @bodyArea + if footer != nil { +
+ @footer +
+ } +
+ + +} + +templ Simple(title string, body templ.Component) { + @Base( + title, + nil, + nil, + body, + nil, + ) +} diff --git a/xess/xess_templ.go b/xess/xess_templ.go new file mode 100644 index 0000000..a01a382 --- /dev/null +++ b/xess/xess_templ.go @@ -0,0 +1,164 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.833 +package xess + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +func Base(title string, headArea, navBar, bodyArea, footer templ.Component) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var2 string + templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `xess.templ`, Line: 7, Col: 17} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if headArea != nil { + templ_7745c5c3_Err = headArea.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if navBar != nil { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var4 string + templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(title) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `xess.templ`, Line: 21, Col: 15} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = bodyArea.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + if footer != nil { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func Simple(title string, body templ.Component) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var5 := templ.GetChildren(ctx) + if templ_7745c5c3_Var5 == nil { + templ_7745c5c3_Var5 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = Base( + title, + nil, + nil, + body, + nil, + ).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/yeetfile.js b/yeetfile.js new file mode 100644 index 0000000..730e7d1 --- /dev/null +++ b/yeetfile.js @@ -0,0 +1,22 @@ +go.install(); + +["amd64", "arm64"].forEach(goarch => rpm.build({ + name: "anubis", + description: "Anubis weighs the souls of incoming HTTP requests and uses a sha256 proof-of-work challenge in order to protect upstream resources from scraper bots.", + homepage: "https://xeiaso.net/blog/2025/anubis", + license: "MIT", + goarch, + + build: (out) => { + // install Anubis binary + go.build("-o", `${out}/usr/bin/anubis`); + + // install systemd unit + yeet.run("mkdir", "-p", `${out}/usr/lib/systemd/system`); + yeet.run("cp", "run/anubis@.service", `${out}/usr/lib/systemd/system/anubis@.service`); + + // install default config + yeet.run("mkdir", "-p", `${out}/etc/anubis`); + yeet.run("cp", "run/anubis.env.default", `${out}/etc/anubis/anubis-default.env`); + }, +})); \ No newline at end of file