@luckystack/core 0.8.3 → 0.8.4

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/CLAUDE.md +8 -8
  3. package/README.md +6 -8
  4. package/dist/{chunk-6HGH6S36.js → chunk-7VLA5TBT.js} +23 -2
  5. package/dist/chunk-7VLA5TBT.js.map +1 -0
  6. package/dist/{chunk-I4R7DMIX.js → chunk-IJYNVM2W.js} +2 -2
  7. package/dist/{chunk-RH65K3US.js → chunk-OWMII7WC.js} +1 -1
  8. package/dist/chunk-OWMII7WC.js.map +1 -0
  9. package/dist/{chunk-GZEHPARN.js → chunk-VRKJHE7E.js} +3 -3
  10. package/dist/{chunk-GZEHPARN.js.map → chunk-VRKJHE7E.js.map} +1 -1
  11. package/dist/client.d.ts +2 -2
  12. package/dist/client.js +4 -4
  13. package/dist/{config-DV8DGNt6.d.ts → config-CwW3KY9r.d.ts} +6 -2
  14. package/dist/config.d.ts +2 -2
  15. package/dist/config.js +10 -4
  16. package/dist/index.d.ts +10 -10
  17. package/dist/index.js +26 -13
  18. package/dist/index.js.map +1 -1
  19. package/dist/{projectConfig-PB5VK5AD.js → projectConfig-REH67TB2.js} +2 -2
  20. package/dist/{sentrySetup-G7NGISBY.js → sentrySetup-HNIURVUZ.js} +3 -3
  21. package/dist/{sessionTypes-iyUMf_pf.d.ts → sessionTypes-DanjuPaE.d.ts} +1 -1
  22. package/docs/app-bootstrap.md +10 -7
  23. package/docs/config-registry.md +2 -2
  24. package/docs/csrf-config.md +11 -11
  25. package/docs/hooks.md +1 -1
  26. package/docs/rate-limit-strategy.md +1 -1
  27. package/docs/redis-adapter.md +1 -1
  28. package/docs/session-types.md +1 -1
  29. package/docs/socket-bootstrap.md +3 -3
  30. package/package.json +1 -1
  31. package/dist/chunk-6HGH6S36.js.map +0 -1
  32. package/dist/chunk-RH65K3US.js.map +0 -1
  33. /package/dist/{chunk-I4R7DMIX.js.map → chunk-IJYNVM2W.js.map} +0 -0
  34. /package/dist/{projectConfig-PB5VK5AD.js.map → projectConfig-REH67TB2.js.map} +0 -0
  35. /package/dist/{sentrySetup-G7NGISBY.js.map → sentrySetup-HNIURVUZ.js.map} +0 -0
package/dist/index.js CHANGED
@@ -49,17 +49,20 @@ import {
49
49
  tryCatchSync,
50
50
  validatePagePath,
51
51
  waitForSocket
52
- } from "./chunk-GZEHPARN.js";
52
+ } from "./chunk-VRKJHE7E.js";
53
53
  import {
54
54
  getDeployConfig,
55
+ getPortOverride,
55
56
  getServicesConfig,
56
57
  isDeployConfigRegistered,
57
58
  isServicesConfigRegistered,
58
59
  notifySecretsResolved,
59
60
  registerDeployConfig,
61
+ registerPortOverride,
60
62
  registerSecretsResolvedListener,
61
- registerServicesConfig
62
- } from "./chunk-6HGH6S36.js";
63
+ registerServicesConfig,
64
+ resetPortOverrideForTests
65
+ } from "./chunk-7VLA5TBT.js";
63
66
  import {
64
67
  DEFAULT_REDACTED_LOG_KEYS,
65
68
  DEPTH_TRUNCATED_PLACEHOLDER,
@@ -93,7 +96,7 @@ import {
93
96
  startSpan,
94
97
  startSpanAcrossTrackers,
95
98
  startSpanHandle
96
- } from "./chunk-I4R7DMIX.js";
99
+ } from "./chunk-IJYNVM2W.js";
97
100
  import {
98
101
  DEFAULT_PROJECT_CONFIG,
99
102
  createRegistry,
@@ -103,7 +106,7 @@ import {
103
106
  isPlainObject,
104
107
  isProjectConfigRegistered,
105
108
  registerProjectConfig
106
- } from "./chunk-RH65K3US.js";
109
+ } from "./chunk-OWMII7WC.js";
107
110
 
108
111
  // src/escapeHtml.ts
