@eggjs/cookies 3.1.0 → 4.0.0-beta.14
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 +1 -7
- package/README.zh-CN.md +3 -9
- package/dist/cookie.d.ts +69 -0
- package/dist/cookie.js +77 -0
- package/dist/cookies.d.ts +47 -0
- package/dist/cookies.js +231 -0
- package/dist/error.d.ts +6 -0
- package/dist/error.js +11 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/keygrip.d.ts +14 -0
- package/dist/keygrip.js +98 -0
- package/package.json +27 -48
- package/dist/commonjs/cookie.d.ts +0 -66
- package/dist/commonjs/cookie.js +0 -101
- package/dist/commonjs/cookies.d.ts +0 -43
- package/dist/commonjs/cookies.js +0 -293
- package/dist/commonjs/error.d.ts +0 -3
- package/dist/commonjs/error.js +0 -11
- package/dist/commonjs/index.d.ts +0 -4
- package/dist/commonjs/index.js +0 -21
- package/dist/commonjs/keygrip.d.ts +0 -11
- package/dist/commonjs/keygrip.js +0 -120
- package/dist/commonjs/package.json +0 -3
- package/dist/esm/cookie.d.ts +0 -66
- package/dist/esm/cookie.js +0 -94
- package/dist/esm/cookies.d.ts +0 -43
- package/dist/esm/cookies.js +0 -286
- package/dist/esm/error.d.ts +0 -3
- package/dist/esm/error.js +0 -7
- package/dist/esm/index.d.ts +0 -4
- package/dist/esm/index.js +0 -5
- package/dist/esm/keygrip.d.ts +0 -11
- package/dist/esm/keygrip.js +0 -113
- package/dist/esm/package.json +0 -3
- package/dist/package.json +0 -4
- package/src/cookie.ts +0 -165
- package/src/cookies.ts +0 -336
- package/src/error.ts +0 -6
- package/src/index.ts +0 -4
- package/src/keygrip.ts +0 -129
package/dist/esm/cookies.js
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert';
|
|
2
|
-
import { base64decode, base64encode } from 'utility';
|
|
3
|
-
import { isSameSiteNoneCompatible } from 'should-send-same-site-none';
|
|
4
|
-
import { Keygrip } from './keygrip.js';
|
|
5
|
-
import { Cookie } from './cookie.js';
|
|
6
|
-
import { CookieError } from './error.js';
|
|
7
|
-
const keyCache = new Map();
|
|
8
|
-
/**
|
|
9
|
-
* cookies for egg
|
|
10
|
-
* extend pillarjs/cookies, add encrypt and decrypt
|
|
11
|
-
*/
|
|
12
|
-
export class Cookies {
|
|
13
|
-
#keysArray;
|
|
14
|
-
#keys;
|
|
15
|
-
#defaultCookieOptions;
|
|
16
|
-
#autoChips;
|
|
17
|
-
ctx;
|
|
18
|
-
app;
|
|
19
|
-
secure;
|
|
20
|
-
#parseChromiumResult;
|
|
21
|
-
constructor(ctx, keys, defaultCookieOptions) {
|
|
22
|
-
this.#keysArray = keys;
|
|
23
|
-
// default cookie options
|
|
24
|
-
this.#defaultCookieOptions = defaultCookieOptions;
|
|
25
|
-
this.#autoChips = defaultCookieOptions?.autoChips;
|
|
26
|
-
this.ctx = ctx;
|
|
27
|
-
this.secure = this.ctx.secure;
|
|
28
|
-
this.app = ctx.app;
|
|
29
|
-
}
|
|
30
|
-
get keys() {
|
|
31
|
-
if (!this.#keys) {
|
|
32
|
-
assert(Array.isArray(this.#keysArray), '.keys required for encrypt/sign cookies');
|
|
33
|
-
const cache = keyCache.get(this.#keysArray);
|
|
34
|
-
if (cache) {
|
|
35
|
-
this.#keys = cache;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
this.#keys = new Keygrip(this.#keysArray);
|
|
39
|
-
keyCache.set(this.#keysArray, this.#keys);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return this.#keys;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* get cookie value by name
|
|
46
|
-
* @param {String} name - cookie's name
|
|
47
|
-
* @param {Object} opts - cookies' options
|
|
48
|
-
* - {Boolean} signed - default to true
|
|
49
|
-
* - {Boolean} encrypt - default to false
|
|
50
|
-
* @return {String} value - cookie's value
|
|
51
|
-
*/
|
|
52
|
-
get(name, opts = {}) {
|
|
53
|
-
let value = this._get(name, opts);
|
|
54
|
-
if (value === undefined && this.#autoChips) {
|
|
55
|
-
// try to read _CHIPS-${name} prefix cookie
|
|
56
|
-
value = this._get(this.#formatChipsCookieName(name), opts);
|
|
57
|
-
}
|
|
58
|
-
return value;
|
|
59
|
-
}
|
|
60
|
-
_get(name, opts) {
|
|
61
|
-
const signed = computeSigned(opts);
|
|
62
|
-
const header = this.ctx.get('cookie');
|
|
63
|
-
if (!header)
|
|
64
|
-
return;
|
|
65
|
-
const match = header.match(getPattern(name));
|
|
66
|
-
if (!match)
|
|
67
|
-
return;
|
|
68
|
-
let value = match[1];
|
|
69
|
-
if (!opts.encrypt && !signed)
|
|
70
|
-
return value;
|
|
71
|
-
// signed
|
|
72
|
-
if (signed) {
|
|
73
|
-
const sigName = name + '.sig';
|
|
74
|
-
const sigValue = this.get(sigName, { signed: false });
|
|
75
|
-
if (!sigValue)
|
|
76
|
-
return;
|
|
77
|
-
const raw = name + '=' + value;
|
|
78
|
-
const index = this.keys.verify(raw, sigValue);
|
|
79
|
-
if (index < 0) {
|
|
80
|
-
// can not match any key, remove ${name}.sig
|
|
81
|
-
this.set(sigName, null, { path: '/', signed: false, overwrite: true });
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (index > 0) {
|
|
85
|
-
// not signed by the first key, update sigValue
|
|
86
|
-
this.set(sigName, this.keys.sign(raw), { signed: false, overwrite: true });
|
|
87
|
-
}
|
|
88
|
-
return value;
|
|
89
|
-
}
|
|
90
|
-
// encrypt
|
|
91
|
-
value = base64decode(value, true, 'buffer');
|
|
92
|
-
const res = this.keys.decrypt(value);
|
|
93
|
-
return res ? res.value.toString() : undefined;
|
|
94
|
-
}
|
|
95
|
-
set(name, value, opts) {
|
|
96
|
-
opts = {
|
|
97
|
-
...this.#defaultCookieOptions,
|
|
98
|
-
...opts,
|
|
99
|
-
};
|
|
100
|
-
const signed = computeSigned(opts);
|
|
101
|
-
const shouldIgnoreSecureError = opts && opts.ignoreSecureError;
|
|
102
|
-
value = value || '';
|
|
103
|
-
if (!shouldIgnoreSecureError) {
|
|
104
|
-
if (!this.secure && opts.secure) {
|
|
105
|
-
throw new CookieError('Cannot send secure cookie over unencrypted connection');
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
let headers = this.ctx.response.get('set-cookie') || [];
|
|
109
|
-
if (!Array.isArray(headers)) {
|
|
110
|
-
headers = [headers];
|
|
111
|
-
}
|
|
112
|
-
// encrypt
|
|
113
|
-
if (opts.encrypt) {
|
|
114
|
-
value = value && base64encode(this.keys.encrypt(value), true);
|
|
115
|
-
}
|
|
116
|
-
// http://browsercookielimits.squawky.net/
|
|
117
|
-
if (value.length > 4093) {
|
|
118
|
-
this.app.emit('cookieLimitExceed', { name, value, ctx: this.ctx });
|
|
119
|
-
}
|
|
120
|
-
// https://github.com/linsight/should-send-same-site-none
|
|
121
|
-
// fixed SameSite=None: Known Incompatible Clients
|
|
122
|
-
const userAgent = this.ctx.get('user-agent');
|
|
123
|
-
let isSameSiteNone = false;
|
|
124
|
-
// disable autoChips if partitioned enable
|
|
125
|
-
let autoChips = !opts.partitioned && this.#autoChips;
|
|
126
|
-
if (opts.sameSite && typeof opts.sameSite === 'string' && opts.sameSite.toLowerCase() === 'none') {
|
|
127
|
-
isSameSiteNone = true;
|
|
128
|
-
if (opts.secure === false || !this.secure || (userAgent && !this.isSameSiteNoneCompatible(userAgent))) {
|
|
129
|
-
// Non-secure context or Incompatible clients, don't send SameSite=None property
|
|
130
|
-
opts.sameSite = false;
|
|
131
|
-
isSameSiteNone = false;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
if (autoChips || opts.partitioned) {
|
|
135
|
-
// allow to set partitioned: secure=true and sameSite=none and chrome >= 118
|
|
136
|
-
if (!isSameSiteNone || opts.secure === false || !this.secure || (userAgent && !this.isPartitionedCompatible(userAgent))) {
|
|
137
|
-
// Non-secure context or Incompatible clients, don't send partitioned property
|
|
138
|
-
autoChips = false;
|
|
139
|
-
opts.partitioned = false;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// remove unpartitioned same name cookie first
|
|
143
|
-
if (opts.partitioned && opts.removeUnpartitioned) {
|
|
144
|
-
const overwrite = opts.overwrite;
|
|
145
|
-
if (overwrite) {
|
|
146
|
-
opts.overwrite = false;
|
|
147
|
-
headers = ignoreCookiesByName(headers, name);
|
|
148
|
-
}
|
|
149
|
-
const removeCookieOpts = {
|
|
150
|
-
...opts,
|
|
151
|
-
partitioned: false,
|
|
152
|
-
};
|
|
153
|
-
const removeUnpartitionedCookie = new Cookie(name, '', removeCookieOpts);
|
|
154
|
-
// if user not set secure, reset secure to ctx.secure
|
|
155
|
-
if (opts.secure === undefined) {
|
|
156
|
-
removeUnpartitionedCookie.attrs.secure = this.secure;
|
|
157
|
-
}
|
|
158
|
-
headers = pushCookie(headers, removeUnpartitionedCookie);
|
|
159
|
-
// signed
|
|
160
|
-
if (signed) {
|
|
161
|
-
removeUnpartitionedCookie.name += '.sig';
|
|
162
|
-
headers = ignoreCookiesByNameAndPath(headers, removeUnpartitionedCookie.name, removeUnpartitionedCookie.attrs.path);
|
|
163
|
-
headers = pushCookie(headers, removeUnpartitionedCookie);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
else if (autoChips) {
|
|
167
|
-
// add _CHIPS-${name} prefix cookie
|
|
168
|
-
const newCookieName = this.#formatChipsCookieName(name);
|
|
169
|
-
const newCookieOpts = {
|
|
170
|
-
...opts,
|
|
171
|
-
partitioned: true,
|
|
172
|
-
};
|
|
173
|
-
const newPartitionedCookie = new Cookie(newCookieName, value, newCookieOpts);
|
|
174
|
-
// if user not set secure, reset secure to ctx.secure
|
|
175
|
-
if (opts.secure === undefined)
|
|
176
|
-
newPartitionedCookie.attrs.secure = this.secure;
|
|
177
|
-
headers = pushCookie(headers, newPartitionedCookie);
|
|
178
|
-
// signed
|
|
179
|
-
if (signed) {
|
|
180
|
-
newPartitionedCookie.value = value && this.keys.sign(newPartitionedCookie.toString());
|
|
181
|
-
newPartitionedCookie.name += '.sig';
|
|
182
|
-
headers = ignoreCookiesByNameAndPath(headers, newPartitionedCookie.name, newPartitionedCookie.attrs.path);
|
|
183
|
-
headers = pushCookie(headers, newPartitionedCookie);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
const cookie = new Cookie(name, value, opts);
|
|
187
|
-
// if user not set secure, reset secure to ctx.secure
|
|
188
|
-
if (opts.secure === undefined) {
|
|
189
|
-
cookie.attrs.secure = this.secure;
|
|
190
|
-
}
|
|
191
|
-
headers = pushCookie(headers, cookie);
|
|
192
|
-
// signed
|
|
193
|
-
if (signed) {
|
|
194
|
-
cookie.value = value && this.keys.sign(cookie.toString());
|
|
195
|
-
cookie.name += '.sig';
|
|
196
|
-
headers = pushCookie(headers, cookie);
|
|
197
|
-
}
|
|
198
|
-
this.ctx.set('set-cookie', headers);
|
|
199
|
-
return this;
|
|
200
|
-
}
|
|
201
|
-
#formatChipsCookieName(name) {
|
|
202
|
-
return `_CHIPS-${name}`;
|
|
203
|
-
}
|
|
204
|
-
#parseChromiumAndMajorVersion(userAgent) {
|
|
205
|
-
if (!this.#parseChromiumResult) {
|
|
206
|
-
this.#parseChromiumResult = parseChromiumAndMajorVersion(userAgent);
|
|
207
|
-
}
|
|
208
|
-
return this.#parseChromiumResult;
|
|
209
|
-
}
|
|
210
|
-
isSameSiteNoneCompatible(userAgent) {
|
|
211
|
-
// Chrome >= 80.0.0.0
|
|
212
|
-
const result = this.#parseChromiumAndMajorVersion(userAgent);
|
|
213
|
-
if (result.chromium) {
|
|
214
|
-
return result.majorVersion >= 80;
|
|
215
|
-
}
|
|
216
|
-
return isSameSiteNoneCompatible(userAgent);
|
|
217
|
-
}
|
|
218
|
-
isPartitionedCompatible(userAgent) {
|
|
219
|
-
// support: Chrome >= 114.0.0.0
|
|
220
|
-
// default enable: Chrome >= 118.0.0.0
|
|
221
|
-
// https://developers.google.com/privacy-sandbox/3pcd/chips
|
|
222
|
-
const result = this.#parseChromiumAndMajorVersion(userAgent);
|
|
223
|
-
if (result.chromium) {
|
|
224
|
-
return result.majorVersion >= 118;
|
|
225
|
-
}
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
// https://github.com/linsight/should-send-same-site-none/blob/master/index.js#L86
|
|
230
|
-
function parseChromiumAndMajorVersion(userAgent) {
|
|
231
|
-
const m = /Chrom[^ /]{1,100}\/(\d{1,100}?)\./.exec(userAgent);
|
|
232
|
-
if (!m) {
|
|
233
|
-
return { chromium: false, majorVersion: 0 };
|
|
234
|
-
}
|
|
235
|
-
// Extract digits from first capturing group.
|
|
236
|
-
return { chromium: true, majorVersion: parseInt(m[1]) };
|
|
237
|
-
}
|
|
238
|
-
const _patternCache = new Map();
|
|
239
|
-
function getPattern(name) {
|
|
240
|
-
const cache = _patternCache.get(name);
|
|
241
|
-
if (cache) {
|
|
242
|
-
return cache;
|
|
243
|
-
}
|
|
244
|
-
const reg = new RegExp('(?:^|;) *' +
|
|
245
|
-
name.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +
|
|
246
|
-
'=([^;]*)');
|
|
247
|
-
_patternCache.set(name, reg);
|
|
248
|
-
return reg;
|
|
249
|
-
}
|
|
250
|
-
function computeSigned(opts) {
|
|
251
|
-
// encrypt default to false, signed default to true.
|
|
252
|
-
// disable singed when encrypt is true.
|
|
253
|
-
if (opts.encrypt)
|
|
254
|
-
return false;
|
|
255
|
-
return opts.signed !== false;
|
|
256
|
-
}
|
|
257
|
-
function pushCookie(cookies, cookie) {
|
|
258
|
-
if (cookie.attrs.overwrite) {
|
|
259
|
-
cookies = ignoreCookiesByName(cookies, cookie.name);
|
|
260
|
-
}
|
|
261
|
-
cookies.push(cookie.toHeader());
|
|
262
|
-
return cookies;
|
|
263
|
-
}
|
|
264
|
-
function ignoreCookiesByName(cookies, name) {
|
|
265
|
-
const prefix = `${name}=`;
|
|
266
|
-
return cookies.filter(c => !c.startsWith(prefix));
|
|
267
|
-
}
|
|
268
|
-
function ignoreCookiesByNameAndPath(cookies, name, path) {
|
|
269
|
-
if (!path) {
|
|
270
|
-
return ignoreCookiesByName(cookies, name);
|
|
271
|
-
}
|
|
272
|
-
const prefix = `${name}=`;
|
|
273
|
-
// foo=hello; path=/path1; samesite=none
|
|
274
|
-
const includedPath = `; path=${path};`;
|
|
275
|
-
// foo=hello; path=/path1
|
|
276
|
-
const endsWithPath = `; path=${path}`;
|
|
277
|
-
return cookies.filter(c => {
|
|
278
|
-
if (c.startsWith(prefix)) {
|
|
279
|
-
if (c.includes(includedPath) || c.endsWith(endsWithPath)) {
|
|
280
|
-
return false;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
return true;
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29va2llcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb29raWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxNQUFNLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7QUFvQjlDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBQ1QsVUFBVSxDQUFXO0lBQzlCLEtBQUssQ0FBVTtJQUNOLHFCQUFxQixDQUF3QjtJQUM3QyxVQUFVLENBQVc7SUFDckIsR0FBRyxDQUFzQjtJQUN6QixHQUFHLENBQXNCO0lBQ3pCLE1BQU0sQ0FBVTtJQUN6QixvQkFBb0IsQ0FBdUI7SUFFM0MsWUFBWSxHQUF3QixFQUFFLElBQWMsRUFBRSxvQkFBMkM7UUFDL0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFvQixFQUFFLFNBQVMsQ0FBQztRQUNsRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJ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
|
package/dist/esm/error.d.ts
DELETED
package/dist/esm/error.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export class CookieError extends Error {
|
|
2
|
-
constructor(message, options) {
|
|
3
|
-
super(message, options);
|
|
4
|
-
this.name = this.constructor.name;
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVksU0FBUSxLQUFLO0lBQ3BDLFlBQVksT0FBZSxFQUFFLE9BQXNCO1FBQ2pELEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO0NBQ0YifQ==
|
package/dist/esm/index.d.ts
DELETED
package/dist/esm/index.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './cookies.js';
|
|
2
|
-
export * from './cookie.js';
|
|
3
|
-
export * from './error.js';
|
|
4
|
-
export * from './keygrip.js';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxjQUFjLENBQUMifQ==
|
package/dist/esm/keygrip.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare class Keygrip {
|
|
2
|
-
#private;
|
|
3
|
-
constructor(keys: string[]);
|
|
4
|
-
encrypt(data: string, key?: string): Buffer<ArrayBuffer>;
|
|
5
|
-
decrypt(data: string | Buffer): {
|
|
6
|
-
value: Buffer;
|
|
7
|
-
index: number;
|
|
8
|
-
} | false;
|
|
9
|
-
sign(data: string | Buffer, key?: string): string;
|
|
10
|
-
verify(data: string, digest: string): number;
|
|
11
|
-
}
|
package/dist/esm/keygrip.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { debuglog } from 'node:util';
|
|
2
|
-
import crypto from 'node:crypto';
|
|
3
|
-
import assert from 'node:assert';
|
|
4
|
-
const debug = debuglog('@eggjs/cookies:keygrip');
|
|
5
|
-
const KEY_LEN = 32;
|
|
6
|
-
const IV_SIZE = 16;
|
|
7
|
-
const passwordCache = new Map();
|
|
8
|
-
const replacer = {
|
|
9
|
-
'/': '_',
|
|
10
|
-
'+': '-',
|
|
11
|
-
'=': '',
|
|
12
|
-
};
|
|
13
|
-
function constantTimeCompare(a, b) {
|
|
14
|
-
if (a.length !== b.length) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
return crypto.timingSafeEqual(a, b);
|
|
18
|
-
}
|
|
19
|
-
// patch from https://github.com/crypto-utils/keygrip
|
|
20
|
-
export class Keygrip {
|
|
21
|
-
#keys;
|
|
22
|
-
#hash = 'sha256';
|
|
23
|
-
#cipher = 'aes-256-cbc';
|
|
24
|
-
constructor(keys) {
|
|
25
|
-
assert(Array.isArray(keys) && keys.length > 0, 'keys must be provided and should be an array');
|
|
26
|
-
this.#keys = keys;
|
|
27
|
-
}
|
|
28
|
-
// encrypt a message
|
|
29
|
-
encrypt(data, key) {
|
|
30
|
-
key = key || this.#keys[0];
|
|
31
|
-
const password = keyToPassword(key);
|
|
32
|
-
const cipher = crypto.createCipheriv(this.#cipher, password.key, password.iv);
|
|
33
|
-
return crypt(cipher, data);
|
|
34
|
-
}
|
|
35
|
-
// decrypt a single message
|
|
36
|
-
// returns false on bad decrypts
|
|
37
|
-
decrypt(data) {
|
|
38
|
-
// decrypt every key
|
|
39
|
-
const keys = this.#keys;
|
|
40
|
-
for (let i = 0; i < keys.length; i++) {
|
|
41
|
-
const value = this.#decryptByKey(data, keys[i]);
|
|
42
|
-
if (value !== false) {
|
|
43
|
-
return { value, index: i };
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
#decryptByKey(data, key) {
|
|
49
|
-
try {
|
|
50
|
-
const password = keyToPassword(key);
|
|
51
|
-
const cipher = crypto.createDecipheriv(this.#cipher, password.key, password.iv);
|
|
52
|
-
return crypt(cipher, data);
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
debug('crypt error: %s', err);
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
sign(data, key) {
|
|
60
|
-
// default to the first key
|
|
61
|
-
key = key || this.#keys[0];
|
|
62
|
-
// url safe base64
|
|
63
|
-
return crypto
|
|
64
|
-
.createHmac(this.#hash, key)
|
|
65
|
-
.update(data)
|
|
66
|
-
.digest('base64')
|
|
67
|
-
.replace(/\/|\+|=/g, x => {
|
|
68
|
-
return replacer[x];
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
verify(data, digest) {
|
|
72
|
-
const keys = this.#keys;
|
|
73
|
-
for (let i = 0; i < keys.length; i++) {
|
|
74
|
-
const key = keys[i];
|
|
75
|
-
if (constantTimeCompare(Buffer.from(digest), Buffer.from(this.sign(data, key)))) {
|
|
76
|
-
debug('data %s match key %s, index: %d', data, key, i);
|
|
77
|
-
return i;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return -1;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function crypt(cipher, data) {
|
|
84
|
-
const text = Buffer.isBuffer(data) ? cipher.update(data) : cipher.update(data, 'utf-8');
|
|
85
|
-
const pad = cipher.final();
|
|
86
|
-
return Buffer.concat([text, pad]);
|
|
87
|
-
}
|
|
88
|
-
function keyToPassword(key) {
|
|
89
|
-
if (passwordCache.has(key)) {
|
|
90
|
-
return passwordCache.get(key);
|
|
91
|
-
}
|
|
92
|
-
// Simulate EVP_BytesToKey.
|
|
93
|
-
// see https://github.com/nodejs/help/issues/1673#issuecomment-503222925
|
|
94
|
-
const bytes = Buffer.alloc(KEY_LEN + IV_SIZE);
|
|
95
|
-
let lastHash = null, nBytes = 0;
|
|
96
|
-
while (nBytes < bytes.length) {
|
|
97
|
-
const hash = crypto.createHash('md5');
|
|
98
|
-
if (lastHash)
|
|
99
|
-
hash.update(lastHash);
|
|
100
|
-
hash.update(key);
|
|
101
|
-
lastHash = hash.digest();
|
|
102
|
-
lastHash.copy(bytes, nBytes);
|
|
103
|
-
nBytes += lastHash.length;
|
|
104
|
-
}
|
|
105
|
-
// Use these for decryption.
|
|
106
|
-
const password = {
|
|
107
|
-
key: bytes.subarray(0, KEY_LEN),
|
|
108
|
-
iv: bytes.subarray(KEY_LEN, bytes.length),
|
|
109
|
-
};
|
|
110
|
-
passwordCache.set(key, password);
|
|
111
|
-
return password;
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Z3JpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXlncmlwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxNQUF1QixNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFakQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ25CLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBRWhDLE1BQU0sUUFBUSxHQUEyQjtJQUN2QyxHQUFHLEVBQUUsR0FBRztJQUNSLEdBQUcsRUFBRSxHQUFHO0lBQ1IsR0FBRyxFQUFFLEVBQUU7Q0FDUixDQUFDO0FBRUYsU0FBUyxtQkFBbUIsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMvQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVELHFEQUFxRDtBQUVyRCxNQUFNLE9BQU8sT0FBTztJQUNULEtBQUssQ0FBVztJQUNoQixLQUFLLEdBQUcsUUFBUSxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxhQUFhLENBQUM7SUFFakMsWUFBWSxJQUFjO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLDhDQUE4QyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIs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
|
package/dist/esm/package.json
DELETED
package/dist/package.json
DELETED
package/src/cookie.ts
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* RegExp to match field-content in RFC 7230 sec 3.2
|
|
5
|
-
*
|
|
6
|
-
* field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
|
|
7
|
-
* field-vchar = VCHAR / obs-text
|
|
8
|
-
* obs-text = %x80-FF
|
|
9
|
-
*/
|
|
10
|
-
const fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; // eslint-disable-line no-control-regex
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* RegExp to match Same-Site cookie attribute value.
|
|
14
|
-
* https://en.wikipedia.org/wiki/HTTP_cookie#SameSite_cookie
|
|
15
|
-
*/
|
|
16
|
-
const sameSiteRegExp = /^(?:none|lax|strict)$/i;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* RegExp to match Priority cookie attribute value.
|
|
20
|
-
*/
|
|
21
|
-
const PRIORITY_REGEXP = /^(?:low|medium|high)$/i;
|
|
22
|
-
|
|
23
|
-
export interface CookieSetOptions {
|
|
24
|
-
/**
|
|
25
|
-
* The path for the cookie to be set in
|
|
26
|
-
*/
|
|
27
|
-
path?: string | null;
|
|
28
|
-
/**
|
|
29
|
-
* The domain for the cookie
|
|
30
|
-
*/
|
|
31
|
-
domain?: string | (() => string);
|
|
32
|
-
/**
|
|
33
|
-
* Is overridable
|
|
34
|
-
*/
|
|
35
|
-
overwrite?: boolean;
|
|
36
|
-
/**
|
|
37
|
-
* Is the same site
|
|
38
|
-
*/
|
|
39
|
-
sameSite?: string | boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Encrypt the cookie's value or not
|
|
42
|
-
*/
|
|
43
|
-
encrypt?: boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Max age for browsers
|
|
46
|
-
*/
|
|
47
|
-
maxAge?: number;
|
|
48
|
-
/**
|
|
49
|
-
* Expire time
|
|
50
|
-
*/
|
|
51
|
-
expires?: Date;
|
|
52
|
-
/**
|
|
53
|
-
* Is for http only
|
|
54
|
-
*/
|
|
55
|
-
httpOnly?: boolean;
|
|
56
|
-
/**
|
|
57
|
-
* Encrypt the cookie's value or not
|
|
58
|
-
*/
|
|
59
|
-
secure?: boolean;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Once `true` and secure set to `true`, ignore the secure error in a none-ssl environment.
|
|
63
|
-
*/
|
|
64
|
-
ignoreSecureError?: boolean;
|
|
65
|
-
/**
|
|
66
|
-
* Is it signed or not.
|
|
67
|
-
*/
|
|
68
|
-
signed?: boolean | number;
|
|
69
|
-
/**
|
|
70
|
-
* Is it partitioned or not.
|
|
71
|
-
*/
|
|
72
|
-
partitioned?: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* Remove unpartitioned same name cookie or not.
|
|
75
|
-
*/
|
|
76
|
-
removeUnpartitioned?: boolean;
|
|
77
|
-
/**
|
|
78
|
-
* The cookie priority.
|
|
79
|
-
*/
|
|
80
|
-
priority?: 'low' | 'medium' | 'high' | 'LOW' | 'MEDIUM' | 'HIGH';
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export class Cookie {
|
|
84
|
-
name: string;
|
|
85
|
-
value: string;
|
|
86
|
-
readonly attrs: CookieSetOptions;
|
|
87
|
-
|
|
88
|
-
constructor(name: string, value?: string | null, attrs?: CookieSetOptions) {
|
|
89
|
-
assert(fieldContentRegExp.test(name), 'argument name is invalid');
|
|
90
|
-
assert(!value || fieldContentRegExp.test(value), 'argument value is invalid');
|
|
91
|
-
this.name = name;
|
|
92
|
-
this.value = value ?? '';
|
|
93
|
-
this.attrs = mergeDefaultAttrs(attrs);
|
|
94
|
-
assert(!this.attrs.path || fieldContentRegExp.test(this.attrs.path),
|
|
95
|
-
'argument option path is invalid');
|
|
96
|
-
if (typeof this.attrs.domain === 'function') {
|
|
97
|
-
this.attrs.domain = this.attrs.domain();
|
|
98
|
-
}
|
|
99
|
-
assert(!this.attrs.domain || fieldContentRegExp.test(this.attrs.domain),
|
|
100
|
-
'argument option domain is invalid');
|
|
101
|
-
assert(!this.attrs.sameSite || this.attrs.sameSite === true || sameSiteRegExp.test(this.attrs.sameSite),
|
|
102
|
-
'argument option sameSite is invalid');
|
|
103
|
-
assert(!this.attrs.priority || PRIORITY_REGEXP.test(this.attrs.priority),
|
|
104
|
-
'argument option priority is invalid');
|
|
105
|
-
if (!value) {
|
|
106
|
-
this.attrs.expires = new Date(0);
|
|
107
|
-
// make sure maxAge is empty
|
|
108
|
-
this.attrs.maxAge = undefined;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
toString() {
|
|
113
|
-
return this.name + '=' + this.value;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
toHeader() {
|
|
117
|
-
let header = this.toString();
|
|
118
|
-
const attrs = this.attrs;
|
|
119
|
-
if (attrs.path) {
|
|
120
|
-
header += '; path=' + attrs.path;
|
|
121
|
-
}
|
|
122
|
-
const maxAge = typeof attrs.maxAge === 'string' ? parseInt(attrs.maxAge, 10) : attrs.maxAge;
|
|
123
|
-
// ignore 0, `session` and other invalid maxAge
|
|
124
|
-
if (maxAge) {
|
|
125
|
-
header += '; max-age=' + Math.round(maxAge / 1000);
|
|
126
|
-
attrs.expires = new Date(Date.now() + maxAge);
|
|
127
|
-
}
|
|
128
|
-
if (attrs.expires) {
|
|
129
|
-
header += '; expires=' + attrs.expires.toUTCString();
|
|
130
|
-
}
|
|
131
|
-
if (attrs.domain) {
|
|
132
|
-
header += '; domain=' + attrs.domain;
|
|
133
|
-
}
|
|
134
|
-
if (attrs.priority) {
|
|
135
|
-
header += '; priority=' + attrs.priority.toLowerCase();
|
|
136
|
-
}
|
|
137
|
-
if (attrs.sameSite) {
|
|
138
|
-
header += '; samesite=' + (attrs.sameSite === true ? 'strict' : attrs.sameSite.toLowerCase());
|
|
139
|
-
}
|
|
140
|
-
if (attrs.secure) {
|
|
141
|
-
header += '; secure';
|
|
142
|
-
}
|
|
143
|
-
if (attrs.httpOnly) {
|
|
144
|
-
header += '; httponly';
|
|
145
|
-
}
|
|
146
|
-
if (attrs.partitioned) {
|
|
147
|
-
header += '; partitioned';
|
|
148
|
-
}
|
|
149
|
-
return header;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
function mergeDefaultAttrs(attrs?: CookieSetOptions) {
|
|
154
|
-
const merged = {
|
|
155
|
-
path: '/',
|
|
156
|
-
httpOnly: true,
|
|
157
|
-
secure: false,
|
|
158
|
-
overwrite: false,
|
|
159
|
-
sameSite: false,
|
|
160
|
-
partitioned: false,
|
|
161
|
-
priority: undefined,
|
|
162
|
-
...attrs,
|
|
163
|
-
};
|
|
164
|
-
return merged;
|
|
165
|
-
}
|