web-listener 0.7.1 → 0.8.0
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.
- package/index.d.ts +87 -32
- package/index.js +1 -1
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Duplex, Readable, Writable } from 'node:stream';
|
|
|
3
3
|
import { AddressInfo } from 'node:net';
|
|
4
4
|
import { Stats } from 'node:fs';
|
|
5
5
|
import { FileHandle } from 'node:fs/promises';
|
|
6
|
+
import { IncomingMessage as IncomingMessage$1 } from 'http';
|
|
6
7
|
import { ReadableStream, TransformStream, TextDecoderOptions } from 'node:stream/web';
|
|
7
8
|
import { AgentOptions, Agent as Agent$1 } from 'node:https';
|
|
8
9
|
|
|
@@ -43,12 +44,11 @@ declare class Queue<T> {
|
|
|
43
44
|
[Symbol.iterator](): Iterator<T, unknown, undefined>;
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
type UpgradeErrorHandler = (error: unknown, req: IncomingMessage, socket: Duplex) => void;
|
|
47
|
-
type ServerGeneralErrorCallback = (error: unknown, action: string, req?: IncomingMessage) => void;
|
|
48
|
-
type ServerErrorCallback = (error: unknown, action: string, req: IncomingMessage) => void;
|
|
49
|
-
|
|
50
47
|
type MaybePromise<T> = Promise<T> | T;
|
|
51
48
|
|
|
49
|
+
type ServerErrorCallback = (error: unknown, action: string, req: IncomingMessage) => void;
|
|
50
|
+
type UpgradeErrorHandler = (error: unknown, req: IncomingMessage, socket: Duplex) => void;
|
|
51
|
+
|
|
52
52
|
type SoftCloseHandler = (reason: string) => MaybePromise<void>;
|
|
53
53
|
declare function setSoftCloseHandler(req: IncomingMessage, fn: SoftCloseHandler): void;
|
|
54
54
|
declare const isSoftClosed: (req: IncomingMessage) => boolean;
|
|
@@ -86,26 +86,47 @@ interface UpgradeHandler<Req = {}> {
|
|
|
86
86
|
}
|
|
87
87
|
declare const upgradeHandler: <Req>(handler: UpgradeHandler<Req> | UpgradeHandlerFn<Req>, shouldUpgrade?: ShouldUpgradeFn<Req>) => UpgradeHandler<Req>;
|
|
88
88
|
declare const anyHandler: <Req>(handler: UpgradeHandlerFn<Req> & RequestHandlerFn<Req>, shouldUpgrade?: ShouldUpgradeFn<Req>) => RequestHandler<Req> & UpgradeHandler<Req>;
|
|
89
|
-
type
|
|
89
|
+
type ErrorOutput = {
|
|
90
90
|
response: ServerResponse;
|
|
91
91
|
socket?: never;
|
|
92
92
|
head?: never;
|
|
93
|
+
hasUpgraded?: never;
|
|
93
94
|
} | {
|
|
94
95
|
response?: never;
|
|
95
96
|
socket: Duplex;
|
|
96
97
|
head: Buffer;
|
|
97
|
-
|
|
98
|
+
hasUpgraded: boolean;
|
|
99
|
+
};
|
|
100
|
+
type ErrorHandlerFn<Req = {}> = (error: unknown, req: IncomingMessage & Req, output: ErrorOutput) => MaybePromise<HandlerResult>;
|
|
98
101
|
interface ErrorHandler<Req = {}> {
|
|
99
102
|
handleError: ErrorHandlerFn<Req>;
|
|
103
|
+
shouldHandleError?: (error: unknown, req: IncomingMessage & Req, output: ErrorOutput) => boolean;
|
|
100
104
|
}
|
|
101
105
|
declare const errorHandler: <Req>(handler: ErrorHandler<Req> | ErrorHandlerFn<Req>) => ErrorHandler<Req>;
|
|
106
|
+
type TypedErrorHandlerFn<Error, Req = {}> = (error: Error, req: IncomingMessage & Req, response: ServerResponse) => MaybePromise<HandlerResult>;
|
|
107
|
+
declare const typedErrorHandler: <Error, Req>(ErrorClass: abstract new (...args: any[]) => Error, handler: TypedErrorHandlerFn<Error, Req>) => ErrorHandler<Req>;
|
|
108
|
+
declare const conditionalErrorHandler: <Error, Req>(test: (x: unknown) => x is Error, handler: TypedErrorHandlerFn<Error, Req>) => ErrorHandler<Req>;
|
|
102
109
|
type Handler<Req = {}> = Partial<RequestHandler<Req> & UpgradeHandler<Req> & ErrorHandler<Req>>;
|
|
103
110
|
type RequestReturnHandlerFn<Req = {}> = (value: ReturnHandlerParameter, req: IncomingMessage & Req, res: ServerResponse) => MaybePromise<void>;
|
|
104
111
|
|
|
105
112
|
interface NativeListenersOptions {
|
|
113
|
+
/**
|
|
114
|
+
* Function to call when:
|
|
115
|
+
* - a request or upgrade cannot be parsed; or
|
|
116
|
+
* - a request or upgrade error reaches the end of the chain without being handled; or
|
|
117
|
+
* - an error occurs during a teardown; or
|
|
118
|
+
* - an error occurs in a shouldUpgrade function.
|
|
119
|
+
*
|
|
120
|
+
* The default implementation logs the error via `console.error` unless it is a `HTTPError` with `statusCode` < 500
|
|
121
|
+
*/
|
|
106
122
|
onError?: ServerGeneralErrorCallback;
|
|
123
|
+
/**
|
|
124
|
+
* Number of milliseconds to wait before forcibly closing sockets which are left half-open by the client.
|
|
125
|
+
* @default 500
|
|
126
|
+
*/
|
|
107
127
|
socketCloseTimeout?: number;
|
|
108
128
|
}
|
|
129
|
+
type ServerGeneralErrorCallback = (error: unknown, action: string, req?: IncomingMessage) => void;
|
|
109
130
|
interface NativeListeners {
|
|
110
131
|
request: RequestListener;
|
|
111
132
|
upgrade: UpgradeListener;
|
|
@@ -170,6 +191,7 @@ declare const WebListener_base: TypedEventTarget<WebListener, {
|
|
|
170
191
|
declare class WebListener extends WebListener_base {
|
|
171
192
|
constructor(handler: Handler);
|
|
172
193
|
attach(server: Server, options?: ListenerOptions): (reason?: string, existingConnectionTimeout?: number, forceCloseAll?: boolean) => NativeListeners;
|
|
194
|
+
createServer(options?: ServerOptions & ListenerOptions): AugmentedServer;
|
|
173
195
|
listen(port: number, host: string, options?: CombinedServerOptions): Promise<AugmentedServer>;
|
|
174
196
|
}
|
|
175
197
|
interface RequestErrorDetail {
|
|
@@ -182,29 +204,20 @@ interface AugmentedServer extends Server {
|
|
|
182
204
|
closeWithTimeout(reason: string, timeout: number): Promise<void>;
|
|
183
205
|
}
|
|
184
206
|
|
|
185
|
-
type MessageBody = string | Buffer | NodeJS.ArrayBufferView | ArrayBuffer | SharedArrayBuffer;
|
|
186
207
|
type AnyHeaders = HeadersInit | OutgoingHttpHeaders | Map<string, string | number | Readonly<string[]>> | undefined;
|
|
187
208
|
interface HTTPErrorOptions {
|
|
188
|
-
message?: string;
|
|
189
|
-
statusMessage?: string;
|
|
209
|
+
message?: string | undefined;
|
|
210
|
+
statusMessage?: string | undefined;
|
|
190
211
|
headers?: AnyHeaders;
|
|
191
|
-
body?:
|
|
212
|
+
body?: string | undefined;
|
|
192
213
|
cause?: unknown;
|
|
193
214
|
}
|
|
194
|
-
interface PartialServerResponse {
|
|
195
|
-
setHeaders(headers: Headers): void;
|
|
196
|
-
setHeader(name: string, value: string): void;
|
|
197
|
-
writeHead(status: number, message: string, extraHeaders?: OutgoingHttpHeaders): void;
|
|
198
|
-
end(chunk: MessageBody, encoding: BufferEncoding): void;
|
|
199
|
-
}
|
|
200
215
|
declare class HTTPError extends Error {
|
|
201
216
|
readonly statusCode: number;
|
|
202
217
|
readonly statusMessage: string;
|
|
203
|
-
readonly headers:
|
|
204
|
-
readonly body:
|
|
218
|
+
readonly headers: Headers;
|
|
219
|
+
readonly body: string;
|
|
205
220
|
constructor(statusCode: number, { message, statusMessage, headers, body, ...options }?: HTTPErrorOptions);
|
|
206
|
-
static readonly INTERNAL_SERVER_ERROR: HTTPError;
|
|
207
|
-
send(res: PartialServerResponse, extraHeaders?: OutgoingHttpHeaders): void;
|
|
208
221
|
}
|
|
209
222
|
|
|
210
223
|
type ParameterPrefixes = [':', '*'];
|
|
@@ -252,7 +265,7 @@ type RelaxedRequestHandlerOrExplicitUpgrade<Req = {}> = RelaxedRequestHandler<Re
|
|
|
252
265
|
type RelaxedUpgradeHandler<Req = {}> = UpgradeHandlerFn<Req> | UpgradeHandler<Req> | ErrorHandler<Req>;
|
|
253
266
|
type MethodWrapper<Req, This> = <Path extends string>(path: Path, ...handlers: RelaxedRequestHandler<Req & WithPathParameters<ParametersFromPath<Path>>>[]) => This;
|
|
254
267
|
type UpgradeWrapper<Req, This> = <Path extends string>(path: Path, ...handlers: RelaxedUpgradeHandler<Req & WithPathParameters<ParametersFromPath<Path>>>[]) => This;
|
|
255
|
-
declare class Router<Req = {}> implements
|
|
268
|
+
declare class Router<Req = {}> implements Handler<Req> {
|
|
256
269
|
constructor();
|
|
257
270
|
/**
|
|
258
271
|
* Register handlers or routers for all requests, upgrades, and errors, on all methods and paths.
|
|
@@ -385,12 +398,14 @@ interface BearerAuthOptions<Req, Token> {
|
|
|
385
398
|
onSoftCloseError?: ServerErrorCallback;
|
|
386
399
|
}
|
|
387
400
|
interface JWTToken {
|
|
388
|
-
nbf?: number;
|
|
389
|
-
exp?: number;
|
|
390
|
-
scopes?: Record<string, boolean> | string[] | string;
|
|
401
|
+
nbf?: number | undefined;
|
|
402
|
+
exp?: number | undefined;
|
|
403
|
+
scopes?: Record<string, boolean> | string[] | string | undefined;
|
|
391
404
|
}
|
|
392
|
-
declare function requireBearerAuth<Req = {}, Token = JWTToken>({ realm, extractAndValidateToken, fallbackTokenFetcher, closeOnExpiry, softCloseBufferTime, onSoftCloseError, }: BearerAuthOptions<Req, Token>):
|
|
393
|
-
|
|
405
|
+
declare function requireBearerAuth<Req = {}, Token = JWTToken>({ realm, extractAndValidateToken, fallbackTokenFetcher, closeOnExpiry, softCloseBufferTime, onSoftCloseError, }: BearerAuthOptions<Req, Token>): {
|
|
406
|
+
handler: RequestHandler<Req> & UpgradeHandler<Req>;
|
|
407
|
+
getTokenData: (req: IncomingMessage) => Token;
|
|
408
|
+
};
|
|
394
409
|
declare const hasAuthScope: (req: IncomingMessage, scope: string) => boolean;
|
|
395
410
|
declare const requireAuthScope: (scope: string) => RequestHandler & UpgradeHandler;
|
|
396
411
|
|
|
@@ -550,6 +565,32 @@ interface CompressionInfo {
|
|
|
550
565
|
declare function compressFileOffline(file: string, options: FileNegotiationOption[], minCompress: number): Promise<CompressionInfo>;
|
|
551
566
|
declare function compressFilesInDir(dir: string, options: FileNegotiationOption[], minCompress: number): Promise<CompressionInfo[]>;
|
|
552
567
|
|
|
568
|
+
declare const emitError: (req: IncomingMessage$1, error: unknown) => void;
|
|
569
|
+
|
|
570
|
+
interface JSONErrorHandlerOptions {
|
|
571
|
+
/**
|
|
572
|
+
* Only send a JSON response if the client sent `Accept: application/json`.
|
|
573
|
+
* @default true
|
|
574
|
+
*/
|
|
575
|
+
onlyIfRequested?: boolean | undefined;
|
|
576
|
+
/**
|
|
577
|
+
* Emit the error to the current error listener.
|
|
578
|
+
* @default true
|
|
579
|
+
*/
|
|
580
|
+
emitError?: boolean | undefined;
|
|
581
|
+
/**
|
|
582
|
+
* If set, forces a consistent HTTP status code (ignoring the status code from the error).
|
|
583
|
+
* @default undefined
|
|
584
|
+
*/
|
|
585
|
+
forceStatus?: number | undefined;
|
|
586
|
+
/**
|
|
587
|
+
* The content-type to set on the response.
|
|
588
|
+
* @default 'application/json'
|
|
589
|
+
*/
|
|
590
|
+
contentType?: string;
|
|
591
|
+
}
|
|
592
|
+
declare const jsonErrorHandler: (conversion: (error: HTTPError) => unknown, { onlyIfRequested, emitError: doEmitError, forceStatus, contentType, }?: JSONErrorHandlerOptions) => ErrorHandler;
|
|
593
|
+
|
|
553
594
|
interface FileFinderOptions {
|
|
554
595
|
/**
|
|
555
596
|
* Also serve files from sub-directories.
|
|
@@ -751,7 +792,8 @@ interface GetClientOptions {
|
|
|
751
792
|
*/
|
|
752
793
|
trustedHeaders: ProxyHeader[];
|
|
753
794
|
}
|
|
754
|
-
|
|
795
|
+
type GetClient = (req: IncomingMessage) => ProxyChain;
|
|
796
|
+
declare function makeGetClient({ trustedProxyCount, trustedProxyAddresses, trustedHeaders, }: GetClientOptions): GetClient;
|
|
755
797
|
interface ProxyChain {
|
|
756
798
|
trusted: ProxyNode[];
|
|
757
799
|
untrusted: ProxyNode[];
|
|
@@ -833,8 +875,21 @@ declare function checkIfRange(req: IncomingMessage, res: ServerResponse, fileSta
|
|
|
833
875
|
declare function compareETag(res: ServerResponse, stats: Pick<Stats, 'mtimeMs' | 'size'>, etags: string[]): boolean;
|
|
834
876
|
|
|
835
877
|
interface GetBodyOptions {
|
|
836
|
-
|
|
837
|
-
|
|
878
|
+
/**
|
|
879
|
+
* The maximum content length after applying all decoding steps
|
|
880
|
+
* @default Infinity
|
|
881
|
+
*/
|
|
882
|
+
maxContentBytes?: number;
|
|
883
|
+
/**
|
|
884
|
+
* The maximum content length as sent (before applying any decoding steps)
|
|
885
|
+
* @default maxContentBytes
|
|
886
|
+
*/
|
|
887
|
+
maxNetworkBytes?: number;
|
|
888
|
+
/**
|
|
889
|
+
* The maximum number of content-encoding steps the client can specify.
|
|
890
|
+
* Browsers typically do not use any content-encoding in requests, and it is unlikely that this would need to be set greater than 1 for any standard client.
|
|
891
|
+
* @default 1
|
|
892
|
+
*/
|
|
838
893
|
maxEncodingSteps?: number;
|
|
839
894
|
}
|
|
840
895
|
interface GetBodyTextOptions extends GetBodyOptions, TextDecoderOptions {
|
|
@@ -842,7 +897,7 @@ interface GetBodyTextOptions extends GetBodyOptions, TextDecoderOptions {
|
|
|
842
897
|
}
|
|
843
898
|
interface GetBodyJsonOptions extends GetBodyOptions, TextDecoderOptions {
|
|
844
899
|
}
|
|
845
|
-
declare function getBodyStream(req: IncomingMessage, {
|
|
900
|
+
declare function getBodyStream(req: IncomingMessage, { maxContentBytes, maxNetworkBytes, maxEncodingSteps, }?: GetBodyOptions): ReadableStream<Uint8Array>;
|
|
846
901
|
declare function getBodyTextStream(req: IncomingMessage, options?: GetBodyTextOptions): ReadableStream<string>;
|
|
847
902
|
declare function getBodyText(req: IncomingMessage, options?: GetBodyTextOptions): Promise<string>;
|
|
848
903
|
declare function getBodyJson(req: IncomingMessage, options?: GetBodyJsonOptions): Promise<unknown>;
|
|
@@ -1248,5 +1303,5 @@ declare function setProperty<T>(req: IncomingMessage, property: Property<T>, val
|
|
|
1248
1303
|
declare function getProperty<T>(req: IncomingMessage, property: Property<T>): T;
|
|
1249
1304
|
declare function clearProperty<T>(req: IncomingMessage, property: Property<T>): void;
|
|
1250
1305
|
|
|
1251
|
-
export { BlockingQueue, CONTINUE, FileFinder, HTTPError, NEXT_ROUTE, NEXT_ROUTER, Property, Queue, Router, STOP, ServerSentEvents, WebListener, WebSocketError, WebSocketMessage, WebSocketMessages, acceptBody, acceptUpgrade, addTeardown, anyHandler, checkIfModified, checkIfRange, clearProperty, compareETag, compressFileOffline, compressFilesInDir, decompressMime, defer, errorHandler, fileServer, findCause, generateStrongETag, generateWeakETag, getAbortSignal, getAbsolutePath, getAddressURL,
|
|
1252
|
-
export type { AcceptUpgradeHandler, AcceptUpgradeResult, Address, AugmentedFormData, CSVOptions, CombinedServerOptions, CommonMethod, CommonUpgrade, CompressionInfo, ErrorHandler, FileFinderCore, FileFinderOptions, FileNegotiation, FileNegotiationOption, FileServerOptions, FormField, GetClientOptions, GetFormDataOptions, GetFormFieldsOptions, GetRangeOptions, HTTPErrorOptions, HTTPRange, HandlerResult, JSONOptions, ListenOptions, ListenerOptions, NativeListeners, NegotiationInput, NegotiationOutput, NegotiationOutputInfo, Negotiator, ParametersFromPath, PostCheckFile, PostCheckFileInfo, PreCheckFile, PreCheckFileInfo, ProxyChain, ProxyNode, ProxyOptions, ProxyRequestHeaderAdapter, ProxyResponseHeaderAdapter, QualityValue, RangePart, RequestHandler, ResolvedFileInfo, ServerErrorCallback, ServerGeneralErrorCallback, ServerSentEvent, SimplifyRangeOptions, UpgradeHandler, UpgradeListener, WithPathParameters };
|
|
1306
|
+
export { BlockingQueue, CONTINUE, FileFinder, HTTPError, NEXT_ROUTE, NEXT_ROUTER, Property, Queue, Router, STOP, ServerSentEvents, WebListener, WebSocketError, WebSocketMessage, WebSocketMessages, acceptBody, acceptUpgrade, addTeardown, anyHandler, checkIfModified, checkIfRange, clearProperty, compareETag, compressFileOffline, compressFilesInDir, conditionalErrorHandler, decompressMime, defer, emitError, errorHandler, fileServer, findCause, generateStrongETag, generateWeakETag, getAbortSignal, getAbsolutePath, getAddressURL, getAuthorization, getBodyJson, getBodyStream, getBodyText, getBodyTextStream, getCharset, getFormData, getFormFields, getIfRange, getMime, getPathParameter, getPathParameters, getProperty, getQuery, getRange, getRemainingPathComponents, getSearch, getSearchParams, getTextDecoder, getTextDecoderStream, getWebSocketOrigin, hasAuthScope, isSoftClosed, isWebSocketRequest, jsonErrorHandler, makeAcceptWebSocket, makeAddressTester, makeGetClient, makeMemo, makeNegotiator, makeTempFileStorage, makeWebSocketFallbackTokenFetcher, negotiateEncoding, nextWebSocketMessage, parseAddress, proxy, readHTTPDateSeconds, readHTTPInteger, readHTTPKeyValues, readHTTPQualityValues, readHTTPUnquotedCommaSeparated, readMimeTypes, registerCharset, registerMime, registerUTF32, removeForwarded, replaceForwarded, requestHandler, requireAuthScope, requireBearerAuth, resetMime, restoreAbsolutePath, sanitiseAndAppendForwarded, sendCSVStream, sendFile, sendJSON, sendJSONStream, sendRanges, setDefaultCacheHeaders, setProperty, setSoftCloseHandler, simpleAppendForwarded, simplifyRange, toListeners, typedErrorHandler, upgradeHandler };
|
|
1307
|
+
export type { AcceptUpgradeHandler, AcceptUpgradeResult, Address, AugmentedFormData, AugmentedServer, CSVOptions, CombinedServerOptions, CommonMethod, CommonUpgrade, CompressionInfo, ErrorHandler, FileFinderCore, FileFinderOptions, FileNegotiation, FileNegotiationOption, FileServerOptions, FormField, GetClient, GetClientOptions, GetFormDataOptions, GetFormFieldsOptions, GetRangeOptions, HTTPErrorOptions, HTTPRange, HandlerResult, JSONErrorHandlerOptions, JSONOptions, ListenOptions, ListenerOptions, NativeListeners, NegotiationInput, NegotiationOutput, NegotiationOutputInfo, Negotiator, ParametersFromPath, PostCheckFile, PostCheckFileInfo, PreCheckFile, PreCheckFileInfo, ProxyChain, ProxyNode, ProxyOptions, ProxyRequestHeaderAdapter, ProxyResponseHeaderAdapter, QualityValue, RangePart, RequestHandler, ResolvedFileInfo, ServerErrorCallback, ServerGeneralErrorCallback, ServerSentEvent, SimplifyRangeOptions, UpgradeErrorHandler, UpgradeHandler, UpgradeListener, WithPathParameters };
|
package/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isIPv4 as t,isIPv6 as e}from"node:net";import{STATUS_CODES as n,createServer as i,Agent as r,request as o,ServerResponse as s}from"node:http";import{createReadStream as c,constants as a,createWriteStream as f,openAsBlob as u}from"node:fs";import{createHash as h,randomUUID as l}from"node:crypto";import{pipeline as d}from"node:stream/promises";import w from"node:zlib";import{promisify as p}from"node:util";import{extname as m,join as y,dirname as g,basename as b,sep as v,resolve as E}from"node:path";import{readFile as x,writeFile as _,stat as T,readdir as S,realpath as k,open as $,mkdtemp as A,rm as O}from"node:fs/promises";import{tmpdir as N,platform as P}from"node:os";import{Agent as M,request as R}from"node:https";import{TransformStream as F,TextDecoderStream as U,DecompressionStream as C,ReadableStream as B}from"node:stream/web";import{Readable as I,Duplex as j,Writable as H}from"node:stream";function q(n){if(!n||"unknown"===n)return;const i=/^((?:\d{1,3}\.){3}\d{1,3})(?::(\d+))?$/.exec(n);if(i?.[1]&&t(i[1]))return{type:"IPv4",ip:i[1],port:i[2]?Number.parseInt(i[2]):void 0};const r=/^\[([\da-fA-F:]+)\](?::(\d+))?$|^([\da-fA-F:]+)$/.exec(n);if(r?.[1]&&e(r[1]))return{type:"IPv6",ip:r[1].toLowerCase(),port:r[2]?Number.parseInt(r[2]):void 0};if(r?.[3]&&e(r[3]))return{type:"IPv6",ip:r[3].toLowerCase(),port:void 0};const o=/^(.*?):(\d+)$/i.exec(n);return o?.[2]?{type:"alias",ip:o[1],port:Number.parseInt(o[2])}:{type:"alias",ip:n,port:void 0}}function D(t){const e=new Set,n=[],i=[];for(const r of t){const t=/^((?:\d{1,3}\.){3}\d{1,3})(?:\/(\d+))?$/.exec(r);if(t?.[1]){const e=t[2]?Number.parseInt(t[2]):32,i=e<32?4294967295>>>e:0;n.push([z(t[1])|i,i]);continue}const o=/^\[?([\da-fA-F:]+)\]?(?:\/(\d+))?$/.exec(r);if(o?.[1]){const t=W(o[1]),e=o[2]?L>>BigInt(Number.parseInt(o[2])):0n;i.push([t|e,e]);continue}e.add(r)}return t=>{switch(t?.type){case"alias":return e.has(t.ip);case"IPv4":const r=z(t.ip);return n.some(([t,e])=>(r|e)===t);case"IPv6":const o=W(t.ip);return i.some(([t,e])=>(o|e)===t);default:return!1}}}const L=/*@__PURE__*/BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");function z(t){const e=t.split(".").map(Number);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0}function W(t){const e=t.split(":").map(t=>t?Number.parseInt(t,16):-1);let n=0n;for(const t of e)t<0?n<<=16n*BigInt(9-e.length):n=n<<16n|BigInt(t);return n}class J{constructor(t){const e={t:null,i:null};this.o=e,this.u=e,void 0!==t&&this.push(t)}isEmpty(){return!this.o.i}clear(){this.o.i=null,this.o.t=null,this.u=this.o}push(t){const e={t,i:null};this.u.i=e,this.u=e}shift(){if(!this.o.i)return null;this.o=this.o.i;const t=this.o.t;return this.o.t=null,t}remove(t){for(let e=this.o;e.i;e=e.i)if(e.i.t===t){e.i=e.i.i;break}}[Symbol.iterator](){return{next:()=>{if(!this.o.i)return{value:null,done:!0};this.o=this.o.i;const t=this.o.t;return this.o.t=null,{value:t,done:!1}}}}}class G{constructor(){this.h=new J,this.l=new J,this.m=0}push(t){if(this.m)return;const e=this.l.shift();e?(e.v&&clearTimeout(e.v),e._(t)):this.h.push(t)}shift(t){return this.h.isEmpty()?this.m?Promise.reject(this.T):new Promise((e,n)=>{const i={_:e,S:n,v:null};this.l.push(i),void 0!==t&&(i.v=setTimeout(()=>{this.l.remove(i),n(new Error(`Timeout after ${t}ms`))},t))}):Promise.resolve(this.h.shift())}k(t){this.T=t;for(const e of this.l)e.S(t),e.v&&clearTimeout(e.v)}close(t){this.m||(this.m=1,this.k(t))}fail(t){this.m||(this.m=2,this.k(t))}[Symbol.asyncIterator](){return{next:()=>this.shift().then(t=>({value:t,done:!1}),t=>{if(2===this.m)throw t;return{value:null,done:!0}})}}}function V(t,e){if(t instanceof e)return t;if(t&&"object"==typeof t){if("cause"in t)return V(t.cause,e);if("error"in t)return V(t.error,e)}}function Z(t,e="http"){if(!t)throw new Error("no address");if("string"==typeof t)return t;if("IPv4"===t.family)return`${e}://${t.address}:${t.port}`;if("IPv6"===t.family)return`${e}://[${t.address}]:${t.port}`;throw new Error(`unknown address family: ${t.family}`)}const X=/*@__PURE__*/Buffer.alloc(0),Y=t=>new URL("http://localhost"+(t.url??"/"));class K extends Error{constructor(t,e,n){super(n??""),this.error=t,this.suppressed=e}}const Q=globalThis.SuppressedError??K;class tt{constructor(){this.$=!1}A(t){this.$?t!==this.O&&(this.O=new Q(t,this.O)):(this.O=t,this.$=!0)}N(){this.$=!1,this.O=void 0}}class et{constructor(t){this.P=t,this.M=Object.create(null),this.R=!1}get headersSent(){return this.R}writeHead(t,e,i){if(this.R)throw new Error("headers already sent");const r={...this.M};for(const[t,e]of(t=>{if(!t)return[];const e=[];if(Array.isArray(t)){const n=t.length;if(1&n)throw new Error("headers must be a list of alternating keys and values");for(let i=0;i<n;i+=2){const n=t[i],r=t[i+1];if("string"!=typeof n)throw new Error("invalid header name");void 0!==r&&e.push([n.toLowerCase(),r])}}else for(const[n,i]of Object.entries(t))void 0!==i&&e.push([n.toLowerCase(),i]);return e})(i))r[t]=e;return this.P.write([`HTTP/1.1 ${t} ${rt(e??n[t]??"-")}`,...nt(r),"",""].join("\r\n"),"ascii"),this.R=!0,this}write(t,e="utf-8",n){return this.P.write(t,e,n)}end(t,e="utf-8",n){return this.P.end(t,e,n),this}setHeader(t,e){const n=t.toLowerCase();return this.M[n]="string"==typeof e||"number"==typeof e?e:[...e],this}setHeaders(t){for(const[e,n]of t)this.setHeader(e,n);return this}}function nt(t){const e=[];for(const[n,i]of Object.entries(t)){const t=it(i);t&&e.push(`${rt(n)}: ${rt(t)}`)}return e}const it=t=>"string"==typeof t?t:"number"==typeof t?String(t):t?t.join(", "):"",rt=t=>t.replaceAll(/[^ \t!-~]/g,"");class ot extends Error{constructor(t,{message:e,statusMessage:i,headers:r,body:o,...s}={}){super(e??("string"==typeof o?o:void 0),s),this.statusCode=0|t,this.statusMessage=i??n[this.statusCode]??"-",this.headers=r,this.body=o??"",this.name=`HTTPError(${this.statusCode} ${this.statusMessage})`}static INTERNAL_SERVER_ERROR=/*@__PURE__*/new ot(500);send(t,e){t.setHeaders((t=>{if(t){if(t instanceof Headers)return t;if(Array.isArray(t))return new Headers(t);{const e=t instanceof Map?[...t.entries()]:Object.entries(t);return new Headers(e.map(([t,e])=>[t,it(e)]).filter(([t,e])=>e))}}return new Headers})(this.headers));const n=Buffer.byteLength(this.body,"utf-8");t.setHeader("content-length",String(n)),t.writeHead(this.statusCode,this.statusMessage,e),t.end(this.body,"utf-8")}}const st=(t,e,n)=>{n.headersSent?n.end():(V(t,ot)??ot.INTERNAL_SERVER_ERROR).send(n)},ct=(t,e,n)=>{if(n.writable){n.addListener("finish",()=>n.destroy());const e=new et(n);(V(t,ot)??ot.INTERNAL_SERVER_ERROR).send(e,{connection:"close"})}else n.destroy()},at=(t,e,n)=>{(V(t,ot)?.statusCode??1)&&console.error("%s",`unhandled error while ${e} ${n?.url??"(no request information)"}:`,t)},ft=new WeakMap;function ut(t,e){const n=ft.get(t);if(n)return n;const i=Y(t),r={F:t,U:i,C:decodeURIComponent(i.pathname),B:ct,I:new AbortController,j:[],H:[],D:e?dt(t):null};return ft.set(t,r),r}function ht(t,e,n,i){e||(t.D=null),t.L=n;const r=async()=>{t.I.abort(n.W.writableEnded?"complete":"client abort");const e=new tt;await lt(t.j,e,t),await lt(t.H,e,t,()=>{t.J=async e=>{try{await e()}catch(e){i(e,t.F)}}}),e.$&&i(e.O,t.F)};return n.W.closed?r():n.W.once("close",r),t}async function lt(t,e,n,i){for(;n.G;)await n.G;const r=(async()=>{for(;;){const n=t.pop();if(!n)return void i?.();try{await n()}catch(t){e.A(t)}}})().then(()=>{n.G===r&&(n.G=void 0)});n.G=r,await r}function dt(t){return new Set(t.headers.upgrade?.split(",").map(t=>t.trim().toLowerCase())??[])}const wt=t=>ft.get(t);function pt(t){const e=wt(t);if(!e)throw new Error("unknown request");return e}function mt(t,e){const n=wt(t);n&&yt(n,e)}function yt(t,e){t.V=e;const n=t.Z;n&&queueMicrotask(()=>xt(e,n,t))}const gt=t=>Boolean(wt(t)?.Z);function bt(t,e,n){if(!t.Z){if(t.L&&!t.D){const e=t.L.W;e.headersSent||e.hasHeader("connection")||e.setHeader("connection","close")}t.L?.W.once("close",()=>t.F.socket.destroy()),t.Z={X:e,Y:n},xt(t.V,t.Z,t),Et(t)}}function vt(t){if(t.L){if(!t.D){const e=t.L.W;e.headersSent||(e.statusCode=503,e.hasHeader("connection")||e.setHeader("connection","close"))}t.L.W.end(()=>t.F.socket.destroy())}else t.F.socket.destroy()}function Et(t){if(clearTimeout(t.K),!t.tt||t.J)return;const e=Date.now();if(e>=t.tt)return void vt(t);let n=t.tt;t.et&&!t.Z&&(e<t.et.nt?n=t.et.nt:(t.Z=t.et,xt(t.V,t.Z,t))),void 0===t.K&&t.H.push(()=>clearTimeout(t.K)),t.K=setTimeout(()=>Et(t),n-e)}async function xt(t,e,n){try{await(t?.(e.X))}catch(t){e.Y(t,"soft closing",n.F),vt(n)}}const _t=(t,e)=>{const n=pt(t);n.J?n.J(e):n.j.push(e)},Tt=(t,e)=>{const n=pt(t);n.J?n.J(e):n.H.push(e)},St=t=>pt(t).I.signal;class kt extends Error{}const $t=new kt("STOP"),At=new kt("CONTINUE"),Ot=new kt("NEXT_ROUTE"),Nt=new kt("NEXT_ROUTER");async function Pt(t,e){const n=pt(t);if(!n.L)throw new Error("cannot call acceptUpgrade from shouldUpgrade");if(!n.D)throw new Error("not an upgrade request");if(n.it)return n.rt;const i=n.L.W;if(!i.readable||!i.writable)throw $t;const r=await e(t,i,n.L.o);return n.L.o=X,n.B=r.onError,yt(n,r.softCloseHandler),n.rt=r.return,n.it=!0,r.return}const Mt=RegExp.escape??(t=>t.replaceAll(/[^a-zA-Z0-9_ ]/g,t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"))),Rt=t=>t,Ft=t=>void 0===t?void 0:""===t?[]:t.split("/"),Ut=t=>void 0===t?void 0:""===t?[]:t.split("/").filter(t=>t);function Ct(t){const e={},n=new Map;for(const[i,r]of Object.entries(t))e[i]=!1,n.set(r,i);return t=>{const i={...e};for(let e=0;e<t.length;++e){const r=n.get(t[e]);if(!r)return[i,t.substring(e)];i[r]=!0}return[i,""]}}const Bt=/*@__PURE__*/Ct({ot:"i",st:"!"}),It=Object.freeze({});function jt(t,e,n){const i=t.F.url,r=t.C,o=t.ct??It;return t.F.url=encodeURIComponent(e).replaceAll(/%2F/g,"/")+t.U.search,t.C=e,n.length>0&&(t.ct=Object.freeze(Object.fromEntries([...Object.entries(o),...n]))),()=>{t.F.url=i,t.C=r,t.ct=o}}function Ht(t){return wt(t)?.ct??It}function qt(t,e){return Ht(t)[e]}function Dt(t){const e=wt(t);return e?e.U.pathname+e.U.search:t.url??"/"}function Lt(t){const e=wt(t);e&&(t.url=e.U.pathname+e.U.search)}const zt=t=>"function"==typeof t?{handleRequest:t}:t,Wt=(t,e)=>"function"==typeof t?{handleUpgrade:t,shouldUpgrade:e}:{shouldUpgrade:e,...t},Jt=(t,e=Xt)=>({handleRequest:t,handleUpgrade:t,shouldUpgrade:e}),Gt=t=>"function"==typeof t?{handleError:t}:t,Vt=t=>"function"==typeof t?{handleRequest:t}:t,Zt=t=>"function"==typeof t?{handleUpgrade:t}:t,Xt=()=>!1,Yt=Symbol("http");class Kt{constructor(){this.ft=[],this.ut=[]}A(t,e,n,i,r){const o=n?((t,e)=>{const n=["^"],i=[],r=/[{}]|\/+|\\(.)|[:*]([a-zA-Z0-9_]*)/g,[{ot:o,st:s},c]=Bt(t);if("/"!==c[0])throw new Error("path must begin with '/' or flags");let a=0,f=0;for(const t of c.matchAll(r)){t.index>a&&n.push(Mt(c.substring(a,t.index)));const e=t[0];if("{"===e)n.push("(?:"),++f;else if("}"===e){if(0===f)throw new Error(`unbalanced optional braces in path at ${t.index}`);--f,n.push(")?")}else if("/"===e[0])n.push(e),s||n.push("+");else if("\\"===e[0])n.push(Mt(t[1]));else{const r=e[0],o=t[2];if(!o)throw new Error(`unnamed parameter or unescaped '${r}' at ${t.index}`);"*"===r?(n.push("(.*?)"),i.push({ht:o,lt:s?Ft:Ut})):(n.push("([^/]+?)"),i.push({ht:o,lt:Rt}))}a=t.index+e.length}if(a<c.length&&n.push(Mt(c.substring(a))),f>0)throw new Error("unbalanced optional braces in path");return e&&(n.push("(?:"),s?n.push("(?:(?<=/)|/)"):n.push("(?:/+|(?<=/))"),n.push("(?<rest>.*))?")),n.push("$"),{dt:new RegExp(n.join(""),o?"i":""),wt:i}})(n,i):{dt:null,wt:[]};return this.ft.push({yt:t,gt:"string"==typeof e?e.toLowerCase():e,bt:o.dt,vt:o.wt,Et:r}),this}use(...t){return this.A(null,null,null,!0,t.map(Vt))}mount(t,...e){return this.A(null,null,t,!0,e.map(Vt))}within(t,e){const n=new Kt;return e(n),this.mount(t,n)}at(t,...e){return this.A(null,null,t,!1,e.map(Vt))}onRequest(t,e,...n){return this.A(te(t),Yt,e,!1,n.map(Vt))}onUpgrade(t,e,n,...i){return this.A(te(t),e,n,!1,i.map(Zt))}onError(...t){return this.A(null,null,null,!0,t.map(Gt))}onReturn(...t){return this.ut.push(...t),this}on(t,...e){const n=/^([A-Z]+) (\/.*)$/.exec(t);if(!n)throw new Error("invalid method + path spec: "+JSON.stringify(t));return this.A(n[1],Yt,n[2],!1,e.map(Vt))}get=(t,...e)=>this.A(Qt,Yt,t,!1,e.map(Vt));delete=(...t)=>this.onRequest("DELETE",...t);getOnly=(...t)=>this.onRequest("GET",...t);head=(...t)=>this.onRequest("HEAD",...t);options=(...t)=>this.onRequest("OPTIONS",...t);patch=(...t)=>this.onRequest("PATCH",...t);post=(...t)=>this.onRequest("POST",...t);put=(...t)=>this.onRequest("PUT",...t);ws=(...t)=>this.onUpgrade("GET","websocket",...t);async handleRequest(t){return this.xt(t,new tt)}async handleUpgrade(t){return this.xt(t,new tt)}async handleError(t,e){const n=new tt;return n.A(t),this.xt(e,n)}shouldUpgrade(t){return this._t(pt(t))}_t(t){for(const e of this.ft){const n=ee(t,e);if(!n)continue;let i=()=>{};if(!0!==n)try{i=jt(t,n.Tt,[])}catch{continue}try{for(const n of e.Et)if(re(n,t))return!0}finally{i()}}return!1}async xt(t,e){const n=pt(t),i=await this.St(n,e);if(e.$)throw e.O;return i}async St(t,e){for(const n of this.ft){const i=ee(t,n);if(!i)continue;let r=()=>{};if(!0!==i)try{const e=i.kt();r=jt(t,i.Tt,e)}catch(t){e.A(t);continue}try{const i=await ne(t,n.Et,this.ut,e);if(i===Nt)break;if(i===Ot)continue;return i}finally{r()}}return At}}const Qt=new Set(["HEAD","GET"]),te=t=>t?"string"==typeof t?t:new Set(t):null;function ee(t,e){if("string"==typeof e.yt){if(e.yt!==t.F.method)return!1}else if(null!==e.yt&&!e.yt.has(t.F.method??""))return!1;if(e.gt===Yt){if(t.D)return!1}else if(null!==e.gt&&!t.D?.has(e.gt))return!1;if(null===e.bt)return!0;const n=e.bt.exec(t.C);return!!n&&{Tt:"/"+(n.groups?.rest??""),kt:()=>e.vt.map((t,e)=>[t.ht,t.lt(n[e+1])])}}async function ne(t,e,n,i){for(const r of e){let e=await ie(r,t,i);if(e!==At){if(!t.D&&!(e instanceof kt)&&n.length)try{const i="object"==typeof e?e:void 0,r=t.F,o=t.L.W;for(const t of n)await t(i,r,o)}catch(t){i.A(t);continue}return e}}return Ot}async function ie(t,e,n){if(t instanceof Kt)return t.St(e,n);let i=At;try{if(n.$){if(t.handleError){const r=n.O;n.N(),i=await t.handleError(r,e.F,e.D?{socket:e.L.W,head:e.L.o}:{response:e.L.W})}}else if(e.D){if(t.handleUpgrade){const n=e.L;i=await t.handleUpgrade(e.F,n.W,n.o)}}else t.handleRequest&&(i=await t.handleRequest(e.F,e.L.W))}catch(t){t instanceof kt?i=t:n.A(t)}finally{await((t,e)=>lt(t.j,e,t))(e,n)}return i===$t?void 0:i}function re(t,e){if(t instanceof Kt)return t._t(e);if(!t.shouldUpgrade)return Boolean(t.handleUpgrade);try{return t.shouldUpgrade(e.F)}catch(t){return e.$t(t),!1}}function oe(t,{onError:e=at,socketCloseTimeout:n=500}={}){const i=[],r=new Set,o=()=>{const t=[...i];i.length=0;for(const e of t)e()},s=t=>{t&&(r.size?i.push(t):setImmediate(t))},c=t=>{r.add(t),t.H.push(()=>{r.delete(t),!r.size&&i.length&&setImmediate(o)})},a=(t,n)=>e(t,"tearing down",n);return{request:async(n,i)=>{let r;try{r=ut(n,!1)}catch(t){return e(t,"parsing request",n),void st(new ot(400),0,i)}ht(r,!1,{W:i},a),c(r);const o=new tt,s=await ie(t,r,o);o.$?(e(o.O,"handling request",n),st(o.O,0,i)):s!==At&&s!==Ot&&s!==Nt||st(new ot(404),0,i)},upgrade:async(i,r,o)=>{let s;r.once("finish",()=>{const t=setTimeout(()=>r.destroy(),n);r.once("close",()=>clearTimeout(t))});try{s=ut(i,!0)}catch(t){return e(t,"parsing upgrade",i),void ct(new ot(400),0,r)}ht(s,!0,{W:r,o},a),o=X,c(s);const f=new tt,u=await ie(t,s,f);f.$?(e(f.O,"handling upgrade",i),s.B(f.O,i,r)):u!==At&&u!==Ot&&u!==Nt||(console.warn(`Upgrade ${i.headers.upgrade} request for ${i.url} fell-through. This probably means you need to add shouldUpgrade to one of your upgrade handlers, or if this is intentional, explicitly reject the request (throw new HTTPError(404)) instead of using CONTINUE.`),s.B(new ot(404),i,r))},shouldUpgrade:n=>{try{const i=ut(n,!0);return i.$t=t=>e(t,"checking should upgrade",n),re(t,i)}catch{return!1}},clientError:(t,n)=>{const i=n.At,r=t.code;n.writable&&!i?.headersSent&&n.end(ce.get(r)??ae),n.destroy(t),"HPE_INVALID_EOF_STATE"===r||e(t,"initialising request")},softClose(t,e,n){for(const n of r)bt(n,t,e);s(n)},hardClose(t){for(const t of r)vt(t);s(t)},countConnections:()=>r.size}}const se=t=>Buffer.from(`HTTP/1.1 ${t} ${n[t]}\r\nConnection: close\r\n\r\n`),ce=/*@__PURE__*/new Map([["HPE_HEADER_OVERFLOW",/*@__PURE__*/se(431)],["HPE_CHUNK_EXTENSIONS_OVERFLOW",/*@__PURE__*/se(413)],["ERR_HTTP_REQUEST_TIMEOUT",/*@__PURE__*/se(408)]]),ae=/*@__PURE__*/se(400);class fe extends EventTarget{constructor(t){super(),this.Ot=t}attach(t,e={}){const n=oe(this.Ot,{...e,onError:this.Nt.bind(this,t)});!1===e.autoContinue&&t.addListener("checkContinue",n.request),!1===e.rejectNonStandardExpect&&t.addListener("checkExpectation",n.request),t.addListener("request",n.request),t.addListener("upgrade",n.upgrade);const i=t.shouldUpgradeCallback??(()=>!1);!1!==e.overrideShouldUpgradeCallback&&(t.shouldUpgradeCallback=n.shouldUpgrade),t.addListener("clientError",n.clientError);let r=!1;return(e="",o=-1,s=!1)=>{r||(r=!0,t.removeListener("checkContinue",n.request),t.removeListener("checkExpectation",n.request),t.removeListener("request",n.request),t.removeListener("upgrade",n.upgrade),t.shouldUpgradeCallback===n.shouldUpgrade&&(t.shouldUpgradeCallback=i),t.removeListener("clientError",n.clientError));const c=()=>{s&&t.closeAllConnections()};if(o>0){const i=setTimeout(n.hardClose,o);n.softClose(e,this.Nt.bind(this,t),()=>{clearTimeout(i),c()})}else 0===o&&n.hardClose(c);return n}}listen(t,e,n={}){n.shouldUpgradeCallback&&(n={overrideShouldUpgradeCallback:!1,...n});const r=i(n);n.socketTimeout&&r.setTimeout(n.socketTimeout);const o=this.attach(r,n),s=Object.assign(r,{closeWithTimeout:(t,e)=>new Promise(n=>{r.close(()=>n()),o(t,e,!0)})});return new Promise((i,o)=>{r.once("error",o),r.listen(t,e,n.backlog??511,()=>{r.off("error",o),i(s)})})}Nt(t,e,n,i){const r={error:e,server:t,action:n,request:i};this.dispatchEvent(new CustomEvent("error",{detail:r}))&&at(e,n,i)}}const ue=t=>wt(t)?.U??Y(t),he=t=>ue(t).search,le=t=>new URLSearchParams(ue(t).searchParams),de=(t,e)=>ue(t).searchParams.get(e);function we(t,e){const n=t.indexOf(e);return-1===n?[t]:[t.substring(0,n),t.substring(n+e.length)]}function pe(t){const e=t.headers.authorization;if(!e)return;const[n,i]=we(e," ");return void 0!==i?[n.trim().toLowerCase(),i.trim()]:void 0}function me(t){const e=/^text\/.*;\s*charset=([^;]+)/i.exec(t.headers["content-type"]??"");return e?.[1]?.trim().toLowerCase()??void 0}function ye(t){const e=t.headers["if-range"];return e&&"string"==typeof e?/^("|W\/")/.test(e)?{etag:[e]}:{modifiedSeconds:_e(e)}:{}}function ge(t,e,{maxRanges:n=10,maxNonSequential:i=2,maxWithOverlap:r=2}={}){const o=t.headers.range;if(!o||0===e)return;const[s,c]=we(o,"=");if("bytes"!==s||!c)return;const a=new ot(416,{headers:{"content-range":`bytes */${e}`}}),f=t=>{const e=ve(t);if(void 0===e)throw a;return e},u=[];for(const t of c.split(",")){const[i,r]=we(t.trim(),"-");if(void 0===r)throw a;let o;if(i)o={start:f(i),end:r?Math.min(f(r),e-1):e-1};else{if(!r)throw a;o={start:Math.max(e-f(r),0),end:e-1}}if(!(o.start>=e)){if(o.end<o.start||u.length>=n)throw a;u.push(o)}}if(!u.length)throw a;if(u.length>i)for(let t=0;t<u.length-1;++t)if(u[t].start>u[t+1].start)throw a;if(u.length>r)for(let t=1;t<u.length;++t){const e=u[t];for(let n=0;n<t;++n){const t=u[n];if(e.end>=t.start&&t.end>=e.start)throw a}}return{ranges:u,totalSize:e}}function be(t){if(void 0!==t)return"number"==typeof t?[String(t)]:t.length?"string"==typeof t?t.split(",").map(t=>t.trim()):t.flatMap(t=>t.split(",").map(t=>t.trim())):[]}function ve(t){if(t&&/^\s*-?\d+\s*$/.test(t))return Number.parseInt(t,10)}function Ee(t){if(t)return t.split(",").map(t=>{const[e,...n]=t.split(";"),i=new Map(n.map(t=>{const[e,n]=we(t,"=");return[e.trim(),n?.trim()??""]})),r=e.trim(),o="*/*"===r||"*"===r?0:r.endsWith("/*")?1:2,s=Math.max(0,Math.min(1,Number.parseFloat(i.get("q")??"1")));return{name:r,specifiers:i,specificity:o,q:s}})}function xe(t){const e=new Map,n=/\s*([^=]+)=([^";]*?|"(?:[^\\"]|\\.)*")\s*(?:;|$)/y;for(;n.lastIndex<t.length;){const i=n.exec(t);if(!i)throw new ot(400,{body:"invalid HTTP key values"});const r=i[1].toLowerCase();let o=i[2];'"'===o[0]&&(o=o.substring(1,o.length-1).replaceAll(/\\(.)/g,(t,e)=>e)),e.set(r,o)}return e}function _e(t){if("string"!=typeof t)return;const e=Date.parse(t);return Number.isNaN(e)?void 0:e/1e3|0}const Te=t=>"function"==typeof t?t:()=>t;class Se{constructor(t=Pe){this.Pt=Te(t)}set(t,e){Ae(t,this,e)}get(t){return Oe(t,this)}clear(t){Ne(t,this)}withValue(t){return Jt(e=>(Ae(e,this,t),At))}}const ke=(t,...e)=>{const n={Pt:n=>t(n,...e)};return t=>Oe(t,n)};function $e(t){return t.Mt||(t.Mt=new Map),t.Mt}function Ae(t,e,n){$e(pt(t)).set(e,n)}function Oe(t,e){const n=wt(t);if(!n)return e.Pt(t);const i=$e(n);if(i.has(e))return i.get(e);const r=e.Pt(t);return i.set(e,r),r}function Ne(t,e){const n=wt(t);n?.Mt?.delete(e)}const Pe=()=>{throw new Error("property has not been set")};function Me({realm:t,extractAndValidateToken:e,fallbackTokenFetcher:n,closeOnExpiry:i=!0,softCloseBufferTime:r=0,onSoftCloseError:o}){const s=Te(t);return Jt(async t=>{const c=Date.now(),a=await s(t),f={"www-authenticate":`Bearer realm="${a}"`},u=pe(t),h="bearer"===u?.[0]?u[1]:await(n?.(t));if(!h)throw new ot(401,{headers:f,body:"no token provided"});const l=await e(h,a,t);if(!l)throw new ot(401,{headers:f,body:"invalid token"});if("object"==typeof l){if("nbf"in l&&"number"==typeof l.nbf&&c<1e3*l.nbf)throw new ot(401,{headers:f,body:"token not valid yet"});if("exp"in l&&"number"==typeof l.exp){const e=1e3*l.exp;if(c>=e-r)throw new ot(401,{headers:f,body:"token expired"});i&&((t,e,n,i=0,r=at)=>{const o=pt(t),s=n-Math.max(i,0),c=o.tt??Number.POSITIVE_INFINITY,a=o.et?.nt??c;s>=a&&n>=c||(n<c&&(o.tt=n),s<a&&(o.et={nt:s,X:e,Y:r}),Et(o))})(t,"token expired",e,r,o)}}return Ce.set(t,{realm:a,data:l,scopes:Be(l)}),At})}const Re=t=>Ce.get(t).data,Fe=(t,e)=>Ce.get(t).scopes.has(e),Ue=t=>Jt(e=>{const n=Ce.get(e);if(!n.scopes.has(t))throw new ot(403,{headers:{"www-authenticate":`Bearer realm="${n.realm}", scope="${t}"`},body:`scope required: ${t}`});return At}),Ce=/*@__PURE__*/new Se({realm:"",data:null,scopes:new Set});function Be(t){if(!t||"object"!=typeof t||!("scopes"in t))return new Set;const{scopes:e}=t;return Array.isArray(e)?new Set(e):"string"==typeof e?new Set([e]):e&&"object"==typeof e?new Set(Object.entries(e).filter(([t,e])=>e).map(([t])=>t)):new Set}function Ie(t,e){const n=`${0|e.mtimeMs} ${e.size} ${t??""}`;return`W/"${h("sha256").update(n).digest("base64").substring(0,12)}"`}async function je(t){const e=h("sha256");return"string"==typeof t?await d(c(t),e):await d(t.createReadStream({start:0,autoClose:!1}),e),`"sha256-${e.digest("base64")}"`}const He=(t,e)=>new RegExp(t,(t.unicodeSets?"v":t.unicode?"u":"")+(t.ignoreCase||e?"i":"")),qe={mime:"accept",language:"accept-language",encoding:"accept-encoding"},De={zstd:"{file}.zst",br:"{file}.br",gzip:"{file}.gz",deflate:"{file}.deflate",identity:"{file}"},Le=t=>{return{type:"encoding",options:(e=t,n=De,Array.isArray(e)?e.map(t=>[t,n[t]]):Object.entries(e)).map(([t,e])=>({match:t,file:e}))};var e,n};function ze(t,e=10){const n=t.map(t=>({Rt:t.type,Ft:t.options.map(t=>({Ut:t.file,Ct:"string"==typeof t.match?t.match.toLowerCase():He(t.match,!0),Bt:t.as??("string"==typeof t.match?t.match:void 0)}))})).filter(t=>t.Ft.length>0);return{options(t,i){let r=e;const o={};return function*t(e,s){const c=n[s];if(!c)return--r,void(yield{filename:e,info:o});const a=new Set,f=(h=i[c.Rt],h?.length?1===h.length?h:[...h].sort(We):[]),u=[];var h;for(const t of c.Ft){const e=f.find(e=>"string"==typeof t.Ct?e.name.toLowerCase()===t.Ct:t.Ct.test(e.name));e&&u.push({...e,It:t})}for(const n of u.sort(We)){const i=Je(e,n.It.Ut);if(!a.has(i)&&(a.add(i),o[c.Rt]=n.It.Bt,yield*t(i,s+1),r<=0))return}o[c.Rt]=void 0,!a.has(e)&&r>0&&(yield*t(e,s+1))}(t,0)},vary:[...new Set(n.map(t=>qe[t.Rt]))].join(" ")}}const We=(t,e)=>e.q-t.q||e.specificity-t.specificity;function Je(t,e){return e.replaceAll(/\{(?:file|base|ext)\}/g,e=>"{file}"===e?t:"{base}"===e?t.replace(/\.[^.]*$/,""):m(t))}const Ge=/*@__PURE__*/Ye("bin=application/octet-stream;gz(ip),json,ogg,pdf,wasm,xml,y(a)ml,zip,zst(d)=application/{ext};aac,flac,mid(i),wav(e)=audio/{ext};mp3=audio/mpeg;oga,opus=audio/ogg;otf,ttf,woff,woff2=font/{ext};apng,avif,bmp,gif,heic,heif,jp(e)g,png,tif(f),webp=image/{ext};ico,cur=image/x-icon;svg=image/svg+xml;3mf,obj,stl,u3d=model/{ext};wrl=model/vrml;x3d=model/x3d+xml;x3db=model/x3d+binary;x3dv=model/x3d+vrml;css,csv,htm(l),rtf,vcard=text/{ext};(m)js=text/javascript;md=text/markdown;txt=text/plain;3gp(p),3g(pp)2,mp4,mp(e)g,h264=video/{ext};mov=video/quicktime;ogv=video/ogg");let Ve=/*@__PURE__*/new Map(Ge);function Ze(){Ve=new Map(Ge)}function Xe(t){const e=new Map;for(const n of t.split("\n")){const[t,...i]=n.replaceAll(/\s+/g," ").trim().split(" ");if(!t.startsWith("#"))for(const n of i)e.set(n.toLowerCase(),t)}return e}function Ye(t){const e=new Map;for(const n of t.split(/[\n;]/g)){const[t,i,r]=/^ *([^=]+)=(.*)$/.exec(n)??[null,null,""];for(const t of i?.split(",")??[]){const[n,i,o="",s=""]=/^([^(]*)(?:\(([^)]*)\)(.*))?$/.exec(t),c=i+o+s,a=r.replace("{ext}",c);e.set(c.toLowerCase(),a),o&&e.set((i+s).toLowerCase(),a)}}return e}function Ke(t){for(const[e,n]of t)Ve.set(e.toLowerCase(),n)}function Qe(t,e="utf-8"){"."===t[0]&&(t=t.substring(1));const n=Ve.get(t)??"application/octet-stream";return n.startsWith("text/")&&!n.includes("charset=")?`${n}; charset=${e}`:n}async function tn(t,e,n){const i=await x(t),r={file:t,mime:Qe(m(t)),rawSize:i.byteLength,bestSize:i.byteLength,created:0};if(r.rawSize<=n)return r;if(["image","video","audio","font"].includes(r.mime.split("/")[0]))return r;for(const o of e){const e=rn.get(o.match),s=y(g(t),Je(b(t),o.file));if(!e||s===o.file)continue;const c=await e(i);c.byteLength<=r.rawSize-n&&(await _(s,c),r.bestSize=Math.min(r.bestSize,c.byteLength),++r.created)}return r}async function en(t,e,n){const i=[];await nn(t,i);const r=new Set(i);for(const t of r)for(const n of e){const e=y(g(t),Je(b(t),n.file));e!==t&&r.delete(e)}return Promise.all([...r].map(t=>tn(t,e,n)))}async function nn(t,e){const n=await T(t);if(n.isDirectory())for(const n of await S(t))await nn(y(t,n),e);else n.isFile()&&e.push(t)}const rn=/*@__PURE__*/new Map([["zstd",t=>p(w.zstdCompress)(t)],["br",t=>p(w.brotliCompress)(t,{params:{[w.constants.BROTLI_PARAM_QUALITY]:w.constants.BROTLI_MAX_QUALITY,[w.constants.BROTLI_PARAM_SIZE_HINT]:t.length}})],["gzip",t=>p(w.gzip)(t,{level:w.constants.Z_BEST_COMPRESSION})],["deflate",t=>p(w.deflate)(t)]]);class on{constructor(t,{subDirectories:e=!0,caseSensitive:n="exact",allowAllDotfiles:i=!1,allowAllTildefiles:r=!1,allowDirectIndexAccess:o=!1,allow:s=[".well-known"],hide:c=[],indexFiles:a=["index.htm","index.html"],implicitSuffixes:f=[],negotiation:u}){this.jt=t,this.Ht=!0===e?Number.POSITIVE_INFINITY:e||0,this.qt=n,this.Dt=i,this.Lt=r,this.zt=o,this.Wt=a,this.Jt=["",...f],this.Gt=new Set(s.map(t=>this.Vt(t))),this.Zt=new Set,this.Xt=[];for(const t of c)"string"==typeof t?this.Zt.add(this.Vt(t)):this.Xt.push(He(t,!n));this.Yt=new Set(a.map(t=>this.Vt(t))),u?.length?(this.Kt=ze(u),this.vary=this.Kt.vary):this.vary=""}static async build(t,e){return new on(await k(t,{encoding:"utf-8"})+v,e)}Vt(t){return"exact"===this.qt?t:t.toLowerCase()}Qt(t){if(this.Gt.has(t))return!0;const e=t.trim();return!(!("~"!==e[0]&&"~"!==e[e.length-1]||this.Lt)||"."===e[0]&&!this.Dt||this.Zt.has(e)||this.Xt.some(t=>t.test(e)))}async find(t,e={}){let n=t.join(v);"force-lowercase"===this.qt&&(n=n.toLowerCase());let i=E(this.jt,n);if(!i.startsWith(this.jt)&&i+v!==this.jt)return null;let r=null,o=null;for(const t of this.Jt){const e=i+t;if(r=e.substring(this.jt.length).split(v).filter(t=>t),r.length>this.Ht+1)return null;if(r.some(t=>!this.Qt(this.Vt(t))))return null;const n=r[r.length-1]??"";if(!this.zt&&this.Yt.has(this.Vt(n))&&!this.Gt.has(this.Vt(n)))return null;if(o=await k(e,{encoding:"utf-8"}).catch(()=>null),o){i=e;break}}if(!o||!r)return null;if(this.Vt(o)!==this.Vt(i))return null;let s=o,c=await T(o).catch(()=>null);if(!c)return null;if(c.isDirectory()){if(r.length>this.Ht)return null;for(const t of this.Wt){const e=y(o,t);if(c=await T(e).catch(()=>null),c?.isFile()){s=e;break}}}if(!c?.isFile())return null;if(this.Kt){const t=b(s),n=g(s);for(const i of this.Kt.options(t,e)){if(!i.filename||i.filename.includes(v))continue;const t=await cn({canonicalPath:s,negotiatedPath:y(n,i.filename),...i.info});if(t)return t}}return cn({canonicalPath:s,negotiatedPath:s})}async precompute(){const t=new Map,e=(e,n)=>{const i=t.get(e);(!i||n.p>i.p)&&t.set(e,n)},n=new J({dir:[this.jt],depth:0});for(const{dir:t,depth:i}of n){const r=await S(y(...t),{withFileTypes:!0,encoding:"utf-8"}),o=new Set(r.map(t=>this.Vt(t.name)));for(const s of r){const r=this.Vt(s.name);if(!this.Qt(r))continue;const c=[...t,s.name];if(s.isDirectory())i<this.Ht&&n.push({dir:c,depth:i+1}),e(this.Vt(c.slice(1).join("/")),sn);else if(s.isFile()){const n={file:y(...c),dir:y(...t),basename:r,siblings:o},i=this.Wt.indexOf(r);if(-1!==i&&(e(this.Vt(t.slice(1).join("/")),{...n,p:this.Wt.length+1-i}),!this.zt&&!this.Gt.has(r)))continue;const a=this.Vt(c.slice(1).join("/"));for(let t=0;t<this.Jt.length;++t){const i=this.Jt[t];s.name.endsWith(i)&&e(a.substring(0,a.length-i.length),{...n,p:-t})}}}}return{find:async(e,n={})=>{const i=t.get(this.Vt(e.join("/")));if(!i?.file)return null;if(this.Kt)for(const t of this.Kt.options(i.basename,n)){if(!i.siblings.has(this.Vt(t.filename)))continue;const e=await cn({canonicalPath:i.file,negotiatedPath:y(i.dir,t.filename),...t.info});if(e)return e}return cn({canonicalPath:i.file,negotiatedPath:i.file})},vary:this.vary}}}const sn={file:"",dir:"",basename:"",siblings:new Set,p:1};async function cn(t){const e=await $(t.negotiatedPath,a.O_RDONLY).catch(()=>null);if(!e)return null;const n=()=>(e.close().catch(()=>{}),null),i=await e.stat().catch(n);return i?.isFile()?{handle:e,stats:i,...t}:n()}const an=/*@__PURE__*/ke(async t=>{const e=St(t);if(e.aborted)throw $t;e.throwIfAborted();const n=await A(y(N(),"upload"));Tt(t,()=>O(n,{recursive:!0}));let i=0;const r=()=>{if(e.aborted)throw $t;return y(n,(++i).toString(10).padStart(6,"0"))};return{dir:n,nextFile:r,save:async(t,{mode:n=384}={})=>{const i=r(),o=f(i,{mode:n});try{return await d(t,o,{signal:e}),{path:i,size:o.bytesWritten}}finally{o.close()}}}});function fn(t){const e=pt(t);if(!e.L)throw new Error("cannot call acceptBody from shouldUpgrade");if(e.I.signal.aborted)throw $t;e.te||e.D||(e.te=!0,"100-continue"===t.headers.expect?.trim().toLowerCase()&&e.L.W.writeContinue())}function un(t,{blockRequestHeaders:e=["connection","expect","host","keep-alive","proxy-authorization","transfer-encoding","upgrade","via"],requestHeaders:n=[],blockResponseHeaders:i=["connection","keep-alive","transfer-encoding"],responseHeaders:s=[],agent:c,keepAlive:a=!0,maxSockets:f=10,...u}={}){let h;t.startsWith("https://")?(c??=new M({keepAlive:a,maxSockets:f,...u}),h=o):(c??=new r({keepAlive:a,maxSockets:f,...u}),h=R);const l=t.endsWith("/")?t:t+"/";return zt((r,o)=>new Promise((a,f)=>{const u=St(r),w=t=>f(u.aborted?$t:new ot(502,{cause:t})),p=new URL(l+r.url?.substring(1)),m=p.toString();if(!m.startsWith(l)&&m!==t)return f(new ot(400,{message:"directory traversal blocked"}));fn(r);let y={...r.headers};hn(y,e);for(const t of n)y=t(r,y);const g=h(p,{agent:c,method:r.method,headers:y,signal:u});g.once("error",w),g.once("response",t=>{if(!o.headersSent){let e={...t.headers};hn(e,i);for(const n of s)e=n(r,t,e);o.writeHead(t.statusCode??200,t.statusMessage,e)}d(t,o).then(a,f)}),d(r,g).catch(w)}))}function hn(t,e){for(const e of be(t.connection)??[])delete t[e.toLowerCase()];for(const n of e)delete t[n]}function ln({trustedProxyCount:t,trustedProxyAddresses:e,trustedHeaders:n}){const i=e?D(e):()=>!0,r=t??(e?Number.POSITIVE_INFINITY:0),o=new Set(n);return ke(t=>{const e=e=>{if(o.has(e))return be(t.headers[e])?.reverse()},n=e("forwarded"),s=e("x-forwarded-for"),c=e("x-forwarded-host"),a=e("x-forwarded-proto"),f=e("x-forwarded-protocol"),u=e("x-url-scheme"),h=e("via")?.map(t=>{const e=/^([^/ ]+\/)?([^ ]+) (.+)$/.exec(t);return e?.[3]?q(e[3]):void 0}),l=[dn(t)];if(n)for(const t of n)try{const e=xe(t);l.push({client:q(e.get("for")),server:q(e.get("by")),host:e.get("host"),proto:e.get("proto")})}catch{l.push({client:void 0,server:void 0,host:void 0,proto:void 0})}else if(s){const t=s.map(q),e=c??[],n=a??f??u??[];let i=l[0].client;for(let r=0;r<t.length;++r){const o=t[r];l.push({client:o,server:h?.[r]??(i?{...i,port:void 0}:void 0),host:e[r],proto:n[r]}),i=o}}else if(h)for(const t of h)l.push({client:void 0,server:t,host:void 0,proto:void 0});let d=Math.min(1+r,l.length);for(let t=0;t<d-1;++t)i(l[t].client)||(d=t+1);return Object.freeze({trusted:l.slice(0,d),untrusted:l.slice(d),outwardChain:l,edge:l[d-1]})})}const dn=t=>({client:{...q(t.socket.remoteAddress)??wn,port:t.socket.remotePort},server:{...q(t.socket.localAddress)??wn,port:t.socket.localPort},host:t.headers.host,proto:void 0}),wn={type:"alias",ip:"_disconnected",port:void 0};function pn(t,e){return delete e.forwarded,delete e["x-forwarded-for"],delete e["x-forwarded-host"],delete e["x-forwarded-proto"],delete e["x-forwarded-protocol"],delete e["x-url-scheme"],e}function mn(t,e){const n=pn(0,e);return n.forwarded=bn([dn(t)]),n}const yn=(t,{onlyTrusted:e=!1}={})=>(n,i)=>{const r=pn(0,i),o=t(n);return r.forwarded=bn([...e?o.trusted:o.outwardChain].reverse()),r};function gn(t,e){let n=t.headers.forwarded;const i=bn([dn(t)]);n?n+=", "+i:n=i;const r=pn(0,e);return r.forwarded=n,r}function bn(t){return t.filter(t=>t.server||t.client).map(t=>Object.entries({for:t.client?.ip,by:t.server?.ip,host:t.host,proto:t.proto}).filter(([t,e])=>e).map(([t,e])=>e&&/[^a-zA-Z0-9._]/.test(e)?`${t}="${e.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(",","-")}"`:`${t}=${e}`).join("; ")).join(", ")}class vn{constructor(t,{fatal:e=!1}={}){this.ee=t,this.ne=e,this.ie=new Uint8Array(4),this.re=new DataView(this.ie.buffer),this.oe=0}decode(t,{stream:e=!1}={}){const n=t.byteLength,i=[];let r=0;if(this.oe>0){if(r=4-this.oe,n<r)return this.ie.set(t,this.oe),this.oe+=n,"";this.ie.set(t.subarray(0,r),this.oe),i.push(this.re.getUint32(0,this.ee)),this.oe=0}const o=new DataView(t.buffer,t.byteOffset,t.byteLength);let s=r;for(const t=n-3;s<t;s+=4)i.push(o.getUint32(s,this.ee));if(e)s<n&&this.ie.set(t.subarray(s)),this.oe=n-s;else if(this.oe=0,s<n){if(this.ne)throw new Error("invalid byte length for utf-32 content");i.push(65533)}return i.length>0?String.fromCodePoint(...i):""}}class En extends F{constructor(t){super({transform(e,n){try{const i=t.decode(e,{stream:!0});i&&n.enqueue(i)}catch(t){n.error(t)}},flush(e){try{const n=t.decode(X);n&&e.enqueue(n)}catch(t){e.error(t)}}})}}const xn=new Map;function _n(t,e){xn.set(t.toLowerCase(),e)}function Tn(){_n("utf-32be",{decoder:t=>new vn(!1,t)}),_n("utf-32le",{decoder:t=>new vn(!0,t)})}function Sn(t,e={}){const n=xn.get(t.toLowerCase());if(n)return n.decoder(e);try{return new TextDecoder(t,e)}catch{throw new ot(415,{body:`unsupported charset: ${t}`})}}function kn(t,e={}){const n=xn.get(t.toLowerCase());if(n)return n.decoderStream?n.decoderStream(e):new En(n.decoder(e));try{return new U(t,e)}catch{throw new ot(415,{body:`unsupported charset: ${t}`})}}const $n=["utf-32be",null,"utf-16be","utf-16be","utf-32le","utf-16le",null,"utf-8"];function An(t,e,n){const i=_e(t.headers["if-modified-since"]),r=be(t.headers["if-none-match"]);if(r){if(Nn(e,n,r))return!1}else if(i&&(n.mtimeMs/1e3|0)<=i)return!1;return!0}function On(t,e,n){let i=!0;const r=ye(t);return r.etag&&(i&&=Nn(e,n,r.etag)),r.modifiedSeconds&&(i&&=(n.mtimeMs/1e3|0)===r.modifiedSeconds),i}function Nn(t,e,n){if(n.includes("*"))return!0;const i=t.getHeader("etag");if("string"==typeof i){if(n.includes(i))return!0;if(i.startsWith('W/"'))return!1}return!!n.some(t=>t.startsWith('W/"'))&&n.includes(Ie(t.getHeader("content-encoding"),e))}class Pn extends F{constructor(t,e){super({transform(i,r){n+=i.byteLength,n>t?r.error(e):r.enqueue(i)}});let n=0}}function Mn(t,{maxExpandedLength:e=Number.POSITIVE_INFINITY,maxContentLength:n=e,maxEncodingSteps:i=1}={}){const r=ve(t.headers["content-length"]);if(void 0!==r&&r>n)throw new ot(413);const o=be(t.headers["content-encoding"])??[];if(o.length>i)throw new ot(415,{body:"too many content-encoding stages"});fn(t);let s=I.toWeb(t);void 0===r&&Number.isFinite(n)&&(s=s.pipeThrough(new Pn(n,new ot(413))));for(const t of o.reverse())s=s.pipeThrough(Cn(t));return Number.isFinite(e)&&(s=s.pipeThrough(new Pn(e,new ot(413,{body:"decoded content too large"})))),s}function Rn(t,e={}){const n=Mn(t,e),i=me(t)??e.defaultCharset??"utf-8";return n.pipeThrough(kn(i,e))}async function Fn(t,e={}){const n=[];for await(const i of Rn(t,e))n.push(i);return n.join("")}async function Un(t,e={}){const n=await(async(t,e)=>{const n=t.getReader(),i=new Uint8Array(3);let r=0,o=null;for(;;){const t=await n.read(),e=3-r;if(t.done){0===r?(i[0]=1,i[1]=1):1===r&&(i[1]=i[0]),i[2]=i[0],o=null;break}if(o=t.value,o.byteLength>=e){i.set(o.subarray(0,e),r);break}i.set(o,r),r+=o.byteLength}const s=$n[(i[0]?4:0)|(i[1]?2:0)|(i[2]?1:0)];if(!s)throw n.cancel(),new ot(415,{body:"invalid JSON encoding"});const c=kn(s,e),a=c.writable.getWriter();return r&&a.write(i.subarray(0,r)),o&&a.write(o),n.releaseLock(),a.releaseLock(),t.pipeThrough(c)})(Mn(t,e),e),i=[];for await(const t of n)i.push(t);return JSON.parse(i.join(""))}function Cn(t){switch(t.toLowerCase()){case"gzip":case"x-gzip":return new C("gzip");case"deflate":return new C("deflate");case"br":try{return new C("brotli")}catch{return j.toWeb(w.createBrotliDecompress())}case"zstd":try{return j.toWeb(w.createZstdDecompress())}catch{throw new ot(415,{body:"unsupported content encoding"})}default:throw new ot(415,{body:"unknown content encoding"})}}function Bn(t){if(!t)return null;const[e,n]=we(t,";"),i=new Map;if(n){const t=/\s*([!#-'*+\-.0-:>-Z^-z|~]+)=(?:([!#-'*+\-.0-:>-Z^-z|~]+)|"((?:[^\x00-\x08\x0a-\x1f"\\\x7f]|\\.)*)")\s*(;|$)/gy;for(;t.lastIndex!==n.length;){const e=t.exec(n);if(!e)return null;const r=e[1].toLowerCase(),o=e[2]??e[3]?.replaceAll(/\\(.)/g,"$1")??"";i.has(r)||i.set(r,o)}}return{mime:e.trim().toLowerCase(),params:i}}function In(t,e,n,i){const r=t.byteLength;for(;e<r;){for(;e<r;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===r)break;if(59!==t[e++])return!1;for(;e<r;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===r)return!1;const o=e;for(;e<r;++e){const n=t[e];if(!Hn[n]){if(61===n)break;return!1}}if(e===r)return!1;const s=t.latin1Slice(o,e).toLowerCase();if("*"===s[s.length-1]){const i=++e;for(;e<r;++e){const n=t[e];if(!Dn[n]){if(39!==n)return!1;break}}if(e===r)return!1;const o=Sn(t.latin1Slice(i,e));for(++e;e<r&&39!==t[e];++e);if(e===r)return!1;if(++e===r)return!1;let c=e;const a=[];for(;e<r;++e){const n=t[e];if(1!==qn[n]){if(37===n){let n,i;if(e+2<r&&16!==(n=zn[t[e+1]])&&16!==(i=zn[t[e+2]])){const r=(n<<4)+i;e>c&&a.push(o.decode(t.subarray(c,e),{stream:!0})),a.push(o.decode(Buffer.from([r]),{stream:!0})),c=(e+=2)+1;continue}return!1}break}}a.push(o.decode(t.subarray(c,e)));const f=a.join("");n.has(s)||n.set(s,f);continue}if(++e===r)return!1;if(34===t[e]){let o=++e,c=!1;const a=[];for(;e<r;++e){const n=t[e];if(92!==n){if(34===n){if(c){o=e,c=!1;continue}a.push(i.decode(t.subarray(o,e)));break}if(c&&(o=e-1,c=!1),!Ln[n])return!1}else c?(o=e,c=!1):(a.push(i.decode(t.subarray(o,e),{stream:!0})),c=!0)}if(e===r)return!1;++e,n.has(s)||n.set(s,a.join(""));continue}let c=e;for(;e<r;++e){const n=t[e];if(!Hn[n]){if(e===c)return!1;break}}n.has(s)||n.set(s,i.decode(t.subarray(c,e)))}return!0}const jn=[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Hn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,...jn,0,1,0,1],33),t})(),qn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,...jn,0,1,0,1],33),t})(),Dn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,0,0,0,0,1,0,1,0,0,...jn,1,0,1,1],33),t})(),Ln=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.fill(1,32,256),t[9]=1,t[34]=0,t[92]=0,t[127]=0,t})(),zn=/*@__PURE__*/(()=>{const t=new Uint8Array(256).fill(16);for(let e=0;e<10;++e)t[48+e]=e;for(let e=0;e<6;++e)t[65+e]=e+10,t[97+e]=e+10;return t})();class Wn{constructor(t,e){const n=t.byteLength;if(!n||n>65535)throw new Error("invalid needle");this.se=t,this.ce=e,this.ae=null,this.fe=0,this.ue=null}push(t){let e=0;const n=t.byteLength,i=this.se,r=i.byteLength-1,o=n-r;let s=-this.fe;if(this.fe){const c=this.ue,a=this.ae,f=i[r];if(o>0){const n=t[s+r];n!==f||t.compare(i,-s,r,0,s+r)?s+=c[n]:(this.ce(!0,X,0,0,!0),this.fe=0,e=s+=r+1)}const u=o<0?o:0;for(;s<u;){const n=t[s+r];if(n===f&&!a.compare(i,0,-s,this.fe+s,this.fe)&&!t.compare(i,-s,r,0,s+r)){this.ce(!0,a,0,this.fe+s,!1),this.fe=0,e=s+=r+1;break}s+=c[n]}const h=this.fe;if(h>0){const e=i[0];for(;s<0;){const r=a.subarray(0,h).indexOf(e,h+s);if(-1===r){s=0;break}const o=h-r;if(!a.compare(i,1,o,r+1,h)&&!t.compare(i,o,o+n))return r&&(this.ce(!1,a,0,r,!1),a.copy(a,0,r,o)),a.set(t,o),void(this.fe+=n-r);s=r+1-h}this.ce(!1,a,0,h,!1),this.fe=0}}for(;s<o;){const n=t.indexOf(i,s);if(-1!==n){if(this.ce(!0,t,e,n,!0),n===o+1)return;e=s=n+r+1}else s=o}const c=i[0];for(;s<n;){const o=t.indexOf(c,s);if(-1===o)return void this.ce(!1,t,e,n,!0);if(!t.compare(i,1,n-o,o+1)){if(!this.ae){this.ae=Buffer.allocUnsafe(r),this.ue=new Uint16Array(256).fill(r+1);for(let t=0;t<r;++t)this.ue[i[t]]=r-t}return t.copy(this.ae,0,o),this.fe=n-o,void(o>e&&this.ce(!1,t,e,o,!0))}s=o+1}n>e&&this.ce(!1,t,e,n,!0)}destroy(){const t=this.fe;t&&this.ae&&this.ce(!1,this.ae,0,t,!1),this.fe=0}}class Jn extends H{constructor({limits:t={},preservePath:e,highWaterMark:n,fileHwm:i,defParamCharset:r="utf-8",defCharset:o="utf-8"},s){super({autoDestroy:!0,emitClose:!0,highWaterMark:n,write:Gn,destroy:Vn,final:Zn});const c=s.get("boundary");if(!c)throw new ot(400,{body:"Multipart: Boundary not found"});const a=Sn(r),f={autoDestroy:!0,emitClose:!0,highWaterMark:i},u=t.fieldSize??1048576,h=t.fileSize??Number.POSITIVE_INFINITY,l=t.fieldNameSize??100,d=t.files??Number.POSITIVE_INFINITY,w=t.fields??Number.POSITIVE_INFINITY,p=t.parts??Number.POSITIVE_INFINITY;let m,y,g,b,v,E=0,x=0,_=0,T=-1;this.he=0,this.le=!1;let S=!1;const k=new Xn(t=>{this.de=void 0;const n=t["content-disposition"];if(!n)return void(T=-1);const i=((t,e)=>{if(!t.byteLength)return null;const n=new Map;let i=0;for(;i<t.byteLength;++i)if(!Hn[t[i]]){if(!In(t,i,n,e))return null;break}return{type:t.latin1Slice(0,i).toLowerCase(),params:n}})(Buffer.from(n,"latin1"),a);if("form-data"!==i?.type)return void(T=-1);v=i.params.get("name")??"",S=v.length>l,S&&(v=v.substring(0,l));let r=i.params.get("filename*")??i.params.get("filename");void 0===r||e||(r=(t=>{for(let e=t.length;e-- >0;)if("/"===t[e]||"\\"===t[e]){t=t.slice(e+1);break}return".."===t||"."===t?"":t})(r));const s=Bn(t["content-type"]);b=s?.mime??"text/plain";const c=s?.params.get("charset")?.toLowerCase()??o;if(y=Sn(c),g=t["content-transfer-encoding"]?.toLowerCase()??"7bit","application/octet-stream"===b||void 0!==r){if(_++===d&&this.emit("filesLimit"),_>d||0===this.listenerCount("file"))return void(T=-1);this.we=new Yn(f,this),++this.he,this.emit("file",v,this.we,{nameTruncated:S,filename:r,encoding:g,mimeType:b}),T=h}else{if(x++===w&&this.emit("fieldsLimit"),x>w||0===this.listenerCount("field"))return void(T=-1);m="",T=u}});let $=0;const A=Buffer.from(`\r\n--${c}`,"latin1");this.pe=new Wn(A,(t,e,n,i,r)=>{try{if(n===i)return;if($){if(1===$){if(13===e[n])$=2;else{if(45!==e[n])return void($=0);$=3}if(++n===i)return}if(2!==$){if($=0,45!==e[n])return;return this.le=!0,void(this.pe=Qn)}if($=0,10!==e[n++])return;if(E++===p&&this.emit("partsLimit"),E>p)return;if(this.de=k,n===i)return}if(this.de){const t=this.de.push(e,n,i);if(-1===t)return this.de=void 0,k.reset(),void this.emit("error",new Error("Malformed part header"));if(t===i)return;n=t}if(T>=0){const t=Math.min(i,n+T);if(T-=i-n,this.we){if(t>n){let i;r?i=e.subarray(n,t):(i=Buffer.allocUnsafe(t-n),e.copy(i,0,n,t)),this.we.push(i)||(this.we.me??=this.ye,this.ye=void 0)}T<0&&(this.we.emit("limit"),this.we.truncated=!0)}else void 0!==m&&(m+=e.latin1Slice(n,t))}}finally{t&&(this.de?(this.emit("error",new Error("Unexpected end of headers")),this.de=void 0):this.we?(this.we.push(null),this.we=void 0):void 0!==m&&(this.emit("field",v,y.decode(Buffer.from(m,"latin1")),{nameTruncated:S,valueTruncated:T<0,encoding:g,mimeType:b}),m=void 0),$=1,T=-1)}}),this.write(ti)}ge(){if(this.de)return new Error("Malformed part header");const t=this.we;return t&&(this.we=void 0,t.destroy(new Error("Unexpected end of file"))),this.le?null:new Error("Unexpected end of form")}}function Gn(t,e,n){this.ye=n,this.pe.push(t);const i=this.ye;i&&(this.ye=void 0,i())}function Vn(t,e){this.de=void 0,this.pe=Qn,t??=this.ge();const n=this.we;n&&(this.we=void 0,n.destroy(t??void 0)),e(t)}function Zn(t){if(this.pe.destroy(),!this.le)return t(new Error("Unexpected end of form"));this.he?this.be=()=>t(this.ge()):t(this.ge())}class Xn{constructor(t){this.ve=Object.create(null),this.Ee=0,this.xe=0,this.m=0,this.ht="",this._e="",this.Te=0,this.ce=t}reset(){this.ve=Object.create(null),this.Ee=0,this.xe=0,this.m=0,this.ht="",this._e="",this.Te=0}push(t,e,n){let i=e,r=e;const o=Math.min(n,e+16384-this.xe);for(;r<o;)switch(this.m){case 0:for(;r<o&&Hn[t[r]];++r);if(r>i&&(this.ht+=t.latin1Slice(i,r)),r<o){if(58!==t[r])return-1;if(!this.ht)return-1;++r,this.m=1}break;case 1:for(;r<o;++r){const e=t[r];if(32!==e&&9!==e){i=r,this.m=2;break}}break;case 2:switch(this.Te){case 0:for(;r<o;++r){const e=t[r];if(e<32||127===e){if(13!==e)return-1;++this.Te;break}}this._e+=t.latin1Slice(i,r),++r;break;case 1:if(10!==t[r++])return-1;++this.Te;break;case 2:{const e=t[r];32===e||9===e?(i=r,this.Te=0):(++this.Ee<2e3&&(this.ve[this.ht.toLowerCase()]??=this._e),13===e?(++this.Te,++r):(i=r,this.Te=0,this.m=0,this.ht="",this._e=""));break}case 3:{if(10!==t[r++])return-1;const e=this.ve;return this.reset(),this.ce(e),r}}}return o<n?-1:(this.xe+=o-e,o)}}class Yn extends I{constructor(t,e){super({...t,read:Kn}),this.truncated=!1,this.once("end",()=>{if(Kn.call(this),0===--e.he&&e.be){const t=e.be;e.be=void 0,process.nextTick(t)}})}}function Kn(t){const e=this.me;e&&(this.me=void 0,e())}const Qn={push:()=>{},destroy:()=>{}},ti=/*@__PURE__*/Buffer.from("\r\n");class ei extends H{constructor({limits:t={},highWaterMark:e,defCharset:n="utf-8"},i){super({autoDestroy:!0,emitClose:!0,highWaterMark:e,write:ni,final:ii}),this.Se=i.get("charset")??n,this.ke=t.fieldSize??1048576,this.$e=t.fields??Number.POSITIVE_INFINITY,this.Ae=t.fieldNameSize??100,this.Oe=0,this.Ne=!0,this.Pe="",this.Me=this.Ae,this.Re=0,this.Fe="",this.Ue=!1,this.Ce=-2,this.Be=/^utf-?8$/i.test(this.Se)?1:/^(latin-?1|iso[\-_]?8859-?1|(us-)?ascii)$/i.test(this.Se)?2:0,this.Ie=Sn(this.Se)}}function ni(t,e,n){if(!t.byteLength)return n();if(this.Oe>=this.$e)return this.Oe||t===fi||(++this.Oe,this.emit("fieldsLimit")),n();const i=t.byteLength;let r=0,o=this.Ce;if(-2!==o){if(-1===o){if(16===(o=zn[t[r++]]))return n(new Error("Malformed urlencoded form"));if(this.Re|=o,r===i)return this.Ce=o,n()}const e=zn[t[r++]];if(16===e)return n(new Error("Malformed urlencoded form"));if(this.Pe+=String.fromCharCode((o<<4)+e),this.Ce=-2,r===i)return n()}for(ai[ri]=1,ai[oi]=1,ai[si]=1,ai[ci]=this.Ne?1:0;;){const e=r;for(;r<i&&!ai[t[r]];++r);if(r>e&&this.Me>=0&&((this.Me-=r-e)<0?this.Pe+=t.latin1Slice(e,r+this.Me):this.Pe+=t.latin1Slice(e,r)),r===i)return n();switch(t[r++]){case ri:for(;;){if(--this.Me<0){ai[ri]=0,ai[si]=0;break}if(r===i)return this.Ce=-1,n();const e=zn[t[r++]];if(16===e)return n(new Error("Malformed urlencoded form"));if(this.Re|=e,r===i)return this.Ce=e,n();const o=zn[t[r++]];if(16===o)return n(new Error("Malformed urlencoded form"));if(this.Pe+=String.fromCharCode((e<<4)+o),r===i)return n();if(t[r]!==ri)break;r++}break;case oi:const e=!this.Be||1===this.Be&&8&this.Re?this.Ie.decode(Buffer.from(this.Pe,"latin1")):this.Pe;if(this.Ne?(e||this.Me<0)&&this.emit("field",this.Pe,"",{nameTruncated:this.Me<0,valueTruncated:!1,encoding:this.Se,mimeType:"text/plain"}):(this.emit("field",this.Fe,e,{nameTruncated:this.Ue,valueTruncated:this.Me<0,encoding:this.Se,mimeType:"text/plain"}),this.Fe="",this.Ue=!1,this.Ne=!0,ai[ci]=1),ai[ri]=1,ai[si]=1,this.Pe="",this.Me=this.Ae,this.Re=0,++this.Oe===this.$e&&t!==fi)return this.emit("fieldsLimit"),n();break;case si:--this.Me<0?(ai[ri]=0,ai[si]=0):this.Pe+=" ";break;case ci:this.Fe=!this.Be||1===this.Be&&8&this.Re?this.Ie.decode(Buffer.from(this.Pe,"latin1")):this.Pe,this.Ue=this.Me<0,this.Ne=!1,ai[ci]=0,ai[ri]=1,ai[si]=1,this.Pe="",this.Re=0,this.Me=this.ke}if(r===i)return n()}}function ii(t){ni.call(this,fi,void 0,t)}const ri=37,oi=38,si=43,ci=61,ai=/*@__PURE__*/new Uint8Array(256),fi=/*@__PURE__*/Buffer.from([oi]);function ui(t,{closeAfterErrorDelay:e=500,...n}={}){const i=((t,e={})=>{const n=t["content-type"];if(!n)throw new ot(400,{body:"Missing Content-Type"});const i=Bn(n);if(!i)throw new ot(400,{body:"Malformed content type"});const r="application/x-www-form-urlencoded"===i.mime?ei:"multipart/form-data"!==i.mime||e.blockMultipart?null:Jn;if(!r)throw new ot(415);return new r(e,i.params)})(t.headers,n);fn(t);const r=new G,o=(n,o)=>{if(r.fail(new ot(n,o)),i.removeAllListeners(),t.unpipe(i),t.resume(),e>=0){const n=setTimeout(()=>t.socket.destroy(),e);t.once("end",()=>clearTimeout(n))}};i.on("field",(t,e,{nameTruncated:n,valueTruncated:i,encoding:s,mimeType:c})=>t?n?o(400,{body:`field name ${JSON.stringify(t)}... too long`}):i?o(400,{body:`value for ${JSON.stringify(t)} too long`}):void r.push({name:t,encoding:s,mimeType:c,type:"string",value:e}):o(400,{body:"missing field name"})),i.on("file",(t,e,{nameTruncated:n,filename:i,encoding:s,mimeType:c})=>t?n?o(400,{body:`field name ${JSON.stringify(t)}... too long`}):void(i?(e.once("limit",()=>o(400,{body:`uploaded file for ${JSON.stringify(t)}: ${JSON.stringify(i)} too large`})),r.push({name:t,encoding:s,mimeType:c,type:"file",value:e,filename:i})):e.resume()):o(400,{body:"missing field name"})),t.once("error",e=>{t.readableAborted?r.fail($t):o(500,{body:"request error",headers:{connection:"close"},cause:e})}),i.once("error",t=>o(400,{body:"error parsing form data",cause:t})),i.once("partsLimit",()=>o(400,{body:"too many parts"})),i.once("filesLimit",()=>o(400,{body:"too many files"})),i.once("fieldsLimit",()=>o(400,{body:"too many fields"}));const s=()=>r.close("complete");return i.once("close",s),Tt(t,s),t.pipe(i),r}async function hi(t,e={}){const n=new FormData,i=new Map;for await(const r of ui(t,e))if("file"===r.type){const o=r.value;let s=await(e.preCheckFile?.({fieldName:r.name,filename:r.filename,encoding:r.encoding,mimeType:r.mimeType,maxBytes:e.limits?.fileSize}));const c=t=>{if("function"==typeof s){const e=s;return s=void 0,e({actualBytes:t})}};Tt(t,()=>c(0));const a=await an(t),f=await a.save(o,{mode:384});await c(f.size);const h=new File([await u(f.path)],r.filename,{type:r.mimeType});i.set(h,f.path),n.append(r.name,h)}else{let t=r.value;e.trimAllValues&&(t=t.trim()),n.append(r.name,t)}return Object.assign(n,{getTempFilePath(t){const e=i.get(t);if(!e)throw new Error("unknown file");return e},getBoolean(t){const e=n.get(t);return null===e?null:"true"===e||"on"===e},getString(t){const e=n.get(t);return"string"==typeof e?e:null},getAllStrings:t=>n.getAll(t).filter(t=>"string"==typeof t),getFile(t){const e=n.get(t);return"string"==typeof e?null:e},getAllFiles:t=>n.getAll(t).filter(t=>"string"!=typeof t)})}const li="win32"===/*@__PURE__*/P();function di(t,{rejectPotentiallyUnsafe:e=!0}={}){let n=[];const i=wt(t);if(i){if("/"===i.C)return[];n=i.C.split("/")}else{const e=Y(t).pathname;if("/"===e)return[];n=e.split("/").map(decodeURIComponent)}if(""!==n[0])throw new Error("invalid path");if(n.shift(),e){const t=li?pi:wi;if(n.some(e=>t.test(e)||e.includes(v)))throw new Error("invalid path");if(n.slice(0,n.length-1).includes(""))throw new Error("invalid path")}return n}const wi=/[\x00-\x1F\x7F/]|^(\.\.?|~)$/,pi=/[\x00-\x1F"*/:<>?\\|\x7F]|^[\s.]*$|^(CON|PRN|AUX|NUL|(COM|LPT)[\d\xB9\xB2\xB3])(\.|$)/i,mi=t=>new Promise(e=>{const n=()=>{t.cork(),e()};t instanceof s?t.write(X,n):t.once("drain",n),t.uncork()});async function yi(t,e,{delimiter:n=",",newline:i="\n",quote:r='"',encoding:o="utf-8",headerRow:c,end:a=!0}={}){"string"==typeof n&&(n=Buffer.from(n,o)),"string"==typeof i&&(i=Buffer.from(i,o));const f="string"==typeof r?Buffer.from(r,o):r,u=r+r,h=e=>{if(!e)return!0;const n=e.includes(r);return!n&&gi.test(e)?t.write(e,o):(t.write(f),n?t.write(e.replaceAll(r,u),o):t.write(e,o),t.write(f))};t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","text/csv; charset="+o+(c?"; header=present":!1===c?"; header=absent":"")),t.cork();try{t.write(X);for await(const r of e){if(t.writableAborted)break;let e=0;if(Symbol.iterator in r)for(const i of r)e&&t.write(n),h(i)||await mi(t),++e;else for await(const i of r)e&&t.write(n),h(i)||await mi(t),++e;t.write(i)||await mi(t)}}finally{t.uncork()}a&&t.end()}const gi=/^[^"':;,\\\r\n\t ]*$/i;function bi(t){if(!t||"object"!=typeof t)return!1;const e=t;return"number"==typeof e.fd&&"function"==typeof e.stat&&"function"==typeof e.createReadStream}class vi{constructor(t){(t=>"je"in t&&"function"==typeof t.pipe)(t)&&(t=I.toWeb(t)),this.lt=t.getReader(),this.He=null,this.qe=0,this.m=0}getRange(t,e){if(e<t)throw new Error("invalid range");if(t<this.qe)throw new Error("non-sequential range");if(this.m)throw new Error("previous range still active");let n=e-t+1,i=t-this.qe;this.qe=e+1,this.m=1;const r=this,o=(t,e)=>{const r=t.byteLength;r<=i?i-=r:r>i+n?(this.He=t.subarray(i+n),e.enqueue(t.subarray(i,i+n)),n=0):i>0?(e.enqueue(t.subarray(i)),n-=r-i,i=0):(e.enqueue(t),n-=r)};return new B({start(t){if(r.He){const e=r.He;r.He=null,o(e,t)}},async pull(t){if(n<=0)return r.m=0,void t.close();const e=await r.lt.read();e.done?t.error(new Error("range exceeds content")):"string"==typeof e.value?o(Buffer.from(e.value,"utf-8"),t):e.value instanceof Uint8Array?o(e.value,t):t.error(new Error("invalid stream type: must contain bytes or UTF-8 text"))}})}async close(){await this.lt.cancel(),this.lt.releaseLock()}}function Ei(t,{forceSequential:e=!1,mergeOverlapDistance:n=100}={}){const i=[];if(n>=0)for(const e of t.ranges){let t=null,r=0;for(let o=0;o<i.length;++o){const s=i[o];e.end>=s.start-n-1&&s.end>=e.start-n-1?t?(++r,t.start=Math.min(t.start,s.start),t.end=Math.max(t.end,s.end)):(t=s,t.start=Math.min(t.start,e.start),t.end=Math.max(t.end,e.end)):r>0&&(i[o-r]=s)}t?i.length-=r:i.push({...e})}else i.push(...t.ranges);if(e)for(let t=0;t<i.length-1;++t)if(i[t].start>i[t+1].start){i.sort((t,e)=>t.start-e.start);break}return{ranges:i,totalSize:t.totalSize}}async function xi(t,e,n,i){if("string"==typeof n||bi(n)||(i=Ei(i,{mergeOverlapDistance:0,forceSequential:!0})),1===i.ranges.length){const r=i.ranges[0];if(e.setHeader("content-length",r.end-r.start+1),e.setHeader("content-range",`bytes ${r.start}-${r.end}/${i.totalSize??"*"}`),e.writeHead(206),"HEAD"===t.method)return void e.end();const o=await _i(n);return await d(o.De(r.start,r.end),e),void(o.Le&&await o.Le())}const r=e.getHeader("content-type"),o=l()+l()+"ABCDEFGHIJKLMNOPQRSTUVWXYZ";e.setHeader("content-type",`multipart/byteranges; boundary=${o}`);const s=i.ranges.map(t=>({o:[`--${o}`,...nt({"content-type":r,"content-range":`bytes ${t.start}-${t.end}/${i.totalSize??"*"}`}),"",""].join("\r\n"),ze:t})),c=`--${o}--`;let a=c.length;for(const{o:t,ze:e}of s)a+=t.length+e.end-e.start+1+2;if(e.setHeader("content-length",a),"HEAD"===t.method)return void e.end();let f="";const u=await _i(n);try{for(const{o:t,ze:n}of s)e.write(f+t,"ascii"),await d(u.De(n.start,n.end),e,{end:!1}),f="\r\n";e.end(f+c)}finally{u.Le&&await u.Le()}}async function _i(t){if("string"==typeof t){const e=await $(t,"r");return{De:(t,n)=>e.createReadStream({start:t,end:n,autoClose:!1}),Le:()=>e.close()}}if(bi(t))return{De:(e,n)=>t.createReadStream({start:e,end:n,autoClose:!1})};{const e=new vi(t);return{De:(t,n)=>e.getRange(t,n),Le:()=>e.close()}}}async function Ti(t,e,n,i,r){if(i||("string"==typeof n?i=await T(n):bi(n)&&(i=await n.stat())),i){if("GET"===t.method||"HEAD"===t.method){if(!An(t,e,i))return void e.writeHead(304).end();e.setHeader("accept-ranges","bytes");const o=ge(t,i.size,r);if(o&&On(t,e,i))return xi(t,e,n,Ei(o,r))}e.setHeader("content-length",i.size)}if(e.writeHead(e.statusCode,e.statusMessage),"HEAD"!==t.method)return"string"==typeof n?n=c(n):bi(n)&&(n=n.createReadStream({start:0,autoClose:!1})),d(n,e);e.end()}function Si(t,e,{replacer:n,space:i,undefinedAsNull:r=!1,encoding:o="utf-8",end:c=!0}={}){const a=JSON.stringify(e,n,i)??(r?"null":void 0);t instanceof s&&!t.headersSent&&(t.hasHeader("content-type")||t.setHeader("content-type","application/json"),c&&t.setHeader("content-length",Buffer.byteLength(a,o))),c?t.end(a,o):a&&t.write(a,o)}async function ki(t,e,{replacer:n=null,space:i="",undefinedAsNull:r=!1,encoding:o="utf-8",end:c=!0}={}){if(Array.isArray(n)){const t=new Set(n.map(t=>String(t)));n=function(e,n){return null===this||Array.isArray(this)||t.has(e)?n:void 0}}"number"==typeof i&&(i=" ".substring(0,i));const a={We:e=>t.write(e,o),Je:()=>mi(t),Ge:n,Ve:i};if(t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","application/json"),e=Ai(null,"",e,a),Oi(e))r&&a.We("null");else{t.cork(),t.write(X);try{await $i(a,e,i?"\n":"")}finally{t.uncork()}}c&&t.end()}async function $i(t,e,n){const i=(i,r,o)=>{t.We(i);const s=n+t.Ve,c=t.Ve?": ":":";let a=!0;return{i:async(n,i)=>{const r=Ai(e,n,i,t);o&&Oi(r)||(a?a=!1:t.We(","),t.We(s),o&&(t.We(JSON.stringify(n))||await t.Je(),t.We(c)),await $i(t,r,s))},Le:()=>{a||t.We(n),t.We(r)}}};if(null===e||"object"!=typeof e||e instanceof String||e instanceof Number||e instanceof Boolean||e instanceof Function||e instanceof Symbol||e instanceof BigInt||Ni(e))t.We(JSON.stringify(e)??"null")||await t.Je();else if(e instanceof I){t.We('"');for await(const n of e){if("string"!=typeof n)throw new TypeError("Readables must have an encoding");const e=JSON.stringify(n);t.We(e.substring(1,e.length-1))||await t.Je()}t.We('"')}else if(e instanceof Map){const t=i("{","}",!0);for(const[n,i]of e)await t.i(n,i);t.Le()}else if(Pi(e)){let t=0;const n=i("[","]",!1);for(const i of e)await n.i(String(t++),i);n.Le()}else if(Mi(e)){let t=0;const n=i("[","]",!1);for await(const i of e)await n.i(String(t++),i);n.Le()}else{const t=i("{","}",!0);for(const[n,i]of Object.entries(e))await t.i(n,i);t.Le()}}function Ai(t,e,n,i){return i.Ge&&(n=i.Ge.call(t,e,n)),n&&"object"==typeof n&&"function"==typeof n.toJSON&&(n=n.toJSON(e)),n}const Oi=t=>void 0===t||"function"==typeof t||"symbol"==typeof t||t instanceof Function||t instanceof Symbol,Ni=t=>JSON.isRawJSON?.(t)??!1,Pi=t=>Symbol.iterator in t,Mi=t=>Symbol.asyncIterator in t;class Ri{constructor(t,e,{keepaliveInterval:n=15e3,softCloseReconnectDelay:i=500,softCloseReconnectStagger:r=2e3}={}){this.Ze=e,this.Xe=n??0,this.I=new AbortController,e.setHeader("content-type","text/event-stream"),e.setHeader("x-accel-buffering","no"),e.setHeader("cache-control","no-store"),e.writeHead(200),e.flushHeaders(),this.ping=this.ping.bind(this),this.Ye(),t.once("close",()=>this.close()),mt(t,()=>this.close(i,r))}get signal(){return this.I.signal}get open(){return!this.I.signal.aborted}Ye(){this.Xe&&(this.Ke=setTimeout(this.ping,this.Xe))}ping(){!this.I.signal.aborted&&this.Ze.writable&&(clearTimeout(this.Ke),this.Ze.write(":\n\n",()=>this.Ye()))}send({event:t,id:e,data:n,reconnectDelay:i=-1}){return this.sendFields([["event",t],["id",e],["data",n],["retry",i>=0?String(0|i):void 0]])}async sendFields(t){if(this.I.signal.aborted)throw new Error("ServerSentEvents closed");let e;this.Ze.cork();try{let n=!1;for(const[e,i]of t){if(void 0===i)continue;const t=i.split(/(?<=\n)|(?<=\r)(?!\n)/g);for(let n of t)this.Ze.write(e)," "===n[0]?this.Ze.write(": "):this.Ze.write(":"),this.Ze.write(n);/[\r\n]$/.test(i)?(this.Ze.write(e),this.Ze.write(":\n")):this.Ze.write("\n"),n=!0}if(!n)return;clearTimeout(this.Ke),this.Ze.write("\n",()=>e())}finally{this.Ze.uncork()}await new Promise(t=>{e=t}),this.Ye()}async close(t=0,e=0){if(this.I.signal.aborted){if(this.Ze.closed)return;return new Promise(t=>this.Ze.once("close",t))}this.Xe=0,clearTimeout(this.Ke),this.I.abort(),await new Promise(n=>{if(this.Ze.writable&&(t>0||e>0)){const i=t+Math.random()*e;this.Ze.end(`retry:${0|i}\n\n`,n)}else this.Ze.end(n)})}}const Fi=async(t,{mode:e="dynamic",fallback:n,callback:i=Ui,...r}={})=>{const o=await on.build(E(process.cwd(),t),r);let s=null;const c=n?.statusCode??200;if(n){let t=n.filePath;t.startsWith("/")&&(t=t.substring(1)),s=t.split("/")}const a="dynamic"===e?{}:{rejectPotentiallyUnsafe:!1},f="dynamic"===e?o:await o.precompute();return{handleRequest:async(t,e)=>{if("GET"!==t.method&&"HEAD"!==t.method)return At;let n=!1;const r=di(t,a),o={mime:Ee(t.headers.accept),language:Ee(t.headers["accept-language"]),encoding:Ee(t.headers["accept-encoding"])};let u=await f.find(r,o);if(!u&&s&&(n=!0,u=await f.find(s,o)),!u)return At;try{n&&(e.statusCode=c),e.setHeader("content-type",u.mime??Qe(m(u.canonicalPath))),u.encoding&&"identity"!==u.encoding&&e.setHeader("content-encoding",u.encoding);const r=f.vary;if(r){const t=e.getHeader("vary")??"";e.setHeader("vary",(t?t+", ":"")+r)}await i(t,e,u,n),await Ti(t,e,u.handle,u.stats)}finally{u.handle.close().catch(()=>{})}}}};function Ui(t,e,n){e.setHeader("etag",Ie(e.getHeader("content-encoding"),n.stats)),e.setHeader("last-modified",n.stats.mtime.toUTCString())}class Ci extends Error{constructor(t,{message:e,statusMessage:n,...i}={}){super(e,i),this.statusCode=0|t,this.statusMessage=n??"",this.name=`WebSocketError(${this.statusCode} ${this.statusMessage})`}static NORMAL_CLOSURE=1e3;static GOING_AWAY=1001;static UNSUPPORTED_DATA=1003;static POLICY_VIOLATION=1008;static MESSAGE_TOO_BIG=1009;static INTERNAL_SERVER_ERROR=1011;static SERVICE_RESTART=1012;static TRY_AGAIN_LATER=1013;static BAD_GATEWAY=1014}function Bi(t,{softCloseStatusCode:e=Ci.GOING_AWAY,...n}={}){const i=(i,r,o)=>new Promise((s,c)=>{const a=new t({...n,noServer:!0,clientTracking:!1});a.once("wsClientError",c),a.handleUpgrade(i,r,o,t=>{a.off("wsClientError",c),s({return:t,onError:e=>{const n=V(e,Ci);if(n)return void t.close(n.statusCode,n.statusMessage);const i=V(e,ot)??ot.INTERNAL_SERVER_ERROR,r=i.statusCode>=500?Ci.INTERNAL_SERVER_ERROR:4e3+i.statusCode;t.close(r,i.statusMessage)},softCloseHandler:n=>t.close(e,n)})})});return t=>Pt(t,i)}class Ii{constructor(t,e){this.data=t,this.isBinary=e}get text(){if(this.isBinary)throw new Ci(Ci.UNSUPPORTED_DATA,{statusMessage:"expected text"});return this.data.toString("utf-8")}get binary(){if(!this.isBinary)throw new Ci(Ci.UNSUPPORTED_DATA,{statusMessage:"expected binary"});return this.data}}class ji{constructor(t,{limit:e=-1,signal:n}={}){this.Qe=new G;const i=e=>{t.off("message",o),t.off("close",r),this.Qe.close(new Error(e))},r=()=>i("connection closed"),o=(t,n)=>{void 0!==n?this.Qe.push(new Ii(t,n)):"string"==typeof t?this.Qe.push(new Ii(Buffer.from(t,"utf-8"),!1)):this.Qe.push(new Ii(t,!0)),e>0&&0===--e&&this.detach()};this.detach=()=>{},n?.aborted?this.Qe.close(new Error("signal aborted")):2===t.readyState||3===t.readyState?this.Qe.close(new Error("connection closed")):(t.on("message",o),t.on("close",r),n?.addEventListener("abort",()=>i("signal aborted")),this.detach=()=>i("WebSocket listener detached"))}next(t){return this.Qe.shift(t)}[Symbol.asyncIterator](){return this.Qe[Symbol.asyncIterator]()}}function Hi(t,{timeout:e,signal:n}={}){const i=new ji(t,{limit:1,signal:n});return i.next(e).finally(()=>i.detach())}function qi(t){const e=pt(t);return"GET"===t.method&&(e.D?.has("websocket")??!1)}const Di=t=>t.headers.origin??it(t.headers["sec-websocket-origin"]),Li=(t,e=5e3)=>async n=>{if(!qi(n))return;const i=await t(n);let r;try{r=await Hi(i,{timeout:e})}catch(t){if((i.readyState??0)>=2)throw $t;throw new Ci(Ci.POLICY_VIOLATION,{statusMessage:"timeout waiting for authentication token",cause:t})}if(r.isBinary)throw new Ci(Ci.UNSUPPORTED_DATA,{statusMessage:"authentication token must be sent as text"});return r.data.toString("utf-8")};export{G as BlockingQueue,At as CONTINUE,on as FileFinder,ot as HTTPError,Ot as NEXT_ROUTE,Nt as NEXT_ROUTER,Se as Property,J as Queue,Kt as Router,$t as STOP,Ri as ServerSentEvents,fe as WebListener,Ci as WebSocketError,Ii as WebSocketMessage,ji as WebSocketMessages,fn as acceptBody,Pt as acceptUpgrade,Tt as addTeardown,Jt as anyHandler,An as checkIfModified,On as checkIfRange,Ne as clearProperty,Nn as compareETag,tn as compressFileOffline,en as compressFilesInDir,Ye as decompressMime,_t as defer,Gt as errorHandler,Fi as fileServer,V as findCause,je as generateStrongETag,Ie as generateWeakETag,St as getAbortSignal,Dt as getAbsolutePath,Z as getAddressURL,Re as getAuthData,pe as getAuthorization,Un as getBodyJson,Mn as getBodyStream,Fn as getBodyText,Rn as getBodyTextStream,me as getCharset,hi as getFormData,ui as getFormFields,ye as getIfRange,Qe as getMime,qt as getPathParameter,Ht as getPathParameters,Oe as getProperty,de as getQuery,ge as getRange,di as getRemainingPathComponents,he as getSearch,le as getSearchParams,Sn as getTextDecoder,kn as getTextDecoderStream,Di as getWebSocketOrigin,Fe as hasAuthScope,gt as isSoftClosed,qi as isWebSocketRequest,Bi as makeAcceptWebSocket,D as makeAddressTester,ln as makeGetClient,ke as makeMemo,ze as makeNegotiator,an as makeTempFileStorage,Li as makeWebSocketFallbackTokenFetcher,Le as negotiateEncoding,Hi as nextWebSocketMessage,q as parseAddress,un as proxy,_e as readHTTPDateSeconds,ve as readHTTPInteger,xe as readHTTPKeyValues,Ee as readHTTPQualityValues,be as readHTTPUnquotedCommaSeparated,Xe as readMimeTypes,_n as registerCharset,Ke as registerMime,Tn as registerUTF32,pn as removeForwarded,mn as replaceForwarded,zt as requestHandler,Ue as requireAuthScope,Me as requireBearerAuth,Ze as resetMime,Lt as restoreAbsolutePath,yn as sanitiseAndAppendForwarded,yi as sendCSVStream,Ti as sendFile,Si as sendJSON,ki as sendJSONStream,xi as sendRanges,Ui as setDefaultCacheHeaders,Ae as setProperty,mt as setSoftCloseHandler,gn as simpleAppendForwarded,Ei as simplifyRange,oe as toListeners,Wt as upgradeHandler};
|
|
1
|
+
import{isIPv4 as t,isIPv6 as e}from"node:net";import{STATUS_CODES as n,createServer as i,Agent as r,request as o,ServerResponse as s}from"node:http";import{createReadStream as c,constants as a,createWriteStream as f,openAsBlob as u}from"node:fs";import{createHash as h,randomUUID as l}from"node:crypto";import{pipeline as d}from"node:stream/promises";import w from"node:zlib";import{promisify as p}from"node:util";import{extname as y,join as m,dirname as g,basename as b,sep as v,resolve as E}from"node:path";import{readFile as _,writeFile as T,stat as x,readdir as S,realpath as k,open as $,mkdtemp as A,rm as N}from"node:fs/promises";import{tmpdir as O,platform as R}from"node:os";import{Agent as P,request as F}from"node:https";import{TransformStream as C,TextDecoderStream as U,DecompressionStream as M,ReadableStream as D}from"node:stream/web";import{Readable as B,Duplex as I,Writable as j}from"node:stream";function H(n){if(!n||"unknown"===n)return;const i=/^((?:\d{1,3}\.){3}\d{1,3})(?::(\d+))?$/.exec(n);if(i?.[1]&&t(i[1]))return{type:"IPv4",ip:i[1],port:i[2]?Number.parseInt(i[2]):void 0};const r=/^\[([\da-fA-F:]+)\](?::(\d+))?$|^([\da-fA-F:]+)$/.exec(n);if(r?.[1]&&e(r[1]))return{type:"IPv6",ip:r[1].toLowerCase(),port:r[2]?Number.parseInt(r[2]):void 0};if(r?.[3]&&e(r[3]))return{type:"IPv6",ip:r[3].toLowerCase(),port:void 0};const o=/^(.*?):(\d+)$/i.exec(n);return o?.[2]?{type:"alias",ip:o[1],port:Number.parseInt(o[2])}:{type:"alias",ip:n,port:void 0}}function q(t){const e=new Set,n=[],i=[];for(const r of t){const t=/^((?:\d{1,3}\.){3}\d{1,3})(?:\/(\d+))?$/.exec(r);if(t?.[1]){const e=t[2]?Number.parseInt(t[2]):32,i=e<32?4294967295>>>e:0;n.push([z(t[1])|i,i]);continue}const o=/^\[?([\da-fA-F:]+)\]?(?:\/(\d+))?$/.exec(r);if(o?.[1]){const t=W(o[1]),e=o[2]?L>>BigInt(Number.parseInt(o[2])):0n;i.push([t|e,e]);continue}e.add(r)}return t=>{switch(t?.type){case"alias":return e.has(t.ip);case"IPv4":const r=z(t.ip);return n.some(([t,e])=>(r|e)===t);case"IPv6":const o=W(t.ip);return i.some(([t,e])=>(o|e)===t);default:return!1}}}const L=/*@__PURE__*/BigInt("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");function z(t){const e=t.split(".").map(Number);return(e[0]<<24|e[1]<<16|e[2]<<8|e[3])>>>0}function W(t){const e=t.split(":").map(t=>t?Number.parseInt(t,16):-1);let n=0n;for(const t of e)t<0?n<<=16n*BigInt(9-e.length):n=n<<16n|BigInt(t);return n}class G{constructor(t){const e={t:null,i:null};this.o=e,this.u=e,void 0!==t&&this.push(t)}isEmpty(){return!this.o.i}clear(){this.o.i=null,this.o.t=null,this.u=this.o}push(t){const e={t,i:null};this.u.i=e,this.u=e}shift(){if(!this.o.i)return null;this.o=this.o.i;const t=this.o.t;return this.o.t=null,t}remove(t){for(let e=this.o;e.i;e=e.i)if(e.i.t===t){e.i=e.i.i;break}}[Symbol.iterator](){return{next:()=>{if(!this.o.i)return{value:null,done:!0};this.o=this.o.i;const t=this.o.t;return this.o.t=null,{value:t,done:!1}}}}}class J{constructor(){this.h=new G,this.l=new G,this.m=0}push(t){if(this.m)return;const e=this.l.shift();e?(e.v&&clearTimeout(e.v),e._(t)):this.h.push(t)}shift(t){return this.h.isEmpty()?this.m?Promise.reject(this.T):new Promise((e,n)=>{const i={_:e,S:n,v:null};this.l.push(i),void 0!==t&&(i.v=setTimeout(()=>{this.l.remove(i),n(new Error(`timeout after ${t}ms`))},t))}):Promise.resolve(this.h.shift())}k(t){this.T=t;for(const e of this.l)e.S(t),e.v&&clearTimeout(e.v)}close(t){this.m||(this.m=1,this.k(t))}fail(t){this.m||(this.m=2,this.k(t))}[Symbol.asyncIterator](){return{next:()=>this.shift().then(t=>({value:t,done:!1}),t=>{if(2===this.m)throw t;return{value:null,done:!0}})}}}function V(t,e){if(t instanceof e)return t;if(t&&"object"==typeof t){if("cause"in t)return V(t.cause,e);if("error"in t)return V(t.error,e)}}function Z(t,e="http"){if(!t)throw new TypeError("no address");if("string"==typeof t)return t;if("IPv4"===t.family)return`${e}://${t.address}:${t.port}`;if("IPv6"===t.family)return`${e}://[${t.address}]:${t.port}`;throw new TypeError(`unknown address family: ${t.family}`)}const X=/*@__PURE__*/Buffer.alloc(0),Y=t=>new URL("http://localhost"+(t.url??"/"));class K extends Error{constructor(t,e,n){super(n??""),this.error=t,this.suppressed=e}}const Q=globalThis.SuppressedError??K;class tt{constructor(){this.$=!1}A(t){this.$?t!==this.N&&(this.N=new Q(t,this.N)):(this.N=t,this.$=!0)}O(){this.$=!1,this.N=void 0}}const et=new WeakMap;function nt(t,e,n){const i=et.get(t);if(i)return i;const r=Y(t),o={R:t,P:r,F:decodeURIComponent(r.pathname),C:new AbortController,U:e,M:[],D:[],B:n?ot(t):null};return et.set(t,o),o}function it(t,e,n){e||(t.B=null),t.I=n;const i=async()=>{t.C.abort(n.j.writableEnded?"complete":"client abort");const e=new tt;await rt(t.M,e,t),await rt(t.D,e,t,()=>{t.H=async e=>{try{await e()}catch(e){t.U(e,"tearing down",t.R)}}}),e.$&&t.U(e.N,"tearing down",t.R)};return n.j.closed?i():n.j.once("close",i),t}async function rt(t,e,n,i){for(;n.L;)await n.L;const r=(async()=>{for(;;){const n=t.pop();if(!n)return void i?.();try{await n()}catch(t){e.A(t)}}})().then(()=>{n.L===r&&(n.L=void 0)});n.L=r,await r}function ot(t){return new Set(t.headers.upgrade?.split(",").map(t=>t.trim().toLowerCase())??[])}const st=t=>et.get(t),ct=t=>et.delete(t);function at(t){const e=st(t);if(!e)throw new RangeError("unknown request");return e}function ft(t,e){const n=st(t);n&&ut(n,e)}function ut(t,e){t.W=e;const n=t.G;n&&queueMicrotask(()=>pt(e,n,t))}const ht=t=>Boolean(st(t)?.G);function lt(t,e,n){if(!t.G){if(t.I&&!t.B){const e=t.I.j;e.headersSent||e.hasHeader("connection")||e.setHeader("connection","close")}t.I?.j.once("close",()=>t.R.socket.destroy()),t.G={J:e,U:n},pt(t.W,t.G,t),wt(t)}}function dt(t){if(t.I){if(!t.B){const e=t.I.j;e.headersSent||(e.statusCode=503,e.hasHeader("connection")||e.setHeader("connection","close"))}t.I.j.end(()=>t.R.socket.destroy())}else t.R.socket.destroy()}function wt(t){if(clearTimeout(t.V),!t.Z||t.H)return;const e=Date.now();if(e>=t.Z)return void dt(t);let n=t.Z;t.X&&!t.G&&(e<t.X.Y?n=t.X.Y:(t.G=t.X,pt(t.W,t.G,t))),void 0===t.V&&t.D.push(()=>clearTimeout(t.V)),t.V=setTimeout(()=>wt(t),n-e)}async function pt(t,e,n){try{await(t?.(e.J))}catch(t){e.U(t,"soft closing",n.R),dt(n)}}const yt=(t,e)=>{const n=at(t);n.H?n.H(e):n.M.push(e)},mt=(t,e)=>{const n=at(t);n.H?n.H(e):n.D.push(e)},gt=t=>at(t).C.signal;class bt extends Error{}const vt=new bt("STOP"),Et=new bt("CONTINUE"),_t=new bt("NEXT_ROUTE"),Tt=new bt("NEXT_ROUTER");async function xt(t,e){const n=at(t);if(!n.I)throw new TypeError("cannot call acceptUpgrade from shouldUpgrade");if(!n.B)throw new TypeError("not an upgrade request");if(n.K)return n.tt;const i=n.I.j;if(!i.readable||!i.writable)throw vt;const r=await e(t,i,n.I.o);return n.I.o=X,n.et=r.onError,ut(n,r.softCloseHandler),n.tt=r.return,n.K=!0,r.return}const St=RegExp.escape??(t=>t.replaceAll(/[^a-zA-Z0-9_ ]/g,t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"))),kt=t=>t,$t=t=>void 0===t?void 0:""===t?[]:t.split("/"),At=t=>void 0===t?void 0:""===t?[]:t.split("/").filter(t=>t);function Nt(t){const e={},n=new Map;for(const[i,r]of Object.entries(t))e[i]=!1,n.set(r,i);return t=>{const i={...e};for(let e=0;e<t.length;++e){const r=n.get(t[e]);if(!r)return[i,t.substring(e)];i[r]=!0}return[i,""]}}const Ot=/*@__PURE__*/Nt({nt:"i",it:"!"}),Rt=Object.freeze({});function Pt(t,e,n){const i=t.R.url,r=t.F,o=t.rt??Rt;return t.R.url=encodeURIComponent(e).replaceAll(/%2F/g,"/")+t.P.search,t.F=e,n.length>0&&(t.rt=Object.freeze(Object.fromEntries([...Object.entries(o),...n]))),()=>{t.R.url=i,t.F=r,t.rt=o}}function Ft(t){return st(t)?.rt??Rt}function Ct(t,e){return Ft(t)[e]}function Ut(t){const e=st(t);return e?e.P.pathname+e.P.search:t.url??"/"}function Mt(t){const e=st(t);e&&(t.url=e.P.pathname+e.P.search)}const Dt=t=>"function"==typeof t?{handleRequest:t}:t,Bt=(t,e)=>"function"==typeof t?{handleUpgrade:t,shouldUpgrade:e}:{shouldUpgrade:e,...t},It=(t,e=Wt)=>({handleRequest:t,handleUpgrade:t,shouldUpgrade:e}),jt=t=>"function"==typeof t?{handleError:t}:t,Ht=(t,e)=>qt(e=>e instanceof t,e),qt=(t,e)=>({handleError:(n,i,r)=>{if(r.response&&t(n))return e(n,i,r.response);throw n},shouldHandleError:(e,n,i)=>Boolean(i.response)&&t(e)}),Lt=t=>"function"==typeof t?{handleRequest:t}:t,zt=t=>"function"==typeof t?{handleUpgrade:t}:t,Wt=()=>!1,Gt=Symbol("http");class Jt{constructor(){this.ot=[],this.st=[]}A(t,e,n,i,r){const o=n?((t,e)=>{const n=["^"],i=[],r=/[{}]|\/+|\\(.)|[:*]([a-zA-Z0-9_]*)/g,[{nt:o,it:s},c]=Ot(t);if("/"!==c[0])throw new TypeError("path must begin with '/' or flags");let a=0,f=0;for(const t of c.matchAll(r)){t.index>a&&n.push(St(c.substring(a,t.index)));const e=t[0];if("{"===e)n.push("(?:"),++f;else if("}"===e){if(0===f)throw new TypeError(`unbalanced optional braces in path at ${t.index}`);--f,n.push(")?")}else if("/"===e[0])n.push(e),s||n.push("+");else if("\\"===e[0])n.push(St(t[1]));else{const r=e[0],o=t[2];if(!o)throw new TypeError(`unnamed parameter or unescaped '${r}' at ${t.index}`);"*"===r?(n.push("(.*?)"),i.push({ct:o,ft:s?$t:At})):(n.push("([^/]+?)"),i.push({ct:o,ft:kt}))}a=t.index+e.length}if(a<c.length&&n.push(St(c.substring(a))),f>0)throw new TypeError("unbalanced optional braces in path");return e&&(n.push("(?:"),s?n.push("(?:(?<=/)|/)"):n.push("(?:/+|(?<=/))"),n.push("(?<rest>.*))?")),n.push("$"),{ut:new RegExp(n.join(""),o?"i":""),ht:i}})(n,i):{ut:null,ht:[]};return this.ot.push({lt:t,dt:"string"==typeof e?e.toLowerCase():e,wt:o.ut,yt:o.ht,gt:r}),this}use(...t){return this.A(null,null,null,!0,t.map(Lt))}mount(t,...e){return this.A(null,null,t,!0,e.map(Lt))}within(t,e){const n=new Jt;return e(n),this.mount(t,n)}at(t,...e){return this.A(null,null,t,!1,e.map(Lt))}onRequest(t,e,...n){return this.A(Zt(t),Gt,e,!1,n.map(Lt))}onUpgrade(t,e,n,...i){return this.A(Zt(t),e,n,!1,i.map(zt))}onError(...t){return this.A(null,null,null,!0,t.map(jt))}onReturn(...t){return this.st.push(...t),this}on(t,...e){const n=/^([A-Z]+) (\/.*)$/.exec(t);if(!n)throw new TypeError("invalid method + path spec: "+JSON.stringify(t));return this.A(n[1],Gt,n[2],!1,e.map(Lt))}get=(t,...e)=>this.A(Vt,Gt,t,!1,e.map(Lt));delete=(...t)=>this.onRequest("DELETE",...t);getOnly=(...t)=>this.onRequest("GET",...t);head=(...t)=>this.onRequest("HEAD",...t);options=(...t)=>this.onRequest("OPTIONS",...t);patch=(...t)=>this.onRequest("PATCH",...t);post=(...t)=>this.onRequest("POST",...t);put=(...t)=>this.onRequest("PUT",...t);ws=(...t)=>this.onUpgrade("GET","websocket",...t);async handleRequest(t){return this.bt(t,new tt)}async handleUpgrade(t){return this.bt(t,new tt)}async handleError(t,e){const n=new tt;return n.A(t),this.bt(e,n)}shouldUpgrade(t){return this.vt(at(t))}vt(t){for(const e of this.ot){const n=Xt(t,e);if(!n)continue;let i=()=>{};if(!0!==n)try{i=Pt(t,n.Et,[])}catch{continue}try{for(const n of e.gt)if(Qt(n,t))return!0}finally{i()}}return!1}async bt(t,e){const n=at(t),i=await this._t(n,e);if(e.$)throw e.N;return i}async _t(t,e){for(const n of this.ot){const i=Xt(t,n);if(!i)continue;let r=()=>{};if(!0!==i)try{const e=i.Tt();r=Pt(t,i.Et,e)}catch(t){e.A(t);continue}try{const i=await Yt(t,n.gt,this.st,e);if(i===Tt)break;if(i===_t)continue;return i}finally{r()}}return Et}}const Vt=new Set(["HEAD","GET"]),Zt=t=>t?"string"==typeof t?t:new Set(t):null;function Xt(t,e){if("string"==typeof e.lt){if(e.lt!==t.R.method)return!1}else if(null!==e.lt&&!e.lt.has(t.R.method??""))return!1;if(e.dt===Gt){if(t.B)return!1}else if(null!==e.dt&&!t.B?.has(e.dt))return!1;if(null===e.wt)return!0;const n=e.wt.exec(t.F);return!!n&&{Et:"/"+(n.groups?.rest??""),Tt:()=>e.yt.map((t,e)=>[t.ct,t.ft(n[e+1])])}}async function Yt(t,e,n,i){for(const r of e){let e=await Kt(r,t,i);if(e!==Et){if(!t.B&&!(e instanceof bt)&&n.length)try{const i="object"==typeof e?e:void 0,r=t.R,o=t.I.j;for(const t of n)await t(i,r,o)}catch(t){i.A(t);continue}return e}}return _t}async function Kt(t,e,n){if(t instanceof Jt)return t._t(e,n);let i=Et;try{if(n.$){if(t.handleError){const r=n.N,o=e.B?{socket:e.I.j,head:e.I.o,hasUpgraded:e.K??!1}:{response:e.I.j};t.shouldHandleError&&!t.shouldHandleError(r,e.R,o)||(n.O(),i=await t.handleError(r,e.R,o))}}else if(e.B){if(t.handleUpgrade){const n=e.I;i=await t.handleUpgrade(e.R,n.j,n.o)}}else t.handleRequest&&(i=await t.handleRequest(e.R,e.I.j))}catch(t){t instanceof bt?i=t:n.A(t)}finally{e.M.length&&await((t,e)=>rt(t.M,e,t))(e,n)}return i===vt?void 0:i}function Qt(t,e){if(t instanceof Jt)return t.vt(e);if(!t.shouldUpgrade)return Boolean(t.handleUpgrade);try{return t.shouldUpgrade(e.R)}catch(t){return e.U(t,"checking should upgrade",e.R),!1}}function te(t,e,n=te){throw t.code=e,Error.captureStackTrace(t,n),t}class ee{constructor(t){this.xt=t,this.St=Object.create(null),this.kt=!1}get headersSent(){return this.kt}writeHead(t,e=n[t]??"-"){return this.kt&&te(new Error("Cannot write headers after they are sent to the client"),"ERR_HTTP_HEADERS_SENT"),this.xt.write([`HTTP/1.1 ${t} ${re(e)}`,...ne(this.St),"",""].join("\r\n"),"ascii"),this.kt=!0,this}write(t,e="utf-8",n){return this.xt.write(t,e,n)}end(t,e="utf-8",n){return this.xt.end(t,e,n),this}setHeader(t,e){const n=t.toLowerCase();return this.St[n]="string"==typeof e||"number"==typeof e?e:[...e],this}setHeaders(t){for(const[e,n]of t)this.setHeader(e,n);return this}}function ne(t){const e=[];for(const[n,i]of Object.entries(t)){const t=ie(i);t&&e.push(`${re(n)}: ${re(t)}`)}return e}const ie=t=>"string"==typeof t?t:"number"==typeof t?String(t):t?t.join(", "):"",re=t=>t.replaceAll(/[^ \t!-~]/g,"");class oe extends Error{constructor(t,{message:e,statusMessage:i,headers:r,body:o,...s}={}){super(e??o,s),this.statusCode=0|t,this.statusMessage=i??n[this.statusCode]??"-",this.headers=(t=>{if(!t||t instanceof Headers||Array.isArray(t))return new Headers(t);const e=t instanceof Map?[...t.entries()]:Object.entries(t);return new Headers(e.map(([t,e])=>[t,ie(e)]).filter(([t,e])=>e))})(r),this.body=o??"",this.name=`HTTPError(${this.statusCode} ${this.statusMessage})`}}const se=(t,e,n)=>{const i=ce(n);if(!i)return;const r=V(t,oe)??new oe(500);i.setHeader("content-type","text/plain; charset=utf-8"),i.setHeaders(r.headers),i.setHeader("content-length",String(Buffer.byteLength(r.body,"utf-8"))),n.response||i.setHeader("connection","close"),i.writeHead(r.statusCode,r.statusMessage),i.end(r.body,"utf-8")};function ce(t){if(t.response){const e=t.response;return e.headersSent?void e.end():e}const e=t.socket;if(!t.hasUpgraded&&e.writable)return e.addListener("finish",()=>e.destroy()),new ee(e);e.destroy()}function ae(t,{onError:e=fe,socketCloseTimeout:n=500}={}){const i=[],r=new Set,o=()=>{const t=[...i];i.length=0;for(const e of t)e()},s=t=>{t&&(r.size?i.push(t):setImmediate(t))},c=t=>{r.add(t),t.D.push(()=>{r.delete(t),!r.size&&i.length&&setImmediate(o)})};return{request:async(n,i)=>{let r;try{r=nt(n,e,!1)}catch(t){return e(t,"parsing request",n),void se(new oe(400),0,{response:i})}it(r,!1,{j:i}),c(r);const o=new tt,s=await Kt(t,r,o);o.$||s!==Et&&s!==_t&&s!==Tt||o.A(new oe(404)),o.$&&(e(o.N,"handling request",n),se(o.N,0,{response:i}),ct(n))},upgrade:async(i,r,o)=>{let s;r.once("finish",()=>{const t=setTimeout(()=>r.destroy(),n);r.once("close",()=>clearTimeout(t))});try{s=nt(i,e,!0)}catch(t){return e(t,"parsing upgrade",i),void se(new oe(400),0,{socket:r,hasUpgraded:!1})}it(s,!0,{j:r,o}),o=X,c(s);const a=new tt,f=await Kt(t,s,a);a.$||f!==Et&&f!==_t&&f!==Tt||(console.warn(`Upgrade ${i.headers.upgrade} request for ${i.url} fell-through. This probably means you need to add shouldUpgrade to one of your upgrade handlers, or if this is intentional, explicitly reject the request (throw new HTTPError(404)) instead of using CONTINUE.`),a.A(new oe(404))),a.$&&(e(a.N,"handling upgrade",i),s.et?s.et(a.N,i,r):se(a.N,0,{socket:r,head:s.I?.o??X,hasUpgraded:s.K??!1}),ct(i))},shouldUpgrade:n=>{try{const i=nt(n,e,!0);return Qt(t,i)}catch{return!1}},clientError:(t,n)=>{const i=n.$t,r=t.code;n.writable&&!i?.headersSent&&n.end(he.get(r)??le),n.destroy(t),"HPE_INVALID_EOF_STATE"===r||e(t,"initialising request")},softClose(t,e,n){for(const n of r)lt(n,t,e);s(n)},hardClose(t){for(const t of r)dt(t);s(t)},countConnections:()=>r.size}}const fe=(t,e,n)=>{(V(t,oe)?.statusCode??1)&&console.error("%s",`unhandled error while ${e} ${n?.url??"(no request information)"}:`,t)},ue=t=>Buffer.from(`HTTP/1.1 ${t} ${n[t]}\r\nConnection: close\r\n\r\n`),he=/*@__PURE__*/new Map([["HPE_HEADER_OVERFLOW",/*@__PURE__*/ue(431)],["HPE_CHUNK_EXTENSIONS_OVERFLOW",/*@__PURE__*/ue(413)],["ERR_HTTP_REQUEST_TIMEOUT",/*@__PURE__*/ue(408)]]),le=/*@__PURE__*/ue(400);class de extends EventTarget{constructor(t){super(),this.At=t}attach(t,e={}){const n=(e,n,i)=>{const r={error:e,server:t,action:n,request:i};this.dispatchEvent(new CustomEvent("error",{detail:r}))&&fe(e,n,i)},i=ae(this.At,{...e,onError:n});!1===e.autoContinue&&t.addListener("checkContinue",i.request),!1===e.rejectNonStandardExpect&&t.addListener("checkExpectation",i.request),t.addListener("request",i.request),t.addListener("upgrade",i.upgrade);const r=t.shouldUpgradeCallback??(()=>!1);!1!==e.overrideShouldUpgradeCallback&&(t.shouldUpgradeCallback=i.shouldUpgrade),t.addListener("clientError",i.clientError);let o=!1;return(e="",s=-1,c=!1)=>{o||(o=!0,t.removeListener("checkContinue",i.request),t.removeListener("checkExpectation",i.request),t.removeListener("request",i.request),t.removeListener("upgrade",i.upgrade),t.shouldUpgradeCallback===i.shouldUpgrade&&(t.shouldUpgradeCallback=r),t.removeListener("clientError",i.clientError));const a=()=>{c&&t.closeAllConnections()};if(s>0){const t=setTimeout(i.hardClose,s);i.softClose(e,n,()=>{clearTimeout(t),a()})}else 0===s&&i.hardClose(a);return i}}createServer(t={}){t.shouldUpgradeCallback&&(t={overrideShouldUpgradeCallback:!1,...t});const e=i(t),n=this.attach(e,t),r=Object.assign(e,{closeWithTimeout:(t,i)=>new Promise(r=>{e.close(()=>r()),n(t,i,!0)})});return r}listen(t,e,n={}){const i=this.createServer(n);return n.socketTimeout&&i.setTimeout(n.socketTimeout),new Promise((r,o)=>{i.once("error",o),i.listen(t,e,n.backlog??511,()=>{i.off("error",o),r(i)})})}}const we=t=>st(t)?.P??Y(t),pe=t=>we(t).search,ye=t=>new URLSearchParams(we(t).searchParams),me=(t,e)=>we(t).searchParams.get(e);function ge(t,e){const n=t.indexOf(e);return-1===n?[t]:[t.substring(0,n),t.substring(n+e.length)]}function be(t){const e=t.headers.authorization;if(!e)return;const[n,i]=ge(e," ");return void 0!==i?[n.trim().toLowerCase(),i.trim()]:void 0}function ve(t){const e=/^text\/.*;\s*charset=([^;]+)/i.exec(t.headers["content-type"]??"");return e?.[1]?.trim().toLowerCase()??void 0}function Ee(t){const e=t.headers["if-range"];return e&&"string"==typeof e?/^("|W\/")/.test(e)?{etag:[e]}:{modifiedSeconds:$e(e)}:{}}function _e(t,e,{maxRanges:n=10,maxNonSequential:i=2,maxWithOverlap:r=2}={}){const o=t.headers.range;if(!o||0===e)return;const[s,c]=ge(o,"=");if("bytes"!==s||!c)return;const a=new oe(416,{headers:{"content-range":`bytes */${e}`}}),f=t=>{const e=xe(t);if(void 0===e)throw a;return e},u=[];for(const t of c.split(",")){const[i,r]=ge(t.trim(),"-");if(void 0===r)throw a;let o;if(i)o={start:f(i),end:r?Math.min(f(r),e-1):e-1};else{if(!r)throw a;o={start:Math.max(e-f(r),0),end:e-1}}if(!(o.start>=e)){if(o.end<o.start||u.length>=n)throw a;u.push(o)}}if(!u.length)throw a;if(u.length>i)for(let t=0;t<u.length-1;++t)if(u[t].start>u[t+1].start)throw a;if(u.length>r)for(let t=1;t<u.length;++t){const e=u[t];for(let n=0;n<t;++n){const t=u[n];if(e.end>=t.start&&t.end>=e.start)throw a}}return{ranges:u,totalSize:e}}function Te(t){if(void 0!==t)return"number"==typeof t?[String(t)]:t.length?"string"==typeof t?t.split(",").map(t=>t.trim()):t.flatMap(t=>t.split(",").map(t=>t.trim())):[]}function xe(t){if(t&&/^\s*-?\d+\s*$/.test(t))return Number.parseInt(t,10)}function Se(t){if(t)return t.split(",").map(t=>{const[e,...n]=t.split(";"),i=new Map(n.map(t=>{const[e,n]=ge(t,"=");return[e.trim(),n?.trim()??""]})),r=e.trim(),o="*/*"===r||"*"===r?0:r.endsWith("/*")?1:2,s=Math.max(0,Math.min(1,Number.parseFloat(i.get("q")??"1")));return{name:r,specifiers:i,specificity:o,q:s}})}function ke(t){const e=new Map,n=/\s*([^=]+)=([^";]*?|"(?:[^\\"]|\\.)*")\s*(?:;|$)/y;for(;n.lastIndex<t.length;){const i=n.exec(t);if(!i)throw new oe(400,{body:"invalid HTTP key values"});const r=i[1].toLowerCase();let o=i[2];'"'===o[0]&&(o=o.substring(1,o.length-1).replaceAll(/\\(.)/g,(t,e)=>e)),e.set(r,o)}return e}function $e(t){if("string"!=typeof t)return;const e=Date.parse(t);return Number.isNaN(e)?void 0:e/1e3|0}const Ae=t=>"function"==typeof t?t:()=>t;class Ne{constructor(t=Ue){this.Nt=Ae(t)}set(t,e){Pe(t,this,e)}get(t){return Fe(t,this)}clear(t){Ce(t,this)}withValue(t){return It(e=>(Pe(e,this,t),Et))}}const Oe=(t,...e)=>{const n={Nt:n=>t(n,...e)};return t=>Fe(t,n)};function Re(t){return t.Ot||(t.Ot=new Map),t.Ot}function Pe(t,e,n){Re(at(t)).set(e,n)}function Fe(t,e){const n=st(t);if(!n)return e.Nt(t);const i=Re(n);if(i.has(e))return i.get(e);const r=e.Nt(t);return i.set(e,r),r}function Ce(t,e){const n=st(t);n?.Ot?.delete(e)}const Ue=()=>{throw new Error("property has not been set")};function Me({realm:t,extractAndValidateToken:e,fallbackTokenFetcher:n,closeOnExpiry:i=!0,softCloseBufferTime:r=0,onSoftCloseError:o}){const s=Ae(t);return{handler:It(async t=>{const c=Date.now(),a=await s(t),f={"www-authenticate":`Bearer realm="${a}"`},u=be(t),h="bearer"===u?.[0]?u[1]:await(n?.(t));if(!h)throw new oe(401,{headers:f,body:"no token provided"});let l;try{l=await e(h,a,t)}catch(t){throw new oe(401,{headers:f,body:"invalid token",cause:t})}if(!l)throw new oe(401,{headers:f,body:"invalid token"});if("object"==typeof l){if("nbf"in l&&"number"==typeof l.nbf&&c<1e3*l.nbf)throw new oe(401,{headers:f,body:"token not valid yet"});if("exp"in l&&"number"==typeof l.exp){const e=1e3*l.exp;if(c>=e-r)throw new oe(401,{headers:f,body:"token expired"});i&&((t,e,n,i=0,r)=>{const o=at(t),s=n-Math.max(i,0),c=o.Z??Number.POSITIVE_INFINITY,a=o.X?.Y??c;s>=a&&n>=c||(n<c&&(o.Z=n),s<a&&(o.X={Y:s,J:e,U:r??o.U}),wt(o))})(t,"token expired",e,r,o)}}return Ie.set(t,{Rt:a,Pt:!0,Ft:l,Ct:je(l)}),Et}),getTokenData:t=>{const e=Ie.get(t);if(!e.Pt)throw new TypeError("cannot use getTokenData in an unauthenticated endpoint");return e.Ft}}}const De=(t,e)=>Ie.get(t).Ct.has(e),Be=t=>It(e=>{const n=Ie.get(e);if(!n.Ct.has(t))throw new oe(403,{headers:{"www-authenticate":`Bearer realm="${n.Rt}", scope="${t}"`},body:`scope required: ${t}`});return Et}),Ie=/*@__PURE__*/new Ne({Rt:"",Pt:!1,Ft:null,Ct:new Set});function je(t){if(!t||"object"!=typeof t||!("scopes"in t))return new Set;const{scopes:e}=t;return Array.isArray(e)?new Set(e):"string"==typeof e?new Set([e]):e&&"object"==typeof e?new Set(Object.entries(e).filter(([t,e])=>e).map(([t])=>t)):new Set}function He(t,e){const n=`${0|e.mtimeMs} ${e.size} ${t??""}`;return`W/"${h("sha256").update(n).digest("base64").substring(0,12)}"`}async function qe(t){const e=h("sha256");return"string"==typeof t?await d(c(t),e):await d(t.createReadStream({start:0,autoClose:!1}),e),`"sha256-${e.digest("base64")}"`}const Le=(t,e)=>new RegExp(t,(t.unicodeSets?"v":t.unicode?"u":"")+(t.ignoreCase||e?"i":"")),ze={mime:"accept",language:"accept-language",encoding:"accept-encoding"},We={zstd:"{file}.zst",br:"{file}.br",gzip:"{file}.gz",deflate:"{file}.deflate",identity:"{file}"},Ge=t=>{return{type:"encoding",options:(e=t,n=We,Array.isArray(e)?e.map(t=>[t,n[t]]):Object.entries(e)).map(([t,e])=>({match:t,file:e}))};var e,n};function Je(t,e=10){const n=t.map(t=>({Ut:t.type,Mt:t.options.map(t=>({Dt:t.file,Bt:"string"==typeof t.match?t.match.toLowerCase():Le(t.match,!0),It:t.as??("string"==typeof t.match?t.match:void 0)}))})).filter(t=>t.Mt.length>0);return{options(t,i){let r=e;const o={};return function*t(e,s){const c=n[s];if(!c)return--r,void(yield{filename:e,info:o});const a=new Set,f=(h=i[c.Ut],h?.length?1===h.length?h:[...h].sort(Ve):[]),u=[];var h;for(const t of c.Mt){const e=f.find(e=>"string"==typeof t.Bt?e.name.toLowerCase()===t.Bt:t.Bt.test(e.name));e&&u.push({...e,jt:t})}for(const n of u.sort(Ve)){const i=Ze(e,n.jt.Dt);if(!a.has(i)&&(a.add(i),o[c.Ut]=n.jt.It,yield*t(i,s+1),r<=0))return}o[c.Ut]=void 0,!a.has(e)&&r>0&&(yield*t(e,s+1))}(t,0)},vary:[...new Set(n.map(t=>ze[t.Ut]))].join(" ")}}const Ve=(t,e)=>e.q-t.q||e.specificity-t.specificity;function Ze(t,e){return e.replaceAll(/\{(?:file|base|ext)\}/g,e=>"{file}"===e?t:"{base}"===e?t.replace(/\.[^.]*$/,""):y(t))}const Xe=/*@__PURE__*/tn("bin=application/octet-stream;gz(ip),json,ogg,pdf,wasm,xml,y(a)ml,zip,zst(d)=application/{ext};aac,flac,mid(i),wav(e)=audio/{ext};mp3=audio/mpeg;oga,opus=audio/ogg;otf,ttf,woff,woff2=font/{ext};apng,avif,bmp,gif,heic,heif,jp(e)g,png,tif(f),webp=image/{ext};ico,cur=image/x-icon;svg=image/svg+xml;3mf,obj,stl,u3d=model/{ext};wrl=model/vrml;x3d=model/x3d+xml;x3db=model/x3d+binary;x3dv=model/x3d+vrml;css,csv,htm(l),rtf,vcard=text/{ext};(m)js=text/javascript;md=text/markdown;txt=text/plain;3gp(p),3g(pp)2,mp4,mp(e)g,h264=video/{ext};mov=video/quicktime;ogv=video/ogg");let Ye=/*@__PURE__*/new Map(Xe);function Ke(){Ye=new Map(Xe)}function Qe(t){const e=new Map;for(const n of t.split("\n")){const[t,...i]=n.replaceAll(/\s+/g," ").trim().split(" ");if(!t.startsWith("#"))for(const n of i)e.set(n.toLowerCase(),t)}return e}function tn(t){const e=new Map;for(const n of t.split(/[\n;]/g)){const[t,i,r]=/^ *([^=]+)=(.*)$/.exec(n)??[null,null,""];for(const t of i?.split(",")??[]){const[n,i,o="",s=""]=/^([^(]*)(?:\(([^)]*)\)(.*))?$/.exec(t),c=i+o+s,a=r.replace("{ext}",c);e.set(c.toLowerCase(),a),o&&e.set((i+s).toLowerCase(),a)}}return e}function en(t){for(const[e,n]of t)Ye.set(e.toLowerCase(),n)}function nn(t,e="utf-8"){"."===t[0]&&(t=t.substring(1));const n=Ye.get(t)??"application/octet-stream";return n.startsWith("text/")&&!n.includes("charset=")?`${n}; charset=${e}`:n}async function rn(t,e,n){const i=await _(t),r={file:t,mime:nn(y(t)),rawSize:i.byteLength,bestSize:i.byteLength,created:0};if(r.rawSize<=n)return r;if(["image","video","audio","font"].includes(r.mime.split("/")[0]))return r;for(const o of e){const e=cn.get(o.match),s=m(g(t),Ze(b(t),o.file));if(!e||s===o.file)continue;const c=await e(i);c.byteLength<=r.rawSize-n&&(await T(s,c),r.bestSize=Math.min(r.bestSize,c.byteLength),++r.created)}return r}async function on(t,e,n){const i=[];await sn(t,i);const r=new Set(i);for(const t of r)for(const n of e){const e=m(g(t),Ze(b(t),n.file));e!==t&&r.delete(e)}return Promise.all([...r].map(t=>rn(t,e,n)))}async function sn(t,e){const n=await x(t);if(n.isDirectory())for(const n of await S(t))await sn(m(t,n),e);else n.isFile()&&e.push(t)}const cn=/*@__PURE__*/new Map([["zstd",t=>p(w.zstdCompress)(t)],["br",t=>p(w.brotliCompress)(t,{params:{[w.constants.BROTLI_PARAM_QUALITY]:w.constants.BROTLI_MAX_QUALITY,[w.constants.BROTLI_PARAM_SIZE_HINT]:t.length}})],["gzip",t=>p(w.gzip)(t,{level:w.constants.Z_BEST_COMPRESSION})],["deflate",t=>p(w.deflate)(t)]]),an=(t,e)=>{const n=at(t);n.U(e,n.B?"handling upgrade":"handling request",t)},fn=(t,{onlyIfRequested:e=!0,emitError:n=!0,forceStatus:i,contentType:r="application/json"}={})=>({handleError:(o,s,c)=>{if(c.hasUpgraded||e&&!un(s,r))throw o;n&&an(s,o);const a=ce(c);if(!a)return;const f=V(o,oe)??new oe(500),u=JSON.stringify(t(f));a.setHeaders(f.headers),a.setHeader("content-type",r),a.setHeader("content-length",String(Buffer.byteLength(u,"utf-8"))),c.response||a.setHeader("connection","close"),i?a.writeHead(i):a.writeHead(f.statusCode,f.statusMessage),a.end(u,"utf-8")},shouldHandleError:(t,n,i)=>!i.hasUpgraded&&(!e||un(n,r))}),un=(t,e)=>Se(t.headers.accept)?.some(t=>t.name===e||"application/json"===t.name)??!1;class hn{constructor(t,{subDirectories:e=!0,caseSensitive:n="exact",allowAllDotfiles:i=!1,allowAllTildefiles:r=!1,allowDirectIndexAccess:o=!1,allow:s=[".well-known"],hide:c=[],indexFiles:a=["index.htm","index.html"],implicitSuffixes:f=[],negotiation:u}){this.Ht=t,this.qt=!0===e?Number.POSITIVE_INFINITY:e||0,this.Lt=n,this.zt=i,this.Wt=r,this.Gt=o,this.Jt=a,this.Vt=["",...f],this.Zt=new Set(s.map(t=>this.Xt(t))),this.Yt=new Set,this.Kt=[];for(const t of c)"string"==typeof t?this.Yt.add(this.Xt(t)):this.Kt.push(Le(t,!n));this.Qt=new Set(a.map(t=>this.Xt(t))),u?.length?(this.te=Je(u),this.vary=this.te.vary):this.vary=""}static async build(t,e){return new hn(await k(t,{encoding:"utf-8"})+v,e)}Xt(t){return"exact"===this.Lt?t:t.toLowerCase()}ee(t){if(this.Zt.has(t))return!0;const e=t.trim();return!(!("~"!==e[0]&&"~"!==e[e.length-1]||this.Wt)||"."===e[0]&&!this.zt||this.Yt.has(e)||this.Kt.some(t=>t.test(e)))}async find(t,e={}){let n=t.join(v);"force-lowercase"===this.Lt&&(n=n.toLowerCase());let i=E(this.Ht,n);if(!i.startsWith(this.Ht)&&i+v!==this.Ht)return null;let r=null,o=null;for(const t of this.Vt){const e=i+t;if(r=e.substring(this.Ht.length).split(v).filter(t=>t),r.length>this.qt+1)return null;if(r.some(t=>!this.ee(this.Xt(t))))return null;const n=r[r.length-1]??"";if(!this.Gt&&this.Qt.has(this.Xt(n))&&!this.Zt.has(this.Xt(n)))return null;if(o=await k(e,{encoding:"utf-8"}).catch(()=>null),o){i=e;break}}if(!o||!r)return null;if(this.Xt(o)!==this.Xt(i))return null;let s=o,c=await x(o).catch(()=>null);if(!c)return null;if(c.isDirectory()){if(r.length>this.qt)return null;for(const t of this.Jt){const e=m(o,t);if(c=await x(e).catch(()=>null),c?.isFile()){s=e;break}}}if(!c?.isFile())return null;if(this.te){const t=b(s),n=g(s);for(const i of this.te.options(t,e)){if(!i.filename||i.filename.includes(v))continue;const t=await dn({canonicalPath:s,negotiatedPath:m(n,i.filename),...i.info});if(t)return t}}return dn({canonicalPath:s,negotiatedPath:s})}async precompute(){const t=new Map,e=(e,n)=>{const i=t.get(e);(!i||n.p>i.p)&&t.set(e,n)},n=new G({dir:[this.Ht],depth:0});for(const{dir:t,depth:i}of n){const r=await S(m(...t),{withFileTypes:!0,encoding:"utf-8"}),o=new Set(r.map(t=>this.Xt(t.name)));for(const s of r){const r=this.Xt(s.name);if(!this.ee(r))continue;const c=[...t,s.name];if(s.isDirectory())i<this.qt&&n.push({dir:c,depth:i+1}),e(this.Xt(c.slice(1).join("/")),ln);else if(s.isFile()){const n={file:m(...c),dir:m(...t),basename:r,siblings:o},i=this.Jt.indexOf(r);if(-1!==i&&(e(this.Xt(t.slice(1).join("/")),{...n,p:this.Jt.length+1-i}),!this.Gt&&!this.Zt.has(r)))continue;const a=this.Xt(c.slice(1).join("/"));for(let t=0;t<this.Vt.length;++t){const i=this.Vt[t];s.name.endsWith(i)&&e(a.substring(0,a.length-i.length),{...n,p:-t})}}}}return{find:async(e,n={})=>{const i=t.get(this.Xt(e.join("/")));if(!i?.file)return null;if(this.te)for(const t of this.te.options(i.basename,n)){if(!i.siblings.has(this.Xt(t.filename)))continue;const e=await dn({canonicalPath:i.file,negotiatedPath:m(i.dir,t.filename),...t.info});if(e)return e}return dn({canonicalPath:i.file,negotiatedPath:i.file})},vary:this.vary}}}const ln={file:"",dir:"",basename:"",siblings:new Set,p:1};async function dn(t){const e=await $(t.negotiatedPath,a.O_RDONLY).catch(()=>null);if(!e)return null;const n=()=>(e.close().catch(()=>{}),null),i=await e.stat().catch(n);return i?.isFile()?{handle:e,stats:i,...t}:n()}const wn=/*@__PURE__*/Oe(async t=>{const e=gt(t);if(e.aborted)throw vt;e.throwIfAborted();const n=await A(m(O(),"upload"));mt(t,()=>N(n,{recursive:!0}));let i=0;const r=()=>{if(e.aborted)throw vt;return m(n,(++i).toString(10).padStart(6,"0"))};return{dir:n,nextFile:r,save:async(t,{mode:n=384}={})=>{const i=r(),o=f(i,{mode:n});try{return await d(t,o,{signal:e}),{path:i,size:o.bytesWritten}}finally{o.close()}}}});function pn(t){const e=at(t);if(!e.I)throw new TypeError("cannot call acceptBody from shouldUpgrade");if(e.C.signal.aborted)throw vt;e.ne||e.B||(e.ne=!0,"100-continue"===t.headers.expect?.trim().toLowerCase()&&e.I.j.writeContinue())}function yn(t,{blockRequestHeaders:e=["connection","expect","host","keep-alive","proxy-authorization","transfer-encoding","upgrade","via"],requestHeaders:n=[],blockResponseHeaders:i=["connection","keep-alive","transfer-encoding"],responseHeaders:s=[],agent:c,keepAlive:a=!0,maxSockets:f=10,...u}={}){let h;t.startsWith("https://")?(c??=new P({keepAlive:a,maxSockets:f,...u}),h=o):(c??=new r({keepAlive:a,maxSockets:f,...u}),h=F);const l=t.endsWith("/")?t:t+"/";return Dt((r,o)=>new Promise((a,f)=>{const u=gt(r),w=t=>f(u.aborted?vt:new oe(502,{cause:t})),p=new URL(l+r.url?.substring(1)),y=p.toString();if(!y.startsWith(l)&&y!==t)return f(new oe(400,{message:"directory traversal blocked"}));pn(r);let m={...r.headers};mn(m,e);for(const t of n)m=t(r,m);const g=h(p,{agent:c,method:r.method,headers:m,signal:u});g.once("error",w),g.once("response",t=>{if(!o.headersSent){let e={...t.headers};mn(e,i);for(const n of s)e=n(r,t,e);o.writeHead(t.statusCode??200,t.statusMessage,e)}d(t,o).then(a,f)}),d(r,g).catch(w)}))}function mn(t,e){for(const e of Te(t.connection)??[])delete t[e.toLowerCase()];for(const n of e)delete t[n]}function gn({trustedProxyCount:t,trustedProxyAddresses:e,trustedHeaders:n}){const i=e?q(e):()=>!0,r=t??(e?Number.POSITIVE_INFINITY:0),o=new Set(n);return Oe(t=>{const e=e=>{if(o.has(e))return Te(t.headers[e])?.reverse()},n=e("forwarded"),s=e("x-forwarded-for"),c=e("x-forwarded-host"),a=e("x-forwarded-proto"),f=e("x-forwarded-protocol"),u=e("x-url-scheme"),h=e("via")?.map(t=>{const e=/^([^/ ]+\/)?([^ ]+) (.+)$/.exec(t);return e?.[3]?H(e[3]):void 0}),l=[bn(t)];if(n)for(const t of n)try{const e=ke(t);l.push({client:H(e.get("for")),server:H(e.get("by")),host:e.get("host"),proto:e.get("proto")})}catch{l.push({client:void 0,server:void 0,host:void 0,proto:void 0})}else if(s){const t=s.map(H),e=c??[],n=a??f??u??[];let i=l[0].client;for(let r=0;r<t.length;++r){const o=t[r];l.push({client:o,server:h?.[r]??(i?{...i,port:void 0}:void 0),host:e[r],proto:n[r]}),i=o}}else if(h)for(const t of h)l.push({client:void 0,server:t,host:void 0,proto:void 0});let d=Math.min(1+r,l.length);for(let t=0;t<d-1;++t)i(l[t].client)||(d=t+1);return Object.freeze({trusted:l.slice(0,d),untrusted:l.slice(d),outwardChain:l,edge:l[d-1]})})}const bn=t=>({client:{...H(t.socket.remoteAddress)??vn,port:t.socket.remotePort},server:{...H(t.socket.localAddress)??vn,port:t.socket.localPort},host:t.headers.host,proto:void 0}),vn={type:"alias",ip:"_disconnected",port:void 0};function En(t,e){return delete e.forwarded,delete e["x-forwarded-for"],delete e["x-forwarded-host"],delete e["x-forwarded-proto"],delete e["x-forwarded-protocol"],delete e["x-url-scheme"],e}function _n(t,e){const n=En(0,e);return n.forwarded=Sn([bn(t)]),n}const Tn=(t,{onlyTrusted:e=!1}={})=>(n,i)=>{const r=En(0,i),o=t(n);return r.forwarded=Sn([...e?o.trusted:o.outwardChain].reverse()),r};function xn(t,e){let n=t.headers.forwarded;const i=Sn([bn(t)]);n?n+=", "+i:n=i;const r=En(0,e);return r.forwarded=n,r}function Sn(t){return t.filter(t=>t.server||t.client).map(t=>Object.entries({for:t.client?.ip,by:t.server?.ip,host:t.host,proto:t.proto}).filter(([t,e])=>e).map(([t,e])=>e&&/[^a-zA-Z0-9._]/.test(e)?`${t}="${e.replaceAll("\\","\\\\").replaceAll('"','\\"').replaceAll(",","-")}"`:`${t}=${e}`).join("; ")).join(", ")}class kn{constructor(t,{fatal:e=!1}={}){this.ie=t,this.re=e,this.oe=new Uint8Array(4),this.se=new DataView(this.oe.buffer),this.ce=0}decode(t,{stream:e=!1}={}){const n=t.byteLength,i=[];let r=0;if(this.ce>0){if(r=4-this.ce,n<r)return this.oe.set(t,this.ce),this.ce+=n,"";this.oe.set(t.subarray(0,r),this.ce),i.push(this.se.getUint32(0,this.ie)),this.ce=0}const o=new DataView(t.buffer,t.byteOffset,t.byteLength);let s=r;for(const t=n-3;s<t;s+=4)i.push(o.getUint32(s,this.ie));if(e?(s<n&&this.oe.set(t.subarray(s)),this.ce=n-s):(this.ce=0,s<n&&(this.re?te(new TypeError("The encoded data was not valid for encoding utf-32"),"ERR_ENCODING_INVALID_ENCODED_DATA"):i.push(65533))),i.length>0){try{return String.fromCodePoint(...i)}catch{this.re&&te(new TypeError("The encoded data was not valid for encoding utf-32"),"ERR_ENCODING_INVALID_ENCODED_DATA")}for(let t=0;t<i.length;++t)i[t]>1114111&&(i[t]=65533);return String.fromCodePoint(...i)}return""}}class $n extends C{constructor(t){super({transform(e,n){try{const i=t.decode(e,{stream:!0});i&&n.enqueue(i)}catch(t){n.error(t)}},flush(e){try{const n=t.decode(X);n&&e.enqueue(n)}catch(t){e.error(t)}}})}}const An=new Map;function Nn(t,e){An.set(t.toLowerCase(),e)}function On(){Nn("utf-32be",{decoder:t=>new kn(!1,t)}),Nn("utf-32le",{decoder:t=>new kn(!0,t)})}function Rn(t,e={}){const n=An.get(t.toLowerCase());if(n)return n.decoder(e);try{return new TextDecoder(t,e)}catch{throw new oe(415,{body:`unsupported charset: ${t}`})}}function Pn(t,e={}){const n=An.get(t.toLowerCase());if(n)return n.decoderStream?n.decoderStream(e):new $n(n.decoder(e));try{return new U(t,e)}catch{throw new oe(415,{body:`unsupported charset: ${t}`})}}const Fn=["utf-32be",null,"utf-16be","utf-16be","utf-32le","utf-16le",null,"utf-8"];function Cn(t,e,n){const i=$e(t.headers["if-modified-since"]),r=Te(t.headers["if-none-match"]);if(r){if(Mn(e,n,r))return!1}else if(i&&(n.mtimeMs/1e3|0)<=i)return!1;return!0}function Un(t,e,n){let i=!0;const r=Ee(t);return r.etag&&(i&&=Mn(e,n,r.etag)),r.modifiedSeconds&&(i&&=(n.mtimeMs/1e3|0)===r.modifiedSeconds),i}function Mn(t,e,n){if(n.includes("*"))return!0;const i=t.getHeader("etag");if("string"==typeof i){if(n.includes(i))return!0;if(i.startsWith('W/"'))return!1}return!!n.some(t=>t.startsWith('W/"'))&&n.includes(He(t.getHeader("content-encoding"),e))}class Dn extends C{constructor(t,e){super({transform(i,r){n+=i.byteLength,n>t?r.error(e):r.enqueue(i)}});let n=0}}function Bn(t,{maxContentBytes:e=Number.POSITIVE_INFINITY,maxNetworkBytes:n=e,maxEncodingSteps:i=1}={}){const r=xe(t.headers["content-length"]);if(void 0!==r&&r>n)throw new oe(413);const o=Te(t.headers["content-encoding"])??[];if(o.length>i)throw new oe(415,{body:"too many content-encoding stages"});pn(t);let s=B.toWeb(t);void 0===r&&Number.isFinite(n)&&(s=s.pipeThrough(new Dn(n,new oe(413))));for(const t of o.reverse())s=s.pipeThrough(qn(t));return Number.isFinite(e)&&(s=s.pipeThrough(new Dn(e,new oe(413,{body:"decoded content too large"})))),s}function In(t,e={}){const n=Bn(t,e),i=ve(t)??e.defaultCharset??"utf-8";return n.pipeThrough(Pn(i,e))}async function jn(t,e={}){const n=[];for await(const i of In(t,e))n.push(i);return n.join("")}async function Hn(t,e={}){const n=await(async(t,e)=>{const n=t.getReader(),i=new Uint8Array(3);let r=0,o=null;for(;;){const t=await n.read(),e=3-r;if(t.done){0===r?(i[0]=1,i[1]=1):1===r&&(i[1]=i[0]),i[2]=i[0],o=null;break}if(o=t.value,o.byteLength>=e){i.set(o.subarray(0,e),r);break}i.set(o,r),r+=o.byteLength}const s=Fn[(i[0]?4:0)|(i[1]?2:0)|(i[2]?1:0)];if(!s)throw n.cancel(),new oe(415,{body:"invalid JSON encoding"});const c=Pn(s,e),a=c.writable.getWriter();return r&&a.write(i.subarray(0,r)),o&&a.write(o),n.releaseLock(),a.releaseLock(),t.pipeThrough(c)})(Bn(t,e),e),i=[];for await(const t of n)i.push(t);return JSON.parse(i.join(""))}function qn(t){switch(t.toLowerCase()){case"gzip":case"x-gzip":return new M("gzip");case"deflate":return new M("deflate");case"br":try{return new M("brotli")}catch{return I.toWeb(w.createBrotliDecompress())}case"zstd":try{return I.toWeb(w.createZstdDecompress())}catch{throw new oe(415,{body:"unsupported content encoding"})}default:throw new oe(415,{body:"unknown content encoding"})}}function Ln(t){if(!t)return null;const[e,n]=ge(t,";"),i=new Map;if(n){const t=/\s*([!#-'*+\-.0-:>-Z^-z|~]+)=(?:([!#-'*+\-.0-:>-Z^-z|~]+)|"((?:[^\x00-\x08\x0a-\x1f"\\\x7f]|\\.)*)")\s*(;|$)/gy;for(;t.lastIndex!==n.length;){const e=t.exec(n);if(!e)return null;const r=e[1].toLowerCase(),o=e[2]??e[3]?.replaceAll(/\\(.)/g,"$1")??"";i.has(r)||i.set(r,o)}}return{mime:e.trim().toLowerCase(),params:i}}function zn(t,e,n,i){const r=t.byteLength;for(;e<r;){for(;e<r;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===r)break;if(59!==t[e++])return!1;for(;e<r;++e){const n=t[e];if(32!==n&&9!==n)break}if(e===r)return!1;const o=e;for(;e<r;++e){const n=t[e];if(!Gn[n]){if(61===n)break;return!1}}if(e===r)return!1;const s=t.latin1Slice(o,e).toLowerCase();if("*"===s[s.length-1]){const i=++e;for(;e<r;++e){const n=t[e];if(!Vn[n]){if(39!==n)return!1;break}}if(e===r)return!1;const o=Rn(t.latin1Slice(i,e));for(++e;e<r&&39!==t[e];++e);if(e===r)return!1;if(++e===r)return!1;let c=e;const a=[];for(;e<r;++e){const n=t[e];if(1!==Jn[n]){if(37===n){let n,i;if(e+2<r&&16!==(n=Xn[t[e+1]])&&16!==(i=Xn[t[e+2]])){const r=(n<<4)+i;e>c&&a.push(o.decode(t.subarray(c,e),{stream:!0})),a.push(o.decode(Buffer.from([r]),{stream:!0})),c=(e+=2)+1;continue}return!1}break}}a.push(o.decode(t.subarray(c,e)));const f=a.join("");n.has(s)||n.set(s,f);continue}if(++e===r)return!1;if(34===t[e]){let o=++e,c=!1;const a=[];for(;e<r;++e){const n=t[e];if(92!==n){if(34===n){if(c){o=e,c=!1;continue}a.push(i.decode(t.subarray(o,e)));break}if(c&&(o=e-1,c=!1),!Zn[n])return!1}else c?(o=e,c=!1):(a.push(i.decode(t.subarray(o,e),{stream:!0})),c=!0)}if(e===r)return!1;++e,n.has(s)||n.set(s,a.join(""));continue}let c=e;for(;e<r;++e){const n=t[e];if(!Gn[n]){if(e===c)return!1;break}}n.has(s)||n.set(s,i.decode(t.subarray(c,e)))}return!0}const Wn=[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Gn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,...Wn,0,1,0,1],33),t})(),Jn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,0,1,0,0,0,0,1,0,1,1,0,...Wn,0,1,0,1],33),t})(),Vn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.set([1,0,1,1,1,1,0,0,0,0,1,0,1,0,0,...Wn,1,0,1,1],33),t})(),Zn=/*@__PURE__*/(()=>{const t=new Uint8Array(256);return t.fill(1,32,256),t[9]=1,t[34]=0,t[92]=0,t[127]=0,t})(),Xn=/*@__PURE__*/(()=>{const t=new Uint8Array(256).fill(16);for(let e=0;e<10;++e)t[48+e]=e;for(let e=0;e<6;++e)t[65+e]=e+10,t[97+e]=e+10;return t})();class Yn{constructor(t,e){const n=t.byteLength;if(!n||n>65535)throw new RangeError("invalid needle");this.ae=t,this.fe=e,this.ue=null,this.he=0,this.le=null}push(t){let e=0;const n=t.byteLength,i=this.ae,r=i.byteLength-1,o=n-r;let s=-this.he;if(this.he){const c=this.le,a=this.ue,f=i[r];if(o>0){const n=t[s+r];n!==f||t.compare(i,-s,r,0,s+r)?s+=c[n]:(this.fe(!0,X,0,0,!0),this.he=0,e=s+=r+1)}const u=o<0?o:0;for(;s<u;){const n=t[s+r];if(n===f&&!a.compare(i,0,-s,this.he+s,this.he)&&!t.compare(i,-s,r,0,s+r)){this.fe(!0,a,0,this.he+s,!1),this.he=0,e=s+=r+1;break}s+=c[n]}const h=this.he;if(h>0){const e=i[0];for(;s<0;){const r=a.subarray(0,h).indexOf(e,h+s);if(-1===r){s=0;break}const o=h-r;if(!a.compare(i,1,o,r+1,h)&&!t.compare(i,o,o+n))return r&&(this.fe(!1,a,0,r,!1),a.copy(a,0,r,o)),a.set(t,o),void(this.he+=n-r);s=r+1-h}this.fe(!1,a,0,h,!1),this.he=0}}for(;s<o;){const n=t.indexOf(i,s);if(-1!==n){if(this.fe(!0,t,e,n,!0),n===o+1)return;e=s=n+r+1}else s=o}const c=i[0];for(;s<n;){const o=t.indexOf(c,s);if(-1===o)return void this.fe(!1,t,e,n,!0);if(!t.compare(i,1,n-o,o+1)){if(!this.ue){this.ue=Buffer.allocUnsafe(r),this.le=new Uint16Array(256).fill(r+1);for(let t=0;t<r;++t)this.le[i[t]]=r-t}return t.copy(this.ue,0,o),this.he=n-o,void(o>e&&this.fe(!1,t,e,o,!0))}s=o+1}n>e&&this.fe(!1,t,e,n,!0)}destroy(){const t=this.he;t&&this.ue&&this.fe(!1,this.ue,0,t,!1),this.he=0}}class Kn extends j{constructor({limits:t={},preservePath:e,highWaterMark:n,fileHwm:i,defParamCharset:r="utf-8",defCharset:o="utf-8"},s){super({autoDestroy:!0,emitClose:!0,highWaterMark:n,write:Qn,destroy:ti,final:ei});const c=s.get("boundary");if(!c)throw new oe(400,{body:"multipart boundary not found"});if(c.length>70)throw new oe(400,{body:"multipart boundary too long"});const a=Rn(r),f={autoDestroy:!0,emitClose:!0,highWaterMark:i},u=t.fieldSize??1048576,h=t.fileSize??Number.POSITIVE_INFINITY,l=t.fieldNameSize??100,d=t.files??Number.POSITIVE_INFINITY,w=t.fields??Number.POSITIVE_INFINITY,p=t.parts??Number.POSITIVE_INFINITY;let y,m,g,b,v,E=0,_=0,T=0,x=-1;this.de=0,this.we=!1;let S=!1;const k=new ni(t=>{this.pe=void 0;const n=t["content-disposition"];if(!n)return void(x=-1);const i=((t,e)=>{if(!t.byteLength)return null;const n=new Map;let i=0;for(;i<t.byteLength;++i)if(!Gn[t[i]]){if(!zn(t,i,n,e))return null;break}return{type:t.latin1Slice(0,i).toLowerCase(),params:n}})(Buffer.from(n,"latin1"),a);if("form-data"!==i?.type)return void(x=-1);v=i.params.get("name")??"",S=v.length>l,S&&(v=v.substring(0,l));let r=i.params.get("filename*")??i.params.get("filename");void 0===r||e||(r=(t=>{for(let e=t.length;e-- >0;)if("/"===t[e]||"\\"===t[e]){t=t.slice(e+1);break}return".."===t||"."===t?"":t})(r));const s=Ln(t["content-type"]);b=s?.mime??"text/plain";const c=s?.params.get("charset")?.toLowerCase()??o;if(m=Rn(c),g=t["content-transfer-encoding"]?.toLowerCase()??"7bit","application/octet-stream"===b||void 0!==r){if(T++===d&&this.emit("filesLimit"),T>d||0===this.listenerCount("file"))return void(x=-1);this.ye=new ii(f,this),++this.de,this.emit("file",v,this.ye,{nameTruncated:S,filename:r,encoding:g,mimeType:b}),x=h}else{if(_++===w&&this.emit("fieldsLimit"),_>w||0===this.listenerCount("field"))return void(x=-1);y="",x=u}});let $=0;const A=Buffer.from(`\r\n--${c}`,"latin1");this.me=new Yn(A,(t,e,n,i,r)=>{try{if(n===i)return;if($){if(1===$){if(13===e[n])$=2;else{if(45!==e[n])return void($=0);$=3}if(++n===i)return}if(2!==$){if($=0,45!==e[n])return;return this.we=!0,void(this.me=oi)}if($=0,10!==e[n++])return;if(E++===p&&this.emit("partsLimit"),E>p)return;if(this.pe=k,n===i)return}if(this.pe){const t=this.pe.push(e,n,i);if(-1===t)return this.pe=void 0,k.reset(),void this.emit("error",new oe(400,{body:"malformed part header"}));if(t===i)return;n=t}if(x>=0){const t=Math.min(i,n+x);if(x-=i-n,this.ye){if(t>n){let i;r?i=e.subarray(n,t):(i=Buffer.allocUnsafe(t-n),e.copy(i,0,n,t)),this.ye.push(i)||(this.ye.ge??=this.be,this.be=void 0)}x<0&&(this.ye.emit("limit"),this.ye.truncated=!0)}else void 0!==y&&(y+=e.latin1Slice(n,t))}}finally{t&&(this.pe?(this.emit("error",new oe(400,{body:"unexpected end of headers"})),this.pe=void 0):this.ye?(this.ye.push(null),this.ye=void 0):void 0!==y&&(this.emit("field",v,m.decode(Buffer.from(y,"latin1")),{nameTruncated:S,valueTruncated:x<0,encoding:g,mimeType:b}),y=void 0),$=1,x=-1)}}),this.write(si)}ve(){if(this.pe)return new oe(400,{body:"malformed part header"});const t=this.ye;return t&&(this.ye=void 0,t.destroy(new oe(400,{body:"unexpected end of file"}))),this.we?null:new oe(400,{body:"unexpected end of form"})}}function Qn(t,e,n){this.be=n,this.me.push(t);const i=this.be;i&&(this.be=void 0,i())}function ti(t,e){this.pe=void 0,this.me=oi,t??=this.ve();const n=this.ye;n&&(this.ye=void 0,n.destroy(t??void 0)),e(t)}function ei(t){if(this.me.destroy(),!this.we)return t(new oe(400,{body:"unexpected end of form"}));this.de?this.Ee=()=>t(this.ve()):t(this.ve())}class ni{constructor(t){this._e=Object.create(null),this.Te=0,this.xe=0,this.m=0,this.ct="",this.Se="",this.ke=0,this.fe=t}reset(){this._e=Object.create(null),this.Te=0,this.xe=0,this.m=0,this.ct="",this.Se="",this.ke=0}push(t,e,n){let i=e,r=e;const o=Math.min(n,e+16384-this.xe);for(;r<o;)switch(this.m){case 0:for(;r<o&&Gn[t[r]];++r);if(r>i&&(this.ct+=t.latin1Slice(i,r)),r<o){if(58!==t[r])return-1;if(!this.ct)return-1;++r,this.m=1}break;case 1:for(;r<o;++r){const e=t[r];if(32!==e&&9!==e){i=r,this.m=2;break}}break;case 2:switch(this.ke){case 0:for(;r<o;++r){const e=t[r];if(e<32||127===e){if(13!==e)return-1;++this.ke;break}}this.Se+=t.latin1Slice(i,r),++r;break;case 1:if(10!==t[r++])return-1;++this.ke;break;case 2:{const e=t[r];32===e||9===e?(i=r,this.ke=0):(++this.Te<2e3&&(this._e[this.ct.toLowerCase()]??=this.Se),13===e?(++this.ke,++r):(i=r,this.ke=0,this.m=0,this.ct="",this.Se=""));break}case 3:{if(10!==t[r++])return-1;const e=this._e;return this.reset(),this.fe(e),r}}}return o<n?-1:(this.xe+=o-e,o)}}class ii extends B{constructor(t,e){super({...t,read:ri}),this.truncated=!1,this.once("end",()=>{if(ri.call(this),0===--e.de&&e.Ee){const t=e.Ee;e.Ee=void 0,process.nextTick(t)}})}}function ri(t){const e=this.ge;e&&(this.ge=void 0,e())}const oi={push:()=>{},destroy:()=>{}},si=/*@__PURE__*/Buffer.from("\r\n");class ci extends j{constructor({limits:t={},highWaterMark:e,defCharset:n="utf-8"},i){super({autoDestroy:!0,emitClose:!0,highWaterMark:e,write:ai,final:fi}),this.$e=i.get("charset")??n,this.Ae=t.fieldSize??1048576,this.Ne=t.fields??Number.POSITIVE_INFINITY,this.Oe=t.fieldNameSize??100,this.Re=0,this.Pe=!0,this.Fe="",this.Ce=this.Oe,this.Ue=0,this.Me="",this.De=!1,this.Be=-2,this.Ie=/^utf-?8$/i.test(this.$e)?1:/^(latin-?1|iso[\-_]?8859-?1|(us-)?ascii)$/i.test(this.$e)?2:0,this.je=Rn(this.$e)}}function ai(t,e,n){if(!t.byteLength)return n();if(this.Re>=this.Ne)return this.Re||t===pi||(++this.Re,this.emit("fieldsLimit")),n();const i=t.byteLength;let r=0,o=this.Be;if(-2!==o){if(-1===o){if(16===(o=Xn[t[r++]]))return n(new oe(400,{body:"malformed urlencoded form"}));if(this.Ue|=o,r===i)return this.Be=o,n()}const e=Xn[t[r++]];if(16===e)return n(new oe(400,{body:"malformed urlencoded form"}));if(this.Fe+=String.fromCharCode((o<<4)+e),this.Be=-2,r===i)return n()}for(wi[ui]=1,wi[hi]=1,wi[li]=1,wi[di]=this.Pe?1:0;;){const e=r;for(;r<i&&!wi[t[r]];++r);if(r>e&&this.Ce>=0&&((this.Ce-=r-e)<0?this.Fe+=t.latin1Slice(e,r+this.Ce):this.Fe+=t.latin1Slice(e,r)),r===i)return n();switch(t[r++]){case ui:for(;;){if(--this.Ce<0){wi[ui]=0,wi[li]=0;break}if(r===i)return this.Be=-1,n();const e=Xn[t[r++]];if(16===e)return n(new oe(400,{body:"malformed urlencoded form"}));if(this.Ue|=e,r===i)return this.Be=e,n();const o=Xn[t[r++]];if(16===o)return n(new oe(400,{body:"malformed urlencoded form"}));if(this.Fe+=String.fromCharCode((e<<4)+o),r===i)return n();if(t[r]!==ui)break;r++}break;case hi:const e=!this.Ie||1===this.Ie&&8&this.Ue?this.je.decode(Buffer.from(this.Fe,"latin1")):this.Fe;if(this.Pe?(e||this.Ce<0)&&this.emit("field",this.Fe,"",{nameTruncated:this.Ce<0,valueTruncated:!1,encoding:this.$e,mimeType:"text/plain"}):(this.emit("field",this.Me,e,{nameTruncated:this.De,valueTruncated:this.Ce<0,encoding:this.$e,mimeType:"text/plain"}),this.Me="",this.De=!1,this.Pe=!0,wi[di]=1),wi[ui]=1,wi[li]=1,this.Fe="",this.Ce=this.Oe,this.Ue=0,++this.Re===this.Ne&&t!==pi)return this.emit("fieldsLimit"),n();break;case li:--this.Ce<0?(wi[ui]=0,wi[li]=0):this.Fe+=" ";break;case di:this.Me=!this.Ie||1===this.Ie&&8&this.Ue?this.je.decode(Buffer.from(this.Fe,"latin1")):this.Fe,this.De=this.Ce<0,this.Pe=!1,wi[di]=0,wi[ui]=1,wi[li]=1,this.Fe="",this.Ue=0,this.Ce=this.Ae}if(r===i)return n()}}function fi(t){ai.call(this,pi,void 0,t)}const ui=37,hi=38,li=43,di=61,wi=/*@__PURE__*/new Uint8Array(256),pi=/*@__PURE__*/Buffer.from([hi]);function yi(t,{closeAfterErrorDelay:e=500,...n}={}){const i=((t,e={})=>{const n=t["content-type"];if(!n)throw new oe(400,{body:"missing content-type"});const i=Ln(n);if(!i)throw new oe(400,{body:"malformed content-type"});const r="application/x-www-form-urlencoded"===i.mime?ci:"multipart/form-data"!==i.mime||e.blockMultipart?null:Kn;if(!r)throw new oe(415);return new r(e,i.params)})(t.headers,n);pn(t);const r=new J,o=(n,o)=>{if(r.fail(new oe(n,o)),i.removeAllListeners(),t.unpipe(i),t.resume(),e>=0){const n=setTimeout(()=>t.socket.destroy(),e);t.once("end",()=>clearTimeout(n))}};i.on("field",(t,e,{nameTruncated:n,valueTruncated:i,encoding:s,mimeType:c})=>t?n?o(400,{body:`field name ${JSON.stringify(t)}... too long`}):i?o(400,{body:`value for ${JSON.stringify(t)} too long`}):void r.push({name:t,encoding:s,mimeType:c,type:"string",value:e}):o(400,{body:"missing field name"})),i.on("file",(t,e,{nameTruncated:n,filename:i,encoding:s,mimeType:c})=>t?n?o(400,{body:`field name ${JSON.stringify(t)}... too long`}):void(i?(e.once("limit",()=>o(400,{body:`uploaded file for ${JSON.stringify(t)}: ${JSON.stringify(i)} too large`})),r.push({name:t,encoding:s,mimeType:c,type:"file",value:e,filename:i})):e.resume()):o(400,{body:"missing field name"})),t.once("error",e=>{t.readableAborted?r.fail(vt):o(500,{body:"request error",headers:{connection:"close"},cause:e})}),i.once("error",t=>o(400,{body:"error parsing form data",cause:t})),i.once("partsLimit",()=>o(400,{body:"too many parts"})),i.once("filesLimit",()=>o(400,{body:"too many files"})),i.once("fieldsLimit",()=>o(400,{body:"too many fields"}));const s=()=>r.close("complete");return i.once("close",s),mt(t,s),t.pipe(i),r}async function mi(t,e={}){const n=new FormData,i=new Map;for await(const r of yi(t,e))if("file"===r.type){const o=r.value;let s=await(e.preCheckFile?.({fieldName:r.name,filename:r.filename,encoding:r.encoding,mimeType:r.mimeType,maxBytes:e.limits?.fileSize}));const c=t=>{if("function"==typeof s){const e=s;return s=void 0,e({actualBytes:t})}};mt(t,()=>c(0));const a=await wn(t),f=await a.save(o,{mode:384});await c(f.size);const h=new File([await u(f.path)],r.filename,{type:r.mimeType});i.set(h,f.path),n.append(r.name,h)}else{let t=r.value;e.trimAllValues&&(t=t.trim()),n.append(r.name,t)}return Object.assign(n,{getTempFilePath(t){const e=i.get(t);if(!e)throw new RangeError("unknown file");return e},getBoolean(t){const e=n.get(t);return null===e?null:"true"===e||"on"===e},getString(t){const e=n.get(t);return"string"==typeof e?e:null},getAllStrings:t=>n.getAll(t).filter(t=>"string"==typeof t),getFile(t){const e=n.get(t);return"string"==typeof e?null:e},getAllFiles:t=>n.getAll(t).filter(t=>"string"!=typeof t)})}const gi="win32"===/*@__PURE__*/R();function bi(t,{rejectPotentiallyUnsafe:e=!0}={}){let n=[];const i=st(t);if(i){if("/"===i.F)return[];n=i.F.split("/")}else{const e=Y(t).pathname;if("/"===e)return[];n=e.split("/").map(decodeURIComponent)}if(""!==n[0])throw new oe(400,{body:"invalid path"});if(n.shift(),e){const t=gi?Ei:vi;if(n.some(e=>t.test(e)||e.includes(v)))throw new oe(400,{body:"invalid path"});if(n.slice(0,n.length-1).includes(""))throw new oe(400,{body:"invalid path"})}return n}const vi=/[\x00-\x1F\x7F/]|^(\.\.?|~)$/,Ei=/[\x00-\x1F"*/:<>?\\|\x7F]|^[\s.]*$|^(CON|PRN|AUX|NUL|(COM|LPT)[\d\xB9\xB2\xB3])(\.|$)/i,_i=t=>new Promise(e=>{const n=()=>{t.cork(),e()};t instanceof s?t.write(X,n):t.once("drain",n),t.uncork()});async function Ti(t,e,{delimiter:n=",",newline:i="\n",quote:r='"',encoding:o="utf-8",headerRow:c,end:a=!0}={}){"string"==typeof n&&(n=Buffer.from(n,o)),"string"==typeof i&&(i=Buffer.from(i,o));const f="string"==typeof r?Buffer.from(r,o):r,u=r+r,h=e=>{if(!e)return!0;const n=e.includes(r);return!n&&xi.test(e)?t.write(e,o):(t.write(f),n?t.write(e.replaceAll(r,u),o):t.write(e,o),t.write(f))};t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","text/csv; charset="+o+(c?"; header=present":!1===c?"; header=absent":"")),t.cork();try{t.write(X);for await(const r of e){if(t.writableAborted)break;let e=0;if(Symbol.iterator in r)for(const i of r)e&&t.write(n),h(i)||await _i(t),++e;else for await(const i of r)e&&t.write(n),h(i)||await _i(t),++e;t.write(i)||await _i(t)}}finally{t.uncork()}a&&t.end()}const xi=/^[^"':;,\\\r\n\t ]*$/i;function Si(t){if(!t||"object"!=typeof t)return!1;const e=t;return"number"==typeof e.fd&&"function"==typeof e.stat&&"function"==typeof e.createReadStream}class ki{constructor(t){(t=>"He"in t&&"function"==typeof t.pipe)(t)&&(t=B.toWeb(t)),this.ft=t.getReader(),this.qe=null,this.Le=0,this.m=0}getRange(t,e){if(e<t)throw new RangeError("invalid range");if(t<this.Le)throw new RangeError("non-sequential range");if(this.m)throw new TypeError("previous range still active");let n=e-t+1,i=t-this.Le;this.Le=e+1,this.m=1;const r=this,o=(t,e)=>{const r=t.byteLength;r<=i?i-=r:r>i+n?(this.qe=t.subarray(i+n),e.enqueue(t.subarray(i,i+n)),n=0):i>0?(e.enqueue(t.subarray(i)),n-=r-i,i=0):(e.enqueue(t),n-=r)};return new D({start(t){if(r.qe){const e=r.qe;r.qe=null,o(e,t)}},async pull(t){if(n<=0)return r.m=0,void t.close();const e=await r.ft.read();e.done?t.error(new RangeError("range exceeds content")):"string"==typeof e.value?o(Buffer.from(e.value,"utf-8"),t):e.value instanceof Uint8Array?o(e.value,t):t.error(new TypeError("invalid stream type: must contain bytes or UTF-8 text"))}})}async close(){await this.ft.cancel(),this.ft.releaseLock()}}function $i(t,{forceSequential:e=!1,mergeOverlapDistance:n=100}={}){const i=[];if(n>=0)for(const e of t.ranges){let t=null,r=0;for(let o=0;o<i.length;++o){const s=i[o];e.end>=s.start-n-1&&s.end>=e.start-n-1?t?(++r,t.start=Math.min(t.start,s.start),t.end=Math.max(t.end,s.end)):(t=s,t.start=Math.min(t.start,e.start),t.end=Math.max(t.end,e.end)):r>0&&(i[o-r]=s)}t?i.length-=r:i.push({...e})}else i.push(...t.ranges);if(e)for(let t=0;t<i.length-1;++t)if(i[t].start>i[t+1].start){i.sort((t,e)=>t.start-e.start);break}return{ranges:i,totalSize:t.totalSize}}async function Ai(t,e,n,i){if("string"==typeof n||Si(n)||(i=$i(i,{mergeOverlapDistance:0,forceSequential:!0})),1===i.ranges.length){const r=i.ranges[0];if(e.setHeader("content-length",r.end-r.start+1),e.setHeader("content-range",`bytes ${r.start}-${r.end}/${i.totalSize??"*"}`),e.writeHead(206),"HEAD"===t.method)return void e.end();const o=await Ni(n);return await d(o.ze(r.start,r.end),e),void(o.We&&await o.We())}const r=e.getHeader("content-type"),o=l()+l()+"ABCDEFGHIJKLMNOPQRSTUVWXYZ";e.setHeader("content-type",`multipart/byteranges; boundary=${o}`);const s=i.ranges.map(t=>({o:[`--${o}`,...ne({"content-type":r,"content-range":`bytes ${t.start}-${t.end}/${i.totalSize??"*"}`}),"",""].join("\r\n"),Ge:t})),c=`--${o}--`;let a=c.length;for(const{o:t,Ge:e}of s)a+=t.length+e.end-e.start+1+2;if(e.setHeader("content-length",a),"HEAD"===t.method)return void e.end();let f="";const u=await Ni(n);try{for(const{o:t,Ge:n}of s)e.write(f+t,"ascii"),await d(u.ze(n.start,n.end),e,{end:!1}),f="\r\n";e.end(f+c)}finally{u.We&&await u.We()}}async function Ni(t){if("string"==typeof t){const e=await $(t,"r");return{ze:(t,n)=>e.createReadStream({start:t,end:n,autoClose:!1}),We:()=>e.close()}}if(Si(t))return{ze:(e,n)=>t.createReadStream({start:e,end:n,autoClose:!1})};{const e=new ki(t);return{ze:(t,n)=>e.getRange(t,n),We:()=>e.close()}}}async function Oi(t,e,n,i,r){if(i||("string"==typeof n?i=await x(n):Si(n)&&(i=await n.stat())),i){if("GET"===t.method||"HEAD"===t.method){if(!Cn(t,e,i))return void e.writeHead(304).end();e.setHeader("accept-ranges","bytes");const o=_e(t,i.size,r);if(o&&Un(t,e,i))return Ai(t,e,n,$i(o,r))}e.setHeader("content-length",i.size)}if(e.writeHead(e.statusCode,e.statusMessage),"HEAD"!==t.method)return"string"==typeof n?n=c(n):Si(n)&&(n=n.createReadStream({start:0,autoClose:!1})),d(n,e);e.end()}function Ri(t,e,{replacer:n,space:i,undefinedAsNull:r=!1,encoding:o="utf-8",end:c=!0}={}){const a=JSON.stringify(e,n,i)??(r?"null":void 0);t instanceof s&&!t.headersSent&&(t.hasHeader("content-type")||t.setHeader("content-type","application/json"),c&&t.setHeader("content-length",Buffer.byteLength(a,o))),c?t.end(a,o):a&&t.write(a,o)}async function Pi(t,e,{replacer:n=null,space:i="",undefinedAsNull:r=!1,encoding:o="utf-8",end:c=!0}={}){if(Array.isArray(n)){const t=new Set(n.map(t=>String(t)));n=function(e,n){return null===this||Array.isArray(this)||t.has(e)?n:void 0}}"number"==typeof i&&(i=" ".substring(0,i));const a={Je:e=>t.write(e,o),Ve:()=>_i(t),Ze:n,Xe:i};if(t instanceof s&&!t.headersSent&&!t.hasHeader("content-type")&&t.setHeader("content-type","application/json"),e=Ci(null,"",e,a),Ui(e))r&&a.Je("null");else{t.cork(),t.write(X);try{await Fi(a,e,i?"\n":"")}finally{t.uncork()}}c&&t.end()}async function Fi(t,e,n){const i=(i,r,o)=>{t.Je(i);const s=n+t.Xe,c=t.Xe?": ":":";let a=!0;return{i:async(n,i)=>{const r=Ci(e,n,i,t);o&&Ui(r)||(a?a=!1:t.Je(","),t.Je(s),o&&(t.Je(JSON.stringify(n))||await t.Ve(),t.Je(c)),await Fi(t,r,s))},We:()=>{a||t.Je(n),t.Je(r)}}};if(null===e||"object"!=typeof e||e instanceof String||e instanceof Number||e instanceof Boolean||e instanceof Function||e instanceof Symbol||e instanceof BigInt||Mi(e))t.Je(JSON.stringify(e)??"null")||await t.Ve();else if(e instanceof B){t.Je('"');for await(const n of e){if("string"!=typeof n)throw new TypeError("Readables must have an encoding");const e=JSON.stringify(n);t.Je(e.substring(1,e.length-1))||await t.Ve()}t.Je('"')}else if(e instanceof Map){const t=i("{","}",!0);for(const[n,i]of e)await t.i(n,i);t.We()}else if(Di(e)){let t=0;const n=i("[","]",!1);for(const i of e)await n.i(String(t++),i);n.We()}else if(Bi(e)){let t=0;const n=i("[","]",!1);for await(const i of e)await n.i(String(t++),i);n.We()}else{const t=i("{","}",!0);for(const[n,i]of Object.entries(e))await t.i(n,i);t.We()}}function Ci(t,e,n,i){return i.Ze&&(n=i.Ze.call(t,e,n)),n&&"object"==typeof n&&"function"==typeof n.toJSON&&(n=n.toJSON(e)),n}const Ui=t=>void 0===t||"function"==typeof t||"symbol"==typeof t||t instanceof Function||t instanceof Symbol,Mi=t=>JSON.isRawJSON?.(t)??!1,Di=t=>Symbol.iterator in t,Bi=t=>Symbol.asyncIterator in t;class Ii{constructor(t,e,{keepaliveInterval:n=15e3,softCloseReconnectDelay:i=500,softCloseReconnectStagger:r=2e3}={}){this.Ye=e,this.Ke=n??0,this.C=new AbortController,e.setHeader("content-type","text/event-stream"),e.setHeader("x-accel-buffering","no"),e.setHeader("cache-control","no-store"),e.writeHead(200),e.flushHeaders(),this.ping=this.ping.bind(this),this.Qe(),t.once("close",()=>this.close()),ft(t,()=>this.close(i,r))}get signal(){return this.C.signal}get open(){return!this.C.signal.aborted}Qe(){this.Ke&&(this.tn=setTimeout(this.ping,this.Ke))}ping(){!this.C.signal.aborted&&this.Ye.writable&&(clearTimeout(this.tn),this.Ye.write(":\n\n",()=>this.Qe()))}send({event:t,id:e,data:n,reconnectDelay:i=-1}){return this.sendFields([["event",t],["id",e],["data",n],["retry",i>=0?String(0|i):void 0]])}async sendFields(t){let e;this.C.signal.throwIfAborted(),this.Ye.cork();try{let n=!1;for(const[e,i]of t){if(void 0===i)continue;const t=i.split(/(?<=\n)|(?<=\r)(?!\n)/g);for(let n of t)this.Ye.write(e)," "===n[0]?this.Ye.write(": "):this.Ye.write(":"),this.Ye.write(n);/[\r\n]$/.test(i)?(this.Ye.write(e),this.Ye.write(":\n")):this.Ye.write("\n"),n=!0}if(!n)return;clearTimeout(this.tn),this.Ye.write("\n",()=>e())}finally{this.Ye.uncork()}await new Promise(t=>{e=t}),this.Qe()}async close(t=0,e=0){if(this.C.signal.aborted){if(this.Ye.closed)return;return new Promise(t=>this.Ye.once("close",t))}this.Ke=0,clearTimeout(this.tn),this.C.abort(new Error("ServerSentEvents closed")),await new Promise(n=>{if(this.Ye.writable&&(t>0||e>0)){const i=t+Math.random()*e;this.Ye.end(`retry:${0|i}\n\n`,n)}else this.Ye.end(n)})}}const ji=async(t,{mode:e="dynamic",fallback:n,callback:i=Hi,...r}={})=>{const o=await hn.build(E(process.cwd(),t),r);let s=null;const c=n?.statusCode??200;if(n){let t=n.filePath;t.startsWith("/")&&(t=t.substring(1)),s=t.split("/")}const a="dynamic"===e?{}:{rejectPotentiallyUnsafe:!1},f="dynamic"===e?o:await o.precompute();return{handleRequest:async(t,e)=>{if("GET"!==t.method&&"HEAD"!==t.method)return Et;let n=!1;const r=bi(t,a),o={mime:Se(t.headers.accept),language:Se(t.headers["accept-language"]),encoding:Se(t.headers["accept-encoding"])};let u=await f.find(r,o);if(!u&&s&&(n=!0,u=await f.find(s,o)),!u)return Et;try{n&&(e.statusCode=c),e.setHeader("content-type",u.mime??nn(y(u.canonicalPath))),u.encoding&&"identity"!==u.encoding&&e.setHeader("content-encoding",u.encoding);const r=f.vary;if(r){const t=e.getHeader("vary")??"";e.setHeader("vary",(t?t+", ":"")+r)}await i(t,e,u,n),await Oi(t,e,u.handle,u.stats)}finally{u.handle.close().catch(()=>{})}}}};function Hi(t,e,n){e.setHeader("etag",He(e.getHeader("content-encoding"),n.stats)),e.setHeader("last-modified",n.stats.mtime.toUTCString())}class qi extends Error{constructor(t,{message:e,statusMessage:n,...i}={}){super(e,i),this.statusCode=0|t,this.statusMessage=n??"",this.name=`WebSocketError(${this.statusCode} ${this.statusMessage})`}static NORMAL_CLOSURE=1e3;static GOING_AWAY=1001;static UNSUPPORTED_DATA=1003;static POLICY_VIOLATION=1008;static MESSAGE_TOO_BIG=1009;static INTERNAL_SERVER_ERROR=1011;static SERVICE_RESTART=1012;static TRY_AGAIN_LATER=1013;static BAD_GATEWAY=1014}function Li(t,{softCloseStatusCode:e=qi.GOING_AWAY,...n}={}){const i=(i,r,o)=>new Promise((s,c)=>{const a=new t({...n,noServer:!0,clientTracking:!1});a.once("wsClientError",c),a.handleUpgrade(i,r,o,t=>{a.off("wsClientError",c),s({return:t,onError:e=>{const n=V(e,qi);if(n)return void t.close(n.statusCode,n.statusMessage);const i=V(e,oe)??new oe(500),r=i.statusCode>=500?qi.INTERNAL_SERVER_ERROR:4e3+i.statusCode;t.close(r,i.statusMessage)},softCloseHandler:n=>t.close(e,n)})})});return t=>xt(t,i)}class zi{constructor(t,e){this.data=t,this.isBinary=e}get text(){if(this.isBinary)throw new qi(qi.UNSUPPORTED_DATA,{statusMessage:"expected text"});return this.data.toString("utf-8")}get binary(){if(!this.isBinary)throw new qi(qi.UNSUPPORTED_DATA,{statusMessage:"expected binary"});return this.data}}class Wi{constructor(t,{limit:e=-1,signal:n}={}){this.en=new J;const i=e=>{t.off("message",o),t.off("close",r),this.en.close(new Error(e))},r=()=>i("connection closed"),o=(t,n)=>{void 0!==n?this.en.push(new zi(t,n)):"string"==typeof t?this.en.push(new zi(Buffer.from(t,"utf-8"),!1)):this.en.push(new zi(t,!0)),e>0&&0===--e&&this.detach()};this.detach=()=>{},n?.aborted?this.en.close(n.reason):2===t.readyState||3===t.readyState?this.en.close(new Error("connection closed")):(t.on("message",o),t.on("close",r),n?.addEventListener("abort",()=>i("signal aborted")),this.detach=()=>i("WebSocket listener detached"))}next(t){return this.en.shift(t)}[Symbol.asyncIterator](){return this.en[Symbol.asyncIterator]()}}function Gi(t,{timeout:e,signal:n}={}){const i=new Wi(t,{limit:1,signal:n});return i.next(e).finally(()=>i.detach())}function Ji(t){const e=at(t);return"GET"===t.method&&(e.B?.has("websocket")??!1)}const Vi=t=>t.headers.origin??ie(t.headers["sec-websocket-origin"]),Zi=(t,e=5e3)=>async n=>{if(!Ji(n))return;const i=await t(n);let r;try{r=await Gi(i,{timeout:e})}catch(t){if((i.readyState??0)>=2)throw vt;throw new qi(qi.POLICY_VIOLATION,{statusMessage:"timeout waiting for authentication token",cause:t})}if(r.isBinary)throw new qi(qi.UNSUPPORTED_DATA,{statusMessage:"authentication token must be sent as text"});return r.data.toString("utf-8")};export{J as BlockingQueue,Et as CONTINUE,hn as FileFinder,oe as HTTPError,_t as NEXT_ROUTE,Tt as NEXT_ROUTER,Ne as Property,G as Queue,Jt as Router,vt as STOP,Ii as ServerSentEvents,de as WebListener,qi as WebSocketError,zi as WebSocketMessage,Wi as WebSocketMessages,pn as acceptBody,xt as acceptUpgrade,mt as addTeardown,It as anyHandler,Cn as checkIfModified,Un as checkIfRange,Ce as clearProperty,Mn as compareETag,rn as compressFileOffline,on as compressFilesInDir,qt as conditionalErrorHandler,tn as decompressMime,yt as defer,an as emitError,jt as errorHandler,ji as fileServer,V as findCause,qe as generateStrongETag,He as generateWeakETag,gt as getAbortSignal,Ut as getAbsolutePath,Z as getAddressURL,be as getAuthorization,Hn as getBodyJson,Bn as getBodyStream,jn as getBodyText,In as getBodyTextStream,ve as getCharset,mi as getFormData,yi as getFormFields,Ee as getIfRange,nn as getMime,Ct as getPathParameter,Ft as getPathParameters,Fe as getProperty,me as getQuery,_e as getRange,bi as getRemainingPathComponents,pe as getSearch,ye as getSearchParams,Rn as getTextDecoder,Pn as getTextDecoderStream,Vi as getWebSocketOrigin,De as hasAuthScope,ht as isSoftClosed,Ji as isWebSocketRequest,fn as jsonErrorHandler,Li as makeAcceptWebSocket,q as makeAddressTester,gn as makeGetClient,Oe as makeMemo,Je as makeNegotiator,wn as makeTempFileStorage,Zi as makeWebSocketFallbackTokenFetcher,Ge as negotiateEncoding,Gi as nextWebSocketMessage,H as parseAddress,yn as proxy,$e as readHTTPDateSeconds,xe as readHTTPInteger,ke as readHTTPKeyValues,Se as readHTTPQualityValues,Te as readHTTPUnquotedCommaSeparated,Qe as readMimeTypes,Nn as registerCharset,en as registerMime,On as registerUTF32,En as removeForwarded,_n as replaceForwarded,Dt as requestHandler,Be as requireAuthScope,Me as requireBearerAuth,Ke as resetMime,Mt as restoreAbsolutePath,Tn as sanitiseAndAppendForwarded,Ti as sendCSVStream,Oi as sendFile,Ri as sendJSON,Pi as sendJSONStream,Ai as sendRanges,Hi as setDefaultCacheHeaders,Pe as setProperty,ft as setSoftCloseHandler,xn as simpleAppendForwarded,$i as simplifyRange,ae as toListeners,Ht as typedErrorHandler,Bt as upgradeHandler};
|