@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.
- package/CHANGELOG.md +18 -0
- package/CLAUDE.md +8 -8
- package/README.md +6 -8
- package/dist/{chunk-6HGH6S36.js → chunk-7VLA5TBT.js} +23 -2
- package/dist/chunk-7VLA5TBT.js.map +1 -0
- package/dist/{chunk-I4R7DMIX.js → chunk-IJYNVM2W.js} +2 -2
- package/dist/{chunk-RH65K3US.js → chunk-OWMII7WC.js} +1 -1
- package/dist/chunk-OWMII7WC.js.map +1 -0
- package/dist/{chunk-GZEHPARN.js → chunk-VRKJHE7E.js} +3 -3
- package/dist/{chunk-GZEHPARN.js.map → chunk-VRKJHE7E.js.map} +1 -1
- package/dist/client.d.ts +2 -2
- package/dist/client.js +4 -4
- package/dist/{config-DV8DGNt6.d.ts → config-CwW3KY9r.d.ts} +6 -2
- package/dist/config.d.ts +2 -2
- package/dist/config.js +10 -4
- package/dist/index.d.ts +10 -10
- package/dist/index.js +26 -13
- package/dist/index.js.map +1 -1
- package/dist/{projectConfig-PB5VK5AD.js → projectConfig-REH67TB2.js} +2 -2
- package/dist/{sentrySetup-G7NGISBY.js → sentrySetup-HNIURVUZ.js} +3 -3
- package/dist/{sessionTypes-iyUMf_pf.d.ts → sessionTypes-DanjuPaE.d.ts} +1 -1
- package/docs/app-bootstrap.md +10 -7
- package/docs/config-registry.md +2 -2
- package/docs/csrf-config.md +11 -11
- package/docs/hooks.md +1 -1
- package/docs/rate-limit-strategy.md +1 -1
- package/docs/redis-adapter.md +1 -1
- package/docs/session-types.md +1 -1
- package/docs/socket-bootstrap.md +3 -3
- package/package.json +1 -1
- package/dist/chunk-6HGH6S36.js.map +0 -1
- package/dist/chunk-RH65K3US.js.map +0 -1
- /package/dist/{chunk-I4R7DMIX.js.map → chunk-IJYNVM2W.js.map} +0 -0
- /package/dist/{projectConfig-PB5VK5AD.js.map → projectConfig-REH67TB2.js.map} +0 -0
- /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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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,
|