109
112
  var HTML_ESCAPE_MAP = {
@@ -393,7 +396,6 @@ import { z } from "zod";
393
396
  var EnvSchema = z.object({
394
397
  NODE_ENV: z.enum(["development", "production", "test"]).default("development"),
395
398
  SERVER_IP: z.string().min(1).default("127.0.0.1"),
396
- SERVER_PORT: z.string().regex(/^\d+$/).default("80"),
397
399
  SECURE: z.enum(["true", "false"]).default("false"),
398
400
  REDIS_HOST: z.string().min(1).default("127.0.0.1"),
399
401
  REDIS_PORT: z.string().regex(/^\d+$/).default("6379"),
@@ -468,7 +470,6 @@ var loadEnvFiles = () => {
468
470
  var applyResolvedDefaultsToProcessEnv = (resolvedEnv) => {
469
471
  process.env.NODE_ENV = process.env.NODE_ENV ?? resolvedEnv.NODE_ENV;
470
472
  process.env.SERVER_IP = process.env.SERVER_IP ?? resolvedEnv.SERVER_IP;
471
- process.env.SERVER_PORT = process.env.SERVER_PORT ?? resolvedEnv.SERVER_PORT;
472
473
  process.env.SECURE = process.env.SECURE ?? resolvedEnv.SECURE;
473
474
  process.env.REDIS_HOST = process.env.REDIS_HOST ?? resolvedEnv.REDIS_HOST;
474
475
  process.env.REDIS_PORT = process.env.REDIS_PORT ?? resolvedEnv.REDIS_PORT;
@@ -479,7 +480,9 @@ var bootstrapEnv = () => {
479
480
  return cachedEnv;
480
481
  }
481
482
  loadEnvFiles();
482
- const parsed = EnvSchema.safeParse(process.env);
483
+ const envInput = { ...process.env };
484
+ Reflect.deleteProperty(envInput, "SERVER_PORT");
485
+ const parsed = EnvSchema.safeParse(envInput);
483
486
  if (!parsed.success) {
484
487
  const details = parsed.error.issues.map((issue) => `${issue.path.join(".") || "env"}: ${issue.message}`).join("; ");
485
488
  throw new Error(`Invalid environment configuration: ${details}`);
@@ -1221,11 +1224,14 @@ var processUpload = async (input) => {
1221
1224
  };
1222
1225
 
1223
1226
  // src/bindAddress.ts
1227
+ var DEFAULT_SERVER_PORT = "80";
1224
1228
  var intended = null;
1229
+ var configuredPort = null;
1225
1230
  var registered = null;
1226
1231
  var registerBindAddress = (address) => {
1227
- intended = address;
1228
- registered = address;
1232
+ intended = { ip: address.ip, port: address.port };
1233
+ configuredPort = address.configuredPort ?? null;
1234
+ registered = intended;
1229
1235
  };
1230
1236
  var registerBoundAddress = (address) => {
1231
1237
  intended ??= address;
@@ -1237,7 +1243,9 @@ var getBindAddress = () => {
1237
1243
  }
1238
1244
  return {
1239
1245
  ip: process.env.SERVER_IP ?? "127.0.0.1",
1240
- port: process.env.SERVER_PORT ?? ""
1246
+ //? A real server registers its intended/defaultPort before OAuth or CORS
1247
+ //? reads this value. Port 80 only remains the generic pre-bootstrap fallback.
1248
+ port: DEFAULT_SERVER_PORT
1241
1249
  };
1242
1250
  };
1243
1251
  var defaultPortForProtocol = (protocol) => protocol === "https:" ? "443" : "80";
@@ -1254,7 +1262,9 @@ var resolveDevCallbackUrl = (callbackUrl) => {
1254
1262
  const intendedPort = intended ? String(intended.port) : "";
1255
1263
  if (!boundPort || !intendedPort) return callbackUrl;
1256
1264
  const currentPort = url.port || defaultPortForProtocol(url.protocol);
1257
- if (currentPort === boundPort || currentPort !== intendedPort) return callbackUrl;
1265
+ const matchesIntendedPort = currentPort === intendedPort;
1266
+ const matchesConfiguredPort = configuredPort !== null && currentPort === String(configuredPort);
1267
+ if (currentPort === boundPort || !matchesIntendedPort && !matchesConfiguredPort) return callbackUrl;
1258
1268
  url.port = boundPort === defaultPortForProtocol(url.protocol) ? "" : boundPort;
1259
1269
  return url.toString();
1260
1270
  };
@@ -2063,7 +2073,7 @@ var validateInputByType = async ({
2063
2073
  return { status: "success" };
2064
2074
  }
2065
2075
  if (isProductionRuntime()) {
2066
- const { getProjectConfig: getProjectConfig2 } = await import("./projectConfig-PB5VK5AD.js");
2076
+ const { getProjectConfig: getProjectConfig2 } = await import("./projectConfig-REH67TB2.js");
2067
2077
  if (getProjectConfig2().validation.runtimeMode === "off") {
2068
2078
  return { status: "success" };
2069
2079
  }
@@ -2331,6 +2341,7 @@ export {
2331
2341
  getLogger,
2332
2342
  getNotifier,
2333
2343
  getParams,
2344
+ getPortOverride,
2334
2345
  getPrismaClient,
2335
2346
  getPrismaClientFor,
2336
2347
  getPrismaClientKeys,
@@ -2430,6 +2441,7 @@ export {
2430
2441
  registerLocalizedNormalizer,
2431
2442
  registerLogger,
2432
2443
  registerNotifier,
2444
+ registerPortOverride,
2433
2445
  registerPreCaptureFilter,
2434
2446
  registerPrismaClient,
2435
2447
  registerProjectConfig,
@@ -2457,6 +2469,7 @@ export {
2457
2469
  resetDbHealthCheckForTests,
2458
2470
  resetDefaultRedisClient,
2459
2471
  resetLoggerForTests,
2472
+ resetPortOverrideForTests,
2460
2473
  resetRedactedLogKeysForTests,
2461
2474
  resetRedisKeyFormatterForTests,
2462
2475
  resetSessionProviderForTests,