system-tracker 0.0.0-stage → 3.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +1151 -2
  2. package/SKILL.md +376 -0
  3. package/dist/auto/capture.d.ts +9 -0
  4. package/dist/auto/capture.js +1 -0
  5. package/dist/auto/classify.d.ts +16 -0
  6. package/dist/auto/classify.js +1 -0
  7. package/dist/auto/http.d.ts +3 -0
  8. package/dist/auto/http.js +1 -0
  9. package/dist/auto/naming.d.ts +18 -0
  10. package/dist/auto/naming.js +1 -0
  11. package/dist/auto/outbound.d.ts +1 -0
  12. package/dist/auto/outbound.js +1 -0
  13. package/dist/auto/patch.d.ts +3 -0
  14. package/dist/auto/patch.js +1 -0
  15. package/dist/auto/record.d.ts +4 -0
  16. package/dist/auto/record.js +1 -0
  17. package/dist/auto/samples.d.ts +28 -0
  18. package/dist/auto/samples.js +1 -0
  19. package/dist/auto/sites.d.ts +7 -0
  20. package/dist/auto/sites.js +1 -0
  21. package/dist/auto/views.d.ts +3 -0
  22. package/dist/auto/views.js +1 -0
  23. package/dist/auto/ws.d.ts +1 -0
  24. package/dist/auto/ws.js +1 -0
  25. package/dist/buckets.d.ts +4 -0
  26. package/dist/buckets.js +1 -0
  27. package/dist/dashboard/announce.d.ts +5 -0
  28. package/dist/dashboard/announce.js +1 -0
  29. package/dist/dashboard/auth.d.ts +7 -0
  30. package/dist/dashboard/auth.js +1 -0
  31. package/dist/dashboard/boards.d.ts +22 -0
  32. package/dist/dashboard/boards.js +1 -0
  33. package/dist/dashboard/config.d.ts +49 -0
  34. package/dist/dashboard/config.js +1 -0
  35. package/dist/dashboard/data.d.ts +135 -0
  36. package/dist/dashboard/data.js +1 -0
  37. package/dist/dashboard/index.d.ts +2 -0
  38. package/dist/dashboard/index.js +1 -0
  39. package/dist/dashboard/insights.d.ts +98 -0
  40. package/dist/dashboard/insights.js +1 -0
  41. package/dist/dashboard/page-html.js +2 -0
  42. package/dist/dashboard/page.d.ts +1 -0
  43. package/dist/dashboard/page.js +1 -0
  44. package/dist/dashboard/periods.d.ts +36 -0
  45. package/dist/dashboard/periods.js +1 -0
  46. package/dist/dashboard/query.d.ts +45 -0
  47. package/dist/dashboard/query.js +1 -0
  48. package/dist/dashboard/report.d.ts +181 -0
  49. package/dist/dashboard/report.js +1 -0
  50. package/dist/dashboard/reset.d.ts +5 -0
  51. package/dist/dashboard/reset.js +1 -0
  52. package/dist/dashboard/storage.d.ts +37 -0
  53. package/dist/dashboard/storage.js +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.js +1 -0
  56. package/dist/init.d.ts +5 -0
  57. package/dist/init.js +1 -0
  58. package/dist/logger.d.ts +2 -0
  59. package/dist/logger.js +1 -0
  60. package/dist/lua.d.ts +3 -0
  61. package/dist/lua.js +1 -0
  62. package/dist/redis.d.ts +11 -0
  63. package/dist/redis.js +1 -0
  64. package/dist/search.d.ts +1 -0
  65. package/dist/search.js +1 -0
  66. package/dist/state.d.ts +24 -0
  67. package/dist/state.js +1 -0
  68. package/dist/types.d.ts +107 -0
  69. package/dist/types.js +1 -0
  70. package/package.json +53 -4
