@eggjs/cookies 4.0.0-beta.35 → 4.0.0-beta.36
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/dist/cookie.d.ts +67 -64
- package/dist/cookie.js +70 -87
- package/dist/cookies.d.ts +43 -39
- package/dist/cookies.js +214 -274
- package/dist/error.d.ts +5 -2
- package/dist/error.js +11 -10
- package/dist/index.d.ts +5 -4
- package/dist/index.js +6 -5
- package/dist/keygrip.d.ts +13 -10
- package/dist/keygrip.js +86 -103
- package/package.json +24 -31
package/dist/cookies.js
CHANGED
|
@@ -1,290 +1,230 @@
|
|
|
1
|
-
import assert from 'node:assert';
|
|
2
|
-
import { isSameSiteNoneCompatible } from 'should-send-same-site-none';
|
|
3
|
-
import { base64decode, base64encode } from 'utility';
|
|
4
1
|
import { Cookie } from "./cookie.js";
|
|
5
2
|
import { CookieError } from "./error.js";
|
|
6
3
|
import { Keygrip } from "./keygrip.js";
|
|
7
|
-
|
|
4
|
+
import assert from "node:assert";
|
|
5
|
+
import { isSameSiteNoneCompatible } from "should-send-same-site-none";
|
|
6
|
+
import { base64decode, base64encode } from "utility";
|
|
7
|
+
|
|
8
|
+
//#region src/cookies.ts
|
|
9
|
+
const keyCache = /* @__PURE__ */ new Map();
|
|
8
10
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
newPartitionedCookie.attrs.secure = this.secure;
|
|
183
|
-
headers = pushCookie(headers, newPartitionedCookie);
|
|
184
|
-
// signed
|
|
185
|
-
if (signed) {
|
|
186
|
-
newPartitionedCookie.value = value && this.keys.sign(newPartitionedCookie.toString());
|
|
187
|
-
newPartitionedCookie.name += '.sig';
|
|
188
|
-
headers = ignoreCookiesByNameAndPath(headers, newPartitionedCookie.name, newPartitionedCookie.attrs.path);
|
|
189
|
-
headers = pushCookie(headers, newPartitionedCookie);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
const cookie = new Cookie(name, value, opts);
|
|
193
|
-
// if user not set secure, reset secure to ctx.secure
|
|
194
|
-
if (opts.secure === undefined) {
|
|
195
|
-
cookie.attrs.secure = this.secure;
|
|
196
|
-
}
|
|
197
|
-
headers = pushCookie(headers, cookie);
|
|
198
|
-
// signed
|
|
199
|
-
if (signed) {
|
|
200
|
-
cookie.value = value && this.keys.sign(cookie.toString());
|
|
201
|
-
cookie.name += '.sig';
|
|
202
|
-
headers = pushCookie(headers, cookie);
|
|
203
|
-
}
|
|
204
|
-
this.ctx.set('set-cookie', headers);
|
|
205
|
-
return this;
|
|
206
|
-
}
|
|
207
|
-
#formatChipsCookieName(name) {
|
|
208
|
-
return `_CHIPS-${name}`;
|
|
209
|
-
}
|
|
210
|
-
#parseChromiumAndMajorVersion(userAgent) {
|
|
211
|
-
if (!this.#parseChromiumResult) {
|
|
212
|
-
this.#parseChromiumResult = parseChromiumAndMajorVersion(userAgent);
|
|
213
|
-
}
|
|
214
|
-
return this.#parseChromiumResult;
|
|
215
|
-
}
|
|
216
|
-
isSameSiteNoneCompatible(userAgent) {
|
|
217
|
-
// Chrome >= 80.0.0.0
|
|
218
|
-
const result = this.#parseChromiumAndMajorVersion(userAgent);
|
|
219
|
-
if (result.chromium) {
|
|
220
|
-
return result.majorVersion >= 80;
|
|
221
|
-
}
|
|
222
|
-
return isSameSiteNoneCompatible(userAgent);
|
|
223
|
-
}
|
|
224
|
-
isPartitionedCompatible(userAgent) {
|
|
225
|
-
// support: Chrome >= 114.0.0.0
|
|
226
|
-
// default enable: Chrome >= 118.0.0.0
|
|
227
|
-
// https://developers.google.com/privacy-sandbox/3pcd/chips
|
|
228
|
-
const result = this.#parseChromiumAndMajorVersion(userAgent);
|
|
229
|
-
if (result.chromium) {
|
|
230
|
-
return result.majorVersion >= 118;
|
|
231
|
-
}
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// https://github.com/linsight/should-send-same-site-none/blob/master/index.js#L86
|
|
11
|
+
* cookies for egg
|
|
12
|
+
* extend pillarjs/cookies, add encrypt and decrypt
|
|
13
|
+
*/
|
|
14
|
+
var Cookies = class {
|
|
15
|
+
#keysArray;
|
|
16
|
+
#keys;
|
|
17
|
+
#defaultCookieOptions;
|
|
18
|
+
#autoChips;
|
|
19
|
+
ctx;
|
|
20
|
+
app;
|
|
21
|
+
secure;
|
|
22
|
+
#parseChromiumResult;
|
|
23
|
+
constructor(ctx, keys, defaultCookieOptions) {
|
|
24
|
+
this.#keysArray = keys;
|
|
25
|
+
this.#defaultCookieOptions = defaultCookieOptions;
|
|
26
|
+
this.#autoChips = defaultCookieOptions?.autoChips;
|
|
27
|
+
this.ctx = ctx;
|
|
28
|
+
this.secure = this.ctx.secure;
|
|
29
|
+
this.app = ctx.app;
|
|
30
|
+
}
|
|
31
|
+
get keys() {
|
|
32
|
+
if (!this.#keys) {
|
|
33
|
+
assert(Array.isArray(this.#keysArray), ".keys required for encrypt/sign cookies");
|
|
34
|
+
const cache = keyCache.get(this.#keysArray);
|
|
35
|
+
if (cache) this.#keys = cache;
|
|
36
|
+
else {
|
|
37
|
+
this.#keys = new Keygrip(this.#keysArray);
|
|
38
|
+
keyCache.set(this.#keysArray, this.#keys);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return this.#keys;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* get cookie value by name
|
|
45
|
+
* @param {String} name - cookie's name
|
|
46
|
+
* @param {Object} opts - cookies' options
|
|
47
|
+
* - {Boolean} signed - default to true
|
|
48
|
+
* - {Boolean} encrypt - default to false
|
|
49
|
+
* @return {String} value - cookie's value
|
|
50
|
+
*/
|
|
51
|
+
get(name, opts = {}) {
|
|
52
|
+
let value = this._get(name, opts);
|
|
53
|
+
if (value === void 0 && this.#autoChips) value = this._get(this.#formatChipsCookieName(name), opts);
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
_get(name, opts) {
|
|
57
|
+
const signed = computeSigned(opts);
|
|
58
|
+
const header = this.ctx.get("cookie");
|
|
59
|
+
if (!header) return;
|
|
60
|
+
const match = header.match(getPattern(name));
|
|
61
|
+
if (!match) return;
|
|
62
|
+
let value = match[1];
|
|
63
|
+
if (!opts.encrypt && !signed) return value;
|
|
64
|
+
if (signed) {
|
|
65
|
+
const sigName = name + ".sig";
|
|
66
|
+
const sigValue = this.get(sigName, { signed: false });
|
|
67
|
+
if (!sigValue) return;
|
|
68
|
+
const raw = name + "=" + value;
|
|
69
|
+
const index = this.keys.verify(raw, sigValue);
|
|
70
|
+
if (index < 0) {
|
|
71
|
+
this.set(sigName, null, {
|
|
72
|
+
path: "/",
|
|
73
|
+
signed: false,
|
|
74
|
+
overwrite: true
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (index > 0) this.set(sigName, this.keys.sign(raw), {
|
|
79
|
+
signed: false,
|
|
80
|
+
overwrite: true
|
|
81
|
+
});
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
value = base64decode(value, true, "buffer");
|
|
85
|
+
const res = this.keys.decrypt(value);
|
|
86
|
+
return res ? res.value.toString() : void 0;
|
|
87
|
+
}
|
|
88
|
+
set(name, value, opts) {
|
|
89
|
+
opts = {
|
|
90
|
+
...this.#defaultCookieOptions,
|
|
91
|
+
...opts
|
|
92
|
+
};
|
|
93
|
+
const signed = computeSigned(opts);
|
|
94
|
+
const shouldIgnoreSecureError = opts && opts.ignoreSecureError;
|
|
95
|
+
value = value || "";
|
|
96
|
+
if (!shouldIgnoreSecureError) {
|
|
97
|
+
if (!this.secure && opts.secure) throw new CookieError("Cannot send secure cookie over unencrypted connection");
|
|
98
|
+
}
|
|
99
|
+
let headers = this.ctx.response.get("set-cookie") || [];
|
|
100
|
+
if (!Array.isArray(headers)) headers = [headers];
|
|
101
|
+
if (opts.encrypt) value = value && base64encode(this.keys.encrypt(value), true);
|
|
102
|
+
if (value.length > 4093) this.app.emit("cookieLimitExceed", {
|
|
103
|
+
name,
|
|
104
|
+
value,
|
|
105
|
+
ctx: this.ctx
|
|
106
|
+
});
|
|
107
|
+
const userAgent = this.ctx.get("user-agent");
|
|
108
|
+
let isSameSiteNone = false;
|
|
109
|
+
let autoChips = !opts.partitioned && this.#autoChips;
|
|
110
|
+
if (opts.sameSite && typeof opts.sameSite === "string" && opts.sameSite.toLowerCase() === "none") {
|
|
111
|
+
isSameSiteNone = true;
|
|
112
|
+
if (opts.secure === false || !this.secure || userAgent && !this.isSameSiteNoneCompatible(userAgent)) {
|
|
113
|
+
opts.sameSite = false;
|
|
114
|
+
isSameSiteNone = false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (autoChips || opts.partitioned) {
|
|
118
|
+
if (!isSameSiteNone || opts.secure === false || !this.secure || userAgent && !this.isPartitionedCompatible(userAgent)) {
|
|
119
|
+
autoChips = false;
|
|
120
|
+
opts.partitioned = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (opts.partitioned && opts.removeUnpartitioned) {
|
|
124
|
+
if (opts.overwrite) {
|
|
125
|
+
opts.overwrite = false;
|
|
126
|
+
headers = ignoreCookiesByName(headers, name);
|
|
127
|
+
}
|
|
128
|
+
const removeUnpartitionedCookie = new Cookie(name, "", {
|
|
129
|
+
...opts,
|
|
130
|
+
partitioned: false
|
|
131
|
+
});
|
|
132
|
+
if (opts.secure === void 0) removeUnpartitionedCookie.attrs.secure = this.secure;
|
|
133
|
+
headers = pushCookie(headers, removeUnpartitionedCookie);
|
|
134
|
+
if (signed) {
|
|
135
|
+
removeUnpartitionedCookie.name += ".sig";
|
|
136
|
+
headers = ignoreCookiesByNameAndPath(headers, removeUnpartitionedCookie.name, removeUnpartitionedCookie.attrs.path);
|
|
137
|
+
headers = pushCookie(headers, removeUnpartitionedCookie);
|
|
138
|
+
}
|
|
139
|
+
} else if (autoChips) {
|
|
140
|
+
const newCookieName = this.#formatChipsCookieName(name);
|
|
141
|
+
const newCookieOpts = {
|
|
142
|
+
...opts,
|
|
143
|
+
partitioned: true
|
|
144
|
+
};
|
|
145
|
+
const newPartitionedCookie = new Cookie(newCookieName, value, newCookieOpts);
|
|
146
|
+
if (opts.secure === void 0) newPartitionedCookie.attrs.secure = this.secure;
|
|
147
|
+
headers = pushCookie(headers, newPartitionedCookie);
|
|
148
|
+
if (signed) {
|
|
149
|
+
newPartitionedCookie.value = value && this.keys.sign(newPartitionedCookie.toString());
|
|
150
|
+
newPartitionedCookie.name += ".sig";
|
|
151
|
+
headers = ignoreCookiesByNameAndPath(headers, newPartitionedCookie.name, newPartitionedCookie.attrs.path);
|
|
152
|
+
headers = pushCookie(headers, newPartitionedCookie);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const cookie = new Cookie(name, value, opts);
|
|
156
|
+
if (opts.secure === void 0) cookie.attrs.secure = this.secure;
|
|
157
|
+
headers = pushCookie(headers, cookie);
|
|
158
|
+
if (signed) {
|
|
159
|
+
cookie.value = value && this.keys.sign(cookie.toString());
|
|
160
|
+
cookie.name += ".sig";
|
|
161
|
+
headers = pushCookie(headers, cookie);
|
|
162
|
+
}
|
|
163
|
+
this.ctx.set("set-cookie", headers);
|
|
164
|
+
return this;
|
|
165
|
+
}
|
|
166
|
+
#formatChipsCookieName(name) {
|
|
167
|
+
return `_CHIPS-${name}`;
|
|
168
|
+
}
|
|
169
|
+
#parseChromiumAndMajorVersion(userAgent) {
|
|
170
|
+
if (!this.#parseChromiumResult) this.#parseChromiumResult = parseChromiumAndMajorVersion(userAgent);
|
|
171
|
+
return this.#parseChromiumResult;
|
|
172
|
+
}
|
|
173
|
+
isSameSiteNoneCompatible(userAgent) {
|
|
174
|
+
const result = this.#parseChromiumAndMajorVersion(userAgent);
|
|
175
|
+
if (result.chromium) return result.majorVersion >= 80;
|
|
176
|
+
return isSameSiteNoneCompatible(userAgent);
|
|
177
|
+
}
|
|
178
|
+
isPartitionedCompatible(userAgent) {
|
|
179
|
+
const result = this.#parseChromiumAndMajorVersion(userAgent);
|
|
180
|
+
if (result.chromium) return result.majorVersion >= 118;
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
236
184
|
function parseChromiumAndMajorVersion(userAgent) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
185
|
+
const m = /Chrom[^ /]{1,100}\/(\d{1,100}?)\./.exec(userAgent);
|
|
186
|
+
if (!m) return {
|
|
187
|
+
chromium: false,
|
|
188
|
+
majorVersion: 0
|
|
189
|
+
};
|
|
190
|
+
return {
|
|
191
|
+
chromium: true,
|
|
192
|
+
majorVersion: parseInt(m[1])
|
|
193
|
+
};
|
|
243
194
|
}
|
|
244
|
-
const _patternCache = new Map();
|
|
195
|
+
const _patternCache = /* @__PURE__ */ new Map();
|
|
245
196
|
function getPattern(name) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
_patternCache.set(name, reg);
|
|
252
|
-
return reg;
|
|
197
|
+
const cache = _patternCache.get(name);
|
|
198
|
+
if (cache) return cache;
|
|
199
|
+
const reg = /* @__PURE__ */ new RegExp("(?:^|;) *" + name.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") + "=([^;]*)");
|
|
200
|
+
_patternCache.set(name, reg);
|
|
201
|
+
return reg;
|
|
253
202
|
}
|
|
254
203
|
function computeSigned(opts) {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
if (opts.encrypt)
|
|
258
|
-
return false;
|
|
259
|
-
return opts.signed !== false;
|
|
204
|
+
if (opts.encrypt) return false;
|
|
205
|
+
return opts.signed !== false;
|
|
260
206
|
}
|
|
261
207
|
function pushCookie(cookies, cookie) {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
cookies.push(cookie.toHeader());
|
|
266
|
-
return cookies;
|
|
208
|
+
if (cookie.attrs.overwrite) cookies = ignoreCookiesByName(cookies, cookie.name);
|
|
209
|
+
cookies.push(cookie.toHeader());
|
|
210
|
+
return cookies;
|
|
267
211
|
}
|
|
268
212
|
function ignoreCookiesByName(cookies, name) {
|
|
269
|
-
|
|
270
|
-
|
|
213
|
+
const prefix = `${name}=`;
|
|
214
|
+
return cookies.filter((c) => !c.startsWith(prefix));
|
|
271
215
|
}
|
|
272
216
|
function ignoreCookiesByNameAndPath(cookies, name, path) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
if (c.includes(includedPath) || c.endsWith(endsWithPath)) {
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
return true;
|
|
288
|
-
});
|
|
217
|
+
if (!path) return ignoreCookiesByName(cookies, name);
|
|
218
|
+
const prefix = `${name}=`;
|
|
219
|
+
const includedPath = `; path=${path};`;
|
|
220
|
+
const endsWithPath = `; path=${path}`;
|
|
221
|
+
return cookies.filter((c) => {
|
|
222
|
+
if (c.startsWith(prefix)) {
|
|
223
|
+
if (c.includes(includedPath) || c.endsWith(endsWithPath)) return false;
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
});
|
|
289
227
|
}
|
|
290
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb29raWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVyRCxPQUFPLEVBQUUsTUFBTSxFQUF5QixNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7QUFvQjlDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBQ1QsVUFBVSxDQUFXO0lBQzlCLEtBQUssQ0FBVTtJQUNOLHFCQUFxQixDQUF3QjtJQUM3QyxVQUFVLENBQVc7SUFDckIsR0FBRyxDQUFzQjtJQUN6QixHQUFHLENBQXNCO0lBQ3pCLE1BQU0sQ0FBVTtJQUN6QixvQkFBb0IsQ0FBdUI7SUFFM0MsWUFBWSxHQUF3QixFQUFFLElBQWMsRUFBRSxvQkFBMkM7UUFDL0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFvQixFQUFFLFNBQVMsQ0FBQztRQUNsRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLElB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
|
|
228
|
+
|
|
229
|
+
//#endregion
|
|
230
|
+
export { Cookies };
|
package/dist/error.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
//#region src/error.d.ts
|
|
2
|
+
declare class CookieError extends Error {
|
|
3
|
+
constructor(message: string, options?: ErrorOptions);
|
|
3
4
|
}
|
|
5
|
+
//#endregion
|
|
6
|
+
export { CookieError };
|
package/dist/error.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//#
|
|
1
|
+
//#region src/error.ts
|
|
2
|
+
var CookieError = class extends Error {
|
|
3
|
+
constructor(message, options) {
|
|
4
|
+
super(message, options);
|
|
5
|
+
this.name = this.constructor.name;
|
|
6
|
+
if ("captureStackTrace" in Error) Error.captureStackTrace(this, this.constructor);
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
export { CookieError };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Cookie, CookieSetOptions } from "./cookie.js";
|
|
2
|
+
import { Keygrip } from "./keygrip.js";
|
|
3
|
+
import { CookieGetOptions, Cookies, DefaultCookieOptions } from "./cookies.js";
|
|
4
|
+
import { CookieError } from "./error.js";
|
|
5
|
+
export { Cookie, CookieError, CookieGetOptions, CookieSetOptions, Cookies, DefaultCookieOptions, Keygrip };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Cookie } from "./cookie.js";
|
|
2
|
+
import { CookieError } from "./error.js";
|
|
3
|
+
import { Keygrip } from "./keygrip.js";
|
|
4
|
+
import { Cookies } from "./cookies.js";
|
|
5
|
+
|
|
6
|
+
export { Cookie, CookieError, Cookies, Keygrip };
|
package/dist/keygrip.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
//#region src/keygrip.d.ts
|
|
2
|
+
declare class Keygrip {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(keys: string[]);
|
|
5
|
+
encrypt(data: string, key?: string): Buffer;
|
|
6
|
+
decrypt(data: string | Buffer): {
|
|
7
|
+
value: Buffer;
|
|
8
|
+
index: number;
|
|
9
|
+
} | false;
|
|
10
|
+
sign(data: string | Buffer, key?: string): string;
|
|
11
|
+
verify(data: string, digest: string): number;
|
|
11
12
|
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { Keygrip };
|