@epic-web/workshop-app 6.10.0 → 6.11.1

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.
@@ -111,27 +111,12 @@ async function getBuild() {
111
111
  );
112
112
  return build;
113
113
  }
114
- app.all(
115
- "*splat",
116
- createRequestHandler({
117
- getLoadContext: () => ({ serverBuild: getBuild() }),
118
- mode: MODE,
119
- build: getBuild
120
- })
121
- );
122
- const SENTRY_ENABLED = Boolean(
123
- ENV.EPICSHOP_IS_PUBLISHED && process.env.SENTRY_DSN
124
- );
125
- if (SENTRY_ENABLED) {
126
- const Sentry = await import("@sentry/react-router");
127
- Sentry.setupExpressErrorHandler(app);
128
- }
129
114
  const desiredPort = Number(process.env.PORT || 5639);
130
115
  const portToUse = await getPort({
131
116
  port: portNumbers(desiredPort, desiredPort + 100)
132
117
  });
133
118
  if (!ENV.EPICSHOP_DEPLOYED) {
134
- app.use((req, res, next) => {
119
+ app.use(async (req, res, next) => {
135
120
  const config = getWorkshopConfig();
136
121
  if (!config.subdomain) {
137
122
  return next();
@@ -139,12 +124,27 @@ if (!ENV.EPICSHOP_DEPLOYED) {
139
124
  const host = req.headers.host;
140
125
  const expectedHost = `${config.subdomain}.localhost`;
141
126
  if (host && !host.startsWith(expectedHost)) {
142
- const redirectUrl = getWorkshopUrl(portToUse);
143
- return res.redirect(301, `${redirectUrl}${req.url}`);
127
+ const redirectUrl = await getWorkshopUrl(portToUse);
128
+ return res.redirect(307, `${redirectUrl}${req.url}`);
144
129
  }
145
130
  next();
146
131
  });
147
132
  }
133
+ app.all(
134
+ "*splat",
135
+ createRequestHandler({
136
+ getLoadContext: () => ({ serverBuild: getBuild() }),
137
+ mode: MODE,
138
+ build: getBuild
139
+ })
140
+ );
141
+ const SENTRY_ENABLED = Boolean(
142
+ ENV.EPICSHOP_IS_PUBLISHED && process.env.SENTRY_DSN
143
+ );
144
+ if (SENTRY_ENABLED) {
145
+ const Sentry = await import("@sentry/react-router");
146
+ Sentry.setupExpressErrorHandler(app);
147
+ }
148
148
  const localIp = ipAddress() ?? "Unknown";
149
149
  const lanUrl = /^10[.]|^172[.](1[6-9]|2[0-9]|3[0-1])[.]|^192[.]168[.]/.test(
150
150
  localIp
@@ -160,7 +160,7 @@ const server = app.listen(portToUse, async () => {
160
160
  );
161
161
  }
162
162
  console.log(`\u{1F428} Let's get learning!`);
163
- const localUrl = getWorkshopUrl(portUsed);
163
+ const localUrl = await getWorkshopUrl(portUsed);
164
164
  console.log(
165
165
  `
166
166
  ${chalk.bold("Local:")} ${chalk.cyan(localUrl)}
@@ -173,11 +173,11 @@ ${lanUrl ? `${chalk.bold("On Your Network:")} ${chalk.cyan(lanUrl)}` : ""}
173
173
  if (!ENV.EPICSHOP_DEPLOYED && process.env.EPICSHOP_ENABLE_WATCHER) {
174
174
  const watches = /* @__PURE__ */ new Map();
175
175
  const wss = new WebSocketServer({ noServer: true });
176
- server.on("upgrade", (request, socket, head) => {
176
+ server.on("upgrade", async (request, socket, head) => {
177
177
  const url = new URL(request.url ?? "/", "ws://localhost:0000");
178
178
  if (url.pathname === "/__ws") {
179
179
  const origin = request.headers.origin;
180
- const workshopUrl = getWorkshopUrl(portToUse);
180
+ const workshopUrl = await getWorkshopUrl(portToUse);
181
181
  const isValidOrigin = origin && (origin === workshopUrl || origin === `http://localhost:${portToUse}` || origin === `http://127.0.0.1:${portToUse}` || lanUrl && origin === lanUrl);
182
182
  if (!isValidOrigin) {
183
183
  socket.write("HTTP/1.1 403 Forbidden\r\n\r\n");
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@epic-web/workshop-app","version":"6.10.0","sideEffects":false,"publishConfig":{"access":"public"},"files":["build","dist","start.js"],"type":"module","imports":{"#app/*":"./app/*","#tests/*":"./tests/*","#build/*":"./build/*"},"exports":{"./start":"./start.js","./package.json":"./package.json","./instrument":"./instrument.js"},"scripts":{"build":"run-p --print-label --print-name build:*","build:app":"react-router build --sourcemapClient --sourcemapServer","build:server":"tsx ./other/build-dir.ts server","dev":"node ./server/dev-server.js","format":"prettier --write .","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","start":"cross-env NODE_ENV=production node ./start.js","typecheck":"react-router typegen && tsc --noEmit","validate":"run-p lint typecheck"},"dependencies":{"@conform-to/react":"^1.8.0","@conform-to/zod":"^1.8.0","@epic-web/cachified":"^5.6.0","@epic-web/client-hints":"^1.3.5","@epic-web/invariant":"^1.0.0","@epic-web/remember":"^1.1.0","@epic-web/restore-scroll":"^2.0.0","@epic-web/workshop-presence":"6.10.0","@epic-web/workshop-utils":"6.10.0","@mdx-js/mdx":"^3.1.0","@mux/mux-player-react":"^3.5.0","@nasa-gcn/remix-seo":"^2.0.1","@paralleldrive/cuid2":"^2.2.2","@radix-ui/react-accordion":"^1.2.11","@radix-ui/react-dialog":"^1.1.14","@radix-ui/react-popover":"^1.1.14","@radix-ui/react-select":"^2.2.5","@radix-ui/react-tabs":"^1.1.12","@radix-ui/react-toast":"^1.2.14","@radix-ui/react-tooltip":"^1.2.7","@react-router/express":"^7.6.3","@react-router/node":"^7.6.3","@react-router/remix-routes-option-adapter":"^7.6.3","@resvg/resvg-js":"^2.6.2","@sentry/profiling-node":"^9.35.0","@sentry/react-router":"^9.35.0","@sindresorhus/slugify":"^2.2.1","address":"^2.0.3","ansi-to-html":"^0.7.2","chalk":"^5.4.1","chokidar":"^4.0.3","close-with-grace":"^2.2.0","clsx":"^2.1.1","compression":"^1.8.0","confetti-react":"^2.6.0","cookie":"^1.0.2","cross-env":"^7.0.3","cross-spawn":"^7.0.6","dotenv":"^17.0.1","esbuild":"^0.25.5","etag":"^1.8.1","execa":"^9.6.0","express":"^5.1.0","fkill":"^9.0.0","framer-motion":"^12.23.0","fs-extra":"^11.3.0","get-port":"^7.1.0","glob":"^11.0.3","isbot":"^5.1.28","lru-cache":"^11.1.0","md5-hex":"^5.0.0","mdx-bundler":"^10.1.1","mermaid":"^11.8.0","mime-types":"^3.0.1","morgan":"^1.10.0","msw":"^2.10.2","open":"^10.1.2","openid-client":"^6.6.2","p-queue":"^8.1.0","partysocket":"^1.1.4","react":"^19.1.0","react-dom":"^19.1.0","react-router":"^7.6.3","remix-flat-routes":"^0.8.5","remix-utils":"^8.7.0","satori":"^0.15.2","shell-quote":"^1.8.3","sonner":"^2.0.6","source-map-support":"^0.5.21","spin-delay":"^2.0.1","tailwind-merge":"^2.6.0","vite-env-only":"^3.0.3","ws":"^8.18.3","zod":"^3.25.71"},"devDependencies":{"@playwright/test":"^1.53.2","@react-router/dev":"^7.6.3","@tailwindcss/typography":"^0.5.16","@testing-library/dom":"^10.4.0","@total-typescript/ts-reset":"^0.6.1","@types/compression":"^1.8.1","@types/cross-spawn":"^6.0.6","@types/etag":"^1.8.4","@types/express":"^5.0.3","@types/fs-extra":"^11.0.4","@types/hast":"^3.0.4","@types/lodash.escape":"^4.0.9","@types/mdast":"^4.0.4","@types/mime-types":"^3.0.1","@types/morgan":"^1.9.10","@types/node":"^24.0.10","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@types/shell-quote":"^1.7.5","@types/source-map-support":"^0.5.10","@types/wait-on":"^5.3.4","@types/ws":"^8.18.1","autoprefixer":"^10.4.21","eslint":"^9.30.1","mdast-util-mdx-jsx":"^3.2.0","npm-run-all":"^4.1.5","prettier":"^3.6.2","prettier-plugin-tailwindcss":"^0.6.13","tailwind-scrollbar":"^3.1.0","tailwindcss":"^3.4.13","tailwindcss-animate":"^1.0.7","tailwindcss-radix":"^3.0.5","tailwindcss-safe-area":"^0.6.0","tsx":"^4.20.3","typescript":"^5.8.3","vite":"^7.0.1"},"engines":{"node":"20 || 22 || 24"},"repository":{"type":"git","url":"https://github.com/epicweb-dev/epicshop.git","directory":"packages/workshop-app"}}
1
+ {"name":"@epic-web/workshop-app","version":"6.11.1","sideEffects":false,"publishConfig":{"access":"public"},"files":["build","dist","start.js"],"type":"module","imports":{"#app/*":"./app/*","#tests/*":"./tests/*","#build/*":"./build/*"},"exports":{"./start":"./start.js","./package.json":"./package.json","./instrument":"./instrument.js"},"scripts":{"build":"run-p --print-label --print-name build:*","build:app":"react-router build --sourcemapClient --sourcemapServer","build:server":"tsx ./other/build-dir.ts server","dev":"node ./server/dev-server.js","format":"prettier --write .","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","start":"cross-env NODE_ENV=production node ./start.js","typecheck":"react-router typegen && tsc --noEmit","validate":"run-p lint typecheck"},"dependencies":{"@conform-to/react":"^1.8.0","@conform-to/zod":"^1.8.0","@epic-web/cachified":"^5.6.0","@epic-web/client-hints":"^1.3.5","@epic-web/invariant":"^1.0.0","@epic-web/remember":"^1.1.0","@epic-web/restore-scroll":"^2.0.0","@epic-web/workshop-presence":"6.11.1","@epic-web/workshop-utils":"6.11.1","@mdx-js/mdx":"^3.1.0","@mux/mux-player-react":"^3.5.0","@nasa-gcn/remix-seo":"^2.0.1","@paralleldrive/cuid2":"^2.2.2","@radix-ui/react-accordion":"^1.2.11","@radix-ui/react-dialog":"^1.1.14","@radix-ui/react-popover":"^1.1.14","@radix-ui/react-select":"^2.2.5","@radix-ui/react-tabs":"^1.1.12","@radix-ui/react-toast":"^1.2.14","@radix-ui/react-tooltip":"^1.2.7","@react-router/express":"^7.6.3","@react-router/node":"^7.6.3","@react-router/remix-routes-option-adapter":"^7.6.3","@resvg/resvg-js":"^2.6.2","@sentry/profiling-node":"^9.35.0","@sentry/react-router":"^9.35.0","@sindresorhus/slugify":"^2.2.1","address":"^2.0.3","ansi-to-html":"^0.7.2","chalk":"^5.4.1","chokidar":"^4.0.3","close-with-grace":"^2.2.0","clsx":"^2.1.1","compression":"^1.8.0","confetti-react":"^2.6.0","cookie":"^1.0.2","cross-env":"^7.0.3","cross-spawn":"^7.0.6","dotenv":"^17.0.1","esbuild":"^0.25.5","etag":"^1.8.1","execa":"^9.6.0","express":"^5.1.0","fkill":"^9.0.0","framer-motion":"^12.23.0","fs-extra":"^11.3.0","get-port":"^7.1.0","glob":"^11.0.3","isbot":"^5.1.28","lru-cache":"^11.1.0","md5-hex":"^5.0.0","mdx-bundler":"^10.1.1","mermaid":"^11.8.0","mime-types":"^3.0.1","morgan":"^1.10.0","msw":"^2.10.2","open":"^10.1.2","openid-client":"^6.6.2","p-queue":"^8.1.0","partysocket":"^1.1.4","react":"^19.1.0","react-dom":"^19.1.0","react-router":"^7.6.3","remix-flat-routes":"^0.8.5","remix-utils":"^8.7.0","satori":"^0.15.2","shell-quote":"^1.8.3","sonner":"^2.0.6","source-map-support":"^0.5.21","spin-delay":"^2.0.1","tailwind-merge":"^2.6.0","vite-env-only":"^3.0.3","ws":"^8.18.3","zod":"^3.25.71"},"devDependencies":{"@playwright/test":"^1.53.2","@react-router/dev":"^7.6.3","@tailwindcss/typography":"^0.5.16","@testing-library/dom":"^10.4.0","@total-typescript/ts-reset":"^0.6.1","@types/compression":"^1.8.1","@types/cross-spawn":"^6.0.6","@types/etag":"^1.8.4","@types/express":"^5.0.3","@types/fs-extra":"^11.0.4","@types/hast":"^3.0.4","@types/lodash.escape":"^4.0.9","@types/mdast":"^4.0.4","@types/mime-types":"^3.0.1","@types/morgan":"^1.9.10","@types/node":"^24.0.10","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@types/shell-quote":"^1.7.5","@types/source-map-support":"^0.5.10","@types/wait-on":"^5.3.4","@types/ws":"^8.18.1","autoprefixer":"^10.4.21","eslint":"^9.30.1","mdast-util-mdx-jsx":"^3.2.0","npm-run-all":"^4.1.5","prettier":"^3.6.2","prettier-plugin-tailwindcss":"^0.6.13","tailwind-scrollbar":"^3.1.0","tailwindcss":"^3.4.13","tailwindcss-animate":"^1.0.7","tailwindcss-radix":"^3.0.5","tailwindcss-safe-area":"^0.6.0","tsx":"^4.20.3","typescript":"^5.8.3","vite":"^7.0.1"},"engines":{"node":"20 || 22 || 24"},"repository":{"type":"git","url":"https://github.com/epicweb-dev/epicshop.git","directory":"packages/workshop-app"}}