nlcurl 0.4.0 → 0.6.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/README.md +42 -9
- package/dist/cookies/jar.d.ts +9 -0
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +14 -6
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +0 -10
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +35 -2
- package/dist/cookies/parser.js.map +1 -1
- package/dist/cookies/psl-data.d.ts +12 -0
- package/dist/cookies/psl-data.d.ts.map +1 -0
- package/dist/cookies/psl-data.js +10166 -0
- package/dist/cookies/psl-data.js.map +1 -0
- package/dist/cookies/public-suffix.d.ts +37 -0
- package/dist/cookies/public-suffix.d.ts.map +1 -0
- package/dist/cookies/public-suffix.js +140 -0
- package/dist/cookies/public-suffix.js.map +1 -0
- package/dist/core/client.js +1 -0
- package/dist/core/client.js.map +1 -1
- package/dist/core/request.d.ts +5 -1
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +7 -1
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +10 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +20 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/http/form-data.d.ts +59 -0
- package/dist/http/form-data.d.ts.map +1 -0
- package/dist/http/form-data.js +90 -0
- package/dist/http/form-data.js.map +1 -0
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +5 -3
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +17 -0
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +57 -6
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +7 -1
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +86 -12
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/hpack.d.ts +7 -0
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +16 -0
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +2 -0
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +27 -12
- package/dist/http/negotiator.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/retry.js +2 -2
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +10 -0
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.js +38 -4
- package/dist/proxy/socks.js.map +1 -1
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +15 -0
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/types.d.ts +24 -0
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +26 -0
- package/dist/utils/happy-eyeballs.d.ts.map +1 -0
- package/dist/utils/happy-eyeballs.js +201 -0
- package/dist/utils/happy-eyeballs.js.map +1 -0
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +9 -0
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.js +11 -14
- package/dist/ws/frame.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -11,10 +11,14 @@ NLcURL provides session-based and one-shot HTTP APIs, browser profile impersonat
|
|
|
11
11
|
- HTTP/1.1 and HTTP/2 (ALPN negotiated) with RFC 9113 flow control
|
|
12
12
|
- Browser profile impersonation (Chrome, Firefox, Safari, Edge, Tor)
|
|
13
13
|
- Optional custom JA3 and Akamai H2 fingerprint values in request model
|
|
14
|
-
- Cookie jar with RFC 6265
|
|
14
|
+
- Cookie jar with RFC 6265 behavior, Public Suffix List enforcement, `SameSite=Lax` default, and `__Host-`/`__Secure-` prefix validation
|
|
15
|
+
- `FormData` class for `multipart/form-data` uploads (RFC 7578)
|
|
16
|
+
- mTLS and custom CA trust via `TLSOptions` (`cert`, `key`, `pfx`, `ca`, `passphrase`)
|
|
17
|
+
- `ReadableStream<Uint8Array>` upload bodies (auto-drained before encoding)
|
|
18
|
+
- Header validation per RFC 7230 (rejects CR/LF/NUL injection)
|
|
15
19
|
- Streaming response support (`stream: true`) with automatic decompression
|
|
16
|
-
-
|
|
17
|
-
- Automatic retry on H2 RST_STREAM protocol errors (codes 1, 2, 7, 11)
|
|
20
|
+
- Automatic dual-stack connectivity via Happy Eyeballs (RFC 8305) — falls back to IPv4 instantly when IPv6 is unreachable, with optional `dnsFamily` pin
|
|
21
|
+
- Automatic retry on H2 RST_STREAM protocol errors (codes 1, 2, 7, 8, 11, 13) with capped exponential backoff
|
|
18
22
|
- CLI (`nlcurl`) for scripted and interactive use
|
|
19
23
|
- WebSocket client with optional impersonated TLS handshake
|
|
20
24
|
|
|
@@ -52,6 +56,34 @@ console.log(response.status);
|
|
|
52
56
|
console.log(response.json());
|
|
53
57
|
```
|
|
54
58
|
|
|
59
|
+
### Multipart form upload
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
import { post, FormData } from "nlcurl";
|
|
63
|
+
|
|
64
|
+
const form = new FormData();
|
|
65
|
+
form.append("username", "alice");
|
|
66
|
+
form.append("avatar", { data: Buffer.from("..."), filename: "avatar.png", contentType: "image/png" });
|
|
67
|
+
|
|
68
|
+
const res = await post("https://httpbin.org/post", form);
|
|
69
|
+
console.log(res.json());
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### mTLS / custom CA
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
import { request } from "nlcurl";
|
|
76
|
+
|
|
77
|
+
const res = await request({
|
|
78
|
+
url: "https://internal-api.example.com/data",
|
|
79
|
+
tls: {
|
|
80
|
+
cert: fs.readFileSync("client.pem"),
|
|
81
|
+
key: fs.readFileSync("client-key.pem"),
|
|
82
|
+
ca: fs.readFileSync("ca.pem"),
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
55
87
|
### Session-based usage
|
|
56
88
|
|
|
57
89
|
```ts
|
|
@@ -142,12 +174,13 @@ Additional commands:
|
|
|
142
174
|
|
|
143
175
|
## Documentation Index
|
|
144
176
|
|
|
145
|
-
- `docs/API.md
|
|
146
|
-
- `docs/MODULES.md
|
|
147
|
-
- `docs/ARCHITECTURE.md
|
|
148
|
-
- `docs/SETUP.md
|
|
149
|
-
- `docs/CONFIGURATION.md
|
|
150
|
-
- `docs/
|
|
177
|
+
- `docs/API.md` — exported API reference
|
|
178
|
+
- `docs/MODULES.md` — module-by-module usage guide
|
|
179
|
+
- `docs/ARCHITECTURE.md` — system architecture and request flow
|
|
180
|
+
- `docs/SETUP.md` — setup, build, and test instructions
|
|
181
|
+
- `docs/CONFIGURATION.md` — request/session/CLI configuration
|
|
182
|
+
- `docs/EXAMPLES.md` — comprehensive usage examples (API + CLI)
|
|
183
|
+
- `docs/ONBOARDING.md` — contributor onboarding guide
|
|
151
184
|
|
|
152
185
|
## License
|
|
153
186
|
|
package/dist/cookies/jar.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { type Cookie } from "./parser.js";
|
|
2
|
+
export interface CookieJarOptions {
|
|
3
|
+
/** Maximum total cookies across all domains (default: 3000). */
|
|
4
|
+
maxCookies?: number;
|
|
5
|
+
/** Maximum cookies per domain (default: 180, matching Chrome). */
|
|
6
|
+
maxCookiesPerDomain?: number;
|
|
7
|
+
}
|
|
2
8
|
/**
|
|
3
9
|
* In-memory cookie store implementing RFC 6265 semantics. Manages cookie
|
|
4
10
|
* scoping by domain and path, enforces per-domain and global cookie limits,
|
|
@@ -6,6 +12,9 @@ import { type Cookie } from "./parser.js";
|
|
|
6
12
|
*/
|
|
7
13
|
export declare class CookieJar {
|
|
8
14
|
private cookies;
|
|
15
|
+
private readonly maxCookies;
|
|
16
|
+
private readonly maxCookiesPerDomain;
|
|
17
|
+
constructor(options?: CookieJarOptions);
|
|
9
18
|
/**
|
|
10
19
|
* Parses all `Set-Cookie` values from `headers` (or from `rawHeaders` when
|
|
11
20
|
* available to handle multiple `Set-Cookie` entries) and stores any valid
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jar.d.ts","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAK5E;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAgB;
|
|
1
|
+
{"version":3,"file":"jar.d.ts","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAK5E,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEjC,OAAO,CAAC,EAAE,gBAAgB;IAKtC;;;;;;;;OAQG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;IAWxG;;;;;;;;OAQG;IACH,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM;IAajC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIjC;;;;;OAKG;IACH,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC;IAI5B;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACH,gBAAgB,IAAI,MAAM;IAmB1B;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IA0BzC,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,sBAAsB;CAY/B"}
|
package/dist/cookies/jar.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { parseSetCookie, serializeCookies } from "./parser.js";
|
|
2
|
-
const
|
|
3
|
-
const
|
|
2
|
+
const DEFAULT_MAX_COOKIES = 3000;
|
|
3
|
+
const DEFAULT_MAX_COOKIES_PER_DOMAIN = 180;
|
|
4
4
|
/**
|
|
5
5
|
* In-memory cookie store implementing RFC 6265 semantics. Manages cookie
|
|
6
6
|
* scoping by domain and path, enforces per-domain and global cookie limits,
|
|
@@ -8,6 +8,12 @@ const MAX_COOKIES_PER_DOMAIN = 50;
|
|
|
8
8
|
*/
|
|
9
9
|
export class CookieJar {
|
|
10
10
|
cookies = [];
|
|
11
|
+
maxCookies;
|
|
12
|
+
maxCookiesPerDomain;
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.maxCookies = options?.maxCookies ?? DEFAULT_MAX_COOKIES;
|
|
15
|
+
this.maxCookiesPerDomain = options?.maxCookiesPerDomain ?? DEFAULT_MAX_COOKIES_PER_DOMAIN;
|
|
16
|
+
}
|
|
11
17
|
/**
|
|
12
18
|
* Parses all `Set-Cookie` values from `headers` (or from `rawHeaders` when
|
|
13
19
|
* available to handle multiple `Set-Cookie` entries) and stores any valid
|
|
@@ -91,6 +97,7 @@ export class CookieJar {
|
|
|
91
97
|
const includeSubdomains = domain.startsWith(".") ? "TRUE" : "FALSE";
|
|
92
98
|
const path = c.path || "/";
|
|
93
99
|
const secure = c.secure ? "TRUE" : "FALSE";
|
|
100
|
+
const httpOnly = c.httpOnly ? "TRUE" : "FALSE";
|
|
94
101
|
let expires = "0";
|
|
95
102
|
if (c.maxAge !== undefined) {
|
|
96
103
|
expires = String(Math.floor((c.createdAt + c.maxAge * 1000) / 1000));
|
|
@@ -98,7 +105,7 @@ export class CookieJar {
|
|
|
98
105
|
else if (c.expires) {
|
|
99
106
|
expires = String(Math.floor(c.expires.getTime() / 1000));
|
|
100
107
|
}
|
|
101
|
-
lines.push(`${domain}\t${includeSubdomains}\t${path}\t${secure}\t${expires}\t${c.name}\t${c.value}`);
|
|
108
|
+
lines.push(`${domain}\t${includeSubdomains}\t${path}\t${secure}\t${expires}\t${c.name}\t${c.value}\t${httpOnly}`);
|
|
102
109
|
}
|
|
103
110
|
return lines.join("\n") + "\n";
|
|
104
111
|
}
|
|
@@ -118,13 +125,14 @@ export class CookieJar {
|
|
|
118
125
|
if (parts.length < 7)
|
|
119
126
|
continue;
|
|
120
127
|
const [domain, , path, secure, expires, name, value] = parts;
|
|
128
|
+
const httpOnlyField = parts[7];
|
|
121
129
|
const cookie = {
|
|
122
130
|
name: name,
|
|
123
131
|
value: value,
|
|
124
132
|
domain: domain.startsWith(".") ? domain.slice(1) : domain,
|
|
125
133
|
path: path,
|
|
126
134
|
secure: secure === "TRUE",
|
|
127
|
-
httpOnly:
|
|
135
|
+
httpOnly: httpOnlyField === "TRUE",
|
|
128
136
|
sameSite: undefined,
|
|
129
137
|
createdAt: Date.now(),
|
|
130
138
|
};
|
|
@@ -146,12 +154,12 @@ export class CookieJar {
|
|
|
146
154
|
}
|
|
147
155
|
else {
|
|
148
156
|
const domainCount = this.cookies.filter((c) => c.domain === cookie.domain).length;
|
|
149
|
-
if (domainCount >=
|
|
157
|
+
if (domainCount >= this.maxCookiesPerDomain) {
|
|
150
158
|
const oldest = this.cookies.findIndex((c) => c.domain === cookie.domain);
|
|
151
159
|
if (oldest >= 0)
|
|
152
160
|
this.cookies.splice(oldest, 1);
|
|
153
161
|
}
|
|
154
|
-
if (this.cookies.length >=
|
|
162
|
+
if (this.cookies.length >= this.maxCookies) {
|
|
155
163
|
this.cookies.shift();
|
|
156
164
|
}
|
|
157
165
|
this.cookies.push(cookie);
|
package/dist/cookies/jar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jar.js","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAE5E,MAAM,
|
|
1
|
+
{"version":3,"file":"jar.js","sourceRoot":"","sources":["../../src/cookies/jar.ts"],"names":[],"mappings":"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"}
|
package/dist/cookies/parser.d.ts
CHANGED
|
@@ -25,16 +25,6 @@ export interface Cookie {
|
|
|
25
25
|
sameSite?: "strict" | "lax" | "none";
|
|
26
26
|
createdAt: number;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Parses a `Set-Cookie` header value into a {@link Cookie} object.
|
|
30
|
-
* Validates the cookie against the request URL to enforce domain and path
|
|
31
|
-
* scoping rules per RFC 6265.
|
|
32
|
-
*
|
|
33
|
-
* @param {string} header - Raw `Set-Cookie` header value.
|
|
34
|
-
* @param {URL} requestUrl - URL of the request that received the header.
|
|
35
|
-
* @returns {Cookie | null} Parsed cookie, or `null` if the header is invalid or
|
|
36
|
-
* the domain attribute fails validation against the request origin.
|
|
37
|
-
*/
|
|
38
28
|
export declare function parseSetCookie(header: string, requestUrl: URL): Cookie | null;
|
|
39
29
|
/**
|
|
40
30
|
* Serializes an array of cookies into the `Cookie` request header value.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAmBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAiG7E;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1D"}
|
package/dist/cookies/parser.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isPublicSuffix } from "./public-suffix.js";
|
|
1
2
|
/**
|
|
2
3
|
* Parses a `Set-Cookie` header value into a {@link Cookie} object.
|
|
3
4
|
* Validates the cookie against the request URL to enforce domain and path
|
|
@@ -8,6 +9,10 @@
|
|
|
8
9
|
* @returns {Cookie | null} Parsed cookie, or `null` if the header is invalid or
|
|
9
10
|
* the domain attribute fails validation against the request origin.
|
|
10
11
|
*/
|
|
12
|
+
const COOKIE_NAME_RE = /^[!#$%&'*+\-.^_`|~\w]+$/;
|
|
13
|
+
const COOKIE_VALUE_CTL_RE = /[\x00-\x1f\x7f]/;
|
|
14
|
+
const MAX_COOKIE_SIZE = 4096;
|
|
15
|
+
const VALID_SAMESITE = new Set(["strict", "lax", "none"]);
|
|
11
16
|
export function parseSetCookie(header, requestUrl) {
|
|
12
17
|
const parts = header.split(";").map((s) => s.trim());
|
|
13
18
|
if (parts.length === 0)
|
|
@@ -20,6 +25,12 @@ export function parseSetCookie(header, requestUrl) {
|
|
|
20
25
|
const value = nameValue.substring(eqIdx + 1).trim();
|
|
21
26
|
if (!name)
|
|
22
27
|
return null;
|
|
28
|
+
if (!COOKIE_NAME_RE.test(name))
|
|
29
|
+
return null;
|
|
30
|
+
if (COOKIE_VALUE_CTL_RE.test(value))
|
|
31
|
+
return null;
|
|
32
|
+
if (name.length + value.length > MAX_COOKIE_SIZE)
|
|
33
|
+
return null;
|
|
23
34
|
const cookie = {
|
|
24
35
|
name,
|
|
25
36
|
value,
|
|
@@ -43,6 +54,9 @@ export function parseSetCookie(header, requestUrl) {
|
|
|
43
54
|
if (d !== host && !host.endsWith("." + d)) {
|
|
44
55
|
return null;
|
|
45
56
|
}
|
|
57
|
+
if (isPublicSuffix(d)) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
46
60
|
cookie.domain = d;
|
|
47
61
|
break;
|
|
48
62
|
}
|
|
@@ -69,11 +83,30 @@ export function parseSetCookie(header, requestUrl) {
|
|
|
69
83
|
case "httponly":
|
|
70
84
|
cookie.httpOnly = true;
|
|
71
85
|
break;
|
|
72
|
-
case "samesite":
|
|
73
|
-
|
|
86
|
+
case "samesite": {
|
|
87
|
+
const sv = attrValue.toLowerCase();
|
|
88
|
+
if (VALID_SAMESITE.has(sv)) {
|
|
89
|
+
cookie.sameSite = sv;
|
|
90
|
+
}
|
|
74
91
|
break;
|
|
92
|
+
}
|
|
75
93
|
}
|
|
76
94
|
}
|
|
95
|
+
if (cookie.sameSite === undefined) {
|
|
96
|
+
cookie.sameSite = "lax";
|
|
97
|
+
}
|
|
98
|
+
if (cookie.name.startsWith("__Host-")) {
|
|
99
|
+
if (!cookie.secure)
|
|
100
|
+
return null;
|
|
101
|
+
if (cookie.domain !== requestUrl.hostname.toLowerCase())
|
|
102
|
+
return null;
|
|
103
|
+
if (cookie.path !== "/")
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
if (cookie.name.startsWith("__Secure-")) {
|
|
107
|
+
if (!cookie.secure)
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
77
110
|
return cookie;
|
|
78
111
|
}
|
|
79
112
|
function defaultPath(path) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cookies/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUTO-GENERATED — DO NOT EDIT MANUALLY.
|
|
3
|
+
*
|
|
4
|
+
* Complete Mozilla Public Suffix List rules.
|
|
5
|
+
* Generated from: https://publicsuffix.org/list/public_suffix_list.dat
|
|
6
|
+
* Generated on: 2026-03-07T11:40:55.299Z
|
|
7
|
+
* Total rules: 10153
|
|
8
|
+
*
|
|
9
|
+
* To regenerate: npx tsx scripts/update-psl.ts
|
|
10
|
+
*/
|
|
11
|
+
export declare const PSL_RULES: readonly string[];
|
|
12
|
+
//# sourceMappingURL=psl-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"psl-data.d.ts","sourceRoot":"","sources":["../../src/cookies/psl-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,SAAS,EAAE,SAAS,MAAM,EA06TtC,CAAC"}
|