@shware/security 2.5.3 → 2.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/dist/auth/index.cjs +520 -561
- package/dist/auth/index.cjs.map +1 -1
- package/dist/auth/index.d.cts +104 -106
- package/dist/auth/index.d.cts.map +1 -0
- package/dist/auth/index.d.mts +109 -0
- package/dist/auth/index.d.mts.map +1 -0
- package/dist/auth/index.mjs +513 -536
- package/dist/auth/index.mjs.map +1 -1
- package/dist/auth/types.cjs +0 -19
- package/dist/auth/types.d.cts +44 -44
- package/dist/auth/types.d.cts.map +1 -0
- package/dist/auth/types.d.mts +50 -0
- package/dist/auth/types.d.mts.map +1 -0
- package/dist/auth/types.mjs +1 -1
- package/dist/core/index.cjs +34 -59
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +23 -21
- package/dist/core/index.d.cts.map +1 -0
- package/dist/core/index.d.mts +34 -0
- package/dist/core/index.d.mts.map +1 -0
- package/dist/core/index.mjs +32 -33
- package/dist/core/index.mjs.map +1 -1
- package/dist/email/schema.cjs +13 -38
- package/dist/email/schema.cjs.map +1 -1
- package/dist/email/schema.d.cts +11 -12
- package/dist/email/schema.d.cts.map +1 -0
- package/dist/email/schema.d.mts +12 -0
- package/dist/email/schema.d.mts.map +1 -0
- package/dist/email/schema.mjs +10 -11
- package/dist/email/schema.mjs.map +1 -1
- package/dist/index.cjs +17 -54
- package/dist/index.d.cts +10 -15
- package/dist/index.d.mts +10 -0
- package/dist/index.mjs +4 -17
- package/dist/oauth2/client.cjs +109 -145
- package/dist/oauth2/client.cjs.map +1 -1
- package/dist/oauth2/client.d.cts +55 -56
- package/dist/oauth2/client.d.cts.map +1 -0
- package/dist/oauth2/client.d.mts +58 -0
- package/dist/oauth2/client.d.mts.map +1 -0
- package/dist/oauth2/client.mjs +104 -116
- package/dist/oauth2/client.mjs.map +1 -1
- package/dist/oauth2/error.cjs +19 -44
- package/dist/oauth2/error.cjs.map +1 -1
- package/dist/oauth2/error.d.cts +8 -6
- package/dist/oauth2/error.d.cts.map +1 -0
- package/dist/oauth2/{error.d.ts → error.d.mts} +8 -6
- package/dist/oauth2/error.d.mts.map +1 -0
- package/dist/oauth2/error.mjs +18 -19
- package/dist/oauth2/error.mjs.map +1 -1
- package/dist/oauth2/provider/apple.cjs +75 -88
- package/dist/oauth2/provider/apple.cjs.map +1 -1
- package/dist/oauth2/provider/apple.d.cts +31 -30
- package/dist/oauth2/provider/apple.d.cts.map +1 -0
- package/dist/oauth2/provider/apple.d.mts +42 -0
- package/dist/oauth2/provider/apple.d.mts.map +1 -0
- package/dist/oauth2/provider/apple.mjs +71 -60
- package/dist/oauth2/provider/apple.mjs.map +1 -1
- package/dist/oauth2/provider/common.cjs +86 -109
- package/dist/oauth2/provider/common.cjs.map +1 -1
- package/dist/oauth2/provider/common.d.cts +19 -18
- package/dist/oauth2/provider/common.d.cts.map +1 -0
- package/dist/oauth2/provider/common.d.mts +30 -0
- package/dist/oauth2/provider/common.d.mts.map +1 -0
- package/dist/oauth2/provider/common.mjs +80 -79
- package/dist/oauth2/provider/common.mjs.map +1 -1
- package/dist/oauth2/provider/facebook.cjs +93 -109
- package/dist/oauth2/provider/facebook.cjs.map +1 -1
- package/dist/oauth2/provider/facebook.d.cts +29 -28
- package/dist/oauth2/provider/facebook.d.cts.map +1 -0
- package/dist/oauth2/provider/facebook.d.mts +45 -0
- package/dist/oauth2/provider/facebook.d.mts.map +1 -0
- package/dist/oauth2/provider/facebook.mjs +89 -81
- package/dist/oauth2/provider/facebook.mjs.map +1 -1
- package/dist/oauth2/provider/github.cjs +64 -91
- package/dist/oauth2/provider/github.cjs.map +1 -1
- package/dist/oauth2/provider/github.d.cts +52 -51
- package/dist/oauth2/provider/github.d.cts.map +1 -0
- package/dist/oauth2/provider/github.d.mts +60 -0
- package/dist/oauth2/provider/github.d.mts.map +1 -0
- package/dist/oauth2/provider/github.mjs +60 -63
- package/dist/oauth2/provider/github.mjs.map +1 -1
- package/dist/oauth2/provider/google.cjs +105 -122
- package/dist/oauth2/provider/google.cjs.map +1 -1
- package/dist/oauth2/provider/google.d.cts +34 -33
- package/dist/oauth2/provider/google.d.cts.map +1 -0
- package/dist/oauth2/provider/google.d.mts +44 -0
- package/dist/oauth2/provider/google.d.mts.map +1 -0
- package/dist/oauth2/provider/google.mjs +101 -94
- package/dist/oauth2/provider/google.mjs.map +1 -1
- package/dist/oauth2/provider/index.cjs +13 -46
- package/dist/oauth2/provider/index.d.cts +7 -7
- package/dist/oauth2/provider/index.d.mts +7 -0
- package/dist/oauth2/provider/index.mjs +1 -10
- package/dist/oauth2/provider/wechat.cjs +77 -99
- package/dist/oauth2/provider/wechat.cjs.map +1 -1
- package/dist/oauth2/provider/wechat.d.cts +28 -27
- package/dist/oauth2/provider/wechat.d.cts.map +1 -0
- package/dist/oauth2/provider/wechat.d.mts +39 -0
- package/dist/oauth2/provider/wechat.d.mts.map +1 -0
- package/dist/oauth2/provider/wechat.mjs +74 -72
- package/dist/oauth2/provider/wechat.mjs.map +1 -1
- package/dist/oauth2/provider/x.cjs +102 -125
- package/dist/oauth2/provider/x.cjs.map +1 -1
- package/dist/oauth2/provider/x.d.cts +51 -50
- package/dist/oauth2/provider/x.d.cts.map +1 -0
- package/dist/oauth2/provider/x.d.mts +69 -0
- package/dist/oauth2/provider/x.d.mts.map +1 -0
- package/dist/oauth2/provider/x.mjs +99 -103
- package/dist/oauth2/provider/x.mjs.map +1 -1
- package/dist/oauth2/types.cjs +13 -37
- package/dist/oauth2/types.cjs.map +1 -1
- package/dist/oauth2/types.d.cts +180 -178
- package/dist/oauth2/types.d.cts.map +1 -0
- package/dist/oauth2/types.d.mts +213 -0
- package/dist/oauth2/types.d.mts.map +1 -0
- package/dist/oauth2/types.mjs +13 -13
- package/dist/oauth2/types.mjs.map +1 -1
- package/dist/session/common.cjs +17 -43
- package/dist/session/common.cjs.map +1 -1
- package/dist/session/common.d.cts +4 -4
- package/dist/session/common.d.cts.map +1 -0
- package/dist/session/{common.d.ts → common.d.mts} +4 -4
- package/dist/session/common.d.mts.map +1 -0
- package/dist/session/common.mjs +14 -16
- package/dist/session/common.mjs.map +1 -1
- package/dist/session/db.cjs +88 -123
- package/dist/session/db.cjs.map +1 -1
- package/dist/session/db.d.cts +36 -36
- package/dist/session/db.d.cts.map +1 -0
- package/dist/session/db.d.mts +44 -0
- package/dist/session/db.d.mts.map +1 -0
- package/dist/session/db.mjs +84 -95
- package/dist/session/db.mjs.map +1 -1
- package/dist/session/map-session.cjs +71 -103
- package/dist/session/map-session.cjs.map +1 -1
- package/dist/session/map-session.d.cts +24 -24
- package/dist/session/map-session.d.cts.map +1 -0
- package/dist/session/map-session.d.mts +27 -0
- package/dist/session/map-session.d.mts.map +1 -0
- package/dist/session/map-session.mjs +70 -78
- package/dist/session/map-session.mjs.map +1 -1
- package/dist/session/redis.cjs +270 -319
- package/dist/session/redis.cjs.map +1 -1
- package/dist/session/redis.d.cts +51 -51
- package/dist/session/redis.d.cts.map +1 -0
- package/dist/session/redis.d.mts +58 -0
- package/dist/session/redis.d.mts.map +1 -0
- package/dist/session/redis.mjs +266 -291
- package/dist/session/redis.mjs.map +1 -1
- package/dist/session/types.cjs +0 -19
- package/dist/session/types.d.cts +34 -33
- package/dist/session/types.d.cts.map +1 -0
- package/dist/session/types.d.mts +45 -0
- package/dist/session/types.d.mts.map +1 -0
- package/dist/session/types.mjs +1 -1
- package/dist/utils/http.cjs +31 -55
- package/dist/utils/http.cjs.map +1 -1
- package/dist/utils/http.d.cts +7 -10
- package/dist/utils/http.d.cts.map +1 -0
- package/dist/utils/{http.d.ts → http.d.mts} +7 -10
- package/dist/utils/http.d.mts.map +1 -0
- package/dist/utils/http.mjs +24 -24
- package/dist/utils/http.mjs.map +1 -1
- package/dist/utils/oauth2.cjs +6 -30
- package/dist/utils/oauth2.cjs.map +1 -1
- package/dist/utils/oauth2.d.cts +3 -1
- package/dist/utils/oauth2.d.cts.map +1 -0
- package/dist/utils/oauth2.d.mts +5 -0
- package/dist/utils/oauth2.d.mts.map +1 -0
- package/dist/utils/oauth2.mjs +5 -5
- package/dist/utils/oauth2.mjs.map +1 -1
- package/dist/utils/timing.cjs +49 -70
- package/dist/utils/timing.cjs.map +1 -1
- package/dist/utils/timing.d.cts +10 -8
- package/dist/utils/timing.d.cts.map +1 -0
- package/dist/utils/timing.d.mts +15 -0
- package/dist/utils/timing.d.mts.map +1 -0
- package/dist/utils/timing.mjs +48 -45
- package/dist/utils/timing.mjs.map +1 -1
- package/dist/utils/valid.cjs +50 -71
- package/dist/utils/valid.cjs.map +1 -1
- package/dist/utils/valid.d.cts +17 -16
- package/dist/utils/valid.d.cts.map +1 -0
- package/dist/utils/valid.d.mts +28 -0
- package/dist/utils/valid.d.mts.map +1 -0
- package/dist/utils/valid.mjs +47 -44
- package/dist/utils/valid.mjs.map +1 -1
- package/package.json +22 -12
- package/dist/auth/index.d.ts +0 -111
- package/dist/auth/types.cjs.map +0 -1
- package/dist/auth/types.d.ts +0 -50
- package/dist/auth/types.mjs.map +0 -1
- package/dist/core/index.d.ts +0 -32
- package/dist/email/schema.d.ts +0 -13
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts +0 -15
- package/dist/index.mjs.map +0 -1
- package/dist/oauth2/client.d.ts +0 -59
- package/dist/oauth2/provider/apple.d.ts +0 -41
- package/dist/oauth2/provider/common.d.ts +0 -29
- package/dist/oauth2/provider/facebook.d.ts +0 -44
- package/dist/oauth2/provider/github.d.ts +0 -59
- package/dist/oauth2/provider/google.d.ts +0 -43
- package/dist/oauth2/provider/index.cjs.map +0 -1
- package/dist/oauth2/provider/index.d.ts +0 -7
- package/dist/oauth2/provider/index.mjs.map +0 -1
- package/dist/oauth2/provider/wechat.d.ts +0 -38
- package/dist/oauth2/provider/x.d.ts +0 -68
- package/dist/oauth2/types.d.ts +0 -211
- package/dist/session/__tests__/redis.test.cjs +0 -247
- package/dist/session/__tests__/redis.test.cjs.map +0 -1
- package/dist/session/__tests__/redis.test.d.cts +0 -2
- package/dist/session/__tests__/redis.test.d.ts +0 -2
- package/dist/session/__tests__/redis.test.mjs +0 -252
- package/dist/session/__tests__/redis.test.mjs.map +0 -1
- package/dist/session/db.d.ts +0 -44
- package/dist/session/map-session.d.ts +0 -27
- package/dist/session/redis.d.ts +0 -58
- package/dist/session/types.cjs.map +0 -1
- package/dist/session/types.d.ts +0 -44
- package/dist/session/types.mjs.map +0 -1
- package/dist/utils/oauth2.d.ts +0 -3
- package/dist/utils/timing.d.ts +0 -13
- package/dist/utils/valid.d.ts +0 -27
package/dist/session/redis.cjs
CHANGED
|
@@ -1,328 +1,279 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/session/redis.ts
|
|
21
|
-
var redis_exports = {};
|
|
22
|
-
__export(redis_exports, {
|
|
23
|
-
RedisIndexedSessionRepository: () => RedisIndexedSessionRepository,
|
|
24
|
-
RedisKVRepository: () => RedisKVRepository
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(redis_exports);
|
|
27
|
-
var import_common = require("./common.cjs");
|
|
28
|
-
var import_map_session = require("./map-session.cjs");
|
|
29
|
-
var CREATION_TIME_KEY = "creationTime";
|
|
30
|
-
var LAST_ACCESSED_TIME_KEY = "lastAccessedTime";
|
|
31
|
-
var MAX_INACTIVE_INTERVAL_KEY = "maxInactiveInterval";
|
|
32
|
-
var ATTRIBUTE_PREFIX = "sessionAttr:";
|
|
33
|
-
var SESSION_EXPIRES_PREFIX = "expires:";
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_session_common = require("./common.cjs");
|
|
3
|
+
const require_session_map_session = require("./map-session.cjs");
|
|
4
|
+
//#region src/session/redis.ts
|
|
5
|
+
const CREATION_TIME_KEY = "creationTime";
|
|
6
|
+
const LAST_ACCESSED_TIME_KEY = "lastAccessedTime";
|
|
7
|
+
const MAX_INACTIVE_INTERVAL_KEY = "maxInactiveInterval";
|
|
8
|
+
const ATTRIBUTE_PREFIX = "sessionAttr:";
|
|
9
|
+
const SESSION_EXPIRES_PREFIX = "expires:";
|
|
34
10
|
var RedisSession = class {
|
|
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
|
-
}
|
|
11
|
+
cached;
|
|
12
|
+
isNew;
|
|
13
|
+
delta = /* @__PURE__ */ new Map();
|
|
14
|
+
originalSessionId;
|
|
15
|
+
originalPrincipalName;
|
|
16
|
+
originalLastAccessTime = null;
|
|
17
|
+
constructor(cached, isNew) {
|
|
18
|
+
this.cached = cached;
|
|
19
|
+
this.isNew = isNew;
|
|
20
|
+
this.originalSessionId = cached.getId();
|
|
21
|
+
this.originalPrincipalName = require_session_common.resolveIndexesFor(this);
|
|
22
|
+
if (isNew) {
|
|
23
|
+
this.delta.set(CREATION_TIME_KEY, cached.getCreationTime());
|
|
24
|
+
this.delta.set(LAST_ACCESSED_TIME_KEY, cached.getLastAccessedTime());
|
|
25
|
+
this.delta.set(MAX_INACTIVE_INTERVAL_KEY, cached.getMaxInactiveInterval());
|
|
26
|
+
this.cached.getAttributeNames().forEach((name) => {
|
|
27
|
+
const value = this.cached.getAttribute(name);
|
|
28
|
+
if (value) this.delta.set(this.getSessionAttrNameKey(name), value);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
getSessionAttrNameKey(name) {
|
|
33
|
+
return ATTRIBUTE_PREFIX + name;
|
|
34
|
+
}
|
|
35
|
+
setLastAccessedTime(lastAccessedTime) {
|
|
36
|
+
this.cached.setLastAccessedTime(lastAccessedTime);
|
|
37
|
+
this.delta.set(LAST_ACCESSED_TIME_KEY, lastAccessedTime);
|
|
38
|
+
}
|
|
39
|
+
isExpired() {
|
|
40
|
+
return this.cached.isExpired();
|
|
41
|
+
}
|
|
42
|
+
getCreationTime() {
|
|
43
|
+
return this.cached.getCreationTime();
|
|
44
|
+
}
|
|
45
|
+
getId() {
|
|
46
|
+
return this.cached.getId();
|
|
47
|
+
}
|
|
48
|
+
changeSessionId() {
|
|
49
|
+
return this.cached.changeSessionId();
|
|
50
|
+
}
|
|
51
|
+
getLastAccessedTime() {
|
|
52
|
+
return this.cached.getLastAccessedTime();
|
|
53
|
+
}
|
|
54
|
+
setMaxInactiveInterval(interval) {
|
|
55
|
+
this.cached.setMaxInactiveInterval(interval);
|
|
56
|
+
this.delta.set(MAX_INACTIVE_INTERVAL_KEY, interval);
|
|
57
|
+
}
|
|
58
|
+
getMaxInactiveInterval() {
|
|
59
|
+
return this.cached.getMaxInactiveInterval();
|
|
60
|
+
}
|
|
61
|
+
getAttribute(name) {
|
|
62
|
+
return this.cached.getAttribute(name);
|
|
63
|
+
}
|
|
64
|
+
getAttributeNames() {
|
|
65
|
+
return this.cached.getAttributeNames();
|
|
66
|
+
}
|
|
67
|
+
setAttribute(name, value) {
|
|
68
|
+
this.cached.setAttribute(name, value);
|
|
69
|
+
this.delta.set(this.getSessionAttrNameKey(name), value);
|
|
70
|
+
}
|
|
71
|
+
removeAttribute(name) {
|
|
72
|
+
this.cached.removeAttribute(name);
|
|
73
|
+
this.delta.set(this.getSessionAttrNameKey(name), null);
|
|
74
|
+
}
|
|
100
75
|
};
|
|
101
76
|
var SortedSetRedisSessionExpirationStore = class {
|
|
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
|
-
|
|
77
|
+
redis;
|
|
78
|
+
namespace;
|
|
79
|
+
expirationsKey;
|
|
80
|
+
constructor(redis, namespace) {
|
|
81
|
+
this.redis = redis;
|
|
82
|
+
this.namespace = namespace;
|
|
83
|
+
this.expirationsKey = `${this.namespace}:sessions:expirations`;
|
|
84
|
+
}
|
|
85
|
+
getSessionKey(sessionId) {
|
|
86
|
+
return `${this.namespace}:sessions:${sessionId}`;
|
|
87
|
+
}
|
|
88
|
+
async save(session) {
|
|
89
|
+
const expirationInMillis = session.getLastAccessedTime() + session.getMaxInactiveInterval() * 1e3;
|
|
90
|
+
await this.redis.zadd(this.expirationsKey, expirationInMillis, session.getId());
|
|
91
|
+
}
|
|
92
|
+
async remove(sessionId) {
|
|
93
|
+
await this.redis.zrem(this.expirationsKey, sessionId);
|
|
94
|
+
}
|
|
95
|
+
async rename(session) {
|
|
96
|
+
if (session.originalSessionId === null || session.originalSessionId === session.getId()) return;
|
|
97
|
+
await this.remove(session.originalSessionId);
|
|
98
|
+
await this.save(session);
|
|
99
|
+
}
|
|
100
|
+
async cleanupExpiredSessions(cleanupCount = 100) {
|
|
101
|
+
const key = this.expirationsKey;
|
|
102
|
+
const score = Date.now();
|
|
103
|
+
const sessionIds = await this.redis.zrevrangebyscore(key, score, 0, "LIMIT", 0, cleanupCount);
|
|
104
|
+
if (sessionIds.length === 0) return;
|
|
105
|
+
for (const sessionId of sessionIds) {
|
|
106
|
+
const sessionKey = this.getSessionKey(sessionId);
|
|
107
|
+
await this.redis.exists(sessionKey);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
135
110
|
};
|
|
136
111
|
var RedisIndexedSessionRepository = class {
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
const principalKey = this.getPrincipalKey(indexValue);
|
|
284
|
-
const sessionIds = await this.redis.smembers(principalKey);
|
|
285
|
-
if (!sessionIds || sessionIds.length === 0) {
|
|
286
|
-
return /* @__PURE__ */ new Map();
|
|
287
|
-
}
|
|
288
|
-
const sessions = /* @__PURE__ */ new Map();
|
|
289
|
-
for (const sessionId of sessionIds) {
|
|
290
|
-
const session = await this.findById(sessionId);
|
|
291
|
-
if (session !== null) {
|
|
292
|
-
sessions.set(sessionId, session);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
return sessions;
|
|
296
|
-
}
|
|
297
|
-
async findByPrincipalName(principalName) {
|
|
298
|
-
return this.findByIndexNameAndIndexValue(import_common.PRINCIPAL_NAME_INDEX_NAME, principalName);
|
|
299
|
-
}
|
|
300
|
-
async cleanupExpiredSessions(cleanupCount) {
|
|
301
|
-
await this.expirationStore.cleanupExpiredSessions(cleanupCount);
|
|
302
|
-
}
|
|
112
|
+
redis;
|
|
113
|
+
namespace;
|
|
114
|
+
expirationStore;
|
|
115
|
+
defaultMaxInactiveInterval = 1800;
|
|
116
|
+
constructor(redis, namespace = "spring:session") {
|
|
117
|
+
this.redis = redis;
|
|
118
|
+
this.namespace = namespace;
|
|
119
|
+
this.expirationStore = new SortedSetRedisSessionExpirationStore(redis, namespace);
|
|
120
|
+
}
|
|
121
|
+
setDefaultMaxInactiveInterval(interval) {
|
|
122
|
+
this.defaultMaxInactiveInterval = interval;
|
|
123
|
+
}
|
|
124
|
+
getSessionKey(sessionId) {
|
|
125
|
+
return `${this.namespace}:sessions:${sessionId}`;
|
|
126
|
+
}
|
|
127
|
+
getExpiredKey(sessionId) {
|
|
128
|
+
return `${this.namespace}:sessions:expires:${sessionId}`;
|
|
129
|
+
}
|
|
130
|
+
getSessionAttrNameKey(name) {
|
|
131
|
+
return ATTRIBUTE_PREFIX + name;
|
|
132
|
+
}
|
|
133
|
+
getPrincipalKey(principalName) {
|
|
134
|
+
return `${this.namespace}:index:${require_session_common.PRINCIPAL_NAME_INDEX_NAME}:${principalName}`;
|
|
135
|
+
}
|
|
136
|
+
async getSession(id, allowExpired) {
|
|
137
|
+
const key = this.getSessionKey(id);
|
|
138
|
+
const entries = await this.redis.hgetall(key);
|
|
139
|
+
if (!entries || Object.keys(entries).length === 0) return null;
|
|
140
|
+
const loaded = new require_session_map_session.MapSession(id);
|
|
141
|
+
if (!entries.creationTime) throw new Error("creationTime attribute not found");
|
|
142
|
+
if (!entries.lastAccessedTime) throw new Error("lastAccessedTime attribute not found");
|
|
143
|
+
if (!entries.maxInactiveInterval) throw new Error("maxInactiveInterval attribute not found");
|
|
144
|
+
loaded.setCreationTime(Number(entries.creationTime));
|
|
145
|
+
loaded.setLastAccessedTime(Number(entries.lastAccessedTime));
|
|
146
|
+
loaded.setMaxInactiveInterval(Number(entries.maxInactiveInterval));
|
|
147
|
+
for (const [key, value] of Object.entries(entries)) if (key.startsWith(ATTRIBUTE_PREFIX)) loaded.setAttribute(key.slice(12), value);
|
|
148
|
+
if (!allowExpired && loaded.isExpired()) return null;
|
|
149
|
+
const result = new RedisSession(loaded, false);
|
|
150
|
+
result.originalLastAccessTime = loaded.getLastAccessedTime();
|
|
151
|
+
return result;
|
|
152
|
+
}
|
|
153
|
+
async saveDelta(session) {
|
|
154
|
+
if (session.delta.size === 0) return;
|
|
155
|
+
const sessionId = session.getId();
|
|
156
|
+
const delta = /* @__PURE__ */ new Map();
|
|
157
|
+
const removes = [];
|
|
158
|
+
session.delta.forEach((value, key) => {
|
|
159
|
+
if (value !== null) delta.set(key, value);
|
|
160
|
+
else removes.push(key);
|
|
161
|
+
});
|
|
162
|
+
if (delta.size !== 0) await this.redis.hset(this.getSessionKey(sessionId), delta);
|
|
163
|
+
if (removes.length !== 0) await this.redis.hdel(this.getSessionKey(sessionId), ...removes);
|
|
164
|
+
const principalSessionKey = this.getSessionAttrNameKey(require_session_common.PRINCIPAL_NAME_INDEX_NAME);
|
|
165
|
+
const securityPrincipalSessionKey = this.getSessionAttrNameKey(require_session_common.SPRING_SECURITY_CONTEXT);
|
|
166
|
+
if (session.delta.has(principalSessionKey) || session.delta.has(securityPrincipalSessionKey)) {
|
|
167
|
+
if (session.originalPrincipalName !== null) {
|
|
168
|
+
const originalPrincipalRedisKey = this.getPrincipalKey(session.originalPrincipalName);
|
|
169
|
+
await this.redis.srem(originalPrincipalRedisKey, sessionId);
|
|
170
|
+
}
|
|
171
|
+
const principal = require_session_common.resolveIndexesFor(session);
|
|
172
|
+
session.originalPrincipalName = principal;
|
|
173
|
+
if (principal !== null) {
|
|
174
|
+
const principalRedisKey = this.getPrincipalKey(principal);
|
|
175
|
+
await this.redis.sadd(principalRedisKey, sessionId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (session.isNew) session.isNew = false;
|
|
179
|
+
const sessionExpireInSeconds = session.getMaxInactiveInterval();
|
|
180
|
+
const keyToExpire = SESSION_EXPIRES_PREFIX + session.getId();
|
|
181
|
+
const sessionKey = this.getSessionKey(keyToExpire);
|
|
182
|
+
if (sessionExpireInSeconds < 0) {
|
|
183
|
+
await this.redis.append(sessionKey, "");
|
|
184
|
+
await this.redis.persist(sessionKey);
|
|
185
|
+
await this.redis.persist(this.getSessionKey(session.getId()));
|
|
186
|
+
} else if (sessionExpireInSeconds === 0) await this.redis.del(sessionKey);
|
|
187
|
+
else {
|
|
188
|
+
await this.redis.append(sessionKey, "");
|
|
189
|
+
await this.redis.expire(sessionKey, sessionExpireInSeconds);
|
|
190
|
+
}
|
|
191
|
+
if (sessionExpireInSeconds > 0) {
|
|
192
|
+
const fiveMinutesAfterExpires = sessionExpireInSeconds + 300;
|
|
193
|
+
await this.redis.expire(this.getSessionKey(session.getId()), fiveMinutesAfterExpires);
|
|
194
|
+
}
|
|
195
|
+
await this.expirationStore.save(session);
|
|
196
|
+
session.delta.clear();
|
|
197
|
+
}
|
|
198
|
+
async saveChangeSessionId(session) {
|
|
199
|
+
const sessionId = session.getId();
|
|
200
|
+
if (sessionId === session.originalSessionId) return;
|
|
201
|
+
if (!session.isNew) {
|
|
202
|
+
const originalSessionIdKey = this.getSessionKey(session.originalSessionId);
|
|
203
|
+
const sessionIdKey = this.getSessionKey(sessionId);
|
|
204
|
+
const originalExpiredKey = this.getExpiredKey(session.originalSessionId);
|
|
205
|
+
const expiredKey = this.getExpiredKey(sessionId);
|
|
206
|
+
await this.redis.rename(originalSessionIdKey, sessionIdKey);
|
|
207
|
+
await this.redis.rename(originalExpiredKey, expiredKey);
|
|
208
|
+
if (session.originalPrincipalName !== null) {
|
|
209
|
+
const originalPrincipalRedisKey = this.getPrincipalKey(session.originalPrincipalName);
|
|
210
|
+
await this.redis.srem(originalPrincipalRedisKey, session.originalSessionId);
|
|
211
|
+
await this.redis.sadd(originalPrincipalRedisKey, sessionId);
|
|
212
|
+
}
|
|
213
|
+
await this.expirationStore.rename(session);
|
|
214
|
+
}
|
|
215
|
+
session.originalSessionId = sessionId;
|
|
216
|
+
}
|
|
217
|
+
createSession() {
|
|
218
|
+
const cached = new require_session_map_session.MapSession();
|
|
219
|
+
cached.setMaxInactiveInterval(this.defaultMaxInactiveInterval);
|
|
220
|
+
return new RedisSession(cached, true);
|
|
221
|
+
}
|
|
222
|
+
async save(session) {
|
|
223
|
+
await this.saveChangeSessionId(session);
|
|
224
|
+
await this.saveDelta(session);
|
|
225
|
+
}
|
|
226
|
+
async findById(sessionId) {
|
|
227
|
+
return this.getSession(sessionId, false);
|
|
228
|
+
}
|
|
229
|
+
async deleteById(sessionId) {
|
|
230
|
+
const session = await this.getSession(sessionId, true);
|
|
231
|
+
if (!session) return;
|
|
232
|
+
const principal = require_session_common.resolveIndexesFor(session);
|
|
233
|
+
if (principal !== null) await this.redis.srem(this.getPrincipalKey(principal), sessionId);
|
|
234
|
+
await this.expirationStore.remove(sessionId);
|
|
235
|
+
const expiredKey = this.getExpiredKey(sessionId);
|
|
236
|
+
await this.redis.del(expiredKey);
|
|
237
|
+
session.setMaxInactiveInterval(0);
|
|
238
|
+
await this.save(session);
|
|
239
|
+
}
|
|
240
|
+
async findByIndexNameAndIndexValue(indexName, indexValue) {
|
|
241
|
+
if (indexName !== require_session_common.PRINCIPAL_NAME_INDEX_NAME) return /* @__PURE__ */ new Map();
|
|
242
|
+
const principalKey = this.getPrincipalKey(indexValue);
|
|
243
|
+
const sessionIds = await this.redis.smembers(principalKey);
|
|
244
|
+
if (!sessionIds || sessionIds.length === 0) return /* @__PURE__ */ new Map();
|
|
245
|
+
const sessions = /* @__PURE__ */ new Map();
|
|
246
|
+
for (const sessionId of sessionIds) {
|
|
247
|
+
const session = await this.findById(sessionId);
|
|
248
|
+
if (session !== null) sessions.set(sessionId, session);
|
|
249
|
+
}
|
|
250
|
+
return sessions;
|
|
251
|
+
}
|
|
252
|
+
async findByPrincipalName(principalName) {
|
|
253
|
+
return this.findByIndexNameAndIndexValue(require_session_common.PRINCIPAL_NAME_INDEX_NAME, principalName);
|
|
254
|
+
}
|
|
255
|
+
async cleanupExpiredSessions(cleanupCount) {
|
|
256
|
+
await this.expirationStore.cleanupExpiredSessions(cleanupCount);
|
|
257
|
+
}
|
|
303
258
|
};
|
|
304
259
|
var RedisKVRepository = class {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
async removeItem(key) {
|
|
320
|
-
await this.redis.del(key);
|
|
321
|
-
}
|
|
260
|
+
redis;
|
|
261
|
+
constructor(redis) {
|
|
262
|
+
this.redis = redis;
|
|
263
|
+
}
|
|
264
|
+
async setItem(key, value, expiresIn) {
|
|
265
|
+
if (expiresIn) await this.redis.set(key, value, "EX", expiresIn);
|
|
266
|
+
else await this.redis.set(key, value);
|
|
267
|
+
}
|
|
268
|
+
async getItem(key) {
|
|
269
|
+
return await this.redis.get(key);
|
|
270
|
+
}
|
|
271
|
+
async removeItem(key) {
|
|
272
|
+
await this.redis.del(key);
|
|
273
|
+
}
|
|
322
274
|
};
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
});
|
|
275
|
+
//#endregion
|
|
276
|
+
exports.RedisIndexedSessionRepository = RedisIndexedSessionRepository;
|
|
277
|
+
exports.RedisKVRepository = RedisKVRepository;
|
|
278
|
+
|
|
328
279
|
//# sourceMappingURL=redis.cjs.map
|