package/SKILL.md ADDED
@@ -0,0 +1,376 @@
1
+ ---
2
+ name: system-tracker
3
+ description: Use this skill when integrating the `system-tracker` npm package into a codebase, a single project or a workspace with several. It inspects the projects, asks the user step by step in plain words what to track (website pages, API, GraphQL, JSON-RPC, WebSockets, outside calls and more) with a recommended answer for each, then sets up `statis.init(...)`, the page-view script and the dashboard.
4
+ ---
5
+
6
+ # system-tracker
7
+
8
+ Use this skill with the package docs at `https://www.npmjs.com/package/system-tracker`.
9
+
10
+ You are helping integrate the npm package `system-tracker` into a codebase.
11
+
12
+ ## What `system-tracker` is for
13
+
14
+ - It stores Redis-based request counters per second, minute, hour, day, month and year.
15
+ - One `statis.init(...)` call counts every request the app handles automatically: API calls, page views, GraphQL, JSON-RPC, WebSockets, Socket.IO events, SSE and gRPC. Static files and outgoing calls can be turned on.
16
+ - There is no manual tracking API. Work that never arrives as a request (cron jobs, queue workers, scripts, business events) is not counted. If the user needs that, tell them system-tracker only counts incoming requests and, with `OUT`, outgoing calls.
17
+
18
+ ## Package exports
19
+
20
+ - `statis` (only `statis.init(...)`)
21
+ - `searchKeys`
22
+ - `statRedis`
23
+
24
+ ## Important API facts
25
+
26
+ - Call `statis.init(...)` once, at the top of the entry file, before the server starts listening.
27
+ - Minimal call:
28
+
29
+ ```ts
30
+ import { statis } from "system-tracker";
31
+
32
+ statis.init({
33
+ redis: "redis://127.0.0.1:6379",
34
+ prefix: "qa-server",
35
+ });
36
+ ```
37
+
38
+ - `redis` and `prefix` are passed to `init` directly; the package reads no environment variables.
39
+ - `redis` accepts one of:
40
+ - a `redis://` or `rediss://` (TLS) URL string, such as `"redis://default:secret@host:6379"`
41
+ - `{ host, port, username?, password? }` (standalone)
42
+ - `{ nodes: [{ host, port }, ...], username?, password? }` (cluster)
43
+ - `{ client: existingIoredisClient, type: "standalone" | "cluster" }` (reuse an existing client)
44
+ - All options and defaults:
45
+
46
+ | Option | Default | What it does |
47
+ | --- | --- | --- |
48
+ | `redis` | required | Redis connection |
49
+ | `prefix` | required | First part of every key; not empty, no `:` |
50
+ | `timeConfig` | all buckets on; 1h / 1d / 1d / 30d / 180d / 10y | Buckets to keep and their `expiry_in_sec`, e.g. `{ sec: { enable: false }, day: { expiry_in_sec: 90 * 24 * 60 * 60 } }` |
51
+ | `ignore.paths` | `[]` | Paths to skip, e.g. `["/health", "/metrics"]`; `"/admin/*"` matches a subtree |
52
+ | `ignore.methods` | `["OPTIONS", "HEAD"]` | Methods to skip |
53
+ | `ignore.bots` | `false` | Skip crawlers by user agent |
54
+ | `track` | all on except `STATIC` and `OUT` | Turn types on or off: `API`, `WEB`, `GRAPHQL`, `RPC`, `WSS`, `SSE`, `GRPC`, `OTHER`, `STATIC`, `OUT` |
55
+ | `global.total` | `true` | `{prefix}:global` keys |
56
+ | `global.perType` | `true` | `{prefix}:{TYPE}:global` keys |
57
+ | `failures` | `false` | Extra `:5xx` key for responses with status 500 or higher |
58
+ | `types` | `[]` | Custom types by path, e.g. `{ path: "/webhooks/*", type: "HOOK" }` |
59
+ | `operations` | `[]` | Read an operation name from the body, e.g. `{ path: "/action", type: "ACT", read: (body) => body.action }` |
60
+ | `limits.maxNamesPerType` | `200` | Names beyond this are counted as `<other>` |
61
+ | `limits.collapseAfter` | `50` | A URL part with more distinct values becomes `<slug>` |
62
+ | `name` | — | `(req) => ({ type, action, name })` to name any request yourself |
63
+ | `enabled` | `true` | `false` turns tracking off (e.g. in tests) |
64
+ | `ownDomains` | `[]` | Domains of the app's own backend, e.g. `["example.com"]`. Outgoing calls to them (and to local/private hosts, and to the domain the app is reached on) show as "your backend" instead of "third-party" in the dashboard |
65
+ | `dashboard` | off | `{ enable: true, url?: "/system-tracker", username?, password? }` serves a built-in dashboard from the app's own server; the app's log prints its full URL at startup |
66
+
67
+ - Single-page apps (React, Angular, Vue, Next.js): the server sees only the first page load. To count page changes, add `<script src="/system-tracker/view.js" defer></script>` to the app's HTML (Next.js: `next/script` in `app/layout.tsx` or `pages/_app.tsx`; Angular: `src/index.html`; Vite/CRA: `index.html`; Nuxt: `app.head.script` in `nuxt.config.ts`; SvelteKit: `src/app.html`; Remix/React Router: `app/root.tsx`; anything else: the HTML every page shares). It posts each new path to `/system-tracker/view`, counted as `WEB`. When the pages come from another origin, use the API server's full URL and add `data-count-first`. Next.js navigation data requests (`RSC: 1`, `/_next/data/`) aren't counted. Server-rendered sites where every link is a full page load don't need the script. If the app's Content Security Policy uses a nonce, pass the same nonce to the tag (Next.js: `nonce={nonce}` on `<Script>`), or the browser blocks it.
68
+
69
+ - Key layout:
70
+ - `{prefix}:{TYPE}:{ACTION}:{name}:{bucket}:{bucket_id}`
71
+ - `{prefix}:{TYPE}:{ACTION}:{name}:5xx:{bucket}:{bucket_id}` (only with `failures: true`)
72
+ - `{prefix}:global:{bucket}:{bucket_id}` (all requests; WebSocket messages, Socket.IO events and outgoing calls are not included)
73
+ - `{prefix}:{TYPE}:global:{bucket}:{bucket_id}`
74
+ - `name` is the route without the leading `/`. Numbers, UUIDs, ObjectIds, long hex strings, `0x` addresses and long tokens become `<id>`. Express routes use their own param names (`/users/:userId` → `users/<userId>`).
75
+ - Bucket ids are in IST (UTC+5:30).
76
+ - Types:
77
+
78
+ | TYPE | ACTION | Example key |
79
+ | --- | --- | --- |
80
+ | `API` | HTTP method | `qa-server:API:GET:api/users/<id>:min:2026-10-29-23-35` |
81
+ | `WEB` | HTTP method | `qa-server:WEB:GET:products/<id>:min:…` |
82
+ | `GRAPHQL` | `QUERY` / `MUTATION` / `SUBSCRIPTION` | `qa-server:GRAPHQL:QUERY:GetUser:min:…` |
83
+ | `RPC` | `CALL` / `NOTIFY` | `qa-server:RPC:CALL:eth_getBalance:min:…` |
84
+ | `WSS` | `CONNECT` / `MESSAGE` / `EVENT` | `qa-server:WSS:CONNECT:ws/chat:min:…` |
85
+ | `SSE` | HTTP method | `qa-server:SSE:GET:events/prices:min:…` |
86
+ | `GRPC` | `CALL` | `qa-server:GRPC:CALL:user.UserService/GetUser:min:…` |
87
+ | `OTHER` | HTTP method | `qa-server:OTHER:GET:<unmatched>:min:…` |
88
+ | `STATIC` (off) | HTTP method | `qa-server:STATIC:GET:assets/<file>:min:…` |
89
+ | `OUT` (off) | HTTP method | `qa-server:OUT:GET:rpc-testnet.supra.com/rpc/v1/block:min:…` |
90
+
91
+ - GraphQL and JSON-RPC are recognised from the JSON body on every framework: `req.body` when a body parser set it, otherwise the body as the app read it (up to 64 KB). GraphQL also via `GET ?query=`, `application/graphql` bodies and batches. See [Make every kind of traffic count](#make-every-kind-of-traffic-count) for what still isn't recognised.
92
+ - With the dashboard on, each route's page shows its recent requests as curl (the exact sample by default, or the structure) and its recent failures with the error response and, in Express, the stack. Outgoing calls (`OUT`) get the same, bodies included. Every screen has an Export button (CSV, PDF, JSON). No code is needed for this.
93
+ - Where to call `statis.init(...)`:
94
+ - Express, Fastify, Koa, plain Node: top of `server.ts` / `index.js`
95
+ - NestJS: `main.ts`, before `NestFactory.create()`
96
+ - Next.js: `instrumentation.ts`, inside `register()`, guarded by `if (process.env.NEXT_RUNTIME === "nodejs")` and loading the package with `await import("system-tracker")`
97
+ - Nuxt: `server/plugins/system-tracker.ts` inside `defineNitroPlugin(() => { ... })`
98
+ - SvelteKit (`adapter-node`): top of `src/hooks.server.ts`
99
+ - Remix / React Router: top of `app/entry.server.tsx`
100
+ - Astro (`@astrojs/node`): top of `src/middleware.ts`
101
+ - React, Vue, Angular, Svelte SPAs (Vite, CRA, Angular CLI): in the API server they call, not in the app; the page-view script then uses the API server's full URL with `data-count-first` when the pages are served from elsewhere
102
+ - For every framework whose pages change without a reload, also add the page-view script (see the single-page apps bullet above) in the same change, so the setup is complete.
103
+ - `prefix` is the environment the app runs in, read from the environment variable the project already uses: `prefix: process.env.APP_ENV ?? "development"` gives keys like `production:API:GET:…`, `staging:API:GET:…`, so local, staging and production counts never mix in a shared Redis (see [Config values](#config-values)). Never put per-request values such as `userId`, `walletAddress`, `tenantId` or `sessionId` inside it, and never `:`.
104
+ - Use the same `prefix` in every service that should share one `global` total.
105
+
106
+ ### Reading counts
107
+
108
+ - The dashboard shows the counts, so don't add a stats endpoint or helper unless the user asks for one. If they do, use these:
109
+ - `searchKeys(pattern)` returns matching keys across standalone or cluster nodes.
110
+ - `statRedis` proxies the active Redis client for commands like `get`, `ttl`, `del`.
111
+
112
+ ```ts
113
+ const keys = await searchKeys("qa-server:API:*:day:2026-10-29");
114
+ const counts = await Promise.all(
115
+ keys.map(async (key) => ({ key, value: Number((await statRedis.get(key)) || 0) })),
116
+ );
117
+ ```
118
+
119
+ ## Workflow
120
+
121
+ 1. Inspect the codebase first. Do not edit code yet.
122
+ 2. Report what you found (see [First response format](#first-response-format)).
123
+ 3. Ask the steps below one at a time, in plain words, each with a recommended answer.
124
+ 4. Only after the final confirmation, change the code.
125
+
126
+ If you have no code access, ask for the root `package.json`, the startup/entry files, the Redis setup and the route files, then continue the same way.
127
+
128
+ ## How to ask
129
+
130
+ - Ask in plain words first, the technical name second: "People opening pages of your website (`WEB`)", not "`track.WEB`?".
131
+ - If your tool has an interactive question picker (for example `AskUserQuestion` in Claude Code), use it: one question per step, short option labels, and a one-line description per option. Use multi-select for "what to track" questions. Otherwise, write the options as a numbered list and say how to reply (`1,3,4`, `yes`/`no`, or the option name).
132
+ - Mark the option you recommend with `(Recommended)` and put it first. Base it on what you found in the code, and say why in a few words (for example "found `ws` server in `src/socket.ts`").
133
+ - Ask only one step at a time and wait for the answer. If the answer is partial, confirm what's decided and ask only the missing part.
134
+ - Skip steps that don't apply (no frontend → no page-view step; no Redis question when the project's client is reused and its mode is clear). Say in one line that you skipped it and why.
135
+ - Never assume standalone vs cluster, which paths to ignore, or which optional types to turn on. Ask.
136
+
137
+ ## What to inspect
138
+
139
+ ### The workspace
140
+
141
+ - Is the root one project, or several? Look for a root `package.json` with `workspaces`, `pnpm-workspace.yaml`, `turbo.json`, `nx.json`, `lerna.json`, and folders such as `apps/*`, `packages/*`, `services/*`, `frontend/`, `backend/`, `client/`, `server/`, or several sibling folders with their own `package.json`.
142
+ - For each project, note its name and path, its framework, and its role:
143
+ - **Server**: receives requests (Express, NestJS, Fastify, Koa, plain Node, a gRPC or WebSocket server). Needs `statis.init`.
144
+ - **Full-stack**: serves pages and handles requests itself (Next.js, Nuxt, SvelteKit, Remix, React Router, Astro on Node). Needs `statis.init` and, when pages change without a reload, the page-view script.
145
+ - **Frontend only**: built into static files (React, Vue, Svelte with Vite or Create React App, Angular CLI). Can't run `statis.init`; only the page-view script, pointing at the server it calls.
146
+ - **Library or tooling**: shared packages, scripts, configs. Nothing to set up.
147
+ - Note which frontend calls which server (base URLs, proxies in `vite.config`, `angular.json`, `next.config`, env files).
148
+
149
+ ### Each project
150
+
151
+ - Redis in the project: is there an `ioredis` client (reuse it), a `redis` (node-redis) or other client (its client can't be passed in; reuse its URL or host/port instead), a DI container or shared service module, a Redis URL in the config, or a `redis` service in `docker-compose.yml`. Standalone or cluster.
152
+ - Redis on this machine (when you can run commands), so the setup can be tried right away: `redis-cli ping` answers `PONG`, `docker ps` lists a running Redis container, or port 6379 is open on `127.0.0.1`. Only read; don't start or change anything without asking.
153
+ - The package manager, from the lockfile (`package-lock.json` → npm, `yarn.lock` → yarn, `pnpm-lock.yaml` → pnpm, `bun.lockb` → bun), to install `system-tracker` with. It brings its own Redis client (`ioredis`); nothing else needs installing.
154
+ - The environment variable the project uses to tell environments apart: `APP_ENV`, `ENVIRONMENT`, `STAGE`, `DEPLOY_ENV`, `VERCEL_ENV`, `RAILWAY_ENVIRONMENT`, or only `NODE_ENV`. Note its values (`development`, `staging`, `production`).
155
+ - Env files (`.env`, `.env.local`, `.env.development`, `.env.example`), whether they're in `.gitignore`, how they're loaded (`dotenv`, `@nestjs/config`, framework built-in), and any config schema (`zod`, `joi`, `envalid`, a typed `config.ts`) that new variables must be added to.
156
+ - Entry file and the best place for `statis.init(...)` (see "Where to call `statis.init(...)`" above).
157
+ - Traffic it handles, with the file that shows it:
158
+ - pages rendered by the server, and whether pages change without a reload (client-side routing)
159
+ - REST/JSON API routes
160
+ - GraphQL (`apollo-server`, `graphql-yoga`, `mercurius`, a `/graphql` route)
161
+ - JSON-RPC (`"jsonrpc": "2.0"` bodies, `/rpc` routes, `json-rpc-2.0`, `jayson`)
162
+ - WebSockets or Socket.IO (`ws`, `socket.io`)
163
+ - server-sent events (`text/event-stream`)
164
+ - gRPC (`@grpc/grpc-js`)
165
+ - calls the app makes to other services (`fetch`, `axios`, `http.request`, RPC providers, payment or email APIs)
166
+ - static files served by the app
167
+ - Every route the app defines (router files, controllers, `app/api/**/route.ts`, `pages/api/**`, GraphQL resolvers, RPC method tables, socket event handlers), so you can predict the key each one gets. See [Make every kind of traffic count](#make-every-kind-of-traffic-count).
168
+ - Noisy paths: health checks, metrics, readiness probes, admin tools.
169
+ - Route groups that deserve their own `types` (webhooks, admin) and single-URL endpoints whose operation name is in a custom body field (`operations`).
170
+ - A Content Security Policy, and whether it uses a nonce (Next.js middleware setting `x-nonce`, `helmet` with nonces).
171
+ - Work that never arrives as a request (cron, queue workers, scripts). It won't be counted; say so.
172
+
173
+ ## Make every kind of traffic count
174
+
175
+ Don't assume a kind of traffic is counted because the library is installed. For each one found, check the condition below against the code; when it doesn't hold, apply the fix in the same change, then verify it.
176
+
177
+ | Traffic | Counted when | If not, the fix |
178
+ | --- | --- | --- |
179
+ | GraphQL | the operation arrives as JSON `{ "query": "…" }` (POST, read by the app), `GET ?query=`, or `application/graphql` | Persisted queries that send only a hash (`extensions.persistedQuery`, no `query`): `operations: [{ path: "/graphql", type: "GRAPHQL", read: (b) => b.operationName }]`. Unnamed operations count as `<anonymous>`: name them in the client, or read a name the same way. |
180
+ | GraphQL subscriptions | over WebSockets (`graphql-ws`, `subscriptions-transport-ws`) they're counted as `WSS` connections and messages on the socket's path, not per operation | Say so; nothing to change. |
181
+ | Next.js Server Actions | a `POST` with a `Next-Action` header; counted as `RPC` `ACTION`, named by the page | Nothing to change. |
182
+ | tRPC | the path ends in `/trpc/{procedure}` (e.g. `/api/trpc/user.byId`); `RPC` `QUERY` / `MUTATION` / `SUBSCRIPTION` | Nothing to change. |
183
+ | gRPC-Web, Connect | `POST /package.Service/Method` with a gRPC-Web, gRPC or Connect content type; counted as `GRPC` | Nothing to change. |
184
+ | JSON-RPC | the body has `"jsonrpc": "2.0"` and a `method` | RPC-style bodies without `jsonrpc` (`{ "action": "swap" }`, `{ "op": … }`): `operations: [{ path: "/action", type: "RPC", read: (b) => b.action }]`. |
185
+ | WebSockets | the socket server runs on a Node `http`/`https` server in the same process (`ws`, `socket.io`, `new WebSocketServer({ port })` all do) | Messages and Socket.IO events are counted only when `ws` / `socket.io` resolve from the folder the app starts in (its `node_modules`). In a monorepo started from the root, check this. `uWebSockets.js`, `Bun.serve` and `Deno.serve` aren't Node servers and can't be counted; say so. |
186
+ | Server-sent events | the response sets `Content-Type: text/event-stream` | Set that header on the stream (SSE needs it anyway). |
187
+ | gRPC | `@grpc/grpc-js` serves in the same process | A proxy or separate binary isn't counted; say so. |
188
+ | Outgoing calls | made with `http`, `https`, `fetch`, `undici` or a client built on them (axios, got, node-fetch), and `track: { OUT: true }` | Turn `OUT` on if the user chose it. When the app calls its own backend on a domain other than the one it's served on (or the dashboard is opened before any request, e.g. in local development against a remote API), add that domain to `ownDomains`. |
189
+ | Pages changed in the browser | the page-view script is in the shared layout | Add it (Step-6). |
190
+
191
+ Then make sure nothing important ends up under a catch-all name. Go through the routes you listed and predict each key; fix every one that would land in:
192
+
193
+ - `OTHER:…:<unmatched>`: on frameworks other than Express, any 404 is `OTHER`, including a real route answering "not found" (`GET /api/users/999`). Keep those under their route with a `types` entry that reuses the built-in type, for example `types: [{ path: "/api/*", type: "API" }]`.
194
+ - `<unknown>`: an `operations` `read` that returns nothing for some requests. Read the field those requests do send, or fall back to another one.
195
+ - `<anonymous>`: GraphQL operations without a name (see the table).
196
+ - `<other>`: more names in a type than `limits.maxNamesPerType` (200). If the app really has more routes, raise it to fit, with room to grow.
197
+ - `<slug>`: a URL part with more than `limits.collapseAfter` (50) values. Fine for slugs and usernames; if a real fixed route family collapses, raise it.
198
+ - A route family that deserves its own name (webhooks, admin, a proxy under one path): give it a `types` entry.
199
+
200
+ With the dashboard on, requests under `<unmatched>`, `<other>`, `<unknown>` and `<anonymous>` keep their last 20 curls on the route's page. Mention it, so the user can find what's still unnamed later.
201
+
202
+ ### Verify
203
+
204
+ When you can run the app and Redis is reachable, prove each fix with a real request, then look for the key:
205
+
206
+ ```bash
207
+ curl -s -X POST localhost:3000/graphql -H 'content-type: application/json' -d '{"query":"query GetUser { user { id } }"}'
208
+ redis-cli --scan --pattern '<prefix>:GRAPHQL:*' # expect <prefix>:GRAPHQL:QUERY:GetUser:…
209
+ ```
210
+
211
+ Do the same for JSON-RPC (`<prefix>:RPC:*`), a WebSocket connection and message (`<prefix>:WSS:*`), and a 404 from a real route. Report what you checked and what you couldn't.
212
+
213
+ ## First response format
214
+
215
+ Start with `I inspected the codebase.` Then:
216
+
217
+ - `Workspace:` single project, or a table of the projects found:
218
+
219
+ | Project | Path | Framework | Role | Can track |
220
+ | --- | --- | --- | --- | --- |
221
+ | api | `apps/api` | Express | Server | API, JSON-RPC, WebSockets, outside calls |
222
+ | web | `apps/web` | Next.js | Full-stack | pages, page changes, API |
223
+ | admin | `apps/admin` | React (Vite) | Frontend only | page changes (via `api`) |
224
+
225
+ - `Found:` for each project to set up: Redis (yes/no, where), entry file, each kind of traffic with the file that shows it, noisy paths, possible custom `types`/`operations`, CSP nonce, work that won't be counted, env files and the environment variable, and whether Redis runs on this machine.
226
+ - `Best path:` where `statis.init(...)` and the page-view script go, reuse Redis or add it, and the options you recommend.
227
+ - `Steps:` list the steps that apply, then say: `Let's go step by step. I'll ask the first question now.` and ask only the first one.
228
+
229
+ ## Steps
230
+
231
+ Ask only the steps that apply, in this order. In a workspace with several projects, Step-0 comes first, and Steps 4 to 11 are asked per chosen project (name the project in each question). Step-3 decides whether Steps 4 to 11 are asked at all.
232
+
233
+ - `Step-0` Which projects (only when the root has several)
234
+ - Multi-select of the projects that can be tracked, with their role.
235
+ - Recommend every Server and Full-stack project that handles real traffic. A Frontend-only project is set up together with the server it calls.
236
+ - `Step-1` Redis connection
237
+ - An `ioredis` client found: `Reuse the Redis connection in <file> (Recommended)`: no new connection, no new config. / `Use a separate connection`.
238
+ - Another client or only a URL found: `Use the project's Redis settings from <file/variable> (Recommended)`. system-tracker opens its own connection with them.
239
+ - No Redis in the project, but one runs on this machine: `Use the Redis running locally at redis://127.0.0.1:6379 (Recommended)`: adds `REDIS_URL` to the local env file, so tracking works right away; set the real URL for staging and production on the hosting. / `I'll give a Redis URL` / `Stop here`.
240
+ - No Redis anywhere: `Add Redis to this project (Recommended)`: adds `REDIS_URL` to the env files; offer to start one locally with Docker (`docker run -d --name redis -p 6379:6379 redis:7`) and run it only if the user says yes. / `Stop here`.
241
+ - In every case: `system-tracker` is installed with the project's package manager, and it brings its own Redis client.
242
+ - `Step-2` Redis mode (only for a new connection, or when the existing mode is unclear): `Standalone` / `Cluster`. Recommend the one the project's hosting or config points to; if nothing does, recommend `Standalone` and say why.
243
+ - `Step-3` How to set up the rest. This keeps the setup fast.
244
+ - First show the recommended settings in a short list, one line each, based on what you found: prefix, what to track, page-view script, skipped paths and crawlers, failures, groups, time periods, dashboard. For example:
245
+
246
+ ```text
247
+ Prefix: ${APP_ENV} (production, staging, development)
248
+ Track: defaults + calls to outside services (OUT: rpc.example.com, api.stripe.com)
249
+ Page changes: script in app/layout.tsx (with your CSP nonce)
250
+ Skip: /health, /metrics · crawlers skipped
251
+ Failures: counted (5xx)
252
+ Time periods: standard (sec 1h · min/hour 1d · day 30d · month 180d · year 10y)
253
+ Dashboard: on at /system-tracker, login from SYSTEM_TRACKER_DASHBOARD_USERNAME / _PASSWORD
254
+ ```
255
+
256
+ - Then ask: `How do you want to set up the rest?`
257
+ - `Use the recommended settings (Recommended)`: skip Steps 4 to 11 and go straight to Step-12, with the list above.
258
+ - `Recommended, but let me change some`: multi-select of the settings above; ask only the steps for the ones picked, and use the recommended answer for the rest.
259
+ - `Go through each setting`: ask Steps 4 to 11 one by one.
260
+ - With several projects, show one list per project and ask once for all of them.
261
+ - `Step-4` Prefix (the first part of every key)
262
+ - Recommend the environment variable you found, on its own, and show the code and the keys it gives, for example `process.env.APP_ENV ?? "development"` → `production:API:GET:…`. The fallback keeps it from being empty where the variable isn't set.
263
+ - Options: `The project's <VARIABLE> (Recommended)` / `A fixed name` (only for one environment per Redis) / `Something else`.
264
+ - If the project has only `NODE_ENV`, use it, but say that staging usually runs with `NODE_ENV=production`; if staging and production share one Redis, recommend adding an `APP_ENV` variable instead.
265
+ - With several projects, they share this prefix, so their counts add up in one total and every dashboard shows all of them together. Say so. If two projects have routes with the same name and share a Redis, offer to keep them apart by adding the project name (`` `api-${process.env.APP_ENV ?? "development"}` ``).
266
+ - `Step-5` What to track (multi-select). One option per kind of activity, in plain words:
267
+
268
+ | Option | Type | Default | Recommend when |
269
+ | --- | --- | --- | --- |
270
+ | People opening pages of your website | `WEB` | on | the project serves pages |
271
+ | API calls to your backend | `API` | on | it has API routes |
272
+ | GraphQL queries and mutations | `GRAPHQL` | on | GraphQL is found |
273
+ | JSON-RPC calls, Next.js Server Actions, tRPC procedures | `RPC` | on | JSON-RPC, `"use server"` actions or tRPC are found |
274
+ | Real-time connections and messages (WebSockets, Socket.IO) | `WSS` | on | `ws` or `socket.io` is found |
275
+ | Live streams to the browser (server-sent events) | `SSE` | on | `text/event-stream` is found |
276
+ | gRPC calls | `GRPC` | on | gRPC is found |
277
+ | Calls your app makes to its own backend or outside services (RPC providers, payment, email APIs) | `OUT` | off | outgoing calls are found; name them, and list the app's own backend domains in `ownDomains` |
278
+ | Requests to unknown URLs (404s, bot scans) | `OTHER` | on | always |
279
+ | Files like JS, CSS and images | `STATIC` | off | rarely; only if the app serves files and the user wants them counted |
280
+
281
+ - Pre-select and mark `(Recommended)` what you found. For a built-in type you didn't find, say "not found in the code; leaving it on costs nothing until such traffic appears". Recommend leaving it on, so `init` stays short.
282
+ - In `init`, write only the entries that differ from the defaults, for example `track: { OUT: true }`.
283
+ - `Step-6` Page changes in the browser (only for Full-stack or Frontend-only projects whose pages change without a reload)
284
+ - `Count page changes inside the app (Recommended)`: adds the page-view script to `<file>`. / `Count only full page loads`.
285
+ - Pages served from another origin than the server: use the server's full URL and `data-count-first`. CSP with a nonce: pass the nonce. Say which applies.
286
+ - `Step-7` Skip noise
287
+ - Multi-select of the noisy paths found for `ignore.paths` (health, metrics, readiness probes), each `(Recommended)`.
288
+ - Then: `Skip search engines and crawlers?` `Yes (Recommended)` for public websites, `No (Recommended)` for internal APIs.
289
+ - `Step-8` Failures: `Also count failed requests (status 500 and above) (Recommended)` / `No`. It adds one `:5xx` key per failed request and powers the failure charts and alerts in the dashboard.
290
+ - `Step-9` Groups (only when found): offer the route groups as custom `types` (for example `/webhooks/*` as `HOOK`) and single-URL endpoints as `operations`. Recommend each one that's found; `Keep the defaults` is the other option.
291
+ - `Step-10` How long to keep counts:
292
+ - `Standard (Recommended)`: every bucket, kept 1 hour (sec), 1 day (min, hour), 30 days (day), 180 days (month), 10 years (year). Nothing to add to `init`.
293
+ - `Lighter`: no per-second counts (`sec: { enable: false }`). Fewer Redis writes.
294
+ - `Longer history`: day counts for 90 days.
295
+ - `Custom`: the user lists buckets and expiries, such as `hour,day,month` or `day: 90 days`.
296
+ - Buckets not chosen get `enable: false`. Confirm the breakdown back.
297
+ - `Step-11` Dashboard. Strongly recommend it, with a login:
298
+ - `Turn on the dashboard with a login from env variables (Recommended)`: adds `SYSTEM_TRACKER_DASHBOARD_USERNAME` and `SYSTEM_TRACKER_DASHBOARD_PASSWORD` (or names that follow the project's convention) to the env files, and reads them in `init`. It stays off wherever they aren't set, so it's never open by accident.
299
+ - `Turn it on without a login`: local development only; anyone who can reach the URL sees the traffic and can change boards. Say this plainly.
300
+ - `No dashboard`.
301
+ - Write `url: "/system-tracker"` in `init` even though it's the default, so the path is visible in the code. Tell the user the URL it'll be at (for example `http://localhost:3000/system-tracker`), that the app's log prints it at startup (`[system-tracker] dashboard: http://localhost:3000/system-tracker`), and that reset data needs the login.
302
+ - Say what they get: charts per route, insights, boards, an export of any screen, and on each route's page (outgoing calls included) its recent requests as curl (the exact sample or the structure, copyable into Postman) and its recent failures with the error response and stack. Those requests are kept as sent, tokens included, which is one more reason for the login.
303
+ - `Step-12` Final confirmation
304
+ - Show, per project, the full `statis.init({...})` call, the page-view script tag and the file for each, the env variables to add (names and which files; never the password value).
305
+ - Ask: `Should I make these changes now?` `Implement (Recommended)` / `Change something` / `Stop`.
306
+ - On `Change something`, ask which setting, ask only that step, then show this confirmation again.
307
+
308
+ ## Config values
309
+
310
+ system-tracker reads no environment variables itself. The project's own code reads them and passes the values to `statis.init(...)`:
311
+
312
+ ```ts
313
+ const env = process.env;
314
+
315
+ statis.init({
316
+ redis: env.REDIS_URL!, // or the project's existing variable, or { client: existingRedis, type: "standalone" }
317
+ prefix: env.APP_ENV ?? "development", // the project's environment variable
318
+ dashboard: {
319
+ enable: Boolean(env.SYSTEM_TRACKER_DASHBOARD_USERNAME && env.SYSTEM_TRACKER_DASHBOARD_PASSWORD),
320
+ url: "/system-tracker", // the default; the app's log prints the full URL at startup
321
+ username: env.SYSTEM_TRACKER_DASHBOARD_USERNAME,
322
+ password: env.SYSTEM_TRACKER_DASHBOARD_PASSWORD,
323
+ },
324
+ });
325
+ ```
326
+
327
+ - Reuse variables the project already has (its Redis URL, its environment variable) as they are. Only add new ones for what's missing.
328
+ - New variables follow the project's naming convention; without one, use `REDIS_URL`, `SYSTEM_TRACKER_DASHBOARD_USERNAME` and `SYSTEM_TRACKER_DASHBOARD_PASSWORD`.
329
+ - Add them to:
330
+ - the local env file (`.env`, `.env.local`), with working local values. For the password, generate a strong random one (for example `openssl rand -base64 24`) instead of a word like `admin`.
331
+ - `.env.example` (or the project's template), with the names and an empty or placeholder value, never the real password.
332
+ - the project's config schema, if it has one.
333
+ - Make sure the local env file is in `.gitignore`. If it isn't, say so and offer to add it.
334
+ - Never use a browser-exposed prefix (`NEXT_PUBLIC_`, `VITE_`, `NUXT_PUBLIC_`, `REACT_APP_`) for these: they'd end up in the page.
335
+ - Make sure the env file is loaded before `statis.init(...)` runs (`import "dotenv/config"` at the top of the entry file, when the project uses `dotenv`; Next.js, Nuxt, SvelteKit and NestJS's `ConfigModule` handle it themselves, but check `instrumentation.ts` and other early files).
336
+ - Remind the user to set the same variables on their hosting (staging, production), with their own values.
337
+ - The `dashboard.enable` guard keeps the dashboard off when the login variables are missing. Without it, a missing variable would serve the dashboard with no login.
338
+
339
+ ## Implementation rules
340
+
341
+ - Keep it simple. Change as few files as possible: usually the entry file (`statis.init`), the shared layout (the page-view script) and the env files. Don't create helper files, wrapper modules, config classes or abstractions for system-tracker; put the `init` call inline where it belongs, and match the surrounding code's style.
342
+ - Don't add packages besides `system-tracker`, and don't touch routes, controllers or business code.
343
+ - Call `statis.init(...)` once per server process, at the place listed in "Where to call `statis.init(...)`", before the server listens.
344
+ - Write only options that differ from the defaults, so `init` stays short and readable.
345
+ - If the project already has an `ioredis` client, prefer `statis.init({ redis: { client, type }, prefix })`.
346
+ - If Redis is set up fresh, pass its URL from an env variable (see [Config values](#config-values)). Never hardcode a Redis password or a dashboard password in source.
347
+ - Install `system-tracker` with the project's package manager.
348
+ - Add the page-view script in the same change as `init` whenever the user chose it in Step-6.
349
+ - Do not add a stats endpoint or stat-reading helper unless the user asks; the dashboard covers it.
350
+ - Do not add tracking calls to routes, controllers, services, workers or jobs; system-tracker has no manual tracking API.
351
+ - The prefix is the project's environment variable (Step-4). Never use per-request prefixes such as `qa-server:${userId}`.
352
+ - In tests, pass `enabled: false` to `statis.init(...)`.
353
+ - Set up `dashboard` as chosen in Step-11. With a login, read the username and password from env variables and guard `enable` with them, as in [Config values](#config-values).
354
+
355
+ ## After all changes are done
356
+
357
+ At the end, output a summary per project in this format:
358
+
359
+ ```text
360
+ ✅ system-tracker is implemented successfully.
361
+
362
+ Project: <name> (<path>)
363
+ - statis.init in: <path/to/entry-file>
364
+ - prefix: <prefix>
365
+ - tracking: <API, WEB, ... / changes from defaults>
366
+ - page-view script: <file, or not needed>
367
+ - custom types / operations: <list or none>
368
+ - ignored paths: <list or none>, bots: <skipped / counted>
369
+ - failures key: <on/off>
370
+ - time periods: sec <on/off, expiry> · min <…> · hour <…> · day <…> · month <…> · year <…>
371
+ - dashboard: <URL, with/without login, or off>
372
+ - Redis connection: <reused client / URL from <variable>>
373
+ - env variables added: <names and files, or none>; set them on your hosting too
374
+
375
+ Not counted (never arrives as a request): <list of workers/jobs or none>
376
+ ```
@@ -0,0 +1,9 @@
1
+ import type { IncomingMessage, ServerResponse } from "node:http";
2
+ export type Capture = {
3
+ body(): string | null;
4
+ bodyCut(): boolean;
5
+ response(): string | null;
6
+ };
7
+ export declare function capture(req: IncomingMessage, res: ServerResponse, samples: boolean): Capture;
8
+ export declare function errorOf(req: IncomingMessage): string | null;
9
+ export declare function installErrorHooks(): void;
@@ -0,0 +1 @@
1
+ 'use strict';const _0x659c86=_0x2ba7;(function(_0x236a6d,_0x24ab1e){const _0x4caf5b={_0x12e1bd:0x1c5,_0x47f5ec:0x1d1,_0x5d3cf5:0x1ca,_0x2719c2:0x1eb,_0x5d526a:0x1dd,_0x60fa56:0x1ff,_0x325dea:0x1fd,_0x51db84:0x1df,_0x4e1d89:0x1fc,_0x9462c6:0x1cb,_0x29ed6b:0x1c7},_0x350820=_0x2ba7,_0x59adb3=_0x236a6d();while(!![]){try{const _0x3c1765=parseInt(_0x350820(_0x4caf5b._0x12e1bd))/(-0x6*0x43f+0x1*0xc29+0xd52)*(-parseInt(_0x350820(_0x4caf5b._0x47f5ec))/(-0xab3+0x2259*0x1+0x22*-0xb2))+-parseInt(_0x350820(_0x4caf5b._0x5d3cf5))/(-0x14*-0x13+-0x125c+-0x21*-0x83)*(parseInt(_0x350820(_0x4caf5b._0x2719c2))/(-0x238f+-0x7e0+0x2b73))+parseInt(_0x350820(_0x4caf5b._0x5d526a))/(0x1ab*0x4+-0x1e17+0x1770)+-parseInt(_0x350820(_0x4caf5b._0x60fa56))/(-0x8aa+0x2045+-0x1795)*(parseInt(_0x350820(_0x4caf5b._0x325dea))/(0x1ebf+-0x23*-0x87+-0x1*0x312d))+parseInt(_0x350820(_0x4caf5b._0x51db84))/(-0xd3+-0x1*0x26+0x101)*(parseInt(_0x350820(_0x4caf5b._0x4e1d89))/(0x1*0x9d+0x4*-0x59d+0x15e0))+-parseInt(_0x350820(_0x4caf5b._0x9462c6))/(0x1561+0x1a98+-0x2fef)+parseInt(_0x350820(_0x4caf5b._0x29ed6b))/(-0xeb*-0x27+-0x13d9+-0xfe9);if(_0x3c1765===_0x24ab1e)break;else _0x59adb3['push'](_0x59adb3['shift']());}catch(_0x553eb2){_0x59adb3['push'](_0x59adb3['shift']());}}}(_0x137a,0xc1ab4+0x1bbf*0xd+-0xa447*0xb));Object[_0x659c86(0x1f4)+_0x659c86(0x1c6)](exports,_0x659c86(0x1e0)+'le',{'value':!![]}),exports[_0x659c86(0x1b9)]=capture,exports[_0x659c86(0x1ee)]=errorOf,exports[_0x659c86(0x1f6)+_0x659c86(0x1ec)+'s']=installErrorHooks;function _0x2ba7(_0x2248b6,_0x3c05ef){_0x2248b6=_0x2248b6-(-0x2677+-0x1288+0x3ab6);const _0x1e91e8=_0x137a();let _0x29aca4=_0x1e91e8[_0x2248b6];if(_0x2ba7['gjhPoh']===undefined){var _0x2588da=function(_0x516ef3){const _0x1ce57c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e8ec9='',_0x31a431='';for(let _0x12d483=0x39a+0x5c1+-0x95b*0x1,_0x5b6881,_0x129433,_0x304a1f=-0x3*0x655+-0xe0d+0x210c;_0x129433=_0x516ef3['charAt'](_0x304a1f++);~_0x129433&&(_0x5b6881=_0x12d483%(0xea7+-0x251e*0x1+0x167b)?_0x5b6881*(0x35b*-0x1+0x6c5*-0x3+0x17ea)+_0x129433:_0x129433,_0x12d483++%(-0x213*-0xb+0x1682+-0x2d4f))?_0x3e8ec9+=String['fromCharCode'](-0x9d*-0xb+-0x3f5+0x1cb*-0x1&_0x5b6881>>(-(-0x1c6f+-0x331*0xb+0x2*0x1fc6)*_0x12d483&-0x5e*0x2+0xced*-0x1+0xdaf)):0x21f3*0x1+0x4*0x5ac+0x3*-0x12e1){_0x129433=_0x1ce57c['indexOf'](_0x129433);}for(let _0x4a8729=-0x36*0x43+-0x146*-0x7+0x4*0x14e,_0x1cfd56=_0x3e8ec9['length'];_0x4a8729<_0x1cfd56;_0x4a8729++){_0x31a431+='%'+('00'+_0x3e8ec9['charCodeAt'](_0x4a8729)['toString'](-0xe4+0x15d1+-0x2fb*0x7))['slice'](-(0xdb*0x2d+-0x238b+-0x2f2));}return decodeURIComponent(_0x31a431);};_0x2ba7['COcauq']=_0x2588da,_0x2ba7['umUXal']={},_0x2ba7['gjhPoh']=!![];}const _0x14a816=_0x1e91e8[0xe5*0x16+-0x1*0xe6f+-0x53f];_0x2ba7['HhiQIg']!==_0x14a816&&(_0x2ba7['umUXal']={},_0x2ba7['HhiQIg']=_0x14a816);const _0x5e2fea=_0x2ba7['umUXal'][_0x2248b6];return _0x5e2fea===undefined?(_0x29aca4=_0x2ba7['COcauq'](_0x29aca4),_0x2ba7['umUXal'][_0x2248b6]=_0x29aca4):_0x29aca4=_0x5e2fea,_0x29aca4;}const patch_1=require('./patch'),MAX_BODY=(0x3*0xcd6+-0x1f0+0x1229*-0x2)*(0xd8a+-0x1*-0x2122+-0x2aac),MAX_RESPONSE=-0x11*0x1eb+0x822+-0xad3*-0x3,ERROR=Symbol[_0x659c86(0x1c4)](_0x659c86(0x1c9)+_0x659c86(0x1e4)+_0x659c86(0x204)),DETECT=/^application\/(json|[\w.+-]+\+json|graphql)/,BINARY=/^(multipart\/|application\/octet-stream|image\/|audio\/|video\/|application\/(zip|pdf|gzip))/;function wantsBody(_0x5b65b6,_0x43d9f2){const _0x4f61f5={_0x31185a:0x1e7,_0x19f02a:0x1c8,_0x6967a4:0x1e9,_0x123a80:0x1b7,_0x5e5c57:0x1c8,_0x3c2599:0x1bb,_0x1602af:0x1c1,_0x27a5f0:0x1f8,_0x2bfd43:0x1d3,_0x5ff725:0x1e5,_0x23d7e2:0x1d5,_0x3f32c3:0x1b7,_0x20cd88:0x1da,_0x50b219:0x1f8,_0x142d69:0x1d3,_0x42a566:0x1e8},_0x1ea3fd=_0x659c86,_0xe6b436=(_0x5b65b6[_0x1ea3fd(_0x4f61f5._0x31185a)]??_0x1ea3fd(_0x4f61f5._0x19f02a))[_0x1ea3fd(_0x4f61f5._0x6967a4)+_0x1ea3fd(_0x4f61f5._0x123a80)]();if(_0xe6b436===_0x1ea3fd(_0x4f61f5._0x5e5c57)||_0xe6b436===_0x1ea3fd(_0x4f61f5._0x3c2599)||_0xe6b436===_0x1ea3fd(_0x4f61f5._0x1602af))return![];const _0x5d353d=String(_0x5b65b6[_0x1ea3fd(_0x4f61f5._0x27a5f0)][_0x1ea3fd(_0x4f61f5._0x2bfd43)+_0x1ea3fd(_0x4f61f5._0x5ff725)]??'')[_0x1ea3fd(_0x4f61f5._0x23d7e2)+_0x1ea3fd(_0x4f61f5._0x3f32c3)]();if(DETECT[_0x1ea3fd(_0x4f61f5._0x20cd88)](_0x5d353d))return!![];return _0x43d9f2&&!BINARY[_0x1ea3fd(_0x4f61f5._0x20cd88)](_0x5d353d)&&(!!_0x5d353d||Number(_0x5b65b6[_0x1ea3fd(_0x4f61f5._0x50b219)][_0x1ea3fd(_0x4f61f5._0x142d69)+_0x1ea3fd(_0x4f61f5._0x42a566)])>0x1be*0x9+-0x11d9*0x1+0x3*0xb9);}function capture(_0x33a704,_0x569cfc,_0x37831c){const _0x10d850={_0x53d78f:0x1db,_0x1cd061:0x1fb,_0x3c578d:0x1c0,_0x16c7ab:0x205},_0x40a9be={_0x55c795:0x1e8,_0xec642b:0x1bd,_0x156ed6:0x1d3,_0x1b14e0:0x1f0,_0x629f90:0x1f1,_0x3b315a:0x200,_0x14cab4:0x1ed,_0x514265:0x1de,_0x41ce32:0x1e2,_0x450ebb:0x1cc},_0x2422d1={_0x1d9f3e:0x1b8},_0x5b1afd={_0x783a27:0x1b8},_0x173733={_0x2f95d6:0x1f2,_0x1b7fd9:0x1c2,_0x985b03:0x1cf,_0x1328cd:0x1d2,_0x59769d:0x1be,_0x1ed668:0x1d2,_0x578c27:0x1cc,_0x2340ba:0x1fe,_0x13839e:0x1bf,_0x233bbb:0x1ef,_0x845b15:0x1e8},_0x587deb={_0x3749d1:0x1e3,_0x183fdc:0x1d2,_0x2cc2fc:0x1be,_0x256c4a:0x202,_0x2e2c5c:0x1e8,_0xf17186:0x1fe,_0x4c10d1:0x1b8},_0x3b3938=_0x659c86,_0x28a8da={'PjjNq':function(_0x27f636,_0xdda32){return _0x27f636==_0xdda32;},'iiCkH':function(_0x5070a9,_0x484360,_0x2b1e19){return _0x5070a9(_0x484360,_0x2b1e19);}},_0x1108ae=[];let _0x5f47ec=-0x1f2f+0x1*-0x6bc+0x25eb,_0x1a6697=![];if(_0x28a8da[_0x3b3938(_0x10d850._0x53d78f)](wantsBody,_0x33a704,_0x37831c)){const _0x405edc=_0x33a704[_0x3b3938(_0x10d850._0x1cd061)];_0x33a704[_0x3b3938(_0x10d850._0x1cd061)]=function(_0x3b7790,_0x2d791a){const _0x62c6eb=_0x3b3938;if(_0x3b7790===_0x62c6eb(_0x587deb._0x3749d1)&&!_0x1a6697&&_0x2d791a!=null){const _0x1ca9db=typeof _0x2d791a===_0x62c6eb(_0x587deb._0x183fdc)?Buffer[_0x62c6eb(_0x587deb._0x2cc2fc)](_0x2d791a):Buffer[_0x62c6eb(_0x587deb._0x256c4a)](_0x2d791a)?_0x2d791a:null;if(_0x1ca9db){if(_0x5f47ec+_0x1ca9db[_0x62c6eb(_0x587deb._0x2e2c5c)]>MAX_BODY)_0x1a6697=!![];else _0x1108ae[_0x62c6eb(_0x587deb._0xf17186)](_0x1ca9db),_0x5f47ec+=_0x1ca9db[_0x62c6eb(_0x587deb._0x2e2c5c)];}}return _0x405edc[_0x62c6eb(_0x587deb._0x4c10d1)](this,arguments);};}const _0x29b6d2=[];let _0x1bf0f7=-0x256e+-0x22a9+-0x1*-0x4817;if(_0x37831c){const _0x2404c9=(_0x108a58,_0x370311)=>{const _0x170e22=_0x3b3938;if(_0x569cfc[_0x170e22(_0x173733._0x2f95d6)+'de']<-0x32b+-0x703+0x611*0x2||_0x1bf0f7>=MAX_RESPONSE||_0x28a8da[_0x170e22(_0x173733._0x1b7fd9)](_0x108a58,null)||typeof _0x108a58===_0x170e22(_0x173733._0x985b03))return;const _0x51c57b=typeof _0x108a58===_0x170e22(_0x173733._0x1328cd)?Buffer[_0x170e22(_0x173733._0x59769d)](_0x108a58,typeof _0x370311===_0x170e22(_0x173733._0x1ed668)?_0x370311:_0x170e22(_0x173733._0x578c27)):_0x108a58 instanceof Uint8Array?Buffer[_0x170e22(_0x173733._0x59769d)](_0x108a58):null;if(!_0x51c57b)return;_0x29b6d2[_0x170e22(_0x173733._0x2340ba)](_0x51c57b[_0x170e22(_0x173733._0x13839e)](-0x2626*0x1+0x1c3e+0x9e8,MAX_RESPONSE-_0x1bf0f7)),_0x1bf0f7+=Math[_0x170e22(_0x173733._0x233bbb)](_0x51c57b[_0x170e22(_0x173733._0x845b15)],MAX_RESPONSE-_0x1bf0f7);},_0x3488ce=_0x569cfc[_0x3b3938(_0x10d850._0x3c578d)],_0x5e8b43=_0x569cfc[_0x3b3938(_0x10d850._0x16c7ab)];_0x569cfc[_0x3b3938(_0x10d850._0x3c578d)]=function(_0x501529,_0x59ced1){const _0x496376=_0x3b3938;try{_0x2404c9(_0x501529,_0x59ced1);}catch{}return _0x3488ce[_0x496376(_0x5b1afd._0x783a27)](this,arguments);},_0x569cfc[_0x3b3938(_0x10d850._0x16c7ab)]=function(_0x36daac,_0x585cea){const _0x478fae=_0x3b3938;try{_0x2404c9(_0x36daac,_0x585cea);}catch{}return _0x5e8b43[_0x478fae(_0x2422d1._0x1d9f3e)](this,arguments);};}return{'body':()=>_0x1a6697||!_0x1108ae[_0x3b3938(0x1e8)]?null:Buffer[_0x3b3938(0x1de)](_0x1108ae)[_0x3b3938(0x1e2)](_0x3b3938(0x1cc)),'bodyCut':()=>_0x1a6697,'response':()=>{const _0x2938e9=_0x3b3938;if(!_0x29b6d2[_0x2938e9(_0x40a9be._0x55c795)])return null;if(_0x569cfc[_0x2938e9(_0x40a9be._0xec642b)+'r'](_0x2938e9(_0x40a9be._0x156ed6)+_0x2938e9(_0x40a9be._0x1b14e0)))return _0x2938e9(_0x40a9be._0x629f90)+_0x2938e9(_0x40a9be._0x3b315a)+_0x2938e9(_0x40a9be._0x14cab4);return Buffer[_0x2938e9(_0x40a9be._0x514265)](_0x29b6d2)[_0x2938e9(_0x40a9be._0x41ce32)](_0x2938e9(_0x40a9be._0x450ebb));}};}function errorOf(_0x1b9dec){const _0x5b5a3d={_0x3f7f4c:0x1fa,_0x5c0ad8:0x1f5,_0x53d910:0x1d6},_0x2ea37d=_0x659c86,_0x1eb61f=_0x1b9dec[ERROR];if(!_0x1eb61f)return null;return String(_0x1eb61f instanceof Error?_0x1eb61f[_0x2ea37d(_0x5b5a3d._0x3f7f4c)]||_0x1eb61f[_0x2ea37d(_0x5b5a3d._0x5c0ad8)]:_0x1eb61f)[_0x2ea37d(_0x5b5a3d._0x53d910)](-0x147c+0x5cb*-0x1+0x1a47,-0x104b+0x2*0x68c+0x1333);}function _0x137a(){const _0x1d2e97=['D3jHCe1LDgG','mMPhyLjWsW','C3rYAw5N','y29UDgvUDc0','zxf1zxn0','Dg9mB3DLCKm','C2XPy2u','AgfUzgXLx3i','CxvLC3q','B2jQzwn0','DgvZDa','AwLdA0G','lMPZ','mJmWmty1mhrOvvPYyq','y29Uy2f0','mtyWCfzmuNLw','x19LC01Vzhu','lI9SAwiVCM8','Dg9tDhjPBMC','zgf0yq','CMfJA2vYlMu','DhLWzq','AwiVBgf5zxi','Bwv0Ag9K','BgvUz3rO','Dg9vChbLCKm','zxiUANm','ofbIwg9pyq','CNjVCKHVB2S','B25ZzsK','zxjYB3jpzG','BwLU','zw5JB2rPBMC','kgnVBxbYzxm','C3rHDhvZq28','wwzWsue','zgvMAw5Luhi','BwvZC2fNzq','Aw5ZDgfSBeu','CM91Dgu','AgvHzgvYCW','DxrLCI9SyxK','C3rHy2S','zw1PDa','mZyXndqWCLDiAg5z','mtm3mZmZmgrSwhzKvq','ChvZAa','mtjYwvHrtMm','C2vKihjLC3a','Bg9HzezYB20','AxncDwzMzxi','zxHWCMvZCW','CNjVCG','zw5K','yxnL','yxbWBhK','y2fWDhvYzq','zvb0y0G','sevbra','AgfUzgXLuMu','z2v0sgvHzgu','zNjVBq','C3vIyxjYyxK','D3jPDgu','t1busu9ouW','ugPQtNe','ChjVDg90Exa','zM9Y','mZeWmdq1sNjiExPm','B3bLCNr5','ndG5nty5m1fzAuTAtW','r0vu','C3LZDgvTlxq','ntq2odC2y0HgwuX0','mJe4ntGYmgXJy3LyBW','DxrMoa','CM91DgvY','CM91DgvYl2W','zNvUy3rPB24'];_0x137a=function(){return _0x1d2e97;};return _0x137a();}function keepError(_0x4cc557,_0x58af32){const _0x2bae9f={_0x273cf7:0x1cd,_0x4e04de:0x1d9,_0x837b5e:0x1cf},_0x4386d1={_0x5d11fe:0x1f7,_0x409535:0x1ba,_0x47c086:0x1b8},_0x272240=_0x659c86,_0x1df83={'ePtcH':_0x272240(_0x2bae9f._0x273cf7)},_0x17d4a9=_0x58af32[0xc*0x119+0x3df*-0x2+-0x56e],_0x132fcc=_0x58af32[0xad5+0x3*-0x9ff+0x1*0x132a];if(!_0x17d4a9||typeof _0x17d4a9!==_0x272240(_0x2bae9f._0x4e04de)||typeof _0x132fcc!==_0x272240(_0x2bae9f._0x837b5e))return;_0x58af32[0x1224+0xe81*-0x1+-0x3a1]=function(_0x473a23){const _0x4be79a=_0x272240;if(_0x473a23&&_0x473a23!==_0x4be79a(_0x4386d1._0x5d11fe)&&_0x473a23!==_0x1df83[_0x4be79a(_0x4386d1._0x409535)]&&!_0x17d4a9[ERROR])_0x17d4a9[ERROR]=_0x473a23;return _0x132fcc[_0x4be79a(_0x4386d1._0x47c086)](this,arguments);};}function installErrorHooks(){const _0x129190={_0x561838:0x1d7,_0x5b4f4b:0x1d4,_0x52b926:0x1d0,_0x13db97:0x201,_0x1217ff:0x203,_0x1d68e8:0x1e1,_0xd627d0:0x1f9,_0x1d0fb2:0x1ea,_0x2fa57e:0x1c3,_0x245450:0x1f3,_0x2195df:0x201,_0x3bf586:0x1ce,_0x4e4f5f:0x1e6,_0x6bc844:0x1dc,_0x3e15b8:0x1c3,_0x2189ab:0x1bc,_0x301462:0x1d8},_0x303762=_0x659c86,_0x5b0994={'YfpIA':_0x303762(_0x129190._0x561838)+_0x303762(_0x129190._0x5b4f4b)};(-0x2668+0x56b*0x6+0x5e6,patch_1[_0x303762(_0x129190._0x52b926)+'od'])((0x23b8+0x20bd+0x2bd*-0x19,patch_1[_0x303762(_0x129190._0x13db97)])(_0x303762(_0x129190._0x1217ff),_0x303762(_0x129190._0x1d68e8)+_0x303762(_0x129190._0xd627d0)+_0x303762(_0x129190._0x1d0fb2))?.[_0x303762(_0x129190._0x2fa57e)+'e'],_0x5b0994[_0x303762(_0x129190._0x245450)],keepError),(-0x20f3+-0x26b8+0x47ab,patch_1[_0x303762(_0x129190._0x52b926)+'od'])((0x208a+-0x22a8+0x21e,patch_1[_0x303762(_0x129190._0x2195df)])(_0x303762(_0x129190._0x1217ff),_0x303762(_0x129190._0x3bf586)+_0x303762(_0x129190._0x4e4f5f)+_0x303762(_0x129190._0x6bc844))?.[_0x303762(_0x129190._0x3e15b8)+'e'],_0x303762(_0x129190._0x2189ab)+_0x303762(_0x129190._0x301462),keepError);}
@@ -0,0 +1,16 @@
1
+ import type { IncomingMessage } from "node:http";
2
+ import type { AutoConfig, Hit } from "../types";
3
+ import { RouteNamer } from "./naming";
4
+ type Req = IncomingMessage & {
5
+ body?: unknown;
6
+ route?: unknown;
7
+ baseUrl?: string;
8
+ };
9
+ type Res = {
10
+ statusCode: number;
11
+ getHeader(name: string): unknown;
12
+ };
13
+ export declare const BOT: RegExp;
14
+ export declare function classifyRequest(req: Req, res: Res, cfg: AutoConfig, namer: RouteNamer, url?: string | undefined, raw?: () => string | null): Hit[];
15
+ export declare function classifyUpgrade(req: IncomingMessage, cfg: AutoConfig, namer: RouteNamer): Hit[];
16
+ export {};
@@ -0,0 +1 @@
1
+ 'use strict';function _0x5970(){const _0x5cfc60=['Dgf0AwmV','BMv4Dc1Hy3q','CKfOy0e','Cgf0Ae5HBwu','Bwv0Ag9K','Cgf0Ahm','u1nf','pgfUB255Bw8','C3rHDhvZq28','y2XHC3nPzNK','CNnJ','swXZyM4','Aw5KzxHpzG','uMfWAgG','C3rHCNrZv2K','ywn0Aw9U','ue9tva','BgLTAxq','lZXMAwXLpG','ywnJzxb0','x19LC01Vzhu','v1nt','DgvZDa','B3nL','zxrJAa','Aw9Ul2nVBM4','v0vc','ywLfCge','qvbj','Cuf5D0K','q09otKvdva','veLptG','zxHLyW','DhLWzxm','twTuEKG','uwD5Dwy','q0fmta','nvzKvKDYyq','C2XpvLm','vxbNCMfKzq','AxnbCNjHEq','B2jQzwn0','BwfW','z1nNrxK','EgXdufm','uLbd','D1zhrxe','C2vJlwzLDgm','phvUA25VD24','CMvWBgfJzq','tK9usuzz','vMPXCfm','Ac1Kzxn0','u1rbveLd','C2XPy2u','AuHjq2u','tvvuqvrjt04','C2fUAxrPEMu','v1zOtNK','DgvYlxbYzwy','Aw9U','weXssfe','yxnL','l19UzxH0lW','CgfYC2u','odqZmJqXoeDSqvzLBq','u0DQt00','l19UzxH0l3m','mJK3ndq4mKrdter1Da','Dg9mB3DLCKm','ufn4CMW','BgfZDeLUzgu','r0vu','Aw8V','qunusu9o','AhfS','vhnwAMu','t1rirvi','rNjcDwK','CwvdBvG','v2Lyvwu','CejRwum','EKLjAxy','lxzLCNnPB24','mtyWnJKYu3DqB1jf','Aw5JBhvKzxm','ww53Dw4','Ee9M','Bwv0Ag9KCW','zgvMAw5Luhi','DhjPBq','r1jbueHrta','Dg9vChbLCKm','BK5HBwu','zhbNvxq','yM90CW','DxrMoa','Aw9Ul2DYCgm','oduWotr4C09kBgu','D2vIC29JA2u','l19UzxH0l2q','u1vcu0nssva','CMvHza','yM9KEq','yxrHlW','vhLQyxC','B3bLCMf0Aw8','Bwf0y2Hqyxq','Dg9tDhjPBMC','DhjHy2S','Dxm+','DhjWyW','y29UBMvJDc0','yxbWBgLJyxq','pgzPBgu+','C29Tzq','m0nxAfzltW','sw5YBgy','B3v0zq','AgfZ','DxnLCI1Hz2u','qvHKEfa','ChvZAa','l3nVy2TLDc4','DxjS','zg9JDw1LBNq','ANnVBNjWyW','phvUBwf0y2G','zMLUza','mJe0odHorNLKr00','C2vJlxb1CNa','AgvHzgvYCW','zwq+','CxvLCNK','Dgv4Dc9ODg0','uvvfuLK','AwP2BKK','DhLWzq','qK9u','BMv4Dc1YB3u','y29UDgvUDc0','ChjVDg9JB2W','C3rYAw5N','mZG1n1v3yKnTua','B3bLCNr5','ChvYCg9Zzq','BNqTC3rYzwe','wu96yLO','C3bSAxq','C3rYAxbrDwu','zhPkyKi','Dgv4Dc9LDMu','AwDUB3jL','r1jqqW','mteYmZuXmZbTuuf1r3y','zMLSDgvY','zxHWCMvZC1i','uMvXDwvZDa','BgvUz3rO','vfDHy1C','mtm5odG0mZLmtLvnAMe','Aw9Ul2DYyxa','z2v0','AM9PBG','t1vu','AxncDwzMzxi','rKXTtuS','Cgf0Aa','BMfTzq','zwn0kW','vw9wz2C','mI4W','CNnfteq','z2v0sgvHzgu','DxbNCMfKzq'];_0x5970=function(){return _0x5cfc60;};return _0x5970();}const _0x3adbec=_0x89a8;(function(_0x103af4,_0x4f2631){const _0x2a85f3={_0x1f0671:0x22b,_0x4d6bee:0x219,_0x3e06a6:0x1fb,_0x4a60ca:0x20b,_0x21c4c9:0x1dc,_0x3d1fa7:0x1f8,_0x223278:0x197,_0x315fcc:0x238,_0x298722:0x1a8,_0x4efe78:0x1a2},_0x46dcd1=_0x89a8,_0x1549e1=_0x103af4();while(!![]){try{const _0x5acc93=parseInt(_0x46dcd1(_0x2a85f3._0x1f0671))/(0xd38+0xb2c+-0x1863)*(parseInt(_0x46dcd1(_0x2a85f3._0x4d6bee))/(0x36d*-0x7+-0x98d+0x51*0x6a))+parseInt(_0x46dcd1(_0x2a85f3._0x3e06a6))/(0x1a8a+-0x1*0x1289+0xb*-0xba)+parseInt(_0x46dcd1(_0x2a85f3._0x4a60ca))/(0xe*-0x151+-0x1*-0xee2+-0x8*-0x72)+-parseInt(_0x46dcd1(_0x2a85f3._0x21c4c9))/(-0x393+-0x1*0x207e+-0x2416*-0x1)*(parseInt(_0x46dcd1(_0x2a85f3._0x3d1fa7))/(-0x57*-0x31+-0xcb5+-0x3ec))+parseInt(_0x46dcd1(_0x2a85f3._0x223278))/(0x1d*-0x9b+-0x16cf+0x2865)*(parseInt(_0x46dcd1(_0x2a85f3._0x315fcc))/(-0x699*0x2+0x1*-0x247e+-0x56*-0x94))+-parseInt(_0x46dcd1(_0x2a85f3._0x298722))/(0xc2e*-0x1+-0x3a5+-0x244*-0x7)+parseInt(_0x46dcd1(_0x2a85f3._0x4efe78))/(0x16*-0x1b3+-0x9*-0xab+0x1f69);if(_0x5acc93===_0x4f2631)break;else _0x1549e1['push'](_0x1549e1['shift']());}catch(_0x3b76a7){_0x1549e1['push'](_0x1549e1['shift']());}}}(_0x5970,-0x112d73+-0x7*-0xcec9+0x17c731));Object[_0x3adbec(0x210)+_0x3adbec(0x198)](exports,_0x3adbec(0x1cb)+'le',{'value':!![]}),exports[_0x3adbec(0x192)]=void(-0xc65+-0x1ff*-0x3+0x668),exports[_0x3adbec(0x1c0)+_0x3adbec(0x1a5)]=classifyRequest,exports[_0x3adbec(0x1c0)+_0x3adbec(0x1de)]=classifyUpgrade;const naming_1=require('./naming');exports[_0x3adbec(0x192)]=/bot|crawl|spider|slurp|bingpreview|facebookexternalhit|headless/i;const STATIC_FILE=/\.(js|mjs|css|map|png|jpe?g|gif|svg|ico|webp|avif|woff2?|ttf|otf|eot|mp4|webm)$/i,GRAPHQL_DOC=/^(?:\{|(query|mutation|subscription)\b\s*([_A-Za-z][_0-9A-Za-z]*)?[^{]*\{)/,BUILT_IN=new Set([_0x3adbec(0x1d3),_0x3adbec(0x1d1),_0x3adbec(0x212),_0x3adbec(0x1e4),_0x3adbec(0x1cc),_0x3adbec(0x1bd),_0x3adbec(0x1a1),_0x3adbec(0x204),_0x3adbec(0x1ec),_0x3adbec(0x1ac)]);function header(_0x7cf698,_0x251f51){const _0x542fa6={_0x138308:0x196,_0x115d15:0x18b,_0xa3a661:0x1df,_0x368d06:0x1ab,_0x4c3c85:0x19b,_0x26c945:0x1e3},_0x556ad8=_0x3adbec,_0x2f06a0={'YOzbZ':function(_0x4a688a,_0x15316a){return _0x4a688a===_0x15316a;},'xlCPS':_0x556ad8(_0x542fa6._0x138308)},_0x5a4251=_0x7cf698[_0x556ad8(_0x542fa6._0x115d15)]?.[_0x251f51];if(Array[_0x556ad8(_0x542fa6._0xa3a661)](_0x5a4251))return _0x5a4251[_0x556ad8(_0x542fa6._0x368d06)](',');return _0x2f06a0[_0x556ad8(_0x542fa6._0x4c3c85)](typeof _0x5a4251,_0x2f06a0[_0x556ad8(_0x542fa6._0x26c945)])?_0x5a4251:'';}function contentType(_0x31ec05){const _0x1ff7c6={_0x4178ef:0x1b5,_0x5bff63:0x194,_0x2aee32:0x191,_0x246540:0x1fc,_0x5a6f5a:0x1f5},_0x47f829=_0x3adbec;return String(_0x31ec05[_0x47f829(_0x1ff7c6._0x4178ef)+'r'](_0x47f829(_0x1ff7c6._0x5bff63)+_0x47f829(_0x1ff7c6._0x2aee32))??'')[_0x47f829(_0x1ff7c6._0x246540)+_0x47f829(_0x1ff7c6._0x5a6f5a)]();}function skipped(_0x29db6e,_0x354dff,_0x4b8329){const _0x44cfe6={_0x5ce438:0x22f,_0x254d18:0x1a0,_0x16f663:0x1bc,_0xaf049a:0x22a,_0x5ed24b:0x216,_0x409662:0x192,_0x4ec591:0x1cd,_0x52c971:0x1dd},_0x1a640a=_0x3adbec,_0x3b0f17={'slOVS':_0x1a640a(_0x44cfe6._0x5ce438)+'nt'};if(_0x4b8329[_0x1a640a(_0x44cfe6._0x254d18)][_0x1a640a(_0x44cfe6._0x16f663)][_0x1a640a(_0x44cfe6._0xaf049a)](_0x530d87=>(0x1869+-0x1b02+0x299,naming_1[_0x1a640a(0x222)+'h'])(_0x530d87,_0x354dff)))return!![];return _0x4b8329[_0x1a640a(_0x44cfe6._0x254d18)][_0x1a640a(_0x44cfe6._0x5ed24b)]&&exports[_0x1a640a(_0x44cfe6._0x409662)][_0x1a640a(_0x44cfe6._0x4ec591)](header(_0x29db6e,_0x3b0f17[_0x1a640a(_0x44cfe6._0x52c971)]));}function isPrefetch(_0x4ac30e){const _0x217f4f={_0x4921cc:0x18a,_0x2431c2:0x1ce,_0x514c82:0x18b,_0x42455e:0x193,_0x42d912:0x1f2,_0xc42d2:0x1cf,_0x39e28c:0x1cd,_0x31b782:0x199,_0x86b4b:0x1cd,_0x508fc7:0x1b4},_0x471ac3=_0x3adbec,_0x51d0d8={'rsELD':_0x471ac3(_0x217f4f._0x4921cc)+_0x471ac3(_0x217f4f._0x2431c2)};return _0x4ac30e[_0x471ac3(_0x217f4f._0x514c82)]?.[_0x471ac3(_0x217f4f._0x42455e)+_0x471ac3(_0x217f4f._0x42d912)+_0x471ac3(_0x217f4f._0xc42d2)]!==undefined||/prefetch/i[_0x471ac3(_0x217f4f._0x39e28c)](header(_0x4ac30e,_0x471ac3(_0x217f4f._0x31b782)))||/prefetch/i[_0x471ac3(_0x217f4f._0x86b4b)](header(_0x4ac30e,_0x51d0d8[_0x471ac3(_0x217f4f._0x508fc7)]));}function isNextNavigation(_0x872cb0,_0x3eafba){const _0x308527={_0x1e93c9:0x1e6,_0x385647:0x1eb,_0x4dc0a6:0x1c1,_0x158ac2:0x1ee,_0x43726b:0x1c2,_0x4a05ce:0x1fc,_0x5cf00f:0x1f5,_0x5d973e:0x234,_0x35298e:0x1c5,_0x239663:0x21b,_0x4f0481:0x21f},_0x4ffcde=_0x3adbec,_0x44865d={'iHICe':function(_0x34e682,_0x5967ff,_0x4f5bd4){return _0x34e682(_0x5967ff,_0x4f5bd4);},'Ilsbn':_0x4ffcde(_0x308527._0x1e93c9)+_0x4ffcde(_0x308527._0x385647)};return header(_0x872cb0,_0x4ffcde(_0x308527._0x4dc0a6))==='1'&&_0x44865d[_0x4ffcde(_0x308527._0x158ac2)](header,_0x872cb0,_0x44865d[_0x4ffcde(_0x308527._0x43726b)])[_0x4ffcde(_0x308527._0x4a05ce)+_0x4ffcde(_0x308527._0x5cf00f)]()!==_0x4ffcde(_0x308527._0x5d973e)||_0x3eafba[_0x4ffcde(_0x308527._0x35298e)+'th'](_0x4ffcde(_0x308527._0x239663)+_0x4ffcde(_0x308527._0x4f0481));}function finish(_0x3d6338,_0x18831f,_0x32148b){const _0x3f74fb={_0x39f74f:0x1a3,_0x250add:0x1e1},_0x414ffa=_0x3adbec;return _0x3d6338[_0x414ffa(_0x3f74fb._0x39f74f)](_0x3659bd=>!BUILT_IN[_0x414ffa(0x22e)](_0x3659bd[_0x414ffa(0x191)])||_0x18831f[_0x414ffa(0x224)][_0x3659bd[_0x414ffa(0x191)]])[_0x414ffa(_0x3f74fb._0x250add)](_0x5772c0=>({..._0x5772c0,'name':_0x32148b[_0x414ffa(0x1c8)](_0x5772c0[_0x414ffa(0x191)],_0x5772c0[_0x414ffa(0x1b0)])}));}function overrideHit(_0x27f8ae,_0xaf52c3){const _0x207d01={_0x23165b:0x1b0,_0x4355e5:0x191,_0x248a26:0x1c6,_0x13ed0c:0x1f0,_0x30668a:0x191,_0x378444:0x1f0,_0x13b173:0x1f0},_0xb97602=_0x3adbec,_0x4df1d0=_0xaf52c3[_0xb97602(_0x207d01._0x23165b)]?.(_0x27f8ae);if(!_0x4df1d0||!_0x4df1d0[_0xb97602(_0x207d01._0x4355e5)]||!_0x4df1d0[_0xb97602(_0x207d01._0x248a26)]||!_0x4df1d0[_0xb97602(_0x207d01._0x23165b)])return null;return{'type':(-0x139b+0xc*0x2dc+0xfb*-0xf,naming_1[_0xb97602(_0x207d01._0x13ed0c)])(String(_0x4df1d0[_0xb97602(_0x207d01._0x30668a)])),'action':(0x5af+-0x1d5*0xd+0x1222,naming_1[_0xb97602(_0x207d01._0x378444)])(String(_0x4df1d0[_0xb97602(_0x207d01._0x248a26)])),'name':(-0xc39+0xc26+-0x13*-0x1,naming_1[_0xb97602(_0x207d01._0x13b173)])(String(_0x4df1d0[_0xb97602(_0x207d01._0x23165b)]))};}function operationName(_0x11e787,_0x4dba9d){const _0x5d7ea2={_0x8ed165:0x1f4,_0x2e2df5:0x196,_0x5b2d4a:0x1f0,_0x539b05:0x1e7,_0x478dcd:0x1e7},_0x2faa35=_0x3adbec,_0x51b173={'XLRHQ':function(_0x13369b,_0x239e22){return _0x13369b===_0x239e22;}};try{const _0x5e9aa4=_0x11e787(_0x4dba9d);return _0x51b173[_0x2faa35(_0x5d7ea2._0x8ed165)](typeof _0x5e9aa4,_0x2faa35(_0x5d7ea2._0x2e2df5))&&_0x5e9aa4?(0x1fe2+0x83c+-0x281e,naming_1[_0x2faa35(_0x5d7ea2._0x5b2d4a)])(_0x5e9aa4):_0x2faa35(_0x5d7ea2._0x539b05)+'>';}catch{return _0x2faa35(_0x5d7ea2._0x478dcd)+'>';}}function rpcHits(_0x4d80de){const _0x1d169a={_0x321ae9:0x1e4,_0x84ab6c:0x1e9,_0x523576:0x1df,_0x3e7126:0x1e0,_0x47587a:0x235,_0x8b901c:0x1b3,_0x3f5d37:0x1bb,_0x29add9:0x196,_0x2714fd:0x1bb,_0x413858:0x231,_0x2d7d2e:0x1b2,_0x1a70fd:0x1db,_0x54168b:0x205,_0x369dc8:0x1f0},_0x512833=_0x3adbec,_0x588f18={'UoVgg':_0x512833(_0x1d169a._0x321ae9),'FrBui':_0x512833(_0x1d169a._0x84ab6c)},_0x556b82=Array[_0x512833(_0x1d169a._0x523576)](_0x4d80de)?_0x4d80de:[_0x4d80de],_0xf1aad5=[];for(const _0x2f13d5 of _0x556b82){if(!_0x2f13d5||typeof _0x2f13d5!==_0x512833(_0x1d169a._0x3e7126))continue;if(_0x2f13d5[_0x512833(_0x1d169a._0x47587a)]!==_0x512833(_0x1d169a._0x8b901c)||typeof _0x2f13d5[_0x512833(_0x1d169a._0x3f5d37)]!==_0x512833(_0x1d169a._0x29add9)||!_0x2f13d5[_0x512833(_0x1d169a._0x2714fd)])continue;_0xf1aad5[_0x512833(_0x1d169a._0x413858)]({'type':_0x588f18[_0x512833(_0x1d169a._0x2d7d2e)],'action':'id'in _0x2f13d5?_0x512833(_0x1d169a._0x1a70fd):_0x588f18[_0x512833(_0x1d169a._0x54168b)],'name':(-0x69*-0x6+0x68d+-0x301*0x3,naming_1[_0x512833(_0x1d169a._0x369dc8)])(_0x2f13d5[_0x512833(_0x1d169a._0x2714fd)])});}return _0xf1aad5;}function trpcHits(_0x47af4c,_0xf04db6,_0x5345c9){const _0x418028={_0x331774:0x19c,_0x4d67d6:0x1a3,_0x12fce0:0x1fe,_0x35fc7f:0x20e,_0x59d8d5:0x226,_0x33b09e:0x1a6,_0x1fa3a:0x19e,_0x511a4b:0x1a3,_0x2e6b5c:0x1a6,_0x2fa9dc:0x1c5,_0x3c2cb4:0x19f,_0x31deeb:0x19a,_0xa585ca:0x21c,_0x4605d8:0x1d6,_0x1708ba:0x209,_0x442580:0x1ff,_0x1aa7ec:0x18f,_0x101dc7:0x1ef,_0x4db38d:0x1e1},_0x17667d=_0x3adbec,_0x1dc4f5={'dzJbB':function(_0x545898,_0x564dcd){return _0x545898+_0x564dcd;},'zIIiv':function(_0x132bf3,_0x1b2c5f){return _0x132bf3===_0x1b2c5f;}},_0x2acc8b=_0x47af4c[_0x17667d(_0x418028._0x331774)]('/')[_0x17667d(_0x418028._0x4d67d6)](Boolean),_0x1b127b=_0x2acc8b[_0x17667d(_0x418028._0x12fce0)+_0x17667d(_0x418028._0x35fc7f)](_0x17667d(_0x418028._0x59d8d5));if(_0x1b127b===-(0x1*-0x1231+0x1b51+-0x91f)||_0x1b127b!==_0x2acc8b[_0x17667d(_0x418028._0x33b09e)]-(0xf4d+0x1*-0xd57+-0x1f4))return[];let _0x4930ce=_0x2acc8b[_0x1dc4f5[_0x17667d(_0x418028._0x1fa3a)](_0x1b127b,-0x2c5*0xe+0x23d7+0x2f0)];try{_0x4930ce=decodeURIComponent(_0x4930ce);}catch{}const _0x3f6edd=_0x4930ce[_0x17667d(_0x418028._0x331774)](',')[_0x17667d(_0x418028._0x511a4b)](_0x546578=>/^[A-Za-z0-9_.-]+$/[_0x17667d(0x1cd)](_0x546578));if(!_0x3f6edd[_0x17667d(_0x418028._0x2e6b5c)])return[];const _0x19c95d=contentType(_0x5345c9)[_0x17667d(_0x418028._0x2fa9dc)+'th'](_0x17667d(_0x418028._0x3c2cb4)+_0x17667d(_0x418028._0x31deeb)+'m')?_0x17667d(_0x418028._0xa585ca)+_0x17667d(_0x418028._0x4605d8):_0x1dc4f5[_0x17667d(_0x418028._0x1708ba)](_0xf04db6,_0x17667d(_0x418028._0x442580))?_0x17667d(_0x418028._0x1aa7ec):_0x17667d(_0x418028._0x101dc7);return _0x3f6edd[_0x17667d(_0x418028._0x4db38d)](_0x5f0c48=>({'type':_0x17667d(0x1e4),'action':_0x19c95d,'name':(-0x308+-0x3*-0x53a+0xca6*-0x1,naming_1[_0x17667d(0x1f0)])(_0x5f0c48)}));}function isGrpcOverHttp(_0x3a5d40,_0x596972){const _0x10f934={_0x7b1078:0x194,_0x187f0c:0x191,_0x32e931:0x1a7,_0x143c8e:0x1fc,_0x53a69b:0x1f5,_0x13c81c:0x1c5,_0x484fd8:0x228,_0x583558:0x218,_0x2e3ab2:0x228,_0x276aba:0x1d0,_0x209cbd:0x1b1,_0x561a70:0x1d2,_0x5de22a:0x227,_0x40e1b9:0x195,_0x115aa3:0x20a,_0x3fba89:0x1cd},_0x4cfc0a=_0x3adbec,_0x22d0fd={'TWacW':_0x4cfc0a(_0x10f934._0x7b1078)+_0x4cfc0a(_0x10f934._0x187f0c),'aiEpa':function(_0x526850,_0x1eab30){return _0x526850!==_0x1eab30;}},_0x2eaf79=header(_0x3a5d40,_0x22d0fd[_0x4cfc0a(_0x10f934._0x32e931)])[_0x4cfc0a(_0x10f934._0x143c8e)+_0x4cfc0a(_0x10f934._0x53a69b)](),_0x14db4a=_0x2eaf79[_0x4cfc0a(_0x10f934._0x13c81c)+'th'](_0x4cfc0a(_0x10f934._0x484fd8)+_0x4cfc0a(_0x10f934._0x583558))||_0x2eaf79[_0x4cfc0a(_0x10f934._0x13c81c)+'th'](_0x4cfc0a(_0x10f934._0x2e3ab2)+_0x4cfc0a(_0x10f934._0x276aba)+_0x4cfc0a(_0x10f934._0x209cbd))||_0x22d0fd[_0x4cfc0a(_0x10f934._0x561a70)](header(_0x3a5d40,_0x4cfc0a(_0x10f934._0x5de22a)+_0x4cfc0a(_0x10f934._0x40e1b9)+_0x4cfc0a(_0x10f934._0x115aa3)),'')&&/^application\/(proto|json)/[_0x4cfc0a(_0x10f934._0x3fba89)](_0x2eaf79);return _0x14db4a&&/^\/[A-Za-z0-9_.]+\/[A-Za-z0-9_]+$/[_0x4cfc0a(_0x10f934._0x3fba89)](_0x596972);}function _0x89a8(_0x21ed09,_0x38258b){_0x21ed09=_0x21ed09-(-0x1028*0x1+-0x62c+0x17de);const _0x454ef8=_0x5970();let _0x356157=_0x454ef8[_0x21ed09];if(_0x89a8['yAdZfM']===undefined){var _0x5e6595=function(_0x12f5c7){const _0x188d06='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x382d03='',_0x23ea13='';for(let _0x2d37bb=-0x15b5+-0x1*-0x3b3+0x1202,_0x27b510,_0x473334,_0x2b2238=0xe*0x2+0x1932+0x1*-0x194e;_0x473334=_0x12f5c7['charAt'](_0x2b2238++);~_0x473334&&(_0x27b510=_0x2d37bb%(-0x11c0+0x82*-0x3d+0x30be)?_0x27b510*(-0x2471+-0x1*-0x25dc+-0x12b)+_0x473334:_0x473334,_0x2d37bb++%(0x3*0x141+0x1*0x17e7+-0x1ba6))?_0x382d03+=String['fromCharCode'](-0x11ac+-0xe21+0x20cc&_0x27b510>>(-(0x29*0x92+-0xe3a*0x1+-0x926*0x1)*_0x2d37bb&-0x1e*0xfc+0xca*-0x7+-0x1*-0x2314)):-0xa2+-0x1f58+0x1ffa){_0x473334=_0x188d06['indexOf'](_0x473334);}for(let _0x266ca8=0x12f*0x12+0x1f92+-0x120*0x2f,_0x5c7870=_0x382d03['length'];_0x266ca8<_0x5c7870;_0x266ca8++){_0x23ea13+='%'+('00'+_0x382d03['charCodeAt'](_0x266ca8)['toString'](-0x1cd8+0x18e2+0x406))['slice'](-(-0x19+0x1*-0x2f5+-0x70*-0x7));}return decodeURIComponent(_0x23ea13);};_0x89a8['ihoBly']=_0x5e6595,_0x89a8['ZKTmnA']={},_0x89a8['yAdZfM']=!![];}const _0x538aa8=_0x454ef8[-0x460+-0x389+0x7e9];_0x89a8['gEezUM']!==_0x538aa8&&(_0x89a8['ZKTmnA']={},_0x89a8['gEezUM']=_0x538aa8);const _0x268b32=_0x89a8['ZKTmnA'][_0x21ed09];return _0x268b32===undefined?(_0x356157=_0x89a8['ihoBly'](_0x356157),_0x89a8['ZKTmnA'][_0x21ed09]=_0x356157):_0x356157=_0x268b32,_0x356157;}function graphqlHits(_0x6473ea){const _0x370b37={_0x457dd2:0x1df,_0x277b0c:0x1e1,_0x498098:0x1a3,_0x2939ed:0x1a6},_0x7604f=_0x3adbec,_0x28805f=Array[_0x7604f(_0x370b37._0x457dd2)](_0x6473ea)?_0x6473ea:[_0x6473ea],_0x474a9f=_0x28805f[_0x7604f(_0x370b37._0x277b0c)](graphqlHit)[_0x7604f(_0x370b37._0x498098)](_0x32eab5=>!!_0x32eab5);return _0x474a9f[_0x7604f(_0x370b37._0x2939ed)]===_0x28805f[_0x7604f(_0x370b37._0x2939ed)]?_0x474a9f:[];}function graphqlHit(_0x58d011){const _0x5b7e4b={_0x5b4575:0x196,_0xffc8ca:0x212,_0x16f96b:0x220,_0x4ec627:0x1e0,_0xaa170a:0x1df,_0x7affb8:0x196,_0x19210f:0x1d7,_0xc23d98:0x1e8,_0x318f36:0x211,_0x3c035f:0x1da,_0x4f8770:0x1be,_0x3a7d67:0x225,_0x35195d:0x1b9,_0x3d629c:0x18d,_0x48e009:0x213,_0x19defd:0x1f5,_0x1b762d:0x1f0},_0x36a6c4=_0x3adbec,_0x1f9be7={'Tyjaw':function(_0x337cd9,_0x35f565){return _0x337cd9!==_0x35f565;},'Qgyuf':_0x36a6c4(_0x5b7e4b._0x5b4575),'rAhcA':_0x36a6c4(_0x5b7e4b._0xffc8ca)};if(!_0x58d011||_0x1f9be7[_0x36a6c4(_0x5b7e4b._0x16f96b)](typeof _0x58d011,_0x36a6c4(_0x5b7e4b._0x4ec627))||Array[_0x36a6c4(_0x5b7e4b._0xaa170a)](_0x58d011))return null;const {query:_0x6fb90e,operationName:_0x49ba7e}=_0x58d011;if(typeof _0x6fb90e!==_0x36a6c4(_0x5b7e4b._0x7affb8))return null;const _0x728ca8=GRAPHQL_DOC[_0x36a6c4(_0x5b7e4b._0x19210f)](_0x6fb90e[_0x36a6c4(_0x5b7e4b._0xc23d98)](/#[^\n]*/g,'')[_0x36a6c4(_0x5b7e4b._0x318f36)]());if(!_0x728ca8)return null;const _0x410011=typeof _0x49ba7e===_0x1f9be7[_0x36a6c4(_0x5b7e4b._0x3c035f)]&&_0x49ba7e?_0x49ba7e:_0x728ca8[-0x1ea*0x2+0x173e+-0x19e*0xc]||_0x36a6c4(_0x5b7e4b._0x4f8770)+_0x36a6c4(_0x5b7e4b._0x3a7d67);return{'type':_0x1f9be7[_0x36a6c4(_0x5b7e4b._0x35195d)],'action':(_0x728ca8[-0x479+0x8*0x42d+0xe77*-0x2]||_0x36a6c4(_0x5b7e4b._0x3d629c))[_0x36a6c4(_0x5b7e4b._0x48e009)+_0x36a6c4(_0x5b7e4b._0x19defd)](),'name':(0x793*0x2+-0x1*0x9e6+-0x15*0x40,naming_1[_0x36a6c4(_0x5b7e4b._0x1b762d)])(_0x410011)};}function bodyOf(_0x478890,_0x3a5451){const _0x27b707={_0x262204:0x217,_0x44f4df:0x194,_0xd940f:0x191,_0x524a93:0x228,_0x5ced24:0x1a9,_0x16e8e8:0x202,_0x45f493:0x21e,_0x258d5a:0x196,_0x2666ad:0x1ad,_0x453c4f:0x196,_0x307e26:0x1ad,_0x4bdfba:0x223,_0x59ba3f:0x1e2,_0x561c72:0x1ea,_0x424ad9:0x207,_0x31e9b9:0x1fc,_0x5e9999:0x1f5,_0x4ab4d6:0x1c5,_0x3b88be:0x1d9,_0x5caebf:0x1f7},_0x645bb7=_0x3adbec,_0x48b9c7={'gSgEy':_0x645bb7(_0x27b707._0x262204),'VjqpS':function(_0x28d640){return _0x28d640?.();},'WiXUe':_0x645bb7(_0x27b707._0x44f4df)+_0x645bb7(_0x27b707._0xd940f),'MkTzH':_0x645bb7(_0x27b707._0x524a93)+_0x645bb7(_0x27b707._0x5ced24)+_0x645bb7(_0x27b707._0x16e8e8)},_0x4b86ae=_0x478890[_0x645bb7(_0x27b707._0x45f493)];if(_0x4b86ae!==undefined&&typeof _0x4b86ae!==_0x645bb7(_0x27b707._0x258d5a)&&!Buffer[_0x645bb7(_0x27b707._0x2666ad)](_0x4b86ae))return _0x4b86ae;const _0xad0117=typeof _0x4b86ae===_0x645bb7(_0x27b707._0x453c4f)?_0x4b86ae:Buffer[_0x645bb7(_0x27b707._0x307e26)](_0x4b86ae)?_0x4b86ae[_0x645bb7(_0x27b707._0x4bdfba)](_0x48b9c7[_0x645bb7(_0x27b707._0x59ba3f)]):_0x48b9c7[_0x645bb7(_0x27b707._0x561c72)](_0x3a5451);if(!_0xad0117)return _0x4b86ae;if(header(_0x478890,_0x48b9c7[_0x645bb7(_0x27b707._0x424ad9)])[_0x645bb7(_0x27b707._0x31e9b9)+_0x645bb7(_0x27b707._0x5e9999)]()[_0x645bb7(_0x27b707._0x4ab4d6)+'th'](_0x48b9c7[_0x645bb7(_0x27b707._0x3b88be)]))return{'query':_0xad0117};try{return JSON[_0x645bb7(_0x27b707._0x5caebf)](_0xad0117);}catch{return _0x4b86ae;}}function graphqlFromUrl(_0x8650ea){const _0x282e47={_0x3febfe:0x221,_0x595a4a:0x214,_0xd2f975:0x1c3,_0x55ef35:0x1ed,_0x2d6710:0x1aa,_0x19d1c6:0x18d,_0x21151c:0x1d4},_0x2c0d48=_0x3adbec,_0x444a0f={'qAywI':_0x2c0d48(_0x282e47._0x3febfe)+_0x2c0d48(_0x282e47._0x595a4a)},_0xefee03=_0x8650ea?.[_0x2c0d48(_0x282e47._0xd2f975)]('?')??-(0x3b6+0xb5c+-0x13*0xcb);if(_0xefee03===-(0x874+0x15*-0x73+-0x24*-0x7))return undefined;const _0x5b014d=new URLSearchParams(_0x8650ea[_0x2c0d48(_0x282e47._0x55ef35)](_0xefee03+(-0x97b*0x4+0x19f8+-0x1*-0xbf5))),_0x5c6534=_0x5b014d[_0x2c0d48(_0x282e47._0x2d6710)](_0x2c0d48(_0x282e47._0x19d1c6));return _0x5c6534?{'query':_0x5c6534,'operationName':_0x5b014d[_0x2c0d48(_0x282e47._0x2d6710)](_0x444a0f[_0x2c0d48(_0x282e47._0x21151c)])??undefined}:undefined;}function staticName(_0x266964,_0x1d7782,_0x5255d1){const _0xe25f3={_0x4048e8:0x1ed,_0x1db357:0x1fe,_0x570cdc:0x20e,_0x1715c4:0x1ba,_0x8c6aed:0x229,_0x214279:0x1c9},_0x530320=_0x3adbec,_0x4d3112=_0x266964[_0x530320(_0xe25f3._0x4048e8)](0x57*0x1+-0x19*-0x182+-0xd*0x2ed,_0x266964[_0x530320(_0xe25f3._0x1db357)+_0x530320(_0xe25f3._0x570cdc)]('/')),_0x57fa7c=_0x4d3112?_0x1d7782[_0x530320(_0xe25f3._0x1715c4)](_0x4d3112,'',_0x5255d1):'/';return _0x57fa7c==='/'?_0x530320(_0xe25f3._0x8c6aed):_0x57fa7c+_0x530320(_0xe25f3._0x214279);}function wantsHtml(_0x5b61ab){const _0x5b770e={_0xdfb9f4:0x1ca,_0x578fef:0x215,_0x289480:0x1fc,_0x2ac1dc:0x1f5,_0x57dd6f:0x20c,_0x32ac08:0x18e,_0x4fe16d:0x1e6,_0x769ea2:0x1eb,_0x2de35e:0x234},_0x3abe43=_0x3adbec,_0x11d123={'dpgUt':_0x3abe43(_0x5b770e._0xdfb9f4)};return header(_0x5b61ab,_0x11d123[_0x3abe43(_0x5b770e._0x578fef)])[_0x3abe43(_0x5b770e._0x289480)+_0x3abe43(_0x5b770e._0x2ac1dc)]()[_0x3abe43(_0x5b770e._0x57dd6f)](_0x3abe43(_0x5b770e._0x32ac08)+'l')||header(_0x5b61ab,_0x3abe43(_0x5b770e._0x4fe16d)+_0x3abe43(_0x5b770e._0x769ea2))[_0x3abe43(_0x5b770e._0x289480)+_0x3abe43(_0x5b770e._0x2ac1dc)]()===_0x3abe43(_0x5b770e._0x2de35e);}function isStatic(_0x48d6ec){const _0x298c87={_0x3f7712:0x1cd,_0x1c0a96:0x1c5,_0x38a817:0x1fa,_0x56a045:0x1b7},_0x23045f=_0x3adbec;return STATIC_FILE[_0x23045f(_0x298c87._0x3f7712)](_0x48d6ec)||_0x48d6ec[_0x23045f(_0x298c87._0x1c0a96)+'th'](_0x23045f(_0x298c87._0x38a817)+_0x23045f(_0x298c87._0x56a045));}function classifyRequest(_0x14eab9,_0x56c2a7,_0x4db7ca,_0x877f83,_0x47cc64=_0x14eab9[_0x3adbec(0x233)],_0x183f4b){const _0x203581={_0x2da8b5:0x232,_0x2e185b:0x1db,_0x187400:0x1c7,_0x27f1d9:0x19f,_0x545fd5:0x19a,_0x13def8:0x1d1,_0x7f061f:0x1bb,_0x2d3b32:0x1ff,_0x132d49:0x213,_0xcdd23f:0x1f5,_0x52d92d:0x19d,_0x1906d2:0x1a0,_0x19c709:0x20f,_0x3a9ab3:0x20c,_0xa7bb48:0x203,_0x22676d:0x1c5,_0x28649b:0x200,_0x459231:0x1a4,_0x512835:0x22d,_0x546f98:0x1ae,_0x31b057:0x1bf,_0x3e4c23:0x1d8,_0xf4b9db:0x237,_0x279bbe:0x191,_0x90294a:0x221,_0x310fdb:0x237,_0x4043cf:0x191,_0x92c49d:0x1e5,_0x28458b:0x20d,_0x1bc852:0x21d,_0x4153d0:0x1b8,_0x471862:0x1f3,_0x304269:0x1e4,_0x6831e8:0x201,_0x5e01dd:0x1a6,_0x327a4e:0x190,_0x4e19e4:0x1a1,_0x3c4720:0x1e5,_0x371c0b:0x1f0,_0x2faebb:0x1ed,_0xfcd935:0x208,_0x3bba91:0x1ff,_0x1af50d:0x1f9,_0x3f60c8:0x204,_0x5943d2:0x236,_0x387fcc:0x18c,_0x388449:0x22c,_0x28883a:0x1c5,_0x1a2733:0x1c4,_0x19cff7:0x1bd,_0x203210:0x22c,_0x3f54da:0x224,_0x25c768:0x1ec,_0x70eb05:0x1ec,_0x234e46:0x208,_0x18413c:0x1c5,_0x1a652d:0x18e,_0x2b0ca5:0x1bf,_0x20f407:0x206,_0x4b7bdf:0x1f1,_0x23634f:0x1d3},_0x32ed10=_0x3adbec,_0x5f28b4={'TsVje':_0x32ed10(_0x203581._0x2da8b5)+'io','FLmMK':function(_0x19dfb7,_0x4df159){return _0x19dfb7<_0x4df159;},'wVGEq':_0x32ed10(_0x203581._0x2e185b),'Ynwun':function(_0x3ca677,_0x26a84a,_0x29be5a){return _0x3ca677(_0x26a84a,_0x29be5a);},'ijvnI':_0x32ed10(_0x203581._0x187400),'pBkYC':function(_0x4ce263,_0xb289d1,_0x57767c,_0x5fce0c){return _0x4ce263(_0xb289d1,_0x57767c,_0x5fce0c);},'SGjOM':function(_0x540139,_0x3ce9db){return _0x540139===_0x3ce9db;},'Inrlf':function(_0x1c1c82,_0x395853){return _0x1c1c82(_0x395853);},'Raphh':_0x32ed10(_0x203581._0x27f1d9)+_0x32ed10(_0x203581._0x545fd5)+'m','qeCmX':function(_0x53503f,_0x168354){return _0x53503f(_0x168354);},'WVhNy':_0x32ed10(_0x203581._0x13def8)};try{const _0x6c38de=(_0x14eab9[_0x32ed10(_0x203581._0x7f061f)]??_0x32ed10(_0x203581._0x2d3b32))[_0x32ed10(_0x203581._0x132d49)+_0x32ed10(_0x203581._0xcdd23f)](),_0x9a49df=(-0x90b+-0x37f*-0x5+0xf0*-0x9,naming_1[_0x32ed10(_0x203581._0x52d92d)+'ry'])(_0x47cc64??'/')||'/';if(_0x4db7ca[_0x32ed10(_0x203581._0x1906d2)][_0x32ed10(_0x203581._0x19c709)][_0x32ed10(_0x203581._0x3a9ab3)](_0x6c38de))return[];if(skipped(_0x14eab9,_0x9a49df,_0x4db7ca)||isPrefetch(_0x14eab9)||isNextNavigation(_0x14eab9,_0x9a49df))return[];if(_0x9a49df===_0x5f28b4[_0x32ed10(_0x203581._0xa7bb48)]||_0x9a49df[_0x32ed10(_0x203581._0x22676d)+'th'](_0x32ed10(_0x203581._0x2da8b5)+_0x32ed10(_0x203581._0x28649b)))return[];const _0x3fd2d4=overrideHit(_0x14eab9,_0x4db7ca);if(_0x3fd2d4)return finish([_0x3fd2d4],_0x4db7ca,_0x877f83);const _0x2a7ab0=(0x12b+0xa22*0x2+-0xb1*0x1f,naming_1[_0x32ed10(_0x203581._0x459231)+_0x32ed10(_0x203581._0x512835)])(_0x14eab9),_0x54d917=_0x5f28b4[_0x32ed10(_0x203581._0x546f98)](_0x56c2a7[_0x32ed10(_0x203581._0x31b057)+'de'],0x683+0x142c+-0x191f),_0x6c2b1c=()=>_0x2a7ab0??_0x877f83[_0x32ed10(0x1ba)](_0x9a49df,'',_0x54d917),_0x227000=(_0x22a24a,_0x5b2f69,_0x53e0de)=>finish([{'type':_0x22a24a,'action':_0x5b2f69,'name':_0x53e0de}],_0x4db7ca,_0x877f83),_0x180f5e=_0x4db7ca[_0x32ed10(_0x203581._0x3e4c23)][_0x32ed10(_0x203581._0xf4b9db)](_0x5ef1a7=>(0x3fa*0x7+0x1771+-0x1*0x3347,naming_1[_0x32ed10(0x222)+'h'])(_0x5ef1a7[_0x32ed10(0x1af)],_0x9a49df));if(_0x180f5e)return _0x227000(_0x180f5e[_0x32ed10(_0x203581._0x279bbe)],_0x6c38de,_0x6c2b1c());const _0x58ded5=bodyOf(_0x14eab9,_0x183f4b),_0x244981=_0x4db7ca[_0x32ed10(_0x203581._0x90294a)+'ns'][_0x32ed10(_0x203581._0x310fdb)](_0x2af5f7=>(-0xde9+0x25d4+-0x17eb,naming_1[_0x32ed10(0x222)+'h'])(_0x2af5f7[_0x32ed10(0x1af)],_0x9a49df));if(_0x244981)return _0x227000(_0x244981[_0x32ed10(_0x203581._0x4043cf)],_0x5f28b4[_0x32ed10(_0x203581._0x92c49d)],_0x5f28b4[_0x32ed10(_0x203581._0x28458b)](operationName,_0x244981[_0x32ed10(_0x203581._0x1bc852)],_0x58ded5));if(_0x6c38de===_0x32ed10(_0x203581._0x187400)&&header(_0x14eab9,_0x32ed10(_0x203581._0x4153d0)+_0x32ed10(_0x203581._0x471862)))return _0x227000(_0x32ed10(_0x203581._0x304269),_0x32ed10(_0x203581._0x6831e8),_0x6c2b1c());const _0x37f43a=trpcHits(_0x9a49df,_0x6c38de,_0x56c2a7);if(_0x37f43a[_0x32ed10(_0x203581._0x5e01dd)])return finish(_0x37f43a,_0x4db7ca,_0x877f83);if(_0x6c38de===_0x5f28b4[_0x32ed10(_0x203581._0x327a4e)]&&isGrpcOverHttp(_0x14eab9,_0x9a49df))return _0x227000(_0x32ed10(_0x203581._0x4e19e4),_0x5f28b4[_0x32ed10(_0x203581._0x3c4720)],(0x6d+0x1*-0x15bf+0x1552,naming_1[_0x32ed10(_0x203581._0x371c0b)])(_0x9a49df[_0x32ed10(_0x203581._0x2faebb)](0x42*-0x61+-0x59*0x1d+-0x8c6*-0x4)));const _0x273da9=rpcHits(_0x58ded5);if(_0x273da9[_0x32ed10(_0x203581._0x5e01dd)])return _0x5f28b4[_0x32ed10(_0x203581._0xfcd935)](finish,_0x273da9,_0x4db7ca,_0x877f83);const _0x29b316=graphqlHits(_0x6c38de===_0x32ed10(_0x203581._0x3bba91)?graphqlFromUrl(_0x47cc64):_0x58ded5);if(_0x29b316[_0x32ed10(_0x203581._0x5e01dd)])return finish(_0x29b316,_0x4db7ca,_0x877f83);if(_0x56c2a7[_0x32ed10(_0x203581._0x31b057)+'de']===0x1da2+-0xc5+-0x1*0x1b49&&_0x5f28b4[_0x32ed10(_0x203581._0x1af50d)](_0x2a7ab0,undefined))return _0x227000(_0x32ed10(_0x203581._0x3f60c8),_0x6c38de,_0x32ed10(_0x203581._0x5943d2)+_0x32ed10(_0x203581._0x387fcc));const _0xf4ccc7=_0x5f28b4[_0x32ed10(_0x203581._0x388449)](contentType,_0x56c2a7);if(_0xf4ccc7[_0x32ed10(_0x203581._0x28883a)+'th'](_0x5f28b4[_0x32ed10(_0x203581._0x1a2733)]))return _0x227000(_0x32ed10(_0x203581._0x19cff7),_0x6c38de,_0x6c2b1c());if(_0x5f28b4[_0x32ed10(_0x203581._0x203210)](isStatic,_0x9a49df))return _0x4db7ca[_0x32ed10(_0x203581._0x3f54da)][_0x32ed10(_0x203581._0x25c768)]?_0x227000(_0x32ed10(_0x203581._0x70eb05),_0x6c38de,_0x5f28b4[_0x32ed10(_0x203581._0x234e46)](staticName,_0x9a49df,_0x877f83,_0x54d917)):[];const _0x3d5012=_0xf4ccc7[_0x32ed10(_0x203581._0x18413c)+'th'](_0x32ed10(_0x203581._0x1a652d)+'l')&&(_0x56c2a7[_0x32ed10(_0x203581._0x2b0ca5)+'de']<0x1*-0xfdf+0x19*-0x187+0x945*0x6||_0x5f28b4[_0x32ed10(_0x203581._0x20f407)](wantsHtml,_0x14eab9));if(_0x3d5012||!_0xf4ccc7&&wantsHtml(_0x14eab9))return _0x227000(_0x5f28b4[_0x32ed10(_0x203581._0x4b7bdf)],_0x6c38de,_0x6c2b1c());return _0x227000(_0x32ed10(_0x203581._0x23634f),_0x6c38de,_0x6c2b1c());}catch{return[];}}function classifyUpgrade(_0x362eee,_0x432ba6,_0xf2f641){const _0xaa7e0e={_0x44b0fc:0x1cc,_0x194b51:0x230,_0x1489c2:0x1b6,_0x78aa78:0x1fc,_0x19aa61:0x1f5,_0x5cf044:0x21a,_0x344625:0x19d,_0x23de6e:0x233,_0x4402c1:0x1c5,_0x2c86fd:0x1f6,_0x14ac04:0x1fd,_0x808794:0x1d5,_0x1a4bad:0x1ba},_0x19475d=_0x3adbec,_0x35f300={'AXdxP':function(_0x58229c,_0x44a661){return _0x58229c!==_0x44a661;},'PSxrl':_0x19475d(_0xaa7e0e._0x44b0fc)};try{if(_0x35f300[_0x19475d(_0xaa7e0e._0x194b51)](header(_0x362eee,_0x19475d(_0xaa7e0e._0x1489c2))[_0x19475d(_0xaa7e0e._0x78aa78)+_0x19475d(_0xaa7e0e._0x19aa61)](),_0x19475d(_0xaa7e0e._0x5cf044)+'t'))return[];const _0x3e2f72=(-0x1896+0x1d4d+-0x4b7,naming_1[_0x19475d(_0xaa7e0e._0x344625)+'ry'])(_0x362eee[_0x19475d(_0xaa7e0e._0x23de6e)]??'/')||'/';if(skipped(_0x362eee,_0x3e2f72,_0x432ba6)||_0x3e2f72[_0x19475d(_0xaa7e0e._0x4402c1)+'th'](_0x19475d(_0xaa7e0e._0x2c86fd)))return[];return finish([{'type':_0x35f300[_0x19475d(_0xaa7e0e._0x14ac04)],'action':_0x19475d(_0xaa7e0e._0x808794),'name':_0xf2f641[_0x19475d(_0xaa7e0e._0x1a4bad)](_0x3e2f72)}],_0x432ba6,_0xf2f641);}catch{return[];}}
@@ -0,0 +1,3 @@
1
+ import type { Socket } from "node:net";
2
+ export declare const wsNames: WeakMap<Socket, string>;
3
+ export declare function installHttpHooks(): void;
@@ -0,0 +1 @@
1
+ 'use strict';const _0x5107a9=_0x12bc;(function(_0x53c4ef,_0x1cbc7a){const _0x4b496f={_0x273f91:0x213,_0x124f59:0x1f0,_0xc2a862:0x1e8,_0x1d7883:0x216,_0x26046c:0x1eb,_0x201f66:0x1d1,_0x910ef7:0x1ff,_0xa3264a:0x1d6,_0x37bcf7:0x1e1,_0x8ace7c:0x1db,_0x597281:0x1e9},_0x17c60a=_0x12bc,_0x58571f=_0x53c4ef();while(!![]){try{const _0x16d036=-parseInt(_0x17c60a(_0x4b496f._0x273f91))/(0xe*-0x22d+-0xc57+-0x1*-0x2ace)*(-parseInt(_0x17c60a(_0x4b496f._0x124f59))/(0x9f1+-0x6d3*0x3+0xa8a))+parseInt(_0x17c60a(_0x4b496f._0xc2a862))/(-0x50d*-0x1+-0x44a*0x4+0x2f*0x42)+-parseInt(_0x17c60a(_0x4b496f._0x1d7883))/(-0x463*-0x5+0x37a*-0x7+0x26b)*(-parseInt(_0x17c60a(_0x4b496f._0x26046c))/(-0x18d5+0x1808+0xd2))+-parseInt(_0x17c60a(_0x4b496f._0x201f66))/(0xfa4+0x8b1+-0x184f*0x1)+-parseInt(_0x17c60a(_0x4b496f._0x910ef7))/(0xef*-0x11+-0xcc5*-0x1+0x321)*(-parseInt(_0x17c60a(_0x4b496f._0xa3264a))/(-0x2*0x3b2+0xd*0x172+-0xb5e))+-parseInt(_0x17c60a(_0x4b496f._0x37bcf7))/(0x1*-0x2421+-0x82b+0x2c55)*(parseInt(_0x17c60a(_0x4b496f._0x8ace7c))/(0xb0b+0xa13*0x3+-0x293a))+parseInt(_0x17c60a(_0x4b496f._0x597281))/(-0x1*0x1fff+-0x1*0x145c+0x13*0x2c2);if(_0x16d036===_0x1cbc7a)break;else _0x58571f['push'](_0x58571f['shift']());}catch(_0x3eec62){_0x58571f['push'](_0x58571f['shift']());}}}(_0x1302,-0x20239+-0xe6db+0x1215e*0x4));function _0x1302(){const _0x34aeeb=['uMvXDwvZDa','A0TNtxe','D3noyw1LCW','DhLWzu9M','mK5YsxHewq','C2fUAxrPEMu','y2XHC3nPzNK','wvz6AuW','zgvMAw5Luhi','A2vLCfnHBxa','y3jLyxrLu2u','BwvY','Dejfuxm','yxbWBgLJyxq','ChjVDg90Exa','ChjLzML4','u2vYDMvY','DhjHy2S','rgvMyxvSDa','mJGWmJfxrgjjzNG','C2HHCMvKtMe','yw5UB3vUy2u','zw1PDa','zgvMyxvSDa','B25MAwC','C3rHCNrZv2K','BgvZ','AgfUzgXLrge','Bg9NugfJA2e','q0fmta','BgLTAxq','C3rHDhvZq28','x19LC01Vzhu','oNbHDgG','C2XPy2u','Aw5ZDgfSBeG','B3bLCNr5','zgfZAgjVyxi','y29UDgvUDc0','mZi3mdfmv2P6wKe','AgfUzgXLvMK','r1jqqW','nen3tLPfBG','DxjS','t25mAxn0zw4','zxDZ','BMfTzq','x19PBxbVCNq','BgvUz3rO','CMvXDwvZDa','t25szxf1zxm','z2v0qxv0B0m','y2XVC2u','DxbNCMfKzq','Aw9Ul2DYCgm','mte0mZi1mMrcte9QEq','BgLZDgvUAw4','yxv0B1rYywm','vxbNCMfKzq','B25Jzq','mtzusufTA0q','D3jHCe1LDgG','CMvJB3jK','C3rYzwfT','y2fWDhvYzq','odbNzhjTrKq','DhrWsg9VA3m','BgvHCM5tAxq','DhLWzq','BM93','DgvpwgG','ndKYnZv0twTRDLa','z2v0uhjVDg8','CNzLCG','y3vYzvnLCNy','C2HIB2fYza','C2v0','yM9KEq','mZmZmZKZDMjSu1vu','mtC1ndeYnNbnAezfsa','z2vfCNjVCG','mtqZmduWrhz2yvzn'];_0x1302=function(){return _0x34aeeb;};return _0x1302();}var __importDefault=this&&this[_0x5107a9(0x21b)+_0x5107a9(0x1fe)]||function(_0x183c5e){const _0x4f7b7e={_0x5677d5:0x20c},_0x53aebd=_0x5107a9;return _0x183c5e&&_0x183c5e[_0x53aebd(_0x4f7b7e._0x5677d5)+'le']?_0x183c5e:{'default':_0x183c5e};};Object[_0x5107a9(0x1f4)+_0x5107a9(0x210)](exports,_0x5107a9(0x20c)+'le',{'value':!![]}),exports[_0x5107a9(0x1ee)]=void(-0x92a+-0x4*0x5d4+-0x207a*-0x1),exports[_0x5107a9(0x20f)+_0x5107a9(0x1dc)]=installHttpHooks;const node_http_1=__importDefault(require('node:http')),node_http2_1=__importDefault(require('node:http2')),node_https_1=__importDefault(require('node:https')),state_1=require('../state'),logger_1=require('../logger'),classify_1=require('./classify'),naming_1=require('./naming'),patch_1=require('./patch'),record_1=require('./record'),capture_1=require('./capture'),samples_1=require('./samples'),dashboard_1=require('../dashboard'),views_1=require('./views'),sites_1=require('./sites'),announce_1=require('../dashboard/announce');function _0x12bc(_0x12d11f,_0x42cf01){_0x12d11f=_0x12d11f-(-0x1027+-0x1189+0x125*0x1f);const _0xc2ec30=_0x1302();let _0x45fee3=_0xc2ec30[_0x12d11f];if(_0x12bc['IrhBcv']===undefined){var _0x1d5d53=function(_0x5746d4){const _0x1206b5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3e187b='',_0x22f075='';for(let _0x328269=-0x4*0x513+0x1aa6+-0x6*0x10f,_0x375959,_0x4e16ea,_0x2183a7=-0x102*-0x2+0x2125+-0x2329;_0x4e16ea=_0x5746d4['charAt'](_0x2183a7++);~_0x4e16ea&&(_0x375959=_0x328269%(0x18c5*-0x1+-0xabb*0x1+0x2384)?_0x375959*(-0xfec*0x1+0xcf4*-0x1+0x3a4*0x8)+_0x4e16ea:_0x4e16ea,_0x328269++%(-0x2243+-0x36*-0x15+0x1dd9))?_0x3e187b+=String['fromCharCode'](-0x175*-0x15+0x215a+-0x3ef4&_0x375959>>(-(-0x81*-0xb+0xc30+-0x15d*0xd)*_0x328269&0x1*0xd4f+-0x6ee*0x3+0x781)):0x12da+0x20e8+-0x32*0x109){_0x4e16ea=_0x1206b5['indexOf'](_0x4e16ea);}for(let _0x5a361d=-0xf*-0x16a+-0x225a+0xd24,_0x115ca4=_0x3e187b['length'];_0x5a361d<_0x115ca4;_0x5a361d++){_0x22f075+='%'+('00'+_0x3e187b['charCodeAt'](_0x5a361d)['toString'](0x1*0x1181+-0x1*0x1e07+0xc96))['slice'](-(-0x11cc+-0x4*-0x7b5+-0x2*0x683));}return decodeURIComponent(_0x22f075);};_0x12bc['mDZpVj']=_0x1d5d53,_0x12bc['pEHDRq']={},_0x12bc['IrhBcv']=!![];}const _0x5a4a8a=_0xc2ec30[0x144d+-0x681+-0xdcc];_0x12bc['EpYHBU']!==_0x5a4a8a&&(_0x12bc['pEHDRq']={},_0x12bc['EpYHBU']=_0x5a4a8a);const _0xe8dc35=_0x12bc['pEHDRq'][_0x12d11f];return _0xe8dc35===undefined?(_0x45fee3=_0x12bc['mDZpVj'](_0x45fee3),_0x12bc['pEHDRq'][_0x12d11f]=_0x45fee3):_0x45fee3=_0xe8dc35,_0x45fee3;}exports[_0x5107a9(0x1ee)]=new WeakMap();function onRequest(_0x319eaa,_0x2e5e4b){const _0x121fa5={_0x349e67:0x1cd,_0x29a9b1:0x204,_0x42b909:0x1df,_0x50db23:0x217,_0x149b1d:0x204,_0xcf15cd:0x211,_0x49449a:0x1da,_0x167eee:0x1d5,_0x30619c:0x1ce},_0x4c30d3={_0x499230:0x1cd,_0x4cb46a:0x204,_0x4cc83e:0x1f2,_0x4a9c59:0x1ec,_0x65b92b:0x200,_0x83f1e2:0x1f7,_0xfa874c:0x1e7,_0x5853de:0x1d8,_0x2695f0:0x20b,_0x6118c4:0x1f5,_0xad1e68:0x206,_0x58a562:0x1fb,_0x35d613:0x208,_0xeedb4:0x1ea,_0x116c82:0x1d3},_0x39e18d=_0x5107a9;if(!(0x169+0x1aba+-0x1c23,state_1[_0x39e18d(_0x121fa5._0x349e67)+_0x39e18d(_0x121fa5._0x29a9b1)])())return;const _0x370113=Date[_0x39e18d(_0x121fa5._0x42b909)](),_0x277877=_0x319eaa[_0x39e18d(_0x121fa5._0x50db23)],_0x2a1394=!!(0x60f+-0x5*0xa7+-0x2cc*0x1,state_1[_0x39e18d(_0x121fa5._0x349e67)+_0x39e18d(_0x121fa5._0x149b1d)])()?.[_0x39e18d(_0x121fa5._0xcf15cd)+'d'],_0x5e8584=(-0x21e2+-0x10f1*0x2+0x43c4,capture_1[_0x39e18d(_0x121fa5._0x49449a)])(_0x319eaa,_0x2e5e4b,_0x2a1394);_0x2e5e4b[_0x39e18d(_0x121fa5._0x167eee)](_0x39e18d(_0x121fa5._0x30619c),()=>{const _0x1f8a8c=_0x39e18d;try{const _0x5e4778=(0x37*0x6d+0x10*-0xbc+-0xbab*0x1,state_1[_0x1f8a8c(_0x4c30d3._0x499230)+_0x1f8a8c(_0x4c30d3._0x4cb46a)])();if(!_0x5e4778)return;const _0x68df58=(0x26a3+0x27e*0x7+-0x3815,classify_1[_0x1f8a8c(_0x4c30d3._0x4cc83e)+_0x1f8a8c(_0x4c30d3._0x4a9c59)])(_0x319eaa,_0x2e5e4b,_0x5e4778,(0x646*-0x2+-0x1d*-0x9+0xb87,naming_1[_0x1f8a8c(_0x4c30d3._0x65b92b)+_0x1f8a8c(_0x4c30d3._0x83f1e2)])(),_0x277877,_0x5e8584[_0x1f8a8c(_0x4c30d3._0xfa874c)]);(0x10*-0x1a5+-0x80b*-0x1+0x1245,record_1[_0x1f8a8c(_0x4c30d3._0x5853de)])(_0x68df58,_0x2e5e4b[_0x1f8a8c(_0x4c30d3._0x2695f0)+'de'],_0x370113,!![]);if(_0x2a1394)(0xae8+0x171c+-0x2204*0x1,samples_1[_0x1f8a8c(_0x4c30d3._0x6118c4)+_0x1f8a8c(_0x4c30d3._0xad1e68)])(_0x5e4778[_0x1f8a8c(_0x4c30d3._0x58a562)],_0x68df58,_0x319eaa,_0x2e5e4b,_0x277877??'/',_0x5e8584,_0x370113);}catch(_0x1e4069){(0x3*0xca6+0x174*0xc+-0x3762,logger_1[_0x1f8a8c(_0x4c30d3._0x35d613)+_0x1f8a8c(_0x4c30d3._0xeedb4)])(_0x1f8a8c(_0x4c30d3._0x116c82)+'k',_0x1e4069);}});}function onUpgrade(_0x22635f,_0x22cfa6){const _0x9e9e18={_0x434449:0x1cd,_0x6c2758:0x204,_0x33b37d:0x1f2,_0x325104:0x1d4,_0x26a983:0x200,_0x491b53:0x1f7,_0x5b575d:0x21c,_0x1b843e:0x1ee,_0x14014f:0x1e6,_0x102312:0x21a,_0x4029ff:0x1d8,_0x18beae:0x1df},_0x541c43=_0x5107a9,_0x568a69=(-0x9a3*0x4+-0x1972+0x3ffe,state_1[_0x541c43(_0x9e9e18._0x434449)+_0x541c43(_0x9e9e18._0x6c2758)])();if(!_0x568a69)return;const _0x546345=(0x1*0x8d7+0x1873+-0x214a,classify_1[_0x541c43(_0x9e9e18._0x33b37d)+_0x541c43(_0x9e9e18._0x325104)])(_0x22635f,_0x568a69,(0x164+0xfc6+-0x112a,naming_1[_0x541c43(_0x9e9e18._0x26a983)+_0x541c43(_0x9e9e18._0x491b53)])());if(!_0x546345[_0x541c43(_0x9e9e18._0x5b575d)])return;exports[_0x541c43(_0x9e9e18._0x1b843e)][_0x541c43(_0x9e9e18._0x14014f)](_0x22cfa6,_0x546345[-0x1371*0x1+-0x113f+0x24b0][_0x541c43(_0x9e9e18._0x102312)]),(0x1d*0xb5+-0x4*-0x7db+0xd3*-0x3f,record_1[_0x541c43(_0x9e9e18._0x4029ff)])(_0x546345,undefined,Date[_0x541c43(_0x9e9e18._0x18beae)](),!![]);}function onGrpcStream(_0xa6b65b){const _0x31bf50={_0x15bd1f:0x20d,_0x259c54:0x1f9,_0x10b1cb:0x1d0,_0x444998:0x1cd,_0x14efdc:0x204,_0x457117:0x1fd,_0x449d9e:0x215,_0x3a476a:0x212,_0x2f2b5c:0x1de,_0x5dd013:0x1ed,_0x16bf6a:0x205,_0x582a49:0x1f8,_0x2873fd:0x21c,_0x506ed3:0x200,_0x5a42f3:0x1f7,_0x1a77e7:0x20a,_0x59e426:0x215,_0x3dd391:0x1f1,_0x226fb3:0x20e,_0x27423f:0x1d8,_0x53ee1f:0x215,_0x117672:0x209,_0x3f8327:0x1df},_0x2ee50f=_0x5107a9,_0x183a8e={'kKgMq':_0x2ee50f(_0x31bf50._0x15bd1f),'tBEQs':_0x2ee50f(_0x31bf50._0x259c54)+_0x2ee50f(_0x31bf50._0x10b1cb)},_0x461207=(0x2144+-0x20ab+0x9*-0x11,state_1[_0x2ee50f(_0x31bf50._0x444998)+_0x2ee50f(_0x31bf50._0x14efdc)])();if(!_0x461207?.[_0x2ee50f(_0x31bf50._0x457117)][_0x2ee50f(_0x31bf50._0x449d9e)])return;const _0x45a962=String(_0xa6b65b[_0x2ee50f(_0x31bf50._0x3a476a)+_0x2ee50f(_0x31bf50._0x2f2b5c)]??''),_0x28fab5=String(_0xa6b65b[_0x183a8e[_0x2ee50f(_0x31bf50._0x5dd013)]]??'');if(!_0x45a962[_0x2ee50f(_0x31bf50._0x16bf6a)+'th'](_0x183a8e[_0x2ee50f(_0x31bf50._0x582a49)])||_0x28fab5[_0x2ee50f(_0x31bf50._0x2873fd)]<-0x4d*0x20+-0xe4e+0x17f0)return;const _0x817e26=(-0x77*-0x44+-0x17a2+-0x7fa,naming_1[_0x2ee50f(_0x31bf50._0x506ed3)+_0x2ee50f(_0x31bf50._0x5a42f3)])()[_0x2ee50f(_0x31bf50._0x1a77e7)](_0x2ee50f(_0x31bf50._0x59e426),(-0x5*-0x79d+0x1de7+-0x43f8,naming_1[_0x2ee50f(_0x31bf50._0x3dd391)])(_0x28fab5[_0x2ee50f(_0x31bf50._0x226fb3)](-0x20b7+0x9a7+0x49d*0x5)));(0x31c+-0xba8+0x88c,record_1[_0x2ee50f(_0x31bf50._0x27423f)])([{'type':_0x2ee50f(_0x31bf50._0x53ee1f),'action':_0x2ee50f(_0x31bf50._0x117672),'name':_0x817e26}],undefined,Date[_0x2ee50f(_0x31bf50._0x3f8327)](),!![]);}function onServerEvent(_0x39b733,_0x580f64){const _0x203a94={_0x481364:0x1d2,_0x421c32:0x201,_0xf1cc33:0x218,_0x1b5b47:0x1f3,_0x40660b:0x1cb,_0x32a692:0x1dd,_0x410aa3:0x1cc,_0x2f27d5:0x214,_0x4a2e45:0x219,_0x284b76:0x207,_0x231aaf:0x1e5,_0x3eb06f:0x1cf},_0x4361a0=_0x5107a9,_0x354867={'YVziL':function(_0x3ae760,_0x2dd405){return _0x3ae760===_0x2dd405;}};if(_0x580f64[0x1*-0x1801+-0x1*-0x312+-0x17*-0xe9]===_0x4361a0(_0x203a94._0x481364)+'g')(-0x1678+-0x2*0xb2d+0x2cd2,announce_1[_0x4361a0(_0x203a94._0x421c32)+_0x4361a0(_0x203a94._0xf1cc33)])(_0x39b733);else{if(_0x354867[_0x4361a0(_0x203a94._0x1b5b47)](_0x580f64[-0xffb*0x1+0xba*0x1e+0x1*-0x5d1],_0x4361a0(_0x203a94._0x40660b))){(0x2357+0xe6d+-0x31c4,sites_1[_0x4361a0(_0x203a94._0x32a692)+'e'])(_0x580f64[-0x2b0*0xd+0x2326+-0x35]),(-0x569+0x6f2+-0x189,announce_1[_0x4361a0(_0x203a94._0x421c32)+_0x4361a0(_0x203a94._0x410aa3)+'t'])(_0x580f64[-0x3*0x35+-0x21c+0x2bc]);if((0x15d0+-0x822*-0x1+-0x1*0x1df2,views_1[_0x4361a0(_0x203a94._0x2f27d5)+_0x4361a0(_0x203a94._0x4a2e45)])(_0x580f64[0x6f2+0x23ae+-0x2a9f],_0x580f64[0x3*-0x135+-0x313*0x8+0x1c39])||(-0xe5c*-0x2+-0x1*-0x127a+-0x2f32,dashboard_1[_0x4361a0(_0x203a94._0x284b76)+_0x4361a0(_0x203a94._0x231aaf)])(_0x580f64[-0x12e2*0x1+-0x7c*0x4f+0x3927],_0x580f64[-0x6*-0x238+-0x2663*0x1+0x1915]))return!![];onRequest(_0x580f64[-0x105b*-0x1+-0x151+-0xf09],_0x580f64[-0x1a91+0xc0*-0xe+0x2513]);}else{if(_0x580f64[-0x248b+0x1*-0x5bb+-0x305*-0xe]===_0x4361a0(_0x203a94._0x3eb06f))onUpgrade(_0x580f64[0x1312+-0xd99+-0x578],_0x580f64[-0x1534+0xdc*-0x11+0x83*0x46]);}}}function onHttp2Event(_0x180800,_0x4c2dd2){const _0x332907={_0x4e6b85:0x1d9},_0xefe3b=_0x5107a9;if(_0x4c2dd2[0x9ab*0x3+0x1*0x20a+-0x1f0b*0x1]===_0xefe3b(_0x332907._0x4e6b85))onGrpcStream(_0x4c2dd2[0x15c4+0x172+0x6*-0x3de]);}function installHttpHooks(){const _0x4cd655={_0x23070f:0x202,_0x4ea416:0x1d7,_0x3e4a5f:0x203,_0x3d2d73:0x1fc,_0x30d26d:0x1fa,_0x442374:0x202,_0xca8ccd:0x1d7,_0x4cfd08:0x1fa,_0x56613f:0x202,_0x2b05e0:0x1e2,_0x19c325:0x1ef,_0x17eab1:0x203,_0x50c1a3:0x1f6,_0x408c0a:0x1e3,_0x15e4d3:0x1e0,_0x4a3425:0x1e2,_0x596554:0x203,_0x2628aa:0x1e4},_0x2c2549=_0x5107a9,_0x3f8c6e={'teOXh':_0x2c2549(_0x4cd655._0x23070f)};(0x1b58+-0x206c+0x1*0x514,patch_1[_0x2c2549(_0x4cd655._0x4ea416)+'od'])(node_http_1[_0x2c2549(_0x4cd655._0x3e4a5f)][_0x2c2549(_0x4cd655._0x3d2d73)][_0x2c2549(_0x4cd655._0x30d26d)+'e'],_0x2c2549(_0x4cd655._0x442374),onServerEvent),(0x83*-0x47+-0x14b2+-0xd*-0x463,patch_1[_0x2c2549(_0x4cd655._0xca8ccd)+'od'])(node_https_1[_0x2c2549(_0x4cd655._0x3e4a5f)][_0x2c2549(_0x4cd655._0x3d2d73)][_0x2c2549(_0x4cd655._0x4cfd08)+'e'],_0x2c2549(_0x4cd655._0x56613f),onServerEvent),(0xf9c+0x153f+-0x24db,patch_1[_0x2c2549(_0x4cd655._0xca8ccd)+'od'])(Object[_0x2c2549(_0x4cd655._0x2b05e0)+_0x2c2549(_0x4cd655._0x19c325)](node_http2_1[_0x2c2549(_0x4cd655._0x17eab1)][_0x2c2549(_0x4cd655._0x50c1a3)+_0x2c2549(_0x4cd655._0x408c0a)]()),_0x3f8c6e[_0x2c2549(_0x4cd655._0x15e4d3)],onHttp2Event),(0xb5d+0xae7+-0x64*0x39,patch_1[_0x2c2549(_0x4cd655._0x4ea416)+'od'])(Object[_0x2c2549(_0x4cd655._0x4a3425)+_0x2c2549(_0x4cd655._0x19c325)](node_http2_1[_0x2c2549(_0x4cd655._0x596554)][_0x2c2549(_0x4cd655._0x50c1a3)+_0x2c2549(_0x4cd655._0x2628aa)+'er']({})),_0x2c2549(_0x4cd655._0x23070f),onHttp2Event);}
@@ -0,0 +1,18 @@
1
+ export declare function sanitize(name: string): string;
2
+ export declare function stripQuery(url: string): string;
3
+ export declare function matchPath(pattern: string, path: string): boolean;
4
+ export declare function normalizeSegment(seg: string): string;
5
+ export declare function templatePath(rawPath: string): string;
6
+ export declare function expressRoute(req: any): string | undefined;
7
+ export declare class RouteNamer {
8
+ private collapseAfter;
9
+ private maxNamesPerType;
10
+ private seen;
11
+ private collapsed;
12
+ private names;
13
+ constructor(collapseAfter: number, maxNamesPerType: number);
14
+ pathName(rawPath: string, scope?: string, learn?: boolean): string;
15
+ limit(type: string, name: string): string;
16
+ private guard;
17
+ }
18
+ export declare function sharedNamer(): RouteNamer;