d3ro-voice/apps/web/.next/server/app/teams/[id]/page.js
yunchan8804 61a96b3e9b feat(V2-6/V2-7/V2-8): Mobile MVP + Teams + Billing 스캐폴딩
V2-6 — Mobile (Expo) MVP
- apps/mobile/ 신규, npm workspace에서 제외 (Expo deps 부담 회피)
- Expo SDK 51 + Expo Router + AsyncStorage Supabase 클라이언트
- 화면: index/login/(tabs)/{meetings,record,profile}
- expo-av로 녹음 → Edge Function stt-proxy 호출
- expo-web-browser + expo-linking으로 OAuth 콜백 처리
- README에 setup/EAS build 가이드
- 루트 package.json workspaces를 명시 나열로 변경 (apps/mobile 제외)

V2-7 — 팀 기능 (Web)
- apps/web/src/app/teams/page.tsx — 가입한 팀 카드 그리드
- apps/web/src/app/teams/[id]/page.tsx — 멤버 + 공유 회의
- components/teams/create-team-form.tsx — 팀 생성 + owner 자동 team_members
- components/teams/invite-member-form.tsx — user_id 직접 초대 (V2-7b에서 invite flow)
- Sidebar에 Teams/Billing 메뉴 + 아이콘
- ko.json에 nav.teams/nav.billing 키 추가
- V2-2 teams/team_members RLS 활용

V2-8 — 결제 스캐폴딩
- apps/web/src/app/billing/page.tsx — Free/Pro/Team 가격표 + 현재 구독
- components/billing/checkout-button.tsx — Edge Function 호출 후 redirect
- server/supabase/functions/stripe-checkout/index.ts:
  - JWT 인증 -> 기존 customer 조회/생성 -> Checkout Session 생성
  - subscriptions 테이블에 customer_id upsert
- server/supabase/functions/stripe-webhook/index.ts:
  - checkout.session.completed -> subscriptions tier=pro/team active
  - customer.subscription.updated/created -> status/period 업데이트
  - customer.subscription.deleted -> tier=free, status=canceled
  - signature 검증은 placeholder (V2-8b에서 정식)
- server/supabase/config.toml에 두 함수 등록 (webhook verify_jwt=false)

검증:
- desktop typecheck OK (회귀 없음)
- web typecheck OK
- web next build OK (11 라우트)
- mobile은 별도 install 필요 (workspace 제외)

memory/project_status.md 갱신 — V2 마스터 플랜 전 페이즈 로컬 완료
2026-04-09 16:39:54 +09:00

2 lines
No EOL
29 KiB
JavaScript

