PageSourceSearch

https://www.knoi.ai/_next/static/chunks/app/(app)/developers/page-432af5901b174137.js

js knoi.ai collected 2026-10-02 00:26:33 UTC 81,963 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[42724],{92486:function(e,t,n){Promise.resolve().then(n.bind(n,48068))},47091:function(e,t,n){"use strict";n.d(t,{Z:function(){return p}});var s=n(27573),i=n(19592),a=n(28310),r=n(54333),l=n(7653),c=n(23005),o=n(21138),d=n(78327);function m(e){var t;let{popup:n,onCloseItem:i}=e,{t:a}=(0,r.$G)("base"),[m,u]=(0,l.useState)(!1),x=null===(t=null==n?void 0:n.closeShown)||void 0===t||t,p=async e=>{try{var t,s;if(m)return;u(!0),await (null==n?void 0:null===(t=n.onCancel)||void 0===t?void 0:t.call(n)),await (null==n?void 0:null===(s=n.onClose)||void 0===s?void 0:s.call(n)),i(e)}catch(e){console.error(e)}finally{u(!1)}},h=async e=>{try{var t,s;if(m)return;u(!0),await (null==n?void 0:null===(t=n.onConfirm)||void 0===t?void 0:t.call(n)),await (null==n?void 0:null===(s=n.onClose)||void 0===s?void 0:s.call(n)),i(e)}catch(e){console.error(e)}finally{u(!1)}};return(0,s.jsx)(o.Vq,{open:n.isOpen,...x&&{onOpenChange:()=>{m||p(n.id)}},children:(0,s.jsxs)(o.cZ,{"aria-describedby":void 0,className:"sm:max-w-[425px]",overlayClassName:"bg-black/10",closeShown:x,children:[(0,s.jsx)(o.fK,{children:(0,s.jsx)(o.$N,{children:n.title||a("alert")})}),(0,s.jsxs)("div",{className:"space-y-4 py-4",children:[n.message&&(0,s.jsx)("p",{className:"text-muted-foreground text-sm",children:n.message}),n.content&&("string"==typeof n.content?(0,s.jsx)("p",{className:"whitespace-pre-line text-sm",children:n.content}):n.content)]}),(0,s.jsxs)(o.cN,{className:"flex-row justify-end space-x-2",children:["string"==typeof n.cancelText&&(0,s.jsx)(c.zx,{disabled:m,variant:"outline",onClick:()=>p(n.id),className:"px-8",children:n.cancelText||a("cancel")}),(0,s.jsx)(c.zx,{disabled:m,onClick:()=>h(n.id),className:"px-8",autoFocus:!0,children:m?(0,s.jsx)(d.Z,{className:"h-4 w-4 animate-spin"}):n.confirmText||a("confirm")})]})]})},n.id)}m.displayName="SimplePopupItem";var u=(0,l.memo)(m);let x=(0,l.memo)(function(){let{t:e}=(0,r.$G)("base"),[t,n]=(0,a.Kw)(i.ZA),l=async e=>{n(t=>t.filter(t=>t.id!==e))};return 0===t.length?null:(0,s.jsx)(s.Fragment,{children:t.map((e,t)=>(0,s.jsx)(u,{popup:e,onCloseItem:l},t))})});x.show=e=>{let t=i.ZA.get();i.ZA.set()([...t,{...e,id:Math.random().toString(36).substring(2,11),isOpen:!0}])},x.hide=e=>{let t=i.ZA.get();e?i.ZA.set()(t.filter(t=>t.id!==e)):i.ZA.set()(t.slice(0,-1))};var p=x},31066:function(e,t,n){"use strict";var s=n(27573),i=n(7653),a=n(87430),r=n(44669),l=n(51616),c=n(87659),o=n(54333);t.Z=(0,i.memo)(e=>{let{values:t,onChange:n}=e,{t:d}=(0,o.$G)(),{ageConfirmation:m,serviceTerms:u,privacyPolicy:x,marketing:p}=t,h=(0,i.useCallback)(e=>{n({ageConfirmation:e,serviceTerms:e,privacyPolicy:e,marketing:e})},[n]),f=(0,i.useCallback)((e,s)=>{n({...t,[e]:s})},[n,t]);return(0,s.jsx)("div",{className:"rounded-lg border border-gray-200 bg-gray-50/50 p-4 transition-all duration-300 max-md:mb-4 max-md:p-3 dark:border-gray-700 dark:bg-gray-800",children:(0,s.jsxs)("div",{className:"space-y-2.5 text-left",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-3",children:[(0,s.jsx)(a.X,{id:"agree-all",checked:m&&u&&x&&p,onCheckedChange:e=>h(!0===e),className:"h-5 w-5"}),(0,s.jsx)(r._,{htmlFor:"agree-all",className:"cursor-pointer text-sm font-semibold",children:d("auth.termsStep.agreeAll")})]}),(0,s.jsxs)("div",{className:"ml-3 flex items-start space-x-2",children:[(0,s.jsx)(a.X,{id:"agree-age",checked:m,onCheckedChange:e=>f("ageConfirmation",!0===e),className:"mt-1 h-4 w-4"}),(0,s.jsxs)(r._,{htmlFor:"agree-age",className:"cursor-pointer text-sm text-gray-600 dark:text-gray-400",children:[d("auth.termsStep.ageConfirmation")," ",d("auth.termsStep.requiredLabel")]})]}),(0,s.jsxs)("div",{className:"ml-3 flex items-start space-x-2",children:[(0,s.jsx)(a.X,{id:"agree-terms",checked:u,onCheckedChange:e=>f("serviceTerms",!0===e),className:"mt-1 h-4 w-4"}),(0,s.jsxs)(r._,{htmlFor:"agree-terms",className:"cursor-pointer text-sm text-gray-600 dark:text-gray-400",children:[(0,s.jsx)(c.default,{href:l.g.policy.service,target:"_blank",className:"text-primary underline",onClick:e=>e.stopPropagation(),children:d("auth.termsStep.agreeTermsPrefix")}),d("auth.termsStep.agreeTermsSuffix")," ",d("auth.termsStep.requiredLabel")]})]}),(0,s.jsxs)("div",{className:"ml-3 flex items-start space-x-2",children:[(0,s.jsx)(a.X,{id:"agree-privacy",checked:x,onCheckedChange:e=>f("privacyPolicy",!0===e),className:"mt-1 h-4 w-4"}),(0,s.jsxs)(r._,{htmlFor:"agree-privacy",className:"cursor-pointer text-sm leading-relaxed text-gray-600 dark:text-gray-400",children:[(0,s.jsx)(c.default,{href:l.g.policy.privacy,target:"_blank",className:"text-primary underline",onClick:e=>e.stopPropagation(),children:d("auth.termsStep.privacyLinkText")}),d("auth.termsStep.privacySuffix")," ",d("auth.termsStep.requiredLabel")]})]}),(0,s.jsxs)("div",{className:"ml-3 flex items-start space-x-2",children:[(0,s.jsx)(a.X,{id:"agree-marketing",checked:p,onCheckedChange:e=>f("marketing",!0===e),className:"mt-1 h-4 w-4"}),(0,s.jsxs)(r._,{htmlFor:"agree-marketing",className:"cursor-pointer text-sm leading-relaxed text-gray-600 dark:text-gray-400",children:[d("auth.termsStep.marketingConsent")," ",d("auth.termsStep.optionalLabel")]})]})]})})})},48068:function(e,t,n){"use strict";var s=n(27573),i=n(23005),a=n(12663),r=n(72006),l=n(19918),c=n(18898),o=n(10098),d=n(56106),m=n(78480),u=n(6258),x=n(79634),p=n(26821),h=n(2560),f=n(73822),g=n(52958),v=n(54267),b=n(16738),y=n(39135),j=n(32280),k=n(42469),w=n(57780),N=n(55792),z=n(31124),C=n(95623),_=n(84684),A=n(8475),I=n(97889),P=n(24847),T=n(7653);let S="https://meet-api.aplusai.ai",Z=[{title:"홈",items:[{id:"overview",label:"API 개요"}]},{title:"시작하기",items:[{id:"base-url",label:"Base URL"},{id:"workspace",label:"워크스페이스"},{id:"auth",label:"인증"}]},{title:"API",items:[{id:"rate-limit",label:"Rate Limit"},{id:"responses",label:"응답 형식"},{id:"reference",label:"API 레퍼런스"}]},{title:"MCP",items:[{id:"mcp-overview",label:"MCP 개요"},{id:"mcp-retrieval",label:"Agent 조회 전략"},{id:"mcp-tools",label:"도구"},{id:"mcp-errors",label:"에러 응답"}]}],E=[{method:"GET",path:"/v1/external/auth/status",title:"API Key 상태 확인",description:"현재 API key가 활성 상태인지 확인하고 연결된 workspace, scope를 반환합니다.",response:'{\n  "authenticated": true,\n  "keyId": "8f4a2c91d0ab",\n  "workspaceId": 7,\n  "actorEmail"
1: "[email protected]",\n  "scopes": ["meetings:read"]\n}'},{method:"POST",path:"/v1/external/api-keys",title:"API Key 발급",description:"Knoi 사용자 JWT로 workspace 범위의 외부 API key를 발급합니다. 원문 key는 최초 응답에서만 확인할 수 있습니다.",response:'{\n  "id": 12,\n  "keyId": "8f4a2c91d0ab",\n  "apiKey": "apl_live_8f4a2c91d0ab_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",\n  "name": "Production integration",\n  "workspaceId": 7,\n  "scopes": ["meetings:read"],\n  "status": "active",\n  "expiresAt": null,\n  "createdAt": "2026-06-27T09:00:00Z"\n}'},{method:"GET",path:"/v1/external/api-keys?workspace_id={workspaceId}",title:"API Key 목록",description:"Knoi 사용자 JWT로 내가 발급한 workspace API key 목록과 상태를 조회합니다.",response:'{\n  "content": [\n    {\n      "id": 12,\n      "keyId": "8f4a2c91d0ab",\n      "name": "Production integration",\n      "workspaceId": 7,\n      "scopes": ["meetings:read"],\n      "status": "active",\n      "lastUsedAt": "2026-06-29T04:29:25Z",\n      "expiresAt": null,\n      "createdAt": "2026-06-27T09:00:00Z",\n      "updatedAt": "2026-06-29T04:29:25Z"\n    }\n  ],\n  "nextCursor": null\n}'},{method:"DELETE",path:"/v1/external/api-keys/{keyId}?workspace_id={workspaceId}",title:"API Key 폐기",description:"Knoi 사용자 JWT로 API key를 revoked 상태로 변경합니다.",response:"204 No Content"},{method:"GET",path:"/v1/external/workspaces/me",title:"현재 workspace",description:"API key가 접근할 수 있는 단일 workspace 정보를 조회합니다.",response:'{\n  "id": 7,\n  "uuid": "workspace_8f4a2c91d0ab",\n  "name": "Knoi Product Team",\n  "domain": "knoi.ai",\n  "isEnterprise": true\n}'},{method:"GET",path:"/v1/external/meetings",title:"회의 목록",description:"workspace 범위 안에서 접근 가능한 회의 메타데이터를 cursor 기반으로 조회합니다.",response:'{\n  "content": [\n    {\n      "meetingId": 42,\n      "meetingKey": "m_8f4a2c91d0ab",\n      "title": "주간 제품 회의",\n      "workspaceId": 7,\n      "status": "DONE",\n      "resultReason": null,\n      "duration": 3084,\n      "startedAt": "2026-06-29T03:37:42.066000",\n      "endedAt": "2026-06-29T04:29:22.727000",\n      "createdAt": "2026-06-29T04:29:25.985444",\n      "updatedAt": "2026-06-29T04:31:49.887267",\n      "tags": ["제품 전략", "UI 구성"],\n      "hasSummary": true,\n      "hasTranscript": true,\n      "hasActionItems": true,\n      "accessLevel": "team",\n      "isPrivate": false,\n      "teamIds": [3]\n    }\n  ],\n  "nextCursor": null\n}'},{method:"GET",path:"/v1/external/meetings/{meetingKey}",title:"회의 상세",description:"회의 제목, 상태, 기간, 태그, 요약/전사 존재 여부를 조회합니다.",response:'{\n  "meetingId": 42,\n  "meetingKey": "m_8f4a2c91d0ab",\n  "title": "주간 제품 회의",\n  "workspaceId": 7,\n  "status": "DONE",\n  "resultReason": null,\n  "duration": 3084,\n  "startedAt": "2026-06-29T03:37:42.066000",\n  "endedAt": "2026-06-29T04:29:22.727000",\n  "createdAt": "2026-06-29T04:29:25.985444",\n  "updatedAt": "2026-06-29T04:31:49.887267",\n  "tags": ["제품 전략", "UI 구성"],\n  "hasSummary": true,\n  "hasTranscript": true,\n  "hasActionItems": true\n}'},{method:"GET",path:"/v1/external/meetings/{meetingKey}/summary",title:"회의 요약",description:"회의의 main summary를 반환합니다.",response:'{\n  "id": 101,\n  "meetingKey": "m_8f4a2c91d0ab",\n  "title": "세이프 코드 전략 회의: 제품 방향성과 UI\xb7오픈소스 전략 논의",\n  "content": "# 핵심 요약\\n\\n세이프 코드의 제품 방향성과 UI 구성, 오픈소스 전략을 논의했습니다.",\n  "tags": ["세이프 코드", "제품 전략", "UI 구성", "오픈소스"],\n  "language": "ko",\n  "isMain": true,\n  "createdAt": "2026-06-29T04:29:25.985444",\n  "updatedAt": "2026-06-29T04:31:49.887267"\n}'},{method:"GET",path:"/v1/external/meetings/{meetingKey}/transcript",title:"회의 전사",description:"전사 원문과 speaker segment를 반환합니다. 토큰 사용량이 큰 요청입니다.",response:'{\n  "meetingId": 42,\n  "transcripts": [\n    {\n      "text": "오늘은 제품 방향성과 U
1I 전략을 논의하겠습니다.",\n      "speakersData": [\n        {\n          "speaker": "Speaker 1",\n          "text": "오늘은 제품 방향성과 UI 전략을 논의하겠습니다.",\n          "start": 0.0,\n          "end": 4.2\n        }\n      ],\n      "createdAt": "2026-06-29T04:29:25.985444",\n      "filename": "meeting.wav",\n      "truncated": false\n    }\n  ],\n  "speakersData": [\n    {\n      "speaker": "Speaker 1",\n      "text": "오늘은 제품 방향성과 UI 전략을 논의하겠습니다.",\n      "start": 0.0,\n      "end": 4.2\n    }\n  ]\n}'},{method:"GET",path:"/v1/external/meetings/{meetingKey}/action-items",title:"액션아이템",description:"회의에서 생성된 액션아이템 목록을 조회합니다.",response:'{\n  "content": [\n    {\n      "id": 501,\n      "meetingKey": "m_8f4a2c91d0ab",\n      "summaryId": 101,\n      "content": "오픈소스 공개 범위 초안을 정리한다.",\n      "status": "NOT_START",\n      "dueDate": null,\n      "priority": "HIGH",\n      "sortOrder": 0,\n      "createdAt": "2026-06-29T04:31:49.887267",\n      "updatedAt": "2026-06-29T04:31:49.887267"\n    }\n  ],\n  "nextCursor": null\n}'},{method:"POST",path:"/v1/external/mcp",title:"MCP endpoint",description:"JSON-RPC 기반 MCP initialize, tools/list, tools/call을 처리합니다.",response:'{\n  "jsonrpc": "2.0",\n  "id": 1,\n  "result": {\n    "protocolVersion": "2025-06-18",\n    "capabilities": {\n      "tools": {}\n    },\n    "serverInfo": {\n      "name": "aplus-meet",\n      "version": "1.0.0"\n    }\n  }\n}'}],K=[{name:"auth_status",signature:"auth_status()",description:"API key와 workspace scope를 확인합니다."},{name:"list_meetings",signature:"list_meetings(offset?, limit?, team_ids?, exclude_team_ids?, exclude_private?)",description:"최근 회의 탐색을 위한 가벼운 메타데이터 목록을 조회합니다."},{name:"search_meetings",signature:"search_meetings(query, start_date?, end_date?, team_ids?, participant_ids?, limit?)",description:"알고 있는 주제를 기존 회의 검색 index에서 찾습니다. 날짜\xb7channel\xb7참가자 filter를 지원하며 전사 원문은 반환하지 않습니다."},{name:"list_meeting_summaries",signature:"list_meeting_summaries(start_date, end_date, team_ids?, participant_ids?, cursor?, limit?)",description:"넓은 기간의 회의 요약을 opaque cursor로 빠짐없이 순회합니다. 광범위하거나 역사적인 분석에 사용합니다."},{name:"get_meeting",signature:"get_meeting(meeting_key, include?: [summary, actionItems])",description:"특정 회의의 메타데이터를 조회하고 필요할 때 summary 또는 actionItems만 선택적으로 포함합니다."},{name:"get_meeting_summary",signature:"get_meeting_summary(meeting_key)",description:"회의 요약을 가져옵니다."},{name:"search_transcript_segments",signature:"search_transcript_segments(query, meeting_key?, start_date?, end_date?, limit?)",description:"실제 발화 근거가 필요할 때 query와 관련된 speaker\xb7timestamp 구간만 반환합니다."},{name:"get_meeting_scope",signature:"get_meeting_scope(start_date, end_date, team_ids?)",description:"광범위한 분석 전에 접근 가능한 회의 수, 총 시간, 기간 경계, 월별 분포를 확인합니다."},{name:"get_meeting_transcript",signature:"get_meeting_transcript(meeting_key)",description:"전체 전사가 꼭 필요한 경우를 위한 호환 도구입니다. 먼저 search_transcript_segments를 사용하세요."},{name:"list_action_items",signature:"list_action_items(meeting_key, status?)",description:"회의 액션아이템 목록을 조회합니다."}],R=[...Z.flatMap(e=>e.items.map(t=>({id:t.id,title:t.label,section:e.title,keywords:"".concat(e.title," ").concat(t.label)}))),{id:"api-keys",title:"API Keys",section:"개발자 문서",keywords:"API Keys API Key 발급 키 생성"},...E.map(e=>({id:"reference",title:"".concat(e.method," ").concat(e.path),section:e.title,keywords:"".concat(e.method," ").concat(e.path," ").concat(e.title," ").concat(e.description)}
1)),...K.map(e=>({id:"mcp-tools",title:e.name,section:"MCP 도구",keywords:"".concat(e.name," ").concat(e.signature," ").concat(e.description)}))];function H(e){let t=document.getElementById(e);if(!t)return;let n=window.scrollY+t.getBoundingClientRect().top-(window.matchMedia("(min-width: 768px)").matches?96:220);window.history.replaceState(null,"","#".concat(e)),window.scrollTo({top:n,behavior:"smooth"})}function D(e){if(!e)return"-";let t=new Date(e);return Number.isNaN(t.getTime())?"-":new Intl.DateTimeFormat("ko-KR",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(t)}function M(e){let{value:t,label:n="복사"}=e,[a,r]=(0,T.useState)(!1),l=(0,T.useCallback)(async()=>{await navigator.clipboard.writeText(t),r(!0),window.setTimeout(()=>r(!1),1400)},[t]);return(0,s.jsxs)(i.zx,{type:"button",variant:"ghost",size:"sm",onClick:l,className:"h-8 gap-1.5 px-2",children:[a?(0,s.jsx)(g.Z,{className:"h-4 w-4 text-emerald-600"}):(0,s.jsx)(v.Z,{className:"h-4 w-4"}),(0,s.jsx)("span",{className:"text-xs",children:a?"완료":n})]})}function O(e){let{code:t,language:n="bash"}=e;return(0,s.jsxs)("div",{className:"w-full min-w-0 max-w-full overflow-hidden rounded-lg border border-zinc-800 bg-zinc-950",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between border-b border-zinc-800 px-4 py-2",children:[(0,s.jsx)("span",{className:"text-xs font-medium text-zinc-400",children:n}),(0,s.jsx)(M,{value:t})]}),(0,s.jsx)("pre",{className:"max-w-full overflow-x-auto p-4 text-sm leading-6 text-zinc-100",children:(0,s.jsx)("code",{children:t})})]})}function L(e){let{id:t,eyebrow:n,title:i,children:a}=e;return(0,s.jsxs)("section",{id:t,className:"scroll-mt-[220px] md:scroll-mt-28",children:[n&&(0,s.jsx)("div",{className:"mb-2 text-sm font-semibold text-blue-700",children:n}),(0,s.jsx)("h2",{className:"text-2xl font-semibold tracking-normal text-zinc-950",children:i}),a&&(0,s.jsx)("div",{className:"mt-4 break-words text-[15px] leading-7 text-zinc-600",children:a})]})}function V(e){let{activeView:t,onDocsNavClick:n,onApiKeysClick:i}=e,a=(0,T.useCallback)((e,t)=>{if(e.preventDefault(),"api-keys"===t){i();return}n(t)},[i,n]);return(0,s.jsx)("aside",{className:"fixed bottom-0 left-0 top-[72px] z-30 hidden w-80 overflow-y-auto border-r border-zinc-200 bg-white px-8 py-9 lg:block",children:(0,s.jsxs)("nav",{"aria-label":"Developer documentation navigation",className:"space-y-7",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"mb-3 text-base font-semibold tracking-normal text-zinc-950",children:"API Keys"}),(0,s.jsx)("div",{className:"space-y-1",children:(0,s.jsx)("a",{href:"/developers?tab=api-keys",onClick:e=>{e.preventDefault(),i()},className:(0,u.cn)("block rounded-md px-3 py-2 text-sm text-zinc-600 hover:bg-zinc-50 hover:text-zinc-950","api-keys"===t&&"bg-stone-100 font-semibold text-stone-900"),children:"API Key 생성"})})]}),Z.map(e=>(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"mb-3 text-base font-semibold tracking-normal text-zinc-950",children:e.title}),(0,s.jsx)("div",{className:"space-y-1",children:e.items.map(e=>(0,s.jsx)("a",{href:"#".concat(e.id),onClick:t=>a(t,e.id),className:(0,u.cn)("block rounded-md px-3 py-2 text-sm text-zinc-600 hover:bg-zinc-50 hover:text-zinc-950","docs"===t&&"overview"===e.id&&"bg-stone-100 font-semibold text-stone-900"),children:e.label},e.id))})]},e.title))]})})}function U(e){let{onDocsNavClick:t,onApiKeysClick:n}=e,i=(0,T.useCallback)((e,s)=>{if(e.preventDefault(),"api-keys"===s){n();return}t(s)},[n,t]);return(0,s.jsx)("div",{className:"border-b border-zinc-200 bg-white px-4 py-3 lg:hidden",children:(0,s.jsxs)("div",{className:"flex items-center gap-2 overflow-x-auto",children:[(0,s.jsx)("button",{type:"button",onClick:n,className:"shrink-0 rounded-full border border-zinc-200 px-3 py-1.5 text-sm font-semibold text-zinc-700",children:"API Keys"}),Z.flatMap(e=>e.items.map(t=>(0,s.jsx)("a",{href:"#".concat(t.id),onClick:e=>i(e,t.id),className:"shrink-0 rounded-full border border-zinc-200 px-3 py-1.5 text-sm text-zinc-600",children:t.label},"".concat(e.title,"-").concat(t.id))))]})})}function F(){let e=(0,T.useRef)(null),t=(0,T.useRef)([]),[n,i]=(0,T.useState)(""),[a,r]=(0,T.useState)(!1),[l,c]=(0,T.useState)(-1),o=(0,T.useMemo)(()=>{let e=n.trim().toLowerCase();return e?R.filter(t=>t.keywords.toLowerCase().includes(e)).slice(0,8):[]},[n]),d=(0,T.useCallback)(e=>{if("api-keys"===e){window.location.href="/developers?tab=api-keys";return}if("api-keys"===new URLSearchParams(window.location.search).get("tab")){window.location.href="/developers#".concat(e);return}H(e),r(!1),c(-1)},[]),m=(0,T.useCallback)(e=>{i(e.title),d(e.id)},[d]),x=(0,T.useCallback)(e=>{if(0===o.length)return;let n=(e+o.length)%o.length;r(!0),c(n),requestAnimationFrame(()=>{var e;null===(e=t.current[n])||void 0===e||e.focus()})},[o.length]),p=(0,T.useCallback)(()=>{n.trim()&&r(!0)},[n]),h=(0,T.useCallback)(e=>{if("Escape"===e.key){r(!1),c(-1);return}if(("ArrowDown"===e.key||"ArrowUp"===e.key)&&o.length>0){e.preventDefault(),x("ArrowDown"===e.key?0:o.length-1);return}if("Enter"!==e.key||0===o.length)return;let t=o[0];t&&(e.preventDefault(),m(t))},[x,o,m]),f=(0,T.useCallback)((e,t)=>{if("ArrowDown"===e.key){e.preventDefault(),x(t+1);return}if("ArrowUp"===e.key){e.preventDefault(),x(t-1);return}"Escape"===e.key&&(e.preventDefault(),r(!1),c(-1))},[x]);return(0,T.useEffect)(()=>{t.current=t.current.slice(0,o.length),c(-1)},[o]),(0,T.useEffect)(()=>
1{if(!a)return;let t=t=>{var n;null!==(n=e.current)&&void 0!==n&&n.contains(t.target)||r(!1)};return document.addEventListener("pointerdown",t),()=>{document.removeEventListener("pointerdown",t)}},[a]),(0,s.jsxs)("div",{ref:e,className:"relative",children:[(0,s.jsxs)("div",{className:"flex h-10 items-center gap-3 rounded-lg border border-zinc-200 bg-zinc-50 px-3 text-left text-sm text-zinc-500 shadow-sm transition-colors focus-within:border-zinc-300 focus-within:bg-white",children:[(0,s.jsx)(b.Z,{className:"h-4 w-4 shrink-0 text-zinc-400"}),(0,s.jsx)("input",{value:n,onChange:e=>{i(e.target.value),r(!!e.target.value.trim())},onFocus:p,onClick:p,onKeyDown:h,placeholder:"검색...",className:"min-w-0 flex-1 bg-transparent text-sm text-zinc-900 outline-none placeholder:text-zinc-500"}),(0,s.jsx)("kbd",{className:"rounded border border-zinc-200 bg-white px-1.5 py-0.5 text-[11px] text-zinc-400",children:"Enter"})]}),a&&n.trim()&&(0,s.jsx)("div",{className:"absolute left-0 right-0 top-12 z-50 overflow-hidden rounded-lg border border-zinc-200 bg-white shadow-lg",children:o.length>0?(0,s.jsx)("div",{className:"max-h-80 overflow-y-auto p-1",children:o.map((e,n)=>(0,s.jsxs)("button",{type:"button",ref:e=>{t.current[n]=e},onClick:()=>m(e),onMouseDown:t=>{t.preventDefault(),m(e)},onFocus:()=>c(n),onKeyDown:e=>f(e,n),className:(0,u.cn)("block w-full rounded-md px-3 py-2 text-left outline-none hover:bg-zinc-50 focus-visible:ring-2 focus-visible:ring-blue-600",l===n&&"bg-zinc-50"),children:[(0,s.jsx)("div",{className:"text-xs font-medium text-zinc-400",children:e.section}),(0,s.jsx)("div",{className:"mt-0.5 truncate text-sm font-medium text-zinc-950",children:e.title})]},"".concat(e.id,"-").concat(e.title,"-").concat(n)))}):(0,s.jsx)("div",{className:"px-3 py-3 text-sm text-zinc-500",children:"검색 결과가 없습니다."})})]})}function q(){return(0,s.jsxs)("header",{className:"border-b border-zinc-200 bg-white/95 backdrop-blur",children:[(0,s.jsxs)("div",{className:"grid h-[72px] grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-4 px-5 md:grid-cols-[320px_minmax(0,1fr)_320px] md:gap-0 md:px-0",children:[(0,s.jsxs)("div",{className:"flex min-w-0 items-center gap-3 md:px-12",children:[(0,s.jsx)(i.zx,{variant:"none",size:"none",href:"/ko/service",className:"shrink-0 rounded-none",children:(0,s.jsx)(a.T,{isWithAi:!0,height:34,className:"text-zinc-950"})}),(0,s.jsx)(r.Separator,{orientation:"vertical",className:"hidden h-5 md:block"}),(0,s.jsx)("span",{className:"hidden text-sm font-semibold text-zinc-950 md:inline",children:"개발자 문서"})]}),(0,s.jsx)("div",{className:"hidden justify-center md:flex",children:(0,s.jsx)("div",{className:"w-full max-w-[632px]",children:(0,s.jsx)(F,{})})}),(0,s.jsx)("div",{className:"flex justify-end md:px-12",children:(0,s.jsx)("span",{className:"text-sm font-semibold text-zinc-950 md:hidden",children:"개발자 문서"})})]}),(0,s.jsx)("div",{className:"border-t border-zinc-100 px-4 py-3 md:hidden",children:(0,s.jsx)(F,{})})]})}function W(){var e,t,n,a;let r=(0,p.NL)(),l=(0,d.aF)(),g=(0,m.Un)(),v=(0,T.useMemo)(()=>{var e;let t=null!==(e=null==g?void 0:g.workspaces)&&void 0!==e?e:[],n=null==g?void 0:g.selected_workspace;return!n||t.some(e=>e.id===n.id)?t:[n,...t]},[null==g?void 0:g.selected_workspace,null==g?void 0:g.workspaces]),b=null!==(n=null==g?void 0:g.selected_workspace_id)&&void 0!==n?n:null===(e=v[0])||void 0===e?void 0:e.id,[_,A]=(0,T.useState)(null!=b?b:void 0),[I,P]=(0,T.useState)(!1),[S,Z]=(0,T.useState)(!1),[E,K]=(0,T.useState)("Production integration"),[R,H]=(0,T.useState)(null),[O,L]=(0,T.useState)("");(0,T.useEffect)(()=>{b&&A(e=>null!=e?e:b)},[b]);let V=v.find(e=>e.id===_),U=["external-api-keys",_],F=(0,h.a)({queryKey:U,queryFn:()=>o.W.get("".concat(x.Zy,"/v1/external/api-keys"),{workspace_id:_}),enabled:!!(null==l?void 0:l.is_user)&&!!_}),q=(0,f.D)({mutationFn:e=>o.W.post("".concat(x.Zy,"/v1/external/api-keys"),{workspace_id:_,name:e,scopes:["meetings:read"]}),onSuccess:e=>{H(e),L(""),r.invalidateQueries({queryKey:U})}}),W=(0,f.D)({mutationFn:e=>o.W.delete("".concat(x.Zy,"/v1/external/api-keys/").concat(e,"?workspace_id=").concat(_)),onSuccess:()=>{r.invalidateQueries({queryKey:U})}}),B=(null!==(a=null===(t=F.data)||void 0===t?void 0:t.content)&&void 0!==a?a:[]).filter(e=>"revoked"!==e.status),Y=(0,T.useCallback)(()=>{let e=E.trim();if(!e){L("API key 이름을 입력해 주세요.");return}if(!_){L("선택된 workspace가 없습니다.");return}q.mutate(e)},[q,E,_]);return(0,s.jsxs)("section",{className:"bg-white text-zinc-950",children:[(0,s.jsxs)("section",{className:"w-full py-11 lg:py-14",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-5 md:flex-row md:items-end md:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-[34px] font-semibold leading-tight tracking-normal text-zinc-950 max-md:text-3xl",children:"API Keys"}),(0,s.jsx)("p",{className:"mt-2 text-base leading-7 text-zinc-600",children:"Create and manage your API keys for programmatic access"})]}),(0,s.jsxs)(i.zx,{type:"button",onClick:()=>
1{if(!(null==l?void 0:l.is_user)){P(!0);return}H(null),L(""),Z(!0)},disabled:!!(null==l?void 0:l.is_user)&&!_,className:"h-10 gap-2 rounded-md bg-[#3b1f17] px-4 text-sm font-semibold text-white hover:bg-[#2f1812]",children:[(0,s.jsx)(y.Z,{className:"h-4 w-4"}),"Create API Key"]})]}),(0,s.jsx)("div",{className:"mt-6 rounded-lg border border-zinc-200 bg-white p-4 text-sm text-zinc-600",children:(0,s.jsxs)("div",{className:"flex flex-col gap-3 md:flex-row md:items-end md:justify-between",children:[(0,s.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,s.jsx)("span",{className:"font-semibold text-zinc-950",children:"Workspace"}),(0,s.jsx)("label",{className:"sr-only",htmlFor:"api-key-workspace",children:"API key workspace 선택"}),(0,s.jsx)("select",{id:"api-key-workspace",value:null!=_?_:"",onChange:e=>{A(Number(e.target.value)||void 0),H(null),L("")},disabled:!(null==l?void 0:l.is_user)||0===v.length,className:"mt-2 h-10 w-full rounded-md border border-zinc-200 bg-white px-3 text-sm text-zinc-900 outline-none focus:border-zinc-400 disabled:bg-zinc-50 disabled:text-zinc-400",children:0===v.length?(0,s.jsx)("option",{value:"",children:"선택 가능한 workspace 없음"}):v.map(e=>(0,s.jsxs)("option",{value:e.id,children:[e.name||"Workspace #".concat(e.id)," \xb7 #",e.id]},e.id))}),V&&(0,s.jsx)("p",{className:"mt-2 text-xs text-zinc-500",children:"이 workspace 기준으로 API key를 조회하고 생성합니다."})]}),(0,s.jsxs)(i.zx,{type:"button",variant:"outline",size:"sm",onClick:()=>F.refetch(),disabled:!_||F.isFetching,className:"h-8 gap-2 rounded-md",children:[(0,s.jsx)(j.Z,{className:(0,u.cn)("h-4 w-4",F.isFetching&&"animate-spin")}),"새로고침"]})]})}),(0,s.jsx)("div",{className:"mt-6 rounded-lg border border-zinc-200 bg-white p-4 shadow-sm",children:(0,s.jsx)("div",{className:"rounded-lg border border-dashed border-zinc-300 p-8 md:p-12",children:(null==l?void 0:l.is_user)?_?F.isLoading?(0,s.jsx)("div",{className:"flex min-h-[260px] items-center justify-center text-sm text-zinc-500",children:"API keys를 불러오는 중입니다."}):F.isError?(0,s.jsxs)("div",{className:"flex min-h-[260px] flex-col items-center justify-center text-center",children:[(0,s.jsx)(w.Z,{className:"h-12 w-12 text-red-300"}),(0,s.jsx)("h2",{className:"mt-5 text-xl font-semibold text-zinc-950",children:"API keys를 불러오지 못했습니다"}),(0,s.jsx)("p",{className:"mt-2 text-sm leading-6 text-zinc-500",children:"잠시 후 다시 시도하거나 workspace 권한을 확인해 주세요."})]}):0===B.length?(0,s.jsxs)("div",{className:"flex min-h-[260px] flex-col items-center justify-center text-center",children:[(0,s.jsx)(N.Z,{className:"h-14 w-14 text-zinc-300"}),(0,s.jsx)("h2",{className:"mt-5 text-xl font-semibold text-[#3b1f17]",children:"No API keys yet"}),(0,s.jsx)("p",{className:"mt-2 text-sm leading-6 text-zinc-500",children:"Create an API key to get started with programmatic access"}),(0,s.jsxs)(i.zx,{type:"button",onClick:()=>{if(!(null==l?void 0:l.is_user)){P(!0);return}H(null),L(""),Z(!0)},className:"mt-6 h-11 gap-3 rounded-md bg-[#3b1f17] px-6 text-sm font-semibold text-white hover:bg-[#2f1812]",children:[(0,s.jsx)(y.Z,{className:"h-5 w-5"}),"Create API Key"]})]}):(0,s.jsx)("div",{className:"overflow-x-auto",children:(0,s.jsxs)("table",{className:"w-full min-w-[760px] text-left text-sm",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{className:"border-b border-zinc-200 text-xs font-semibold uppercase tracking-normal text-zinc-500",children:[(0,s.jsx)("th",{className:"px-3 py-3",children:"Name"}),(0,s.jsx)("th",{className:"px-3 py-3",children:"Key ID"}),(0,s.jsx)("th",{className:"px-3 py-3",children:"Scopes"}),(0,s.jsx)("th",{className:"px-3 py-3",children:"Created"}),(0,s.jsx)("th",{className:"px-3 py-3",children:"Last Used"}),(0,s.jsx)("th",{className:"px-3 py-3 text-right",children:"Actions"})]})}),(0,s.jsx)("tbody",{children:B.map(e=>(0,s.jsxs)("tr",{className:"border-b border-zinc-100 last:border-0",children:[(0,s.jsx)("td",{className:"px-3 py-4 font-medium text-zinc-950",children:e.name}),(0,s.jsx)("td",{className:"px-3 py-4",children:(0,s.jsx)("code",{className:"rounded bg-zinc-100 px-2 py-1 text-xs text-zinc-700",children:e.keyId})}),(0,s.jsx)("td",{className:"px-3 py-4 text-zinc-600",children:e.scopes.join(", ")}),(0,s.jsx)("td",{className:"px-3 py-4 text-zinc-600",children:D(e.createdAt)}),(0,s.jsx)("td",{className:"px-3 py-4 text-zinc-600",children:D(e.lastUsedAt)}),(0,s.jsx)("td",{className:"px-3 py-4 text-right",children:(0,s.jsxs)(i.zx,{type:"button",variant:"ghost",size:"sm",onClick:()=>
1W.mutate(e.keyId),disabled:W.isPending,className:"h-8 gap-2 rounded-md text-red-600 hover:bg-red-50 hover:text-red-700",children:[(0,s.jsx)(z.Z,{className:"h-4 w-4"}),"Revoke"]})})]},e.keyId))})]})}):(0,s.jsxs)("div",{className:"flex min-h-[260px] flex-col items-center justify-center text-center",children:[(0,s.jsx)(w.Z,{className:"h-12 w-12 text-zinc-300"}),(0,s.jsx)("h2",{className:"mt-5 text-xl font-semibold text-zinc-950",children:"Workspace selection required"}),(0,s.jsx)("p",{className:"mt-2 text-sm leading-6 text-zinc-500",children:"API key를 생성하려면 먼저 workspace를 선택해 주세요."})]}):(0,s.jsxs)("div",{className:"flex min-h-[260px] flex-col items-center justify-center text-center",children:[(0,s.jsx)(k.Z,{className:"h-12 w-12 text-zinc-300"}),(0,s.jsx)("h2",{className:"mt-5 text-xl font-semibold text-zinc-950",children:"Login required"}),(0,s.jsx)("p",{className:"mt-2 text-sm leading-6 text-zinc-500",children:"API key를 생성하고 관리하려면 먼저 로그인해 주세요."}),(0,s.jsxs)(i.zx,{type:"button",onClick:()=>P(!0),className:"mt-6 h-11 gap-3 rounded-md bg-[#3b1f17] px-6 text-sm font-semibold text-white hover:bg-[#2f1812]",children:[(0,s.jsx)(k.Z,{className:"h-5 w-5"}),"로그인"]})]})})})]}),S&&(0,s.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/35 px-4",children:(0,s.jsxs)("div",{className:"w-full max-w-[560px] rounded-lg bg-white p-6 shadow-xl",children:[(0,s.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h2",{className:"text-xl font-semibold text-zinc-950",children:"Create API Key"}),(0,s.jsx)("p",{className:"mt-1 text-sm leading-6 text-zinc-500",children:"API key 원문은 생성 직후 한 번만 표시됩니다."})]}),(0,s.jsx)("button",{type:"button",onClick:()=>Z(!1),className:"rounded-md p-1 text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900","aria-label":"닫기",children:(0,s.jsx)(C.Z,{className:"h-5 w-5"})})]}),R?(0,s.jsxs)("div",{className:"mt-6",children:[(0,s.jsx)("div",{className:"rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm leading-6 text-amber-900",children:"이 key는 다시 확인할 수 없습니다. 지금 복사해서 secret manager에 보관하세요."}),(0,s.jsxs)("div",{className:"mt-4 rounded-lg border border-zinc-200 bg-zinc-950 p-4",children:[(0,s.jsx)("div",{className:"mb-2 text-xs font-medium text-zinc-400",children:"API Key"}),(0,s.jsx)("code",{className:"block break-all text-sm leading-6 text-zinc-100",children:R.apiKey})]}),(0,s.jsxs)("div",{className:"mt-5 flex justify-end gap-2",children:[(0,s.jsx)(M,{value:R.apiKey,label:"API key 복사"}),(0,s.jsx)(i.zx,{type:"button",onClick:()=>Z(!1),className:"h-9 rounded-md bg-zinc-950 px-4 text-sm text-white hover:bg-zinc-800",children:"완료"})]})]}):(0,s.jsxs)("div",{className:"mt-6",children:[(0,s.jsx)("label",{className:"text-sm font-medium text-zinc-950",htmlFor:"api-key-name",children:"Name"}),(0,s.jsx)("input",{id:"api-key-name",value:E,onChange:e=>{K(e.target.value),L("")},className:"mt-2 h-10 w-full rounded-md border border-zinc-200 px-3 text-sm outline-none focus:border-zinc-400",placeholder:"Production integration"}),O&&(0,s.jsx)("p",{className:"mt-2 text-sm text-red-600",children:O}),q.isError&&(0,s.jsx)("p",{className:"mt-2 text-sm text-red-600",children:"API key 생성에 실패했습니다. workspace 권한을 확인해 주세요."}),(0,s.jsxs)("div",{className:"mt-6 flex justify-end gap-2",children:[(0,s.jsx)(i.zx,{type:"button",variant:"outline",onClick:()=>Z(!1),className:"h-9 rounded-md px-4 text-sm",children:"취소"}),(0,s.jsx)(i.zx,{type:"button",onClick:Y,disabled:q.isPending,className:"h-9 rounded-md bg-[#3b1f17] px-4 text-sm text-white hover:bg-[#2f1812]",children:q.isPending?"생성 중...":"Create API Key"})]})]})]})}),(0,s.jsx)(c.Z,{isOpen:I,setIsOpen:P,to:"/developers?tab=api-keys"})]})}t.default=(0,T.memo)(function(){let[e,t]=(0,T.useState)("docs"),n=(0,T.useCallback)(()=>{t("api-keys");let e=new URL(window.location.href);e.searchParams.set("tab","api-keys"),e.hash="",window.history.replaceState(null,"","".concat(e.pathname).concat(e.search)),window.scrollTo({top:0,behavior:"smooth"})},[]),i=(0,T.useCallback)(e=>{t("docs");let n=new URL(window.location.href);n.searchParams.delete("tab"),window.history.replaceState(null,"","".concat(n.pathname).concat(n.search).concat(n.hash)),window.setTimeout(()=>{H(e)},0)},[]);(0,T.useEffect)(()=>
1{if("api-keys"===new URLSearchParams(window.location.search).get("tab")){t("api-keys");return}window.location.hash&&window.setTimeout(()=>{H(window.location.hash.slice(1))},0)},[]);let a='curl "'.concat(S,'/v1/external/workspaces/me" \\\n  -H "x-api-key: apl_live_xxxxxx"'),c='curl "'.concat(S,'/v1/external/workspaces/me" \\\n  -H "Authorization: Bearer apl_live_xxxxxx"'),o='curl -X POST "'.concat(S,'/v1/external/api-keys" \\\n  -H "Authorization: Bearer <knoi_user_access_token>" \\\n  -H "Content-Type: application/json" \\\n  -d \'{\n    "workspace_id": 7,\n    "name": "Production integration",\n    "scopes": ["meetings:read"]\n  }\''),d='{\n  "mcpServers": {\n    "knoi": {\n      "url": "'.concat(S,'/v1/external/mcp",\n      "headers": {\n        "x-api-key": "apl_live_xxxxxx"\n      }\n    }\n  }\n}');return(0,s.jsxs)("main",{className:"min-h-screen bg-white pt-[197px] text-zinc-950 md:pt-[72px]",children:[(0,s.jsxs)("div",{className:"fixed left-0 right-0 top-0 z-40 bg-white",children:[(0,s.jsx)(q,{}),(0,s.jsx)(U,{onDocsNavClick:i,onApiKeysClick:n})]}),(0,s.jsx)(V,{activeView:e,onDocsNavClick:i,onApiKeysClick:n}),(0,s.jsxs)("div",{className:"min-w-0 lg:grid lg:grid-cols-[320px_minmax(0,1fr)_320px]",children:[(0,s.jsx)("div",{className:"hidden lg:block","aria-hidden":"true"}),"api-keys"===e?(0,s.jsx)("article",{className:"mx-auto w-full min-w-0 max-w-[720px] break-words px-5 md:px-8 lg:px-0",children:(0,s.jsx)(W,{})}):(0,s.jsxs)("article",{className:"mx-auto w-full min-w-0 max-w-[720px] break-words px-5 py-11 md:px-8 lg:px-0 lg:py-14",children:[(0,s.jsxs)("div",{id:"overview",className:"scroll-mt-[220px] md:scroll-mt-28",children:[(0,s.jsxs)("div",{className:"flex flex-col items-start justify-between gap-4 md:flex-row",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("div",{className:"mb-3 text-sm font-semibold text-zinc-500",children:"API"}),(0,s.jsx)("h1",{className:"text-[34px] font-semibold leading-tight tracking-normal text-zinc-950 max-md:text-3xl",children:"API 개요"}),(0,s.jsx)("p",{className:"mt-3 break-words text-lg leading-8 text-zinc-600",children:"AI 회의록 연동을 위한 Knoi API 개요"})]}),(0,s.jsx)(M,{value:"/developers",label:"페이지 복사"})]}),(0,s.jsx)("p",{className:"mt-10 text-[16px] leading-8 text-zinc-600",children:"Knoi API로 회의록, 전사, 요약, 액션아이템에 프로그래밍 방식으로 접근할 수 있어요."})]}),(0,s.jsxs)("div",{className:"mt-14 space-y-14",children:[(0,s.jsxs)(L,{id:"base-url",title:"Base URL",children:[(0,s.jsx)("p",{children:"모든 운영 API 요청은 다음 주소로 보냅니다."}),(0,s.jsxs)("div",{className:"mt-4 grid gap-3 rounded-lg border border-zinc-200 bg-zinc-50 p-4 text-sm",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,s.jsx)("span",{className:"text-zinc-500",children:"Production"}),(0,s.jsx)("code",{className:"break-all text-right text-zinc-950",children:S})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between gap-4",children:[(0,s.jsx)("span",{className:"text-zinc-500",children:"Local"}),(0,s.jsx)("code",{className:"break-all text-right text-zinc-950",children:"http://localhost:6034"})]})]})]}),(0,s.jsxs)(L,{id:"workspace",title:"워크스페이스",children:[(0,s.jsx)("p",{children:"Knoi 외부 API 요청은 하나의 workspace 안에서 동작합니다. API key는 workspace 하나에 한정되며, 회의록, 전사, 요약, 액션아이템 조회도 해당 workspace 리소스에만 닿습니다."}),(0,s.jsx)("p",{className:"mt-3",children:"통합이 여러 workspace에 걸쳐 있다면 workspace마다 API key를 따로 발급하는 방식으로 운영합니다."})]}),(0,s.jsxs)(L,{id:"key-management",title:"API Key 발급",children:[(0,s.jsx)("p",{children:"API key 발급, 목록 조회, 폐기는 Knoi에 로그인한 사용자 JWT로 호출합니다. 발급된 key는 `apl_live_`로 시작하며, 서버에는 원문이 저장되지 않고 hash만 저장됩니다."}),(0,s.jsx)("p",{className:"mt-3",children:"API key 원문은 발급 응답의 `apiKey` 필드에서 한 번만 표시됩니다. 이후에는 `keyId`, 이름, 상태, 만료일, 마지막 사용 시각만 조회할 수 있으므로 안전한 secret manager에 보관하세요."}),(0,s.jsxs)("div",{className:"mt-5 grid gap-5",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"발급 요청"}),(0,s.jsx)(O,{code:o})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"발급 응답"}),(0,s.jsx)(O,{code:'{\n  "id": 12,\n  "keyId": "8f4a2c91d0ab",\n  "apiKey": "apl_live_8f4a2c91d0ab_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",\n  "name": "Production integration",\n  "workspaceId": 7,\n  "scopes": ["meetings:read"],\n  "status": "active",\n  "expiresAt": null,\n  "createdAt": "2026-06-27T09:00:00Z"\n}',language:"json"})]})]}),(0,s.jsxs)("div",{className:"mt-5 rounded-lg border border-zinc-200 bg-zinc-50 p-4 text-sm leading-6 text-zinc-700",children:[(0,s.jsx)("div",{className:"font-semibold text-zinc-950",children:"관리 API 인증"}),(0,s.jsx)("p",{className:"mt-1",children:"`/v1/external/api-keys` 관리 API는 Knoi 사용자 access token을 `Authorization: Bearer <knoi_user_access_token>` 형식으로 받습니다. 이 토큰은 API key가 아니라 로그인 세션의 사용자 토큰입니다."})]})]}),(0,s.jsxs)(L,{id:"auth",title:"인증",children:[(0,s.jsx)("p",{children:"회의 데이터 조회와 MCP 호출은 발급받은 API key를 `Authorization: Bearer` 또는 `x-api-key` header로 전달합니다. 두 방식은 동일한 인증, workspace scope, rate limit 정책을 사용하며 `/v1/external/auth/status`, `/v1/external/workspaces
1/me`, `/v1/external/meetings/*`, `/v1/external/mcp`에 적용됩니다."}),(0,s.jsxs)("div",{className:"mt-4 grid gap-3 rounded-lg border border-zinc-200 bg-zinc-50 p-4 text-sm leading-6 text-zinc-700",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"font-semibold text-zinc-950",children:"Bearer"}),(0,s.jsx)("code",{className:"ml-2 break-all",children:"Authorization: Bearer apl_live_xxxxxx"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"font-semibold text-zinc-950",children:"API Key"}),(0,s.jsx)("code",{className:"ml-2 break-all",children:"x-api-key: apl_live_xxxxxx"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"font-semibold text-zinc-950",children:"Scope"}),(0,s.jsx)("code",{className:"ml-2",children:"meetings:read"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("span",{className:"font-semibold text-zinc-950",children:"Workspace"}),(0,s.jsx)("span",{className:"ml-2",children:"API key가 발급된 단일 workspace로 제한됩니다."})]})]}),(0,s.jsx)("p",{className:"mt-4",children:"`Authorization` header를 직접 설정하기 어려운 MCP client에서는 `x-api-key`를 사용하세요. 두 header가 함께 전달되면 Bearer credential을 우선합니다."}),(0,s.jsxs)("div",{className:"mt-5 grid gap-5",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"x-api-key 예시"}),(0,s.jsx)(O,{code:a})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"Bearer 예시"}),(0,s.jsx)(O,{code:c})]})]})]}),(0,s.jsxs)(L,{id:"rate-limit",title:"Rate Limit",children:[(0,s.jsxs)("p",{children:["공정한 사용과 API 서버 안정성을 위해 API key 하나당"," ",(0,s.jsx)("strong",{children:"60초에 120 요청"}),"까지 허용합니다. 초과 시 `429 Too Many Requests`와 `Retry-After`, `X-RateLimit-*` 헤더를 반환합니다."]}),(0,s.jsx)("div",{className:"mt-4",children:(0,s.jsx)(O,{language:"json",code:'{\n  "error": {\n    "code": "external.rate_limit.exceeded",\n    "message": "Rate limit exceeded. Try again in 60 seconds",\n    "detail": "Limit of 120 requests per 60 seconds exceeded"\n  }\n}'})})]}),(0,s.jsxs)(L,{id:"responses",title:"응답 형식",children:[(0,s.jsx)("p",{children:"목록 응답은 `content` 배열과 `nextCursor`를 사용합니다. `hasSummary`, `hasTranscript`, `hasActionItems`는 목록과 상세 응답에 포함되는 메타데이터 플래그이며, 요약 본문은 별도 summary 응답의 `content` 필드에서 확인합니다. 실패 응답은 `error` 객체를 사용합니다."}),(0,s.jsxs)("div",{className:"mt-5 grid grid-cols-[minmax(0,1fr)] gap-5",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"성공 응답 (회의 목록: GET /v1/external/meetings)"}),(0,s.jsx)(O,{code:'{\n  "content": [\n    {\n      "meetingId": 42,\n      "meetingKey": "m_8f4a2c91d0ab",\n      "title": "주간 제품 회의",\n      "workspaceId": 7,\n      "status": "DONE",\n      "hasSummary": true,\n      "hasTranscript": true,\n      "hasActionItems": true,\n      "accessLevel": "team",\n      "isPrivate": false,\n      "teamIds": [3]\n    }\n  ],\n  "nextCursor": null\n}',language:"json"})]}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:["성공 응답 (회의 요약: GET /v1/external/meetings/","{meetingKey}","/summary)"]}),(0,s.jsx)(O,{code:'{\n  "id": 101,\n  "meetingKey": "m_8f4a2c91d0ab",\n  "title": "세이프 코드 전략 회의: 제품 방향성과 UI\xb7오픈소스 전략 논의",\n  "content": "# 핵심 요약\\n\\n세이프 코드의 제품 방향성과 UI 구성, 오픈소스 전략을 논의했습니다. 팀은 초기 사용자가 바로 이해할 수 있는 워크플로우와 개발자 친화적인 공개 전략을 우선 검토하기로 했습니다.",\n  "tags": ["세이프 코드", "제품 전략", "UI 구성", "오픈소스"],\n  "language": "ko",\n  "isMain": true,\n  "createdAt": "2026-06-29T04:29:25.985444",\n  "updatedAt": "2026-06-29T04:31:49.887267"\n}',language:"json"})]}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"에러 응답"}),(0,s.jsx)(O,{code:'{\n  "error": {\n    "code": "external.auth.invalid_key",\n    "message": "Invalid API key.",\n    "detail": null\n  }\n}',language:"json"})]})]})]}),(0,s.jsxs)(L,{id:"reference",title:"API 레퍼런스",children:[(0,s.jsx)("p",{children:"Phase 1은 읽기 전용 회의 데이터와 MCP endpoint를 제공합니다."}),(0,s.jsx)("div",{className:"mt-5 overflow-hidden rounded-lg border border-zinc-200 bg-white",children:E.map((e,t)=>{var n;return(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:"grid gap-4 p-4 md:grid-cols-[92px_minmax(0,1fr)]",children:[(0,s.jsx)("div",{children:(0,s.jsx)("span",{className:(0,u.cn)("inline-flex min-w-16 justify-center rounded-md border px-2 py-1 text-xs font-semibold","GET"===(n=e.method)?"border-emerald-200 bg-emerald-50 text-emerald-700":"POST"===n?"border-blue-200 bg-blue-50 text-blue-700":"DELETE"===n?"border-red-200 bg-red-50 text-red-700":"border-zinc-200 bg-zinc-50 text-zinc-700"),children:e.method})}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)("code",{className:"break-all text-sm font-semibold text-zinc-950",children:e.path}),(0,s.jsx)(M,{value:"".concat(S).concat(e.path)})]}),(0,s.jsx)("div",{className:"mt-2 text-sm font-semibold text-zinc-950",children:e.title}),(0,s.jsx)("p",{className:"mt-1 text-sm leading-6 text-zinc-600",children:e.description}),(0,s.jsx)(l.UQ,{type:"single",collapsible:!0,className:"mt-4",children:(0,s.jsxs)(l.Qd,{value:"".concat(e.method,"-").concat(e.path),className:"rounded-lg border border-zinc-200 bg-zinc-50 px-3",children:[(0,s.jsx)(l.o4,{className:"py-3 text-sm font-semibold text-zinc-950 hover:no-underline",children:"응답 형식"}),(0,s.jsx)(l.vF,{className:"pb-3",children:(0,s.jsx)(O,{code:e.response,language:e.response.startsWith("{")?"json":"http"})})]})})]})]}),t<E.length-1&&(0,s.jsx)(r.Separator,{})]},"".concat(e.method,"-").concat(e.path))})})]}),(0,s.jsxs)(L,{id:"mcp-overview",title:"MCP 개요",children:[(0,s.jsx)("p",{children:"MCP endpoint는 JSON-RPC 요청을 받ê
1³  REST API와 동일한 workspace scope 및 rate limit 정책을 사용합니다. AI 클라이언트는 먼저 initialize를 호출한 뒤 tools/list와 tools/call로 회의 데이터를 단계적으로 조회합니다."}),(0,s.jsxs)("div",{className:"mt-5 grid gap-5",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"클라이언트 설정 예시"}),(0,s.jsx)(O,{code:d,language:"json"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"initialize 요청"}),(0,s.jsx)(O,{code:'{\n  "jsonrpc": "2.0",\n  "id": 1,\n  "method": "initialize",\n  "params": {\n    "protocolVersion": "2025-06-18",\n    "capabilities": {}\n  }\n}',language:"json"})]})]})]}),(0,s.jsxs)(L,{id:"mcp-retrieval",title:"Agent 조회 전략",children:[(0,s.jsx)("p",{children:"Knoi MCP는 전체 전사를 한 번에 읽기보다 질문의 범위를 먼저 판단하고 필요한 데이터만 단계적으로 조회하도록 구성되어 있습니다."}),(0,s.jsxs)("ol",{className:"mt-5 grid gap-3 text-sm leading-6 text-zinc-700",children:[(0,s.jsxs)("li",{className:"rounded-lg border border-zinc-200 bg-zinc-50 p-4",children:[(0,s.jsx)("strong",{className:"text-zinc-950",children:"1. 범위 확인"}),(0,s.jsx)("p",{className:"mt-1",children:"넓거나 오래된 기간을 분석할 때는 `get_meeting_scope`로 회의 수와 기간 분포를 먼저 확인합니다."})]}),(0,s.jsxs)("li",{className:"rounded-lg border border-zinc-200 bg-zinc-50 p-4",children:[(0,s.jsx)("strong",{className:"text-zinc-950",children:"2. 발견"}),(0,s.jsx)("p",{className:"mt-1",children:"주제가 명확하면 `search_meetings`, 주제를 미리 알 수 없는 전수 분석이면 `list_meeting_summaries`와 `nextCursor`를 사용합니다."})]}),(0,s.jsxs)("li",{className:"rounded-lg border border-zinc-200 bg-zinc-50 p-4",children:[(0,s.jsx)("strong",{className:"text-zinc-950",children:"3. 선택 상세"}),(0,s.jsx)("p",{className:"mt-1",children:"선택한 회의만 `get_meeting`으로 조회하고 필요한 `summary`, `actionItems`만 include합니다."})]}),(0,s.jsxs)("li",{className:"rounded-lg border border-zinc-200 bg-zinc-50 p-4",children:[(0,s.jsx)("strong",{className:"text-zinc-950",children:"4. 발화 근거"}),(0,s.jsx)("p",{className:"mt-1",children:"실제 발화 확인은 `search_transcript_segments`를 우선 사용하고 전체 문서가 ê¼­ 필요할 때만 `get_meeting_transcript`를 호출합니다."})]})]}),(0,s.jsx)("p",{className:"mt-4 text-sm leading-6 text-zinc-500",children:"모든 단계에서 API key 소유자의 기존 회의 접근 권한과 발급 workspace 경계를 다시 확인합니다."})]}),(0,s.jsx)(L,{id:"mcp-tools",title:"도구",children:(0,s.jsx)("div",{className:"mt-5 grid gap-3",children:K.map(e=>(0,s.jsxs)("div",{className:"flex gap-3 rounded-lg border border-zinc-200 bg-white p-4",children:[(0,s.jsx)("div",{className:"mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-md bg-zinc-100",children:e.name.includes("summary")?(0,s.jsx)(_.Z,{className:"h-4 w-4 text-zinc-700"}):e.name.includes("transcript")?(0,s.jsx)(A.Z,{className:"h-4 w-4 text-zinc-700"}):e.name.includes("action")?(0,s.jsx)(I.Z,{className:"h-4 w-4 text-zinc-700"}):e.name.includes("auth")?(0,s.jsx)(N.Z,{className:"h-4 w-4 text-zinc-700"}):(0,s.jsx)(P.Z,{className:"h-4 w-4 text-zinc-700"})}),(0,s.jsxs)("div",{children:[(0,s.jsx)("code",{className:"text-sm font-semibold text-zinc-950",children:e.name}),(0,s.jsx)("code",{className:"mt-1 block break-all text-xs leading-5 text-zinc-500",children:e.signature}),(0,s.jsx)("p",{className:"mt-1 text-sm leading-6 text-zinc-600",children:e.description})]})]},e.name))})}),(0,s.jsxs)(L,{id:"mcp-errors",title:"에러 응답",children:[(0,s.jsx)("p",{children:"MCP endpoint는 tools/call 실패를 HTTP 상태코드가 아니라 JSON-RPC 응답 본문으로 전달하며, 두 종류로 나뉩니다. 인증 실패와 rate limit은 tools/call 이전에 걸리므로 REST와 동일하게 HTTP `401`, `403`, `429`로 응답합니다."}),(0,s.jsxs)("div",{className:"mt-5 grid gap-5",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"프로토콜 에러 (HTTP 200, `error` 객체)"}),(0,s.jsx)("p",{className:"mb-3 text-sm leading-6 text-zinc-600",children:"모르는 도구, 필수 인자 누락, 인자 타입 오류는 `-32602`로 반환합니다. 잘못된 JSON은 `-32700`, JSON-RPC 객체가 아닌 본문은 `-32600`, 알 수 없는 method는 `-32601`, 서버 내부 오류는 `-32603`입니다. `message`를 읽고 요청을 고쳐 다시 호출하세요."}),(0,s.jsx)(O,{code:'{\n  "jsonrpc": "2.0",\n  "id": 3,\n  "error": {\n    "code": -32602,\n    "message": "meeting_key is required.",\n    "data": null\n  }\n}',language:"json"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"mb-3 text-base font-semibold text-zinc-950",children:"도구 실행 에러 (HTTP 200, `result.isError: true`)"}),(0,s.jsx)("p",{className:"mb-3 text-sm leading-6 text-zinc-600",children:"존재하지 않거나 접근할 수 없는 회의, 요약\xb7전사가 없는 회의처럼 요청은 올바르지만 데이터가 없는 경우입니다. `content[0].text`에 REST와 같은 `error` 객체(`code`, `message`)가 JSON 문자열로 담깁니다."}),(0,s.jsx)(O,{code:'{\n  "jsonrpc": "2.0",\n  "id": 4,\n  "result": {\n    "content": [\n      {\n        "type": "text",\n        "text": "{"error": {"code": "external.meeting.not_found", "message": "Meeting not found."}}"\n      }\n    ],\n    "isError": true\n  }\n}',language:"json"})]})]}),(0,s.jsx)("p",{className:"mt-4 text-sm leading-6 text-zinc-500",children:"`meeting_key`에는 목록\xb7검색 ê²°ê
1³¼ì˜ `meetingKey` 값(`m_...`)을 전달합니다. 숫자 `meetingId`는 인자로 사용할 수 없습니다. 인자 이름은 `meeting_key`가 공식이며, 응답 필드명을 그대로 옮긴 `meetingKey`도 별칭으로 허용합니다. 단, 도구 스키마에는 `meeting_key`만 선언되어 있으므로 스키마를 검증하는 클라이언트에서는 `meeting_key`를 사용하세요."}),(0,s.jsx)("p",{className:"mt-2 text-sm leading-6 text-zinc-500",children:"`id`가 없는 notification(`notifications/initialized`, `notifications/cancelled` 등)은 본문 없이 HTTP `202`로 수신 확인만 하고, `ping`에는 빈 `result`로 응답합니다."})]})]})]}),(0,s.jsx)("div",{className:"hidden lg:block","aria-hidden":"true"})]})]})})},19918:function(e,t,n){"use strict";n.d(t,{Qd:function(){return o},UQ:function(){return c},o4:function(){return d},vF:function(){return m}});var s=n(27573),i=n(92380),a=n(2366),r=n(7653),l=n(6258);let c=i.fC,o=r.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(i.ck,{ref:t,className:(0,l.cn)("border-b",n),...a})});o.displayName="AccordionItem";let d=r.forwardRef((e,t)=>{let{className:n,children:r,...c}=e;return(0,s.jsx)(i.h4,{className:"flex",children:(0,s.jsxs)(i.xz,{ref:t,className:(0,l.cn)("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",n),...c,children:[r,(0,s.jsx)(a.Z,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})})});d.displayName=i.xz.displayName;let m=r.forwardRef((e,t)=>{let{className:n,children:a,...r}=e;return(0,s.jsx)(i.VY,{ref:t,className:"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all",...r,children:(0,s.jsx)("div",{className:(0,l.cn)("pb-4 pt-0",n),children:a})})});m.displayName=i.VY.displayName},23005:function(e,t,n){"use strict";n.d(t,{bU:function(){return m},dc:function(){return u},zx:function(){return x}});var s=n(27573),i=n(26616),a=n(65517),r=n(7653),l=n(6258),c=n(87659),o=n(67754);let d=()=>{let[e,t]=(0,r.useState)([]),n=(0,r.useCallback)(e=>{let n=e.currentTarget.getBoundingClientRect(),s=e.clientX-n.left,i=e.clientY-n.top,a=Date.now();t(e=>[...e,{x:s,y:i,id:a}]),setTimeout(()=>{t(e=>e.filter(e=>e.id!==a))},600)},[]),i=r.memo(()=>(0,s.jsx)(s.Fragment,{children:e.map(e=>(0,s.jsx)("span",{className:"pointer-events-none absolute animate-ping rounded-full bg-white/30",style:{left:e.x-10,top:e.y-10,width:20,height:20,animationDuration:"600ms"}},e.id))}));return i.displayName="RippleEffect",{addRipple:n,RippleEffect:i}},m={destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-gray-200 bg-background shadow-sm hover:bg-accent dark:border-gray-700",primary:"bg-primary text-primary-foreground shadow-sm hover:bg-primary/90",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",tertiary:"bg-tertiary  shadow-sm hover:bg-tertiary/80 text-white",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline",none:"",outlineWhite:"text-white border border-white bg-transparent hover:text-gray-300 hover:border-gray-300",outlineBlack:"text-black border border-black bg-transparent hover:text-black/70 hover:border-black/70",defaultBlack:"bg-black text-white hover:bg-black/70"},u=(0,a.j)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-full text-sm font-medium transition-all duration-200 ease-in-out focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 relative overflow-hidden active:scale-95",{variants:{variant:{...m,default:m.secondary},size:{none:"h-auto p-0",xs:"h-7 px-2 text-xs",sm:"h-8 px-3 text-xs",default:"h-9 px-4 py-2",lg:"h-10 px-4",xl:"h-12 px-4","2xl":"h-16 px-4 text-lg",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),x=r.forwardRef((e,t)=>{let{className:n,variant:a,size:m,asChild:x=!1,stat:p,href:h,onClick:f,...g}=e,v=(0,o.useRouter)(),{addRipple:b,RippleEffect:y}=d(),j=(0,r.useCallback)(e=>{e&&console.log("sendToStat",e)},[]),k=(0,r.useCallback)(e=>{p&&j(p),x||"none"===a||"link"===a||b(e),null==f||f(e),h&&v.push(h)},[j,f,h,b,x,a]);if(h)return(0,s.jsx)(c.default,{href:h,className:(0,l.cn)(u({variant:a,size:m,className:n})),prefetch:!0,...g});let w=x?i.g7:"button";return(0,s.jsxs)(w,{className:(0,l.cn)(u({variant:a,size:m,className:n})),ref:t,onClick:k,...g,children:[g.children,!x&&"none"!==a&&"link"!==a&&(0,s.jsx)(y,{})]})});x.displayName="Button"},87430:function(e,t,n){"use strict";n.d(t,{X:function(){return c}});var s=n(27573),i=n(2394),a=n(52958),r=n(7653),l=n(6258);let c=r.forwardRef((e,t)=>
1{let{className:n,...r}=e;return(0,s.jsx)(i.fC,{ref:t,className:(0,l.cn)("border-primary ring-offset-background focus-visible:ring-ring data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground peer h-4 w-4 shrink-0 rounded-sm border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",n),...r,children:(0,s.jsx)(i.z$,{className:(0,l.cn)("flex items-center justify-center text-current"),children:(0,s.jsx)(a.Z,{className:"h-4 w-4"})})})});c.displayName=i.fC.displayName},21138:function(e,t,n){"use strict";n.d(t,{$N:function(){return f},Be:function(){return g},GG:function(){return m},Vq:function(){return c},cN:function(){return h},cZ:function(){return x},fK:function(){return p},hg:function(){return o}});var s=n(27573),i=n(73204),a=n(95623),r=n(7653),l=n(6258);let c=e=>{let{onOpenChange:t,...n}=e,a=r.useCallback(e=>{e||setTimeout(()=>{0===document.querySelectorAll('[data-state="open"][role="dialog"], [data-state="open"][role="alertdialog"]').length&&(document.body.style.pointerEvents="")},500),null==t||t(e)},[t]);return(0,s.jsx)(i.fC,{onOpenChange:a,...n})};c.displayName=i.fC.displayName||"Dialog";let o=i.xz,d=i.h_,m=i.x8,u=r.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(i.aV,{ref:t,className:(0,l.cn)("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50","bg-black/40",n),...a})});u.displayName=i.aV.displayName;let x=r.forwardRef((e,t)=>{let{className:n,children:r,overlayClassName:c="",overlayShown:o=!0,closeClassName:m="",closeShown:x=!0,...p}=e;return(0,s.jsxs)(d,{children:[o&&(0,s.jsx)(u,{className:c}),(0,s.jsxs)(i.VY,{ref:t,className:(0,l.cn)("border border-gray-200 bg-white dark:border-gray-700 dark:bg-gray-900","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]","data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]","fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%]","gap-4 rounded-2xl p-6 duration-300 max-sm:w-11/12","shadow-2xl shadow-black/10",n),...p,children:[r,x&&(0,s.jsxs)(i.x8,{className:(0,l.cn)("absolute right-4 top-4 roun
1ded-full p-2 opacity-70 transition-all duration-200","hover:scale-110 hover:bg-gray-100 hover:opacity-100 dark:hover:bg-gray-800","focus:outline-none focus:ring-2 focus:ring-gray-400/20 focus:ring-offset-0","disabled:pointer-events-none",m),children:[(0,s.jsx)(a.Z,{className:"h-4 w-4"}),(0,s.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});x.displayName=i.VY.displayName;let p=e=>{let{className:t,...n}=e;return(0,s.jsx)("div",{className:(0,l.cn)("flex flex-col space-y-1.5 text-left",t),...n})};p.displayName="DialogHeader";let h=e=>{let{className:t,...n}=e;return(0,s.jsx)("div",{className:(0,l.cn)("flex flex-row justify-end space-x-2",t),...n})};h.displayName="DialogFooter";let f=r.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(i.Dx,{ref:t,className:(0,l.cn)("text-lg font-semibold leading-none tracking-tight",n),...a})});f.displayName=i.Dx.displayName;let g=r.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(i.dk,{ref:t,className:(0,l.cn)("text-muted-foreground text-sm",n),...a})});g.displayName=i.dk.displayName},12663:function(e,t,n){"use strict";n.d(t,{T:function(){return l}});var s=n(27573),i=n(7653);let a=e=>{let{barColor:t,width:n,height:a,brandOrb:r=!1,...l}=e,c=(0,i.useId)(),o=r?"url(#".concat(c,")"):"currentColor",d=!r&&!t,m=r?"white":t;return(0,s.jsxs)("svg",{width:null!=n?n:a?108*a/39:108,height:null!=a?a:n?39*n/108:39,viewBox:"0 0 108 39",fill:"none",xmlns:"http://www.w3.org/2000/svg",...l,children:[r&&(0,s.jsx)("defs",{children:(0,s.jsxs)("linearGradient",{id:c,x1:"47",y1:"17.5",x2:"57",y2:"27.5",gradientUnits:"userSpaceOnUse",children:[(0,s.jsx)("stop",{offset:"0%",stopColor:"#FF3097"}),(0,s.jsx)("stop",{offset:"100%",stopColor:"#7864CB"})]})}),(0,s.jsx)("path",{d:"M1.53125 30.5V7.875H7.46875V17.125H7.78125L14.7812 7.875H21.75L14 17.9688L21.9062 30.5H14.7812L9.5625 21.9062L7.46875 24.5938V30.5H1.53125ZM29.5938 20.9062V30.5H23.6875V13.5312H29.2812V16.7188H29.4688C30.2188 14.5938 32.1562 13.3125 34.6562 13.3125C38.25 13.3125 40.5938 15.9375 40.5625 19.6875V30.5H34.6562V20.9062C34.6875 19.1562 33.75 18.125 32.1562 18.125C30.5938 18.125 29.5938 19.1562 29.5938 20.9062ZM51.75 30.8125C46.2812 30.8125 43 27.2812 43 22.0625C43 16.8438 46.2812 13.3125 51.75 13.3125C57.2188 13.3125 60.4688 16.8438 60.4688 22.0625C60.4688 27.2812 57.2188 30.8125 51.75 30.8125ZM51.7812 26.4375C53.4375 26.4375 54.4375 24.7188 54.4375 22.0312C54.4375 19.3125 53.4375 17.625 51.7812 17.625C50.0625 17.625 49.0312 19.3125 49.0312 22.0312C49.0312 24.7188 50.0625 26.4375 51.7812 26.4375ZM63.0312 30.5V13.5312H68.9375V30.5H63.0312ZM65.9688 11.6875C64.3438 11.6875 63.0312 10.4688 63.0312 8.96875C63.0312 7.46875 64.3438 6.25 65.9688 6.25C67.5938 6.25 68.9062 7.46875 68.9062 8.96875C68.9062 10.4688 67.5938 11.6875 65.9688 11.6875ZM75.3125 30.8438C73.625 30.8438 72.25 29.5 72.2812 27.8125C72.25 26.1562 73.625 24.8125 75.3125 24.8125C76.9062 24.8125 78.3438 26.1562 78.3438 27.8125C78.3438 29.5 76.9062 30.8438 75.3125 30.8438ZM80.9062 25.8125C80.9062 22.0625 83.6875 20.625 87.1562 20.4062L91.125 20.25V18.875C91.125 17.9375 90.3438 17.4062 89.1875 17.4062C87.9688 17.4062 87.1875 17.9375 87.0312 19H81.5625C81.7812 15.9062 84.2812 13.3125 89.2812 13.3125C94 13.3125 97.0312 15.625 97.0312 18.9062V30.5H91.5V28.125H91.375C90.375 29.9688 88.6875 30.7812 86.4375 30.7812C83.1875 30.7812 80.9062 29.1875 80.9062 25.8125ZM86.4688 25.4688C86.4688 26.4688 87.25 27 88.3438 27C89.8125 27 91.1875 26.0625 91.1562 24.4688V23.5625C90.5625 23.5781 89 23.6406 88.2188 23.7188C87.1562 23.8438 86.4688 24.5625 86.4688 25.4688ZM100.031 30.5V13.5312H105.938V30.5H100.031ZM102.969 11.6875C101.344 11.6875 100.031 10.4688 100.031 8.96875C100.031 7.46875 101.344 6.25 102.969 6.25C104.594 6.25 105.906 7.46875 105.906 8.96875C105.906 10.4688 104.594 11.6875 102.969 11.6875Z",fill:"currentColor"}),(0,s.jsx)("circle",{cx:"52",cy:"22.5",r:"5",fill:o}),(0,s.jsx)("rect",{x:"47",y:"19.5",width:"2.25",height:"5",rx:"1.125",fill:d?void 0:m,className:d?"fill-white dark:fill-gray-900":void 0}),(0,s.jsx)("rect",{x:"50.375",y:"17.5",width:"2.25",height:"9",rx:"1.125",fill:d?void 0:m,className:d?"fill-white dark:fill-gray-900":void 0}),(0,s.jsx)("rect",{x:"53.75",y:"19.5",width:"2.25",height:"5",rx:"1.125",fill:d?void 0:m,className:d?"fill-white dark:fill-gray-900":void 0})]})},r=e=>{let{barColor:t,width:n,height:i,...a}=e,r=!t;return(0,s.jsxs)("svg",{width:null!=n?n:i?68*i/26:68,height:null!=i?i:n?26*n/68:26,viewBox:"0 0 68 26",fill:"none",xmlns:"http://www.w3.org/2000/svg",...a,children:[(0,s.jsx)("path",{d:"M0.53125 25V2.375H6.46875V11.625H6.78125L13.7812 2.375H20.75L13 12.4688L20.9062 25H13.7812L8.5625 16.4062L6.46875 19.0938V25H0.53125Z",fill:"currentColor"}),(0,s.jsx)("path",{d:"M28.5938 15.4062V25H22.6875V8.03125H28.2812V11.2188H28.4688C29.2188 9.09375 31.1562 7.8125 33.6562 7.8125C37.25 7.8125 39.5938 10.4375 39.5625 14.1875V25H33.6562V15.4062C33.6875 13.6562 32.75 12.625 31.1562 12.625C29.5938 12.625 28.5938 13.6562 28.5938 15.4062Z",fill:"currentColor"}),(0,s.jsx)("path",{d:"M50.75 25.3125C45.2812 25.3125 42 21.7812 42 16.5625C42 11.3438 45.2812 7.8125 50.75 7.8125C56.2188 7.8125 59.4688 11.3438 59.4688 16.5625C59.4688 21.7812 56.2188 25.3125 50.75 25.3125ZM50.7812 20.9375C52.4375 20.9375 53.4375 19.2188 53.4375 16.5312C53.4375 13.8125 52.4375 12.125 50.7812 12.125C49.0625 12.125 48.0312 13.8125 48.0312 16.5312C48.0312 19.2188 49.0625 20.9375 50.7812 20.9375Z",fill:"currentColor"}),(0,s.jsx)("path",{d:"M62.0312 25V8.03125H67.9375V25H62.0312ZM64.9688 6.1875C63.3438 6.1875 62.0312 4.96875 62.0312 3.46875C62.0312 1.96875 63.3438 0.75 64.9688 0.75C66.5938 0.75 67.9062 1.96875 67.9062 3.46875C67.9062 4.96875 66.5938 6.1875 64.9688 6.1875Z",fill:"currentColor"}),(0,s.jsx)("path",{d:"M56 17C56 19.7614 53.7614 22 51 22C48.2386 22 46 19.7614 46 17C46 14.2386 48.2386 12 51 12C53.7614 12 56 14.2386 56 17Z",fill:"currentColor"}
1),(0,s.jsx)("path",{d:"M46 15.125C46 14.5037 46.5037 14 47.125 14C47.7463 14 48.25 14.5037 48.25 15.125V17.875C48.25 18.4963 47.7463 19 47.125 19C46.5037 19 46 18.4963 46 17.875V15.125Z",fill:r?void 0:t,className:r?"fill-white dark:fill-gray-900":void 0}),(0,s.jsx)("path",{d:"M49.375 13.125C49.375 12.5037 49.8787 12 50.5 12C51.1213 12 51.625 12.5037 51.625 13.125V19.875C51.625 20.4963 51.1213 21 50.5 21C49.8787 21 49.375 20.4963 49.375 19.875V13.125Z",fill:r?void 0:t,className:r?"fill-white dark:fill-gray-900":void 0}),(0,s.jsx)("path",{d:"M52.75 15.125C52.75 14.5037 53.2537 14 53.875 14C54.4963 14 55 14.5037 55 15.125V17.875C55 18.4963 54.4963 19 53.875 19C53.2537 19 52.75 18.4963 52.75 17.875V15.125Z",fill:r?void 0:t,className:r?"fill-white dark:fill-gray-900":void 0})]})};function l(e){let{barColor:t,width:n,height:i,isWithAi:l,brandOrb:c,...o}=e;return l?(0,s.jsx)(a,{barColor:t,width:n,height:i,brandOrb:c,...o}):(0,s.jsx)(r,{barColor:t,width:n,height:i,...o})}},47147:function(e,t,n){"use strict";n.d(t,{I:function(){return r}});var s=n(27573),i=n(7653),a=n(6258);let r=i.forwardRef((e,t)=>{let{className:n,type:i,...r}=e;return(0,s.jsx)("input",{type:i,className:(0,a.cn)("border-input bg-background file:text-foreground placeholder:text-muted-foreground focus-visible:border-primary flex h-10 w-full rounded-md border px-3 py-2 text-base file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",n),ref:t,...r})});r.displayName="Input"},44669:function(e,t,n){"use strict";n.d(t,{_:function(){return o}});var s=n(27573),i=n(20461),a=n(65517),r=n(7653),l=n(6258);let c=(0,a.j)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),o=r.forwardRef((e,t)=>{let{className:n,...a}=e;return(0,s.jsx)(i.f,{ref:t,className:(0,l.cn)(c(),n),...a})});o.displayName=i.f.displayName},72006:function(e,t,n){"use strict";n.d(t,{Separator:function(){return l}});var s=n(27573),i=n(68440),a=n(7653),r=n(6258);let l=a.forwardRef((e,t)=>{let{className:n,orientation:a="horizontal",decorative:l=!0,...c}=e;return(0,s.jsx)(i.f,{ref:t,decorative:l,orientation:a,className:(0,r.cn)("bg-border shrink-0","horizontal"===a?"h-[1px] w-full":"h-full w-[1px]",n),...c})});l.displayName=i.f.displayName},80626:function(e,t,n){"use strict";n.d(t,{E:function(){return a},Y:function(){return r}});var s=n(88771);let i={staleTime:1e4,retry:(e,t)=>{var n;return e<=1&&(null==t?void 0:null===(n=t.response)||void 0===n?void 0:n.status)===401},retryDelay:1e3},a=new s.S({defaultOptions:{queries:{enabled:!1,...i}}}),r=e=>{a.setDefaultOptions({queries:{enabled:e,...i}})}},19592:function(e,t,n){"use strict";n.d(t,{B1:function(){return c},EC:function(){return l},W3:function(){return i},XG:function(){return o},ZA:function(){return a},lo:function(){return r}});var s=n(45556);let i=(0,s.e)({key:"app/isSidebarOpen",default:!1}),a=(0,s.e)({key:"app/popupState",default:[]}),r=(0,s.e)({key:"app/isMobile",default:void 0}),l=(0,s.e)({key:"app/isMeetingQueueOpen",default:!1}),c=(0,s.e)({key:"app/isCustomerSupportOpen",default:!1}),o=(0,s.e)({key:"app/theme",default:"light"})},42103:function(e,t,n){"use strict";var s=n(79634),i=n(10098);let a="".concat(s.T5,"/user/v1");t.Z={updateSession:{api:e=>i.H.patch("".concat(s.X9,"/session"),e)},user:{key:e=>["auth",e],api:()=>i.H.get("".concat(s.X9,"/device"))},editDevice:{api:e=>i.H.patch("".concat(s.X9,"/device"),e)},createDevice:{api:e=>i.H.post("".concat(s.X9,"/device"),e)},loginSns:{api:e=>{let{data:t,config:n}=e;return i.H.post("".concat(a,"/social/login"),t,n)}},sendVerificationToEmail:{api:e=>i.H.post("".concat(a,"/social/email/request-verification"),e)},verifyEmailCode:{api:e=>i.H.post("".concat(a,"/social/email/verify-code"),e)},loginEmail:{api:e=>{let{data:t,config:n}=e;return i.H.post("".concat(a,"/social/email/login"),t,n)}},updateUserSettings:{api:e=>i.W.post("".concat(s.bY,"/v1/user-settings"),e)},patchUserSettings:{api:e=>i.W.patch("".concat(s.bY,"/v1/user-settings"),e)},checkUserExists:{api:e=>i.W.post("".concat(s.bY,"/v1/user-settings/exists"),e)},verifyEnterpriseDomain:{api:e=>i.W.post("".concat(s.bY,"/v1/user-settings/verify-enterprise-domain"),e)}}},56106:function(e,t,n){"use strict";n.d(t,{IN:function(){return v},Xk:function(){return g},aF:function(){return b},aU:function(){return y}});var s=n(42103),i=n(10098),a=n(20366),r=n(13949),l=n(71264),c=n(73519),o=n(74887),d=n(26821),m=n(2560),u=n(18255),x=n.n(u),p=n(94785),h=n(7653),f=n(82934);function g(){let e=(0,d.NL)();return{createDevice:(0,h.useCallback)(x().throttle(async function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{service:"knoi",channel:"aplus"};try{var n;let i=window.navigator.userAgentData,r=await s.Z.createDevice.api({device_id:(0,f.Z)(),platform:null==i?void 0:null===(n=i.platform)||void 0===n?void 0:n.toLowerCase(),...t});return(null==r?void 0:r.access_token)&&(o.tO.set(l.Z.ACCESS_TOKEN,null==r?void 0:r.access_token),o.tO.set(l.Z.REFRESH_TOKEN,null==r?void 0:r.refresh_token),(0,c.dn)(a.f,{token:null==r?void 0:r.access_token}),e.setQueryData(s.Z.user.key("user"),r)),r}catch(e){return e}},1500),[e])}}function v(){let e=(0,d.NL)();return{updateDevice:(0,h.useCallback)(async()=>{let t=await e.fetchQuery({queryKey:s.Z.user.key("user"),queryFn:()=>s.Z.user.api()});return(null==t?void 0:t.access_token)&&(o.tO.set(l.Z.ACCESS_TOKEN,null==t?void 0:t.access_token),o.tO.set(l.Z.REFRESH_TOKEN,null==t?void 0:t.refresh_token),(0,c.dn)(a.f,{token:null==t?void 0:t.access_token})),t},[e])}}function b(){let{data:e={}}=(0,m.a)({queryKey:s.Z.user.key("user"),queryFn:()=>s.Z.user.api(),staleTime:1/0});return e}function y(){let e=(0,d.NL)(),{createDevice:t}=g(),n=(0,h.useRef)(!1),[s,a]=(0,h.useState)(!1);return{logout:(0,h.useCallback)(x().throttle(async()=>
1{if(!n.current){n.current=!0,a(!0);try{try{let e=await r.Z.profile.api();(null==e?void 0:e.provider)==="kakao"&&(null==e?void 0:e.providerToken)&&await i.H.post("https://kapi.kakao.com/v1/user/unlink",void 0,{headers:{Authorization:"Bearer ".concat(e.providerToken)}})}catch(e){}e.clear(),o.tO.delete(l.Z.ACCESS_TOKEN),o.tO.delete(l.Z.REFRESH_TOKEN),sessionStorage.clear();try{await (0,p.w7)({redirect:!1})}catch(e){}await e.invalidateQueries({queryKey:r.Z.profile.key("profile")});try{await t()}catch(e){}window.location.href="/"}finally{n.current=!1,a(!1)}}},1500),[t,e]),isLoading:s}}},13949:function(e,t,n){"use strict";var s=n(10098),i=n(79634),a=n(72279);let r="".concat(i.Zy,"/v1/user-settings"),l="user";t.Z={profile:{key:e=>(0,a.u)(l,{name:"profile",key:e}),api:()=>s.W.get("".concat(i.X9,"/profile"))},userSettings:{key:e=>(0,a.u)(l,{name:"settings",key:e}),api:()=>s.W.get("".concat(r))},updateUserSettings:{api:async e=>s.W.patch("".concat(r),e)},myPermissions:{key:e=>(0,a.u)(l,{name:"me-permissions",key:e}),api:()=>s.W.get("".concat(i.Zy,"/v1/me/permissions"))},uploadProfileImage:{api:async e=>{let{file:t,path:n}=e,a=new FormData;return a.append("file",t),s.W.post("".concat(i.Zy,"/v1/upload/").concat(n),a,{headers:{"Content-Type":"multipart/form-data"}})}},withdrawUser:{api:async()=>s.W.delete("".concat(i.Zy,"/v1/user/withdraw"))}}},78480:function(e,t,n){"use strict";n.d(t,{Hc:function(){return o},Ji:function(){return l},Un:function(){return r},Ux:function(){return c}});var s=n(13949),i=n(2560),a=n(56106);function r(){let{key:e="my"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(0,a.aF)(),{data:n,isLoading:r}=(0,i.a)({queryKey:s.Z.userSettings.key({user_token:null==t?void 0:t.user_token}),queryFn:s.Z.userSettings.api,staleTime:1/0,enabled:!!(null==t?void 0:t.is_user)});return n}function l(){var e,t,n,l,c;let o=(0,a.aF)(),d=r(),m=null!==(e=null==d?void 0:d.selected_workspace_id)&&void 0!==e?e:null,{data:u}=(0,i.a)({queryKey:s.Z.myPermissions.key({user_token:null==o?void 0:o.user_token,workspaceId:m}),queryFn:s.Z.myPermissions.api,enabled:!!(null==o?void 0:o.is_user),staleTime:6e4});return{canRecord:null===(t=null==u?void 0:u.can_record)||void 0===t||t,canUpload:null===(n=null==u?void 0:u.can_upload)||void 0===n||n,canScript:null===(l=null==u?void 0:u.can_script)||void 0===l||l,autoShareTeamIds:null!==(c=null==u?void 0:u.auto_share_team_ids)&&void 0!==c?c:[]}}function c(){let{autoShareTeamIds:e}=l();return e.length>0}function o(){let{key:e="profile"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{data:t}=(0,i.a)({queryKey:s.Z.profile.key(e),queryFn:s.Z.profile.api,staleTime:1/0});return t}},6258:function(e,t,n){"use strict";n.d(t,{$h:function(){return h},EY:function(){return v},K$:function(){return y},Ln:function(){return x},No:function(){return _},UO:function(){return k},YQ:function(){return w},cn:function(){return l},d0:function(){return m},eo:function(){return C},gc:function(){return d},iC:function(){return z},ju:function(){return c},mI:function(){return j},pK:function(){return f},rP:function(){return g},tZ:function(){return p},up:function(){return u},vV:function(){return o},wq:function(){return b}});var s=n(57908),i=n(46161),a=n.n(i);n(66436);var r=n(66290);function l(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,r.m6)((0,s.W)(t))}function c(e){return e.replace(/<[^>]*>/g,"")}let o=e=>/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(e),d=e=>e?e.charAt(0).toUpperCase():"",m="/meet/:uuid*",u="/channel/:uuid",x="/space/:uuid";function p(e,t){if(e===t)return!0;if(e.includes("*")||e.includes(":")){let n=e.split("/"),s=t.split("/");if(n[1]!==s[1])return!1;if(!e.endsWith("*")&&3===n.length&&3===s.length||e.endsWith("*")&&s.length>=n.length)return!0}return!1}function h(e){return null==e?void 0:e.data}function f(){{let e=window.location.hash;if(e){let t=document.querySelector(e);t&&setTimeout(()=>{t.scrollIntoView({behavior:"smooth"})},100)}}}function g(e){if(!e)return null;let t=e.parentElement;for(;t;){let{overflowY:e}=window.getComputedStyle(t);if(("auto"===e||"scroll"===e)&&t.scrollHeight>t.clientHeight)return t;t=t.parentElement}return null}function v(){let e=navigator.userAgent||"",t=/(ipad|tablet|tab|android(?!.*mobile))/i.test(e);return/iphone|android.*mobile/i.test(e)&&!t}function b(e){if(!e)return"bg-white";let t=["bg-red-100 text-red-600","bg-orange-100 text-orange-600","bg-amber-100 text-amber-600","bg-yellow-100 text-yellow-600","bg-lime-100 text-lime-600","bg-green-100 text-green-600","bg-emerald-100 text-emerald-600","bg-teal-100 text-teal-600","bg-cyan-100 text-cyan-600","bg-sky-100 text-sky-600","bg-blue-100 text-blue-600","bg-indigo-100 text-indigo-600","bg-vi
1olet-100 text-violet-600","bg-purple-100 text-purple-600","bg-fuchsia-100 text-fuchsia-600","bg-pink-100 text-pink-600","bg-rose-100 text-rose-600"],n=e.length%t.length;return t[n]}let y=(e,t)=>{if(!e||0===e)return null;let n=Math.floor(e/60);if(e<60)return t("meet:meetingItem.duration.lessThanMinute");if(n>=60){let e=Math.floor(n/60),s=n%60;return t("meet:meetingItem.duration.hours",{hours:e.toString(),minutes:s.toString()})}return t("meet:meetingItem.duration.minutes",{minutes:n})};function j(e,t){let n=a()(e);return(null==t?void 0:t.startsWith("ko"))?n.locale("ko").format("YYYY년 M월 D일"):n.format("MMM D, YYYY")}function k(e,t,n){var s;let i=null==t?void 0:t.startsWith("ko"),a=null!==(s=null==n?void 0:n.currency)&&void 0!==s?s:i?"KRW":"USD";return new Intl.NumberFormat(i?"ko-KR":"en-US",{style:"currency",currency:a,minimumFractionDigits:i?0:2}).format(e)}function w(e){e&&window.open(e,"_blank","noopener,noreferrer")}let N=e=>{if("string"!=typeof e)return;let t=e.trim();return t.length>0?t:void 0};function z(e){var t,n,s,i,a,r,l;let c=null!==(i=null==e?void 0:null===(n=e.response)||void 0===n?void 0:null===(t=n.data)||void 0===t?void 0:t.detail)&&void 0!==i?i:null==e?void 0:null===(s=e.data)||void 0===s?void 0:s.detail;if(Array.isArray(c)){let t=c[0];return null!==(r=null!==(a=N(null==t?void 0:t.msg))&&void 0!==a?a:N(t))&&void 0!==r?r:N(null==e?void 0:e.message)}return null!==(l=N(c))&&void 0!==l?l:N(null==e?void 0:e.message)}let C=e=>new Promise((t,n)=>{let s=new Audio,i=URL.createObjectURL(e),a=()=>URL.revokeObjectURL(i);s.onloadedmetadata=()=>{a(),t(s.duration)},s.onerror=()=>{a(),n(Error("Failed to load audio file"))},s.src=i}),_=e=>C(e).then(e=>Number.isFinite(e)?e:0,()=>0)},51616:function(e,t,n){"use strict";n.d(t,{$:function(){return i},g:function(){return s}});let s={index:"/",login:"/login",policy:{service:"/policy/service",privacy:"/policy/privacy",pay:"/policy/pay",promotion:"/policy/promotion"},meet:{index:"/meet",socket:"/meet/socket"},contact:"/contact",contacts:"/contacts",settings:{index:"/settings",general:"/settings/general",account:"/settings/account",notifications:"/settings/notifications",workspace:"/settings/workspace",tags:"/settings/tags",people:"/settings/people",plan:"/settings/plan",billing:"/settings/billing",contact:"/settings/contact"},nexus:{index:"/nexus"},ai:{index:"/ai"},localMeetings:{index:"/local-meetings"},note:{index:"/note",search:"/note/search",my:"/note/my",sharewithme:"/note/sharewithme",recent:"/note/recent",favorite:"/note/favorite",notifications:"/note/unread",accessRequests:"/note/access-requests"},actionItems:{index:"/action-items"},channel:{index:"/channel"},space:{index:"/space",select:"/space/select"},logout:"/logout",coupon:"/coupon",qr:"/qr",service:{index:"/service",useCases:"/service/use-cases",contact:"/service/contact",news:"/service/news"},support:{faq:"/support/faq"}},i="https://open.kakao.com/o/gnAGJewh"},12156:function(e,t,n){"use strict";n.d(t,{f:function(){return u}});var s=n(80626),i=n(42103),a=n(79634),r=n(74887),l=n(6e3);let c=a.Q1?"lgN6FwU0dr6QtOyEV0HbYafTQZSQgnN77dWkHZck":"RenewalHsmoaDevdevdevdevdevdevdevdevdevd",o=a.Q1?"https://aplus-stat.buzzni.com/knoi/log/record":"https://dev-aplus-stat.buzzni.com/knoi/log/record",d=l.default.create(),m=async e=>{try{var t;let n=await s.E.fetchQuery({queryKey:i.Z.user.key("user"),queryFn:()=>i.Z.user.api(),staleTime:1/0}),a={dt:new Date().toISOString().slice(0,10),env:"production",brtudid:(0,r.ej)("brtudid"),user_token:n.user_token,device:n.device_id,email:null==n?void 0:null===(t=n.profile)||void 0===t?void 0:t.email,service:"knoi",platform:"web",...e};await d.post(o,JSON.stringify(a),{headers:{"x-api-key":c,"Content-Type":"application/json"},method:"POST"})}catch(e){}},u=(e,t)=>{try{if("view"===e&&!(null==t?void 0:t.frame)){alert("올바른 뷰 통계값을 넣어주세요");return}if("click"===e&&!(null==t?void 0:t.comp)){alert("올바른 클릭 통계값을 넣어주세요");return}let n={...t};"extras"in n&&delete n.extras,"referrer"in n&&delete n.referrer;let s={path:"/stat/".concat((null==t?void 0:t.comp)||(null==t?void 0:t.frame),"/").concat(e),action:e,...n,..."extras"in t&&t.extras,..."referrer"in t&&{referrer:t.referrer}};m(s)}catch(e){}}},28310:function(e,t,n){"use strict";n.d(t,{Bp:function(){return l},Kw:function(){return a},e0:function(){return r}});var s=n(7653);let i=e=>
1{if(!e)throw Error("Store is invalid, e.g. undefined")};function a(e,t){i(e);let n=()=>e.get();return"function"==typeof t&&(t(e.get()),n=()=>t(e.get())),[(0,s.useSyncExternalStore)(e.subscribe,n,n),(0,s.useCallback)(e.set(),[])]}function r(e){return i(e),(0,s.useCallback)(e.set(),[])}function l(e,t){i(e);let n=()=>e.get();return"function"==typeof t&&(t(e.get()),n=()=>t(e.get())),(0,s.useSyncExternalStore)(e.subscribe,n,n)}},45556:function(e,t,n){"use strict";function s(e){let t=e.default,n=new Set;return{get:()=>t,set:()=>e=>{let s="function"==typeof e?e(t):e;s!==t&&(t=s,n.forEach(e=>e(t)))},subscribe:e=>(n.add(e),()=>n.delete(e))}}n.d(t,{e:function(){return s}})},77082:function(e,t,n){"use strict";function s(){return/android/i.test(navigator.userAgent)}n.d(t,{Dt:function(){return s},jv:function(){return a},yI:function(){return i}});let i=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter(e=>"string"==typeof e).join(" ")},a=e=>e&&/^(https?:\/\/)/i.test(e)},72279:function(e,t,n){"use strict";function s(e,t){let{name:n="",key:s,...i}=t,a={name:n,...i};return void 0===s?[e,a]:"object"==typeof s?[e,{...a,...s}]:[e,{...a,key:s}]}n.d(t,{u:function(){return s}})}},function(e){e.O(0,[54310,13458,87659,54333,49047,54154,73204,67317,72982,94785,92380,48766,10098,18898,81293,60286,1744],function(){return e(e.s=92486)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.