@0xchain/token 1.1.0-beta.63 → 1.1.0-beta.65

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.
@@ -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;AAYpD,+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"}
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
@@ -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;AAa9D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AA2BvD;;;;;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"}
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("refresh_token", nextRefreshToken, REFRESH_TOKEN_COOKIE_DAYS);
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,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xchain/token",
3
- "version": "1.1.0-beta.63",
3
+ "version": "1.1.0-beta.65",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",