@rebasepro/server 0.10.0 → 0.10.1-canary.18115ba

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.
@@ -4165,6 +4165,7 @@ var require_jsonwebtoken = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4165
4165
  //#endregion
4166
4166
  //#region src/auth/jwt.ts
4167
4167
  var jwt_exports = /* @__PURE__ */ __exportAll({
4168
+ MAX_COOKIE_AGE_MS: () => MAX_COOKIE_AGE_MS,
4168
4169
  configureJwt: () => configureJwt,
4169
4170
  generateAccessToken: () => generateAccessToken,
4170
4171
  generateDownloadToken: () => generateDownloadToken,
@@ -4172,6 +4173,7 @@ var jwt_exports = /* @__PURE__ */ __exportAll({
4172
4173
  getAccessTokenExpiry: () => getAccessTokenExpiry,
4173
4174
  getAccessTokenExpiryMs: () => getAccessTokenExpiryMs,
4174
4175
  getRefreshTokenExpiry: () => getRefreshTokenExpiry,
4176
+ getRefreshTokenTtlMs: () => getRefreshTokenTtlMs,
4175
4177
  hashRefreshToken: () => hashRefreshToken,
4176
4178
  verifyAccessToken: () => verifyAccessToken,
4177
4179
  verifyDownloadToken: () => verifyDownloadToken
@@ -4180,7 +4182,7 @@ var import_jsonwebtoken = /* @__PURE__ */ __toESM(require_jsonwebtoken(), 1);
4180
4182
  var jwtConfig = {
4181
4183
  secret: "",
4182
4184
  accessExpiresIn: "1h",
4183
- refreshExpiresIn: "30d"
4185
+ refreshExpiresIn: "400d"
4184
4186
  };
4185
4187
  /**
4186
4188
  * Configure JWT settings - call this during initialization.
@@ -4306,30 +4308,40 @@ function hashRefreshToken(token) {
4306
4308
  return createHash("sha256").update(token).digest("hex");
4307
4309
  }
4308
4310
  /**
4309
- * Calculate refresh token expiration date
4311
+ * The longest a cookie can live. Chrome (since 104) and RFC 6265bis silently
4312
+ * rewrite any `Max-Age` beyond 400 days down to 400 days, so promising a
4313
+ * browser more is not a stricter policy — it is a policy that differs from
4314
+ * what is actually enforced, which is worse than knowing the ceiling.
4310
4315
  */
4311
- function getRefreshTokenExpiry() {
4312
- const match = (jwtConfig.refreshExpiresIn || "30d").match(/^(\d+)([dhms])$/);
4313
- if (!match) return new Date(Date.now() + 720 * 60 * 60 * 1e3);
4316
+ var MAX_COOKIE_AGE_MS = 400 * 24 * 60 * 60 * 1e3;
4317
+ /** Fallback when `refreshExpiresIn` is unset or unparseable. */
4318
+ var DEFAULT_REFRESH_TTL_MS = MAX_COOKIE_AGE_MS;
4319
+ /**
4320
+ * How long a refresh token is valid for, in milliseconds.
4321
+ *
4322
+ * Every rotation issues a token with a fresh TTL, so this is a sliding window:
4323
+ * a user who visits at all keeps their session indefinitely, and one who
4324
+ * disappears loses it this long after their last visit. That is what both
4325
+ * Firebase and Supabase do by default, and it is the behaviour people mean
4326
+ * when they say they expect to still be signed in.
4327
+ */
4328
+ function getRefreshTokenTtlMs() {
4329
+ const match = jwtConfig.refreshExpiresIn?.match(/^(\d+)([dhms])$/);
4330
+ if (!match) return DEFAULT_REFRESH_TTL_MS;
4314
4331
  const value = parseInt(match[1], 10);
4315
- const unit = match[2];
4316
- let ms;
4317
- switch (unit) {
4318
- case "d":
4319
- ms = value * 24 * 60 * 60 * 1e3;
4320
- break;
4321
- case "h":
4322
- ms = value * 60 * 60 * 1e3;
4323
- break;
4324
- case "m":
4325
- ms = value * 60 * 1e3;
4326
- break;
4327
- case "s":
4328
- ms = value * 1e3;
4329
- break;
4330
- default: ms = 720 * 60 * 60 * 1e3;
4332
+ switch (match[2]) {
4333
+ case "d": return value * 24 * 60 * 60 * 1e3;
4334
+ case "h": return value * 60 * 60 * 1e3;
4335
+ case "m": return value * 60 * 1e3;
4336
+ case "s": return value * 1e3;
4337
+ default: return DEFAULT_REFRESH_TTL_MS;
4331
4338
  }
4332
- return new Date(Date.now() + ms);
4339
+ }
4340
+ /**
4341
+ * Calculate refresh token expiration date
4342
+ */
4343
+ function getRefreshTokenExpiry() {
4344
+ return new Date(Date.now() + getRefreshTokenTtlMs());
4333
4345
  }
4334
4346
  /**
4335
4347
  * Generate a short-lived download token scoped to a specific file path or prefix
@@ -4363,6 +4375,6 @@ function verifyDownloadToken(token) {
4363
4375
  }
4364
4376
  }
4365
4377
  //#endregion
4366
- export { getAccessTokenExpiry as a, jwt_exports as c, require_jsonwebtoken as d, __commonJSMin as f, __toESM as h, generateRefreshToken as i, verifyAccessToken as l, __require as m, generateAccessToken as n, getRefreshTokenExpiry as o, __exportAll as p, generateDownloadToken as r, hashRefreshToken as s, configureJwt as t, verifyDownloadToken as u };
4378
+ export { __toESM as _, generateRefreshToken as a, getRefreshTokenTtlMs as c, verifyAccessToken as d, verifyDownloadToken as f, __require as g, __exportAll as h, generateDownloadToken as i, hashRefreshToken as l, __commonJSMin as m, configureJwt as n, getAccessTokenExpiry as o, require_jsonwebtoken as p, generateAccessToken as r, getRefreshTokenExpiry as s, MAX_COOKIE_AGE_MS as t, jwt_exports as u };
4367
4379
 
4368
- //# sourceMappingURL=jwt-B3zjddCa.js.map
4380
+ //# sourceMappingURL=jwt-Dj7r7QX7.js.map