@0xchain/token 1.1.0-beta.63 → 1.1.0-beta.64
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/cookieStore.d.ts +9 -0
- package/dist/cookieStore.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -21
- package/package.json +1 -1
package/dist/cookieStore.d.ts
CHANGED
|
@@ -11,6 +11,15 @@ export declare const COOKIE_PATH = "/";
|
|
|
11
11
|
export declare const COOKIE_SAME_SITE: "lax";
|
|
12
12
|
export declare const REFRESH_TOKEN_COOKIE_DAYS = 7;
|
|
13
13
|
export declare const DEFAULT_ACCESS_TOKEN_TTL_SECONDS = 3600;
|
|
14
|
+
export declare const RUNTIME_ENV: string;
|
|
15
|
+
/** 生产环境保持无后缀(兼容存量),其余环境按环境隔离 */
|
|
16
|
+
export declare const COOKIE_ENV_SUFFIX: string;
|
|
17
|
+
/**
|
|
18
|
+
* 生成环境作用域内的 cookie 名。
|
|
19
|
+
* 例:test 环境 `access_token` → `access_token__test`;生产环境保持 `access_token`。
|
|
20
|
+
* 幂等:已带后缀的名字不会重复追加。
|
|
21
|
+
*/
|
|
22
|
+
export declare function envCookieName(base: string): string;
|
|
14
23
|
/** js-cookie:number 表示「天数」,须用 Date 表示绝对过期时间 */
|
|
15
24
|
export declare function expiresFromSeconds(seconds: number): Date;
|
|
16
25
|
export declare const cookieStore: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookieStore.d.ts","sourceRoot":"","sources":["../src/cookieStore.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,gBAAgB,CAAA;AAC1C,eAAO,MAAM,WAAW,MAAM,CAAA;AAC9B,eAAO,MAAM,gBAAgB,EAAG,KAAc,CAAA;AAE9C,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAC1C,eAAO,MAAM,gCAAgC,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"cookieStore.d.ts","sourceRoot":"","sources":["../src/cookieStore.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,gBAAgB,CAAA;AAC1C,eAAO,MAAM,WAAW,MAAM,CAAA;AAC9B,eAAO,MAAM,gBAAgB,EAAG,KAAc,CAAA;AAE9C,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAC1C,eAAO,MAAM,gCAAgC,OAAO,CAAA;AAqBpD,eAAO,MAAM,WAAW,QAA2D,CAAA;AAEnF,gCAAgC;AAChC,eAAO,MAAM,iBAAiB,QAAyD,CAAA;AAEvF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AAYD,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,eAAO,MAAM,WAAW;aACb,MAAM,GAAG,MAAM;aAGf,MAAM,SAAS,MAAM,WAAW,IAAI,GAAG,MAAM,GAAG,IAAI;IAG7D;;;OAGG;gBACS,MAAM,GAAG,IAAI;CAG1B,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NextResponse } from 'next/server';
|
|
2
2
|
import { ITokenManager, ITokenManagerResponse } from './type';
|
|
3
3
|
export { decodeJwtPayload, isJwtExpired } from './jwt';
|
|
4
|
+
export { envCookieName, COOKIE_ENV_SUFFIX, RUNTIME_ENV, COOKIE_DOMAIN, } from './cookieStore';
|
|
4
5
|
/**
|
|
5
6
|
* 设置|更新token到cookie
|
|
6
7
|
* @param response NextResponse
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAc9D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC;AA+BvB;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,KAAK,qBAAqB,EAC1B,WAAW,YAAY,GAAG,IAAI,KAC7B,YAAY,GAAG,IA0DjB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,WAEpC,CAAC;AAEF,sCAAsC;AACtC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,GACX,qBAAqB,GAAG,IAAI,CAc9B;AAED,eAAO,MAAM,cAAc,YAM1B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,SAE5C,CAAC;AAEF,eAAO,MAAM,cAAc,wBA6C1B,CAAC;AAEF,QAAA,MAAM,YAAY,EAAE,aAMnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,18 @@ const COOKIE_PATH = "/";
|
|
|
15
15
|
const COOKIE_SAME_SITE = "lax";
|
|
16
16
|
const REFRESH_TOKEN_COOKIE_DAYS = 7;
|
|
17
17
|
const DEFAULT_ACCESS_TOKEN_TTL_SECONDS = 3600;
|
|
18
|
+
function normalizeRuntimeEnv(raw) {
|
|
19
|
+
const env = (raw || "").trim().toLowerCase();
|
|
20
|
+
if (!env || env === "prod" || env === "production") return "production";
|
|
21
|
+
return env;
|
|
22
|
+
}
|
|
23
|
+
const RUNTIME_ENV = normalizeRuntimeEnv(process.env.NEXT_PUBLIC_RUNTIME_ENV);
|
|
24
|
+
const COOKIE_ENV_SUFFIX = RUNTIME_ENV === "production" ? "" : `__${RUNTIME_ENV}`;
|
|
25
|
+
function envCookieName(base) {
|
|
26
|
+
if (!COOKIE_ENV_SUFFIX) return base;
|
|
27
|
+
if (base.endsWith(COOKIE_ENV_SUFFIX)) return base;
|
|
28
|
+
return `${base}${COOKIE_ENV_SUFFIX}`;
|
|
29
|
+
}
|
|
18
30
|
function baseAttributes() {
|
|
19
31
|
return {
|
|
20
32
|
domain: COOKIE_DOMAIN,
|
|
@@ -85,15 +97,19 @@ const cookieSetToken = (data) => {
|
|
|
85
97
|
}
|
|
86
98
|
const expiresIn = data?.expires_in ?? DEFAULT_ACCESS_TOKEN_TTL_SECONDS;
|
|
87
99
|
const accessExpires = expiresFromSeconds(expiresIn);
|
|
88
|
-
cookieStore.set("access_token", nextAccessToken, accessExpires);
|
|
100
|
+
cookieStore.set(envCookieName("access_token"), nextAccessToken, accessExpires);
|
|
89
101
|
if (nextRefreshToken) {
|
|
90
|
-
cookieStore.set(
|
|
102
|
+
cookieStore.set(
|
|
103
|
+
envCookieName("refresh_token"),
|
|
104
|
+
nextRefreshToken,
|
|
105
|
+
REFRESH_TOKEN_COOKIE_DAYS
|
|
106
|
+
);
|
|
91
107
|
}
|
|
92
108
|
if (nextIdToken) {
|
|
93
|
-
cookieStore.set("id_token", nextIdToken, accessExpires);
|
|
109
|
+
cookieStore.set(envCookieName("id_token"), nextIdToken, accessExpires);
|
|
94
110
|
}
|
|
95
111
|
cookieStore.set(
|
|
96
|
-
"token_expire",
|
|
112
|
+
envCookieName("token_expire"),
|
|
97
113
|
(Date.now() + expiresIn * 1e3).toString(),
|
|
98
114
|
accessExpires
|
|
99
115
|
);
|
|
@@ -111,7 +127,7 @@ const setToken = (res, response) => {
|
|
|
111
127
|
return response;
|
|
112
128
|
}
|
|
113
129
|
const secure = resolveCookieSecure();
|
|
114
|
-
response.cookies.set("access_token", nextAccessToken, {
|
|
130
|
+
response.cookies.set(envCookieName("access_token"), nextAccessToken, {
|
|
115
131
|
httpOnly: false,
|
|
116
132
|
maxAge: expiresIn,
|
|
117
133
|
domain: COOKIE_DOMAIN,
|
|
@@ -120,7 +136,7 @@ const setToken = (res, response) => {
|
|
|
120
136
|
path: COOKIE_PATH
|
|
121
137
|
});
|
|
122
138
|
if (nextRefreshToken) {
|
|
123
|
-
response.cookies.set("refresh_token", nextRefreshToken, {
|
|
139
|
+
response.cookies.set(envCookieName("refresh_token"), nextRefreshToken, {
|
|
124
140
|
httpOnly: false,
|
|
125
141
|
maxAge: 60 * 60 * 24 * REFRESH_TOKEN_COOKIE_DAYS,
|
|
126
142
|
domain: COOKIE_DOMAIN,
|
|
@@ -130,7 +146,7 @@ const setToken = (res, response) => {
|
|
|
130
146
|
});
|
|
131
147
|
}
|
|
132
148
|
if (nextIdToken) {
|
|
133
|
-
response.cookies.set("id_token", nextIdToken, {
|
|
149
|
+
response.cookies.set(envCookieName("id_token"), nextIdToken, {
|
|
134
150
|
httpOnly: false,
|
|
135
151
|
maxAge: expiresIn,
|
|
136
152
|
domain: COOKIE_DOMAIN,
|
|
@@ -140,7 +156,7 @@ const setToken = (res, response) => {
|
|
|
140
156
|
});
|
|
141
157
|
}
|
|
142
158
|
response.cookies.set(
|
|
143
|
-
"token_expire",
|
|
159
|
+
envCookieName("token_expire"),
|
|
144
160
|
(Date.now() + expiresIn * 1e3).toString(),
|
|
145
161
|
{
|
|
146
162
|
httpOnly: false,
|
|
@@ -154,7 +170,7 @@ const setToken = (res, response) => {
|
|
|
154
170
|
return response;
|
|
155
171
|
};
|
|
156
172
|
const getToken = (key) => {
|
|
157
|
-
return cookieStore.get(key || "id_token");
|
|
173
|
+
return cookieStore.get(envCookieName(key || "id_token"));
|
|
158
174
|
};
|
|
159
175
|
function normalizeTokenPayload(res) {
|
|
160
176
|
if (!res || typeof res !== "object") return null;
|
|
@@ -172,14 +188,14 @@ function normalizeTokenPayload(res) {
|
|
|
172
188
|
return null;
|
|
173
189
|
}
|
|
174
190
|
const removeAllToken = () => {
|
|
175
|
-
cookieStore.remove("id_token");
|
|
176
|
-
cookieStore.remove("access_token");
|
|
177
|
-
cookieStore.remove("refresh_token");
|
|
178
|
-
cookieStore.remove("sign_session");
|
|
179
|
-
cookieStore.remove("token_expire");
|
|
191
|
+
cookieStore.remove(envCookieName("id_token"));
|
|
192
|
+
cookieStore.remove(envCookieName("access_token"));
|
|
193
|
+
cookieStore.remove(envCookieName("refresh_token"));
|
|
194
|
+
cookieStore.remove(envCookieName("sign_session"));
|
|
195
|
+
cookieStore.remove(envCookieName("token_expire"));
|
|
180
196
|
};
|
|
181
197
|
const removeTokenByKey = (key) => {
|
|
182
|
-
cookieStore.remove(key || "id_token");
|
|
198
|
+
cookieStore.remove(envCookieName(key || "id_token"));
|
|
183
199
|
};
|
|
184
200
|
const isTokenExpired = async () => {
|
|
185
201
|
let t;
|
|
@@ -189,18 +205,18 @@ const isTokenExpired = async () => {
|
|
|
189
205
|
try {
|
|
190
206
|
const { cookies } = await import("next/headers");
|
|
191
207
|
const nextCookies = await cookies();
|
|
192
|
-
const tokenExpire = nextCookies.get("token_expire")?.value;
|
|
193
|
-
refreshToken = nextCookies.get("refresh_token")?.value;
|
|
194
|
-
accessToken = nextCookies.get("access_token")?.value;
|
|
208
|
+
const tokenExpire = nextCookies.get(envCookieName("token_expire"))?.value;
|
|
209
|
+
refreshToken = nextCookies.get(envCookieName("refresh_token"))?.value;
|
|
210
|
+
accessToken = nextCookies.get(envCookieName("access_token"))?.value;
|
|
195
211
|
t = tokenExpire ? Number(tokenExpire) : void 0;
|
|
196
212
|
} catch {
|
|
197
213
|
return false;
|
|
198
214
|
}
|
|
199
215
|
} else {
|
|
200
|
-
const rawExpire = cookieStore.get("token_expire");
|
|
216
|
+
const rawExpire = cookieStore.get(envCookieName("token_expire"));
|
|
201
217
|
t = rawExpire ? Number(rawExpire) : void 0;
|
|
202
|
-
refreshToken = cookieStore.get("refresh_token");
|
|
203
|
-
accessToken = cookieStore.get("access_token");
|
|
218
|
+
refreshToken = cookieStore.get(envCookieName("refresh_token"));
|
|
219
|
+
accessToken = cookieStore.get(envCookieName("access_token"));
|
|
204
220
|
}
|
|
205
221
|
const nearExpiry = (expireAt) => expireAt - Date.now() < 5 * 60 * 1e3;
|
|
206
222
|
if (accessToken) {
|
|
@@ -229,8 +245,12 @@ const TokenManager = {
|
|
|
229
245
|
isTokenExpired
|
|
230
246
|
};
|
|
231
247
|
export {
|
|
248
|
+
COOKIE_DOMAIN,
|
|
249
|
+
COOKIE_ENV_SUFFIX,
|
|
250
|
+
RUNTIME_ENV,
|
|
232
251
|
decodeJwtPayload,
|
|
233
252
|
TokenManager as default,
|
|
253
|
+
envCookieName,
|
|
234
254
|
getToken,
|
|
235
255
|
isJwtExpired,
|
|
236
256
|
isTokenExpired,
|