(()=>{var a={};a.id=339,a.ids=[339],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},22424:(a,b,c)=>{"use strict";c.d(b,{default:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call the default export of \"D:\\\\workspace\\\\voice\\\\node_modules\\\\@mui\\\\material\\\\esm\\\\Stack\\\\Stack.js\" 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.")},"D:\\workspace\\voice\\node_modules\\@mui\\material\\esm\\Stack\\Stack.js","default")},23959:(a,b,c)=>{Promise.resolve().then(c.bind(c,36146)),Promise.resolve().then(c.bind(c,55957)),Promise.resolve().then(c.bind(c,48248)),Promise.resolve().then(c.bind(c,22424)),Promise.resolve().then(c.bind(c,49783)),Promise.resolve().then(c.bind(c,27499)),Promise.resolve().then(c.bind(c,28806)),Promise.resolve().then(c.bind(c,36604)),Promise.resolve().then(c.bind(c,10752)),Promise.resolve().then(c.bind(c,24084)),Promise.resolve().then(c.bind(c,55378)),Promise.resolve().then(c.bind(c,11036)),Promise.resolve().then(c.bind(c,40652)),Promise.resolve().then(c.bind(c,84888)),Promise.resolve().then(c.bind(c,22367)),Promise.resolve().then(c.bind(c,26949)),Promise.resolve().then(c.bind(c,77484)),Promise.resolve().then(c.bind(c,68766)),Promise.resolve().then(c.bind(c,70286)),Promise.resolve().then(c.bind(c,3419)),Promise.resolve().then(c.bind(c,81996)),Promise.resolve().then(c.bind(c,50236)),Promise.resolve().then(c.bind(c,46120)),Promise.resolve().then(c.bind(c,20484)),Promise.resolve().then(c.bind(c,9962)),Promise.resolve().then(c.bind(c,2408)),Promise.resolve().then(c.bind(c,94256)),Promise.resolve().then(c.bind(c,70150)),Promise.resolve().then(c.bind(c,98470)),Promise.resolve().then(c.bind(c,2608)),Promise.resolve().then(c.bind(c,85076)),Promise.resolve().then(c.bind(c,48156)),Promise.resolve().then(c.bind(c,97376)),Promise.resolve().then(c.bind(c,42503)),Promise.resolve().then(c.bind(c,89504)),Promise.resolve().then(c.bind(c,31857))},26713:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/is-bot")},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{"use strict";a.exports=require("path")},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},51983:(a,b,c)=>{Promise.resolve().then(c.bind(c,96016)),Promise.resolve().then(c.bind(c,70700)),Promise.resolve().then(c.bind(c,90073)),Promise.resolve().then(c.bind(c,40034)),Promise.resolve().then(c.bind(c,22261)),Promise.resolve().then(c.bind(c,37217)),Promise.resolve().then(c.bind(c,20188)),Promise.resolve().then(c.bind(c,62368)),Promise.resolve().then(c.bind(c,53678)),Promise.resolve().then(c.bind(c,2154)),Promise.resolve().then(c.bind(c,8977)),Promise.resolve().then(c.bind(c,34601)),Promise.resolve().then(c.bind(c,9362)),Promise.resolve().then(c.bind(c,65398)),Promise.resolve().then(c.bind(c,51954)),Promise.resolve().then(c.bind(c,47190)),Promise.resolve().then(c.bind(c,71170)),Promise.resolve().then(c.bind(c,68780)),Promise.resolve().then(c.bind(c,18188)),Promise.resolve().then(c.bind(c,30225)),Promise.resolve().then(c.bind(c,72682)),Promise.resolve().then(c.bind(c,8018)),Promise.resolve().then(c.bind(c,97532)),Promise.resolve().then(c.bind(c,18658)),Promise.resolve().then(c.bind(c,33600)),Promise.resolve().then(c.bind(c,95430)),Promise.resolve().then(c.bind(c,4094)),Promise.resolve().then(c.bind(c,22520)),Promise.resolve().then(c.bind(c,48752)),Promise.resolve().then(c.bind(c,42822)),Promise.resolve().then(c.bind(c,69110)),Promise.resolve().then(c.bind(c,76262)),Promise.resolve().then(c.bind(c,31914)),Promise.resolve().then(c.bind(c,50205)),Promise.resolve().then(c.bind(c,48442)),Promise.resolve().then(c.bind(c,66951))},55957:(a,b,c)=>{"use strict";c.d(b,{InviteMemberForm:()=>d});let d=(0,c(25459).registerClientReference)(function(){throw Error("Attempted to call InviteMemberForm() from the server but InviteMemberForm is 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.")},"D:\\workspace\\voice\\apps\\web\\src\\components\\teams\\invite-member-form.tsx","InviteMemberForm")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},70700:(a,b,c)=>{"use strict";c.d(b,{InviteMemberForm:()=>S});var d=c(78157),e=c(31768),f=c(71159),g=c(73995),h=c(79390),i=c(29040),j=c(77510),k=c(80745),l=c(81955),m=c(38592),n=c(31933),o=c(75078),p=c(21726);function q(a){return(0,p.Ay)("MuiDialog",a)}let r=(0,o.A)("MuiDialog",["root","backdrop","scrollPaper","scrollBody","container","paper","paperScrollPaper","paperScrollBody","paperWidthFalse","paperWidthXs","paperWidthSm","paperWidthMd","paperWidthLg","paperWidthXl","paperFullWidth","paperFullScreen"]),s=e.createContext({});var t=c(57526),u=c(37217),v=c(53678),w=c(3927),x=c(89436),y=c(60360);let z=(0,u.default)(t.A,{name:"MuiDialog",slot:"Backdrop"})({zIndex:-1}),A=(0,u.default)(l.A,{name:"MuiDialog",slot:"Root"})({"@media print":{position:"absolute !important"}}),B=(0,u.default)("div",{name:"MuiDialog",slot:"Container",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.container,b[`scroll${(0,k.A)(c.scroll)}`]]}})({height:"100%","@media print":{height:"auto"},outline:0,variants:[{props:{scroll:"paper"},style:{display:"flex",justifyContent:"center",alignItems:"center"}},{props:{scroll:"body"},style:{overflowY:"auto",overflowX:"hidden",textAlign:"center","&::after":{content:'""',display:"inline-block",verticalAlign:"middle",height:"100%",width:"0"}}}]}),C=(0,u.default)(n.A,{name:"MuiDialog",slot:"Paper",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.paper,b[`scrollPaper${(0,k.A)(c.scroll)}`],b[`paperWidth${(0,k.A)(String(c.maxWidth))}`],c.fullWidth&&b.paperFullWidth,c.fullScreen&&b.paperFullScreen]}})((0,w.A)(({theme:a})=>({margin:32,position:"relative",overflowY:"auto","@media print":{overflowY:"visible",boxShadow:"none"},variants:[{props:{scroll:"paper"},style:{display:"flex",flexDirection:"column",maxHeight:"calc(100% - 64px)"}},{props:{scroll:"body"},style:{display:"inline-block",verticalAlign:"middle",textAlign:"initial"}},{props:({ownerState:a})=>!a.maxWidth,style:{maxWidth:"calc(100% - 64px)"}},{props:{maxWidth:"xs"},style:{maxWidth:"px"===a.breakpoints.unit?Math.max(a.breakpoints.values.xs,444):`max(${a.breakpoints.values.xs}${a.breakpoints.unit}, 444px)`,[`&.${r.paperScrollBody}`]:{[a.breakpoints.down(Math.max(a.breakpoints.values.xs,444)+64)]:{maxWidth:"calc(100% - 64px)"}}}},...Object.keys(a.breakpoints.values).filter(a=>"xs"!==a).map(b=>({props:{maxWidth:b},style:{maxWidth:`${a.breakpoints.values[b]}${a.breakpoints.unit}`,[`&.${r.paperScrollBody}`]:{[a.breakpoints.down(a.breakpoints.values[b]+64)]:{maxWidth:"calc(100% - 64px)"}}}})),{props:({ownerState:a})=>a.fullWidth,style:{width:"calc(100% - 64px)"}},{props:({ownerState:a})=>a.fullScreen,style:{margin:0,width:"100%",maxWidth:"100%",height:"100%",maxHeight:"none",borderRadius:0,[`&.${r.paperScrollBody}`]:{margin:0,maxWidth:"100%"}}}]}))),D=e.forwardRef(function(a,b){let c=(0,x.b)({props:a,name:"MuiDialog"}),f=(0,v.default)(),g={enter:f.transitions.duration.enteringScreen,exit:f.transitions.duration.leavingScreen},{"aria-describedby":l,"aria-labelledby":o,"aria-modal":p=!0,BackdropComponent:r,BackdropProps:t,children:u,className:w,disableEscapeKeyDown:D=!1,fullScreen:E=!1,fullWidth:F=!1,maxWidth:G="sm",onClick:H,onClose:I,open:J,PaperComponent:K=n.A,PaperProps:L={},scroll:M="paper",slots:N={},slotProps:O={},TransitionComponent:P=m.A,transitionDuration:Q=g,TransitionProps:R,...S}=c,T={...c,disableEscapeKeyDown:D,fullScreen:E,fullWidth:F,maxWidth:G,scroll:M},U=(a=>{let{classes:b,scroll:c,maxWidth:d,fullWidth:e,fullScreen:f}=a,g={root:["root"],backdrop:["backdrop"],container:["container",`scroll${(0,k.A)(c)}`],paper:["paper",`paperScroll${(0,k.A)(c)}`,`paperWidth${(0,k.A)(String(d))}`,e&&"paperFullWidth",f&&"paperFullScreen"]};return(0,i.A)(g,q,b)})(T),V=e.useRef(),W=(0,j.A)(o),X=e.useMemo(()=>({titleId:W}),[W]),Y={slots:{transition:P,...N},slotProps:{transition:R,paper:L,backdrop:t,...O}},[Z,$]=(0,y.A)("root",{elementType:A,shouldForwardComponentProp:!0,externalForwardedProps:Y,ownerState:T,className:(0,h.A)(U.root,w),ref:b}),[_,aa]=(0,y.A)("backdrop",{elementType:z,shouldForwardComponentProp:!0,externalForwardedProps:Y,ownerState:T,className:U.backdrop}),[ab,ac]=(0,y.A)("paper",{elementType:C,shouldForwardComponentProp:!0,externalForwardedProps:Y,ownerState:T,className:(0,h.A)(U.paper,L.className)}),[ad,ae]=(0,y.A)("container",{elementType:B,externalForwardedProps:Y,ownerState:T,className:U.container}),[af,ag]=(0,y.A)("transition",{elementType:m.A,externalForwardedProps:Y,ownerState:T,additionalProps:{appear:!0,in:J,timeout:Q,role:"presentation"}});return(0,d.jsx)(Z,{closeAfterTransition:!0,slots:{backdrop:_},slotProps:{backdrop:{transitionDuration:Q,as:r,...aa}},disableEscapeKeyDown:D,onClose:I,open:J,onClick:a=>{H&&H(a),V.current&&(V.current=null,I&&I(a,"backdropClick"))},...$,...S,children:(0,d.jsx)(af,{...ag,children:(0,d.jsx)(ad,{onMouseDown:a=>{V.current=a.target===a.currentTarget},...ae,children:(0,d.jsx)(ab,{as:K,elevation:24,role:"dialog","aria-describedby":l,"aria-labelledby":W,"aria-modal":p,...ac,children:(0,d.jsx)(s.Provider,{value:X,children:u})})})})})});var E=c(90410);function F(a){return(0,p.Ay)("MuiDialogTitle",a)}let G=(0,o.A)("MuiDialogTitle",["root"]),H=(0,u.default)(E.A,{name:"MuiDialogTitle",slot:"Root"})({padding:"16px 24px",flex:"0 0 auto"}),I=e.forwardRef(function(a,b){let c=(0,x.b)({props:a,name:"MuiDialogTitle"}),{className:f,id:g,...j}=c,k=(a=>{let{classes:b}=a;return(0,i.A)({root:["root"]},F,b)})(c),{titleId:l=g}=e.useContext(s);return(0,d.jsx)(H,{component:"h2",className:(0,h.A)(k.root,f),ownerState:c,ref:b,variant:"h6",id:g??l,...j})});function J(a){return(0,p.Ay)("MuiDialogContent",a)}(0,o.A)("MuiDialogContent",["root","dividers"]);let K=(0,u.default)("div",{name:"MuiDialogContent",slot:"Root",overridesResolver:(a,b)=>{let{ownerState:c}=a;return[b.root,c.dividers&&b.dividers]}})((0,w.A)(({theme:a})=>({flex:"1 1 auto",WebkitOverflowScrolling:"touch",overflowY:"auto",padding:"20px 24px",variants:[{props:({ownerState:a})=>a.dividers,style:{padding:"16px 24px",borderTop:`1px solid ${(a.vars||a).palette.divider}`,borderBottom:`1px solid ${(a.vars||a).palette.divider}`}},{props:({ownerState:a})=>!a.dividers,style:{[`.${G.root} + &`]:{paddingTop:0}}}]}))),L=e.forwardRef(function(a,b){let c=(0,x.b)({props:a,name:"MuiDialogContent"}),{className:e,dividers:f=!1,...g}=c,j={...c,dividers:f},k=(a=>{let{classes:b,dividers:c}=a;return(0,i.A)({root:["root",c&&"dividers"]},J,b)})(j);return(0,d.jsx)(K,{className:(0,h.A)(k.root,e),ownerState:j,ref:b,...g})});var M=c(40034),N=c(90073),O=c(7894),P=c(32245);let Q=(0,c(78384).A)((0,d.jsx)("path",{d:"M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m-9-2V7H4v3H1v2h3v3h2v-3h3v-2zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4"}),"PersonAdd");var R=c(15005);function S({teamId:a}){let b=(0,f.useRouter)(),[c,h]=(0,e.useState)(!1),[i,j]=(0,e.useState)(""),[k,l]=(0,e.useState)(null),[m,n]=(0,e.useState)(!1);async function o(){if(i.trim()){l(null),n(!0);try{let c=(0,R.c)(),{error:d}=await c.from("team_members").insert({team_id:a,user_id:i.trim(),role:"member"});if(d)return void l(d.message);j(""),h(!1),b.refresh()}finally{n(!1)}}}return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(g.A,{variant:"outlined",size:"small",startIcon:(0,d.jsx)(Q,{}),onClick:()=>h(!0),children:"멤버 초대"}),(0,d.jsxs)(D,{open:c,onClose:()=>h(!1),maxWidth:"sm",fullWidth:!0,children:[(0,d.jsx)(I,{children:"멤버 초대"}),(0,d.jsx)(L,{children:(0,d.jsxs)(M.default,{spacing:2,sx:{mt:1},children:[(0,d.jsx)(N.default,{sx:{fontSize:12,color:"text.secondary"},children:"MVP 단계에서는 user_id를 직접 입력합니다. 정식 초대 링크 / 이메일 발송은 V2-7b에서 지원 예정입니다."}),(0,d.jsx)(O.A,{label:"User ID (UUID)",size:"small",value:i,onChange:a=>j(a.target.value),placeholder:"00000000-0000-0000-0000-000000000000",fullWidth:!0,autoFocus:!0}),k&&(0,d.jsx)(P.A,{severity:"error",variant:"outlined",children:k}),(0,d.jsxs)(M.default,{direction:"row",spacing:1,justifyContent:"flex-end",children:[(0,d.jsx)(g.A,{onClick:()=>h(!1),disabled:m,children:"취소"}),(0,d.jsx)(g.A,{variant:"contained",onClick:()=>void o(),disabled:m||!i.trim(),children:"초대"})]})]})})]})]})}},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},90488:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>m});var d=c(5939),e=c(22134),f=c(48248),g=c(22424),h=c(80973),i=c(48067),j=c(36146),k=c(55957),l=c(28340);async function m({params:a}){let{id:b}=await a;(0,l.o)()||(0,e.redirect)("/login");let c=await (0,l.n)(),{data:{user:m}}=await c.auth.getUser();m||(0,e.redirect)("/login");let[{data:n},{data:o},{data:p}]=await Promise.all([c.from("teams").select("id, name, owner_id, created_at").eq("id",b).maybeSingle(),c.from("team_members").select("user_id, role, joined_at, profiles(id, name, avatar_url)").eq("team_id",b),c.from("meetings").select("id, title, started_at, status").eq("team_id",b).order("started_at",{ascending:!1}).limit(20)]);n||(0,e.notFound)();let q=n.owner_id===m.id;return(0,d.jsxs)(f.default,{sx:{display:"flex",minHeight:"100vh"},children:[(0,d.jsx)(j.Sidebar,{}),(0,d.jsxs)(f.default,{component:"main",sx:{flex:1,p:4,overflow:"auto"},children:[(0,d.jsxs)(f.default,{sx:{mb:4},children:[(0,d.jsx)(h.Rk,{variant:"title",children:n.name}),(0,d.jsxs)(f.default,{sx:{color:i.sM.text.muted,fontSize:12,mt:1},children:["생성 ",new Date(n.created_at).toLocaleDateString("ko-KR")]})]}),(0,d.jsxs)(g.default,{spacing:3,children:[(0,d.jsxs)(h.Uu,{sx:{p:3},children:[(0,d.jsxs)(g.default,{direction:"row",alignItems:"center",justifyContent:"space-between",sx:{mb:2},children:[(0,d.jsx)(h.Rk,{variant:"heading",children:"MEMBERS"}),q&&(0,d.jsx)(k.InviteMemberForm,{teamId:n.id})]}),(0,d.jsx)(g.default,{spacing:1,children:(o??[]).map(a=>(0,d.jsxs)(f.default,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",p:1.5,bgcolor:i.sM.bg.inset,borderRadius:1},children:[(0,d.jsx)(f.default,{sx:{color:i.sM.text.primary,fontSize:13},children:a.profiles?.name??a.user_id.slice(0,8)}),(0,d.jsx)(f.default,{sx:{...(0,i.kR)("label"),color:"owner"===a.role?i.sM.tag.purple:"admin"===a.role?i.sM.tag.orange:i.sM.tag.green},children:a.role})]},a.user_id))})]}),(0,d.jsxs)(h.Uu,{sx:{p:3},children:[(0,d.jsx)(h.Rk,{variant:"heading",sx:{mb:2},children:"SHARED MEETINGS"}),0===(p??[]).length?(0,d.jsx)(f.default,{sx:{color:i.sM.text.muted,fontSize:13},children:"팀과 공유된 회의가 없습니다."}):(0,d.jsx)(g.default,{spacing:1,children:(p??[]).map(a=>(0,d.jsxs)(f.default,{sx:{p:2,bgcolor:i.sM.bg.inset,borderRadius:1},children:[(0,d.jsx)(f.default,{sx:{color:i.sM.text.primary,fontSize:13},children:a.title??"(제목 없음)"}),(0,d.jsxs)(f.default,{sx:{color:i.sM.text.muted,fontSize:11,mt:.5},children:[new Date(a.started_at).toLocaleString("ko-KR")," \xb7 ",a.status]})]},a.id))})]})]})]})]})}},99569:(a,b,c)=>{"use strict";c.r(b),c.d(b,{GlobalError:()=>D.a,__next_app__:()=>J,handler:()=>L,pages:()=>I,routeModule:()=>K,tree:()=>H});var d=c(73653),e=c(97714),f=c(85250),g=c(37587),h=c(22369),i=c(1889),j=c(96232),k=c(22841),l=c(46537),m=c(46027),n=c(78559),o=c(75928),p=c(19374),q=c(65971),r=c(261),s=c(79898),t=c(32967),u=c(26713),v=c(40139),w=c(14248),x=c(59580),y=c(57749),z=c(53123),A=c(89745),B=c(86439),C=c(58671),D=c.n(C),E=c(18283),F=c(39818),G={};for(let a in E)0>["default","tree","pages","GlobalError","__next_app__","routeModule","handler"].indexOf(a)&&(G[a]=()=>E[a]);c.d(b,G);let H={children:["",{children:["teams",{children:["[id]",{children:["__PAGE__",{},{page:[()=>Promise.resolve().then(c.bind(c,90488)),"D:\\workspace\\voice\\apps\\web\\src\\app\\teams\\[id]\\page.tsx"]}]},{}]},{}]},{layout:[()=>Promise.resolve().then(c.bind(c,47570)),"D:\\workspace\\voice\\apps\\web\\src\\app\\layout.tsx"],"global-error":[()=>Promise.resolve().then(c.t.bind(c,58671,23)),"next/dist/client/components/builtin/global-error.js"],"not-found":[()=>Promise.resolve().then(c.t.bind(c,17983,23)),"next/dist/client/components/builtin/not-found.js"],forbidden:[()=>Promise.resolve().then(c.t.bind(c,15034,23)),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[()=>Promise.resolve().then(c.t.bind(c,54693,23)),"next/dist/client/components/builtin/unauthorized.js"]}]}.children,I=["D:\\workspace\\voice\\apps\\web\\src\\app\\teams\\[id]\\page.tsx"],J={require:c,loadChunk:()=>Promise.resolve()},K=new d.AppPageRouteModule({definition:{kind:e.RouteKind.APP_PAGE,page:"/teams/[id]/page",pathname:"/teams/[id]",bundlePath:"",filename:"",appPaths:[]},userland:{loaderTree:H},distDir:".next",relativeProjectDir:""});async function L(a,b,d){var C;let G="/teams/[id]/page";"/index"===G&&(G="/");let M=(0,h.getRequestMeta)(a,"postponed"),N=(0,h.getRequestMeta)(a,"minimalMode"),O=await K.prepare(a,b,{srcPage:G,multiZoneDraftMode:!1});if(!O)return b.statusCode=400,b.end("Bad Request"),null==d.waitUntil||d.waitUntil.call(d,Promise.resolve()),null;let{buildId:P,query:Q,params:R,parsedUrl:S,pageIsDynamic:T,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,serverActionsManifest:X,clientReferenceManifest:Y,subresourceIntegrityManifest:Z,prerenderManifest:$,isDraftMode:_,resolvedPathname:aa,revalidateOnlyGenerated:ab,routerServerContext:ac,nextConfig:ad,interceptionRoutePatterns:ae}=O,af=S.pathname||"/",ag=(0,r.normalizeAppPath)(G),{isOnDemandRevalidate:ah}=O,ai=K.match(af,$),aj=!!$.routes[aa],ak=!!(ai||aj||$.routes[ag]),al=a.headers["user-agent"]||"",am=(0,u.getBotType)(al),an=(0,p.isHtmlBotRequest)(a),ao=(0,h.getRequestMeta)(a,"isPrefetchRSCRequest")??"1"===a.headers[t.NEXT_ROUTER_PREFETCH_HEADER],ap=(0,h.getRequestMeta)(a,"isRSCRequest")??!!a.headers[t.RSC_HEADER],aq=(0,s.getIsPossibleServerAction)(a),ar=(0,m.checkIsAppPPREnabled)(ad.experimental.ppr)&&(null==(C=$.routes[ag]??$.dynamicRoutes[ag])?void 0:C.renderingMode)==="PARTIALLY_STATIC",as=!1,at=!1,au=ar?M:void 0,av=ar&&ap&&!ao,aw=(0,h.getRequestMeta)(a,"segmentPrefetchRSCRequest"),ax=!al||(0,p.shouldServeStreamingMetadata)(al,ad.htmlLimitedBots);an&&ar&&(ak=!1,ax=!1);let ay=!0===K.isDev||!ak||"string"==typeof M||av,az=an&&ar,aA=null;_||!ak||ay||aq||au||av||(aA=aa);let aB=aA;!aB&&K.isDev&&(aB=aa),K.isDev||_||!ak||!ap||av||(0,k.d)(a.headers);let aC={...E,tree:H,pages:I,GlobalError:D(),handler:L,routeModule:K,__next_app__:J};X&&Y&&(0,o.setReferenceManifestsSingleton)({page:G,clientReferenceManifest:Y,serverActionsManifest:X,serverModuleMap:(0,q.createServerModuleMap)({serverActionsManifest:X})});let aD=a.method||"GET",aE=(0,g.getTracer)(),aF=aE.getActiveScopeSpan();try{let f=K.getVaryHeader(aa,ae);b.setHeader("Vary",f);let k=async(c,d)=>{let e=new l.NodeNextRequest(a),f=new l.NodeNextResponse(b);return K.render(e,f,d).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=aE.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==i.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${aD} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${aD} ${a.url}`)})},m=async({span:e,postponed:f,fallbackRouteParams:g})=>{let i={query:Q,params:R,page:ag,sharedContext:{buildId:P},serverComponentsHmrCache:(0,h.getRequestMeta)(a,"serverComponentsHmrCache"),fallbackRouteParams:g,renderOpts:{App:()=>null,Document:()=>null,pageConfig:{},ComponentMod:aC,Component:(0,j.T)(aC),params:R,routeModule:K,page:G,postponed:f,shouldWaitOnAllReady:az,serveStreamingMetadata:ax,supportsDynamicResponse:"string"==typeof f||ay,buildManifest:U,nextFontManifest:V,reactLoadableManifest:W,subresourceIntegrityManifest:Z,serverActionsManifest:X,clientReferenceManifest:Y,setIsrStatus:null==ac?void 0:ac.setIsrStatus,dir:c(33873).join(process.cwd(),K.relativeProjectDir),isDraftMode:_,isRevalidate:ak&&!f&&!av,botType:am,isOnDemandRevalidate:ah,isPossibleServerAction:aq,assetPrefix:ad.assetPrefix,nextConfigOutput:ad.output,crossOrigin:ad.crossOrigin,trailingSlash:ad.trailingSlash,previewProps:$.preview,deploymentId:ad.deploymentId,enableTainting:ad.experimental.taint,htmlLimitedBots:ad.htmlLimitedBots,devtoolSegmentExplorer:ad.experimental.devtoolSegmentExplorer,reactMaxHeadersLength:ad.reactMaxHeadersLength,multiZoneDraftMode:!1,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:ad.experimental.cacheLife,basePath:ad.basePath,serverActions:ad.experimental.serverActions,...as?{nextExport:!0,supportsDynamicResponse:!1,isStaticGeneration:!0,isRevalidate:!0,isDebugDynamicAccesses:as}:{},experimental:{isRoutePPREnabled:ar,expireTime:ad.expireTime,staleTimes:ad.experimental.staleTimes,cacheComponents:!!ad.experimental.cacheComponents,clientSegmentCache:!!ad.experimental.clientSegmentCache,clientParamParsing:!!ad.experimental.clientParamParsing,dynamicOnHover:!!ad.experimental.dynamicOnHover,inlineCss:!!ad.experimental.inlineCss,authInterrupts:!!ad.experimental.authInterrupts,clientTraceMetadata:ad.experimental.clientTraceMetadata||[]},waitUntil:d.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:()=>{},onInstrumentationRequestError:(b,c,d)=>K.onRequestError(a,b,d,ac),err:(0,h.getRequestMeta)(a,"invokeError"),dev:K.isDev}},l=await k(e,i),{metadata:m}=l,{cacheControl:n,headers:o={},fetchTags:p}=m;if(p&&(o[y.NEXT_CACHE_TAGS_HEADER]=p),a.fetchMetrics=m.fetchMetrics,ak&&(null==n?void 0:n.revalidate)===0&&!K.isDev&&!ar){let a=m.staticBailoutInfo,b=Object.defineProperty(Error(`Page changed from static to dynamic at runtime ${aa}${(null==a?void 0:a.description)?`, reason: ${a.description}`:""}
see more here https://nextjs.org/docs/messages/app-static-to-dynamic-error`),"__NEXT_ERROR_CODE",{value:"E132",enumerable:!1,configurable:!0});if(null==a?void 0:a.stack){let c=a.stack;b.stack=b.message+c.substring(c.indexOf("\n"))}throw b}return{value:{kind:v.CachedRouteKind.APP_PAGE,html:l,headers:o,rscData:m.flightData,postponed:m.postponed,status:m.statusCode,segmentData:m.segmentData},cacheControl:n}},o=async({hasResolved:c,previousCacheEntry:f,isRevalidating:g,span:i})=>{let j,k=!1===K.isDev,l=c||b.writableEnded;if(ah&&ab&&!f&&!N)return(null==ac?void 0:ac.render404)?await ac.render404(a,b):(b.statusCode=404,b.end("This page could not be found")),null;if(ai&&(j=(0,w.parseFallbackField)(ai.fallback)),j===w.FallbackMode.PRERENDER&&(0,u.isBot)(al)&&(!ar||an)&&(j=w.FallbackMode.BLOCKING_STATIC_RENDER),(null==f?void 0:f.isStale)===-1&&(ah=!0),ah&&(j!==w.FallbackMode.NOT_FOUND||f)&&(j=w.FallbackMode.BLOCKING_STATIC_RENDER),!N&&j!==w.FallbackMode.BLOCKING_STATIC_RENDER&&aB&&!l&&!_&&T&&(k||!aj)){let b;if((k||ai)&&j===w.FallbackMode.NOT_FOUND)throw new B.NoFallbackError;if(ar&&!ap){let c="string"==typeof(null==ai?void 0:ai.fallback)?ai.fallback:k?ag:null;if(b=await K.handleResponse({cacheKey:c,req:a,nextConfig:ad,routeKind:e.RouteKind.APP_PAGE,isFallback:!0,prerenderManifest:$,isRoutePPREnabled:ar,responseGenerator:async()=>m({span:i,postponed:void 0,fallbackRouteParams:k||at?(0,n.u)(ag):null}),waitUntil:d.waitUntil}),null===b)return null;if(b)return delete b.cacheControl,b}}let o=ah||g||!au?void 0:au;if(as&&void 0!==o)return{cacheControl:{revalidate:1,expire:void 0},value:{kind:v.CachedRouteKind.PAGES,html:x.default.EMPTY,pageData:{},headers:void 0,status:void 0}};let p=T&&ar&&((0,h.getRequestMeta)(a,"renderFallbackShell")||at)?(0,n.u)(af):null;return m({span:i,postponed:o,fallbackRouteParams:p})},p=async c=>{var f,g,i,j,k;let l,n=await K.handleResponse({cacheKey:aA,responseGenerator:a=>o({span:c,...a}),routeKind:e.RouteKind.APP_PAGE,isOnDemandRevalidate:ah,isRoutePPREnabled:ar,req:a,nextConfig:ad,prerenderManifest:$,waitUntil:d.waitUntil});if(_&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate"),K.isDev&&b.setHeader("Cache-Control","no-store, must-revalidate"),!n){if(aA)throw Object.defineProperty(Error("invariant: cache entry required but not generated"),"__NEXT_ERROR_CODE",{value:"E62",enumerable:!1,configurable:!0});return null}if((null==(f=n.value)?void 0:f.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant app-page handler received invalid cache entry ${null==(i=n.value)?void 0:i.kind}`),"__NEXT_ERROR_CODE",{value:"E707",enumerable:!1,configurable:!0});let p="string"==typeof n.value.postponed;ak&&!av&&(!p||ao)&&(N||b.setHeader("x-nextjs-cache",ah?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),b.setHeader(t.NEXT_IS_PRERENDER_HEADER,"1"));let{value:q}=n;if(au)l={revalidate:0,expire:void 0};else if(N&&ap&&!ao&&ar)l={revalidate:0,expire:void 0};else if(!K.isDev)if(_)l={revalidate:0,expire:void 0};else if(ak){if(n.cacheControl)if("number"==typeof n.cacheControl.revalidate){if(n.cacheControl.revalidate<1)throw Object.defineProperty(Error(`Invalid revalidate configuration provided: ${n.cacheControl.revalidate} < 1`),"__NEXT_ERROR_CODE",{value:"E22",enumerable:!1,configurable:!0});l={revalidate:n.cacheControl.revalidate,expire:(null==(j=n.cacheControl)?void 0:j.expire)??ad.expireTime}}else l={revalidate:y.CACHE_ONE_YEAR,expire:void 0}}else b.getHeader("Cache-Control")||(l={revalidate:0,expire:void 0});if(n.cacheControl=l,"string"==typeof aw&&(null==q?void 0:q.kind)===v.CachedRouteKind.APP_PAGE&&q.segmentData){b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"2");let c=null==(k=q.headers)?void 0:k[y.NEXT_CACHE_TAGS_HEADER];N&&ak&&c&&"string"==typeof c&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,c);let d=q.segmentData.get(aw);return void 0!==d?(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:x.default.fromStatic(d,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl}):(b.statusCode=204,(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:x.default.EMPTY,cacheControl:n.cacheControl}))}let r=(0,h.getRequestMeta)(a,"onCacheEntry");if(r&&await r({...n,value:{...n.value,kind:"PAGE"}},{url:(0,h.getRequestMeta)(a,"initURL")}))return null;if(p&&au)throw Object.defineProperty(Error("Invariant: postponed state should not be present on a resume request"),"__NEXT_ERROR_CODE",{value:"E396",enumerable:!1,configurable:!0});if(q.headers){let a={...q.headers};for(let[c,d]of(N&&ak||delete a[y.NEXT_CACHE_TAGS_HEADER],Object.entries(a)))if(void 0!==d)if(Array.isArray(d))for(let a of d)b.appendHeader(c,a);else"number"==typeof d&&(d=d.toString()),b.appendHeader(c,d)}let s=null==(g=q.headers)?void 0:g[y.NEXT_CACHE_TAGS_HEADER];if(N&&ak&&s&&"string"==typeof s&&b.setHeader(y.NEXT_CACHE_TAGS_HEADER,s),!q.status||ap&&ar||(b.statusCode=q.status),!N&&q.status&&F.RedirectStatusCode[q.status]&&ap&&(b.statusCode=200),p&&b.setHeader(t.NEXT_DID_POSTPONE_HEADER,"1"),ap&&!_){if(void 0===q.rscData){if(q.postponed)throw Object.defineProperty(Error("Invariant: Expected postponed to be undefined"),"__NEXT_ERROR_CODE",{value:"E372",enumerable:!1,configurable:!0});return(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:q.html,cacheControl:av?{revalidate:0,expire:void 0}:n.cacheControl})}return(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:x.default.fromStatic(q.rscData,t.RSC_CONTENT_TYPE_HEADER),cacheControl:n.cacheControl})}let u=q.html;if(!p||N||ap)return(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:u,cacheControl:n.cacheControl});if(as)return u.push(new ReadableStream({start(a){a.enqueue(z.ENCODED_TAGS.CLOSED.BODY_AND_HTML),a.close()}})),(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:u,cacheControl:{revalidate:0,expire:void 0}});let w=new TransformStream;return u.push(w.readable),m({span:c,postponed:q.postponed,fallbackRouteParams:null}).then(async a=>{var b,c;if(!a)throw Object.defineProperty(Error("Invariant: expected a result to be returned"),"__NEXT_ERROR_CODE",{value:"E463",enumerable:!1,configurable:!0});if((null==(b=a.value)?void 0:b.kind)!==v.CachedRouteKind.APP_PAGE)throw Object.defineProperty(Error(`Invariant: expected a page response, got ${null==(c=a.value)?void 0:c.kind}`),"__NEXT_ERROR_CODE",{value:"E305",enumerable:!1,configurable:!0});await a.value.html.pipeTo(w.writable)}).catch(a=>{w.writable.abort(a).catch(a=>{console.error("couldn't abort transformer",a)})}),(0,A.sendRenderResult)({req:a,res:b,generateEtags:ad.generateEtags,poweredByHeader:ad.poweredByHeader,result:u,cacheControl:{revalidate:0,expire:void 0}})};if(!aF)return await aE.withPropagatedContext(a.headers,()=>aE.trace(i.BaseServerSpan.handleRequest,{spanName:`${aD} ${a.url}`,kind:g.SpanKind.SERVER,attributes:{"http.method":aD,"http.target":a.url}},p));await p(aF)}catch(b){throw b instanceof B.NoFallbackError||await K.onRequestError(a,b,{routerKind:"App Router",routePath:G,routeType:"render",revalidateReason:(0,f.c)({isRevalidate:ak,isOnDemandRevalidate:ah})},ac),b}}}};var b=require("../../../webpack-runtime.js");b.C(a);var c=b.X(0,[116,903,287,412,490,878,245,643,398,351,610],()=>b(b.s=99569));module.exports=c})();