recker 1.0.2-0 → 1.0.4
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/LICENSE +0 -2
- package/README.md +121 -72
- package/dist/cache/memory-storage.d.ts.map +1 -1
- package/dist/cache/memory-storage.js +7 -1
- package/dist/constants/http-status.d.ts +74 -0
- package/dist/constants/http-status.d.ts.map +1 -0
- package/dist/constants/http-status.js +156 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -6
- package/dist/cookies/memory-cookie-jar.d.ts +31 -0
- package/dist/cookies/memory-cookie-jar.d.ts.map +1 -0
- package/dist/cookies/memory-cookie-jar.js +210 -0
- package/dist/core/client.d.ts +9 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +252 -53
- package/dist/core/errors.d.ts +18 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +66 -5
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/request-promise.d.ts.map +1 -1
- package/dist/core/request-promise.js +8 -2
- package/dist/core/request.d.ts +7 -1
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/request.js +32 -0
- package/dist/core/response.d.ts +2 -0
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +44 -19
- package/dist/events/request-events.d.ts +48 -0
- package/dist/events/request-events.d.ts.map +1 -0
- package/dist/events/request-events.js +85 -0
- package/dist/index.d.ts +28 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +16 -5
- package/dist/mcp/contract.d.ts +77 -0
- package/dist/mcp/contract.d.ts.map +1 -0
- package/dist/mcp/contract.js +278 -0
- package/dist/mcp/types.d.ts +1 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/plugins/auth.d.ts +45 -0
- package/dist/plugins/auth.d.ts.map +1 -0
- package/dist/plugins/auth.js +268 -0
- package/dist/plugins/cache.d.ts +7 -1
- package/dist/plugins/cache.d.ts.map +1 -1
- package/dist/plugins/cache.js +470 -49
- package/dist/plugins/circuit-breaker.js +1 -1
- package/dist/plugins/compression.d.ts.map +1 -1
- package/dist/plugins/compression.js +3 -3
- package/dist/plugins/dedup.d.ts.map +1 -1
- package/dist/plugins/dedup.js +2 -1
- package/dist/plugins/graphql.d.ts +4 -3
- package/dist/plugins/graphql.d.ts.map +1 -1
- package/dist/plugins/graphql.js +24 -5
- package/dist/plugins/grpc-web.d.ts +80 -0
- package/dist/plugins/grpc-web.d.ts.map +1 -0
- package/dist/plugins/grpc-web.js +261 -0
- package/dist/plugins/har-player.d.ts.map +1 -1
- package/dist/plugins/har-player.js +11 -2
- package/dist/plugins/hls.d.ts +33 -0
- package/dist/plugins/hls.d.ts.map +1 -0
- package/dist/plugins/hls.js +225 -0
- package/dist/plugins/http2-push.d.ts +64 -0
- package/dist/plugins/http2-push.d.ts.map +1 -0
- package/dist/plugins/http2-push.js +274 -0
- package/dist/plugins/http3.d.ts +76 -0
- package/dist/plugins/http3.d.ts.map +1 -0
- package/dist/plugins/http3.js +231 -0
- package/dist/plugins/interface-rotator.d.ts +10 -0
- package/dist/plugins/interface-rotator.d.ts.map +1 -0
- package/dist/plugins/interface-rotator.js +57 -0
- package/dist/plugins/jsonrpc.d.ts +76 -0
- package/dist/plugins/jsonrpc.d.ts.map +1 -0
- package/dist/plugins/jsonrpc.js +143 -0
- package/dist/plugins/logger.d.ts +8 -5
- package/dist/plugins/logger.d.ts.map +1 -1
- package/dist/plugins/logger.js +66 -30
- package/dist/plugins/odata.d.ts +182 -0
- package/dist/plugins/odata.d.ts.map +1 -0
- package/dist/plugins/odata.js +561 -0
- package/dist/plugins/retry.d.ts +1 -0
- package/dist/plugins/retry.d.ts.map +1 -1
- package/dist/plugins/retry.js +26 -2
- package/dist/plugins/scrape.d.ts +22 -0
- package/dist/plugins/scrape.d.ts.map +1 -0
- package/dist/plugins/scrape.js +87 -0
- package/dist/plugins/soap.d.ts +73 -0
- package/dist/plugins/soap.d.ts.map +1 -0
- package/dist/plugins/soap.js +347 -0
- package/dist/plugins/user-agent.d.ts +8 -0
- package/dist/plugins/user-agent.d.ts.map +1 -0
- package/dist/plugins/user-agent.js +46 -0
- package/dist/plugins/xml.d.ts +10 -0
- package/dist/plugins/xml.d.ts.map +1 -0
- package/dist/plugins/xml.js +194 -0
- package/dist/presets/anthropic.d.ts +7 -0
- package/dist/presets/anthropic.d.ts.map +1 -0
- package/dist/presets/anthropic.js +17 -0
- package/dist/presets/azure-openai.d.ts +9 -0
- package/dist/presets/azure-openai.d.ts.map +1 -0
- package/dist/presets/azure-openai.js +25 -0
- package/dist/presets/cloudflare.d.ts +13 -0
- package/dist/presets/cloudflare.d.ts.map +1 -0
- package/dist/presets/cloudflare.js +39 -0
- package/dist/presets/cohere.d.ts +6 -0
- package/dist/presets/cohere.d.ts.map +1 -0
- package/dist/presets/cohere.js +16 -0
- package/dist/presets/deepseek.d.ts +6 -0
- package/dist/presets/deepseek.d.ts.map +1 -0
- package/dist/presets/deepseek.js +16 -0
- package/dist/presets/digitalocean.d.ts +6 -0
- package/dist/presets/digitalocean.d.ts.map +1 -0
- package/dist/presets/digitalocean.js +16 -0
- package/dist/presets/discord.d.ts +7 -0
- package/dist/presets/discord.d.ts.map +1 -0
- package/dist/presets/discord.js +17 -0
- package/dist/presets/fireworks.d.ts +6 -0
- package/dist/presets/fireworks.d.ts.map +1 -0
- package/dist/presets/fireworks.js +16 -0
- package/dist/presets/gemini.d.ts +6 -0
- package/dist/presets/gemini.d.ts.map +1 -0
- package/dist/presets/gemini.js +16 -0
- package/dist/presets/github.d.ts +7 -0
- package/dist/presets/github.d.ts.map +1 -0
- package/dist/presets/github.js +17 -0
- package/dist/presets/gitlab.d.ts +7 -0
- package/dist/presets/gitlab.d.ts.map +1 -0
- package/dist/presets/gitlab.js +16 -0
- package/dist/presets/groq.d.ts +6 -0
- package/dist/presets/groq.d.ts.map +1 -0
- package/dist/presets/groq.js +16 -0
- package/dist/presets/huggingface.d.ts +6 -0
- package/dist/presets/huggingface.d.ts.map +1 -0
- package/dist/presets/huggingface.js +16 -0
- package/dist/presets/index.d.ts +28 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +27 -0
- package/dist/presets/linear.d.ts +6 -0
- package/dist/presets/linear.d.ts.map +1 -0
- package/dist/presets/linear.js +16 -0
- package/dist/presets/mistral.d.ts +6 -0
- package/dist/presets/mistral.d.ts.map +1 -0
- package/dist/presets/mistral.js +16 -0
- package/dist/presets/notion.d.ts +7 -0
- package/dist/presets/notion.d.ts.map +1 -0
- package/dist/presets/notion.js +17 -0
- package/dist/presets/openai.d.ts +8 -0
- package/dist/presets/openai.d.ts.map +1 -0
- package/dist/presets/openai.js +23 -0
- package/dist/presets/perplexity.d.ts +6 -0
- package/dist/presets/perplexity.d.ts.map +1 -0
- package/dist/presets/perplexity.js +16 -0
- package/dist/presets/registry.d.ts +20 -0
- package/dist/presets/registry.d.ts.map +1 -0
- package/dist/presets/registry.js +311 -0
- package/dist/presets/replicate.d.ts +6 -0
- package/dist/presets/replicate.d.ts.map +1 -0
- package/dist/presets/replicate.js +16 -0
- package/dist/presets/slack.d.ts +6 -0
- package/dist/presets/slack.d.ts.map +1 -0
- package/dist/presets/slack.js +16 -0
- package/dist/presets/stripe.d.ts +8 -0
- package/dist/presets/stripe.d.ts.map +1 -0
- package/dist/presets/stripe.js +23 -0
- package/dist/presets/supabase.d.ts +7 -0
- package/dist/presets/supabase.d.ts.map +1 -0
- package/dist/presets/supabase.js +18 -0
- package/dist/presets/together.d.ts +6 -0
- package/dist/presets/together.d.ts.map +1 -0
- package/dist/presets/together.js +16 -0
- package/dist/presets/twilio.d.ts +7 -0
- package/dist/presets/twilio.d.ts.map +1 -0
- package/dist/presets/twilio.js +17 -0
- package/dist/presets/vercel.d.ts +7 -0
- package/dist/presets/vercel.d.ts.map +1 -0
- package/dist/presets/vercel.js +23 -0
- package/dist/presets/xai.d.ts +7 -0
- package/dist/presets/xai.d.ts.map +1 -0
- package/dist/presets/xai.js +17 -0
- package/dist/protocols/ftp.d.ts +63 -0
- package/dist/protocols/ftp.d.ts.map +1 -0
- package/dist/protocols/ftp.js +388 -0
- package/dist/protocols/index.d.ts +4 -0
- package/dist/protocols/index.d.ts.map +1 -0
- package/dist/protocols/index.js +3 -0
- package/dist/protocols/sftp.d.ts +65 -0
- package/dist/protocols/sftp.d.ts.map +1 -0
- package/dist/protocols/sftp.js +346 -0
- package/dist/protocols/telnet.d.ts +50 -0
- package/dist/protocols/telnet.d.ts.map +1 -0
- package/dist/protocols/telnet.js +139 -0
- package/dist/runner/request-runner.d.ts.map +1 -1
- package/dist/runner/request-runner.js +1 -0
- package/dist/scrape/document.d.ts +44 -0
- package/dist/scrape/document.d.ts.map +1 -0
- package/dist/scrape/document.js +198 -0
- package/dist/scrape/element.d.ts +50 -0
- package/dist/scrape/element.d.ts.map +1 -0
- package/dist/scrape/element.js +176 -0
- package/dist/scrape/extractors.d.ts +17 -0
- package/dist/scrape/extractors.d.ts.map +1 -0
- package/dist/scrape/extractors.js +356 -0
- package/dist/scrape/index.d.ts +5 -0
- package/dist/scrape/index.d.ts.map +1 -0
- package/dist/scrape/index.js +3 -0
- package/dist/scrape/types.d.ts +108 -0
- package/dist/scrape/types.d.ts.map +1 -0
- package/dist/scrape/types.js +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +1 -0
- package/dist/testing/mock.d.ts +58 -0
- package/dist/testing/mock.d.ts.map +1 -0
- package/dist/testing/mock.js +252 -0
- package/dist/transport/fetch.d.ts.map +1 -1
- package/dist/transport/fetch.js +12 -4
- package/dist/transport/undici.d.ts +17 -1
- package/dist/transport/undici.d.ts.map +1 -1
- package/dist/transport/undici.js +708 -47
- package/dist/types/index.d.ts +111 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/logger.d.ts +17 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/logger.js +66 -0
- package/dist/utils/agent-manager.d.ts.map +1 -1
- package/dist/utils/agent-manager.js +20 -4
- package/dist/utils/body.d.ts.map +1 -1
- package/dist/utils/body.js +14 -2
- package/dist/utils/charset.d.ts +16 -0
- package/dist/utils/charset.d.ts.map +1 -0
- package/dist/utils/charset.js +169 -0
- package/dist/utils/client-pool.d.ts +21 -0
- package/dist/utils/client-pool.d.ts.map +1 -0
- package/dist/utils/client-pool.js +49 -0
- package/dist/utils/concurrency.d.ts.map +1 -1
- package/dist/utils/concurrency.js +8 -4
- package/dist/utils/dns-toolkit.d.ts +13 -0
- package/dist/utils/dns-toolkit.d.ts.map +1 -0
- package/dist/utils/dns-toolkit.js +48 -0
- package/dist/utils/doh.d.ts.map +1 -1
- package/dist/utils/doh.js +16 -3
- package/dist/utils/download.d.ts +15 -0
- package/dist/utils/download.d.ts.map +1 -0
- package/dist/utils/download.js +44 -0
- package/dist/utils/env-proxy.d.ts +13 -0
- package/dist/utils/env-proxy.d.ts.map +1 -0
- package/dist/utils/env-proxy.js +105 -0
- package/dist/utils/header-parser.d.ts +15 -1
- package/dist/utils/header-parser.d.ts.map +1 -1
- package/dist/utils/header-parser.js +161 -1
- package/dist/utils/link-header.d.ts +70 -0
- package/dist/utils/link-header.d.ts.map +1 -0
- package/dist/utils/link-header.js +190 -0
- package/dist/utils/progress.d.ts +7 -2
- package/dist/utils/progress.d.ts.map +1 -1
- package/dist/utils/progress.js +48 -15
- package/dist/utils/rdap.d.ts +17 -0
- package/dist/utils/rdap.d.ts.map +1 -0
- package/dist/utils/rdap.js +32 -0
- package/dist/utils/request-pool.d.ts.map +1 -1
- package/dist/utils/request-pool.js +4 -3
- package/dist/utils/sse.d.ts.map +1 -1
- package/dist/utils/sse.js +8 -2
- package/dist/utils/status-codes.d.ts +84 -0
- package/dist/utils/status-codes.d.ts.map +1 -0
- package/dist/utils/status-codes.js +204 -0
- package/dist/utils/streaming.d.ts.map +1 -1
- package/dist/utils/streaming.js +1 -0
- package/dist/utils/tls-inspector.d.ts +21 -0
- package/dist/utils/tls-inspector.d.ts.map +1 -0
- package/dist/utils/tls-inspector.js +39 -0
- package/dist/utils/try-fn.d.ts.map +1 -1
- package/dist/utils/try-fn.js +11 -5
- package/dist/utils/upload.d.ts +1 -0
- package/dist/utils/upload.d.ts.map +1 -1
- package/dist/utils/upload.js +20 -3
- package/dist/utils/user-agent.d.ts +9 -9
- package/dist/utils/user-agent.js +9 -9
- package/dist/utils/whois.d.ts.map +1 -1
- package/dist/utils/whois.js +11 -2
- package/dist/websocket/client.d.ts +29 -1
- package/dist/websocket/client.d.ts.map +1 -1
- package/dist/websocket/client.js +145 -13
- package/package.json +45 -8
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export interface Link {
|
|
2
|
+
uri: string;
|
|
3
|
+
rel?: string;
|
|
4
|
+
anchor?: string;
|
|
5
|
+
type?: string;
|
|
6
|
+
media?: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
hreflang?: string;
|
|
9
|
+
[key: string]: string | undefined;
|
|
10
|
+
}
|
|
11
|
+
export interface LinkCollection {
|
|
12
|
+
all: Link[];
|
|
13
|
+
[rel: string]: Link | Link[] | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare function parseLink(headerValue: string): LinkCollection;
|
|
16
|
+
export declare const LinkRel: {
|
|
17
|
+
readonly NEXT: "next";
|
|
18
|
+
readonly PREV: "prev";
|
|
19
|
+
readonly PREVIOUS: "previous";
|
|
20
|
+
readonly FIRST: "first";
|
|
21
|
+
readonly LAST: "last";
|
|
22
|
+
readonly ALTERNATE: "alternate";
|
|
23
|
+
readonly CANONICAL: "canonical";
|
|
24
|
+
readonly AUTHOR: "author";
|
|
25
|
+
readonly LICENSE: "license";
|
|
26
|
+
readonly STYLESHEET: "stylesheet";
|
|
27
|
+
readonly ICON: "icon";
|
|
28
|
+
readonly PRELOAD: "preload";
|
|
29
|
+
readonly PREFETCH: "prefetch";
|
|
30
|
+
readonly PRECONNECT: "preconnect";
|
|
31
|
+
readonly DNS_PREFETCH: "dns-prefetch";
|
|
32
|
+
readonly PRERENDER: "prerender";
|
|
33
|
+
readonly SELF: "self";
|
|
34
|
+
readonly EDIT: "edit";
|
|
35
|
+
readonly COLLECTION: "collection";
|
|
36
|
+
readonly ITEM: "item";
|
|
37
|
+
readonly HELP: "help";
|
|
38
|
+
readonly DESCRIBEDBY: "describedby";
|
|
39
|
+
readonly UP: "up";
|
|
40
|
+
readonly RELATED: "related";
|
|
41
|
+
readonly REPLIES: "replies";
|
|
42
|
+
readonly VIA: "via";
|
|
43
|
+
};
|
|
44
|
+
export declare class LinkHeaderParser {
|
|
45
|
+
private links;
|
|
46
|
+
constructor(headerValue: string);
|
|
47
|
+
getAll(): Link[];
|
|
48
|
+
getRel(rel: string): Link | Link[] | undefined;
|
|
49
|
+
getFirst(rel: string): Link | undefined;
|
|
50
|
+
has(rel: string): boolean;
|
|
51
|
+
getPagination(): {
|
|
52
|
+
next?: string;
|
|
53
|
+
prev?: string;
|
|
54
|
+
first?: string;
|
|
55
|
+
last?: string;
|
|
56
|
+
};
|
|
57
|
+
hasNext(): boolean;
|
|
58
|
+
hasPrev(): boolean;
|
|
59
|
+
getCanonical(): string | undefined;
|
|
60
|
+
getAlternates(): Link[];
|
|
61
|
+
getResourceHints(): {
|
|
62
|
+
preload: Link[];
|
|
63
|
+
prefetch: Link[];
|
|
64
|
+
preconnect: Link[];
|
|
65
|
+
dnsPrefetch: Link[];
|
|
66
|
+
};
|
|
67
|
+
toJSON(): LinkCollection;
|
|
68
|
+
}
|
|
69
|
+
export declare function parseLinkHeader(headers: Headers): LinkHeaderParser | null;
|
|
70
|
+
//# sourceMappingURL=link-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-header.d.ts","sourceRoot":"","sources":["../../src/utils/link-header.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,IAAI;IAEnB,GAAG,EAAE,MAAM,CAAC;IAEZ,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAKD,MAAM,WAAW,cAAc;IAE7B,GAAG,EAAE,IAAI,EAAE,CAAC;IAEZ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC;CAC1C;AAcD,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAqC7D;AAiGD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCV,CAAC;AAKX,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiB;gBAElB,WAAW,EAAE,MAAM;IAO/B,MAAM,IAAI,IAAI,EAAE;IAOhB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,SAAS;IAO9C,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IASvC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAOzB,aAAa,IAAI;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAYD,OAAO,IAAI,OAAO;IAOlB,OAAO,IAAI,OAAO;IAOlB,YAAY,IAAI,MAAM,GAAG,SAAS;IAOlC,aAAa,IAAI,IAAI,EAAE;IASvB,gBAAgB,IAAI;QAClB,OAAO,EAAE,IAAI,EAAE,CAAC;QAChB,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjB,UAAU,EAAE,IAAI,EAAE,CAAC;QACnB,WAAW,EAAE,IAAI,EAAE,CAAC;KACrB;IAkBD,MAAM,IAAI,cAAc;CAGzB;AAKD,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAIzE"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
export function parseLink(headerValue) {
|
|
2
|
+
if (!headerValue || typeof headerValue !== 'string') {
|
|
3
|
+
return { all: [] };
|
|
4
|
+
}
|
|
5
|
+
const links = [];
|
|
6
|
+
const collection = { all: links };
|
|
7
|
+
const linkStrings = splitLinkHeader(headerValue);
|
|
8
|
+
for (const linkString of linkStrings) {
|
|
9
|
+
const link = parseSingleLink(linkString.trim());
|
|
10
|
+
if (link) {
|
|
11
|
+
links.push(link);
|
|
12
|
+
if (link.rel) {
|
|
13
|
+
const relTypes = link.rel.split(/\s+/);
|
|
14
|
+
for (const rel of relTypes) {
|
|
15
|
+
const existing = collection[rel];
|
|
16
|
+
if (existing) {
|
|
17
|
+
if (Array.isArray(existing)) {
|
|
18
|
+
existing.push(link);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
collection[rel] = [existing, link];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
collection[rel] = link;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return collection;
|
|
32
|
+
}
|
|
33
|
+
function splitLinkHeader(header) {
|
|
34
|
+
const result = [];
|
|
35
|
+
let current = '';
|
|
36
|
+
let inBrackets = false;
|
|
37
|
+
let inQuotes = false;
|
|
38
|
+
for (let i = 0; i < header.length; i++) {
|
|
39
|
+
const char = header[i];
|
|
40
|
+
const prevChar = i > 0 ? header[i - 1] : '';
|
|
41
|
+
if (char === '<' && !inQuotes) {
|
|
42
|
+
inBrackets = true;
|
|
43
|
+
}
|
|
44
|
+
else if (char === '>' && !inQuotes) {
|
|
45
|
+
inBrackets = false;
|
|
46
|
+
}
|
|
47
|
+
else if (char === '"' && prevChar !== '\\') {
|
|
48
|
+
inQuotes = !inQuotes;
|
|
49
|
+
}
|
|
50
|
+
else if (char === ',' && !inBrackets && !inQuotes) {
|
|
51
|
+
result.push(current.trim());
|
|
52
|
+
current = '';
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
current += char;
|
|
56
|
+
}
|
|
57
|
+
if (current.trim()) {
|
|
58
|
+
result.push(current.trim());
|
|
59
|
+
}
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
function parseSingleLink(linkString) {
|
|
63
|
+
const uriMatch = linkString.match(/^<([^>]+)>/);
|
|
64
|
+
if (!uriMatch) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const uri = uriMatch[1];
|
|
68
|
+
const link = { uri };
|
|
69
|
+
const paramsString = linkString.slice(uriMatch[0].length);
|
|
70
|
+
const params = parseParameters(paramsString);
|
|
71
|
+
for (const [key, value] of Object.entries(params)) {
|
|
72
|
+
link[key] = value;
|
|
73
|
+
}
|
|
74
|
+
return link;
|
|
75
|
+
}
|
|
76
|
+
function parseParameters(paramsString) {
|
|
77
|
+
const params = {};
|
|
78
|
+
const paramStrings = paramsString.split(/;/).filter(s => s.trim());
|
|
79
|
+
for (const paramString of paramStrings) {
|
|
80
|
+
const equalIndex = paramString.indexOf('=');
|
|
81
|
+
if (equalIndex === -1)
|
|
82
|
+
continue;
|
|
83
|
+
const key = paramString.slice(0, equalIndex).trim();
|
|
84
|
+
let value = paramString.slice(equalIndex + 1).trim();
|
|
85
|
+
if (value.startsWith('"') && value.endsWith('"')) {
|
|
86
|
+
value = value.slice(1, -1);
|
|
87
|
+
}
|
|
88
|
+
else if (value.startsWith("'") && value.endsWith("'")) {
|
|
89
|
+
value = value.slice(1, -1);
|
|
90
|
+
}
|
|
91
|
+
value = value.replace(/\\(.)/g, '$1');
|
|
92
|
+
params[key] = value;
|
|
93
|
+
}
|
|
94
|
+
return params;
|
|
95
|
+
}
|
|
96
|
+
export const LinkRel = {
|
|
97
|
+
NEXT: 'next',
|
|
98
|
+
PREV: 'prev',
|
|
99
|
+
PREVIOUS: 'previous',
|
|
100
|
+
FIRST: 'first',
|
|
101
|
+
LAST: 'last',
|
|
102
|
+
ALTERNATE: 'alternate',
|
|
103
|
+
CANONICAL: 'canonical',
|
|
104
|
+
AUTHOR: 'author',
|
|
105
|
+
LICENSE: 'license',
|
|
106
|
+
STYLESHEET: 'stylesheet',
|
|
107
|
+
ICON: 'icon',
|
|
108
|
+
PRELOAD: 'preload',
|
|
109
|
+
PREFETCH: 'prefetch',
|
|
110
|
+
PRECONNECT: 'preconnect',
|
|
111
|
+
DNS_PREFETCH: 'dns-prefetch',
|
|
112
|
+
PRERENDER: 'prerender',
|
|
113
|
+
SELF: 'self',
|
|
114
|
+
EDIT: 'edit',
|
|
115
|
+
COLLECTION: 'collection',
|
|
116
|
+
ITEM: 'item',
|
|
117
|
+
HELP: 'help',
|
|
118
|
+
DESCRIBEDBY: 'describedby',
|
|
119
|
+
UP: 'up',
|
|
120
|
+
RELATED: 'related',
|
|
121
|
+
REPLIES: 'replies',
|
|
122
|
+
VIA: 'via',
|
|
123
|
+
};
|
|
124
|
+
export class LinkHeaderParser {
|
|
125
|
+
links;
|
|
126
|
+
constructor(headerValue) {
|
|
127
|
+
this.links = parseLink(headerValue);
|
|
128
|
+
}
|
|
129
|
+
getAll() {
|
|
130
|
+
return this.links.all;
|
|
131
|
+
}
|
|
132
|
+
getRel(rel) {
|
|
133
|
+
return this.links[rel];
|
|
134
|
+
}
|
|
135
|
+
getFirst(rel) {
|
|
136
|
+
const links = this.links[rel];
|
|
137
|
+
if (!links)
|
|
138
|
+
return undefined;
|
|
139
|
+
return Array.isArray(links) ? links[0] : links;
|
|
140
|
+
}
|
|
141
|
+
has(rel) {
|
|
142
|
+
return rel in this.links;
|
|
143
|
+
}
|
|
144
|
+
getPagination() {
|
|
145
|
+
return {
|
|
146
|
+
next: this.getFirst(LinkRel.NEXT)?.uri,
|
|
147
|
+
prev: this.getFirst(LinkRel.PREV)?.uri || this.getFirst(LinkRel.PREVIOUS)?.uri,
|
|
148
|
+
first: this.getFirst(LinkRel.FIRST)?.uri,
|
|
149
|
+
last: this.getFirst(LinkRel.LAST)?.uri,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
hasNext() {
|
|
153
|
+
return this.has(LinkRel.NEXT);
|
|
154
|
+
}
|
|
155
|
+
hasPrev() {
|
|
156
|
+
return this.has(LinkRel.PREV) || this.has(LinkRel.PREVIOUS);
|
|
157
|
+
}
|
|
158
|
+
getCanonical() {
|
|
159
|
+
return this.getFirst(LinkRel.CANONICAL)?.uri;
|
|
160
|
+
}
|
|
161
|
+
getAlternates() {
|
|
162
|
+
const alts = this.getRel(LinkRel.ALTERNATE);
|
|
163
|
+
if (!alts)
|
|
164
|
+
return [];
|
|
165
|
+
return Array.isArray(alts) ? alts : [alts];
|
|
166
|
+
}
|
|
167
|
+
getResourceHints() {
|
|
168
|
+
const getLinks = (rel) => {
|
|
169
|
+
const links = this.getRel(rel);
|
|
170
|
+
if (!links)
|
|
171
|
+
return [];
|
|
172
|
+
return Array.isArray(links) ? links : [links];
|
|
173
|
+
};
|
|
174
|
+
return {
|
|
175
|
+
preload: getLinks(LinkRel.PRELOAD),
|
|
176
|
+
prefetch: getLinks(LinkRel.PREFETCH),
|
|
177
|
+
preconnect: getLinks(LinkRel.PRECONNECT),
|
|
178
|
+
dnsPrefetch: getLinks(LinkRel.DNS_PREFETCH),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
toJSON() {
|
|
182
|
+
return this.links;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export function parseLinkHeader(headers) {
|
|
186
|
+
const linkHeader = headers.get('Link');
|
|
187
|
+
if (!linkHeader)
|
|
188
|
+
return null;
|
|
189
|
+
return new LinkHeaderParser(linkHeader);
|
|
190
|
+
}
|
package/dist/utils/progress.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { ProgressEvent, ProgressCallback } from '../types/index.js';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export interface ProgressStreamOptions {
|
|
3
|
+
total?: number;
|
|
4
|
+
direction?: 'upload' | 'download';
|
|
5
|
+
throttleMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function createProgressStream(stream: ReadableStream<Uint8Array>, onProgress: ProgressCallback, optionsOrTotal?: number | ProgressStreamOptions): ReadableStream<Uint8Array>;
|
|
8
|
+
export declare function calculateProgress(loaded: number, total?: number, direction?: 'upload' | 'download'): ProgressEvent;
|
|
4
9
|
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IAEpC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAElC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,EAClC,UAAU,EAAE,gBAAgB,EAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,qBAAqB,GAC9C,cAAc,CAAC,UAAU,CAAC,CAgG5B;AAKD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,QAAQ,GAAG,UAAU,GAChC,aAAa,CAaf"}
|
package/dist/utils/progress.js
CHANGED
|
@@ -1,31 +1,62 @@
|
|
|
1
|
-
export function createProgressStream(stream, onProgress,
|
|
1
|
+
export function createProgressStream(stream, onProgress, optionsOrTotal) {
|
|
2
|
+
const options = typeof optionsOrTotal === 'number'
|
|
3
|
+
? { total: optionsOrTotal }
|
|
4
|
+
: optionsOrTotal || {};
|
|
5
|
+
const { total, direction, throttleMs = 100 } = options;
|
|
2
6
|
let loaded = 0;
|
|
3
7
|
let startTime = Date.now();
|
|
4
|
-
let lastUpdate =
|
|
8
|
+
let lastUpdate = 0;
|
|
9
|
+
let lastLoaded = 0;
|
|
10
|
+
let lastRateUpdate = startTime;
|
|
11
|
+
let smoothedRate = 0;
|
|
12
|
+
const rateSmoothingFactor = 0.3;
|
|
13
|
+
const emitProgress = (now, isFinal) => {
|
|
14
|
+
const elapsed = (now - startTime) / 1000;
|
|
15
|
+
const intervalMs = now - lastRateUpdate;
|
|
16
|
+
const bytesInInterval = loaded - lastLoaded;
|
|
17
|
+
if (intervalMs > 0) {
|
|
18
|
+
const instantRate = (bytesInInterval / intervalMs) * 1000;
|
|
19
|
+
smoothedRate = smoothedRate === 0
|
|
20
|
+
? instantRate
|
|
21
|
+
: smoothedRate * (1 - rateSmoothingFactor) + instantRate * rateSmoothingFactor;
|
|
22
|
+
}
|
|
23
|
+
lastLoaded = loaded;
|
|
24
|
+
lastRateUpdate = now;
|
|
25
|
+
const rate = smoothedRate;
|
|
26
|
+
let percent;
|
|
27
|
+
if (total) {
|
|
28
|
+
percent = isFinal ? 100 : Math.min((loaded / total) * 100, 99.9);
|
|
29
|
+
}
|
|
30
|
+
const progress = {
|
|
31
|
+
loaded,
|
|
32
|
+
transferred: loaded,
|
|
33
|
+
total,
|
|
34
|
+
percent,
|
|
35
|
+
rate,
|
|
36
|
+
estimated: total && rate > 0 ? ((total - loaded) / rate) * 1000 : undefined,
|
|
37
|
+
direction,
|
|
38
|
+
};
|
|
39
|
+
onProgress(progress);
|
|
40
|
+
lastUpdate = now;
|
|
41
|
+
};
|
|
5
42
|
return new ReadableStream({
|
|
6
43
|
async start(controller) {
|
|
7
44
|
const reader = stream.getReader();
|
|
8
45
|
try {
|
|
46
|
+
emitProgress(Date.now(), false);
|
|
9
47
|
while (true) {
|
|
10
48
|
const { done, value } = await reader.read();
|
|
11
49
|
if (done) {
|
|
50
|
+
emitProgress(Date.now(), true);
|
|
12
51
|
controller.close();
|
|
13
52
|
break;
|
|
14
53
|
}
|
|
15
54
|
loaded += value.byteLength;
|
|
16
55
|
const now = Date.now();
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
loaded,
|
|
22
|
-
total,
|
|
23
|
-
percent: total ? (loaded / total) * 100 : undefined,
|
|
24
|
-
rate,
|
|
25
|
-
estimated: total && rate > 0 ? ((total - loaded) / rate) * 1000 : undefined,
|
|
26
|
-
};
|
|
27
|
-
onProgress(progress);
|
|
28
|
-
lastUpdate = now;
|
|
56
|
+
const shouldUpdate = now - lastUpdate >= throttleMs ||
|
|
57
|
+
(total && loaded === total);
|
|
58
|
+
if (shouldUpdate) {
|
|
59
|
+
emitProgress(now, false);
|
|
29
60
|
}
|
|
30
61
|
controller.enqueue(value);
|
|
31
62
|
}
|
|
@@ -37,10 +68,12 @@ export function createProgressStream(stream, onProgress, total) {
|
|
|
37
68
|
},
|
|
38
69
|
});
|
|
39
70
|
}
|
|
40
|
-
export function calculateProgress(loaded, total) {
|
|
71
|
+
export function calculateProgress(loaded, total, direction) {
|
|
41
72
|
const progress = {
|
|
42
73
|
loaded,
|
|
74
|
+
transferred: loaded,
|
|
43
75
|
total,
|
|
76
|
+
direction,
|
|
44
77
|
};
|
|
45
78
|
if (total && total > 0) {
|
|
46
79
|
progress.percent = (loaded / total) * 100;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Client } from '../core/client.js';
|
|
2
|
+
export interface RDAPResult {
|
|
3
|
+
handle?: string;
|
|
4
|
+
status?: string[];
|
|
5
|
+
events?: Array<{
|
|
6
|
+
eventAction: string;
|
|
7
|
+
eventDate: string;
|
|
8
|
+
}>;
|
|
9
|
+
entities?: Array<{
|
|
10
|
+
handle?: string;
|
|
11
|
+
roles?: string[];
|
|
12
|
+
vcardArray?: any[];
|
|
13
|
+
}>;
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
export declare function rdap(client: Client, query: string): Promise<RDAPResult>;
|
|
17
|
+
//# sourceMappingURL=rdap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rdap.d.ts","sourceRoot":"","sources":["../../src/utils/rdap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAa3C,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiC7E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const RDAP_SERVERS = {
|
|
2
|
+
'com': 'https://rdap.verisign.com/com/v1/',
|
|
3
|
+
'net': 'https://rdap.verisign.com/net/v1/',
|
|
4
|
+
'org': 'https://rdap.publicinterestregistry.net/rdap/org/',
|
|
5
|
+
'io': 'https://rdap.nic.io/domain/',
|
|
6
|
+
'br': 'https://rdap.registro.br/',
|
|
7
|
+
'default': 'https://rdap.org/domain/'
|
|
8
|
+
};
|
|
9
|
+
export async function rdap(client, query) {
|
|
10
|
+
const isIp = /^\d+\.\d+\.\d+\.\d+$/.test(query);
|
|
11
|
+
let url;
|
|
12
|
+
if (isIp) {
|
|
13
|
+
url = `https://rdap.arin.net/registry/ip/${query}`;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
const tld = query.split('.').pop()?.toLowerCase() || '';
|
|
17
|
+
const base = RDAP_SERVERS[tld] || RDAP_SERVERS['default'];
|
|
18
|
+
url = base.endsWith('/') ? `${base}domain/${query}` : `${base}/${query}`;
|
|
19
|
+
if (base.includes('/domain/')) {
|
|
20
|
+
url = `${base}${query}`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
return await client.get(url, { followRedirects: true }).json();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (error.status === 404) {
|
|
28
|
+
throw new Error(`RDAP entry not found for ${query}`);
|
|
29
|
+
}
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-pool.d.ts","sourceRoot":"","sources":["../../src/utils/request-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA+C,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"request-pool.d.ts","sourceRoot":"","sources":["../../src/utils/request-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA+C,MAAM,mBAAmB,CAAC;AAGjG,MAAM,WAAW,kBAAkB;IAKjC,WAAW,CAAC,EAAE,MAAM,CAAC;IAKrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAI7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiBD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAE1B,OAAO,GAAE,kBAAuB;IAM5C,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAiC9D,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,SAAS;IAqBjB,OAAO,CAAC,SAAS;IAiEjB,YAAY,IAAI,UAAU;CAM3B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReckerError } from '../core/errors.js';
|
|
1
2
|
export class RequestPool {
|
|
2
3
|
concurrency;
|
|
3
4
|
requestsPerInterval;
|
|
@@ -14,14 +15,14 @@ export class RequestPool {
|
|
|
14
15
|
}
|
|
15
16
|
run(fn, signal) {
|
|
16
17
|
if (signal?.aborted) {
|
|
17
|
-
return Promise.reject(signal.reason ?? new
|
|
18
|
+
return Promise.reject(signal.reason ?? new ReckerError('Request aborted before enqueue', undefined, undefined, ['Ensure the AbortSignal is not already aborted when calling the request.', 'Remove or reset the signal before enqueueing.']));
|
|
18
19
|
}
|
|
19
20
|
return new Promise((resolve, reject) => {
|
|
20
21
|
const request = { fn, resolve, reject, signal };
|
|
21
22
|
if (signal) {
|
|
22
23
|
const onAbort = () => {
|
|
23
24
|
this._removeFromQueue(request);
|
|
24
|
-
reject(signal.reason ?? new
|
|
25
|
+
reject(signal.reason ?? new ReckerError('Request aborted while queued', undefined, undefined, ['Avoid aborting immediately after queuing.', 'Increase timeouts or adjust rate limits if cancellations are unintended.']));
|
|
25
26
|
this._schedule();
|
|
26
27
|
};
|
|
27
28
|
signal.addEventListener('abort', onAbort, { once: true });
|
|
@@ -62,7 +63,7 @@ export class RequestPool {
|
|
|
62
63
|
const request = this.queue.shift();
|
|
63
64
|
if (request.signal?.aborted) {
|
|
64
65
|
request.abortCleanup?.();
|
|
65
|
-
request.reject(request.signal.reason ?? new
|
|
66
|
+
request.reject(request.signal.reason ?? new ReckerError('Request aborted while queued', undefined, undefined, ['Avoid aborting immediately after queuing.', 'Increase timeouts or adjust rate limits if cancellations are unintended.']));
|
|
66
67
|
continue;
|
|
67
68
|
}
|
|
68
69
|
this.active++;
|
package/dist/utils/sse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/utils/sse.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/utils/sse.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAuB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAuF5E"}
|
package/dist/utils/sse.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import { ReckerError } from '../core/errors.js';
|
|
1
2
|
export async function* parseSSE(response) {
|
|
2
|
-
if (!response.body)
|
|
3
|
-
throw new
|
|
3
|
+
if (!response.body) {
|
|
4
|
+
throw new ReckerError('Response body is empty; cannot parse SSE stream.', undefined, undefined, [
|
|
5
|
+
'Ensure the server is sending an SSE stream with a response body.',
|
|
6
|
+
'Check that the request was not a HEAD/204 response.',
|
|
7
|
+
'Verify connection was not closed before the body was received.'
|
|
8
|
+
]);
|
|
9
|
+
}
|
|
4
10
|
const reader = response.body.getReader();
|
|
5
11
|
const decoder = new TextDecoder();
|
|
6
12
|
let buffer = '';
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export declare enum StatusCode {
|
|
2
|
+
CONTINUE = 100,
|
|
3
|
+
SWITCHING_PROTOCOLS = 101,
|
|
4
|
+
PROCESSING = 102,
|
|
5
|
+
EARLY_HINTS = 103,
|
|
6
|
+
OK = 200,
|
|
7
|
+
CREATED = 201,
|
|
8
|
+
ACCEPTED = 202,
|
|
9
|
+
NON_AUTHORITATIVE_INFORMATION = 203,
|
|
10
|
+
NO_CONTENT = 204,
|
|
11
|
+
RESET_CONTENT = 205,
|
|
12
|
+
PARTIAL_CONTENT = 206,
|
|
13
|
+
MULTI_STATUS = 207,
|
|
14
|
+
ALREADY_REPORTED = 208,
|
|
15
|
+
IM_USED = 226,
|
|
16
|
+
MULTIPLE_CHOICES = 300,
|
|
17
|
+
MOVED_PERMANENTLY = 301,
|
|
18
|
+
FOUND = 302,
|
|
19
|
+
SEE_OTHER = 303,
|
|
20
|
+
NOT_MODIFIED = 304,
|
|
21
|
+
USE_PROXY = 305,
|
|
22
|
+
TEMPORARY_REDIRECT = 307,
|
|
23
|
+
PERMANENT_REDIRECT = 308,
|
|
24
|
+
BAD_REQUEST = 400,
|
|
25
|
+
UNAUTHORIZED = 401,
|
|
26
|
+
PAYMENT_REQUIRED = 402,
|
|
27
|
+
FORBIDDEN = 403,
|
|
28
|
+
NOT_FOUND = 404,
|
|
29
|
+
METHOD_NOT_ALLOWED = 405,
|
|
30
|
+
NOT_ACCEPTABLE = 406,
|
|
31
|
+
PROXY_AUTHENTICATION_REQUIRED = 407,
|
|
32
|
+
REQUEST_TIMEOUT = 408,
|
|
33
|
+
CONFLICT = 409,
|
|
34
|
+
GONE = 410,
|
|
35
|
+
LENGTH_REQUIRED = 411,
|
|
36
|
+
PRECONDITION_FAILED = 412,
|
|
37
|
+
PAYLOAD_TOO_LARGE = 413,
|
|
38
|
+
URI_TOO_LONG = 414,
|
|
39
|
+
UNSUPPORTED_MEDIA_TYPE = 415,
|
|
40
|
+
RANGE_NOT_SATISFIABLE = 416,
|
|
41
|
+
EXPECTATION_FAILED = 417,
|
|
42
|
+
IM_A_TEAPOT = 418,
|
|
43
|
+
MISDIRECTED_REQUEST = 421,
|
|
44
|
+
UNPROCESSABLE_ENTITY = 422,
|
|
45
|
+
LOCKED = 423,
|
|
46
|
+
FAILED_DEPENDENCY = 424,
|
|
47
|
+
TOO_EARLY = 425,
|
|
48
|
+
UPGRADE_REQUIRED = 426,
|
|
49
|
+
PRECONDITION_REQUIRED = 428,
|
|
50
|
+
TOO_MANY_REQUESTS = 429,
|
|
51
|
+
REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
|
|
52
|
+
UNAVAILABLE_FOR_LEGAL_REASONS = 451,
|
|
53
|
+
INTERNAL_SERVER_ERROR = 500,
|
|
54
|
+
NOT_IMPLEMENTED = 501,
|
|
55
|
+
BAD_GATEWAY = 502,
|
|
56
|
+
SERVICE_UNAVAILABLE = 503,
|
|
57
|
+
GATEWAY_TIMEOUT = 504,
|
|
58
|
+
HTTP_VERSION_NOT_SUPPORTED = 505,
|
|
59
|
+
VARIANT_ALSO_NEGOTIATES = 506,
|
|
60
|
+
INSUFFICIENT_STORAGE = 507,
|
|
61
|
+
LOOP_DETECTED = 508,
|
|
62
|
+
NOT_EXTENDED = 510,
|
|
63
|
+
NETWORK_AUTHENTICATION_REQUIRED = 511
|
|
64
|
+
}
|
|
65
|
+
export declare const STATUS_TEXT: Record<number, string>;
|
|
66
|
+
export declare const status: {
|
|
67
|
+
isInformational(code: number): boolean;
|
|
68
|
+
isSuccess(code: number): boolean;
|
|
69
|
+
isRedirect(code: number): boolean;
|
|
70
|
+
isClientError(code: number): boolean;
|
|
71
|
+
isServerError(code: number): boolean;
|
|
72
|
+
isError(code: number): boolean;
|
|
73
|
+
isOk(code: number): boolean;
|
|
74
|
+
getText(code: number): string | undefined;
|
|
75
|
+
getCategory(code: number): string;
|
|
76
|
+
};
|
|
77
|
+
export declare const statusGroups: {
|
|
78
|
+
success: readonly [StatusCode.OK, StatusCode.CREATED, StatusCode.ACCEPTED, StatusCode.NO_CONTENT];
|
|
79
|
+
redirect: readonly [StatusCode.MOVED_PERMANENTLY, StatusCode.FOUND, StatusCode.SEE_OTHER, StatusCode.TEMPORARY_REDIRECT, StatusCode.PERMANENT_REDIRECT];
|
|
80
|
+
clientError: readonly [StatusCode.BAD_REQUEST, StatusCode.UNAUTHORIZED, StatusCode.FORBIDDEN, StatusCode.NOT_FOUND, StatusCode.METHOD_NOT_ALLOWED, StatusCode.CONFLICT, StatusCode.TOO_MANY_REQUESTS];
|
|
81
|
+
serverError: readonly [StatusCode.INTERNAL_SERVER_ERROR, StatusCode.BAD_GATEWAY, StatusCode.SERVICE_UNAVAILABLE, StatusCode.GATEWAY_TIMEOUT];
|
|
82
|
+
retryable: readonly [StatusCode.TOO_MANY_REQUESTS, StatusCode.BAD_GATEWAY, StatusCode.SERVICE_UNAVAILABLE, StatusCode.GATEWAY_TIMEOUT];
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=status-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-codes.d.ts","sourceRoot":"","sources":["../../src/utils/status-codes.ts"],"names":[],"mappings":"AAUA,oBAAY,UAAU;IAEpB,QAAQ,MAAM;IACd,mBAAmB,MAAM;IACzB,UAAU,MAAM;IAChB,WAAW,MAAM;IAGjB,EAAE,MAAM;IACR,OAAO,MAAM;IACb,QAAQ,MAAM;IACd,6BAA6B,MAAM;IACnC,UAAU,MAAM;IAChB,aAAa,MAAM;IACnB,eAAe,MAAM;IACrB,YAAY,MAAM;IAClB,gBAAgB,MAAM;IACtB,OAAO,MAAM;IAGb,gBAAgB,MAAM;IACtB,iBAAiB,MAAM;IACvB,KAAK,MAAM;IACX,SAAS,MAAM;IACf,YAAY,MAAM;IAClB,SAAS,MAAM;IACf,kBAAkB,MAAM;IACxB,kBAAkB,MAAM;IAGxB,WAAW,MAAM;IACjB,YAAY,MAAM;IAClB,gBAAgB,MAAM;IACtB,SAAS,MAAM;IACf,SAAS,MAAM;IACf,kBAAkB,MAAM;IACxB,cAAc,MAAM;IACpB,6BAA6B,MAAM;IACnC,eAAe,MAAM;IACrB,QAAQ,MAAM;IACd,IAAI,MAAM;IACV,eAAe,MAAM;IACrB,mBAAmB,MAAM;IACzB,iBAAiB,MAAM;IACvB,YAAY,MAAM;IAClB,sBAAsB,MAAM;IAC5B,qBAAqB,MAAM;IAC3B,kBAAkB,MAAM;IACxB,WAAW,MAAM;IACjB,mBAAmB,MAAM;IACzB,oBAAoB,MAAM;IAC1B,MAAM,MAAM;IACZ,iBAAiB,MAAM;IACvB,SAAS,MAAM;IACf,gBAAgB,MAAM;IACtB,qBAAqB,MAAM;IAC3B,iBAAiB,MAAM;IACvB,+BAA+B,MAAM;IACrC,6BAA6B,MAAM;IAGnC,qBAAqB,MAAM;IAC3B,eAAe,MAAM;IACrB,WAAW,MAAM;IACjB,mBAAmB,MAAM;IACzB,eAAe,MAAM;IACrB,0BAA0B,MAAM;IAChC,uBAAuB,MAAM;IAC7B,oBAAoB,MAAM;IAC1B,aAAa,MAAM;IACnB,YAAY,MAAM;IAClB,+BAA+B,MAAM;CACtC;AAKD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwE9C,CAAC;AAKF,eAAO,MAAM,MAAM;0BAIK,MAAM,GAAG,OAAO;oBAOtB,MAAM,GAAG,OAAO;qBAOf,MAAM,GAAG,OAAO;wBAOb,MAAM,GAAG,OAAO;wBAOhB,MAAM,GAAG,OAAO;kBAOtB,MAAM,GAAG,OAAO;eAQnB,MAAM,GAAG,OAAO;kBAOb,MAAM,GAAG,MAAM,GAAG,SAAS;sBAOvB,MAAM,GAAG,MAAM;CAQlC,CAAC;AAKF,eAAO,MAAM,YAAY;;;;;;CAsDxB,CAAC"}
|