/opt/canhelp/apps/web/.next/cache/webpack/server-production
Edit: /opt/canhelp/apps/web/.next/cache/webpack/server-production/15.pack (1976915B)
wpc G* webpack/lib/cache/PackFileCacheStrategyPackContentItems`A ResolverCachePlugin|normal|default|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|alias=|false|path=|/opt/canhelp/apps/web|request=|next-app-loader?page=%2Fspecialist-setup%2Fpage&name=app%2Fspecialist-setup%2Fpage&pagePath=private-next-app-dir%2Fspecialist-setup%2Fpage.tsx&appDir=%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp&appPaths=%2Fspecialist-setup%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D&isGlobalNotFoundEnabled=! ResolverCachePlugin|normal|default|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web|request=|next-app-loader?page=%2Fspecialist-setup%2Fpage&name=app%2Fspecialist-setup%2Fpage&pagePath=private-next-app-dir%2Fspecialist-setup%2Fpage.tsx&appDir=%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp&appPaths=%2Fspecialist-setup%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D&isGlobalNotFoundEnabled=! Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?page=%2Fspecialist-setup%2Fpage&name=app%2Fspecialist-setup%2Fpage&pagePath=private-next-app-dir%2Fspecialist-setup%2Fpage.tsx&appDir=%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp&appPaths=%2Fspecialist-setup%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D&isGlobalNotFoundEnabled=!|rsc+ ResolverCachePlugin|normal|default|alias=|false|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/become-specialist/page.tsx# ResolverCachePlugin|normal|default|alias=|false|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/dashboard/page.tsxS ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation.react-server|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|next=|/opt/canhelp/node_modules/next|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/dashboard/page.tsx[ ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation.react-server|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|next=|/opt/canhelp/node_modules/next|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/become-specialist/page.tsx* ResolverCachePlugin|normal|default|alias=|false|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx! Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/dashboard/page.tsx|rsc) Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/become-specialist/page.tsx|rscZ ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation.react-server|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|next=|/opt/canhelp/node_modules/next|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx( Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx|rsc+ ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|conditionNames=[|0=|node|1=|import|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react-server-dom-webpack/server ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation.react-server|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/rsc/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/rsc/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.node|react-server-dom-webpack/server$=|next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server|react-server-dom-webpack/server.node$=|next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server|react-server-dom-webpack/static$=|next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|main|]|conditionNames=[|0=|node|1=|require|]|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react-server-dom-webpack/serverV ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/empty|client-only$=|next/dist/compiled/client-only/error|next/dist/compiled/server-only$=|next/dist/compiled/server-only/empty|next/dist/compiled/client-only$=|next/dist/compiled/client-only/error|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation.react-server|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/rsc/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/rsc/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/compiled/react-server-dom-webpack/client.node|react-server-dom-webpack/server$=|next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server|react-server-dom-webpack/server.node$=|next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server|react-server-dom-webpack/static$=|next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|module|1=|main|]|conditionNames=[|0=|react-server|1=|...|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react-server-dom-webpack/server ResolverCachePlugin|normal|default|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|alias=|false|path=|/opt/canhelp/apps/web|request=|next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fspecialist-setup%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true! ResolverCachePlugin|normal|default|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web|request=|next-flight-client-entry-loader?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fspecialist-setup%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true! Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fspecialist-setup%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!|ssr Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fspecialist-setup%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!|rscM ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|next=|/opt/canhelp/node_modules/next|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/become-specialist/page.tsxE ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|next=|/opt/canhelp/node_modules/next|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/dashboard/page.tsxL ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|next=|/opt/canhelp/node_modules/next|]|dependencyType=|esm|path=|/opt/canhelp/apps/web|request=|/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx1 Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/become-specialist/page.tsx|ssr) Compilation/modules|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/dashboard/page.tsx|ssr ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react/jsx-runtime ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/lib/auth ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/context/locale ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/lib/api
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|module|1=|main|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|next/navigation? ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|/opt/canhelp/apps/web/src/context/locale|query=||fragment=||module=|true|directory=|false|file=|false|internal=|false|fullySpecified=|true|descriptionFilePath=|/opt/canhelp/apps/web/package.json|descriptionFileData=[|name=|web|version=|0.1.0|private=|true|scripts=[|dev=|next dev --port 3000|build=|next build|start=|next start|lint=|next lint|typecheck=|tsc --noEmit|]|dependencies=[|@canhelp/shared=|*|@marsidev/react-turnstile=|^1.5.0|better-auth=|^1.2.7|nanostores=|^1.2.0|next=|^15.1.6|react=|^19.0.0|react-dom=|^19.0.0|socket.io-client=|^4.8.1|zod=|^3.24.1|]|devDependencies=[|@types/node=|^22.10.7|@types/react=|^19.0.6|@types/react-dom=|^19.0.3|autoprefixer=|^10.4.20|postcss=|^8.5.1|tailwindcss=|^3.4.17|typescript=|^5.7.3|]|]|descriptionFileRoot=|/opt/canhelp/apps/web|relativePath=|./src/app/specialist-setup8 ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|/opt/canhelp/apps/web/src/lib/api|query=||fragment=||module=|true|directory=|false|file=|false|internal=|false|fullySpecified=|true|descriptionFilePath=|/opt/canhelp/apps/web/package.json|descriptionFileData=[|name=|web|version=|0.1.0|private=|true|scripts=[|dev=|next dev --port 3000|build=|next build|start=|next start|lint=|next lint|typecheck=|tsc --noEmit|]|dependencies=[|@canhelp/shared=|*|@marsidev/react-turnstile=|^1.5.0|better-auth=|^1.2.7|nanostores=|^1.2.0|next=|^15.1.6|react=|^19.0.0|react-dom=|^19.0.0|socket.io-client=|^4.8.1|zod=|^3.24.1|]|devDependencies=[|@types/node=|^22.10.7|@types/react=|^19.0.6|@types/react-dom=|^19.0.3|autoprefixer=|^10.4.20|postcss=|^8.5.1|tailwindcss=|^3.4.17|typescript=|^5.7.3|]|]|descriptionFileRoot=|/opt/canhelp/apps/web|relativePath=|./src/app/specialist-setupE ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|main|]|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/context/locale> ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|main|]|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/lib/apii ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|main|]|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|/opt/canhelp/apps/web/src/context/locale|query=||fragment=||module=|true|directory=|false|file=|false|internal=|false|fullySpecified=|false|descriptionFilePath=|/opt/canhelp/apps/web/package.json|descriptionFileData=[|name=|web|version=|0.1.0|private=|true|scripts=[|dev=|next dev --port 3000|build=|next build|start=|next start|lint=|next lint|typecheck=|tsc --noEmit|]|dependencies=[|@canhelp/shared=|*|@marsidev/react-turnstile=|^1.5.0|better-auth=|^1.2.7|nanostores=|^1.2.0|next=|^15.1.6|react=|^19.0.0|react-dom=|^19.0.0|socket.io-client=|^4.8.1|zod=|^3.24.1|]|devDependencies=[|@types/node=|^22.10.7|@types/react=|^19.0.6|@types/react-dom=|^19.0.3|autoprefixer=|^10.4.20|postcss=|^8.5.1|tailwindcss=|^3.4.17|typescript=|^5.7.3|]|]|descriptionFileRoot=|/opt/canhelp/apps/web|relativePath=|./src/app/specialist-setupb ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|main|]|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|/opt/canhelp/apps/web/src/lib/api|query=||fragment=||module=|true|directory=|false|file=|false|internal=|false|fullySpecified=|false|descriptionFilePath=|/opt/canhelp/apps/web/package.json|descriptionFileData=[|name=|web|version=|0.1.0|private=|true|scripts=[|dev=|next dev --port 3000|build=|next build|start=|next start|lint=|next lint|typecheck=|tsc --noEmit|]|dependencies=[|@canhelp/shared=|*|@marsidev/react-turnstile=|^1.5.0|better-auth=|^1.2.7|nanostores=|^1.2.0|next=|^15.1.6|react=|^19.0.0|react-dom=|^19.0.0|socket.io-client=|^4.8.1|zod=|^3.24.1|]|devDependencies=[|@types/node=|^22.10.7|@types/react=|^19.0.6|@types/react-dom=|^19.0.3|autoprefixer=|^10.4.20|postcss=|^8.5.1|tailwindcss=|^3.4.17|typescript=|^5.7.3|]|]|descriptionFileRoot=|/opt/canhelp/apps/web|relativePath=|./src/app/specialist-setup
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|module|1=|main|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/context/locale9 ResolverCachePlugin|normal|default|alias=|false|mainFields=[|0=|main|]|dependencyType=|esm|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|true|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|/opt/canhelp/apps/web/src/lib/auth|query=||fragment=||module=|true|directory=|false|file=|false|internal=|false|fullySpecified=|true|descriptionFilePath=|/opt/canhelp/apps/web/package.json|descriptionFileData=[|name=|web|version=|0.1.0|private=|true|scripts=[|dev=|next dev --port 3000|build=|next build|start=|next start|lint=|next lint|typecheck=|tsc --noEmit|]|dependencies=[|@canhelp/shared=|*|@marsidev/react-turnstile=|^1.5.0|better-auth=|^1.2.7|nanostores=|^1.2.0|next=|^15.1.6|react=|^19.0.0|react-dom=|^19.0.0|socket.io-client=|^4.8.1|zod=|^3.24.1|]|devDependencies=[|@types/node=|^22.10.7|@types/react=|^19.0.6|@types/react-dom=|^19.0.3|autoprefixer=|^10.4.20|postcss=|^8.5.1|tailwindcss=|^3.4.17|typescript=|^5.7.3|]|]|descriptionFileRoot=|/opt/canhelp/apps/web|relativePath=|./src/app/specialist-setup? ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|main|]|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/lib/authc ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|main|]|dependencyType=|commonjs|modules=[|0=|node_modules|]|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|extensions=[|0=|.js|1=|.json|2=|.node|]|enforceExtensions=|false|symlinks=|true|mainFiles=[|0=|index|]|roots=[|]|fullySpecified=|false|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|/opt/canhelp/apps/web/src/lib/auth|query=||fragment=||module=|true|directory=|false|file=|false|internal=|false|fullySpecified=|false|descriptionFilePath=|/opt/canhelp/apps/web/package.json|descriptionFileData=[|name=|web|version=|0.1.0|private=|true|scripts=[|dev=|next dev --port 3000|build=|next build|start=|next start|lint=|next lint|typecheck=|tsc --noEmit|]|dependencies=[|@canhelp/shared=|*|@marsidev/react-turnstile=|^1.5.0|better-auth=|^1.2.7|nanostores=|^1.2.0|next=|^15.1.6|react=|^19.0.0|react-dom=|^19.0.0|socket.io-client=|^4.8.1|zod=|^3.24.1|]|devDependencies=[|@types/node=|^22.10.7|@types/react=|^19.0.6|@types/react-dom=|^19.0.3|autoprefixer=|^10.4.20|postcss=|^8.5.1|tailwindcss=|^3.4.17|typescript=|^5.7.3|]|]|descriptionFileRoot=|/opt/canhelp/apps/web|relativePath=|./src/app/specialist-setup
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|module|1=|main|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|@/lib/auth
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|module|1=|main|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react/jsx-runtime
ResolverCachePlugin|normal|default|alias=[|server-only$=|next/dist/compiled/server-only/index|client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/client-only$=|next/dist/compiled/client-only/index|next/dist/compiled/server-only=|next/dist/compiled/server-only/index|/opt/canhelp/node_modules/next/head.js=|next/dist/client/components/noop-head|/opt/canhelp/node_modules/next/image.js=|next/dist/api/image|/opt/canhelp/node_modules/next/constants.js=|next/dist/api/constants|/opt/canhelp/node_modules/next/router.js=|next/dist/api/router|/opt/canhelp/node_modules/next/dynamic.js=|next/dist/api/app-dynamic|/opt/canhelp/node_modules/next/script.js=|next/dist/api/script|/opt/canhelp/node_modules/next/link.js=|next/dist/client/app-dir/link|/opt/canhelp/node_modules/next/form.js=|next/dist/client/app-dir/form|/opt/canhelp/node_modules/next/navigation.js=|next/dist/api/navigation|/opt/canhelp/node_modules/next/headers.js=|next/dist/api/headers|/opt/canhelp/node_modules/next/og.js=|next/dist/api/og|/opt/canhelp/node_modules/next/server.js=|next/dist/api/server|/opt/canhelp/node_modules/next/document.js=|next/dist/api/document|/opt/canhelp/node_modules/next/app.js=|next/dist/api/app|react$=|next/dist/server/route-modules/app-page/vendored/ssr/react|react/compiler-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime|react/jsx-dev-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime|react/jsx-runtime$=|next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime|react-dom$=|next/dist/server/route-modules/app-page/vendored/ssr/react-dom|react-dom/client$=|next/dist/compiled/react-dom/client|react-dom/server$=|next/dist/compiled/react-dom/server.node|react-dom/server.browser$=|next/dist/compiled/react-dom/server.browser|react-dom/server.edge$=|next/dist/build/webpack/alias/react-dom-server.js|react-dom/static$=|next/dist/compiled/react-dom/static.node|react-dom/static.browser$=|next/dist/compiled/react-dom/static.browser|react-dom/static.edge$=|next/dist/compiled/react-dom/static.edge|react-server-dom-webpack/client$=|next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client|react-server-dom-webpack/server$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/server.node$=|next/dist/compiled/react-server-dom-webpack/server.node|react-server-dom-webpack/static$=|next/dist/compiled/react-server-dom-webpack/static.node|@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts=|next/dist/client/dev/noop-turbopack-hmr|next=|/opt/canhelp/node_modules/next|]|mainFields=[|0=|module|1=|main|]|dependencyType=|esm|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react ResolverCachePlugin|normal|default|dependencyType=|esm|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|import|]|descriptionFiles=[|0=|package.json|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|alias=|false|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react-server-dom-webpack/server ResolverCachePlugin|normal|default|dependencyType=|commonjs|fallback=|false|exportsFields=[|0=|exports|]|importsFields=[|0=|imports|]|conditionNames=[|0=|node|1=|require|]|descriptionFiles=[|0=|package.json|]|enforceExtensions=|false|symlinks=|true|mainFields=[|0=|main|]|mainFiles=[|0=|index|]|roots=[|]|preferRelative=|false|preferAbsolute=|false|restrictions=[|]|path=|/opt/canhelp/apps/web/src/app/specialist-setup|request=|react-server-dom-webpack/server0 FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx|rsc9 FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/become-specialist/page.tsx|ssr1 FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/dashboard/page.tsx|ssr8 FlagDependencyExportsPlugin|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx|ssr Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js?page=%2Fspecialist-setup%2Fpage&name=app%2Fspecialist-setup%2Fpage&pagePath=private-next-app-dir%2Fspecialist-setup%2Fpage.tsx&appDir=%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp&appPaths=%2Fspecialist-setup%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D&isGlobalNotFoundEnabled=!|rsc|webpack-runtime9 Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/tasks/[id]/page.tsx|rsc|webpack-runtime? Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[4].use[0]!/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx|rsc|webpack-runtime) Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fspecialist-setup%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!|ssr|webpack-runtime) Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fopt%2Fcanhelp%2Fapps%2Fweb%2Fsrc%2Fapp%2Fspecialist-setup%2Fpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=true!|rsc|webpack-runtime@ Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/favorites/page.tsx|ssr|webpack-runtime> Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/payment/page.tsx|ssr|webpack-runtimeB Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/site/[slug]/page.tsx|ssr|webpack-runtimeH Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/become-specialist/page.tsx|ssr|webpack-runtimeG Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/tasks/[id]/offer/page.tsx|ssr|webpack-runtimeD Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/notifications/page.tsx|ssr|webpack-runtimeQ Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/components/FavoriteSpecialistButton.tsx|ssr|webpack-runtimeM Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/tasks/[id]/TaskDetailClient.tsx|ssr|webpack-runtime> Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/context/location.tsx|ssr|webpack-runtimeQ Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/dashboard/page.tsx|ssr|be875e28ad14eb03|webpack-runtimeR Compilation/codeGeneration|javascript/auto|/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js!/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.js??ruleSet[1].rules[16].oneOf[7].use[1]!/opt/canhelp/apps/web/src/app/users/[id]/page.tsx|ssr|90446bdbfd2696db|webpack-runtimewebpack/lib/cache/ResolverCachePlugin
webpack/lib/FileSystemInfoSnapshot@
yB/opt/canhelp/apps/web/package.json/opt/canhelp/package.jsonsafeTimetimestamphash! eyB eyBd659fc12c42d40f9! yB yB1cd76598202b1233 @ /opt/canhelp/apps/web/node_modules/opt/canhelp/apps/node_modules/opt/node_modules/node_modules@ /opt/canhelp/node_modules/package.json/opt/canhelp/node_modules/next-app-loader/opt/canhelp/node_modules/next-app-loader.js/opt/canhelp/node_modules/next-app-loader.json/opt/canhelp/node_modules/next-app-loader.node*missing@ @ `-
yBwebpack/lib/NormalModulewebpack/lib/util/registerExternalSerializerwebpack-sources/RawSource const module0 = () => import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/layout.tsx");
const module1 = () => import(/* webpackMode: "eager" */ "next/dist/client/components/builtin/global-error.js");
const module2 = () => import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/not-found.tsx");
const module3 = () => import(/* webpackMode: "eager" */ "next/dist/client/components/builtin/forbidden.js");
const module4 = () => import(/* webpackMode: "eager" */ "next/dist/client/components/builtin/unauthorized.js");
const page5 = () => import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx");
import { AppPageRouteModule } from "next/dist/server/route-modules/app-page/module.compiled" with {
'turbopack-transition': 'next-ssr'
};
import { RouteKind } from "next/dist/server/route-kind" with {
'turbopack-transition': 'next-server-utility'
};
import { getRevalidateReason } from "next/dist/server/instrumentation/utils";
import { getTracer, SpanKind } from "next/dist/server/lib/trace/tracer";
import { getRequestMeta } from "next/dist/server/request-meta";
import { BaseServerSpan } from "next/dist/server/lib/trace/constants";
import { interopDefault } from "next/dist/server/app-render/interop-default";
import { stripFlightHeaders } from "next/dist/server/app-render/strip-flight-headers";
import { NodeNextRequest, NodeNextResponse } from "next/dist/server/base-http/node";
import { checkIsAppPPREnabled } from "next/dist/server/lib/experimental/ppr";
import { getFallbackRouteParams } from "next/dist/server/request/fallback-params";
import { setReferenceManifestsSingleton } from "next/dist/server/app-render/encryption-utils";
import { isHtmlBotRequest, shouldServeStreamingMetadata } from "next/dist/server/lib/streaming-metadata";
import { createServerModuleMap } from "next/dist/server/app-render/action-utils";
import { normalizeAppPath } from "next/dist/shared/lib/router/utils/app-paths";
import { getIsPossibleServerAction } from "next/dist/server/lib/server-action-request-meta";
import { RSC_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_IS_PRERENDER_HEADER, NEXT_DID_POSTPONE_HEADER, RSC_CONTENT_TYPE_HEADER } from "next/dist/client/components/app-router-headers";
import { getBotType, isBot } from "next/dist/shared/lib/router/utils/is-bot";
import { CachedRouteKind } from "next/dist/server/response-cache";
import { FallbackMode, parseFallbackField } from "next/dist/lib/fallback";
import RenderResult from "next/dist/server/render-result";
import { CACHE_ONE_YEAR, HTML_CONTENT_TYPE_HEADER, NEXT_CACHE_TAGS_HEADER } from "next/dist/lib/constants";
import { ENCODED_TAGS } from "next/dist/server/stream-utils/encoded-tags";
import { sendRenderResult } from "next/dist/server/send-payload";
import { NoFallbackError } from "next/dist/shared/lib/no-fallback-error.external";
// We inject the tree and pages here so that we can use them in the route
// module.
const tree = {
children: [
'',
{
children: [
'specialist-setup',
{
children: ['__PAGE__', {}, {
page: [page5, "/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx"],
}]
},
{
metadata: {
icon: [(async (props) => (await import(/* webpackMode: "eager" */ "next-metadata-image-loader?type=icon&segment=&basePath=&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js!/opt/canhelp/apps/web/src/app/icon.svg?__next_metadata__")).default(props))],
apple: [],
openGraph: [],
twitter: [],
manifest: undefined
}
}
]
},
{
'layout': [module0, "/opt/canhelp/apps/web/src/app/layout.tsx"],
'global-error': [module1, "next/dist/client/components/builtin/global-error.js"],
'not-found': [module2, "/opt/canhelp/apps/web/src/app/not-found.tsx"],
'forbidden': [module3, "next/dist/client/components/builtin/forbidden.js"],
'unauthorized': [module4, "next/dist/client/components/builtin/unauthorized.js"],
metadata: {
icon: [(async (props) => (await import(/* webpackMode: "eager" */ "next-metadata-image-loader?type=icon&segment=&basePath=&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js!/opt/canhelp/apps/web/src/app/icon.svg?__next_metadata__")).default(props))],
apple: [],
openGraph: [],
twitter: [],
manifest: undefined
}
}
]
}.children;
const pages = ["/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx"];
export { tree, pages };
import GlobalError from "next/dist/client/components/builtin/global-error.js" with {
'turbopack-transition': 'next-server-utility'
};
export { GlobalError };
const __next_app_require__ = __webpack_require__
const __next_app_load_chunk__ = () => Promise.resolve()
export const __next_app__ = {
require: __next_app_require__,
loadChunk: __next_app_load_chunk__
};
import * as entryBase from "next/dist/server/app-render/entry-base" with {
'turbopack-transition': 'next-server-utility'
};
import { RedirectStatusCode } from "next/dist/client/components/redirect-status-code";
export * from "next/dist/server/app-render/entry-base" with {
'turbopack-transition': 'next-server-utility'
};
// Create and export the route module that will be consumed.
export const routeModule = new AppPageRouteModule({
definition: {
kind: RouteKind.APP_PAGE,
page: "/specialist-setup/page",
pathname: "/specialist-setup",
// The following aren't used in production.
bundlePath: '',
filename: '',
appPaths: []
},
userland: {
loaderTree: tree
},
distDir: process.env.__NEXT_RELATIVE_DIST_DIR || '',
relativeProjectDir: process.env.__NEXT_RELATIVE_PROJECT_DIR || ''
});
export async function handler(req, res, ctx) {
var _this;
let srcPage = "/specialist-setup/page";
// turbopack doesn't normalize `/index` in the page name
// so we need to to process dynamic routes properly
// TODO: fix turbopack providing differing value from webpack
if (process.env.TURBOPACK) {
srcPage = srcPage.replace(/\/index$/, '') || '/';
} else if (srcPage === '/index') {
// we always normalize /index specifically
srcPage = '/';
}
const multiZoneDraftMode = process.env.__NEXT_MULTI_ZONE_DRAFT_MODE;
const initialPostponed = getRequestMeta(req, 'postponed');
// TODO: replace with more specific flags
const minimalMode = getRequestMeta(req, 'minimalMode');
const prepareResult = await routeModule.prepare(req, res, {
srcPage,
multiZoneDraftMode
});
if (!prepareResult) {
res.statusCode = 400;
res.end('Bad Request');
ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());
return null;
}
const { buildId, query, params, parsedUrl, pageIsDynamic, buildManifest, nextFontManifest, reactLoadableManifest, serverActionsManifest, clientReferenceManifest, subresourceIntegrityManifest, prerenderManifest, isDraftMode, resolvedPathname, revalidateOnlyGenerated, routerServerContext, nextConfig, interceptionRoutePatterns } = prepareResult;
const pathname = parsedUrl.pathname || '/';
const normalizedSrcPage = normalizeAppPath(srcPage);
let { isOnDemandRevalidate } = prepareResult;
const prerenderInfo = routeModule.match(pathname, prerenderManifest);
const isPrerendered = !!prerenderManifest.routes[resolvedPathname];
let isSSG = Boolean(prerenderInfo || isPrerendered || prerenderManifest.routes[normalizedSrcPage]);
const userAgent = req.headers['user-agent'] || '';
const botType = getBotType(userAgent);
const isHtmlBot = isHtmlBotRequest(req);
/**
* If true, this indicates that the request being made is for an app
* prefetch request.
*/ const isPrefetchRSCRequest = getRequestMeta(req, 'isPrefetchRSCRequest') ?? req.headers[NEXT_ROUTER_PREFETCH_HEADER] === '1' // exclude runtime prefetches, which use '2'
;
// NOTE: Don't delete headers[RSC] yet, it still needs to be used in renderToHTML later
const isRSCRequest = getRequestMeta(req, 'isRSCRequest') ?? Boolean(req.headers[RSC_HEADER]);
const isPossibleServerAction = getIsPossibleServerAction(req);
/**
* If the route being rendered is an app page, and the ppr feature has been
* enabled, then the given route _could_ support PPR.
*/ const couldSupportPPR = checkIsAppPPREnabled(nextConfig.experimental.ppr);
// When enabled, this will allow the use of the `?__nextppronly` query to
// enable debugging of the static shell.
const hasDebugStaticShellQuery = process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING === '1' && typeof query.__nextppronly !== 'undefined' && couldSupportPPR;
// When enabled, this will allow the use of the `?__nextppronly` query
// to enable debugging of the fallback shell.
const hasDebugFallbackShellQuery = hasDebugStaticShellQuery && query.__nextppronly === 'fallback';
// This page supports PPR if it is marked as being `PARTIALLY_STATIC` in the
// prerender manifest and this is an app page.
const isRoutePPREnabled = couldSupportPPR && (((_this = prerenderManifest.routes[normalizedSrcPage] ?? prerenderManifest.dynamicRoutes[normalizedSrcPage]) == null ? void 0 : _this.renderingMode) === 'PARTIALLY_STATIC' || // Ideally we'd want to check the appConfig to see if this page has PPR
// enabled or not, but that would require plumbing the appConfig through
// to the server during development. We assume that the page supports it
// but only during development.
hasDebugStaticShellQuery && (routeModule.isDev === true || (routerServerContext == null ? void 0 : routerServerContext.experimentalTestProxy) === true));
const isDebugStaticShell = hasDebugStaticShellQuery && isRoutePPREnabled;
// We should enable debugging dynamic accesses when the static shell
// debugging has been enabled and we're also in development mode.
const isDebugDynamicAccesses = isDebugStaticShell && routeModule.isDev === true;
const isDebugFallbackShell = hasDebugFallbackShellQuery && isRoutePPREnabled;
// If we're in minimal mode, then try to get the postponed information from
// the request metadata. If available, use it for resuming the postponed
// render.
const minimalPostponed = isRoutePPREnabled ? initialPostponed : undefined;
// If PPR is enabled, and this is a RSC request (but not a prefetch), then
// we can use this fact to only generate the flight data for the request
// because we can't cache the HTML (as it's also dynamic).
const isDynamicRSCRequest = isRoutePPREnabled && isRSCRequest && !isPrefetchRSCRequest;
// Need to read this before it's stripped by stripFlightHeaders. We don't
// need to transfer it to the request meta because it's only read
// within this function; the static segment data should have already been
// generated, so we will always either return a static response or a 404.
const segmentPrefetchHeader = getRequestMeta(req, 'segmentPrefetchRSCRequest');
// TODO: investigate existing bug with shouldServeStreamingMetadata always
// being true for a revalidate due to modifying the base-server this.renderOpts
// when fixing this to correct logic it causes hydration issue since we set
// serveStreamingMetadata to true during export
let serveStreamingMetadata = !userAgent ? true : shouldServeStreamingMetadata(userAgent, nextConfig.htmlLimitedBots);
if (isHtmlBot && isRoutePPREnabled) {
isSSG = false;
serveStreamingMetadata = false;
}
// In development, we always want to generate dynamic HTML.
let supportsDynamicResponse = // If we're in development, we always support dynamic HTML, unless it's
// a data request, in which case we only produce static HTML.
routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports
// dynamic HTML.
!isSSG || // If this request has provided postponed data, it supports dynamic
// HTML.
typeof initialPostponed === 'string' || // If this is a dynamic RSC request, then this render supports dynamic
// HTML (it's dynamic).
isDynamicRSCRequest;
// When html bots request PPR page, perform the full dynamic rendering.
const shouldWaitOnAllReady = isHtmlBot && isRoutePPREnabled;
let ssgCacheKey = null;
if (!isDraftMode && isSSG && !supportsDynamicResponse && !isPossibleServerAction && !minimalPostponed && !isDynamicRSCRequest) {
ssgCacheKey = resolvedPathname;
}
// the staticPathKey differs from ssgCacheKey since
// ssgCacheKey is null in dev since we're always in "dynamic"
// mode in dev to bypass the cache, but we still need to honor
// dynamicParams = false in dev mode
let staticPathKey = ssgCacheKey;
if (!staticPathKey && routeModule.isDev) {
staticPathKey = resolvedPathname;
}
// If this is a request for an app path that should be statically generated
// and we aren't in the edge runtime, strip the flight headers so it will
// generate the static response.
if (!routeModule.isDev && !isDraftMode && isSSG && isRSCRequest && !isDynamicRSCRequest) {
stripFlightHeaders(req.headers);
}
const ComponentMod = {
...entryBase,
tree,
pages,
GlobalError,
handler,
routeModule,
__next_app__
};
// Before rendering (which initializes component tree modules), we have to
// set the reference manifests to our global store so Server Action's
// encryption util can access to them at the top level of the page module.
if (serverActionsManifest && clientReferenceManifest) {
setReferenceManifestsSingleton({
page: srcPage,
clientReferenceManifest,
serverActionsManifest,
serverModuleMap: createServerModuleMap({
serverActionsManifest
})
});
}
const method = req.method || 'GET';
const tracer = getTracer();
const activeSpan = tracer.getActiveScopeSpan();
try {
const varyHeader = routeModule.getVaryHeader(resolvedPathname, interceptionRoutePatterns);
res.setHeader('Vary', varyHeader);
const invokeRouteModule = async (span, context)=>{
const nextReq = new NodeNextRequest(req);
const nextRes = new NodeNextResponse(res);
// TODO: adapt for putting the RDC inside the postponed data
// If we're in dev, and this isn't a prefetch or a server action,
// we should seed the resume data cache.
if (process.env.NODE_ENV === 'development') {
if (nextConfig.experimental.cacheComponents && !isPrefetchRSCRequest && !context.renderOpts.isPossibleServerAction) {
const warmup = await routeModule.warmup(nextReq, nextRes, context);
// If the warmup is successful, we should use the resume data
// cache from the warmup.
if (warmup.metadata.renderResumeDataCache) {
context.renderOpts.renderResumeDataCache = warmup.metadata.renderResumeDataCache;
}
}
}
return routeModule.render(nextReq, nextRes, context).finally(()=>{
if (!span) return;
span.setAttributes({
'http.status_code': res.statusCode,
'next.rsc': false
});
const rootSpanAttributes = tracer.getRootSpanAttributes();
// We were unable to get attributes, probably OTEL is not enabled
if (!rootSpanAttributes) {
return;
}
if (rootSpanAttributes.get('next.span_type') !== BaseServerSpan.handleRequest) {
console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);
return;
}
const route = rootSpanAttributes.get('next.route');
if (route) {
const name = `${method} ${route}`;
span.setAttributes({
'next.route': route,
'http.route': route,
'next.span_name': name
});
span.updateName(name);
} else {
span.updateName(`${method} ${req.url}`);
}
});
};
const doRender = async ({ span, postponed, fallbackRouteParams })=>{
const context = {
query,
params,
page: normalizedSrcPage,
sharedContext: {
buildId
},
serverComponentsHmrCache: getRequestMeta(req, 'serverComponentsHmrCache'),
fallbackRouteParams,
renderOpts: {
App: ()=>null,
Document: ()=>null,
pageConfig: {},
ComponentMod,
Component: interopDefault(ComponentMod),
params,
routeModule,
page: srcPage,
postponed,
shouldWaitOnAllReady,
serveStreamingMetadata,
supportsDynamicResponse: typeof postponed === 'string' || supportsDynamicResponse,
buildManifest,
nextFontManifest,
reactLoadableManifest,
subresourceIntegrityManifest,
serverActionsManifest,
clientReferenceManifest,
setIsrStatus: routerServerContext == null ? void 0 : routerServerContext.setIsrStatus,
dir: process.env.NEXT_RUNTIME === 'nodejs' ? require('path').join(/* turbopackIgnore: true */ process.cwd(), routeModule.relativeProjectDir) : `${process.cwd()}/${routeModule.relativeProjectDir}`,
isDraftMode,
isRevalidate: isSSG && !postponed && !isDynamicRSCRequest,
botType,
isOnDemandRevalidate,
isPossibleServerAction,
assetPrefix: nextConfig.assetPrefix,
nextConfigOutput: nextConfig.output,
crossOrigin: nextConfig.crossOrigin,
trailingSlash: nextConfig.trailingSlash,
previewProps: prerenderManifest.preview,
deploymentId: nextConfig.deploymentId,
enableTainting: nextConfig.experimental.taint,
htmlLimitedBots: nextConfig.htmlLimitedBots,
devtoolSegmentExplorer: nextConfig.experimental.devtoolSegmentExplorer,
reactMaxHeadersLength: nextConfig.reactMaxHeadersLength,
multiZoneDraftMode,
incrementalCache: getRequestMeta(req, 'incrementalCache'),
cacheLifeProfiles: nextConfig.experimental.cacheLife,
basePath: nextConfig.basePath,
serverActions: nextConfig.experimental.serverActions,
...isDebugStaticShell || isDebugDynamicAccesses ? {
nextExport: true,
supportsDynamicResponse: false,
isStaticGeneration: true,
isRevalidate: true,
isDebugDynamicAccesses: isDebugDynamicAccesses
} : {},
experimental: {
isRoutePPREnabled,
expireTime: nextConfig.expireTime,
staleTimes: nextConfig.experimental.staleTimes,
cacheComponents: Boolean(nextConfig.experimental.cacheComponents),
clientSegmentCache: Boolean(nextConfig.experimental.clientSegmentCache),
clientParamParsing: Boolean(nextConfig.experimental.clientParamParsing),
dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),
inlineCss: Boolean(nextConfig.experimental.inlineCss),
authInterrupts: Boolean(nextConfig.experimental.authInterrupts),
clientTraceMetadata: nextConfig.experimental.clientTraceMetadata || []
},
waitUntil: ctx.waitUntil,
onClose: (cb)=>{
res.on('close', cb);
},
onAfterTaskError: ()=>{},
onInstrumentationRequestError: (error, _request, errorContext)=>routeModule.onRequestError(req, error, errorContext, routerServerContext),
err: getRequestMeta(req, 'invokeError'),
dev: routeModule.isDev
}
};
const result = await invokeRouteModule(span, context);
const { metadata } = result;
const { cacheControl, headers = {}, // Add any fetch tags that were on the page to the response headers.
fetchTags: cacheTags } = metadata;
if (cacheTags) {
headers[NEXT_CACHE_TAGS_HEADER] = cacheTags;
}
// Pull any fetch metrics from the render onto the request.
;
req.fetchMetrics = metadata.fetchMetrics;
// we don't throw static to dynamic errors in dev as isSSG
// is a best guess in dev since we don't have the prerender pass
// to know whether the path is actually static or not
if (isSSG && (cacheControl == null ? void 0 : cacheControl.revalidate) === 0 && !routeModule.isDev && !isRoutePPREnabled) {
const staticBailoutInfo = metadata.staticBailoutInfo;
const err = Object.defineProperty(new Error(`Page changed from static to dynamic at runtime ${resolvedPathname}${(staticBailoutInfo == null ? void 0 : staticBailoutInfo.description) ? `, reason: ${staticBailoutInfo.description}` : ``}` + `\nsee more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`), "__NEXT_ERROR_CODE", {
value: "E132",
enumerable: false,
configurable: true
});
if (staticBailoutInfo == null ? void 0 : staticBailoutInfo.stack) {
const stack = staticBailoutInfo.stack;
err.stack = err.message + stack.substring(stack.indexOf('\n'));
}
throw err;
}
return {
value: {
kind: CachedRouteKind.APP_PAGE,
html: result,
headers,
rscData: metadata.flightData,
postponed: metadata.postponed,
status: metadata.statusCode,
segmentData: metadata.segmentData
},
cacheControl
};
};
const responseGenerator = async ({ hasResolved, previousCacheEntry, isRevalidating, span })=>{
const isProduction = routeModule.isDev === false;
const didRespond = hasResolved || res.writableEnded;
// skip on-demand revalidate if cache is not present and
// revalidate-if-generated is set
if (isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry && !minimalMode) {
if (routerServerContext == null ? void 0 : routerServerContext.render404) {
await routerServerContext.render404(req, res);
} else {
res.statusCode = 404;
res.end('This page could not be found');
}
return null;
}
let fallbackMode;
if (prerenderInfo) {
fallbackMode = parseFallbackField(prerenderInfo.fallback);
}
// When serving a HTML bot request, we want to serve a blocking render and
// not the prerendered page. This ensures that the correct content is served
// to the bot in the head.
if (fallbackMode === FallbackMode.PRERENDER && isBot(userAgent)) {
if (!isRoutePPREnabled || isHtmlBot) {
fallbackMode = FallbackMode.BLOCKING_STATIC_RENDER;
}
}
if ((previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) === -1) {
isOnDemandRevalidate = true;
}
// TODO: adapt for PPR
// only allow on-demand revalidate for fallback: true/blocking
// or for prerendered fallback: false paths
if (isOnDemandRevalidate && (fallbackMode !== FallbackMode.NOT_FOUND || previousCacheEntry)) {
fallbackMode = FallbackMode.BLOCKING_STATIC_RENDER;
}
if (!minimalMode && fallbackMode !== FallbackMode.BLOCKING_STATIC_RENDER && staticPathKey && !didRespond && !isDraftMode && pageIsDynamic && (isProduction || !isPrerendered)) {
// if the page has dynamicParams: false and this pathname wasn't
// prerendered trigger the no fallback handling
if (// In development, fall through to render to handle missing
// getStaticPaths.
(isProduction || prerenderInfo) && // When fallback isn't present, abort this render so we 404
fallbackMode === FallbackMode.NOT_FOUND) {
throw new NoFallbackError();
}
let fallbackResponse;
if (isRoutePPREnabled && !isRSCRequest) {
const cacheKey = typeof (prerenderInfo == null ? void 0 : prerenderInfo.fallback) === 'string' ? prerenderInfo.fallback : isProduction ? normalizedSrcPage : null;
// We use the response cache here to handle the revalidation and
// management of the fallback shell.
fallbackResponse = await routeModule.handleResponse({
cacheKey,
req,
nextConfig,
routeKind: RouteKind.APP_PAGE,
isFallback: true,
prerenderManifest,
isRoutePPREnabled,
responseGenerator: async ()=>doRender({
span,
// We pass `undefined` as rendering a fallback isn't resumed
// here.
postponed: undefined,
fallbackRouteParams: // If we're in production or we're debugging the fallback
// shell then we should postpone when dynamic params are
// accessed.
isProduction || isDebugFallbackShell ? getFallbackRouteParams(normalizedSrcPage) : null
}),
waitUntil: ctx.waitUntil
});
// If the fallback response was set to null, then we should return null.
if (fallbackResponse === null) return null;
// Otherwise, if we did get a fallback response, we should return it.
if (fallbackResponse) {
// Remove the cache control from the response to prevent it from being
// used in the surrounding cache.
delete fallbackResponse.cacheControl;
return fallbackResponse;
}
}
}
// Only requests that aren't revalidating can be resumed. If we have the
// minimal postponed data, then we should resume the render with it.
const postponed = !isOnDemandRevalidate && !isRevalidating && minimalPostponed ? minimalPostponed : undefined;
// When we're in minimal mode, if we're trying to debug the static shell,
// we should just return nothing instead of resuming the dynamic render.
if ((isDebugStaticShell || isDebugDynamicAccesses) && typeof postponed !== 'undefined') {
return {
cacheControl: {
revalidate: 1,
expire: undefined
},
value: {
kind: CachedRouteKind.PAGES,
html: RenderResult.EMPTY,
pageData: {},
headers: undefined,
status: undefined
}
};
}
// If this is a dynamic route with PPR enabled and the default route
// matches were set, then we should pass the fallback route params to
// the renderer as this is a fallback revalidation request.
const fallbackRouteParams = pageIsDynamic && isRoutePPREnabled && (getRequestMeta(req, 'renderFallbackShell') || isDebugFallbackShell) ? getFallbackRouteParams(pathname) : null;
// Perform the render.
return doRender({
span,
postponed,
fallbackRouteParams
});
};
const handleResponse = async (span)=>{
var _cacheEntry_value, _cachedData_headers;
const cacheEntry = await routeModule.handleResponse({
cacheKey: ssgCacheKey,
responseGenerator: (c)=>responseGenerator({
span,
...c
}),
routeKind: RouteKind.APP_PAGE,
isOnDemandRevalidate,
isRoutePPREnabled,
req,
nextConfig,
prerenderManifest,
waitUntil: ctx.waitUntil
});
if (isDraftMode) {
res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');
}
// In dev, we should not cache pages for any reason.
if (routeModule.isDev) {
res.setHeader('Cache-Control', 'no-store, must-revalidate');
}
if (!cacheEntry) {
if (ssgCacheKey) {
// A cache entry might not be generated if a response is written
// in `getInitialProps` or `getServerSideProps`, but those shouldn't
// have a cache key. If we do have a cache key but we don't end up
// with a cache entry, then either Next.js or the application has a
// bug that needs fixing.
throw Object.defineProperty(new Error('invariant: cache entry required but not generated'), "__NEXT_ERROR_CODE", {
value: "E62",
enumerable: false,
configurable: true
});
}
return null;
}
if (((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) !== CachedRouteKind.APP_PAGE) {
var _cacheEntry_value1;
throw Object.defineProperty(new Error(`Invariant app-page handler received invalid cache entry ${(_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), "__NEXT_ERROR_CODE", {
value: "E707",
enumerable: false,
configurable: true
});
}
const didPostpone = typeof cacheEntry.value.postponed === 'string';
if (isSSG && // We don't want to send a cache header for requests that contain dynamic
// data. If this is a Dynamic RSC request or wasn't a Prefetch RSC
// request, then we should set the cache header.
!isDynamicRSCRequest && (!didPostpone || isPrefetchRSCRequest)) {
if (!minimalMode) {
// set x-nextjs-cache header to match the header
// we set for the image-optimizer
res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');
}
// Set a header used by the client router to signal the response is static
// and should respect the `static` cache staleTime value.
res.setHeader(NEXT_IS_PRERENDER_HEADER, '1');
}
const { value: cachedData } = cacheEntry;
// Coerce the cache control parameter from the render.
let cacheControl;
// If this is a resume request in minimal mode it is streamed with dynamic
// content and should not be cached.
if (minimalPostponed) {
cacheControl = {
revalidate: 0,
expire: undefined
};
} else if (minimalMode && isRSCRequest && !isPrefetchRSCRequest && isRoutePPREnabled) {
cacheControl = {
revalidate: 0,
expire: undefined
};
} else if (!routeModule.isDev) {
// If this is a preview mode request, we shouldn't cache it
if (isDraftMode) {
cacheControl = {
revalidate: 0,
expire: undefined
};
} else if (!isSSG) {
if (!res.getHeader('Cache-Control')) {
cacheControl = {
revalidate: 0,
expire: undefined
};
}
} else if (cacheEntry.cacheControl) {
// If the cache entry has a cache control with a revalidate value that's
// a number, use it.
if (typeof cacheEntry.cacheControl.revalidate === 'number') {
var _cacheEntry_cacheControl;
if (cacheEntry.cacheControl.revalidate < 1) {
throw Object.defineProperty(new Error(`Invalid revalidate configuration provided: ${cacheEntry.cacheControl.revalidate} < 1`), "__NEXT_ERROR_CODE", {
value: "E22",
enumerable: false,
configurable: true
});
}
cacheControl = {
revalidate: cacheEntry.cacheControl.revalidate,
expire: ((_cacheEntry_cacheControl = cacheEntry.cacheControl) == null ? void 0 : _cacheEntry_cacheControl.expire) ?? nextConfig.expireTime
};
} else {
cacheControl = {
revalidate: CACHE_ONE_YEAR,
expire: undefined
};
}
}
}
cacheEntry.cacheControl = cacheControl;
if (typeof segmentPrefetchHeader === 'string' && (cachedData == null ? void 0 : cachedData.kind) === CachedRouteKind.APP_PAGE && cachedData.segmentData) {
var _cachedData_headers1;
// This is a prefetch request issued by the client Segment Cache. These
// should never reach the application layer (lambda). We should either
// respond from the cache (HIT) or respond with 204 No Content (MISS).
// Set a header to indicate that PPR is enabled for this route. This
// lets the client distinguish between a regular cache miss and a cache
// miss due to PPR being disabled. In other contexts this header is used
// to indicate that the response contains dynamic data, but here we're
// only using it to indicate that the feature is enabled — the segment
// response itself contains whether the data is dynamic.
res.setHeader(NEXT_DID_POSTPONE_HEADER, '2');
// Add the cache tags header to the response if it exists and we're in
// minimal mode while rendering a static page.
const tags = (_cachedData_headers1 = cachedData.headers) == null ? void 0 : _cachedData_headers1[NEXT_CACHE_TAGS_HEADER];
if (minimalMode && isSSG && tags && typeof tags === 'string') {
res.setHeader(NEXT_CACHE_TAGS_HEADER, tags);
}
const matchedSegment = cachedData.segmentData.get(segmentPrefetchHeader);
if (matchedSegment !== undefined) {
// Cache hit
return sendRenderResult({
req,
res,
generateEtags: nextConfig.generateEtags,
poweredByHeader: nextConfig.poweredByHeader,
result: RenderResult.fromStatic(matchedSegment, RSC_CONTENT_TYPE_HEADER),
cacheControl: cacheEntry.cacheControl
});
}
// Cache miss. Either a cache entry for this route has not been generated
// (which technically should not be possible when PPR is enabled, because
// at a minimum there should always be a fallback entry) or there's no
// match for the requested segment. Respond with a 204 No Content. We
// don't bother to respond with 404, because these requests are only
// issued as part of a prefetch.
res.statusCode = 204;
return sendRenderResult({
req,
res,
generateEtags: nextConfig.generateEtags,
poweredByHeader: nextConfig.poweredByHeader,
result: RenderResult.EMPTY,
cacheControl: cacheEntry.cacheControl
});
}
// If there's a callback for `onCacheEntry`, call it with the cache entry
// and the revalidate options.
const onCacheEntry = getRequestMeta(req, 'onCacheEntry');
if (onCacheEntry) {
const finished = await onCacheEntry({
...cacheEntry,
// TODO: remove this when upstream doesn't
// always expect this value to be "PAGE"
value: {
...cacheEntry.value,
kind: 'PAGE'
}
}, {
url: getRequestMeta(req, 'initURL')
});
if (finished) {
// TODO: maybe we have to end the request?
return null;
}
}
// If the request has a postponed state and it's a resume request we
// should error.
if (didPostpone && minimalPostponed) {
throw Object.defineProperty(new Error('Invariant: postponed state should not be present on a resume request'), "__NEXT_ERROR_CODE", {
value: "E396",
enumerable: false,
configurable: true
});
}
if (cachedData.headers) {
const headers = {
...cachedData.headers
};
if (!minimalMode || !isSSG) {
delete headers[NEXT_CACHE_TAGS_HEADER];
}
for (let [key, value] of Object.entries(headers)){
if (typeof value === 'undefined') continue;
if (Array.isArray(value)) {
for (const v of value){
res.appendHeader(key, v);
}
} else if (typeof value === 'number') {
value = value.toString();
res.appendHeader(key, value);
} else {
res.appendHeader(key, value);
}
}
}
// Add the cache tags header to the response if it exists and we're in
// minimal mode while rendering a static page.
const tags = (_cachedData_headers = cachedData.headers) == null ? void 0 : _cachedData_headers[NEXT_CACHE_TAGS_HEADER];
if (minimalMode && isSSG && tags && typeof tags === 'string') {
res.setHeader(NEXT_CACHE_TAGS_HEADER, tags);
}
// If the request is a data request, then we shouldn't set the status code
// from the response because it should always be 200. This should be gated
// behind the experimental PPR flag.
if (cachedData.status && (!isRSCRequest || !isRoutePPREnabled)) {
res.statusCode = cachedData.status;
}
// Redirect information is encoded in RSC payload, so we don't need to use redirect status codes
if (!minimalMode && cachedData.status && RedirectStatusCode[cachedData.status] && isRSCRequest) {
res.statusCode = 200;
}
// Mark that the request did postpone.
if (didPostpone) {
res.setHeader(NEXT_DID_POSTPONE_HEADER, '1');
}
// we don't go through this block when preview mode is true
// as preview mode is a dynamic request (bypasses cache) and doesn't
// generate both HTML and payloads in the same request so continue to just
// return the generated payload
if (isRSCRequest && !isDraftMode) {
// If this is a dynamic RSC request, then stream the response.
if (typeof cachedData.rscData === 'undefined') {
if (cachedData.postponed) {
throw Object.defineProperty(new Error('Invariant: Expected postponed to be undefined'), "__NEXT_ERROR_CODE", {
value: "E372",
enumerable: false,
configurable: true
});
}
return sendRenderResult({
req,
res,
generateEtags: nextConfig.generateEtags,
poweredByHeader: nextConfig.poweredByHeader,
result: cachedData.html,
// Dynamic RSC responses cannot be cached, even if they're
// configured with `force-static` because we have no way of
// distinguishing between `force-static` and pages that have no
// postponed state.
// TODO: distinguish `force-static` from pages with no postponed state (static)
cacheControl: isDynamicRSCRequest ? {
revalidate: 0,
expire: undefined
} : cacheEntry.cacheControl
});
}
// As this isn't a prefetch request, we should serve the static flight
// data.
return sendRenderResult({
req,
res,
generateEtags: nextConfig.generateEtags,
poweredByHeader: nextConfig.poweredByHeader,
result: RenderResult.fromStatic(cachedData.rscData, RSC_CONTENT_TYPE_HEADER),
cacheControl: cacheEntry.cacheControl
});
}
// This is a request for HTML data.
let body = cachedData.html;
// If there's no postponed state, we should just serve the HTML. This
// should also be the case for a resume request because it's completed
// as a server render (rather than a static render).
if (!didPostpone || minimalMode || isRSCRequest) {
// If we're in test mode, we should add a sentinel chunk to the response
// that's between the static and dynamic parts so we can compare the
// chunks and add assertions.
if (process.env.__NEXT_TEST_MODE && minimalMode && isRoutePPREnabled && body.contentType === HTML_CONTENT_TYPE_HEADER) {
// As we're in minimal mode, the static part would have already been
// streamed first. The only part that this streams is the dynamic part
// so we should FIRST stream the sentinel and THEN the dynamic part.
body.unshift(createPPRBoundarySentinel());
}
return sendRenderResult({
req,
res,
generateEtags: nextConfig.generateEtags,
poweredByHeader: nextConfig.poweredByHeader,
result: body,
cacheControl: cacheEntry.cacheControl
});
}
// If we're debugging the static shell or the dynamic API accesses, we
// should just serve the HTML without resuming the render. The returned
// HTML will be the static shell so all the Dynamic API's will be used
// during static generation.
if (isDebugStaticShell || isDebugDynamicAccesses) {
// Since we're not resuming the render, we need to at least add the
// closing body and html tags to create valid HTML.
body.push(new ReadableStream({
start (controller) {
controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML);
controller.close();
}
}));
return sendRenderResult({
req,
res,
generateEtags: nextConfig.generateEtags,
poweredByHeader: nextConfig.poweredByHeader,
result: body,
cacheControl: {
revalidate: 0,
expire: undefined
}
});
}
// If we're in test mode, we should add a sentinel chunk to the response
// that's between the static and dynamic parts so we can compare the
// chunks and add assertions.
if (process.env.__NEXT_TEST_MODE) {
body.push(createPPRBoundarySentinel());
}
// This request has postponed, so let's create a new transformer that the
// dynamic data can pipe to that will attach the dynamic data to the end
// of the response.
const transformer = new TransformStream();
body.push(transformer.readable);
// Perform the render again, but this time, provide the postponed state.
// We don't await because we want the result to start streaming now, and
// we've already chained the transformer's readable to the render result.
doRender({
span,
postponed: cachedData.postponed,
// This is a resume render, not a fallback render, so we don't need to
// set this.
fallbackRouteParams: null
}).then(async (result)=>{
var _result_value;
if (!result) {
throw Object.defineProperty(new Error('Invariant: expected a result to be returned'), "__NEXT_ERROR_CODE", {
value: "E463",
enumerable: false,
configurable: true
});
}
if (((_result_value = result.value) == null ? void 0 : _result_value.kind) !== CachedRouteKind.APP_PAGE) {
var _result_value1;
throw Object.defineProperty(new Error(`Invariant: expected a page response, got ${(_result_value1 = result.value) == null ? void 0 : _result_value1.kind}`), "__NEXT_ERROR_CODE", {
value: "E305",
enumerable: false,
configurable: true
});
}
// Pipe the resume result to the transformer.
await result.value.html.pipeTo(transformer.writable);
}).catch((err)=>{
// An error occurred during piping or preparing the render, abort
// the transformers writer so we can terminate the stream.
transformer.writable.abort(err).catch((e)=>{
console.error("couldn't abort transformer", e);
});
});
return sendRenderResult({
req,
res,
generateEtags: nextConfig.generateEtags,
poweredByHeader: nextConfig.poweredByHeader,
result: body,
// We don't want to cache the response if it has postponed data because
// the response being sent to the client it's dynamic parts are streamed
// to the client on the same request.
cacheControl: {
revalidate: 0,
expire: undefined
}
});
};
// TODO: activeSpan code path is for when wrapped by
// next-server can be removed when this is no longer used
if (activeSpan) {
await handleResponse(activeSpan);
} else {
return await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(BaseServerSpan.handleRequest, {
spanName: `${method} ${req.url}`,
kind: SpanKind.SERVER,
attributes: {
'http.method': method,
'http.target': req.url
}
}, handleResponse));
}
} catch (err) {
if (!(err instanceof NoFallbackError)) {
await routeModule.onRequestError(req, err, {
routerKind: 'App Router',
routePath: srcPage,
routeType: 'render',
revalidateReason: getRevalidateReason({
isRevalidate: isSSG,
isOnDemandRevalidate
})
}, routerServerContext);
}
// rethrow so that we can handle serving error page
throw err;
}
}
// TODO: omit this from production builds, only test builds should include it
/**
* Creates a readable stream that emits a PPR boundary sentinel.
*
* @returns A readable stream that emits a PPR boundary sentinel.
*/ function createPPRBoundarySentinel() {
return new ReadableStream({
start (controller) {
controller.enqueue(new TextEncoder().encode(''));
controller.close();
}
});
}
//# sourceMappingURL=app-page.js.map
exportsTypenamespace
javascript/autorscalias`server-only$client-only$next/dist/compiled/server-only$next/dist/compiled/client-only$/opt/canhelp/node_modules/next/head.js/opt/canhelp/node_modules/next/image.js/opt/canhelp/node_modules/next/constants.js/opt/canhelp/node_modules/next/router.js/opt/canhelp/node_modules/next/dynamic.js/opt/canhelp/node_modules/next/script.js/opt/canhelp/node_modules/next/link.js/opt/canhelp/node_modules/next/form.js/opt/canhelp/node_modules/next/navigation.js/opt/canhelp/node_modules/next/headers.js/opt/canhelp/node_modules/next/og.js/opt/canhelp/node_modules/next/server.js/opt/canhelp/node_modules/next/document.js/opt/canhelp/node_modules/next/app.jsnextnext/dist/compiled/server-only/emptynext/dist/compiled/client-only/errornext/dist/client/components/noop-headnext/dist/api/imagenext/dist/api/constantsnext/dist/api/routernext/dist/api/app-dynamicnext/dist/api/scriptnext/dist/client/app-dir/linknext/dist/client/app-dir/formnext/dist/api/navigation.react-servernext/dist/api/headersnext/dist/api/ognext/dist/api/servernext/dist/api/documentnext/dist/api/app/opt/canhelp/node_modules/next`cacheableparsedfileDependenciescontextDependenciesmissingDependenciesbuildDependenciesvalueDependenciesassetsassetsInforoutestrictexportsArgumenttopLevelDeclarationssnapshotwebpack/lib/util/LazySet/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-app-loader/index.js webpack/DefinePlugin_hashwebpack/DefinePlugin process.env.__NEXT_RELATIVE_DIST_DIRwebpack/DefinePlugin process.env.__NEXT_RELATIVE_PROJECT_DIRwebpack/DefinePlugin process.env.TURBOPACKwebpack/DefinePlugin process.env.__NEXT_MULTI_ZONE_DRAFT_MODEwebpack/DefinePlugin process.env.__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGINGwebpack/DefinePlugin process.env.NODE_ENVwebpack/DefinePlugin process.env.NEXT_RUNTIMEwebpack/DefinePlugin process.env.__NEXT_TEST_MODE4028310f".next"""false"production""nodejs"5637118ff10f6590pageabsolutePagePathpreferredRegionmiddlewareConfigrelatedModules/specialist-setup/page/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx __webpack_exports__`createPPRBoundarySentinelmodule0module1module2module3module4page5treepages__next_app_require____next_app_load_chunk____next_app__routeModulehandler@
yB @ /opt/canhelp/apps/web/src/app/icon.ico/opt/canhelp/apps/web/src/app/icon.jpg/opt/canhelp/apps/web/src/app/icon.jpeg/opt/canhelp/apps/web/src/app/icon.png/opt/canhelp/apps/web/src/app/icon.svg/opt/canhelp/apps/web/src/app/icon.tsx/opt/canhelp/apps/web/src/app/icon.ts/opt/canhelp/apps/web/src/app/icon.jsx/opt/canhelp/apps/web/src/app/icon.js/opt/canhelp/apps/web/src/app/icon0.ico/opt/canhelp/apps/web/src/app/icon0.jpg/opt/canhelp/apps/web/src/app/icon0.jpeg/opt/canhelp/apps/web/src/app/icon0.png/opt/canhelp/apps/web/src/app/icon0.svg/opt/canhelp/apps/web/src/app/icon0.tsx/opt/canhelp/apps/web/src/app/icon0.ts/opt/canhelp/apps/web/src/app/icon0.jsx/opt/canhelp/apps/web/src/app/icon0.js/opt/canhelp/apps/web/src/app/icon1.ico/opt/canhelp/apps/web/src/app/icon1.jpg/opt/canhelp/apps/web/src/app/icon1.jpeg/opt/canhelp/apps/web/src/app/icon1.png/opt/canhelp/apps/web/src/app/icon1.svg/opt/canhelp/apps/web/src/app/icon1.tsx/opt/canhelp/apps/web/src/app/icon1.ts/opt/canhelp/apps/web/src/app/icon1.jsx/opt/canhelp/apps/web/src/app/icon1.js/opt/canhelp/apps/web/src/app/icon2.ico/opt/canhelp/apps/web/src/app/icon2.jpg/opt/canhelp/apps/web/src/app/icon2.jpeg/opt/canhelp/apps/web/src/app/icon2.png/opt/canhelp/apps/web/src/app/icon2.svg/opt/canhelp/apps/web/src/app/icon2.tsx/opt/canhelp/apps/web/src/app/icon2.ts/opt/canhelp/apps/web/src/app/icon2.jsx/opt/canhelp/apps/web/src/app/icon2.js/opt/canhelp/apps/web/src/app/icon3.ico/opt/canhelp/apps/web/src/app/icon3.jpg/opt/canhelp/apps/web/src/app/icon3.jpeg/opt/canhelp/apps/web/src/app/icon3.png/opt/canhelp/apps/web/src/app/icon3.svg/opt/canhelp/apps/web/src/app/icon3.tsx/opt/canhelp/apps/web/src/app/icon3.ts/opt/canhelp/apps/web/src/app/icon3.jsx/opt/canhelp/apps/web/src/app/icon3.js/opt/canhelp/apps/web/src/app/icon4.ico/opt/canhelp/apps/web/src/app/icon4.jpg/opt/canhelp/apps/web/src/app/icon4.jpeg/opt/canhelp/apps/web/src/app/icon4.png/opt/canhelp/apps/web/src/app/icon4.svg/opt/canhelp/apps/web/src/app/icon4.tsx/opt/canhelp/apps/web/src/app/icon4.ts/opt/canhelp/apps/web/src/app/icon4.jsx/opt/canhelp/apps/web/src/app/icon4.js/opt/canhelp/apps/web/src/app/icon5.ico/opt/canhelp/apps/web/src/app/icon5.jpg/opt/canhelp/apps/web/src/app/icon5.jpeg/opt/canhelp/apps/web/src/app/icon5.png/opt/canhelp/apps/web/src/app/icon5.svg/opt/canhelp/apps/web/src/app/icon5.tsx/opt/canhelp/apps/web/src/app/icon5.ts/opt/canhelp/apps/web/src/app/icon5.jsx/opt/canhelp/apps/web/src/app/icon5.js/opt/canhelp/apps/web/src/app/icon6.ico/opt/canhelp/apps/web/src/app/icon6.jpg/opt/canhelp/apps/web/src/app/icon6.jpeg/opt/canhelp/apps/web/src/app/icon6.png/opt/canhelp/apps/web/src/app/icon6.svg/opt/canhelp/apps/web/src/app/icon6.tsx/opt/canhelp/apps/web/src/app/icon6.ts/opt/canhelp/apps/web/src/app/icon6.jsx/opt/canhelp/apps/web/src/app/icon6.js/opt/canhelp/apps/web/src/app/icon7.ico/opt/canhelp/apps/web/src/app/icon7.jpg/opt/canhelp/apps/web/src/app/icon7.jpeg/opt/canhelp/apps/web/src/app/icon7.png/opt/canhelp/apps/web/src/app/icon7.svg/opt/canhelp/apps/web/src/app/icon7.tsx/opt/canhelp/apps/web/src/app/icon7.ts/opt/canhelp/apps/web/src/app/icon7.jsx/opt/canhelp/apps/web/src/app/icon7.js/opt/canhelp/apps/web/src/app/icon8.ico/opt/canhelp/apps/web/src/app/icon8.jpg/opt/canhelp/apps/web/src/app/icon8.jpeg/opt/canhelp/apps/web/src/app/icon8.png/opt/canhelp/apps/web/src/app/icon8.svg/opt/canhelp/apps/web/src/app/icon8.tsx/opt/canhelp/apps/web/src/app/icon8.ts/opt/canhelp/apps/web/src/app/icon8.jsx/opt/canhelp/apps/web/src/app/icon8.js/opt/canhelp/apps/web/src/app/icon9.ico/opt/canhelp/apps/web/src/app/icon9.jpg/opt/canhelp/apps/web/src/app/icon9.jpeg/opt/canhelp/apps/web/src/app/icon9.png/opt/canhelp/apps/web/src/app/icon9.svg/opt/canhelp/apps/web/src/app/icon9.tsx/opt/canhelp/apps/web/src/app/icon9.ts/opt/canhelp/apps/web/src/app/icon9.jsx/opt/canhelp/apps/web/src/app/icon9.js/opt/canhelp/apps/web/src/app/apple-icon.jpg/opt/canhelp/apps/web/src/app/apple-icon.jpeg/opt/canhelp/apps/web/src/app/apple-icon.png/opt/canhelp/apps/web/src/app/apple-icon.tsx/opt/canhelp/apps/web/src/app/apple-icon.ts/opt/canhelp/apps/web/src/app/apple-icon.jsx/opt/canhelp/apps/web/src/app/apple-icon.js/opt/canhelp/apps/web/src/app/apple-icon0.jpg/opt/canhelp/apps/web/src/app/apple-icon0.jpeg/opt/canhelp/apps/web/src/app/apple-icon0.png/opt/canhelp/apps/web/src/app/apple-icon0.tsx/opt/canhelp/apps/web/src/app/apple-icon0.ts/opt/canhelp/apps/web/src/app/apple-icon0.jsx/opt/canhelp/apps/web/src/app/apple-icon0.js/opt/canhelp/apps/web/src/app/apple-icon1.jpg/opt/canhelp/apps/web/src/app/apple-icon1.jpeg/opt/canhelp/apps/web/src/app/apple-icon1.png/opt/canhelp/apps/web/src/app/apple-icon1.tsx/opt/canhelp/apps/web/src/app/apple-icon1.ts/opt/canhelp/apps/web/src/app/apple-icon1.jsx/opt/canhelp/apps/web/src/app/apple-icon1.js/opt/canhelp/apps/web/src/app/apple-icon2.jpg/opt/canhelp/apps/web/src/app/apple-icon2.jpeg/opt/canhelp/apps/web/src/app/apple-icon2.png/opt/canhelp/apps/web/src/app/apple-icon2.tsx/opt/canhelp/apps/web/src/app/apple-icon2.ts/opt/canhelp/apps/web/src/app/apple-icon2.jsx/opt/canhelp/apps/web/src/app/apple-icon2.js/opt/canhelp/apps/web/src/app/apple-icon3.jpg/opt/canhelp/apps/web/src/app/apple-icon3.jpeg/opt/canhelp/apps/web/src/app/apple-icon3.png/opt/canhelp/apps/web/src/app/apple-icon3.tsx/opt/canhelp/apps/web/src/app/apple-icon3.ts/opt/canhelp/apps/web/src/app/apple-icon3.jsx/opt/canhelp/apps/web/src/app/apple-icon3.js/opt/canhelp/apps/web/src/app/apple-icon4.jpg/opt/canhelp/apps/web/src/app/apple-icon4.jpeg/opt/canhelp/apps/web/src/app/apple-icon4.png/opt/canhelp/apps/web/src/app/apple-icon4.tsx/opt/canhelp/apps/web/src/app/apple-icon4.ts/opt/canhelp/apps/web/src/app/apple-icon4.jsx/opt/canhelp/apps/web/src/app/apple-icon4.js/opt/canhelp/apps/web/src/app/apple-icon5.jpg/opt/canhelp/apps/web/src/app/apple-icon5.jpeg/opt/canhelp/apps/web/src/app/apple-icon5.png/opt/canhelp/apps/web/src/app/apple-icon5.tsx/opt/canhelp/apps/web/src/app/apple-icon5.ts/opt/canhelp/apps/web/src/app/apple-icon5.jsx/opt/canhelp/apps/web/src/app/apple-icon5.js/opt/canhelp/apps/web/src/app/apple-icon6.jpg/opt/canhelp/apps/web/src/app/apple-icon6.jpeg/opt/canhelp/apps/web/src/app/apple-icon6.png/opt/canhelp/apps/web/src/app/apple-icon6.tsx/opt/canhelp/apps/web/src/app/apple-icon6.ts/opt/canhelp/apps/web/src/app/apple-icon6.jsx/opt/canhelp/apps/web/src/app/apple-icon6.js/opt/canhelp/apps/web/src/app/apple-icon7.jpg/opt/canhelp/apps/web/src/app/apple-icon7.jpeg/opt/canhelp/apps/web/src/app/apple-icon7.png/opt/canhelp/apps/web/src/app/apple-icon7.tsx/opt/canhelp/apps/web/src/app/apple-icon7.ts/opt/canhelp/apps/web/src/app/apple-icon7.jsx/opt/canhelp/apps/web/src/app/apple-icon7.js/opt/canhelp/apps/web/src/app/apple-icon8.jpg/opt/canhelp/apps/web/src/app/apple-icon8.jpeg/opt/canhelp/apps/web/src/app/apple-icon8.png/opt/canhelp/apps/web/src/app/apple-icon8.tsx/opt/canhelp/apps/web/src/app/apple-icon8.ts/opt/canhelp/apps/web/src/app/apple-icon8.jsx/opt/canhelp/apps/web/src/app/apple-icon8.js/opt/canhelp/apps/web/src/app/apple-icon9.jpg/opt/canhelp/apps/web/src/app/apple-icon9.jpeg/opt/canhelp/apps/web/src/app/apple-icon9.png/opt/canhelp/apps/web/src/app/apple-icon9.tsx/opt/canhelp/apps/web/src/app/apple-icon9.ts/opt/canhelp/apps/web/src/app/apple-icon9.jsx/opt/canhelp/apps/web/src/app/apple-icon9.js/opt/canhelp/apps/web/src/app/opengraph-image.jpg/opt/canhelp/apps/web/src/app/opengraph-image.jpeg/opt/canhelp/apps/web/src/app/opengraph-image.png/opt/canhelp/apps/web/src/app/opengraph-image.gif/opt/canhelp/apps/web/src/app/opengraph-image.tsx/opt/canhelp/apps/web/src/app/opengraph-image.ts/opt/canhelp/apps/web/src/app/opengraph-image.jsx/opt/canhelp/apps/web/src/app/opengraph-image.js/opt/canhelp/apps/web/src/app/opengraph-image0.jpg/opt/canhelp/apps/web/src/app/opengraph-image0.jpeg/opt/canhelp/apps/web/src/app/opengraph-image0.png/opt/canhelp/apps/web/src/app/opengraph-image0.gif/opt/canhelp/apps/web/src/app/opengraph-image0.tsx/opt/canhelp/apps/web/src/app/opengraph-image0.ts/opt/canhelp/apps/web/src/app/opengraph-image0.jsx/opt/canhelp/apps/web/src/app/opengraph-image0.js/opt/canhelp/apps/web/src/app/opengraph-image1.jpg/opt/canhelp/apps/web/src/app/opengraph-image1.jpeg/opt/canhelp/apps/web/src/app/opengraph-image1.png/opt/canhelp/apps/web/src/app/opengraph-image1.gif/opt/canhelp/apps/web/src/app/opengraph-image1.tsx/opt/canhelp/apps/web/src/app/opengraph-image1.ts/opt/canhelp/apps/web/src/app/opengraph-image1.jsx/opt/canhelp/apps/web/src/app/opengraph-image1.js/opt/canhelp/apps/web/src/app/opengraph-image2.jpg/opt/canhelp/apps/web/src/app/opengraph-image2.jpeg/opt/canhelp/apps/web/src/app/opengraph-image2.png/opt/canhelp/apps/web/src/app/opengraph-image2.gif/opt/canhelp/apps/web/src/app/opengraph-image2.tsx/opt/canhelp/apps/web/src/app/opengraph-image2.ts/opt/canhelp/apps/web/src/app/opengraph-image2.jsx/opt/canhelp/apps/web/src/app/opengraph-image2.js/opt/canhelp/apps/web/src/app/opengraph-image3.jpg/opt/canhelp/apps/web/src/app/opengraph-image3.jpeg/opt/canhelp/apps/web/src/app/opengraph-image3.png/opt/canhelp/apps/web/src/app/opengraph-image3.gif/opt/canhelp/apps/web/src/app/opengraph-image3.tsx/opt/canhelp/apps/web/src/app/opengraph-image3.ts/opt/canhelp/apps/web/src/app/opengraph-image3.jsx/opt/canhelp/apps/web/src/app/opengraph-image3.js/opt/canhelp/apps/web/src/app/opengraph-image4.jpg/opt/canhelp/apps/web/src/app/opengraph-image4.jpeg/opt/canhelp/apps/web/src/app/opengraph-image4.png/opt/canhelp/apps/web/src/app/opengraph-image4.gif/opt/canhelp/apps/web/src/app/opengraph-image4.tsx/opt/canhelp/apps/web/src/app/opengraph-image4.ts/opt/canhelp/apps/web/src/app/opengraph-image4.jsx/opt/canhelp/apps/web/src/app/opengraph-image4.js/opt/canhelp/apps/web/src/app/opengraph-image5.jpg/opt/canhelp/apps/web/src/app/opengraph-image5.jpeg/opt/canhelp/apps/web/src/app/opengraph-image5.png/opt/canhelp/apps/web/src/app/opengraph-image5.gif/opt/canhelp/apps/web/src/app/opengraph-image5.tsx/opt/canhelp/apps/web/src/app/opengraph-image5.ts/opt/canhelp/apps/web/src/app/opengraph-image5.jsx/opt/canhelp/apps/web/src/app/opengraph-image5.js/opt/canhelp/apps/web/src/app/opengraph-image6.jpg/opt/canhelp/apps/web/src/app/opengraph-image6.jpeg/opt/canhelp/apps/web/src/app/opengraph-image6.png/opt/canhelp/apps/web/src/app/opengraph-image6.gif/opt/canhelp/apps/web/src/app/opengraph-image6.tsx/opt/canhelp/apps/web/src/app/opengraph-image6.ts/opt/canhelp/apps/web/src/app/opengraph-image6.jsx/opt/canhelp/apps/web/src/app/opengraph-image6.js/opt/canhelp/apps/web/src/app/opengraph-image7.jpg/opt/canhelp/apps/web/src/app/opengraph-image7.jpeg/opt/canhelp/apps/web/src/app/opengraph-image7.png/opt/canhelp/apps/web/src/app/opengraph-image7.gif/opt/canhelp/apps/web/src/app/opengraph-image7.tsx/opt/canhelp/apps/web/src/app/opengraph-image7.ts/opt/canhelp/apps/web/src/app/opengraph-image7.jsx/opt/canhelp/apps/web/src/app/opengraph-image7.js/opt/canhelp/apps/web/src/app/opengraph-image8.jpg/opt/canhelp/apps/web/src/app/opengraph-image8.jpeg/opt/canhelp/apps/web/src/app/opengraph-image8.png/opt/canhelp/apps/web/src/app/opengraph-image8.gif/opt/canhelp/apps/web/src/app/opengraph-image8.tsx/opt/canhelp/apps/web/src/app/opengraph-image8.ts/opt/canhelp/apps/web/src/app/opengraph-image8.jsx/opt/canhelp/apps/web/src/app/opengraph-image8.js/opt/canhelp/apps/web/src/app/opengraph-image9.jpg/opt/canhelp/apps/web/src/app/opengraph-image9.jpeg/opt/canhelp/apps/web/src/app/opengraph-image9.png/opt/canhelp/apps/web/src/app/opengraph-image9.gif/opt/canhelp/apps/web/src/app/opengraph-image9.tsx/opt/canhelp/apps/web/src/app/opengraph-image9.ts/opt/canhelp/apps/web/src/app/opengraph-image9.jsx/opt/canhelp/apps/web/src/app/opengraph-image9.js/opt/canhelp/apps/web/src/app/twitter-image.jpg/opt/canhelp/apps/web/src/app/twitter-image.jpeg/opt/canhelp/apps/web/src/app/twitter-image.png/opt/canhelp/apps/web/src/app/twitter-image.gif/opt/canhelp/apps/web/src/app/twitter-image.tsx/opt/canhelp/apps/web/src/app/twitter-image.ts/opt/canhelp/apps/web/src/app/twitter-image.jsx/opt/canhelp/apps/web/src/app/twitter-image.js/opt/canhelp/apps/web/src/app/twitter-image0.jpg/opt/canhelp/apps/web/src/app/twitter-image0.jpeg/opt/canhelp/apps/web/src/app/twitter-image0.png/opt/canhelp/apps/web/src/app/twitter-image0.gif/opt/canhelp/apps/web/src/app/twitter-image0.tsx/opt/canhelp/apps/web/src/app/twitter-image0.ts/opt/canhelp/apps/web/src/app/twitter-image0.jsx/opt/canhelp/apps/web/src/app/twitter-image0.js/opt/canhelp/apps/web/src/app/twitter-image1.jpg/opt/canhelp/apps/web/src/app/twitter-image1.jpeg/opt/canhelp/apps/web/src/app/twitter-image1.png/opt/canhelp/apps/web/src/app/twitter-image1.gif/opt/canhelp/apps/web/src/app/twitter-image1.tsx/opt/canhelp/apps/web/src/app/twitter-image1.ts/opt/canhelp/apps/web/src/app/twitter-image1.jsx/opt/canhelp/apps/web/src/app/twitter-image1.js/opt/canhelp/apps/web/src/app/twitter-image2.jpg/opt/canhelp/apps/web/src/app/twitter-image2.jpeg/opt/canhelp/apps/web/src/app/twitter-image2.png/opt/canhelp/apps/web/src/app/twitter-image2.gif/opt/canhelp/apps/web/src/app/twitter-image2.tsx/opt/canhelp/apps/web/src/app/twitter-image2.ts/opt/canhelp/apps/web/src/app/twitter-image2.jsx/opt/canhelp/apps/web/src/app/twitter-image2.js/opt/canhelp/apps/web/src/app/twitter-image3.jpg/opt/canhelp/apps/web/src/app/twitter-image3.jpeg/opt/canhelp/apps/web/src/app/twitter-image3.png/opt/canhelp/apps/web/src/app/twitter-image3.gif/opt/canhelp/apps/web/src/app/twitter-image3.tsx/opt/canhelp/apps/web/src/app/twitter-image3.ts/opt/canhelp/apps/web/src/app/twitter-image3.jsx/opt/canhelp/apps/web/src/app/twitter-image3.js/opt/canhelp/apps/web/src/app/twitter-image4.jpg/opt/canhelp/apps/web/src/app/twitter-image4.jpeg/opt/canhelp/apps/web/src/app/twitter-image4.png/opt/canhelp/apps/web/src/app/twitter-image4.gif/opt/canhelp/apps/web/src/app/twitter-image4.tsx/opt/canhelp/apps/web/src/app/twitter-image4.ts/opt/canhelp/apps/web/src/app/twitter-image4.jsx/opt/canhelp/apps/web/src/app/twitter-image4.js/opt/canhelp/apps/web/src/app/twitter-image5.jpg/opt/canhelp/apps/web/src/app/twitter-image5.jpeg/opt/canhelp/apps/web/src/app/twitter-image5.png/opt/canhelp/apps/web/src/app/twitter-image5.gif/opt/canhelp/apps/web/src/app/twitter-image5.tsx/opt/canhelp/apps/web/src/app/twitter-image5.ts/opt/canhelp/apps/web/src/app/twitter-image5.jsx/opt/canhelp/apps/web/src/app/twitter-image5.js/opt/canhelp/apps/web/src/app/twitter-image6.jpg/opt/canhelp/apps/web/src/app/twitter-image6.jpeg/opt/canhelp/apps/web/src/app/twitter-image6.png/opt/canhelp/apps/web/src/app/twitter-image6.gif/opt/canhelp/apps/web/src/app/twitter-image6.tsx/opt/canhelp/apps/web/src/app/twitter-image6.ts/opt/canhelp/apps/web/src/app/twitter-image6.jsx/opt/canhelp/apps/web/src/app/twitter-image6.js/opt/canhelp/apps/web/src/app/twitter-image7.jpg/opt/canhelp/apps/web/src/app/twitter-image7.jpeg/opt/canhelp/apps/web/src/app/twitter-image7.png/opt/canhelp/apps/web/src/app/twitter-image7.gif/opt/canhelp/apps/web/src/app/twitter-image7.tsx/opt/canhelp/apps/web/src/app/twitter-image7.ts/opt/canhelp/apps/web/src/app/twitter-image7.jsx/opt/canhelp/apps/web/src/app/twitter-image7.js/opt/canhelp/apps/web/src/app/twitter-image8.jpg/opt/canhelp/apps/web/src/app/twitter-image8.jpeg/opt/canhelp/apps/web/src/app/twitter-image8.png/opt/canhelp/apps/web/src/app/twitter-image8.gif/opt/canhelp/apps/web/src/app/twitter-image8.tsx/opt/canhelp/apps/web/src/app/twitter-image8.ts/opt/canhelp/apps/web/src/app/twitter-image8.jsx/opt/canhelp/apps/web/src/app/twitter-image8.js/opt/canhelp/apps/web/src/app/twitter-image9.jpg/opt/canhelp/apps/web/src/app/twitter-image9.jpeg/opt/canhelp/apps/web/src/app/twitter-image9.png/opt/canhelp/apps/web/src/app/twitter-image9.gif/opt/canhelp/apps/web/src/app/twitter-image9.tsx/opt/canhelp/apps/web/src/app/twitter-image9.ts/opt/canhelp/apps/web/src/app/twitter-image9.jsx/opt/canhelp/apps/web/src/app/twitter-image9.js/opt/canhelp/apps/web/src/app/favicon.ico/opt/canhelp/apps/web/src/app/manifest.webmanifest/opt/canhelp/apps/web/src/app/manifest.json/opt/canhelp/apps/web/src/app/manifest.tsx/opt/canhelp/apps/web/src/app/manifest.ts/opt/canhelp/apps/web/src/app/manifest.jsx/opt/canhelp/apps/web/src/app/manifest.js/opt/canhelp/apps/web/src/app/layout.tsx/opt/canhelp/apps/web/src/app/layout.ts/opt/canhelp/apps/web/src/app/layout.jsx/opt/canhelp/apps/web/src/app/layout.js/opt/canhelp/apps/web/src/app/template.tsx/opt/canhelp/apps/web/src/app/error.tsx/opt/canhelp/apps/web/src/app/loading.tsx/opt/canhelp/apps/web/src/app/global-error.tsx/opt/canhelp/apps/web/src/app/not-found.tsx/opt/canhelp/apps/web/src/app/not-found.ts/opt/canhelp/apps/web/src/app/not-found.jsx/opt/canhelp/apps/web/src/app/not-found.js/opt/canhelp/apps/web/src/app/forbidden.tsx/opt/canhelp/apps/web/src/app/unauthorized.tsx/opt/canhelp/apps/web/src/app/template.ts/opt/canhelp/apps/web/src/app/error.ts/opt/canhelp/apps/web/src/app/loading.ts/opt/canhelp/apps/web/src/app/global-error.ts/opt/canhelp/apps/web/src/app/forbidden.ts/opt/canhelp/apps/web/src/app/unauthorized.ts/opt/canhelp/apps/web/src/app/template.jsx/opt/canhelp/apps/web/src/app/error.jsx/opt/canhelp/apps/web/src/app/loading.jsx/opt/canhelp/apps/web/src/app/global-error.jsx/opt/canhelp/apps/web/src/app/forbidden.jsx/opt/canhelp/apps/web/src/app/unauthorized.jsx/opt/canhelp/apps/web/src/app/template.js/opt/canhelp/apps/web/src/app/error.js/opt/canhelp/apps/web/src/app/loading.js/opt/canhelp/apps/web/src/app/global-error.js/opt/canhelp/apps/web/src/app/forbidden.js/opt/canhelp/apps/web/src/app/unauthorized.js/opt/canhelp/apps/web/src/app/specialist-setup/layout.tsx/opt/canhelp/apps/web/src/app/specialist-setup/template.tsx/opt/canhelp/apps/web/src/app/specialist-setup/error.tsx/opt/canhelp/apps/web/src/app/specialist-setup/loading.tsx/opt/canhelp/apps/web/src/app/specialist-setup/global-error.tsx/opt/canhelp/apps/web/src/app/specialist-setup/not-found.tsx/opt/canhelp/apps/web/src/app/specialist-setup/forbidden.tsx/opt/canhelp/apps/web/src/app/specialist-setup/unauthorized.tsx/opt/canhelp/apps/web/src/app/specialist-setup/layout.ts/opt/canhelp/apps/web/src/app/specialist-setup/template.ts/opt/canhelp/apps/web/src/app/specialist-setup/error.ts/opt/canhelp/apps/web/src/app/specialist-setup/loading.ts/opt/canhelp/apps/web/src/app/specialist-setup/global-error.ts/opt/canhelp/apps/web/src/app/specialist-setup/not-found.ts/opt/canhelp/apps/web/src/app/specialist-setup/forbidden.ts/opt/canhelp/apps/web/src/app/specialist-setup/unauthorized.ts/opt/canhelp/apps/web/src/app/specialist-setup/layout.jsx/opt/canhelp/apps/web/src/app/specialist-setup/template.jsx/opt/canhelp/apps/web/src/app/specialist-setup/error.jsx/opt/canhelp/apps/web/src/app/specialist-setup/loading.jsx/opt/canhelp/apps/web/src/app/specialist-setup/global-error.jsx/opt/canhelp/apps/web/src/app/specialist-setup/not-found.jsx/opt/canhelp/apps/web/src/app/specialist-setup/forbidden.jsx/opt/canhelp/apps/web/src/app/specialist-setup/unauthorized.jsx/opt/canhelp/apps/web/src/app/specialist-setup/layout.js/opt/canhelp/apps/web/src/app/specialist-setup/template.js/opt/canhelp/apps/web/src/app/specialist-setup/error.js/opt/canhelp/apps/web/src/app/specialist-setup/loading.js/opt/canhelp/apps/web/src/app/specialist-setup/global-error.js/opt/canhelp/apps/web/src/app/specialist-setup/not-found.js/opt/canhelp/apps/web/src/app/specialist-setup/forbidden.js/opt/canhelp/apps/web/src/app/specialist-setup/unauthorized.js/opt/canhelp/apps/web/src/app/specialist-setup/icon.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon.png/opt/canhelp/apps/web/src/app/specialist-setup/icon.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon.js/opt/canhelp/apps/web/src/app/specialist-setup/icon0.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon0.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon0.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon0.png/opt/canhelp/apps/web/src/app/specialist-setup/icon0.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon0.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon0.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon0.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon0.js/opt/canhelp/apps/web/src/app/specialist-setup/icon1.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon1.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon1.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon1.png/opt/canhelp/apps/web/src/app/specialist-setup/icon1.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon1.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon1.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon1.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon1.js/opt/canhelp/apps/web/src/app/specialist-setup/icon2.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon2.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon2.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon2.png/opt/canhelp/apps/web/src/app/specialist-setup/icon2.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon2.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon2.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon2.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon2.js/opt/canhelp/apps/web/src/app/specialist-setup/icon3.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon3.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon3.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon3.png/opt/canhelp/apps/web/src/app/specialist-setup/icon3.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon3.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon3.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon3.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon3.js/opt/canhelp/apps/web/src/app/specialist-setup/icon4.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon4.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon4.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon4.png/opt/canhelp/apps/web/src/app/specialist-setup/icon4.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon4.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon4.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon4.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon4.js/opt/canhelp/apps/web/src/app/specialist-setup/icon5.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon5.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon5.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon5.png/opt/canhelp/apps/web/src/app/specialist-setup/icon5.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon5.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon5.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon5.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon5.js/opt/canhelp/apps/web/src/app/specialist-setup/icon6.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon6.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon6.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon6.png/opt/canhelp/apps/web/src/app/specialist-setup/icon6.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon6.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon6.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon6.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon6.js/opt/canhelp/apps/web/src/app/specialist-setup/icon7.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon7.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon7.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon7.png/opt/canhelp/apps/web/src/app/specialist-setup/icon7.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon7.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon7.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon7.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon7.js/opt/canhelp/apps/web/src/app/specialist-setup/icon8.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon8.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon8.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon8.png/opt/canhelp/apps/web/src/app/specialist-setup/icon8.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon8.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon8.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon8.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon8.js/opt/canhelp/apps/web/src/app/specialist-setup/icon9.ico/opt/canhelp/apps/web/src/app/specialist-setup/icon9.jpg/opt/canhelp/apps/web/src/app/specialist-setup/icon9.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/icon9.png/opt/canhelp/apps/web/src/app/specialist-setup/icon9.svg/opt/canhelp/apps/web/src/app/specialist-setup/icon9.tsx/opt/canhelp/apps/web/src/app/specialist-setup/icon9.ts/opt/canhelp/apps/web/src/app/specialist-setup/icon9.jsx/opt/canhelp/apps/web/src/app/specialist-setup/icon9.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon0.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon0.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon0.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon0.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon0.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon0.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon0.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon1.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon1.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon1.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon1.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon1.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon1.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon1.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon2.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon2.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon2.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon2.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon2.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon2.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon2.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon3.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon3.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon3.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon3.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon3.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon3.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon3.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon4.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon4.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon4.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon4.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon4.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon4.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon4.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon5.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon5.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon5.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon5.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon5.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon5.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon5.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon6.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon6.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon6.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon6.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon6.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon6.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon6.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon7.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon7.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon7.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon7.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon7.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon7.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon7.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon8.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon8.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon8.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon8.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon8.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon8.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon8.js/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon9.jpg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon9.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon9.png/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon9.tsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon9.ts/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon9.jsx/opt/canhelp/apps/web/src/app/specialist-setup/apple-icon9.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image0.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image1.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image2.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image3.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image4.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image5.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image6.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image7.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image8.js/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.jpg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.png/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.gif/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.tsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.ts/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.jsx/opt/canhelp/apps/web/src/app/specialist-setup/opengraph-image9.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image0.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image1.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image2.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image3.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image4.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image5.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image6.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image7.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image8.js/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.jpg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.jpeg/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.png/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.gif/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.tsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.ts/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.jsx/opt/canhelp/apps/web/src/app/specialist-setup/twitter-image9.js/opt/canhelp/apps/web/src/app/specialist-setup/page.ts/opt/canhelp/apps/web/src/app/specialist-setup/page.jsx/opt/canhelp/apps/web/src/app/specialist-setup/page.js `4webpack/lib/dependencies/HarmonyCompatibilityDependency
d webpack/lib/dependencies/ConstDependencyA
A
aA
c
MA $
c HA% d
c ?Ae
c FA
c MA P
c VAQ
c TA
c MA F
c RAG
c ^A
c iA a
c QAb
c OA
c \A
b @ A
c MA V
c BAW
c JA
c :A H
c kAI
c! !JA
c" "AA
(
c# #Rwebpack/lib/dependencies/HarmonyExportHeaderDependency A
cO OA A
cP RAB Y
cS SA - A -
cV YA.
cZ \A
c] ]VA w
c^ `A A
cb qA A
ar @ __webpack_require__Aw
cTT0A' K
co
o10AO Q
co
o7 falseAk
cppEA
cx}{}A
cxz{A
c~~GA! G"
@ `%A 0AK" Z"
@ `%A uA9 9
@
`@ `
A9 ;
@
`8@ `
trueAxF F
@O `AO 0AG 6G
CO O lAb ӯ
@0 `@5 `Aկ 4
B0 5 `hA +
@[ `@] `
A- t
@[ `.@] `
`|webpack/lib/dependencies/HarmonyImportSideEffectDependency
turbopack-transitionnext-ssrnext/dist/server/route-modules/app-page/module.compiled
next-server-utilitynext/dist/server/route-kind
anext/dist/server/instrumentation/utils
c
Mnext/dist/server/lib/trace/tracer
c Hnext/dist/server/request-meta
c ?next/dist/server/lib/trace/constants
c Fnext/dist/server/app-render/interop-default
c Mnext/dist/server/app-render/strip-flight-headers
c V next/dist/server/base-http/node
c T
next/dist/server/lib/experimental/ppr
c M`next/dist/server/request/fallback-params
c R`next/dist/server/app-render/encryption-utils
c ^`
next/dist/server/lib/streaming-metadata
c i`next/dist/server/app-render/action-utils
c Q`next/dist/shared/lib/router/utils/app-paths
c O`next/dist/server/lib/server-action-request-meta
c \`next/dist/client/components/app-router-headers
b @ `next/dist/shared/lib/router/utils/is-bot
c M`next/dist/server/response-cache
c B`next/dist/lib/fallback
c J`next/dist/server/render-result
c :`next/dist/lib/constants
c k`next/dist/server/stream-utils/encoded-tags
c! !J`next/dist/server/send-payload
c" "A`next/dist/shared/lib/no-fallback-error.external
c# #Rwebpack/lib/dependencies/PureExpressionDependency
Ac DI
cNNIwebpack/lib/dependencies/HarmonyExportSpecifierDependency@AA
cO OAA
cO O`next/dist/client/components/builtin/global-error.js
cP Rwebpack/lib/dependencies/HarmonyExportImportedSpecifierDependencyadefaultGlobalError89<=>`
cS S99
cV Y`
next/dist/server/app-render/entry-base
cZ \`next/dist/client/components/redirect-status-code
c] ]V`
d^ ` ` webpack/lib/dependencies/HarmonyExportImportedSpecifierDependencyHarmonyStarExportsList
`
d^ `++
cb qwebpack/lib/dependencies/HarmonyImportSpecifierDependencyaAppPageRouteModuleA t
cbb1RouteKindAPP_PAGEA A
cdd
ar @ getRequestMetaA
c+A^ l
@ `@ `&normalizeAppPathAi y `
@ `@ `.getBotTypeA `
@ `@ `isHtmlBotRequestA( 8 `
@ `@ `&A
@ `#@ `1NEXT_ROUTER_PREFETCH_HEADERA 4`
@ `^@ `yA
@ `@ `'RSC_HEADERA 4`
@ `T@ `^getIsPossibleServerActionA< U `
@ `#@ `<checkIsAppPPREnabledA! !
~~
@ `@ `2AQ+ _+ pp
@ `"@ `0shouldServeStreamingMetadataA, , `
{{
@ `5@ `QstripFlightHeadersA3 4 ll
@ @ ` entryBaseA@4 I4 4`TY
@ `@ `Ap4 {4 `
@ @ `setReferenceManifestsSingletonA5 6 `ff
@ @ `&createServerModuleMapA6 6 `ee
@ `@ `2getTracerA&7 /7 LL
@ `@ `NodeNextRequestAZ8 i8 4 QQ
@ ` @ `/NodeNextResponseA8 8 4 LL
@ ` @ `0BaseServerSpanhandleRequestA,> H> A,> :>
??
@ `A@ `]AxB B 99
@9 `*@9 `8interopDefaultAC C 88
@@ `@@ `-webpack/lib/dependencies/CommonJsFullRequireDependencyajoinAF F pathAF F
@O `A@O `UAJ K ))
@` `&@` `4A4R BR %%
@} `@} `'NEXT_CACHE_TAGS_HEADERAS S 4|`BB
@ `@ `.CachedRouteKindnAY Y AY Y
v`66
@ `@ `2parseFallbackFieldA^ ^ q`33
@ `@ `1FallbackModePRERENDERA_ _ A_ _
j`,,
@ `!@ `7isBotA_ _ e`##
@ `;@ `@BLOCKING_STATIC_RENDERAC` f` AC` O`
_`!!
@ `#@ `FNOT_FOUNDA b b A b b
Y`
@ `:@ `PAPb sb APb \b
T`
@ `@ `BAb b Ab b
O`
@ `1@ `TAd d Ad d
J`
@ `!@ `7NoFallbackErrorAe e 4E`
@ `@ `-786Ag g Ag g
@9
@ `#@ `5getFallbackRouteParamsAj j ;`
@ `G@ `]PAGESAp p Ap p
5`
@ `@ `3EMPTYRenderResultAp p Ap p
.`
@ `@ `0)(Ar r *
@ `O@ `]A!s 7s &`
C Auu u Auu ~u
!
@ `@ `-AD{ \{ AD{ S{
`
@= `g@= `NEXT_IS_PRERENDER_HEADERA 4`
@Q `@Q `6CACHE_ONE_YEARAT b 4`
@ `(@ `6A A
`
@ `qA NEXT_DID_POSTPONE_HEADERA ! 4`
@ `@ `6A0 F 4`
@ `qA A ѐ 4`
@ `"@ `8sendRenderResultA Ƒ `
@ `@ `+fromStaticA A
`
@ ` @ `7RSC_CONTENT_TYPE_HEADERAђ 4`
@ `H@ `_Aw `
@ `@ `'AV h AV b
`
@ `@ `.Ah v
@ `!@ `/A5 C
@ `@ `'a`A 4`
@ `#@ `9^]A, B 4`
@ `kA [ZA Š 4`
@ `@ `4RedirectStatusCodeA 4`
@ `5@ `GAʣ 4`
@ `@ `6Aa q `
@ `@ `+At `
@ `@ `'AS j AS _
`
@# `@# `3A 4`||
@# `H@# `_AL \ `
@6 `@6 `'ENCODED_TAGSCLOSEDBODY_AND_HTMLA , A A
`{{
@H `+@H `LA `yy
@L `@L `'32A A
`jj
@u `_@u `wA9 I `pp
@ `@ `#A A
GG
@ `T@ `pSpanKindSERVERA# 2 A# +
<<
@ `@ `)QPA* 9 4`cc
@ `@ `,getRevalidateReasonA 22
@ `"@ `5webpack/lib/dependencies/ImportEagerDependencycc
`{@
bb
A ;
AS
next/dist/client/components/builtin/forbidden.js
A
next/dist/client/components/builtin/unauthorized.js
A.
A
next-metadata-image-loader?type=icon&segment=&basePath=&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js!/opt/canhelp/apps/web/src/app/icon.svg?__next_metadata__
A
`_ResolverCachePluginCacheMisscontextrequestqueryfragmentmoduledirectoryfileinternalfullySpecifieddescriptionFilePathdescriptionFileDatadescriptionFileRootrelativePath/opt/canhelp/apps/web/src/app/become-specialist/page.tsx0nameversionprivatescriptsdependenciesdevDependenciesweb0.1.0devbuildstartlinttypechecknext dev --port 3000next buildnext startnext linttsc --noEmit @canhelp/shared@marsidev/react-turnstilebetter-authnanostoresreactreact-domsocket.io-clientzod*^1.5.0^1.2.7^1.2.0^15.1.6^19.0.0^4.8.1^3.24.1@types/node@types/react@types/react-domautoprefixerpostcsstailwindcsstypescript^22.10.7^19.0.6^19.0.3^10.4.20^8.5.1^3.4.17^5.7.3/opt/canhelp/apps/web./src/app/become-specialist/page.tsx@
yB/opt/canhelp/opt/ @ /opt/canhelp/apps/web/src/app/become-specialist/package.json/opt/canhelp/apps/web/src/app/package.json/opt/canhelp/apps/web/src/package.json
yB/opt/canhelp/apps/web/src/app/become-specialist/opt/canhelp/apps/web/src/app/opt/canhelp/apps/web/src/opt/canhelp/apps! pJ
yB `J
yBf960364c5f724fc3 /opt/canhelp/apps/web/src/app/dashboard/page.tsx0ߜ./src/app/dashboard/page.tsx@
yB/opt/canhelp/apps/web/src/app/dashboard! pJ
yB `J
yB54b9246d0ec1fc12 @
yB @
yB
yBՁ/ @ /opt/canhelp/apps/web/src/app/dashboard/package.jsonissuerissuerLayercompilerserver w@
yB @ /opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/package.json
@ /opt/canhelp/apps/web/opt/canhelp/apps/web/src/package.json/opt/canhelp/apps/web/opt/canhelp/apps/web/package.json/opt/canhelp/apps/web/opt/canhelp/apps/package.json/opt/canhelp/apps/web/opt/canhelp/package.json/opt/canhelp/apps/web/opt/package.json @ /opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/package.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx.js/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx.mjs/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx.ts/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx.jsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/dashboard/page.tsx.wasm fg Z@
yBf @ /opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/package.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx.js/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx.mjs/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx.ts/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx.jsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/become-specialist/page.tsx.wasm T0H./src/app/specialist-setup/page.tsx@
yB/opt/canhelp/apps/web/src/app/specialist-setupJ! pJ
yB `J
yB386cb8af793ff7aaH F @ /opt/canhelp/apps/web/src/app/specialist-setup/package.json
, // This file is generated by the Webpack next-flight-loader.
import { registerClientReference } from "react-server-dom-webpack/server";
export default registerClientReference(
function() { throw new Error("Attempted to call the default export of \"/opt/canhelp/apps/web/src/app/dashboard/page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); },
"/opt/canhelp/apps/web/src/app/dashboard/page.tsx",
"default",
);
`_`
abcmainFieldsconditionNames`$abcdefghijklmnopqrreact$react/compiler-runtime$react/jsx-dev-runtime$react/jsx-runtime$react-dom$react-dom/client$react-dom/server$react-dom/server.browser$react-dom/server.edge$react-dom/static$react-dom/static.browser$react-dom/static.edge$react-server-dom-webpack/client$react-server-dom-webpack/server$react-server-dom-webpack/server.node$react-server-dom-webpack/static$@vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.tsbcdcdefghijklmnopqrnext/dist/server/route-modules/app-page/vendored/rsc/reactnext/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtimenext/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtimenext/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtimenext/dist/server/route-modules/app-page/vendored/rsc/react-domnext/dist/compiled/react-dom/clientnext/dist/compiled/react-dom/server.nodenext/dist/compiled/react-dom/server.browsernext/dist/build/webpack/alias/react-dom-server.jsnext/dist/compiled/react-dom/static.nodenext/dist/compiled/react-dom/static.browsernext/dist/compiled/react-dom/static.edgenext/dist/compiled/react-server-dom-webpack/client.nodenext/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-servernext/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-staticnext/dist/client/dev/noop-turbopack-hmrcmainreact-server...`_`abcdefg6ijkl/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-swc-loader.jslu3a3d700c7aa20be9typeactionIdsclientRefsclientEntryTypeisClientRefclientLauto|*default*
yB]b
d
`=@
`J A * A +
react-server-dom-webpack/server
`Jwebpack/lib/dependencies/HarmonyExportExpressionDependency`
registerClientReferenceA
b& < // This file is generated by the Webpack next-flight-loader.
import { registerClientReference } from "react-server-dom-webpack/server";
export default registerClientReference(
function() { throw new Error("Attempted to call the default export of \"/opt/canhelp/apps/web/src/app/become-specialist/page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); },
"/opt/canhelp/apps/web/src/app/become-specialist/page.tsx",
"default",
);
`
3
DM8b949ca63e93259a+\
yB2
d `=@
`J
A : A ;
`J
A
b& LMC
}@
yBB~ >X@ /opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/package.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx.js/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx.mjs/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx.tsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx.ts/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx.jsx/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx.json/opt/canhelp/apps/web/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx.wasm : // This file is generated by the Webpack next-flight-loader.
import { registerClientReference } from "react-server-dom-webpack/server";
export default registerClientReference(
function() { throw new Error("Attempted to call the default export of \"/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component."); },
"/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx",
"default",
);
`
j
a4803d4eab8253a1-
yB(f
d `=@
`J
A 8 A 9
`J
A
b& @ 2
yB /opt/canhelp/node_modules/react-server-dom-webpackT@ /opt/canhelp/apps/web/src/app/specialist-setup/node_modules/opt/canhelp/apps/web/src/app/node_modules/opt/canhelp/apps/web/src/node_modules/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js /opt/canhelp/node_modules/next/package.json`descriptionvlicenserepositorybugshomepagetypesfilesbintaskrpeerDependenciespeerDependenciesMetaoptionalDependencieskeywordsengines15.5.14The React Framework./dist/server/next.jsMITvercel/next.jshttps://github.com/vercel/next.js/issueshttps://nextjs.orgindex.d.ts`Ddistapp.jsapp.d.tsbabel.jsbabel.d.tsclient.jsclient.d.tscompatcache.jscache.d.tsconfig.jsconfig.d.tsconstants.jsconstants.d.tsdocument.jsdocument.d.tsdynamic.jsdynamic.d.tserror.jserror.d.tsfuturelegacyscript.jsscript.d.tsserver.jsserver.d.tshead.jshead.d.tsimage.jsimage.d.tslink.jslink.d.tsform.jsform.d.tsrouter.jsrouter.d.tsjest.jsjest.d.tsamp.jsamp.d.tsog.jsog.d.tsroot-params.jsroot-params.d.tstypes.d.tstypes.jsёtypes/global.d.tstypes/compiled.d.tsimage-types/global.d.tsnavigation-types/navigation.d.tsnavigation-types/compat/navigation.d.tsfontnavigation.jsnavigation.d.tsheaders.jsheaders.d.tsnavigation-typesweb-vitals.jsweb-vitals.d.tsexperimental/testing/server.jsexperimental/testing/server.d.tsexperimental/testmode/playwright.jsexperimental/testmode/playwright.d.tsexperimental/testmode/playwright/msw.jsexperimental/testmode/playwright/msw.d.tsexperimental/testmode/proxy.jsexperimental/testmode/proxy.d.tsl./dist/bin/next
AreleaseAprepublishOnlybncc-compiledstorybookbuild-storybooktest-storybookcross-env NEXT_SERVER_NO_MANGLE=1 taskrtaskr releasepnpm releasecd ../../ && turbo run buildtsc --project tsconfig.build.json --declaration --emitDeclarationOnly --stripInternal --declarationDir disttsec --noEmittaskr nccBROWSER=none storybook dev -p 6006storybook buildrequires./taskfile-webpack.js./taskfile-ncc.js./taskfile-swc.js./taskfile-watch.js@next/env@swc/helperscaniuse-liteGstyled-jsx0.5.15^1.0.300015798.4.315.1.6@opentelemetry/api@playwright/testbabel-plugin-react-compiler,-sass^1.1.0^1.51.1*^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0^1.3.0optional sharp@next/swc-darwin-arm64@next/swc-darwin-x64@next/swc-linux-arm64-gnu@next/swc-linux-arm64-musl@next/swc-linux-x64-gnu@next/swc-linux-x64-musl@next/swc-win32-arm64-msvc@next/swc-win32-x64-msvc^0.34.3tttttttt@ @ampproject/toolbox-optimizer@babel/code-frame@babel/core@babel/eslint-parser@babel/generator@babel/plugin-syntax-bigint@babel/plugin-syntax-dynamic-import@babel/plugin-syntax-import-attributes@babel/plugin-syntax-jsx@babel/plugin-syntax-typescript@babel/plugin-transform-class-properties@babel/plugin-transform-export-namespace-from@babel/plugin-transform-modules-commonjs@babel/plugin-transform-numeric-separator@babel/plugin-transform-object-rest-spread@babel/plugin-transform-runtime@babel/preset-env@babel/preset-react@babel/preset-typescript@babel/runtime@babel/traverse@babel/types@base-ui-components/react@capsizecss/metrics@edge-runtime/cookies@edge-runtime/ponyfill@edge-runtime/primitives@hapi/accept@jest/transform@jest/types@mswjs/interceptors@napi-rs/triples@next/font@next/polyfill-module@next/polyfill-nomodule@next/react-refresh-utils@next/swc@rspack/core@storybook/addon-a11y@storybook/addon-essentials@storybook/addon-interactions@storybook/addon-webpack5-compiler-swc@storybook/blocks@storybook/react@storybook/react-webpack5@storybook/test@storybook/test-runner@swc/core@swc/types@taskr/clear@taskr/esnext@types/amphtml-validator@types/babel__code-frame@types/babel__core@types/babel__generator@types/babel__template@types/babel__traverse@types/bytes@types/ci-info@types/compression@types/content-disposition@types/content-type@types/cookie@types/cross-spawn@types/debug@types/express-serve-static-core@types/fresh@types/glob@types/jsonwebtoken@types/lodash@types/lodash.curry@types/path-to-regexp@types/picomatch@types/platform@types/react-is@types/semver@types/send@types/shell-quote@types/tar@types/text-table@types/ua-parser-js@types/webpack-sources1@types/ws@vercel/ncc@vercel/nft@vercel/turbopack-ecmascript-runtimeacornamphtml-validatoranserargassertasync-retryasync-semaaxe-playwrightbabel-loaderbabel-plugin-transform-definebabel-plugin-transform-react-remove-prop-typesbrowserify-zlibbrowserslistbufferbusboybytesci-infocli-selectclient-onlycommandercomment-jsoncompressionconfconstants-browserifycontent-dispositioncontent-typecookiecross-envcross-spawncrypto-browserifycss-loadercss.escapecssnano-preset-defaultdata-uri-to-bufferdebugdevaluedomain-browseredge-runtimeeventsfind-upfreshglobgzip-sizehttp-proxyhttp-proxy-agenthttps-browserifyhttps-proxy-agenticss-utilsignore-loaderimage-sizeis-dockeris-wsljest-workerjson5jsonwebtokenloader-runnerloader-utils2loader-utils3lodash.currymini-css-extract-pluginmswnanoidnative-urlneo-asyncnode-html-parseroraos-browserifyp-limitp-queuepath-browserifypath-to-regexppicomatchpostcss-flexbugs-fixespostcss-modules-extract-importspostcss-modules-local-by-defaultpostcss-modules-scopepostcss-modules-valuespostcss-preset-envpostcss-safe-parserpostcss-scsspostcss-value-parserprocesspunycodequerystring-es3raw-bodyreact-refreshrecastregenerator-runtimesafe-stable-stringifysass-loaderschema-utils2schema-utils3semversendserver-onlysetimmediateshell-quotesource-mapsource-map-loadersource-map08stacktrace-parser stream-browserifystream-httpstrict-event-emitterstring-hashstring_decoderstrip-ansistyle-loadersuperstructtarterserterser-webpack-plugintext-tabletimers-browserifytty-browserify\ua-parser-jsunistoreutilvm-browserifywatchpackweb-vitalswebpackwebpack-sources1webpack-sources3wsBzod-validation-error2.8.37.26.27.26.107.24.67.27.07.8.37.26.07.25.97.25.47.26.37.26.91.0.0-beta.23.4.06.0.04.0.05.0.229.5.00.23.01.2.01.6.01.51.11.4.58.6.03.0.00.21.01.11.240.1.71.1.01.0.07.0.67.20.57.4.47.20.73.1.12.0.00.0.360.5.41.1.30.3.34.1.54.17.330.5.07.1.19.0.04.14.1984.1.61.7.02.3.31.3.419.0.819.0.318.2.47.3.10.14.41.7.16.1.50.2.10.7.36npm:@types/webpack-sources@0.1.58.2.00.34.00.27.1*8.14.01.0.381.4.94.1.01.2.3ԅ2.0.310.0.019.1.0-rc.2܆0.4.240.2.04.24.45.6.0watson/ci-info#f43f6a1cefff47fb361c88cf4b943fdbcaafe5401.1.20.0.112.1.03.0.31.7.45.0.0˅0.5.31.0.40.4.16.0.37.0.33.12.07.1.21.5.1ą3.0.14.1.12.0.14.19.04.0.13.3.00.5.27.1.75.1.11.18.15.0.15.1.00.1.21.2.12.2.027.5.12.2.34.3.0npm:loader-utils@2.0.4npm:loader-utils@3.1.32.4.42.3.03.1.320.3.42.6.15.3.34.0.40.3.03.1.06.6.21.0.16.3.04.2.07.4.34.0.30.11.102.1.12.4.10.12.00.23.110.13.42.5.015.0.0npm:schema-utils@2.7.1npm:schema-utils@3.0.07.3.20.18.0ą1.0.51.7.30.6.1śnpm:source-map@0.8.0-beta.00.1.101.3.01.0.36.1.155.27.05.3.92.0.125.8.21.0.353.4.10.12.42.4.04.2.15.98.0npm:webpack-sources@1.4.3npm:webpack-sources@3.2.38.2.33.25.76n
frameworknextjsnodefront-endbackendclivercel^18.18.0 || ^19.8.0 || >= 20.0.0./dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js@ 2
yB/opt/canhelp/node_modulesn lnext@15.5.14 %@ /opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc@ /opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/opt/canhelp/node_modules/next/dist/server/route-modules/opt/canhelp/node_modules/next/dist/server@ /opt/canhelp/node_modules/next/dist@ /opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/package.json/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server@ /opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/package.json/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/package.json/opt/canhelp/node_modules/next/dist/server/route-modules/package.json/opt/canhelp/node_modules/next/dist/server/package.json/opt/canhelp/node_modules/next/dist/package.jsonQr @ G
yB
/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/package.json /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.mjs /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.tsx /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.ts /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.jsx /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.json /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.wasm@ /opt/canhelp/apps/web/opt/canhelp/node_modules/next/opt/canhelp/apps/web/opt/canhelp/node_modules/package.jsonNN@ /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/vendored/package.json/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/app-page/package.json/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/route-modules/package.json/opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/server/package.json@ /opt/canhelp/apps/web/opt/canhelp/node_modules/next/dist/package.json/opt/canhelp/apps/web/opt/canhelp/node_modules/next/package.json@ 0
yB%&,. 5@ 6/opt/canhelp/node_modules/next-flight-client-entry-loader/opt/canhelp/node_modules/next-flight-client-entry-loader.js/opt/canhelp/node_modules/next-flight-client-entry-loader.json/opt/canhelp/node_modules/next-flight-client-entry-loader.node77777@ 0@ @
yB )^ import(/* webpackMode: "eager" */ "/opt/canhelp/apps/web/src/app/specialist-setup/page.tsx");
`
:ssr;`<=?next/dist/compiled/server-only?@ABCDEFGHIJKLMnext/dist/compiled/server-only/indexnext/dist/compiled/client-only/indexNOPQRSTUnext/dist/api/navigationVWXYZ[`
\]^_`abcd3hi
/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.jsjsc6530003adc5b415
yB `\
{{
`
!"J
[d
yB `\
mm
qr ./0@
yBaI<lmJ )*K@
yBIL9:);NO Wu^bcY @
yBX/01Q!om /* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { useSession } from '@/lib/auth';
import { useLocale } from '@/context/locale';
import { request } from '@/lib/api';
export default function BecomeSpecialistPage() {
const { data: session, isPending } = useSession();
const router = useRouter();
const { t } = useLocale();
const [loading, setLoading] = useState(false);
const [error, setError] = useState('');
const role = session?.user?.role;
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{
if (!isPending && session && role === 'specialist') router.push('/tasks');
}, [
session,
isPending,
role
]);
async function handleBecome() {
setLoading(true);
setError('');
try {
await request('/users/me/become-specialist', {
method: 'POST'
});
router.push('/specialist-setup');
} catch {
setError(t('common.error'));
setLoading(false);
}
}
if (isPending || session && role === 'specialist') {
return /*#__PURE__*/ _jsx("div", {
className: "text-center py-20 text-white",
children: t('common.loading')
});
}
const steps = [
{
n: 1,
title: t('become_specialist.step1.title'),
desc: t('become_specialist.step1.desc'),
icon: '🗂️'
},
{
n: 2,
title: t('become_specialist.step2.title'),
desc: t('become_specialist.step2.desc'),
icon: '🔍'
},
{
n: 3,
title: t('become_specialist.step3.title'),
desc: t('become_specialist.step3.desc'),
icon: '💰'
}
];
const benefits = [
{
icon: '🎯',
text: t('become_specialist.benefit1')
},
{
icon: '⭐',
text: t('become_specialist.benefit2')
},
{
icon: '📅',
text: t('become_specialist.benefit3')
},
{
icon: '❤️',
text: t('become_specialist.benefit4')
}
];
return /*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsx("section", {
className: "bg-gradient-to-br from-blue-700 to-blue-500 text-white py-20 px-4",
children: /*#__PURE__*/ _jsxs("div", {
className: "max-w-3xl mx-auto text-center",
children: [
/*#__PURE__*/ _jsx("h1", {
className: "text-4xl md:text-5xl font-bold mb-4",
children: t('become_specialist.hero.title')
}),
/*#__PURE__*/ _jsx("p", {
className: "text-xl text-blue-100 mb-8",
children: t('become_specialist.hero.subtitle')
})
]
})
}),
/*#__PURE__*/ _jsxs("section", {
className: "max-w-4xl mx-auto px-4 py-16",
children: [
/*#__PURE__*/ _jsx("h2", {
className: "text-2xl font-bold text-white mb-10 text-center",
children: t('become_specialist.how.title')
}),
/*#__PURE__*/ _jsx("div", {
className: "grid md:grid-cols-3 gap-8",
children: steps.map((step)=>/*#__PURE__*/ _jsxs("div", {
className: "text-center",
children: [
/*#__PURE__*/ _jsx("div", {
className: "w-14 h-14 bg-blue-50 border-2 border-blue-200 rounded-2xl flex items-center justify-center text-2xl mx-auto mb-4",
children: step.icon
}),
/*#__PURE__*/ _jsx("div", {
className: "w-7 h-7 bg-blue-600 text-white rounded-full flex items-center justify-center text-sm font-bold mx-auto -mt-1 mb-3",
children: step.n
}),
/*#__PURE__*/ _jsx("h3", {
className: "font-semibold text-white text-lg mb-2",
children: step.title
}),
/*#__PURE__*/ _jsx("p", {
className: "text-blue-100 text-sm leading-relaxed",
children: step.desc
})
]
}, step.n))
})
]
}),
/*#__PURE__*/ _jsx("section", {
className: "bg-gray-50 py-14 px-4",
children: /*#__PURE__*/ _jsxs("div", {
className: "max-w-3xl mx-auto",
children: [
/*#__PURE__*/ _jsx("h2", {
className: "text-2xl font-bold text-gray-900 mb-8 text-center",
children: t('become_specialist.benefits.title')
}),
/*#__PURE__*/ _jsx("div", {
className: "grid sm:grid-cols-2 gap-4",
children: benefits.map((b, i)=>/*#__PURE__*/ _jsxs("div", {
className: "flex items-start gap-4 bg-white rounded-xl border border-gray-200 p-5",
children: [
/*#__PURE__*/ _jsx("span", {
className: "text-2xl shrink-0",
children: b.icon
}),
/*#__PURE__*/ _jsx("p", {
className: "text-gray-700 font-medium leading-snug",
children: b.text
})
]
}, i))
})
]
})
}),
/*#__PURE__*/ _jsx("section", {
className: "py-16 px-4 text-center",
children: /*#__PURE__*/ _jsxs("div", {
className: "max-w-md mx-auto",
children: [
error && /*#__PURE__*/ _jsx("p", {
className: "text-red-500 text-sm mb-4",
children: error
}),
session ? /*#__PURE__*/ _jsx("button", {
onClick: handleBecome,
disabled: loading,
className: "w-full bg-blue-600 text-white px-8 py-4 rounded-xl font-bold text-lg hover:bg-blue-700 disabled:opacity-60 transition",
children: loading ? t('common.loading') : t('profile.become_specialist')
}) : /*#__PURE__*/ _jsx("a", {
href: "/register?role=specialist",
className: "block w-full bg-blue-600 text-white px-8 py-4 rounded-xl font-bold text-lg hover:bg-blue-700 transition text-center",
children: t('profile.become_specialist')
})
]
})
})
]
});
}
`sideEffectFree
$`$
next/dist/server/route-modules/app-page/vendored/ssr/reactnext/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtimenext/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtimenext/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtimenext/dist/server/route-modules/app-page/vendored/ssr/react-domnext/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-clientnext/dist/compiled/react-server-dom-webpack/server.nodenext/dist/compiled/react-server-dom-webpack/static.node
/opt/canhelp/node_modules/next/dist/build/webpack/loaders/next-flight-client-module-loader.js(1552d077f220356c9@BecomeSpecialistPage
yB
d a=|
b=|`}@
`,A
`,A
`(A -
`-A. R
`$
Ab Z AS Z
@ `( react/jsx-runtime
b=|
`, next/navigation
`, @/lib/auth
`( @/context/locale
`- @/lib/api
`$
@ useSessionA
b)3useRouterA
b useLocaleA
b
useStateA $
c"*AK S
c&useEffectA
c7@}|A
cjsx_jsxA
c##!jsxs_jsxsAa f
cNNA
cPPA8
=
cR(R-A
cU&U*A
cY&Y*A
c``AH
L
cc"c&A( ,
cg"g&A
ciBiGA_ c
cl2l6A
cp2p6A
ct2t6A
cx2x6A[ _
@ `@ `A
@ `(@ `-AR V
@ `&@ `*AI M
@ `&@ `*A
@ `I@ `NA
@ `6@ `:A {{
@ `6@ `:A[ _ ww
@ `@ `A ss
@ `(@ `-A[ _ oo
@ `/@ `3A# ' {kk
@ `0@ `4A wgg
@ `+@ `/ /* __next_internal_client_entry_do_not_use__ default auto */ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
import { useEffect, useState } from 'react';
import { useRouter } from 'next/navigation';
import Link from 'next/link';
import { useSession } from '@/lib/auth';
import { useLocale } from '@/context/locale';
import { getMyTasks, getMyOffers, getMyReviews, getNotifications, getMyDashboard, getSpecialistFomoDashboard, getCustomerFomoDashboard, getMySpecialistCards } from '@/lib/api';
import { formatPrice, taskTitle } from '@/lib/taskLocale';
import { PlanBadge } from '@/components/PlanBadge';
import { UsageMeter } from '@/components/UsageMeter';
/** Extract the quoted task title from a stored notification body (any locale) */ function extractNotifParam(body) {
if (!body) return null;
const m = body.match(/[«""](.+?)[»""]/);
return m?.[1] ?? null;
}
function PlanBlock({ dashboard, t }) {
const plan = dashboard.plan;
const expiry = dashboard.planExpiration;
const usage = dashboard.usage;
const stats = dashboard.stats;
const expiryPct = expiry ? Math.max(0, Math.min(100, Math.round(expiry.daysLeft / 30 * 100))) : 100;
const expiryColor = expiry ? expiry.daysLeft <= 3 ? 'bg-red-500' : expiry.daysLeft <= 7 ? 'bg-amber-400' : 'bg-green-400' : 'bg-green-400';
return /*#__PURE__*/ _jsxs("div", {
className: "bg-white rounded-2xl border border-gray-200 p-5 mb-6",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex items-center justify-between mb-4",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex items-center gap-2",
children: [
/*#__PURE__*/ _jsx("h2", {
className: "font-semibold text-gray-800 text-sm",
children: t('dashboard.plan.title', 'My Plan')
}),
plan ? /*#__PURE__*/ _jsx(PlanBadge, {
tier: plan.tier,
size: "sm"
}) : /*#__PURE__*/ _jsx("span", {
className: "text-xs text-gray-400",
children: t('dashboard.plan.no_plan', 'Free')
})
]
}),
/*#__PURE__*/ _jsx(Link, {
href: "/pricing",
className: "text-xs font-medium text-blue-600 hover:underline",
children: plan?.tier === 'ultimate' ? null : t('dashboard.plan.upgrade', 'Upgrade')
})
]
}),
expiry && /*#__PURE__*/ _jsxs("div", {
className: "mb-4",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex justify-between text-xs text-gray-500 mb-1",
children: [
/*#__PURE__*/ _jsx("span", {
children: t('dashboard.plan.expires', 'Expires in {n} days').replace('{n}', String(expiry.daysLeft))
}),
/*#__PURE__*/ _jsxs("span", {
children: [
expiry.daysLeft,
" ",
t('pricing.days', 'days')
]
})
]
}),
/*#__PURE__*/ _jsx("div", {
className: "h-1.5 rounded-full bg-gray-100",
children: /*#__PURE__*/ _jsx("div", {
className: `h-full rounded-full transition-all ${expiryColor}`,
style: {
width: `${expiryPct}%`
}
})
})
]
}),
(usage.messagesSent !== undefined || usage.ordersMade !== undefined) && /*#__PURE__*/ _jsxs("div", {
className: "space-y-2 mb-4",
children: [
/*#__PURE__*/ _jsx("p", {
className: "text-xs font-medium text-gray-500 uppercase tracking-wide",
children: t('dashboard.plan.limits', 'Daily limits')
}),
/*#__PURE__*/ _jsx(UsageMeter, {
current: usage.messagesSent,
limit: usage.messagesLeft !== null ? usage.messagesSent + usage.messagesLeft : null,
label: t('dashboard.plan.messages', 'Messages')
}),
/*#__PURE__*/ _jsx(UsageMeter, {
current: usage.ordersMade,
limit: usage.ordersLeft !== null ? usage.ordersMade + usage.ordersLeft : null,
label: t('dashboard.plan.orders', 'Orders')
})
]
}),
Object.keys(stats).length > 0 && /*#__PURE__*/ _jsx("div", {
className: "grid grid-cols-2 gap-2",
children: Object.entries(stats).map(([key, val])=>/*#__PURE__*/ _jsxs("div", {
className: "bg-gray-50 rounded-xl px-3 py-2 text-center",
children: [
/*#__PURE__*/ _jsx("p", {
className: "text-lg font-bold text-gray-800",
children: val
}),
/*#__PURE__*/ _jsx("p", {
className: "text-[10px] text-gray-400 uppercase tracking-wide",
children: t(`dashboard.stats.${key}`, key)
})
]
}, key))
})
]
});
}
export default function DashboardPage() {
const { data: session, isPending } = useSession();
const router = useRouter();
const { t, locale } = useLocale();
const [tasks, setTasks] = useState([]);
const [offers, setOffers] = useState([]);
const [myReviews, setMyReviews] = useState([]);
const [invitations, setInvitations] = useState([]);
const [loading, setLoading] = useState(true);
const [dashboard, setDashboard] = useState(null);
const [fomoData, setFomoData] = useState(null);
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{
if (!isPending && !session) router.push('/login');
}, [
session,
isPending
]);
// Redirect new specialists without any cards to the setup wizard
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{
if (!session) return;
const role = session.user?.role;
if (role !== 'specialist') return;
getMySpecialistCards().then(({ cards })=>{
if (cards.length === 0) router.push('/specialist-setup');
}).catch(()=>{});
}, [
session
]);
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{
if (!session) return;
Promise.all([
getMyTasks(),
getMyOffers(),
getMyReviews(),
getNotifications(),
getMyDashboard()
]).then(([t, o, r, notifs, dash])=>{
setTasks(t);
setOffers(o);
setMyReviews(r);
setInvitations(notifs.filter((n)=>n.type === 'task_invite'));
setDashboard(dash);
}).catch(()=>{}).finally(()=>setLoading(false));
}, [
session
]);
process.env.__NEXT_PRIVATE_MINIMIZE_MACRO_FALSE && useEffect(()=>{
if (!session) return;
const role = session.user?.role;
if (role === 'specialist') {
getSpecialistFomoDashboard().then(setFomoData).catch(()=>{});
} else {
getCustomerFomoDashboard().then(setFomoData).catch(()=>{});
}
}, [
session
]);
if (isPending || loading) return /*#__PURE__*/ _jsx("div", {
className: "text-center py-20 text-white",
children: t('common.loading')
});
const dateLocale = locale === 'ru' ? 'ru-RU' : locale === 'en' ? 'en-US' : 'el-GR';
const activeTasks = tasks.filter((task)=>task.status !== 'completed' && task.status !== 'cancelled');
const completedTasks = tasks.filter((task)=>task.status === 'completed' || task.status === 'cancelled');
const activeOffers = offers.filter((row)=>{
const offer = row.offer || row;
const task = row.task;
return offer.status !== 'other_accepted' && task?.status !== 'completed' && task?.status !== 'cancelled';
});
const completedOffers = offers.filter((row)=>{
const offer = row.offer || row;
const task = row.task;
return offer.status === 'other_accepted' || task?.status === 'completed' || task?.status === 'cancelled';
});
function TaskCard({ task }) {
const offerCount = task.offerCount ?? 0;
const declinedCount = task.declinedCount ?? 0;
const activeOfferCount = offerCount - declinedCount;
return /*#__PURE__*/ _jsx(Link, {
href: `/tasks/${task.id}`,
className: "block bg-white rounded-xl border border-gray-200 p-4 hover:shadow-sm hover:border-blue-300 transition",
children: /*#__PURE__*/ _jsxs("div", {
className: "flex justify-between items-start",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex-1 min-w-0",
children: [
/*#__PURE__*/ _jsx("p", {
className: "font-medium text-gray-900 truncate",
children: taskTitle(task, locale)
}),
/*#__PURE__*/ _jsx("p", {
className: "text-xs text-gray-400 mt-1",
children: new Date(task.createdAt).toLocaleDateString(dateLocale)
}),
offerCount > 0 && /*#__PURE__*/ _jsxs("div", {
className: "flex items-center gap-2 mt-1.5",
children: [
/*#__PURE__*/ _jsxs("span", {
className: "text-xs text-blue-600 font-medium",
children: [
"\uD83D\uDCBC ",
offerCount,
" ",
t('dashboard.offers_count', 'предл.')
]
}),
declinedCount > 0 && /*#__PURE__*/ _jsxs("span", {
className: "text-xs text-red-400",
children: [
"✕ ",
declinedCount,
" ",
t('dashboard.declined_count', 'откл.')
]
})
]
})
]
}),
/*#__PURE__*/ _jsxs("div", {
className: "ml-3 text-right shrink-0",
children: [
/*#__PURE__*/ _jsx("span", {
className: `text-xs px-2 py-0.5 rounded-full ${task.status === 'open' ? 'bg-green-100 text-green-700' : task.status === 'in_progress' ? 'bg-blue-100 text-blue-700' : task.status === 'completed' ? 'bg-gray-100 text-gray-600' : 'bg-red-100 text-red-600'}`,
children: t(`task.status.${task.status}`, task.status)
}),
task.budget && /*#__PURE__*/ _jsxs("p", {
className: "text-sm font-bold text-green-600 mt-1",
children: [
formatPrice(task.budget),
"€"
]
})
]
})
]
})
});
}
function OfferCard({ row }) {
const offer = row.offer || row;
const task = row.task;
const reviewReceived = task?.status === 'completed' && offer.status === 'accepted' ? myReviews.find((r)=>r.review?.taskId === task?.id)?.review ?? null : null;
return /*#__PURE__*/ _jsxs(Link, {
href: task ? `/tasks/${task.id}` : '#',
className: "block bg-white rounded-xl border border-gray-200 p-4 hover:shadow-sm hover:border-blue-300 transition",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex justify-between items-start",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex-1 min-w-0",
children: [
/*#__PURE__*/ _jsx("p", {
className: "font-medium text-gray-900 truncate",
children: task?.title || t('chat.task_fallback')
}),
/*#__PURE__*/ _jsx("p", {
className: "text-xs text-gray-400 mt-1",
children: new Date(offer.createdAt).toLocaleDateString(dateLocale)
})
]
}),
/*#__PURE__*/ _jsxs("div", {
className: "ml-3 text-right shrink-0",
children: [
/*#__PURE__*/ _jsxs("p", {
className: "font-bold text-green-600",
children: [
formatPrice(offer.price),
"€"
]
}),
/*#__PURE__*/ _jsx("span", {
className: `text-xs px-2 py-0.5 rounded-full mt-1 inline-block ${offer.status === 'accepted' ? 'bg-green-100 text-green-700' : offer.status === 'declined' ? 'bg-red-100 text-red-700' : offer.status === 'other_accepted' ? 'bg-orange-100 text-orange-600' : 'bg-gray-100 text-gray-700'}`,
children: t(`offer.status.${offer.status}`, offer.status)
})
]
})
]
}),
reviewReceived && /*#__PURE__*/ _jsxs("div", {
className: "mt-3 pt-3 border-t border-gray-100 flex items-center gap-2",
children: [
/*#__PURE__*/ _jsx("div", {
className: "flex gap-0.5",
children: [
1,
2,
3,
4,
5
].map((star)=>/*#__PURE__*/ _jsx("span", {
className: `text-sm ${star <= reviewReceived.rating ? 'text-yellow-400' : 'text-gray-200'}`,
children: "★"
}, star))
}),
/*#__PURE__*/ _jsxs("span", {
className: "text-sm font-semibold text-gray-700",
children: [
reviewReceived.rating,
"/5"
]
}),
reviewReceived.comment && /*#__PURE__*/ _jsx("span", {
className: "text-xs text-gray-500 truncate",
children: reviewReceived.comment
})
]
}),
task?.status === 'completed' && offer.status === 'accepted' && !reviewReceived && /*#__PURE__*/ _jsx("p", {
className: "mt-2 text-xs text-gray-400",
children: t('dashboard.review_pending')
})
]
});
}
const isSpecialist = session?.user?.role === 'specialist';
return /*#__PURE__*/ _jsxs("div", {
className: "max-w-5xl mx-auto px-4 py-8",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex justify-between items-center mb-8",
children: [
/*#__PURE__*/ _jsx("h1", {
className: "text-2xl font-bold text-white",
children: t('dashboard.title')
}),
/*#__PURE__*/ _jsx(Link, {
href: "/tasks/new",
className: "bg-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:bg-blue-700",
children: t('dashboard.new_task')
})
]
}),
dashboard && /*#__PURE__*/ _jsx(PlanBlock, {
dashboard: dashboard,
t: t
}),
fomoData && (isSpecialist ? (fomoData.missedCount > 0 || fomoData.missedEarnings > 0) && /*#__PURE__*/ _jsxs("div", {
className: "mb-6 bg-amber-50 border border-amber-200 rounded-xl px-5 py-4 flex items-start gap-3",
children: [
/*#__PURE__*/ _jsx("div", {
className: "shrink-0 mt-0.5",
children: /*#__PURE__*/ _jsx("svg", {
className: "w-5 h-5 text-amber-500",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2,
children: /*#__PURE__*/ _jsx("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M12 9v2m0 4h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z"
})
})
}),
/*#__PURE__*/ _jsxs("div", {
className: "flex-1 min-w-0",
children: [
/*#__PURE__*/ _jsxs("p", {
className: "text-base font-semibold text-amber-800",
children: [
t('fomo.specialist_missed', 'Вы пропустили {n} заказов').replace('{n}', String(fomoData.missedCount ?? 0)),
fomoData.missedEarnings > 0 && /*#__PURE__*/ _jsxs("span", {
className: "ml-1 text-amber-600",
children: [
"на €",
fomoData.missedEarnings
]
})
]
}),
fomoData.topCategories?.length > 0 && /*#__PURE__*/ _jsxs("p", {
className: "text-sm text-amber-600 mt-0.5",
children: [
t('fomo.top_categories', 'Категории'),
": ",
fomoData.topCategories.slice(0, 3).join(', ')
]
})
]
}),
/*#__PURE__*/ _jsx(Link, {
href: "/pricing",
className: "shrink-0 text-xs font-medium text-amber-700 bg-amber-100 px-3 py-1.5 rounded-lg hover:bg-amber-200 transition",
children: t('dashboard.plan.upgrade')
})
]
}) : fomoData.totalTasks > 0 && /*#__PURE__*/ _jsx("div", {
className: "mb-6 bg-blue-50 border border-blue-200 rounded-xl px-5 py-4",
children: /*#__PURE__*/ _jsxs("div", {
className: "flex items-center justify-between gap-4 flex-wrap",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex items-center gap-3",
children: [
/*#__PURE__*/ _jsx("div", {
className: "shrink-0 bg-blue-100 rounded-xl p-2",
children: /*#__PURE__*/ _jsx("svg", {
className: "w-5 h-5 text-blue-600",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2,
children: /*#__PURE__*/ _jsx("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"
})
})
}),
/*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsxs("p", {
className: "text-base font-semibold text-blue-800",
children: [
fomoData.totalOffers,
" ",
t('fomo.offers_received', 'предложений получено')
]
}),
fomoData.avgOffersPerTask > 0 && /*#__PURE__*/ _jsx("p", {
className: "text-sm text-blue-500",
children: t('fomo.avg_offers', 'В среднем {n}/задача').replace('{n}', Number(fomoData.avgOffersPerTask).toFixed(1))
})
]
})
]
}),
fomoData.completionRate !== undefined && /*#__PURE__*/ _jsxs("div", {
className: "text-right",
children: [
/*#__PURE__*/ _jsxs("p", {
className: "text-2xl font-bold text-blue-700",
children: [
Math.round(fomoData.completionRate * 100),
"%"
]
}),
/*#__PURE__*/ _jsx("p", {
className: "text-sm text-blue-400",
children: t('fomo.completion_rate', 'завершено')
})
]
})
]
})
})),
isSpecialist && /*#__PURE__*/ _jsxs(Link, {
href: "/tasks",
className: "flex items-center justify-between gap-4 bg-blue-600 text-white rounded-xl px-5 py-4 mb-8 hover:bg-blue-700 transition",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex items-center gap-4",
children: [
/*#__PURE__*/ _jsx("div", {
className: "shrink-0 bg-white/20 rounded-xl p-2.5",
children: /*#__PURE__*/ _jsxs("svg", {
className: "w-6 h-6 text-white",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2,
children: [
/*#__PURE__*/ _jsx("circle", {
cx: "11",
cy: "11",
r: "7"
}),
/*#__PURE__*/ _jsx("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M21 21l-4.35-4.35"
})
]
})
}),
/*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsx("p", {
className: "font-semibold text-base",
children: t('find_tasks.title')
}),
/*#__PURE__*/ _jsx("p", {
className: "text-blue-100 text-sm mt-0.5",
children: t('find_tasks.banner_hint')
})
]
})
]
}),
/*#__PURE__*/ _jsx("svg", {
className: "w-5 h-5 shrink-0 text-white/70",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2,
children: /*#__PURE__*/ _jsx("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M9 5l7 7-7 7"
})
})
]
}),
/*#__PURE__*/ _jsxs("div", {
className: "grid md:grid-cols-2 gap-8",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "space-y-8",
children: [
/*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsxs("h2", {
className: "text-lg font-semibold text-white mb-4",
children: [
t('dashboard.my_tasks'),
" ",
/*#__PURE__*/ _jsxs("span", {
className: "text-white/60 font-normal text-base",
children: [
"(",
activeTasks.length,
")"
]
})
]
}),
activeTasks.length === 0 ? /*#__PURE__*/ _jsxs("div", {
className: "bg-white rounded-xl border border-gray-200 p-6 text-center text-gray-500",
children: [
/*#__PURE__*/ _jsx("p", {
children: t('dashboard.tasks.empty')
}),
/*#__PURE__*/ _jsx(Link, {
href: "/tasks/new",
className: "text-blue-600 hover:underline text-sm mt-2 inline-block",
children: t('dashboard.tasks.empty.cta')
})
]
}) : /*#__PURE__*/ _jsx("div", {
className: "space-y-3",
children: activeTasks.map((task)=>/*#__PURE__*/ _jsx(TaskCard, {
task: task
}, task.id))
})
]
}),
completedTasks.length > 0 && /*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsxs("h2", {
className: "text-lg font-semibold text-white/70 mb-4",
children: [
t('dashboard.completed_tasks'),
" ",
/*#__PURE__*/ _jsxs("span", {
className: "font-normal text-base text-white/50",
children: [
"(",
completedTasks.length,
")"
]
})
]
}),
/*#__PURE__*/ _jsx("div", {
className: "space-y-3 opacity-75",
children: completedTasks.map((task)=>/*#__PURE__*/ _jsx(TaskCard, {
task: task
}, task.id))
})
]
})
]
}),
/*#__PURE__*/ _jsx("div", {
className: "space-y-8",
children: isSpecialist ? /*#__PURE__*/ _jsxs(_Fragment, {
children: [
invitations.length > 0 && /*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsxs("h2", {
className: "text-lg font-semibold text-white mb-4",
children: [
t('dashboard.invitations'),
" ",
/*#__PURE__*/ _jsxs("span", {
className: "text-white/60 font-normal text-base",
children: [
"(",
invitations.length,
")"
]
})
]
}),
/*#__PURE__*/ _jsx("div", {
className: "space-y-3",
children: invitations.map((inv)=>/*#__PURE__*/ _jsxs(Link, {
href: inv.referenceId ? `/tasks/${inv.referenceId}` : '/tasks',
className: `flex items-start gap-3 p-4 rounded-xl border transition cursor-pointer ${inv.isRead ? 'bg-white/90 border-white/20 hover:bg-white' : 'bg-white border-amber-300 shadow-sm hover:bg-amber-50'}`,
children: [
/*#__PURE__*/ _jsx("span", {
className: "text-2xl",
children: "\uD83D\uDCCB"
}),
/*#__PURE__*/ _jsxs("div", {
className: "flex-1 min-w-0",
children: [
/*#__PURE__*/ _jsx("p", {
className: `font-medium truncate ${inv.isRead ? 'text-gray-600' : 'text-gray-900'}`,
children: t('notif.type.task_invite', inv.title)
}),
inv.body && /*#__PURE__*/ _jsx("p", {
className: "text-sm text-gray-500 mt-0.5 truncate",
children: (()=>{
const title = extractNotifParam(inv.body);
const tpl = t('notif.body.task_invite', '');
return title && tpl ? tpl.replace('{title}', title) : inv.body;
})()
}),
/*#__PURE__*/ _jsx("p", {
className: "text-xs text-gray-400 mt-1",
children: new Date(inv.createdAt).toLocaleDateString(dateLocale)
})
]
}),
/*#__PURE__*/ _jsxs("div", {
className: "flex flex-col items-end gap-1.5 shrink-0",
children: [
!inv.isRead && /*#__PURE__*/ _jsx("span", {
className: "w-2 h-2 bg-amber-400 rounded-full mt-2"
}),
/*#__PURE__*/ _jsx("span", {
className: "text-xs text-gray-400",
children: "→"
})
]
})
]
}, inv.id))
})
]
}),
/*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsxs("h2", {
className: "text-lg font-semibold text-white mb-4",
children: [
t('dashboard.my_offers'),
" ",
/*#__PURE__*/ _jsxs("span", {
className: "text-white/60 font-normal text-base",
children: [
"(",
activeOffers.length,
")"
]
})
]
}),
activeOffers.length === 0 ? /*#__PURE__*/ _jsxs("div", {
className: "bg-white rounded-xl border border-gray-200 p-6 text-center text-gray-500",
children: [
/*#__PURE__*/ _jsx("p", {
children: t('dashboard.offers.empty')
}),
/*#__PURE__*/ _jsx(Link, {
href: "/tasks",
className: "text-blue-600 hover:underline text-sm mt-2 inline-block",
children: t('dashboard.offers.empty.cta')
})
]
}) : /*#__PURE__*/ _jsx("div", {
className: "space-y-3",
children: activeOffers.map((row)=>/*#__PURE__*/ _jsx(OfferCard, {
row: row
}, (row.offer || row).id))
})
]
}),
completedOffers.length > 0 && /*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsxs("h2", {
className: "text-lg font-semibold text-white/70 mb-4",
children: [
t('dashboard.completed_offers'),
" ",
/*#__PURE__*/ _jsxs("span", {
className: "font-normal text-base text-white/50",
children: [
"(",
completedOffers.length,
")"
]
})
]
}),
/*#__PURE__*/ _jsx("div", {
className: "space-y-3 opacity-75",
children: completedOffers.map((row)=>/*#__PURE__*/ _jsx(OfferCard, {
row: row
}, (row.offer || row).id))
})
]
})
]
}) : /*#__PURE__*/ _jsxs(_Fragment, {
children: [
/*#__PURE__*/ _jsxs(Link, {
href: "/specialists",
className: "flex items-center justify-between gap-4 bg-blue-600 text-white rounded-xl px-5 py-4 hover:bg-blue-700 transition",
children: [
/*#__PURE__*/ _jsxs("div", {
className: "flex items-center gap-4",
children: [
/*#__PURE__*/ _jsx("div", {
className: "shrink-0 bg-white/20 rounded-xl p-2.5",
children: /*#__PURE__*/ _jsx("svg", {
className: "w-6 h-6 text-white",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2,
children: /*#__PURE__*/ _jsx("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0z"
})
})
}),
/*#__PURE__*/ _jsxs("div", {
children: [
/*#__PURE__*/ _jsx("p", {
className: "font-semibold text-base",
children: t('dashboard.customer.specialists_title')
}),
/*#__PURE__*/ _jsx("p", {
className: "text-blue-100 text-sm mt-0.5",
children: t('dashboard.customer.specialists_hint')
})
]
})
]
}),
/*#__PURE__*/ _jsx("svg", {
className: "w-5 h-5 shrink-0 text-white/70",
fill: "none",
viewBox: "0 0 24 24",
stroke: "currentColor",
strokeWidth: 2,
children: /*#__PURE__*/ _jsx("path", {
strokeLinecap: "round",
strokeLinejoin: "round",
d: "M9 5l7 7-7 7"
})
})
]
}),
/*#__PURE__*/ _jsxs("div", {
className: "bg-white rounded-xl border border-gray-200 p-5",
children: [
/*#__PURE__*/ _jsx("h2", {
className: "text-base font-semibold text-gray-800 mb-4",
children: t('dashboard.customer.how_title')
}),
/*#__PURE__*/ _jsx("div", {
className: "space-y-3",
children: [
{
num: '1',
text: t('dashboard.customer.step1'),
icon: 'M12 4v16m8-8H4'
},
{
num: '2',
text: t('dashboard.customer.step2'),
icon: 'M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z'
},
{
num: '3',
text: t('dashboard.customer.step3'),
icon: 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'
}
].map(({ num, text, icon })=>/*#__PURE__*/ _jsxs("div", {
className: "flex items-start gap-3",
children: [
/*#__PURE__*/ _jsx("span", {
className: "shrink-0 w-7 h-7 rounded-full bg-blue-100 text-blue-600 text-sm font-bold flex items-center justify-center",
children: num
}),
/*#__PURE__*/ _jsx("p", {
className: "text-sm text-gray-600 pt-1",
children: text
})
]
}, num))
}),
/*#__PURE__*/ _jsxs(Link, {
href: "/tasks/new",
className: "mt-4 inline-block text-sm font-medium text-blue-600 hover:underline",
children: [
tasks.length > 0 ? t('dashboard.tasks.add_new') : t('dashboard.tasks.empty.cta'),
" →"
]
})
]
})
]
})
})
]
})
]
});
}
`61
2oB
Cluaccca28cf815fd5aDextractNotifParamPlanBlockDashboardPage
yBdi`
d `=@
a=@ A
`,A
`,A
`A 4
`(A5 b
`-Ac
@ A N
`:AO
`3A
`5
A A
aw @D @ ;;
a=@
`, <<
`, next/link
` ;;
`( <<
`- ==
@ @/lib/taskLocale
`: @/components/PlanBadge
`3
@/components/UsageMeter
`5abAa f !))
c\]A %%
cXYA{ !!
c"'NOA
c * .JKA
c$1$5PlanBadgeA # 4
c$6$?ABA
c'/'3=>A
c-"-&LinkA 4
c-'-+:;A #
c4$4)67A
c7"7',-AA E
c:*:../A
$
c=*=/$%A
cF"F& !A
cH0H4"#A
cQbQgA# '
cT"T&A
cX"X&UsageMeterA % 4
cX'X1AM Q
c]"]&AR \ 4
c]']1A
cd;d?AE J
cfPfUA
ci*i.A
cm*m.m
aw @D AI S
cx)x3Aj s
cyyA
czz#A
c{{&A
c| |(A & ||
c}&}.AV ^ xx
c~*~2A tt
c"*A pp
@ `&@ `.A ll
@ `$@ `,A7 @ hh
@ `7@ `@A3 < dd
@ `7@ `@getMySpecialistCardsA
@ @ `A [[
@ `7@ `@getMyTasksA
@ `@ `getMyOffersA
@ `@ `getMyReviewsA% 1
@ `@ `getNotificationsAA Q
@ `@ `getMyDashboardAa o ||
@ `@ `A >>
@ `7@ `@getSpecialistFomoDashboardAr ss
@ `@ `&getCustomerFomoDashboardA nn
@ `@ `$Ag k aa
@ `3@ `7A$ $ ]]
@ `@ `!QRA$ $ 4""
@ `"@ `&A% % VV
@ `$@ `)A2&