@01.works/visual-review 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/active-review-mount-BpeCsPqV.js +1941 -0
- package/dist/cli.js +350 -61
- package/dist/{convex-runtime-Bkk8o32N.js → convex-runtime-D1aPBck9.js} +2 -2
- package/dist/{cursor-chat-repository-B2hY4vVl.js → cursor-chat-repository-CK86F1lv.js} +1 -1
- package/dist/{hosted-runtime-BrJ3brgj.js → hosted-runtime-B7YTLu3G.js} +2 -2
- package/dist/index.d.ts +95 -1
- package/dist/index.js +1 -1
- package/dist/install-CY72L_bY.js +2 -0
- package/dist/mcp.js +9 -9
- package/dist/react.js +1 -1
- package/dist/review-repository-CAu78oOD.js +1 -0
- package/package.json +1 -1
- package/dist/active-review-mount-DZ10FauJ.js +0 -1516
- package/dist/install-DAqwiYRg.js +0 -2
- package/dist/review-repository-DJTt7aZR.js +0 -1
package/dist/install-DAqwiYRg.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=`https://review.01.works`;function t(e){let t=new URL(e),n=t.hostname===`localhost`||t.hostname===`127.0.0.1`||t.hostname.endsWith(`.test`)||t.hostname.endsWith(`.local`);if(t.protocol!==`https:`&&!(n&&t.protocol===`http:`))throw Error(`Visual Review serviceUrl must use HTTPS outside local development`);if(t.username||t.password||t.search||t.hash)throw Error(`Visual Review serviceUrl must be a plain origin or base path`);return t.toString().replace(/\/+$/,``)}const n=()=>{let e=Promise.resolve(null);return{ready:e,refresh:()=>e,dispose(){}}},r=new Map,i=6e4,a=1e4,o=new WeakMap;function s(e={}){if(e.enabled===!1||typeof window>`u`||typeof document>`u`)return n();let r=!1,i=0,a=null,o=null,s=null,h=null,g=!1,_=!1,v=null,y=null,C=null,E=t(e.serviceUrl??`https://review.01.works`),O=e.activationParam??`visual-review`,A=le(window),N=ue(window),P=S(window.location);if(!(oe(E,O,P,N,A,e.runtime!==void 0)??ie(w(E,P.origin)))){let t={reason:`missing-activation`,origin:P.origin};return M(e.build).mode===`development`&&c(document,t.origin),l(e.onInactive,t),n()}let F=new WeakMap,I=new Map,L=fe(e.styleNonce,document),R=b(window.location,O,e.pageIdentity),z=ne(window,t=>{let n=b(t,O,e.pageIdentity);if(n===R)return;let r=D(O,t.href)?.invitationId;r&&(_=!1,I.set(t.origin,r)),R=n,V(t)}),B=t=>{if(!(r||!h)){if(t===`membership-revoked`){let e=S(window.location),t=I.get(e.origin);t&&(T(E,e.origin,t),I.delete(e.origin),K(E,e.origin,N,A,t));return}R=b(window.location,O,e.pageIdentity),W()}};return{ready:W(),refresh(){return r?Promise.resolve(null):(R=b(window.location,O,e.pageIdentity),V(S(window.location),!0))},dispose(){r||(r=!0,i+=1,U(),h?.remove(),h=null,C=null,y?.remove(),y=null,I.clear(),v?.dispose(),v=null,z.unsubscribe())}};function V(e,t=!1){return!h||!C||C.origin!==e.origin||D(O,e.href)?.invitationId?W():H(h,C,e,t)}function H(t,n,r,c){let l=++i;a!==o&&a?.abort();let u=new AbortController;a=u,t.beginPageTransition();let d=(async()=>{try{let i=await k(n.resolvePage({location:r,...e.pageIdentity===`url`?{routeKey:x(r)}:{},signal:u.signal,cursorChat:e.cursorChat===!0}),u.signal);return Q(l,u)?(i.commit?.(),t.setPage({pageId:i.pageId,...e.cursorChat===!0?{cursorChat:{roomId:i.cursorChatRoomId}}:{}},{reload:c}),t.isConnected||document.body?.append(t),t):$(l)}catch{return Q(l,u)?W():$(l)}})();return s=d,d}function U(){a?.abort(),o?.abort(),a=null,o=null}function W(){if(_&&!D(O,S(window.location).href))return Promise.resolve(null);let t=++i;U(),v?.suspendSession(),h?.remove(),h=null,C=null,y?.remove();let n=new AbortController,r=document.createElement(`div`);r.dataset.agencyReviewRoot=``,a=n,o=n,y=r;let c=q(t,n,r);return s=c,c.then(r=>{r&&Q(t,n)&&h===r&&e.onReady?.(r)}),c}async function q(t,n,i){try{let e=document.body??await j(document,n.signal);if(!Q(t,n))return $(t);e.append(i);let r=await J(t,n,i);return Q(t,n)?r:(i.remove(),$(t))}catch(a){if(!Q(t,n))return i.remove(),$(t);if(f(a,`AUTH_CANCELLED`)||f(a,`ACCOUNT_BRIDGE_REDIRECT`))return i.remove(),y===i&&(y=null),null;let o=F.get(i),s=o?.[3];if(Z(a,i),p(s)&&f(a,`INVITATION_EMAIL_REQUIRED`)&&!g){let e=o?.[1]??S(window.location).origin,t=o?.[2];return t&&(I.delete(e),K(E,e,N,A,t)),i.remove(),y===i&&(y=null),null}let c=de(a,o?.[2]),u=o?.[1]??S(window.location).origin,d=f(a,`ORIGIN_NOT_ALLOWED`);if(d&&l(e.onInactive,{reason:`origin-not-allowed`,origin:u}),!p(s)||g||!m(a)){let{originNotAllowedMessage:o,renderBootstrapError:s}=await import(`./bootstrap-error-B30Je5Pg.js`);if(!Q(t,n))return i.remove(),$(t);let l=te(a)?void 0:()=>{r||y!==i||(R=b(window.location,O,e.pageIdentity),W())};s(i,d?o(u):c.message,L,l)}else i.remove(),y===i&&(y=null);return e.onError?.(c),window.dispatchEvent(new CustomEvent(`visual-review:error`,{detail:c})),null}}async function J(t,n,r){let i=S(window.location),a=oe(E,O,i,N,A,e.runtime!==void 0),o=re(I.get(i.origin)),s=ie(w(E,i.origin)),c=a?.source===`url`?a:s??o??a;if(!c)return F.delete(r),r.remove(),y===r&&(y=null),null;let l=c.invitationId;F.set(r,[E,i.origin,l,c.source,c.emailToken]),c.source===`url`?(K(E,i.origin,N,A),I.set(i.origin,l),ae(E,i.origin,l,c.emailToken,c.accountToken),z.suppress(()=>se(O))):c.source===`handoff`&&I.set(i.origin,l),R=b(window.location,O,e.pageIdentity);let f=S(window.location),p=await k((e.runtime??await u(E)).resolve({invitationId:l,emailToken:c.emailToken,accountToken:c.accountToken??void 0,accountBridgeAttempted:c.accountToken!==void 0,location:f,...e.pageIdentity===`url`?{routeKey:x(f)}:{},signal:n.signal,authHost:r,styleNonce:L,cursorChat:e.cursorChat===!0}),n.signal);if(!Q(t,n))return null;T(E,i.origin,l),ce(E,l,i,N,A,p.sessionScope??`browser`,p.sessionExpiresAt),c.source===`url`&&G(A,X(E,i.origin)),I.set(i.origin,l);let m=M(e.build),te=e.sourceContextResolver??await ee(m,n.signal);if(!Q(t,n))return null;let{createActiveReviewSessionLifecycle:ne,createReviewNavigationHandler:_,mountReviewWidget:D}=await d(n.signal);if(!Q(t,n))return null;v??=ne({window,document,storage:A,onExit:Y,onReauthenticationRequired:B});let j=v.bindSession(l,X(E,i.origin),p.clearLocalSession);return Q(t,n)?(h=D({...p,...e.cursorChat===!0&&p.cursorChatRepository?{cursorChat:{repository:p.cursorChatRepository,roomId:p.cursorChatRoomId}}:{},offset:e.offset,onExitReview:j,onNavigateToFeedback:_(window,e.navigateToFeedback),sourceContextResolver:te,styleNonce:L,position:e.position,...m.mode===`development`&&(e.developerTools?.codeContextCopy===!0||e.developerTools?.reactGrab===!0)?{codeContextCopy:{}}:{}}),v.attachWidget(h),C=p.resolvePage?{origin:i.origin,resolvePage:e=>p.resolvePage(e)}:null,r.remove(),y===r&&(y=null),g=!0,window.dispatchEvent(new CustomEvent(`visual-review:ready`,{detail:h})),h):null}function Y(e){let t=S(window.location).origin;_=!0,T(E,t,e),I.delete(t),K(E,t,N,A,e),i+=1,U(),h?.remove(),h=null,C=null,y?.remove(),y=null}function Z(e,t){if(!m(e))return;let n=F.get(t);if(!n)return;let[r,i,a]=n;T(r,i,a),I.get(i)===a&&I.delete(i),K(r,i,N,A,a)}function Q(e,t){return!r&&i===e&&a===t&&!t.signal.aborted}function $(e){return!r&&i!==e?s:null}}function c(e,t){let n=o.get(e);n||(n=new Set,o.set(e,n)),!n.has(t)&&(n.add(t),console.info([`[VisualReview] Inactive: no invitation or resume marker was found.`,`Open this page using a Visual Review invitation URL.`,`Current origin: ${t}`].join(`
|
|
2
|
-
`)))}function l(e,t){if(e)try{e(t)}catch(e){console.error(`[VisualReview] onInactive callback failed.`,e)}}async function u(e){let{createHostedReviewRuntime:t}=await import(`./hosted-runtime-BrJ3brgj.js`);return t({serviceUrl:e})}async function d(e){return A(import(`./active-review-mount-DZ10FauJ.js`),e,a,`리뷰 위젯을 불러오는 시간이 초과되었습니다. 다시 시도해 주세요.`)}async function ee(e,t){let n=M(e),{createEmbeddedSourceContextResolver:r}=await A(import(`./embedded-source-context-BTB3pFqv.js`),t,a,`리뷰 소스 정보를 불러오는 시간이 초과되었습니다. 다시 시도해 주세요.`);return r({build:n})}function f(e,t){return e instanceof Error&&`code`in e&&e.code===t}function p(e){return e===`tab-storage`||e===`browser-storage`||e===`legacy-storage`}function m(e){let t=h(e);return typeof t==`string`&&/^INVITATION_(?:EXPIRED|NOT_FOUND|REVOKED)$/.test(t)}function te(e){return m(e)||h(e)===`UNSUPPORTED_SERVICE_VERSION`}function h(e){return e instanceof Error&&`code`in e?e.code:void 0}const g=new WeakMap;function ne(e,t){let n=g.get(e);if(!n){let t=e.history,r=t.pushState,i=t.replaceState,a=new Set;n={history:t,originalPushStateDescriptor:Object.getOwnPropertyDescriptor(t,`pushState`),originalReplaceStateDescriptor:Object.getOwnPropertyDescriptor(t,`replaceState`),patchedPushState:function(t,n,i){r.call(this,t,n,i),_(e)},patchedReplaceState:function(t,n,r){i.call(this,t,n,r),_(e)},popstateListener:()=>_(e),subscribers:a,suppressionDepth:0},g.set(e,n),v(t,`pushState`,n.patchedPushState),v(t,`replaceState`,n.patchedReplaceState),e.addEventListener(`popstate`,n.popstateListener)}n.subscribers.add(t);let r=!0;return{suppress(e){n.suppressionDepth+=1;try{return e()}finally{--n.suppressionDepth}},unsubscribe(){r&&(r=!1,n.subscribers.delete(t),!(n.subscribers.size>0)&&(e.removeEventListener(`popstate`,n.popstateListener),y(n.history,`pushState`,n.patchedPushState,n.originalPushStateDescriptor),y(n.history,`replaceState`,n.patchedReplaceState,n.originalReplaceStateDescriptor),g.delete(e)))}}}function _(e){let t=g.get(e);if(!t||t.suppressionDepth>0)return;let n=S(e.location);[...t.subscribers].forEach(e=>e(n))}function v(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:!0,value:n})}function y(e,t,n,r){if(Object.getOwnPropertyDescriptor(e,t)?.value===n){if(r){Object.defineProperty(e,t,r);return}delete e[t]}}function b(e,t,n){return`${e.origin}\n${n===`url`?x(e):e.pathname}\n${D(t,e.href)?.invitationId??``}`}function x(e){let t=new URL(e.href);return`${t.pathname}${t.search}${t.hash}`}function S(e){return new URL(e.href)}function re(e){return e?{invitationId:e,source:`memory`}:null}function ie(e){return e?{invitationId:e.invitationId,emailToken:e.emailToken,accountToken:e.accountToken,source:`handoff`}:null}function C(e,t){return JSON.stringify([e,t])}function w(e,t,n=Date.now()){let i=C(e,t),a=r.get(i);if(a){if(a.expiresAt>n)return a;clearTimeout(a.timeout),r.delete(i)}}function ae(e,t,n,a,o,s=Date.now()){E(s);let c=C(e,t),l=r.get(c);for(l&&(clearTimeout(l.timeout),r.delete(c));r.size>=32;){let e=r.keys().next().value;if(!e)break;let t=r.get(e);t&&clearTimeout(t.timeout),r.delete(e)}let u=s+i,d=setTimeout(()=>{r.get(c)?.expiresAt===u&&r.delete(c)},i);r.set(c,{invitationId:n,emailToken:a,accountToken:o,expiresAt:u,timeout:d})}function T(e,t,n){let i=C(e,t),a=r.get(i);a?.invitationId===n&&(clearTimeout(a.timeout),r.delete(i))}function E(e){for(let[t,n]of r)n.expiresAt>e||(clearTimeout(n.timeout),r.delete(t))}function oe(e,t,n,r,i,a){let o=D(t,n.href);if(o)return o;let s=U(i,X(e,n.origin)),c=U(r,J(e,n.origin));if(c&&c!==s)return{invitationId:c,source:`tab-storage`};let l=H(i,Y(e,n.origin));if(l&&l.invitationId!==s)return{invitationId:l.invitationId,source:`browser-storage`};let u=U(i,q(e,n.origin));return u&&u!==s?{invitationId:u,source:`legacy-storage`}:a&&Z(n.hostname)?{invitationId:`local-preview`,source:`local-preview`}:null}function D(e,t){let n=new URL(t),r=O(n.hash),i=(r?.get(e)??r?.get(`visual-review`)??r?.get(`agency-review`)??r?.get(`agency-review-invite`)??n.searchParams.get(e)??n.searchParams.get(`agency-review`)??n.searchParams.get(`agency-review-invite`))?.trim();if(!i)return null;let a=r?.get(`visual-review-token`)?.trim(),o=r?.get(`visual-review-account-token`)?.trim();return{invitationId:i,emailToken:a&&/^[\w-]{43}$/.test(a)?a:void 0,accountToken:(o&&o.length<=4096&&/^[\w.-]+$/.test(o)?o:void 0)??(r?.get(`visual-review-account`)===`none`?null:void 0),source:`url`}}function O(e){let t=e.replace(/^#?\??/,``);return t.includes(`=`)?new URLSearchParams(t):null}function se(e){let t=new URL(window.location.href),n=[e,`visual-review`,`agency-review`,`agency-review-invite`,`visual-review-token`,`visual-review-account-token`,`visual-review-account`,`visual-review-return-hash`];for(let e of n)t.searchParams.delete(e);let r=O(t.hash);if(r){let e=r.get(`visual-review-return-hash`);for(let e of n)r.delete(e);let i=r.toString();t.hash=e!==null&&e.length<=2e3&&(e===``||e[0]===`#`)?e:i?`#${i}`:``}window.history.replaceState(window.history.state,``,`${t.pathname}${t.search}${t.hash}`)}function k(e,t){return new Promise((n,r)=>{let i=()=>r(new DOMException(`Aborted`,`AbortError`));if(t.aborted){i();return}t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})})}function A(e,t,n,r){return new Promise((i,a)=>{let o=!1,s=e=>{o||(o=!0,clearTimeout(l),t.removeEventListener(`abort`,c),e())},c=()=>{s(()=>a(new DOMException(`Aborted`,`AbortError`)))},l=setTimeout(()=>{s(()=>a(Error(r)))},n);if(t.aborted){c();return}t.addEventListener(`abort`,c,{once:!0}),e.then(e=>s(()=>i(e)),e=>s(()=>a(e)))})}function j(e,t){return e.body?Promise.resolve(e.body):t.aborted?Promise.reject(new DOMException(`Aborted`,`AbortError`)):new Promise((n,r)=>{let i=!1,a=new MutationObserver(()=>c()),o=()=>{e.removeEventListener(`DOMContentLoaded`,c),t.removeEventListener(`abort`,l),a.disconnect()},s=e=>{i||(i=!0,o(),e())},c=()=>{let t=e.body;t&&s(()=>n(t))},l=()=>{s(()=>r(new DOMException(`Aborted`,`AbortError`)))};e.addEventListener(`DOMContentLoaded`,c),t.addEventListener(`abort`,l,{once:!0}),a.observe(e,{childList:!0,subtree:!0}),c()})}function M(e){let t=document.querySelector(`meta[name="visual-review-build"]`),n=document.querySelector(`meta[name="visual-review-commit"]`),r=V(F()),i=V(I());return{buildId:B(e?.buildId)??z(t)??r??`unversioned`,gitCommit:L(e,n,i),generatedAt:e?.generatedAt,mode:e?.mode??P(N())??(Z(window.location.hostname)?`development`:`production`)}}function N(){try{return process.env.VISUAL_REVIEW_PUBLIC_BUILD_MODE}catch{return}}function P(e){return e===`development`||e===`preview`||e===`production`?e:void 0}function F(){try{return process.env.VISUAL_REVIEW_PUBLIC_BUILD_ID}catch{return}}function I(){try{return process.env.VISUAL_REVIEW_PUBLIC_GIT_COMMIT}catch{return}}function L(e,t,n){return e?.gitCommit===null?null:typeof e?.gitCommit==`string`?R(e.gitCommit):R(t?.content)??R(n)}function R(e){if(typeof e!=`string`)return null;let t=e.trim().toLowerCase();return/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/.test(t)?t:null}function z(e){return V(e?.content)}function B(e){let t=typeof e==`string`?e.trim():``;return t.length>0?t:null}function V(e){return typeof e==`string`&&e.length>0?e:null}function ce(e,t,n,r,i,a,o){if(a===`tab`){try{r?.setItem(J(e,n.origin),t)}catch{}G(i,Y(e,n.origin))}else{let a=Number.isSafeInteger(o)&&o>Date.now()?o:Date.now()+1440*6e4;try{i?.setItem(Y(e,n.origin),JSON.stringify({version:2,invitationId:t,expiresAt:a}))}catch{}G(r,J(e,n.origin))}W(e,n.origin,i,t)}function H(e,t){let n=U(e,t);if(!n)return null;let r=()=>{try{e?.removeItem?.(t)}catch{}};try{let e=JSON.parse(n),t=e.expiresAt;return e.version!==2||typeof e.invitationId!=`string`||!e.invitationId.trim()||!Number.isSafeInteger(t)||t<=Date.now()?(r(),null):{version:2,invitationId:e.invitationId,expiresAt:t}}catch{return r(),null}}function U(e,t){try{return e?.getItem(t)??null}catch{return null}}function le(e){try{return e.localStorage}catch{return null}}function ue(e){try{return e.sessionStorage}catch{return null}}function W(e,t,n,r){try{if(!n)return;let i=q(e,t),a=n.getItem(i);if(a===null||r!==void 0&&a!==r)return;n.removeItem(i)}catch{}}function G(e,t){try{e?.removeItem(t)}catch{}}function K(e,t,n,r,i){W(e,t,r,i);let a=J(e,t),o=Y(e,t);if(i===void 0){G(n,a),G(r,o);return}U(n,a)===i&&G(n,a),H(r,o)?.invitationId===i&&G(r,o)}function q(e,t){return`visual-review:${e}:${t}:invitation`}function J(e,t){return`visual-review:${e}:${t}:invitation:tab:v2`}function Y(e,t){return`visual-review:${e}:${t}:invitation:browser:v2`}function X(e,t){return`visual-review:${e}:${t}:exit:v1`}function Z(e){return e===`localhost`||e===`127.0.0.1`||e.endsWith(`.test`)||e.endsWith(`.local`)}function de(e,t){let n=e instanceof Error?e.message:String(e),r=Error(Q(n,t));if(e&&typeof e==`object`){let n=`code`in e?e.code:void 0,i=`status`in e?e.status:void 0;typeof n==`string`&&Object.defineProperty(r,"code",{configurable:!0,enumerable:!0,value:Q(n,t)}),typeof i==`number`&&Number.isFinite(i)&&Object.defineProperty(r,"status",{configurable:!0,enumerable:!0,value:i})}return r}function Q(e,t){if(!t)return e;let n=new Set([t,encodeURIComponent(t)]),r=e;for(let e of n)e&&(r=r.split(e).join(`[redacted]`));return r}function fe(e,t){if(e!==void 0)return pe(e);let n=t.currentScript,r=n?$(n):void 0;if(r)return r;try{for(let e of t.querySelectorAll(`script[nonce],style[nonce]`)){let t=$(e);if(t)return t}}catch{}}function $(e){let t=`nonce`in e?e.nonce:void 0;return typeof t==`string`?pe(t):void 0}function pe(e){return e.trim()||void 0}export{e as n,t as r,s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t,r as n}from"./src-IC5X3zme.js";const r=Symbol.for(`functionName`),i=Symbol.for(`toReferencePath`);function a(e){return e[i]??null}function o(e){return e.startsWith(`function://`)}function s(e){let t;if(typeof e==`string`)t=o(e)?{functionHandle:e}:{name:e};else if(e[r])t={name:e[r]};else{let n=a(e);if(!n)throw Error(`${e} is not a functionReference`);t={reference:n}}return t}function c(e){let t=s(e);if(t.name===void 0)throw t.functionHandle===void 0?t.reference===void 0?Error(`Expected function reference like "api.file.func" or "internal.file.func", but received ${JSON.stringify(t)}`):Error(`Expected function reference in the current component like "api.file.func" or "internal.file.func", but received reference ${t.reference}`):Error(`Expected function reference like "api.file.func" or "internal.file.func", but received function handle ${t.functionHandle}`);if(typeof e==`string`)return e;let n=e[r];if(!n)throw Error(`${e} is not a functionReference`);return n}function l(e){return{[r]:e}}function u(e=[]){return new Proxy({},{get(t,n){if(typeof n==`string`)return u([...e,n]);if(n===r){if(e.length<2){let t=[`api`,...e].join(`.`);throw Error(`API path is expected to be of the form \`api.moduleName.functionName\`. Found: \`${t}\``)}let t=e.slice(0,-1).join(`/`),n=e[e.length-1];return n==="default"?t:t+`:`+n}else if(n===Symbol.toStringTag)return`FunctionReference`;else return}})}u();const d=Object.freeze({resolveSession:l(`reviews:resolveSession`),pageSnapshot:l(`reviews:pageSnapshot`),projectSnapshot:l(`reviews:projectSnapshot`),createComment:l(`reviews:createComment`),createReply:l(`reviews:createReply`),moveCommentPin:l(`reviews:moveCommentPin`),presenceList:l(`presence:list`),presenceUpdate:l(`presence:update`),presenceDisconnect:l(`presence:disconnect`),screenshotUploadUrl:l(`screenshots:generateUploadUrl`),screenshotCommit:l(`screenshots:commitUpload`),screenshotDiscard:l(`screenshots:discardUpload`)});Object.freeze({catalog:l(`owners:catalog`),listProjects:l(`owners:listProjects`),projectOverview:l(`owners:projectOverview`),feedbackPage:l(`owners:feedbackPage`),createProject:l(`owners:createProject`),createProjectWithOrigins:l(`owners:createProjectWithOrigins`),configureProjectLinkAccess:l(`owners:configureProjectLinkAccess`),deleteProject:l(`owners:deleteProject`),addOrigin:l(`owners:addOrigin`),removeOrigin:l(`owners:removeOrigin`),replaceOrigins:l(`owners:replaceOrigins`),createPage:l(`owners:createPage`),deletePage:l(`owners:deletePage`),upsertPageBuild:l(`owners:upsertPageBuild`),createInvitation:l(`owners:createInvitation`),revokeInvitation:l(`owners:revokeInvitation`),revokeReviewerAccess:l(`owners:revokeReviewerAccess`),setCommentStatus:l(`owners:setCommentStatus`),createReply:l(`owners:createReply`),deleteComment:l(`owners:deleteComment`),deleteReply:l(`owners:deleteReply`),screenshotDownload:l(`screenshots:ownerDownload`)});var f=class{client;session;#e;#t;#n;constructor(e,t,n){this.client=e,this.session=t,this.#e=_(n.invitationId??t.invitationId,`invitationId`),this.#t=v(n.origin),this.#n=n.fetch??globalThis.fetch.bind(globalThis)}async attachScreenshot(e,t,n){_(e,`pageId`);let r=_(t,`commentId`);if(n.bytes.byteLength===0||n.bytes.byteLength>15e5)throw Error(`Screenshot size is invalid`);let i=await this.client.mutation(d.screenshotUploadUrl,{...this.#r(),commentId:r}),a=await this.#n(i.uploadUrl,{method:`POST`,headers:{"content-type":n.contentType},body:p(n.bytes)});if(!a.ok)throw Error(`Screenshot upload failed`);let o=await a.json();if(typeof o.storageId!=`string`||!o.storageId)throw Error(`Screenshot upload returned an invalid storage ID`);try{await this.client.mutation(d.screenshotCommit,{...this.#r(),commentId:r,grantId:i.grantId,storageId:o.storageId,contentType:n.contentType,width:n.width,height:n.height})}catch(e){throw await this.client.mutation(d.screenshotDiscard,{...this.#r(),commentId:r,grantId:i.grantId,storageId:o.storageId}).catch(()=>void 0),e}}async getSnapshot(e){return g(await this.client.query(d.pageSnapshot,{...this.#r(),pageId:_(e,`pageId`)}))}async moveCommentPin(e,t,n,r){return this.client.mutation(d.moveCommentPin,{...this.#r(),pageId:_(e,`pageId`),commentId:_(t,`commentId`),anchorJson:JSON.stringify(n),expectedRevision:r})}async getProjectSnapshot(e){return this.#i(e),structuredClone(await this.client.query(d.projectSnapshot,{...this.#r(),projectId:e}))}subscribe(e,t,n){return this.client.onUpdate(d.pageSnapshot,{...this.#r(),pageId:_(e,`pageId`)},e=>t(g(e)),e=>n?.(m(e)))}subscribeProject(e,t,n){return this.#i(e),this.client.onUpdate(d.projectSnapshot,{...this.#r(),projectId:e},e=>t(structuredClone(e)),e=>n?.(m(e)))}async mutate(r,i){switch(i.type){case`comment.upsert`:{let a=i.comment;if(a.pageId!==r)throw Error(`Comment page mismatch`);if(a.authorId!==this.session.reviewerId)throw Error(`Comment author mismatch`);if(a.status!==`open`||a.resolvedAt!==void 0||a.resolvedById!==void 0||a.createdAt!==a.updatedAt)throw Error(`Only new open comments can be created by a reviewer`);let o=n(a.body).trim(),s=t(a.target),c=a.scope===void 0?void 0:e(a.scope);await this.client.mutation(d.createComment,{...this.#r(),pageId:r,commentId:a.id,body:o,targetJson:JSON.stringify(s.publicTarget),sourceContextJson:s.sourceContextJson,...a.authorKind===void 0?{}:{authorKind:a.authorKind},...c===void 0?{}:{scopeJson:JSON.stringify(c)}});return}case`reply.upsert`:{let e=i.reply;if(e.authorId!==this.session.reviewerId)throw Error(`Reply author mismatch`);if(e.createdAt!==e.updatedAt)throw Error(`Reply edits require an owner command`);await this.client.mutation(d.createReply,{...this.#r(),commentId:e.commentId,replyId:e.id,body:n(e.body,`Reply body`).trim(),...i.requestReopen?{requestReopen:!0}:{}});return}case`comment.delete`:throw Error(`Comment deletion requires an owner command`);case`reply.delete`:throw Error(`Reply deletion requires an owner command`)}}#r(){return{invitationId:this.#e,origin:this.#t}}#i(e){if(!e.trim()||e!==this.session.projectId)throw Error(`Project does not belong to the reviewer session`)}};function p(e){let t=new Uint8Array(e.byteLength);return t.set(e),t.buffer}function m(e){let t=h(e);return t===`UNAUTHENTICATED`||t===`INVITATION_EXPIRED`?{type:`access-lost`,code:`session-expired`,recovery:`reauthenticate`,clearSnapshot:!0}:t===`INVITATION_REVOKED`||t===`MEMBERSHIP_REVOKED`?{type:`access-lost`,code:`membership-revoked`,recovery:`reauthenticate`,clearSnapshot:!0}:t===`ORIGIN_MISMATCH`||t===`ORIGIN_NOT_ALLOWED`||t===`INVITATION_REQUIRED`?{type:`access-lost`,code:`permission-denied`,recovery:`reauthenticate`,clearSnapshot:!0}:{type:`error`,code:e instanceof Error?`transport`:`unknown`,recovery:`retry`,clearSnapshot:!0}}function h(e){if(!e||typeof e!=`object`)return;let t=e.data;if(typeof t==`string`)return t;if(t&&typeof t==`object`){let e=t.code;if(typeof e==`string`)return e}}function g(e){return structuredClone(e)}function _(e,t){let n=e.trim();if(!n)throw Error(`${t} is required`);return n}function v(e){let t=_(e,`origin`);try{let e=new URL(t);if(e.origin!==t)throw Error();return e.origin}catch{throw Error(`A valid browser origin is required`)}}export{c as i,m as n,d as r,f as t};
|