@dereekb/zoho 14.5.1 → 14.7.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/cli/index.js +4 -4
- package/cli/package.json +7 -7
- package/nestjs/package.json +5 -5
- package/package.json +8 -8
package/cli/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module';
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
|
-
var Mu=Object.defineProperty;var wu=Object.getOwnPropertyDescriptor;var q=(e,t,o,r)=>{for(var n=r>1?void 0:r?wu(t,o):t,a=e.length-1,i;a>=0;a--)(i=e[a])&&(n=(r?i(t,o,n):i(n))||n);return r&&n&&Mu(t,o,n),n},N=(e,t)=>(o,r)=>t(o,r,e);import{existsSync as _u,mkdirSync as Nu,writeFileSync as Uu}from"node:fs";import{join as vu}from"node:path";var Lr=1;var fo=[/Bearer\s+\S+/gi,/access_token[=:]\s*\S+/gi,/refresh_token[=:]\s*\S+/gi,/client_secret[=:]\s*\S+/gi,/id_token[=:]\s*\S+/gi,/cli_handoff[=:]\s*\S+/gi,/"code"\s*:\s*"[^"]+"/gi],Gr=6e4,Ne={},Kr=[...fo],yo,Lu=!1,Gu=Gr;function go(e){Ne=e}function Ot(){return Ne}function Vr(e){Lu=e}function Jr(e){Gu=e===void 0?Gr:e}function Ro(e){Kr=e}function zr(e){yo=e}function ge(e){let t=e;for(let o of Kr)t=t.replace(o,"[REDACTED]");return t}function jr(){return new Date().toISOString().replaceAll(/[:.]/g,"-")}function pt(e,t){let{dumpDir:o,commandPath:r}=Ne,n;if(o){_u(o)||Nu(o,{recursive:!0});let a=r?.length?r.join("_"):"response",i=jr(),s=t?`${a}_${i}_${t}`:`${a}_${i}`;n=vu(o,`${s}.${e}`)}else n=void 0;return n}function Ku(e,t){let o=pt("json");if(!o)return;let r={ok:!0,data:e,...t?{meta:t}:{}};Uu(o,JSON.stringify(r,null,2))}function Ee(e,t){let o=t.split(",").map(n=>n.trim()),r;return Array.isArray(e)?r=e.map(n=>vr(n,o)):e!=null&&typeof e=="object"?r=vr(e,o):r=e,r}function vr(e,t){let o;if(e==null||typeof e!="object")o=e;else{let r={};for(let n of t)n in e&&(r[n]=e[n]);o=r}return o}function qr(e){return Ne.pretty?JSON.stringify(e,null,2):JSON.stringify(e)}function p(e,t){Ku(e,t);let r={ok:!0,data:Ne.pick?Ee(e,Ne.pick):e,...t?{meta:t}:{}};console.log(qr(r))}function Wr(e){console.log(qr(Co(e)))}var ut=class extends Error{code;suggestion;constructor(t){super(t.message),this.name="CliError",this.code=t.code,this.suggestion=t.suggestion}};function Co(e){let t=yo?yo(e):void 0,o;return t?o=t:e instanceof ut?o={ok:!1,error:ge(e.message),code:e.code,...e.suggestion?{suggestion:e.suggestion}:{}}:e instanceof Error?o={ok:!1,error:ge(e.message),code:"ERROR"}:o={ok:!1,error:ge(String(e)),code:"UNKNOWN_ERROR"},o}function Ue(e,t=!1){let o;return typeof e=="string"?o=t:e!=null&&typeof e=="object"&&Symbol.iterator in e?o=!0:o=!1,o}function lt(e){let t=!0;for(let o of e){t=!1;break}return t}function To(e,t){for(let o of e)t(o)}function W(e,t,o=!1){e!=null&&(Ue(e,o)?To(e,t):t(e))}function $r(e){if(!Array.isArray(e))throw new TypeError("Input is not an array/tuple...");let t;if(e.length>0){let o=e[0],r=!1;if(Array.isArray(o)){let n=o.length;r=e.findIndex(i=>Array.isArray(i)?i.length!==n:!0)!==-1}else r=!0;t=r?[e]:e}else t=e;return t}function Vu(e){return e==null?[]:Ju(e)}var A=Vu;function Ju(e){return Array.isArray(e)?e:[e]}import{symmetricDifference as af}from"extra-set";function Hr(e,t){W(t,o=>e.add(o))}function Br(e,t){W(t,o=>e.delete(o))}function Yr(e,t=!0){return t?((...o)=>!e.call(void 0,...o)):e}function Zo(e){return Object.keys(e).length===0}function Xr(e){let t={};return e.forEach((o,r)=>{t[r]=o}),t}function Qr(e){return{...e}}function en(e){return e!=null}function Dt(e){return Ue(e,!1)?!lt(e):tn(e)}function Ao(e){let t;return Ue(e,!0)?t=!lt(e):tn(e)?t=typeof e=="object"?!Zo(e):!0:t=!1,t}function tn(e){return e!=null&&e!==""}function zu(e){return t=>{let o;return t==null?o=[]:o=t.filter((r,n,a)=>e(r,n,a)),o}}var ce=zu(en);var ju=(e=>e);function on(){return ju}function xo(e,t){let o=new Set(e),r=qu(t,n=>n);return r.length&&Br(o,r),Array.from(o)}function qu(e,t){return ce(e==null?[]:Array.isArray(e)?e:Wu(e,t))}function Wu(e,t){let o=new Set(e.keys);return e.values&&Hr(o,e.values.map(t)),Array.from(o)}function ve(e,t){let o=$u(e,r=>t(r)?"in":"out");return{included:o.in??[],excluded:o.out??[]}}function $u(e,t){return Xr(Hu(e,t))}function Hu(e,t){let o=new Map;return e?.forEach(r=>{let n=t(r),a=o.get(n);a==null?o.set(n,[r]):a.push(r)}),o}function So(e){return Array.from(e.entries())}function rn(e){return Bu(So(e))}function Bu(e){let t=[];return e.forEach(([o,r])=>{W(r,n=>{t.push([o,n])})}),t}function nn(){let e=new Map,t=(n,a)=>{let i=e.get(n);i==null&&(i=[],e.set(n,i)),W(a,s=>i.push(s))},o=(n,a)=>t(n,$r(a));return{map:()=>e,entries:()=>So(e),tuples:()=>rn(e),delete:n=>e.delete(n),add:t,addTuples:o,addToKeys:(n,a)=>W(n,i=>t(i,a)),addTuplesToKeys:(n,a)=>W(n,i=>o(i,a)),has:n=>e.has(n),get:n=>e.get(n)??[]}}function Yu(e){return typeof e=="function"?e.prototype?Object.getOwnPropertyDescriptor(e,"prototype")?.writable?"function":"class":e.constructor.name==="AsyncFunction"?"function":"arrow":null}function an(e){let t=Yu(e);return t!=null&&t!=="class"}function sn(e){return an(e)?e:()=>e}function cn(e,t){return Math.log(t)/Math.log(e)}var un=",",Xu=" ";function Qu(e,t=un,o=!1){if(e==null)return e;let r=A(e);return o&&(r=r.map(n=>n?.trim())),r.filter(Boolean).join(t)}function Fo(e,t,o){let r;switch(o){case 1:r=[e];break;case 2:{let n=e.indexOf(t);r=n<0?[e]:[e.slice(0,n),e.slice(n+t.length)];break}default:{let n=e.split(t),a=[];if(n.length>1){let i=n.length>o,s=i?o-1:n.length;for(let c=0;c<s;c+=1)a.push(n[c]);i&&a.push(n.slice(s).join(t))}else a.push(n[0]);r=a;break}}return r}function ep(e){let{joiner:t,trimByDefault:o=!1}=e,r=function(n,a=o){return Qu(n,t,a)};return r.joiner=t,r.trimByDefault=o,r}function pn(e){let{joiner:t}=e,o=ep(e),r=(n,a=i=>i)=>n.split(t).map(s=>a(s.trim()));return{joiner:t,trimByDefault:o.trimByDefault,joinStrings:o,splitStrings:r,splitStringsToSet(n){return new Set(n==null?[]:r(n))},splitJoinRemainder(n,a){return Fo(n,t,a)}}}var bo=pn({joiner:un}),tp=pn({joiner:Xu,trimByDefault:!0});var O=bo.joinStrings,Ef=bo.splitStrings,Pf=bo.splitStringsToSet,Mf=tp.joinStrings;var ln=Yr;function hn(e,{forEach:t,filter:o}){op(e,o).forEach((n,a)=>t(n,a))}function op(e,t){return Io(t)(e)}function Io(e){let t;if(e==null)t=dn;else{let o=rp(e);t=r=>dn(r).filter((n,a)=>o(n,a))}return t}function dn(e){return Object.entries(e)}function ko(e){return typeof e=="object"?e:{valueFilter:e}}function rp(e){let t=ko(e),{valueFilter:o=1,invertFilter:r=!1,keysFilter:n}=t,a;switch(o){case 1:a=([,i])=>i!==void 0;break;case 2:a=([,i])=>i!=null;break;case 3:a=([,i])=>!!i;break;case 4:a=([,i])=>Dt(i);break;case 5:a=([,i])=>Ao(i);break;case 6:a=([,i])=>!!i&&Dt(i);break;case 7:a=([,i])=>!!i&&Ao(i);break;default:a=()=>!0;break}if(n){let i=a,s=new Set(n.map(c=>c.toString()));a=(c,u)=>i(c,u)&&s.has(c[0])}return ln(a,r)}function dt(e){let t,o=n=>{t={value:e(n)}},r=(n=>(t||o(n),t.value));return r.set=n=>t={value:n},r.reset=()=>t=void 0,r.init=o,r.used=()=>!!t,r}function mn(e){let t;return e==null||dp(e)?t=e:t=np(e),t}function np(e){return e==null?e:new Date(e)}var ap=365,yn=24,ip=60,sp=1440,cp=60,Kf=ap*sp,up=cp*ip,K=1e3,Re=K*60,ht=Re*60,pp=ht*yn,Vf=up*yn,lp=7,Jf=pp*lp;function dp(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function fn(e){return e.getTime()<Date.now()}function gn(e,t){return e==null?e:new Date(e.getTime()+(t??0))}function hp(e){let{expiresAt:t,expires:o,now:r,expiresFromDate:n,defaultExpiresFromDateToNow:a,expiresIn:i}=e,s=n==null?null:mn(n);function c(g){return g??r??new Date}function u(g,m=!1){let C=c(g),y=h(C),R;return y==null?R=m:R=y<=C,R}function d(g){let m=c(g);return h(m)}function h(g){let m=null;return o!=null?m=o.expiresAt??null:t!=null?m=t:i!=null&&(m=gn(s??(a===!1?null:g),i)),m}return{input:e,hasExpired:u,getExpirationDate:d}}function Rn(e,t){let o=!0;return e!=null&&(o=hp(e).hasExpired(t,!0)),o}function mp({filter:e,copy:t,dynamic:o=!1}){let r=e==null?Rp:Le({filter:e,copy:!1});return n=>{let a=()=>{let s={};return n.forEach(c=>{let u=r({...c});Object.assign(s,u)}),s},i=o?a:dt(a);return s=>{let c=i();return t&&(s=Qr(s)),Object.assign(s,c),s}}}function Cn(e,t){return yp(t)(e)}function yp(e){let t=mp({filter:e,copy:!1,dynamic:!0});return o=>t(ce(o))({})}function Tn(e,t=!1){return(t?gp:fp)(e)}var fp=Le({copy:!0,filter:{valueFilter:1}}),gp=Le({copy:!0,filter:{valueFilter:2}}),Zn=Le({copy:!0,filter:{valueFilter:4}}),Xf=Le({copy:!0,filter:{valueFilter:6}}),Qf=Oo({valueFilter:1}),eg=Oo({valueFilter:6}),tg=Oo({valueFilter:2});function Oo(e){let t=An({filter:e,forEach:([o],r,n,a)=>{a.keys.push(o)}});return o=>{let r={keys:[]};return t(o,r),r.keys}}function Le({copy:e=!1,filter:t={valueFilter:1}}={}){let o=ko(t);o.invertFilter=!o.invertFilter;let r=An({filter:o,forEach:([n],a,i)=>{delete i[n]}});return(n,a)=>((typeof a=="boolean"?a:e)&&(n={...n}),r(n),n)}var Rp=Le({copy:!1});function An({forEach:e,filter:t}){let o=Io(t);return((r,n)=>{o(r).forEach((i,s)=>e(i,s,r,n))})}function xn(e){let t=Object.assign(Object.create(null),e??{});return{load:async()=>Object.assign(Object.create(null),t),get:async o=>Object.hasOwn(t,o)?t[o]:void 0,set:async(o,r)=>{let n=Object.assign(Object.create(null),t);n[o]=r,t=n},remove:async o=>{let r=Object.assign(Object.create(null),t);delete r[o],t=r},clear:async()=>{t=Object.create(null)}}}function Sn(e){let t,o,r=0;function n(){let a;if(t==null){if(o==null){let i=r;o=e.load().then(s=>(r===i&&(t={entries:s},o=void 0),s),s=>{throw r===i&&(o=void 0),s})}a=o}else a=Promise.resolve(t.entries);return a}return{load:async()=>({...await n()}),get:async a=>(await n())[a],set:async(a,i)=>{let s=await n();r+=1,o=void 0,await e.set(a,i),t={entries:{...s,[a]:i}}},remove:async a=>{let i=await n();r+=1,o=void 0,await e.remove(a);let s={...i};delete s[a],t={entries:s}},clear:async()=>{r+=1,o=void 0,await e.clear(),t={entries:{}}}}}function Fn(e){return{load:async()=>{let t;for(let o of e){let r=await o.load();if(r!=null){t=r;break}}return t},update:async t=>{for(let o=e.length-1;o>=0;o-=1)await e[o].update(t)},clear:async()=>{for(let t=e.length-1;t>=0;t-=1)await e[t].clear()}}}function Et(e,t,o){let[r,n]=Do(e,t,!1);return r+o+n}function Do(e,t,o=!1){let r=e.substring(0,t),n=e.substring(t+(o?0:1));return[r,n]}var Cp=["\\","^","$",".","|","?","*","+","(",")","[","]","{","}"],cg=new Set(Cp);function bn(e){let{escapeTargets:t,escapeCharacter:o}=e,r=t instanceof Set?t:new Set(t);return n=>{let a=Pt(r,n),i;switch(a.length){case 0:i=n;break;case 1:{let s=n[a[0]];i=Et(n,a[0],o(s));break}default:{let s=[],c=a.length,u=0,d=0;for(let h=0;h<c;h+=1){d=a[h];let g=n[d],C=n.substring(u,d)+o(g);s.push(C),u=d+1}s.push(n.substring(u)),i=s.join("");break}}return i}}function Tp(e){return(t,o)=>{let r=o??Number.MAX_SAFE_INTEGER,n=[];for(let[a,i]of Array.from(t).entries())if(e.has(i)&&(n.push(a),n.length>=r))break;return n}}function Pt(e,t,o){return Tp(e)(t,o)}function Zp(e,t){return Pt(e,t,1)[0]}function Ap(e){return t=>{let r=Zp(typeof e=="string"?new Set([e]):e,t),n;return r==null?n=[t,void 0]:n=Do(t,r,!1),n}}function In(e,t){return Ap(t)(e)}var Ge="/",xp=".";function Sp(e){let t=e.split(xp,3).length-1,o;switch(t){case 0:e.length===0?o="invalid":e.at(-1)===Ge?o="folder":o="file";break;case 1:o="typedfile";break;default:o="invalid";break}return o}function kn(e){return Sp(e)!=="invalid"}var Fp=/^\/+/,bp=/\/+$/;var Ip=/\/{2,}/g;function On(e){return e.startsWith(Ge)?e.replace(Fp,Ge):`${Ge}${e}`}function Dn(e){return e.replaceAll(Ip,Ge)}function En(e){return e.replace(bp,"")}function kp(e){let t=e.indexOf(".");return t>0&&t<e.length-1}var Pn=/:(\d+)/;function Op(e){return Pn.test(e)}function Dp(e){let t=Pn.exec(e);return t?Number(t[1]):void 0}function Ep(e){let t=Nn(e),o=Pp(t),{domain:r,path:n}=o,a=kp(r),i=Op(e),s=i?Dp(e)??void 0:void 0,[c,u]=In(o.path,"?"),d=a&&(c===""||kn(c+"/")),h=wp(e);return{input:e,isWebsiteUrl:d,hasWebsiteDomain:a,hasHttpPrefix:h,hasPortNumber:i,portNumber:s,splitPair:o,domain:r,websitePath:n,path:c,query:u}}function Mn(e){let t=Ep(e);return t.hasHttpPrefix&&t.isWebsiteUrl}function wn(e,t=!1){let o=Pt(new Set("?"),e),r,n=e;return t&&o.length?r=o:o.length>1&&(r=o.reverse(),r.pop()),r?.length&&r.forEach(a=>n=Et(n,a,"&")),n}function Pp(e){let t=Nn(e);return Mp(t)}function Mp(e){let t=Fo(e,"/",2),o=t[0],r=t[1];return{domain:o,path:On(r??"/")}}var _n=/^https:\/\/|http:\/\//;function Nn(e){return e.replace(_n,"")}function wp(e){return _n.test(e)}function Z(){}async function Un(e){let t,o=e.initValue;if(o==null||await e.checkContinue(o,-1)){let n=0,a=o,i;do a=await e.next(n,a),n+=1,i=await e.checkContinue(a,n);while(i);t=a}else t=o;return t}function vn(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}async function mt(e,t){return new Promise(o=>setTimeout(()=>o(t),e))}function _p(e){let n=ht,a={startLimitAt:1,cooldownRate:1,exponentRate:2,maxWaitTime:n},i=0,s=Number.MAX_SAFE_INTEGER,c=new Date,u=!0;m(e??a);function d(){return{...a}}function h(){return u}function g(S){u=S}function m(S,I=!1){let z=Math.max(0,S.startLimitAt??1),F=S.cooldownRate??1,P=S.maxWaitTime??n,M=S.exponentRate??2;a={startLimitAt:z,cooldownRate:F,maxWaitTime:P,exponentRate:M},s=cn(M,P/K+1),I&&C()}function C(){i=0,c=new Date}function y(S){let I;if(u){let{cooldownRate:z}=a,P=(Date.now()-c.getTime())*z/K,M=Math.max(i-P,0),H=Math.max(0,M-a.startLimitAt);S&&(i=M+S,c=new Date),I=H>=s?a.maxWaitTime:(Math.pow(a.exponentRate,Math.max(H,0))-1)*K}else I=0;return I}function R(S){return y(S??0)}function f(){let S=y(1);return mt(S)}return{waitForRateLimit:f,getNextWaitTime:R,getConfig:d,setConfig:m,getEnabled:h,setEnabled:g,reset:C}}function Ln(e){let o=_p({exponentRate:1.5,maxWaitTime:K*8,...e}),r=Re,n=new Date,a=0,i=0,s=!0;f(e,!0);function c(){fn(n)&&h()}function u(){return s}function d(F){s=F}function h(){i=a,n=new Date(Date.now()+r)}function g(){return n}function m(){return Math.max(0,n.getTime()-Date.now())}function C(F){n=F}function y(){return c(),i}function R(F){i=F}function f(F,P=!1){a=F.limit??a,r=F.resetPeriod??r;let M={cooldownRate:F.cooldownRate??Math.max(.1,r/K),exponentRate:F.exponentRate??1.5,maxWaitTime:F.maxWaitTime??K*8};o.setConfig(M,P),P&&h(),n=F.resetAt??n}function S(F){let P=0;if(s){let H=function(){return i-=F,o.getNextWaitTime(F)};var M=H;i>0?P=H():(c(),i>0?P=H():P=m())}return P}function I(F){return S(F??0)}function z(){let F=S(1);return mt(F)}return{getRemainingLimit:y,setRemainingLimit:R,getTimeUntilNextReset:m,getResetAt:g,setNextResetAt:C,setConfig:f,reset:h,getNextWaitTime:I,waitForRateLimit:z,getEnabled:u,setEnabled:d}}var Np=-1,Gn=0;function Up(e){return e?.page??Np}function Kn(e){return Up(e)+1}import{BaseError as Vn}from"make-error";var ne=class extends Vn{constructor(o){super(`Fetch request failed to build due to an unexpected error: ${typeof o=="object"?o.message:o}`);this.error=o}error};function Jn(e){return(t,o)=>vp(e(t,o))}var Ze=class extends Vn{constructor(o){super(`Fetch response was a non-ok status code (${o.status}): ${o.statusText}`);this.response=o}response};function vp(e){return e.then(t=>{if(!t.ok)throw new Ze(t);return t})}import{BaseError as Pg}from"make-error";function zn(e){return(t,o)=>{let r,n=o?.timeout??t.timeout;if(!o?.signal&&n){let i=new AbortController;r=i,o={...o,signal:i.signal}}let a=e(t,o??void 0);if(n){let i=setTimeout(()=>{r?.abort()},n);a=a.finally(()=>{clearTimeout(i)})}return a}}function qn(e){let{makeFetch:t,makeRequest:o,baseRequest:r}=e;return{fetchRequestFactory:n=>Wn({makeRequest:o,baseRequest:r,...n}),makeFetch:(n={})=>Gp({makeRequest:o,makeFetch:t,baseRequest:r,...n}),makeRequest:e.makeRequest}}var Lp=(e,t)=>t(e);function Gp(e){let{makeFetch:t=fetch,fetchHandler:o=Lp,useTimeout:r,requireOkResponse:n,mapResponse:a}=e,i=t;r&&(i=zn(i)),n&&(i=Jn(i));let s=Wn(e);return async(c,u)=>{let d=await s(c,u),h=o(d,i);return a&&(h=a(h)),h}}var Kp=(e,t)=>new Request(e,t??void 0);function Wn(e){let{makeRequest:t=Kp,baseUrl:o,baseRequest:r,timeout:n,requestInitFactory:a,useBaseUrlForConfiguredFetchRequests:i=!1,forceBaseUrlForWebsiteUrlWithPrefix:s=i}=e,c=o?new URL(En(o)):void 0,u=c?m=>{let C,y=m.toString();if(!s&&Mn(y))C=new URL(y);else{let R=c.origin+Dn("/"+c.pathname+"/"+m);C=new URL(R,c)}return C}:void 0;async function d(m){let C=vn(m)?await m:m;return jn(C)?C:t(C)}let h=u?async m=>{let C,y,R;if(typeof m=="string"?C=m:jn(m)?i?(C=m.url,y=m):R=m:R=await t(m),!R){let f=u(C);R=await t(f.href,y)}return R}:d,g;if(r!=null||n!=null){let m=sn(r);async function C(){let R=await m();return n?{...R,timeout:n}:R}async function y(R,f){let S=await C(),I=Vp(S,await f),z=I.timeout===void 0?R.timeout:I.timeout;return{...I,timeout:z}}a?g=(R,f)=>a(R,y(R,f)):g=(R,f)=>y(R,f)}else a?g=a:g=(m,C)=>C;return async(m,C)=>{try{let y=await h(m);C=await g(y,C??void 0);let R=await t(y,C);return R.timeout=n,R}catch(y){throw y instanceof ne?y:new ne(y)}}}function Vp(e,t){let o;if(t){let r=Jp([e.headers,t.headers]);o={...e,...t,headers:r}}else o=e;return o}function Jp(e){let t=nn();return ce(e).forEach(o=>{let r=zp(o),n=new Set;r.forEach(([a,i])=>{n.has(a)||(t.delete(a),n.add(a)),i&&t.add(a,i)})}),t.tuples()}function zp(e){let t=[];return Array.isArray(e)?t=e:typeof e.forEach=="function"?e.forEach((o,r)=>{t.push([r,o])}):typeof e=="object"&&(t=Object.entries(e)),t}function jn(e){return!!e.url}import{safeParse as jp}from"fast-content-type-parse";function $n(e){let t={};return e.mimeType&&(t.type=e.mimeType),e.lastModified!=null&&(t.lastModified=e.lastModified),new File(A(e.content),e.fileName,t)}function Mt(e){let t=e.headers.get("content-type"),o=jp(t??""),r=o.type===""?void 0:o;return{response:e,rawContentType:t,contentType:r,mimeType:r?.type}}function Hn(e){let{updateWithResponse:t,maxRetries:o}=e,r=o??1,n=e.rateLimiter,a=async(i,s)=>{async function c(u){await n.waitForRateLimit();let d,h;try{d=await s(i.clone())}catch(m){h=m,d=h.response}if(await t(d,h)&&u<r)d=await c(u+1);else if(h!=null)throw h;return d}return c(0)};return a._rateLimiter=n,a}var Eo=class extends ne{constructor(o){super("There was no next page for this.");this.page=o}page},Po=class extends ne{constructor(o,r){super(`The limit of ${r} for the number of pages to read was reached.`);this.page=o;this.limit=r}page;limit},qp=100;function Ke(e){let{fetch:t,readFetchPageResultInfo:o,buildInputForNextPage:r,defaultMaxPage:n,defaultMaxItemsPerPage:a}=e;return(i,s)=>{let{maxPage:c=n,maxItemsPerPage:u}=s??{},d=u??a,h=c===null?Number.MAX_SAFE_INTEGER:c??qp,g={maxPage:h,maxItemsPerPage:d};function m(y,R=void 0){return async()=>{let f=await t(y),{cursor:S,nextPageCursor:I,hasNext:z}=await o(f,y,g),F=S??R?.cursor,P=z!==!1,M=R?R.page+1:Gn,H=M>=h,ct={input:y,result:f,page:M,previous:R,hasNext:P,isAtMaxPage:H,cursor:F,nextPageCursor:I,fetchNext:dt(async()=>{if(H)throw new Po(ct,h);let Ur=P?await r(ct,y,g):void 0;if(!Ur)throw new Eo(ct);return m({...y,...Ur},ct)()})};return ct}}return{input:i,fetchNext:dt(()=>m(i)())}}}function Wp(e){let t=[];function o(r,n){n!=null&&(Array.isArray(n)?n.forEach((a,i)=>o(`${r}[${i}]`,a)):typeof n=="object"?Object.entries(n).forEach(([a,i])=>o(`${r}[${a}]`,i)):t.push([r,String(n)]))}return Object.entries(e??{}).forEach(([r,n])=>o(r,n)),t}function T(e,t){let{omitKeys:o,filterEmptyValues:r,useBracketNotation:n}=t??{},a=Array.isArray(e)?Cn(e):e,i=r??!0?Zn(a??{}):a,s=n?Wp(i):i,c=new URLSearchParams(s);return o!=null&&W(o,u=>c.delete(u),!1),c}function Mo(e){let t;if(typeof e=="string")t=e;else if($p(e))t=e.href;else{let o=Mo(e.url);if(e.queryParams){let r=Yp(e.queryParams);lt(r)?t=o:t=wn(o+`?${r.toString()}`)}else t=o}return t}function $p(e){return typeof e=="object"&&e instanceof URL}function Hp(e){return typeof e=="object"&&e instanceof URLSearchParams}function Bp(e){let t=[];return To(e,o=>{let[r,n]=o;if(r!=null&&n!=null){let a=String(r);W(n,i=>{i!=null&&t.push([a,String(i)])})}}),t}function Yp(e){let t;return Hp(e)?t=e:typeof e=="string"?t=new URLSearchParams(e):Ue(e)?t=new URLSearchParams(Bp(e)):t=Xp(e),t}function Xp(e){let t=[];return hn(e,{forEach:o=>{let[r,n]=o,a=String(r);n!=null&&W(n,i=>{t.push([a,String(i)])})}}),new URLSearchParams(t)}var wo=class extends Error{constructor(o){super("Failed to parse the JSON body.");this.response=o}response};function Qp(e){return e==null?void 0:typeof e=="string"?e:JSON.stringify(e)}var el=e=>{throw new wo(e)},B=e=>null;function Y(e,t){let o;typeof t=="function"?o={handleFetchJsonParseErrorFunction:t}:o=t??{},o={...o,handleFetchJsonParseErrorFunction:o.handleFetchJsonParseErrorFunction??el};let{handleFetchJsonParseErrorFunction:r,interceptJsonResponse:n}=o,a=Bn(o);return(i,s,c)=>{let u=Mo(i),d=a(s,c),h=typeof s=="object"?s.interceptResponse:void 0;return e(u,d).then(m=>{let C=m.json().catch(r),y=n?C.then(R=>n(R,m)):C;return h?y.then(R=>h(R,m)):y})}}function Bn(e={}){let{defaultMethod:t="GET",mapFetchJsonInput:o=on()}=e;return(r=t,n)=>{let a;return typeof r=="string"?a={method:r,body:n}:a=r??{method:t,body:n},a=o(a),{...a,method:a.method,body:Qp(a.body)}}}var Xg=Bn();var X=qn({makeFetch:fetch,makeRequest:(e,t)=>new Request(e,t)});function wt(e){let t,o=e?.notInitializedMessage??"Context slot has not been initialized.";return{set:r=>{t=r},get:()=>t,require:()=>{if(t==null)throw new Error(o);return t}}}function _t(e,t=Lr){return async o=>{try{await e(o)}catch(r){Wr(r),process.exit(t)}}}var tl=["raw","page_by_line","data_by_line"],ol=["replace","concat"],rl=["meta","pages","merged_page"];function Nt(e){return e.option("multiple-pages",{type:"number",default:1,describe:"Pages to fetch in this invocation (>=1). Continues from the per-API page/offset flag."}).option("multiple-pages-output",{type:"string",choices:rl,default:"meta",describe:"Stdout shape when multiple-pages > 1: meta (summary, low memory), pages (array of page responses, WARNING: holds all pages in memory), merged_page (concat all records into one array, WARNING: holds all records in memory)."}).option("dump-output",{type:"string",choices:tl,default:"raw",describe:"Dump file format when --dump-dir is set. raw: one full JSON page response (concatenated JSON when --dump-merge=concat, not standard JSON). page_by_line: NDJSON of page responses. data_by_line: NDJSON of records."}).option("dump-merge",{type:"string",choices:ol,default:"replace",describe:"Across pages with multiple-pages > 1: replace (truncate file each iteration; only last page survives) or concat (append)."})}import{dirname as ul}from"node:path";import{chmod as nl,mkdirSync as al,readFile as il,writeFile as sl}from"node:fs";import{rm as cl}from"node:fs/promises";function Ae(e){return new Promise((t,o)=>{il(e,{encoding:"utf-8"},(r,n)=>{if(r){r.code==="ENOENT"?t(void 0):o(r);return}try{t(JSON.parse(n))}catch{t(void 0)}})})}function Ut(e){return al(e.dirPath,{recursive:!0}),new Promise((t,o)=>{sl(e.filePath,JSON.stringify(e.data,null,2),{mode:e.mode},r=>{r?o(r):e.mode==null?t():nl(e.filePath,e.mode,n=>{n?o(n):t()})})})}function yt(e){return cl(e,{force:!0})}var pl=384;function Yn(e){let{filePath:t,mode:o,reviver:r,replacer:n}=e,a=o??pl;async function i(){let d=await Ae(t),h;if(d==null)h={};else if(r==null)h=d;else{h={};for(let g of Object.keys(d)){let m=r(d[g]);m!=null&&(h[g]=m)}}return h}async function s(d){let h=n==null?d:Object.fromEntries(Object.entries(d).map(([g,m])=>[g,n(m)]));await Ut({filePath:t,dirPath:ul(t),data:h,mode:a})}let c=Promise.resolve();function u(d){let h=c.then(d,d);return c=h.catch(()=>{}),h}return{load:i,get:async d=>(await i())[d],set:(d,h)=>u(async()=>{let g=await i();await s({...g,[d]:h})}),remove:d=>u(async()=>{let g={...await i()};delete g[d],await s(g)}),clear:()=>u(async()=>{await yt(t)})}}function ft(e){return Ae(e.configFilePath)}var ll=384;function dl(e){return Ut({filePath:e.configFilePath,dirPath:e.configDir,data:e.config,mode:ll})}async function gt(e){let t=await ft({configFilePath:e.configFilePath})??{},o={activeEnv:e.updates.activeEnv??t.activeEnv,envs:e.updates.envs?{...t.envs,...e.updates.envs}:t.envs,output:e.updates.output===void 0?t.output:_o(t.output,e.updates.output)};return await dl({configFilePath:e.configFilePath,configDir:e.configDir,config:o}),o}function _o(e,t){return{dumpDir:"dumpDir"in t?t.dumpDir:e?.dumpDir,pick:"pick"in t?t.pick:e?.pick,commands:hl(e?.commands,t)}}function hl(e,t){let o;if("commands"in t)if(t.commands){let r={...e};for(let n of Object.keys(t.commands))r[n]={...e?.[n],...t.commands[n]};o=r}else o=void 0;else o=e;return o}function Xn(e){let t=e.commandPath.join("."),o=t?e.outputConfig?.commands?.[t]:void 0;return{dumpDir:e.cliFlags.dumpDir??o?.dumpDir??e.outputConfig?.dumpDir,pick:e.cliFlags.pick??o?.pick??e.outputConfig?.pick}}function xe(e){let t;return e==null?t=e:e.length<=4?t="***":t=e.substring(0,4)+"***",t}import{homedir as ml}from"node:os";import{join as Rt}from"node:path";function vt(e){let t=e.configDirOverride??Rt(ml(),`.${e.cliName}`);return{configDir:t,configFilePath:Rt(t,"config.json"),tokenCachePath:Rt(t,".tokens.json"),firestoreSessionCachePath:Rt(t,".firestore-sessions.json"),dataCacheDir:Rt(t,"cache")}}var yl=24;var Qn={read:!1,write:!0},fl={read:!1,write:!1},gl=wt();function ea(e){gl.set(e)}function Rl(e){let t;if(e.length===0)t=void 0;else{let o=Number(e);if(!Number.isFinite(o)||o<0)throw new Error(`--cache takes an optional number of hours; use --cache=<hours> (got "${e}").`);t=o}return t}function ta(e){let t;if(e.refresh===!0)t=Qn;else if(e.cache===!1)t=fl;else if(typeof e.cache=="string"){let o=Rl(e.cache)??yl;t={read:!0,write:!0,maxAgeMs:o===0?void 0:o*ht}}else t=Qn;return t}function oa(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await ft({configFilePath:t.configFilePath}))?.output),r=e.saveCommandOutputConfig??(async(n,a)=>{await gt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:{commands:{[n]:a}}}})});return async n=>{Vr(!!n.verbose),Jr(typeof n.timeout=="number"?n.timeout*1e3:void 0),ea(ta(n));let a=n._?n._.map(String):[],i=a[0],s=n.setDumpDir,c=n.setPick;if((s!==void 0||c!==void 0)&&i&&!e.skipCommands.has(i)){let m=a.join("."),C={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await r(m,C)}let d=i&&!e.skipCommands.has(i),h=d?await o():void 0,g=d?Xn({outputConfig:h,commandPath:a,cliFlags:{dumpDir:n.dumpDir??s,pick:n.pick??c}}):{dumpDir:void 0,pick:void 0};go({dumpDir:g.dumpDir,pick:n.pickAll?void 0:g.pick,commandPath:a,pretty:!!n.pretty})}}function Cl(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await ft({configFilePath:t.configFilePath}))?.output),r=e.mergeOutputConfig??(a=>gt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:a}})),n=e.clearOutputConfig??(()=>gt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:{dumpDir:void 0,pick:void 0,commands:void 0}}}));return{loadOutputConfig:o,mergeOutputConfig:r,clearOutputConfig:n}}function ra(e){let t=Cl(e),o={command:"set",describe:"Configure output settings (global or per-command)",builder:a=>a.option("command",{alias:"c",type:"string",describe:"Command path to configure (e.g. recruit.list)"}).check(i=>{if(i.setDumpDir==null&&i.setPick==null)throw new Error("At least one of --set-dump-dir or --set-pick is required");return!0}),handler:_t(async a=>{let i=a.command,s=a.setDumpDir,c=a.setPick,u;if(i){let h={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};u={commands:{[i]:h}}}else u={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await t.mergeOutputConfig(u);let d=await t.loadOutputConfig();p({saved:!0,output:d??{}})})},r={command:"show",describe:"Show current output configuration",builder:a=>a,handler:_t(async()=>{let a=await t.loadOutputConfig();p({output:a??{}})})},n={command:"clear",describe:"Clear output configuration (global or per-command)",builder:a=>a.option("command",{alias:"c",type:"string",describe:"Command path to clear (omit to clear all output config)"}),handler:_t(async a=>{let i=a.command;if(i){let s=await t.loadOutputConfig();if(!s?.commands?.[i])throw new ut({message:`No per-command output config for "${i}".`,code:"OUTPUT_COMMAND_NOT_FOUND"});let c={...s.commands};delete c[i],await t.mergeOutputConfig({...s,commands:c}),p({cleared:!0,command:i})}else await t.clearOutputConfig(),p({cleared:!0})})};return{command:"output",describe:"Configure output settings (dump, field filtering)",builder:a=>a.command(o).command(r).command(n).demandCommand(1,"Specify an output subcommand."),handler:Z}}import{writeFileSync as Tl,appendFileSync as Zl}from"node:fs";function na(e){let{dumpOutput:t,dumpMerge:o}=e,{pick:r}=Ot(),n=t==="raw"?"json":"ndjson",a=pt(n),i=r?pt(n,"pick"):void 0,s;if(a){let c=0,u=y=>{let R;if(r){let f=Ee(y.data,r);R={...y,data:f}}else R=y;return R},d=y=>{let R=y.append?Zl:Tl;R(a,y.mainContent),i&&y.pickContent!==void 0&&R(i,y.pickContent)},h=(y,R)=>{let f=JSON.stringify(y,null,2),S=i?JSON.stringify(u(y),null,2):void 0;d({mainContent:f,pickContent:S,append:R})},g=(y,R)=>{let f=JSON.stringify(y)+`
|
|
4
|
+
var Mu=Object.defineProperty;var wu=Object.getOwnPropertyDescriptor;var q=(e,t,o,r)=>{for(var n=r>1?void 0:r?wu(t,o):t,a=e.length-1,i;a>=0;a--)(i=e[a])&&(n=(r?i(t,o,n):i(n))||n);return r&&n&&Mu(t,o,n),n},N=(e,t)=>(o,r)=>t(o,r,e);import{existsSync as _u,mkdirSync as Nu,writeFileSync as Uu}from"node:fs";import{join as vu}from"node:path";var Lr=1;var fo=[/Bearer\s+\S+/gi,/access_token[=:]\s*\S+/gi,/refresh_token[=:]\s*\S+/gi,/client_secret[=:]\s*\S+/gi,/id_token[=:]\s*\S+/gi,/cli_handoff[=:]\s*\S+/gi,/"code"\s*:\s*"[^"]+"/gi],Gr=6e4,ut={},Kr=[...fo],yo,Lu=!1,Gu=Gr;function go(e){ut=e}function Ot(){return ut}function Vr(e){Lu=e}function Jr(e){Gu=e===void 0?Gr:e}function Ro(e){Kr=e}function zr(e){yo=e}function ge(e){let t=e;for(let o of Kr)t=t.replace(o,"[REDACTED]");return t}function jr(){return new Date().toISOString().replaceAll(/[:.]/g,"-")}function pt(e,t){let{dumpDir:o,commandPath:r}=ut,n;if(o){_u(o)||Nu(o,{recursive:!0});let a=r?.length?r.join("_"):"response",i=jr(),s=t?`${a}_${i}_${t}`:`${a}_${i}`;n=vu(o,`${s}.${e}`)}else n=void 0;return n}function Ku(e,t){let o=pt("json");if(!o)return;let r={ok:!0,data:e,...t?{meta:t}:{}};Uu(o,JSON.stringify(r,null,2))}function Ze(e,t){let o=t.split(",").map(n=>n.trim()),r;return Array.isArray(e)?r=e.map(n=>vr(n,o)):e!=null&&typeof e=="object"?r=vr(e,o):r=e,r}function vr(e,t){let o;if(e==null||typeof e!="object")o=e;else{let r={};for(let n of t)n in e&&(r[n]=e[n]);o=r}return o}function qr(e){return ut.pretty?JSON.stringify(e,null,2):JSON.stringify(e)}function p(e,t,o){Ku(e,t);let r=ut.pick,n;r?o?.applyPick?n=o.applyPick(e,i=>Ze(i,r)):n=Ze(e,r):n=e;let a={ok:!0,data:n,...t?{meta:t}:{}};console.log(qr(a))}function Wr(e){console.log(qr(Co(e)))}var ct=class extends Error{code;suggestion;constructor(t){super(t.message),this.name="CliError",this.code=t.code,this.suggestion=t.suggestion}};function Co(e){let t=yo?yo(e):void 0,o;return t?o=t:e instanceof ct?o={ok:!1,error:ge(e.message),code:e.code,...e.suggestion?{suggestion:e.suggestion}:{}}:e instanceof Error?o={ok:!1,error:ge(e.message),code:"ERROR"}:o={ok:!1,error:ge(String(e)),code:"UNKNOWN_ERROR"},o}function Ne(e,t=!1){let o;return typeof e=="string"?o=t:e!=null&&typeof e=="object"&&Symbol.iterator in e?o=!0:o=!1,o}function lt(e){let t=!0;for(let o of e){t=!1;break}return t}function To(e,t){for(let o of e)t(o)}function W(e,t,o=!1){e!=null&&(Ne(e,o)?To(e,t):t(e))}function $r(e){if(!Array.isArray(e))throw new TypeError("Input is not an array/tuple...");let t;if(e.length>0){let o=e[0],r=!1;if(Array.isArray(o)){let n=o.length;r=e.findIndex(i=>Array.isArray(i)?i.length!==n:!0)!==-1}else r=!0;t=r?[e]:e}else t=e;return t}function Vu(e){return e==null?[]:Ju(e)}var A=Vu;function Ju(e){return Array.isArray(e)?e:[e]}import{symmetricDifference as af}from"extra-set";function Hr(e,t){W(t,o=>e.add(o))}function Br(e,t){W(t,o=>e.delete(o))}function Yr(e,t=!0){return t?((...o)=>!e.call(void 0,...o)):e}function Zo(e){return Object.keys(e).length===0}function Xr(e){let t={};return e.forEach((o,r)=>{t[r]=o}),t}function Qr(e){return{...e}}function en(e){return e!=null}function Dt(e){return Ne(e,!1)?!lt(e):tn(e)}function Ao(e){let t;return Ne(e,!0)?t=!lt(e):tn(e)?t=typeof e=="object"?!Zo(e):!0:t=!1,t}function tn(e){return e!=null&&e!==""}function zu(e){return t=>{let o;return t==null?o=[]:o=t.filter((r,n,a)=>e(r,n,a)),o}}var ce=zu(en);var ju=(e=>e);function on(){return ju}function xo(e,t){let o=new Set(e),r=qu(t,n=>n);return r.length&&Br(o,r),Array.from(o)}function qu(e,t){return ce(e==null?[]:Array.isArray(e)?e:Wu(e,t))}function Wu(e,t){let o=new Set(e.keys);return e.values&&Hr(o,e.values.map(t)),Array.from(o)}function Ue(e,t){let o=$u(e,r=>t(r)?"in":"out");return{included:o.in??[],excluded:o.out??[]}}function $u(e,t){return Xr(Hu(e,t))}function Hu(e,t){let o=new Map;return e?.forEach(r=>{let n=t(r),a=o.get(n);a==null?o.set(n,[r]):a.push(r)}),o}function So(e){return Array.from(e.entries())}function rn(e){return Bu(So(e))}function Bu(e){let t=[];return e.forEach(([o,r])=>{W(r,n=>{t.push([o,n])})}),t}function nn(){let e=new Map,t=(n,a)=>{let i=e.get(n);i==null&&(i=[],e.set(n,i)),W(a,s=>i.push(s))},o=(n,a)=>t(n,$r(a));return{map:()=>e,entries:()=>So(e),tuples:()=>rn(e),delete:n=>e.delete(n),add:t,addTuples:o,addToKeys:(n,a)=>W(n,i=>t(i,a)),addTuplesToKeys:(n,a)=>W(n,i=>o(i,a)),has:n=>e.has(n),get:n=>e.get(n)??[]}}function Yu(e){return typeof e=="function"?e.prototype?Object.getOwnPropertyDescriptor(e,"prototype")?.writable?"function":"class":e.constructor.name==="AsyncFunction"?"function":"arrow":null}function an(e){let t=Yu(e);return t!=null&&t!=="class"}function sn(e){return an(e)?e:()=>e}function cn(e,t){return Math.log(t)/Math.log(e)}var un=",",Xu=" ";function Qu(e,t=un,o=!1){if(e==null)return e;let r=A(e);return o&&(r=r.map(n=>n?.trim())),r.filter(Boolean).join(t)}function Fo(e,t,o){let r;switch(o){case 1:r=[e];break;case 2:{let n=e.indexOf(t);r=n<0?[e]:[e.slice(0,n),e.slice(n+t.length)];break}default:{let n=e.split(t),a=[];if(n.length>1){let i=n.length>o,s=i?o-1:n.length;for(let c=0;c<s;c+=1)a.push(n[c]);i&&a.push(n.slice(s).join(t))}else a.push(n[0]);r=a;break}}return r}function ep(e){let{joiner:t,trimByDefault:o=!1}=e,r=function(n,a=o){return Qu(n,t,a)};return r.joiner=t,r.trimByDefault=o,r}function pn(e){let{joiner:t}=e,o=ep(e),r=(n,a=i=>i)=>n.split(t).map(s=>a(s.trim()));return{joiner:t,trimByDefault:o.trimByDefault,joinStrings:o,splitStrings:r,splitStringsToSet(n){return new Set(n==null?[]:r(n))},splitJoinRemainder(n,a){return Fo(n,t,a)}}}var bo=pn({joiner:un}),tp=pn({joiner:Xu,trimByDefault:!0});var O=bo.joinStrings,Ef=bo.splitStrings,Pf=bo.splitStringsToSet,Mf=tp.joinStrings;var ln=Yr;function hn(e,{forEach:t,filter:o}){op(e,o).forEach((n,a)=>t(n,a))}function op(e,t){return Io(t)(e)}function Io(e){let t;if(e==null)t=dn;else{let o=rp(e);t=r=>dn(r).filter((n,a)=>o(n,a))}return t}function dn(e){return Object.entries(e)}function ko(e){return typeof e=="object"?e:{valueFilter:e}}function rp(e){let t=ko(e),{valueFilter:o=1,invertFilter:r=!1,keysFilter:n}=t,a;switch(o){case 1:a=([,i])=>i!==void 0;break;case 2:a=([,i])=>i!=null;break;case 3:a=([,i])=>!!i;break;case 4:a=([,i])=>Dt(i);break;case 5:a=([,i])=>Ao(i);break;case 6:a=([,i])=>!!i&&Dt(i);break;case 7:a=([,i])=>!!i&&Ao(i);break;default:a=()=>!0;break}if(n){let i=a,s=new Set(n.map(c=>c.toString()));a=(c,u)=>i(c,u)&&s.has(c[0])}return ln(a,r)}function dt(e){let t,o=n=>{t={value:e(n)}},r=(n=>(t||o(n),t.value));return r.set=n=>t={value:n},r.reset=()=>t=void 0,r.init=o,r.used=()=>!!t,r}function mn(e){let t;return e==null||dp(e)?t=e:t=np(e),t}function np(e){return e==null?e:new Date(e)}var ap=365,yn=24,ip=60,sp=1440,cp=60,Kf=ap*sp,up=cp*ip,K=1e3,Re=K*60,ht=Re*60,pp=ht*yn,Vf=up*yn,lp=7,Jf=pp*lp;function dp(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function fn(e){return e.getTime()<Date.now()}function gn(e,t){return e==null?e:new Date(e.getTime()+(t??0))}function hp(e){let{expiresAt:t,expires:o,now:r,expiresFromDate:n,defaultExpiresFromDateToNow:a,expiresIn:i}=e,s=n==null?null:mn(n);function c(g){return g??r??new Date}function u(g,m=!1){let C=c(g),y=h(C),R;return y==null?R=m:R=y<=C,R}function d(g){let m=c(g);return h(m)}function h(g){let m=null;return o!=null?m=o.expiresAt??null:t!=null?m=t:i!=null&&(m=gn(s??(a===!1?null:g),i)),m}return{input:e,hasExpired:u,getExpirationDate:d}}function Rn(e,t){let o=!0;return e!=null&&(o=hp(e).hasExpired(t,!0)),o}function mp({filter:e,copy:t,dynamic:o=!1}){let r=e==null?Rp:ve({filter:e,copy:!1});return n=>{let a=()=>{let s={};return n.forEach(c=>{let u=r({...c});Object.assign(s,u)}),s},i=o?a:dt(a);return s=>{let c=i();return t&&(s=Qr(s)),Object.assign(s,c),s}}}function Cn(e,t){return yp(t)(e)}function yp(e){let t=mp({filter:e,copy:!1,dynamic:!0});return o=>t(ce(o))({})}function Tn(e,t=!1){return(t?gp:fp)(e)}var fp=ve({copy:!0,filter:{valueFilter:1}}),gp=ve({copy:!0,filter:{valueFilter:2}}),Zn=ve({copy:!0,filter:{valueFilter:4}}),Xf=ve({copy:!0,filter:{valueFilter:6}}),Qf=Oo({valueFilter:1}),eg=Oo({valueFilter:6}),tg=Oo({valueFilter:2});function Oo(e){let t=An({filter:e,forEach:([o],r,n,a)=>{a.keys.push(o)}});return o=>{let r={keys:[]};return t(o,r),r.keys}}function ve({copy:e=!1,filter:t={valueFilter:1}}={}){let o=ko(t);o.invertFilter=!o.invertFilter;let r=An({filter:o,forEach:([n],a,i)=>{delete i[n]}});return(n,a)=>((typeof a=="boolean"?a:e)&&(n={...n}),r(n),n)}var Rp=ve({copy:!1});function An({forEach:e,filter:t}){let o=Io(t);return((r,n)=>{o(r).forEach((i,s)=>e(i,s,r,n))})}function xn(e){let t=Object.assign(Object.create(null),e??{});return{load:async()=>Object.assign(Object.create(null),t),get:async o=>Object.hasOwn(t,o)?t[o]:void 0,set:async(o,r)=>{let n=Object.assign(Object.create(null),t);n[o]=r,t=n},remove:async o=>{let r=Object.assign(Object.create(null),t);delete r[o],t=r},clear:async()=>{t=Object.create(null)}}}function Sn(e){let t,o,r=0;function n(){let a;if(t==null){if(o==null){let i=r;o=e.load().then(s=>(r===i&&(t={entries:s},o=void 0),s),s=>{throw r===i&&(o=void 0),s})}a=o}else a=Promise.resolve(t.entries);return a}return{load:async()=>({...await n()}),get:async a=>(await n())[a],set:async(a,i)=>{let s=await n();r+=1,o=void 0,await e.set(a,i),t={entries:{...s,[a]:i}}},remove:async a=>{let i=await n();r+=1,o=void 0,await e.remove(a);let s={...i};delete s[a],t={entries:s}},clear:async()=>{r+=1,o=void 0,await e.clear(),t={entries:{}}}}}function Fn(e){return{load:async()=>{let t;for(let o of e){let r=await o.load();if(r!=null){t=r;break}}return t},update:async t=>{for(let o=e.length-1;o>=0;o-=1)await e[o].update(t)},clear:async()=>{for(let t=e.length-1;t>=0;t-=1)await e[t].clear()}}}function Et(e,t,o){let[r,n]=Do(e,t,!1);return r+o+n}function Do(e,t,o=!1){let r=e.substring(0,t),n=e.substring(t+(o?0:1));return[r,n]}var Cp=["\\","^","$",".","|","?","*","+","(",")","[","]","{","}"],cg=new Set(Cp);function bn(e){let{escapeTargets:t,escapeCharacter:o}=e,r=t instanceof Set?t:new Set(t);return n=>{let a=Pt(r,n),i;switch(a.length){case 0:i=n;break;case 1:{let s=n[a[0]];i=Et(n,a[0],o(s));break}default:{let s=[],c=a.length,u=0,d=0;for(let h=0;h<c;h+=1){d=a[h];let g=n[d],C=n.substring(u,d)+o(g);s.push(C),u=d+1}s.push(n.substring(u)),i=s.join("");break}}return i}}function Tp(e){return(t,o)=>{let r=o??Number.MAX_SAFE_INTEGER,n=[];for(let[a,i]of Array.from(t).entries())if(e.has(i)&&(n.push(a),n.length>=r))break;return n}}function Pt(e,t,o){return Tp(e)(t,o)}function Zp(e,t){return Pt(e,t,1)[0]}function Ap(e){return t=>{let r=Zp(typeof e=="string"?new Set([e]):e,t),n;return r==null?n=[t,void 0]:n=Do(t,r,!1),n}}function In(e,t){return Ap(t)(e)}var Le="/",xp=".";function Sp(e){let t=e.split(xp,3).length-1,o;switch(t){case 0:e.length===0?o="invalid":e.at(-1)===Le?o="folder":o="file";break;case 1:o="typedfile";break;default:o="invalid";break}return o}function kn(e){return Sp(e)!=="invalid"}var Fp=/^\/+/,bp=/\/+$/;var Ip=/\/{2,}/g;function On(e){return e.startsWith(Le)?e.replace(Fp,Le):`${Le}${e}`}function Dn(e){return e.replaceAll(Ip,Le)}function En(e){return e.replace(bp,"")}function kp(e){let t=e.indexOf(".");return t>0&&t<e.length-1}var Pn=/:(\d+)/;function Op(e){return Pn.test(e)}function Dp(e){let t=Pn.exec(e);return t?Number(t[1]):void 0}function Ep(e){let t=Nn(e),o=Pp(t),{domain:r,path:n}=o,a=kp(r),i=Op(e),s=i?Dp(e)??void 0:void 0,[c,u]=In(o.path,"?"),d=a&&(c===""||kn(c+"/")),h=wp(e);return{input:e,isWebsiteUrl:d,hasWebsiteDomain:a,hasHttpPrefix:h,hasPortNumber:i,portNumber:s,splitPair:o,domain:r,websitePath:n,path:c,query:u}}function Mn(e){let t=Ep(e);return t.hasHttpPrefix&&t.isWebsiteUrl}function wn(e,t=!1){let o=Pt(new Set("?"),e),r,n=e;return t&&o.length?r=o:o.length>1&&(r=o.reverse(),r.pop()),r?.length&&r.forEach(a=>n=Et(n,a,"&")),n}function Pp(e){let t=Nn(e);return Mp(t)}function Mp(e){let t=Fo(e,"/",2),o=t[0],r=t[1];return{domain:o,path:On(r??"/")}}var _n=/^https:\/\/|http:\/\//;function Nn(e){return e.replace(_n,"")}function wp(e){return _n.test(e)}function Z(){}async function Un(e){let t,o=e.initValue;if(o==null||await e.checkContinue(o,-1)){let n=0,a=o,i;do a=await e.next(n,a),n+=1,i=await e.checkContinue(a,n);while(i);t=a}else t=o;return t}function vn(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}async function mt(e,t){return new Promise(o=>setTimeout(()=>o(t),e))}function _p(e){let n=ht,a={startLimitAt:1,cooldownRate:1,exponentRate:2,maxWaitTime:n},i=0,s=Number.MAX_SAFE_INTEGER,c=new Date,u=!0;m(e??a);function d(){return{...a}}function h(){return u}function g(S){u=S}function m(S,I=!1){let z=Math.max(0,S.startLimitAt??1),F=S.cooldownRate??1,P=S.maxWaitTime??n,M=S.exponentRate??2;a={startLimitAt:z,cooldownRate:F,maxWaitTime:P,exponentRate:M},s=cn(M,P/K+1),I&&C()}function C(){i=0,c=new Date}function y(S){let I;if(u){let{cooldownRate:z}=a,P=(Date.now()-c.getTime())*z/K,M=Math.max(i-P,0),H=Math.max(0,M-a.startLimitAt);S&&(i=M+S,c=new Date),I=H>=s?a.maxWaitTime:(Math.pow(a.exponentRate,Math.max(H,0))-1)*K}else I=0;return I}function R(S){return y(S??0)}function f(){let S=y(1);return mt(S)}return{waitForRateLimit:f,getNextWaitTime:R,getConfig:d,setConfig:m,getEnabled:h,setEnabled:g,reset:C}}function Ln(e){let o=_p({exponentRate:1.5,maxWaitTime:K*8,...e}),r=Re,n=new Date,a=0,i=0,s=!0;f(e,!0);function c(){fn(n)&&h()}function u(){return s}function d(F){s=F}function h(){i=a,n=new Date(Date.now()+r)}function g(){return n}function m(){return Math.max(0,n.getTime()-Date.now())}function C(F){n=F}function y(){return c(),i}function R(F){i=F}function f(F,P=!1){a=F.limit??a,r=F.resetPeriod??r;let M={cooldownRate:F.cooldownRate??Math.max(.1,r/K),exponentRate:F.exponentRate??1.5,maxWaitTime:F.maxWaitTime??K*8};o.setConfig(M,P),P&&h(),n=F.resetAt??n}function S(F){let P=0;if(s){let H=function(){return i-=F,o.getNextWaitTime(F)};var M=H;i>0?P=H():(c(),i>0?P=H():P=m())}return P}function I(F){return S(F??0)}function z(){let F=S(1);return mt(F)}return{getRemainingLimit:y,setRemainingLimit:R,getTimeUntilNextReset:m,getResetAt:g,setNextResetAt:C,setConfig:f,reset:h,getNextWaitTime:I,waitForRateLimit:z,getEnabled:u,setEnabled:d}}var Np=-1,Gn=0;function Up(e){return e?.page??Np}function Kn(e){return Up(e)+1}import{BaseError as Vn}from"make-error";var ne=class extends Vn{constructor(o){super(`Fetch request failed to build due to an unexpected error: ${typeof o=="object"?o.message:o}`);this.error=o}error};function Jn(e){return(t,o)=>vp(e(t,o))}var Ae=class extends Vn{constructor(o){super(`Fetch response was a non-ok status code (${o.status}): ${o.statusText}`);this.response=o}response};function vp(e){return e.then(t=>{if(!t.ok)throw new Ae(t);return t})}import{BaseError as Pg}from"make-error";function zn(e){return(t,o)=>{let r,n=o?.timeout??t.timeout;if(!o?.signal&&n){let i=new AbortController;r=i,o={...o,signal:i.signal}}let a=e(t,o??void 0);if(n){let i=setTimeout(()=>{r?.abort()},n);a=a.finally(()=>{clearTimeout(i)})}return a}}function qn(e){let{makeFetch:t,makeRequest:o,baseRequest:r}=e;return{fetchRequestFactory:n=>Wn({makeRequest:o,baseRequest:r,...n}),makeFetch:(n={})=>Gp({makeRequest:o,makeFetch:t,baseRequest:r,...n}),makeRequest:e.makeRequest}}var Lp=(e,t)=>t(e);function Gp(e){let{makeFetch:t=fetch,fetchHandler:o=Lp,useTimeout:r,requireOkResponse:n,mapResponse:a}=e,i=t;r&&(i=zn(i)),n&&(i=Jn(i));let s=Wn(e);return async(c,u)=>{let d=await s(c,u),h=o(d,i);return a&&(h=a(h)),h}}var Kp=(e,t)=>new Request(e,t??void 0);function Wn(e){let{makeRequest:t=Kp,baseUrl:o,baseRequest:r,timeout:n,requestInitFactory:a,useBaseUrlForConfiguredFetchRequests:i=!1,forceBaseUrlForWebsiteUrlWithPrefix:s=i}=e,c=o?new URL(En(o)):void 0,u=c?m=>{let C,y=m.toString();if(!s&&Mn(y))C=new URL(y);else{let R=c.origin+Dn("/"+c.pathname+"/"+m);C=new URL(R,c)}return C}:void 0;async function d(m){let C=vn(m)?await m:m;return jn(C)?C:t(C)}let h=u?async m=>{let C,y,R;if(typeof m=="string"?C=m:jn(m)?i?(C=m.url,y=m):R=m:R=await t(m),!R){let f=u(C);R=await t(f.href,y)}return R}:d,g;if(r!=null||n!=null){let m=sn(r);async function C(){let R=await m();return n?{...R,timeout:n}:R}async function y(R,f){let S=await C(),I=Vp(S,await f),z=I.timeout===void 0?R.timeout:I.timeout;return{...I,timeout:z}}a?g=(R,f)=>a(R,y(R,f)):g=(R,f)=>y(R,f)}else a?g=a:g=(m,C)=>C;return async(m,C)=>{try{let y=await h(m);C=await g(y,C??void 0);let R=await t(y,C);return R.timeout=n,R}catch(y){throw y instanceof ne?y:new ne(y)}}}function Vp(e,t){let o;if(t){let r=Jp([e.headers,t.headers]);o={...e,...t,headers:r}}else o=e;return o}function Jp(e){let t=nn();return ce(e).forEach(o=>{let r=zp(o),n=new Set;r.forEach(([a,i])=>{n.has(a)||(t.delete(a),n.add(a)),i&&t.add(a,i)})}),t.tuples()}function zp(e){let t=[];return Array.isArray(e)?t=e:typeof e.forEach=="function"?e.forEach((o,r)=>{t.push([r,o])}):typeof e=="object"&&(t=Object.entries(e)),t}function jn(e){return!!e.url}import{safeParse as jp}from"fast-content-type-parse";function $n(e){let t={};return e.mimeType&&(t.type=e.mimeType),e.lastModified!=null&&(t.lastModified=e.lastModified),new File(A(e.content),e.fileName,t)}function Mt(e){let t=e.headers.get("content-type"),o=jp(t??""),r=o.type===""?void 0:o;return{response:e,rawContentType:t,contentType:r,mimeType:r?.type}}function Hn(e){let{updateWithResponse:t,maxRetries:o}=e,r=o??1,n=e.rateLimiter,a=async(i,s)=>{async function c(u){await n.waitForRateLimit();let d,h;try{d=await s(i.clone())}catch(m){h=m,d=h.response}if(await t(d,h)&&u<r)d=await c(u+1);else if(h!=null)throw h;return d}return c(0)};return a._rateLimiter=n,a}var Eo=class extends ne{constructor(o){super("There was no next page for this.");this.page=o}page},Po=class extends ne{constructor(o,r){super(`The limit of ${r} for the number of pages to read was reached.`);this.page=o;this.limit=r}page;limit},qp=100;function Ge(e){let{fetch:t,readFetchPageResultInfo:o,buildInputForNextPage:r,defaultMaxPage:n,defaultMaxItemsPerPage:a}=e;return(i,s)=>{let{maxPage:c=n,maxItemsPerPage:u}=s??{},d=u??a,h=c===null?Number.MAX_SAFE_INTEGER:c??qp,g={maxPage:h,maxItemsPerPage:d};function m(y,R=void 0){return async()=>{let f=await t(y),{cursor:S,nextPageCursor:I,hasNext:z}=await o(f,y,g),F=S??R?.cursor,P=z!==!1,M=R?R.page+1:Gn,H=M>=h,st={input:y,result:f,page:M,previous:R,hasNext:P,isAtMaxPage:H,cursor:F,nextPageCursor:I,fetchNext:dt(async()=>{if(H)throw new Po(st,h);let Ur=P?await r(st,y,g):void 0;if(!Ur)throw new Eo(st);return m({...y,...Ur},st)()})};return st}}return{input:i,fetchNext:dt(()=>m(i)())}}}function Wp(e){let t=[];function o(r,n){n!=null&&(Array.isArray(n)?n.forEach((a,i)=>o(`${r}[${i}]`,a)):typeof n=="object"?Object.entries(n).forEach(([a,i])=>o(`${r}[${a}]`,i)):t.push([r,String(n)]))}return Object.entries(e??{}).forEach(([r,n])=>o(r,n)),t}function T(e,t){let{omitKeys:o,filterEmptyValues:r,useBracketNotation:n}=t??{},a=Array.isArray(e)?Cn(e):e,i=r??!0?Zn(a??{}):a,s=n?Wp(i):i,c=new URLSearchParams(s);return o!=null&&W(o,u=>c.delete(u),!1),c}function Mo(e){let t;if(typeof e=="string")t=e;else if($p(e))t=e.href;else{let o=Mo(e.url);if(e.queryParams){let r=Yp(e.queryParams);lt(r)?t=o:t=wn(o+`?${r.toString()}`)}else t=o}return t}function $p(e){return typeof e=="object"&&e instanceof URL}function Hp(e){return typeof e=="object"&&e instanceof URLSearchParams}function Bp(e){let t=[];return To(e,o=>{let[r,n]=o;if(r!=null&&n!=null){let a=String(r);W(n,i=>{i!=null&&t.push([a,String(i)])})}}),t}function Yp(e){let t;return Hp(e)?t=e:typeof e=="string"?t=new URLSearchParams(e):Ne(e)?t=new URLSearchParams(Bp(e)):t=Xp(e),t}function Xp(e){let t=[];return hn(e,{forEach:o=>{let[r,n]=o,a=String(r);n!=null&&W(n,i=>{t.push([a,String(i)])})}}),new URLSearchParams(t)}var wo=class extends Error{constructor(o){super("Failed to parse the JSON body.");this.response=o}response};function Qp(e){return e==null?void 0:typeof e=="string"?e:JSON.stringify(e)}var el=e=>{throw new wo(e)},B=e=>null;function Y(e,t){let o;typeof t=="function"?o={handleFetchJsonParseErrorFunction:t}:o=t??{},o={...o,handleFetchJsonParseErrorFunction:o.handleFetchJsonParseErrorFunction??el};let{handleFetchJsonParseErrorFunction:r,interceptJsonResponse:n}=o,a=Bn(o);return(i,s,c)=>{let u=Mo(i),d=a(s,c),h=typeof s=="object"?s.interceptResponse:void 0;return e(u,d).then(m=>{let C=m.json().catch(r),y=n?C.then(R=>n(R,m)):C;return h?y.then(R=>h(R,m)):y})}}function Bn(e={}){let{defaultMethod:t="GET",mapFetchJsonInput:o=on()}=e;return(r=t,n)=>{let a;return typeof r=="string"?a={method:r,body:n}:a=r??{method:t,body:n},a=o(a),{...a,method:a.method,body:Qp(a.body)}}}var Xg=Bn();var X=qn({makeFetch:fetch,makeRequest:(e,t)=>new Request(e,t)});function wt(e){let t,o=e?.notInitializedMessage??"Context slot has not been initialized.";return{set:r=>{t=r},get:()=>t,require:()=>{if(t==null)throw new Error(o);return t}}}function _t(e,t=Lr){return async o=>{try{await e(o)}catch(r){Wr(r),process.exit(t)}}}var tl=["raw","page_by_line","data_by_line"],ol=["replace","concat"],rl=["meta","pages","merged_page"];function Nt(e){return e.option("multiple-pages",{type:"number",default:1,describe:"Pages to fetch in this invocation (>=1). Continues from the per-API page/offset flag."}).option("multiple-pages-output",{type:"string",choices:rl,default:"meta",describe:"Stdout shape when multiple-pages > 1: meta (summary, low memory), pages (array of page responses, WARNING: holds all pages in memory), merged_page (concat all records into one array, WARNING: holds all records in memory)."}).option("dump-output",{type:"string",choices:tl,default:"raw",describe:"Dump file format when --dump-dir is set. raw: one full JSON page response (concatenated JSON when --dump-merge=concat, not standard JSON). page_by_line: NDJSON of page responses. data_by_line: NDJSON of records."}).option("dump-merge",{type:"string",choices:ol,default:"replace",describe:"Across pages with multiple-pages > 1: replace (truncate file each iteration; only last page survives) or concat (append)."})}import{dirname as ul}from"node:path";import{chmod as nl,mkdirSync as al,readFile as il,writeFile as sl}from"node:fs";import{rm as cl}from"node:fs/promises";function xe(e){return new Promise((t,o)=>{il(e,{encoding:"utf-8"},(r,n)=>{if(r){r.code==="ENOENT"?t(void 0):o(r);return}try{t(JSON.parse(n))}catch{t(void 0)}})})}function Ut(e){return al(e.dirPath,{recursive:!0}),new Promise((t,o)=>{sl(e.filePath,JSON.stringify(e.data,null,2),{mode:e.mode},r=>{r?o(r):e.mode==null?t():nl(e.filePath,e.mode,n=>{n?o(n):t()})})})}function yt(e){return cl(e,{force:!0})}var pl=384;function Yn(e){let{filePath:t,mode:o,reviver:r,replacer:n}=e,a=o??pl;async function i(){let d=await xe(t),h;if(d==null)h={};else if(r==null)h=d;else{h={};for(let g of Object.keys(d)){let m=r(d[g]);m!=null&&(h[g]=m)}}return h}async function s(d){let h=n==null?d:Object.fromEntries(Object.entries(d).map(([g,m])=>[g,n(m)]));await Ut({filePath:t,dirPath:ul(t),data:h,mode:a})}let c=Promise.resolve();function u(d){let h=c.then(d,d);return c=h.catch(()=>{}),h}return{load:i,get:async d=>(await i())[d],set:(d,h)=>u(async()=>{let g=await i();await s({...g,[d]:h})}),remove:d=>u(async()=>{let g={...await i()};delete g[d],await s(g)}),clear:()=>u(async()=>{await yt(t)})}}function ft(e){return xe(e.configFilePath)}var ll=384;function dl(e){return Ut({filePath:e.configFilePath,dirPath:e.configDir,data:e.config,mode:ll})}async function gt(e){let t=await ft({configFilePath:e.configFilePath})??{},o={activeEnv:e.updates.activeEnv??t.activeEnv,envs:e.updates.envs?{...t.envs,...e.updates.envs}:t.envs,output:e.updates.output===void 0?t.output:_o(t.output,e.updates.output)};return await dl({configFilePath:e.configFilePath,configDir:e.configDir,config:o}),o}function _o(e,t){return{dumpDir:"dumpDir"in t?t.dumpDir:e?.dumpDir,pick:"pick"in t?t.pick:e?.pick,commands:hl(e?.commands,t)}}function hl(e,t){let o;if("commands"in t)if(t.commands){let r={...e};for(let n of Object.keys(t.commands))r[n]={...e?.[n],...t.commands[n]};o=r}else o=void 0;else o=e;return o}function Xn(e){let t=e.commandPath.join("."),o=t?e.outputConfig?.commands?.[t]:void 0;return{dumpDir:e.cliFlags.dumpDir??o?.dumpDir??e.outputConfig?.dumpDir,pick:e.cliFlags.pick??o?.pick??e.outputConfig?.pick}}function Se(e){let t;return e==null?t=e:e.length<=4?t="***":t=e.substring(0,4)+"***",t}import{homedir as ml}from"node:os";import{join as Rt}from"node:path";function vt(e){let t=e.configDirOverride??Rt(ml(),`.${e.cliName}`);return{configDir:t,configFilePath:Rt(t,"config.json"),tokenCachePath:Rt(t,".tokens.json"),firestoreSessionCachePath:Rt(t,".firestore-sessions.json"),dataCacheDir:Rt(t,"cache")}}var yl=24;var Qn={read:!1,write:!0},fl={read:!1,write:!1},gl=wt();function ea(e){gl.set(e)}function Rl(e){let t;if(e.length===0)t=void 0;else{let o=Number(e);if(!Number.isFinite(o)||o<0)throw new Error(`--cache takes an optional number of hours; use --cache=<hours> (got "${e}").`);t=o}return t}function ta(e){let t;if(e.refresh===!0)t=Qn;else if(e.cache===!1)t=fl;else if(typeof e.cache=="string"){let o=Rl(e.cache)??yl;t={read:!0,write:!0,maxAgeMs:o===0?void 0:o*ht}}else t=Qn;return t}function oa(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await ft({configFilePath:t.configFilePath}))?.output),r=e.saveCommandOutputConfig??(async(n,a)=>{await gt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:{commands:{[n]:a}}}})});return async n=>{Vr(!!n.verbose),Jr(typeof n.timeout=="number"?n.timeout*1e3:void 0),ea(ta(n));let a=n._?n._.map(String):[],i=a[0],s=n.setDumpDir,c=n.setPick;if((s!==void 0||c!==void 0)&&i&&!e.skipCommands.has(i)){let m=a.join("."),C={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await r(m,C)}let d=i&&!e.skipCommands.has(i),h=d?await o():void 0,g=d?Xn({outputConfig:h,commandPath:a,cliFlags:{dumpDir:n.dumpDir??s,pick:n.pick??c}}):{dumpDir:void 0,pick:void 0};go({dumpDir:g.dumpDir,pick:n.pickAll?void 0:g.pick,commandPath:a,pretty:!!n.pretty})}}function Cl(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await ft({configFilePath:t.configFilePath}))?.output),r=e.mergeOutputConfig??(a=>gt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:a}})),n=e.clearOutputConfig??(()=>gt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:{dumpDir:void 0,pick:void 0,commands:void 0}}}));return{loadOutputConfig:o,mergeOutputConfig:r,clearOutputConfig:n}}function ra(e){let t=Cl(e),o={command:"set",describe:"Configure output settings (global or per-command)",builder:a=>a.option("command",{alias:"c",type:"string",describe:"Command path to configure (e.g. recruit.list)"}).check(i=>{if(i.setDumpDir==null&&i.setPick==null)throw new Error("At least one of --set-dump-dir or --set-pick is required");return!0}),handler:_t(async a=>{let i=a.command,s=a.setDumpDir,c=a.setPick,u;if(i){let h={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};u={commands:{[i]:h}}}else u={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await t.mergeOutputConfig(u);let d=await t.loadOutputConfig();p({saved:!0,output:d??{}})})},r={command:"show",describe:"Show current output configuration",builder:a=>a,handler:_t(async()=>{let a=await t.loadOutputConfig();p({output:a??{}})})},n={command:"clear",describe:"Clear output configuration (global or per-command)",builder:a=>a.option("command",{alias:"c",type:"string",describe:"Command path to clear (omit to clear all output config)"}),handler:_t(async a=>{let i=a.command;if(i){let s=await t.loadOutputConfig();if(!s?.commands?.[i])throw new ct({message:`No per-command output config for "${i}".`,code:"OUTPUT_COMMAND_NOT_FOUND"});let c={...s.commands};delete c[i],await t.mergeOutputConfig({...s,commands:c}),p({cleared:!0,command:i})}else await t.clearOutputConfig(),p({cleared:!0})})};return{command:"output",describe:"Configure output settings (dump, field filtering)",builder:a=>a.command(o).command(r).command(n).demandCommand(1,"Specify an output subcommand."),handler:Z}}import{writeFileSync as Tl,appendFileSync as Zl}from"node:fs";function na(e){let{dumpOutput:t,dumpMerge:o}=e,{pick:r}=Ot(),n=t==="raw"?"json":"ndjson",a=pt(n),i=r?pt(n,"pick"):void 0,s;if(a){let c=0,u=y=>{let R;if(r){let f=Ze(y.data,r);R={...y,data:f}}else R=y;return R},d=y=>{let R=y.append?Zl:Tl;R(a,y.mainContent),i&&y.pickContent!==void 0&&R(i,y.pickContent)},h=(y,R)=>{let f=JSON.stringify(y,null,2),S=i?JSON.stringify(u(y),null,2):void 0;d({mainContent:f,pickContent:S,append:R})},g=(y,R)=>{let f=JSON.stringify(y)+`
|
|
5
5
|
`,S=i?JSON.stringify(u(y))+`
|
|
6
|
-
`:void 0;d({mainContent:f,pickContent:S,append:R})},m=(y,R)=>{let f=y.data??[],S=i?
|
|
6
|
+
`:void 0;d({mainContent:f,pickContent:S,append:R})},m=(y,R)=>{let f=y.data??[],S=i?Ze(f,r):void 0;f.length===0?R||d({mainContent:"",pickContent:i?"":void 0,append:!1}):f.forEach((I,z)=>{let F=R||z>0,P=JSON.stringify(I)+`
|
|
7
7
|
`,M=i&&S?JSON.stringify(S[z])+`
|
|
8
|
-
`:void 0;d({mainContent:P,pickContent:M,append:F})})};s={mainPath:a,pickPath:i,writePage:y=>{let f=o==="concat"&&!(c===0);t==="raw"?h(y,f):t==="page_by_line"?g(y,f):m(y,f),c+=1},close:()=>{}}}else s={mainPath:void 0,pickPath:void 0,writePage:()=>{},close:()=>{}};return s}async function Al(e){let{initialInput:t,requestedPages:o,fetchPage:r,adapter:n,stream:a,shouldCollectPages:i,shouldCollectRecords:s}=e,c={pagesFetched:0,totalRecords:0,hasMorePagesAvailable:!1,lastResult:void 0,lastInput:t,collectedPages:[],collectedRecords:[]},u=t;for(let d=0;d<o;d++){let h=await r(u);if(c.pagesFetched+=1,c.totalRecords+=n.countOf(h),c.lastResult=h,c.lastInput=u,a.writePage(h),i)c.collectedPages.push(h);else if(s)for(let m of h.data??[])c.collectedRecords.push(m);c.hasMorePagesAvailable=n.hasMorePagesAvailable(u,h);let g=n.nextInput(u,h);if(!g)break;u=g}return c}function xl(e){let{multiplePagesOutput:t,summaryMeta:o,state:r,adapter:n,pickFilter:a}=e;if(t==="meta")console.log(JSON.stringify({ok:!0,meta:o}));else if(t==="pages"){let i=a?r.collectedPages.map(s=>({...s,data:Ee(s.data,a)})):r.collectedPages;console.log(JSON.stringify({ok:!0,data:i,meta:o}))}else{let i=r.lastResult?n.metaOf(r.lastInput,r.lastResult):{},s=a?Ee(r.collectedRecords,a):r.collectedRecords;console.log(JSON.stringify({ok:!0,data:s,meta:{...i,...o}}))}}async function b(e){let{initialInput:t,fetchPage:o,adapter:r,multiplePagesOutput:n,dumpOutput:a,dumpMerge:i}=e,s=Math.max(1,Math.floor(e.multiplePages||1)),c;if(s<=1)c={handled:!1,result:await o(t)};else{let u=Ot();u.dumpDir||console.error("[cli] warning: --multiple-pages used without --dump-dir; results not persisted.");let d=na({dumpOutput:a,dumpMerge:i}),h;try{h=await Al({initialInput:t,requestedPages:s,fetchPage:o,adapter:r,stream:d,shouldCollectPages:n==="pages",shouldCollectRecords:n==="merged_page"})}finally{d.close()}let g={pagesFetched:h.pagesFetched,totalRecords:h.totalRecords,hasMorePagesAvailable:h.hasMorePagesAvailable,dumpFile:d.mainPath??null};d.pickPath&&(g.dumpFilePick=d.pickPath),xl({multiplePagesOutput:n,summaryMeta:g,state:h,adapter:r,pickFilter:u.pick}),c={handled:!0}}return c}import Vy from"yargs";import{hideBin as Jy}from"yargs/helpers";import{writeFile as Sl,mkdirSync as Fl}from"node:fs";import{join as No}from"node:path";import{homedir as bl}from"node:os";var Ct=["recruit","crm","desk","sign","analytics"],Il=new Set(["sign","analytics"]),Me=new Set(["desk","analytics"]);function Uo(){return No(bl(),".zoho-cli")}function Tt(){return No(Uo(),"config.json")}function Zt(){return No(Uo(),".tokens.json")}function Pe(e,t){return(t?process.env[`ZOHO_${t}_${e}`]:void 0)??process.env[`ZOHO_${e}`]}async function $(){let e=Tt(),t=await Ae(e),o=Pe("ACCOUNTS_CLIENT_ID"),r=Pe("ACCOUNTS_CLIENT_SECRET"),n=Pe("ACCOUNTS_REFRESH_TOKEN"),a=o&&r&&n,i;if(!t&&!a)i=void 0;else{let s={clientId:o??t?.shared?.clientId??"",clientSecret:r??t?.shared?.clientSecret??"",refreshToken:n??t?.shared?.refreshToken??"",region:Pe("ACCOUNTS_URL")??t?.shared?.region,apiMode:Pe("API_URL")??t?.shared?.apiMode},c=u=>{let d=u.toUpperCase(),h=Pe("API_URL",d),g=Me.has(u)?Pe("ORG_ID",d):void 0,m=t?.[u],C=process.env[`ZOHO_${d}_ACCOUNTS_CLIENT_ID`],y=process.env[`ZOHO_${d}_ACCOUNTS_CLIENT_SECRET`],R=process.env[`ZOHO_${d}_ACCOUNTS_REFRESH_TOKEN`],f=C||y||R,S;return!m&&!f&&!g?S=void 0:S={clientId:C??m?.clientId,clientSecret:y??m?.clientSecret,refreshToken:R??m?.refreshToken,apiUrl:h??m?.apiUrl,orgId:g??m?.orgId},S};i={shared:s,recruit:c("recruit")??t?.recruit,crm:c("crm")??t?.crm,desk:c("desk")??t?.desk,sign:c("sign")??t?.sign,analytics:c("analytics")??t?.analytics,output:t?.output}}return i}function we(e,t){let o=e[t],r=e.shared,n=!Il.has(t),a=o?.clientId??(n?r.clientId:void 0),i=o?.clientSecret??(n?r.clientSecret:void 0),s=o?.refreshToken??(n?r.refreshToken:void 0),c;return!a||!i||!s?c=void 0:c={clientId:a,clientSecret:i,refreshToken:s,region:r.region??"us",apiMode:o?.apiUrl??r.apiMode??"production",orgId:o?.orgId},c}async function kl(e){let t=Tt();return Fl(Uo(),{recursive:!0}),new Promise((o,r)=>{Sl(t,JSON.stringify(e,null,2),{},n=>{n?r(n):o()})})}function Ve(e,t){return t==null?e??void 0:{...e,...Tn(t)}}async function ae(e){let t=await $(),o={shared:Ve(t?.shared,e.shared),recruit:Ve(t?.recruit,e.recruit),crm:Ve(t?.crm,e.crm),desk:Ve(t?.desk,e.desk),sign:Ve(t?.sign,e.sign),analytics:Ve(t?.analytics,e.analytics),output:e.output===void 0?t?.output:_o(t?.output,e.output)};return await kl(o),o}async function aa(){await ae({output:{dumpDir:void 0,pick:void 0,commands:void 0}})}async function ia(){let e=Tt(),t=Zt();await yt(e),await yt(t)}function ue(e){return Ct.filter(t=>{let o=we(e,t);return o!=null&&(t!=="desk"||o.orgId!=null)})}import{Inject as Uc,Injectable as mh}from"@nestjs/common";function Je(){return{data:[],info:{page:1,per_page:100,count:0,more_records:!1}}}function j(e,t){return Ke({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.info?.more_records??!1}},buildInputForNextPage:function(o,r,n){return{...r,page:Kn(o),per_page:n.maxItemsPerPage??r.per_page}}})}function Lt(e){let t;switch(e){case"sandbox":t="https://recruitsandbox.zoho.com/recruit";break;case"production":t="https://recruit.zoho.com/recruit";break;default:t=e;break}return t}var ze="Candidates",sa="Job_Openings",Gt="Notes",ca="Emails",At="Attachments";function Kt(e){let t;if(e!=null)switch(typeof e){case"string":t=e;break;case"object":{let o;Array.isArray(e)?o={and:[e]}:o=e,t=Vt(o);break}default:break}return t}function Vt(e){function t(i){let s;return typeof i=="object"?Array.isArray(i)?s=i.map(vo):i&&(s=Vt(i)):s=i,s}function o(i,s){return i.length>1?`(${i.join(s)})`:i[0]}function r(i,s){let c=ce(i.map(t)).flatMap(A);return o(c,s)}let n=e.or?r(e.or,"or"):void 0,a=n;return e.and&&(a=r([r(e.and,"and"),n],"and")),a}var ua=bn({escapeTargets:["(",")",","],escapeCharacter:e=>`\\\\${e}`});function vo(e){let t=ua(e.value);return`(${e.field}:${e.filter}:${t})`}var pa=Kt;import{BaseError as Kl}from"make-error";import{BaseError as Dl}from"make-error";var El="__internal_data_array_blank_error";function Pl(e){return Array.isArray(e?.data)}var We="success";function ie(e){let t=typeof e,o;return t==="object"?o=e:o={code:e,message:""},o}var Se=class extends Dl{constructor(o){super(o.message);this.error=o}error;get code(){return this.error.code}},U=class extends Se{constructor(o,r,n){super(o);this.data=o;this.errorResponseData=r;this.responseError=n}data;errorResponseData;responseError},je=class extends U{constructor(t,o){super({code:El,message:"Check data for individual errors."},t,o)}get errorDataArray(){return this.errorResponseData.data}};function Q(e,t){let{logDataArrayErrors:o=!1}=t??{};return r=>{r instanceof je&&!o||(r instanceof U?console.log(`${e}Error(${r.responseError.response.status}): `,{error:r,errorData:r.data}):r instanceof Se?console.log(`${e}Error(code:${r.code}): `,{error:r}):console.log(`${e}Error(name:${r.name}): `,{error:r}))}}function ee(e,t){return(o,r=t,n)=>async(a,i)=>{try{return await o(a,i)}catch(s){if(s instanceof Ze){let c=await e(s);if(c)throw r(c),n?.(c),c}throw s}}}function pe(e){return(t,o)=>{if(t?.error!=null){let n=new Ze(o),a=e(t,n);if(a)throw a}return t}}var Ml="INTERNAL_ERROR",wl="INVALID_TOKEN",v=class extends U{},la="FAILURE",Lo=class extends U{},_l="4834",qe=class extends U{},Nl="INVALID_QUERY",Go=class extends U{get details(){return this.error.details}},Jt="MANDATORY_NOT_FOUND",Fe="DUPLICATE_DATA",zt="INVALID_DATA",Ul="TOO_MANY_REQUESTS",Ko=429,vl="X-RATELIMIT-LIMIT",Ll="X-RATELIMIT-REMAINING",Gl="X-RATELIMIT-RESET",da=100,ha=Re;function Vo(e){let t=e.get(vl),o=e.get(Ll),r=e.get(Gl),n=null;if(t!=null&&o!=null&&r!=null){let a=Number(t),i=Number(o),s=Number(r),c=new Date(s);n={limit:a,remaining:i,reset:s,resetAt:c}}return n}var Ce=class extends U{get headerDetails(){return Vo(this.responseError.response.headers)}};function te(e,t){let o;if(Pl(e))o=new je(e,t);else{let r=Te(e,t);if(r){let n=ie(r);switch(n.code){case Ml:o=new Lo(n,e,t);break;case wl:o=new v(n,e,t);break;case _l:o=new qe(n,e,t);break;case Nl:o=new Go(n,e,t);break;case Ul:o=new Ce(n,e,t);break;default:o=new U(n,e,t);break}}}return o}function Te(e,t){return e.error??e.data?.[0]??(t.response.ok?void 0:e)}var ma="ALREADY_ASSOCIATED",Jo=class extends Kl{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}moduleName;recordId},$e=class extends Se{},zo=class extends $e{},jo=class extends $e{},jt=class extends $e{get invalidFieldDetails(){return this.error.details}},qo=class extends jt{};function ya(e){let t;switch(e.code){case zt:{let o=new jt(e);o.invalidFieldDetails.id?t=new qo(e):t=o;break}case Jt:t=new zo(e);break;case Fe:t=new jo(e);break;default:t=new $e(e);break}return t}function fa(e,t){return o=>{if(!o?.data?.length)throw new Jo(e,t);return o}}var Vl=Q("ZohoRecruit");async function Jl(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=ga(t,e)),o}function ga(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var Ra=pe(ga),Ca=ee(Jl,Vl);import{BaseError as zl}from"make-error";function $o(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v2/${n}${t}`,L(o,{data:A(r)})).then(a=>{let i=Array.isArray(r),s=le(A(r),a.data),c;if(i)c=s;else{let{successItems:u,errorItems:d}=s;if(d[0]!=null)throw ya(d[0].result);c=u[0].result.details}return c}))}function Ta(e){return $o(e,"","POST")}function Za(e){return $o(e,"/upsert","POST")}function Aa(e){return $o(e,"","PUT")}function xa(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v2/${o}?${T({ids:t,wf_trigger:r})}`,L("DELETE")).then(jl)}function Sa(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}`,L("GET")).then(fa(t.module)).then(o=>o.data[0])}function Fa(e){return(t=>e.fetchJson(`/v2/${t.module}?${Ma(t).toString()}`,L("GET")))}function Ho(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=pa(o.criteria);r.criteria=n}if(!r.word&&!o.criteria&&!o.email&&!o.phone)throw new Error("At least one of word, criteria, email, or phone must be provided");return Ma(r)}return o=>e.fetchJson(`/v2/${o.module}/search?${t(o).toString()}`,L("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function ba(e){return j(Ho(e))}function He(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v2/${n.module}/${n.id}/${o}?${Xo(n).toString()}`,L("GET")).then(a=>a??(r===!1?a:Je()))}}function Bo(e){return He(e)({targetModule:ca})}function Ia(e){return j(Bo(e))}function Yo(e){return He(e)({targetModule:At})}function ka(e){return j(Yo(e))}var hC=20*1024*1024;function Oa(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n,attachmentUrl:a}=t,i={attachments_category_id:O(o),attachments_category:O(r)};if(!i.attachments_category_id?.length&&!i.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let s=`/v2/${t.module}/${t.id}/${At}?${T(i).toString()}`,c;if(n!=null){let u=new FormData;u.append("file",n),c=e.fetch(s,{method:"POST",headers:{"Content-Type":""},body:u})}else if(a){let u=`${s}&${T({attachment_url:a}).toString()}`;c=e.fetch(u,{method:"POST"})}else throw new Error("file or attachmentUrl must be provided.");return c}}function Da(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${At}/${t.attachment_id}`,{method:"GET"}).then(Mt)}function Ea(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${At}/${t.attachment_id}`,{method:"DELETE"})}var Wo=class extends zl{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}error};function Pa(e){return t=>{let r=T(t.params).toString(),n=!!t.apiKey,a=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),i=`/v2/functions/${t.functionName}/actions/execute?${a}`,c=`${n&&t.apiUrl!=null?Lt(t.apiUrl):""}${i}`;return e.fetchJson(c,L("POST")).then(u=>{if(u.code!=="success")throw new Wo(u);return u.details})}}function Ma(...e){return T(e,{omitKeys:"module"})}function Xo(...e){return T(e,{omitKeys:["id","module"]})}function L(e,t){return{method:e,body:t??void 0}}function jl(e){let{data:t}=e,o=[],r=[];return t.forEach(a=>{a.status===We?o.push(a):r.push(a)}),{...e,successItems:o,errorItems:r}}function le(e,t){let o=[],r=[];return e.forEach((a,i)=>{let s=t[i];s.status===We?o.push({input:a,result:s}):r.push({input:a,result:s})}),{successItems:o,errorItems:r}}function wa(e){return t=>e.fetchJson(`/v2/${ze}/actions/associate`,L("PUT",{data:A(t)})).then(o=>{let r=o.data.map(()=>t),n=le(r,o.data),{included:a,excluded:i}=ve(n.errorItems,s=>s.result.code===la&&s.result.details.error[0].code===ma);return{...n,errorItems:i,alreadyAssociatedErrorItems:a,allErrorItems:n.errorItems}})}function _a(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}/associate?${Xo(t).toString()}`,L("GET")).then(o=>o??Je())}function Qo(e){let t=_a(e);return o=>t({...o,module:ze})}function Na(e){return j(Qo(e))}function er(e,t=sa){let o=_a(e);return r=>o({...r,module:t})}function Ua(e){return j(er(e))}function tr(e){return t=>e.fetchJson(`/v2/${Gt}`,L("POST",{data:t.data})).then(o=>le(A(t.data),o.data))}function va(e){return t=>e.fetchJson(`/v2/${Gt}?${T({ids:t.ids})}`,L("DELETE")).then(o=>le(A(t.ids),o.data))}function or(e){return He(e)({targetModule:Gt})}function La(e){return j(or(e))}function Ga(e){let t=tr(e);return o=>{let{module:r,id:n,notes:a}=o,i={data:A(a).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(i)}}function Ja(e){return t=>e.fetchJson(`/v2/settings/tags?${T({module:t.module})}`,L("POST",{tags:A(t.tags)})).then(o=>{let r=le(A(t.tags),o.tags),{included:n,excluded:a}=ve(r.errorItems,i=>i.result.code===Fe);return{...r,errorItems:a,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function za(e){return t=>e.fetchJson(`/v2/settings/tags?${T({module:t.module,my_tags:t.my_tags})}`,L("GET")).then(o=>({...o,data:o.tags}))}var Ka=100;function ja(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>Ka)throw new Error(`Cannot add tags to more than ${Ka} records at once.`);return e.fetchJson(`/v2/${ze}/actions/add_tags?${T({tag_names:t.tag_names,ids:t.ids})}`,L("POST")).then(o=>{let r=o.data.map(()=>t);return le(r,o.data)})}}var Va=100;function qa(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>Va)throw new Error(`Cannot remove tags from more than ${Va} records at once.`);return e.fetchJson(`/v2/${ze}/actions/remove_tags?${T({tag_names:t.tag_names,ids:t.ids})}`,L("POST")).then(o=>{let r=o.data.map(()=>t);return le(r,o.data)})}}var ql="invalid_code",Wl="invalid_client",rr=class extends ne{constructor(o){super(`ZohoAccountsAccessTokenError: ${o}`);this.errorCode=o}errorCode},Be=class extends ne{constructor(o){super(`Failed to retrieve proper authentication for the API call. Reason: ${o}`);this.reason=o}reason},$l=Q("ZohoAccounts");async function Hl(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Wa(t,e)),o}function Wa(e,t){let o,r=e.error;if(r){let n=ie(r);switch(n.code){case ql:case Wl:o=new rr(n.code);break;default:o=te(e,t);break}}return o}var $a=pe(Wa),Ha=ee(Hl,$l);function de(e){return async()=>{let t=await e();if(!t.accessToken)throw new Be;return t.accessToken}}var Bl=e=>{let t="limit"in e?e.limit:void 0,o="resetAt"in e?e.resetAt:void 0,r=t==null?"":" The limit is "+String(t)+" requests per reset period.",n=o==null?"":" Will be reset at "+String(o)+".";console.warn("zohoRateLimitedFetchHandler(): Too many requests made."+r+n)};function xt(e){let{readRateLimitDetails:t,enabledWithoutRateLimitDetails:o=!1}=e,r=e.onTooManyRequests===!1?void 0:e.onTooManyRequests??Bl,n=e.maxRateLimit??da,a=e.resetPeriod??ha;function i(u,d){return{limit:u,startLimitAt:Math.ceil(u/10),cooldownRate:1.2*(u/(a/K)),exponentRate:1.08,maxWaitTime:K*10,resetPeriod:a,resetAt:d}}let s=i(n),c=Ln(s);return Hn({rateLimiter:c,maxRetries:e.maxRetries,updateWithResponse:function(u,d){let h=t(u.headers),g=!1,m=o;if(h){let{remaining:C,limit:y,resetAt:R}=h;if(y!=null&&y!==n){let f=i(y,R??void 0);c.setConfig(f,!1)}if(c.setRemainingLimit(C),R&&c.setNextResetAt(R),m=!0,u.status===Ko){g=!0;try{r?.(h,u,d)}catch{}}}else if(o&&u.status===Ko){g=!0;try{r?.({remaining:0},u,d)}catch{}}return c.setEnabled(m),g}})}function be(e){return xt({...e,readRateLimitDetails:nr})}function nr(e){let t=Vo(e),o;return t&&(o={remaining:t.remaining,limit:t.limit,resetAt:t.resetAt}),o}function Ba(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=be(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=Lt(i.apiUrl),c=a({apiUrl:s}),u=Ca(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:Ra,handleFetchJsonParseErrorFunction:B});return{recruitContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function qt(e){let t;switch(e){case"sandbox":t="https://crmsandbox.zoho.com/crm";break;case"production":t="https://www.zohoapis.com/crm";break;default:t=e;break}return t}var Wt="Notes",Ya="Emails",St="Attachments";var Xa=Kt;import{BaseError as Yl}from"make-error";var ar=class extends Yl{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}moduleName;recordId},Ye=class extends Se{},ir=class extends Ye{},sr=class extends Ye{},$t=class extends Ye{get invalidFieldDetails(){return this.error.details}},cr=class extends $t{};function Qa(e){let t;switch(e.code){case zt:{let o=new $t(e);o.invalidFieldDetails.api_name==="id"?t=new cr(e):t=o;break}case Jt:t=new ir(e);break;case Fe:t=new sr(e);break;default:t=new Ye(e);break}return t}function ei(e,t){return o=>{if(!o?.data?.length)throw new ar(e,t);return o}}var Xl=Q("ZohoCrm",{logDataArrayErrors:!1});async function Ql(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=ti(t,e)),o}function ti(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var oi=pe(ti),ri=ee(Ql,Xl);import{BaseError as ed}from"make-error";function pr(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v8/${n}${t}`,V(o,{data:A(r)})).catch(Ri).then(a=>{let i=Array.isArray(r),s=Ie(A(r),a.data),c;if(i)c=s;else{let{successItems:u,errorItems:d}=s;if(d[0]!=null)throw Qa(d[0].result);c=u[0].result.details}return c}))}function ni(e){return pr(e,"","POST")}function ai(e){return pr(e,"/upsert","POST")}function ii(e){return pr(e,"","PUT")}function si(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v8/${o}?${T({ids:t,wf_trigger:r})}`,V("DELETE")).catch(Ri).then(od)}function ci(e){return t=>e.fetchJson(`/v8/${t.module}/${t.id}`,V("GET")).then(ei(t.module)).then(o=>o.data[0])}function ui(e){return(t=>e.fetchJson(`/v8/${t.module}?${gi(t).toString()}`,V("GET")))}function lr(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=Xa(o.criteria);r.criteria=n}if(!r.word&&!o.cvid&&!o.criteria&&!o.email&&!o.phone)throw new Error("At least one of word, cvid, criteria, email, or phone must be provided");return gi(r)}return o=>e.fetchJson(`/v8/${o.module}/search?${t(o).toString()}`,V("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function pi(e){return j(lr(e))}function Xe(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v8/${n.module}/${n.id}/${o}?${td(n).toString()}`,V("GET")).then(a=>a??(r===!1?a:Je()))}}function dr(e){let t=Xe(e)({targetModule:Ya});return o=>t(o).then(r=>{let n=r.data??r.Emails;return{...r,data:n}})}function li(e){return j(dr(e))}function hr(e){return Xe(e)({targetModule:St})}function di(e){return j(hr(e))}var dT=20*1024*1024;function hi(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n}=t,a={attachments_category_id:O(o),attachments_category:O(r)};if(!a.attachments_category_id?.length&&!a.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let i=`/v8/${t.module}/${t.id}/${St}?${T(a).toString()}`,s=new FormData;return s.append("file",n),e.fetch(i,{method:"POST",headers:{"Content-Type":""},body:s})}}function mi(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${St}/${t.attachment_id}`,{method:"GET"}).then(Mt)}function yi(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${St}/${t.attachment_id}`,{method:"DELETE"})}var ur=class extends ed{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}error};function fi(e){return t=>{let r=T(t.params).toString(),n=!!t.apiKey,a=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),i=`/v8/functions/${t.functionName}/actions/execute?${a}`,c=`${n&&t.apiUrl!=null?qt(t.apiUrl):""}${i}`;return e.fetchJson(c,V("POST")).then(u=>{if(u.code!=="success")throw new ur(u);return u.details})}}function gi(...e){return T(e,{omitKeys:"module"})}function td(...e){return T(e,{omitKeys:["id","module"]})}function V(e,t){return{method:e,body:t??void 0}}function Ri(e){let t;if(e instanceof je)t={data:e.errorDataArray};else throw e;return t}function od(e){let{data:t}=e,o=[],r=[];return t.forEach(a=>{a.status===We?o.push(a):r.push(a)}),{...e,successItems:o,errorItems:r}}function Ie(e,t){let o=[],r=[];return e.forEach((a,i)=>{let s=t[i];s.status===We?o.push({input:a,result:s}):r.push({input:a,result:s})}),{successItems:o,errorItems:r}}function mr(e){return t=>e.fetchJson(`/v2/${Wt}`,V("POST",{data:t.data})).then(o=>Ie(A(t.data),o.data))}function Ci(e){return t=>e.fetchJson(`/v2/${Wt}?${T({ids:t.ids})}`,V("DELETE")).then(o=>Ie(A(t.ids),o.data))}function yr(e){return Xe(e)({targetModule:Wt})}function Ti(e){return j(yr(e))}function Zi(e){let t=mr(e);return o=>{let{module:r,id:n,notes:a}=o,i={data:A(a).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(i)}}function xi(e){return t=>e.fetchJson(`/v8/settings/tags?${T({module:t.module})}`,V("POST",{tags:A(t.tags)})).catch(o=>{let r;if(o instanceof U){let n=o.data?.tags;Array.isArray(n)&&(r={tags:n})}if(!r)throw o;return r}).then(o=>{let r=Ie(A(t.tags),o.tags),{included:n,excluded:a}=ve(r.errorItems,i=>i.result.code===Fe);return{...r,errorItems:a,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function Si(e){return t=>e.fetchJson(`/v8/settings/tags/${t.id}`,V("DELETE")).then(o=>o.tags)}function Fi(e){return t=>e.fetchJson(`/v8/settings/tags?${T({module:t.module,my_tags:t.my_tags})}`,V("GET")).then(o=>({...o,data:o.tags}))}var Ai=100;function bi(e){return t=>e.fetchJson(`/v8/${t.module}/actions/add_tags`,V("POST",Ii(t))).then(o=>{let r=o.data.map(()=>t);return Ie(r,o.data)})}function Ii(e){if(Array.isArray(e.ids)&&e.ids.length>Ai)throw new Error(`Cannot add/remove tags from more than ${Ai} records at once.`);let t=[...A(e.tags)],o=new Set(t.map(r=>r.name));return e.tag_names&&A(e.tag_names).forEach(r=>{o.has(r)||(t.push({name:r}),o.add(r))}),{tags:t,ids:A(e.ids)}}function ki(e){return t=>e.fetchJson(`/v8/${t.module}/actions/remove_tags`,V("POST",Ii(t))).then(o=>{let r=o.data.map(()=>t);return Ie(r,o.data)})}function Oi(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=be(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=qt(i.apiUrl),c=a({apiUrl:s}),u=ri(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:oi,handleFetchJsonParseErrorFunction:B});return{crmContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}var Di="https://signsandbox.zoho.com/api/v1",rd="https://sign.zoho.com/api/v1";function fr(e){let t;switch(e){case"sandbox":t=Di;break;case"production":t=rd;break;default:t=e;break}return t}function Ei(e){let t=fr(e),o;try{o=new URL(t).hostname!==new URL(Di).hostname}catch{o=!0}return o}function Pi(e,t){return Ke({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.page_context?.has_more_rows??!1}},buildInputForNextPage:function(o,r,n){let i=o.result?.page_context,s=n.maxItemsPerPage??r.row_count??i?.row_count??20,c=(i?.start_index??r.start_index??1)+s;return{...r,start_index:c,row_count:s}}})}function he(e,t){return{method:e,body:t??void 0}}function Mi(e){return({requestId:t})=>e.fetchJson(`/requests/${t}`,he("GET"))}function gr(e){return t=>{let{search_columns:o,...r}=t,n={page_context:{...r,...o?{search_columns:o}:{}}};return e.fetchJson({url:"/requests",queryParams:{data:JSON.stringify(n)}},he("GET"))}}function wi(e){let t=gr(e);return Pi(t)}function _i(e){return({requestId:t})=>e.fetchJson(`/requests/${t}/fielddata`,he("GET"))}function Ni(e){return()=>e.fetchJson("/fieldtypes",he("GET"))}function Ui(e){return({requestId:t,...o})=>{let n=T(o).toString(),a=n?`?${n}`:"",i=`/requests/${t}/pdf${a}`;return e.fetch(i,{method:"GET"})}}function vi(e){return({requestId:t})=>e.fetch(`/requests/${t}/completioncertificate`,{method:"GET"})}function Li(e){return({requestData:t,file:o})=>{let r=new FormData;return r.append("data",JSON.stringify({requests:t})),r.append("file",o),e.fetch("/requests",{method:"POST",headers:{"Content-Type":""},body:r}).then(n=>n.json())}}function Gi(e){return({templateId:t,data:o,isQuickSend:r=!0})=>{let n=T({data:JSON.stringify({templates:o})});return e.fetchJson({url:`/templates/${t}/createdocument`,queryParams:{is_quicksend:String(r)}},{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString()})}}function Ki(e){return({templateId:t})=>e.fetchJson(`/templates/${t}`,he("GET"))}function Vi(e){return(t={})=>{let{search_columns:o,...r}=t,n={page_context:{...r,...o?{search_columns:o}:{}}};return e.fetchJson({url:"/templates",queryParams:{data:JSON.stringify(n)}},he("GET"))}}function Ji(e){return({requestId:t,data:o})=>e.fetchJson(`/requests/${t}`,he("PUT",{requests:o}))}function zi(e){return({requestId:t,data:o})=>{let r=o?{requests:o}:void 0;return e.fetchJson(`/requests/${t}/submit`,he("POST",r))}}function ji(e){return({requestId:t,expire_by:o})=>e.fetchJson(`/requests/${t}/extend`,he("PUT",{expire_by:o}))}function qi(e){return({requestId:t,recall_inprogress:o,reason:r})=>{let n={};o!=null&&(n.recall_inprogress=String(o)),r!=null&&(n.reason=r);let a=T(n),i=a.toString().length>0;return e.fetchJson(`/requests/${t}/delete`,{method:"PUT",...i?{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:a.toString()}:{}})}}function Wi(e){return async({requestId:t,actionId:o,host:r})=>{let n=e.config.apiUrl;if(n!=null&&Ei(n)&&!/^https:\/\//i.test(r))throw new Error(`Zoho Sign requires an https embedded-signing host for this environment, but received "${r}".`);return e.fetchJson({url:`/requests/${t}/actions/${o}/embedtoken`,queryParams:{host:r}},he("POST"))}}var nd=Q("ZohoSign",{logDataArrayErrors:!1});async function ad(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=$i(t,e)),o}function $i(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var Hi=pe($i),Bi=ee(ad,nd);function Yi(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=be(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=fr(i.apiUrl),c=a({apiUrl:s}),u=Bi(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:Hi,handleFetchJsonParseErrorFunction:B});return{signContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function Xi(e){let t;switch(e){case"sandbox":case"production":t="https://desk.zoho.com/api/v1";break;default:t=e;break}return t}var id=Q("ZohoDesk",{logDataArrayErrors:!1});async function sd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Qi(t,e)),o}function Qi(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var es=pe(Qi),ts=ee(sd,id);var cd="X-Rate-Limit-Remaining-v3",ud="Retry-After",pd=200;function ld(e){let t=e.get(cd),o;if(t!=null){let r=Number(t),n,a=e.get(ud);if(a!=null){let i=Number(a);Number.isNaN(i)||(n=new Date(Date.now()+i*K))}Number.isNaN(r)||(o={remaining:r,resetAt:n})}return o}function os(e){return xt({maxRateLimit:pd,...e,readRateLimitDetails:ld})}function rs(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=os(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`,orgId:i.orgId}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoDeskConfig missing api url.");if(!i.orgId)throw new Error("ZohoDeskConfig missing orgId.");let s=Xi(i.apiUrl),c=a({apiUrl:s,orgId:i.orgId}),u=ts(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:es,handleFetchJsonParseErrorFunction:B});return{deskContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}var ns=25;function se(e,t){return Ke({...t,fetch:e,readFetchPageResultInfo:function(o){let r=o.data?.length??0;return{hasNext:r>0&&r>=ns}},buildInputForNextPage:function(o,r,n){let a=n.maxItemsPerPage??r.limit??ns,s=(r.from??1)+a;return{...r,from:s,limit:a}}})}function _e(e,t){return{method:e,body:t??void 0}}function Qe(e,t){return T(e,{omitKeys:t})}function Ht(e){let t;return e&&(t=O(A(e))),t}function Rr(e){return t=>{let{include:o,...r}=t,n=Qe([{...r,include:Ht(o)}]);return e.fetchJson(`/tickets?${n}`,_e("GET")).then(a=>a??{data:[]})}}function as(e){return t=>{let{ticketId:o,include:r}=t,a=Qe([{include:Ht(r)}]).toString(),i=a?"?"+a:"";return e.fetchJson(`/tickets/${o}${i}`,_e("GET"))}}function Cr(e){return t=>{let o=Qe([t]);return e.fetchJson(`/tickets/search?${o}`,_e("GET")).then(r=>r??{data:[]})}}function is(e){return t=>{let{contactId:o,include:r,...n}=t,a=Qe([{...n,include:Ht(r)}]);return e.fetchJson(`/contacts/${o}/tickets?${a}`,_e("GET")).then(i=>i??{data:[]})}}function ss(e){return t=>{let{productId:o,include:r,...n}=t,a=Qe([{...n,include:Ht(r)}]);return e.fetchJson(`/products/${o}/tickets?${a}`,_e("GET")).then(i=>i??{data:[]})}}function cs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/metrics`,_e("GET"))}function us(e){return t=>{let o=Qe([{agentIds:O(A(t.agentIds)),departmentId:t.departmentId}]);return e.fetchJson(`/agentsTicketsCount?${o}`,_e("GET"))}}function ps(e){return se(Rr(e))}function ls(e){return se(Cr(e))}function ds(e){return{method:e}}function hs(e){return t=>{let o=T([t]);return e.fetchJson(`/departments?${o}`,ds("GET")).then(r=>r??{data:[]})}}function ms(e){return t=>e.fetchJson(`/departments/${t.departmentId}`,ds("GET"))}function Tr(e){return{method:e}}function ys(e){let t;return e&&(t=O(A(e))),t}function Zr(e){return t=>{let{include:o,...r}=t,n=T([{...r,include:ys(o)}]);return e.fetchJson(`/contacts?${n}`,Tr("GET")).then(a=>a??{data:[]})}}function fs(e){return t=>{let{contactId:o,include:r}=t,a=T([{include:ys(r)}]).toString(),i=a?"?"+a:"";return e.fetchJson(`/contacts/${o}${i}`,Tr("GET"))}}function gs(e){return t=>{let o=T([{contactIds:O(A(t.contactIds))}]);return e.fetchJson(`/contacts/contactsByIds?${o}`,Tr("GET")).then(r=>r??[])}}function Rs(e){return se(Zr(e))}function Ft(e,t){return{method:e,body:t??void 0}}function Cs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags`,Ft("GET")).then(o=>o??[])}function Ts(e){return t=>{let o={tags:A(t.tags).map(r=>({name:r}))};return e.fetchJson(`/tickets/${t.ticketId}/tags`,Ft("POST",o)).then(r=>r??[])}}function Zs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags/${t.tagId}`,Ft("DELETE"))}function As(e){return t=>{let o=T([t]);return e.fetchJson(`/tags/search?${o}`,Ft("GET")).then(r=>r??{data:[]})}}function xs(e){return t=>{let o=T([t]);return e.fetchJson(`/ticketTags?${o}`,Ft("GET")).then(r=>r??{data:[]})}}function Ar(e,t){return{method:e,body:t??void 0}}function Ss(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/followers`,Ar("GET")).then(o=>o??[])}function Fs(e){return t=>{let o={ids:A(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,Ar("POST",o))}}function bs(e){return t=>{let o={ids:A(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,Ar("DELETE",o))}}function Is(e,t){return{method:e,body:t??void 0}}function dd(e){let t;return e&&(t=O(A(e))),t}function ks(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:dd(r)}]);return e.fetchJson(`/tickets/${o}/attachments?${a}`,Is("GET")).then(i=>i??{data:[]})}}function Os(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/attachments/${t.attachmentId}`,Is("DELETE"))}function Bt(e,t){return{method:e,body:t??void 0}}function Ds(e){let t;return e&&(t=O(A(e))),t}function Es(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:Ds(r)}]);return e.fetchJson(`/tickets/${o}/comments?${a}`,Bt("GET")).then(i=>i??{data:[]})}}function Ps(e){return t=>{let{ticketId:o,commentId:r,include:n}=t,i=T([{include:Ds(n)}]).toString(),s=i?"?"+i:"";return e.fetchJson(`/tickets/${o}/comments/${r}${s}`,Bt("GET"))}}function Ms(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/comments`,Bt("POST",r))}}function ws(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/comments/${t.commentId}`,Bt("DELETE"))}function bt(e,t){return{method:e,body:t??void 0}}function _s(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timer`,bt("GET"))}function Ns(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/timer`,bt("POST",r))}}function Us(e){return t=>{let{ticketId:o,...r}=t,n=T([r]);return e.fetchJson(`/tickets/${o}/timeEntries?${n}`,bt("GET")).then(a=>a??{data:[]})}}function vs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/${t.timeEntryId}`,bt("GET"))}function Ls(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/summation`,bt("GET"))}function Gs(e){return{method:e}}function Ks(e){let t;return e&&(t=O(A(e))),t}function xr(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:Ks(r)}]);return e.fetchJson(`/tickets/${o}/threads?${a}`,Gs("GET")).then(i=>i??{data:[]})}}function Vs(e){return t=>{let{ticketId:o,threadId:r,include:n}=t,i=T([{include:Ks(n)}]).toString(),s=i?"?"+i:"";return e.fetchJson(`/tickets/${o}/threads/${r}${s}`,Gs("GET"))}}function Js(e){return se(xr(e))}function hd(e){return{method:e}}function md(e){let t;return e&&(t=O(A(e))),t}function Sr(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:md(r)}]);return e.fetchJson(`/tickets/${o}/activities?${a}`,hd("GET")).then(i=>i??{data:[]})}}function zs(e){return se(Sr(e))}function Yt(e){return{method:e}}function js(e){let t;return e&&(t=O(A(e))),t}function Fr(e){return t=>{let{include:o,...r}=t,n=T([{...r,include:js(o)}]);return e.fetchJson(`/agents?${n}`,Yt("GET")).then(a=>a??{data:[]})}}function qs(e){return t=>{let{agentId:o,include:r}=t,a=T([{include:js(r)}]).toString(),i=a?"?"+a:"";return e.fetchJson(`/agents/${o}${i}`,Yt("GET"))}}function Ws(e){return t=>{let o=T([{agentIds:O(A(t.agentIds))}]);return e.fetchJson(`/agentsByIds?${o}`,Yt("GET")).then(r=>r?.data??[])}}function $s(e){return()=>e.fetchJson("/myinfo",Yt("GET"))}function Hs(e){return se(Fr(e))}var yd="https://accounts.zoho.com",fd="https://accounts.zoho.eu",gd="https://accounts.zoho.in",Rd="https://accounts.zoho.com.au",Cd="https://accounts.zoho.jp",Td="https://accounts.zoho.uk",Zd="https://accounts.zohocloud.ca",Ad="https://accounts.zoho.sa",xd={us:yd,eu:fd,in:gd,au:Rd,jp:Cd,uk:Td,ca:Zd,sa:Ad};function Bs(e){return xd[e]??e}var Ys="/oauth/v2/token";function Xt(e){return t=>{let{clientId:o,clientSecret:r,refreshToken:n}=e.config,{client:a,refreshToken:i}=t??{},s=a?.clientId??o,c=a?.clientSecret??r,d=T({grant_type:"refresh_token",client_id:s,client_secret:c,refresh_token:i??n});return e.fetchJson(`${Ys}?${d}`,Sd("POST"))}}function Sd(e,t){return{method:e,body:t}}function Fd(e){return t=>X.makeFetch({baseUrl:t.apiUrl,baseRequest:{headers:{"Content-Type":"application/json"}},fetchHandler:e,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}function bd(e,t){let o=Ha(e,t),r=Y(o,{interceptJsonResponse:$a,handleFetchJsonParseErrorFunction:B});return{fetch:o,fetchJson:r}}function Xs(e){let t=be(),{logZohoServerErrorFunction:o,fetchFactory:r=Fd(t)}=e;return n=>{if(n.refreshToken)if(n.clientId){if(!n.clientSecret)throw new Error("ZohoAccountsConfig missing clientSecret.")}else throw new Error("ZohoAccountsConfig missing clientId.");else throw new Error("ZohoAccountsConfig missing refreshToken.");let a=Bs(n.apiUrl??"us"),i=r({apiUrl:a}),{fetch:s,fetchJson:c}=bd(i,o),u=async()=>{let m=Date.now(),{access_token:C,api_domain:y,scope:R,expires_in:f}=await Xt(h)();return{accessToken:C,apiDomain:y,expiresIn:f,expiresAt:new Date(m+f*K),scope:R}};u.resetAccessToken=async()=>n.accessTokenCache?.clearCachedToken();let d=Id({tokenRefresher:u,accessTokenCache:n.accessTokenCache}),h={fetch:s,fetchJson:c,loadAccessToken:d,config:{...n,apiUrl:a}};return{accountsContext:h}}}function Id(e){let{tokenRefresher:t,accessTokenCache:o,tokenExpirationBuffer:r}=e,n=r??Re,a=null,i=async()=>{a=null},s=async()=>{if(!a){let c=await o?.loadCachedToken();c&&(a=c)}if(a!=null&&Date.now()+n>=a.expiresAt.getTime()&&(a=null),!a){try{a=await t()}catch(c){throw console.error("zohoAccountsZohoAccessTokenFactory(): Failed retrieving new token from tokenRefresher: ",c),new Be("Token Refresh Failed")}try{await o?.updateCachedToken(a)}catch{}}return a};return s.resetAccessToken=i,s}var Qs="ZANALYTICS-ORGID";function ec(e){let t;switch(e){case"sandbox":case"production":t="https://analyticsapi.zoho.com/restapi/v2";break;default:t=e;break}return t}var kd="CONFIG",Od="application/x-www-form-urlencoded";function tc(e){return e==null?"":T({[kd]:JSON.stringify(e)}).toString()}function ke(e){let t=tc(e);return t?`?${t}`:""}function G(e,t){return{method:e,body:t??void 0}}function Qt(e,t){return{method:e,headers:{"Content-Type":Od},body:tc(t)}}var Dd="failure",Ed="8535",Pd="8083",Md="6045",wd=["6043","6044"],br=class extends U{};function oc(e){return e?.status===Dd}function _d(e){let{summary:t,data:o}=e,r=o?.errorCode;return{code:r==null?t??"":String(r),message:o?.errorMessage??t??"",details:{summary:t}}}function rc(e,t){let o;if(oc(e)){let r=_d(e),n={error:r};switch(r.code){case Ed:o=new v(r,n,t);break;case Pd:o=new br(r,n,t);break;case Md:o=new Ce(r,n,t);break;default:o=wd.includes(r.code)?new Ce(r,n,t):new U(r,n,t);break}}else o=te(e,t);return o}var Nd=Q("ZohoAnalytics",{logDataArrayErrors:!1});async function Ud(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=rc(t,e)),o}var nc=(e,t)=>{if(oc(e)){let o=rc(e,new Ze(t));if(o)throw o}return e},ac=ee(Ud,Nd);var vd=100;var Ld=Re;function ic(e){return xt({maxRateLimit:vd,resetPeriod:Ld,...e,readRateLimitDetails:nr,enabledWithoutRateLimitDetails:!0})}var Gd="1001",Kd="1002";var Vd="1004";var Jd=K*2,zd=150;function jd(e){return e===Gd||e===Kd}function Oe(e){return e===Vd}function eo(e){let{loadJob:t,readJobCode:o,pollWait:r=Jd,maxPolls:n=zd}=e;return Un({next:async a=>(a>0&&await mt(r),t()),checkContinue:(a,i)=>a!=null&&jd(o(a))&&i<n})}var qd=65279;function Wd(e,t){let o=e.codePointAt(0)===qd?e.slice(1):e,r=[],n=[],a="",i=!1,s=!1,c=0;for(;c<o.length;){let u=o[c];i?u==='"'?o[c+1]==='"'?(a+='"',c+=2):(i=!1,c+=1):(a+=u,c+=1):u==='"'&&a===""?(i=!0,s=!0,c+=1):u===t?(n.push(a),a="",s=!0,c+=1):u===`
|
|
8
|
+
`:void 0;d({mainContent:P,pickContent:M,append:F})})};s={mainPath:a,pickPath:i,writePage:y=>{let f=o==="concat"&&!(c===0);t==="raw"?h(y,f):t==="page_by_line"?g(y,f):m(y,f),c+=1},close:()=>{}}}else s={mainPath:void 0,pickPath:void 0,writePage:()=>{},close:()=>{}};return s}async function Al(e){let{initialInput:t,requestedPages:o,fetchPage:r,adapter:n,stream:a,shouldCollectPages:i,shouldCollectRecords:s}=e,c={pagesFetched:0,totalRecords:0,hasMorePagesAvailable:!1,lastResult:void 0,lastInput:t,collectedPages:[],collectedRecords:[]},u=t;for(let d=0;d<o;d++){let h=await r(u);if(c.pagesFetched+=1,c.totalRecords+=n.countOf(h),c.lastResult=h,c.lastInput=u,a.writePage(h),i)c.collectedPages.push(h);else if(s)for(let m of h.data??[])c.collectedRecords.push(m);c.hasMorePagesAvailable=n.hasMorePagesAvailable(u,h);let g=n.nextInput(u,h);if(!g)break;u=g}return c}function xl(e){let{multiplePagesOutput:t,summaryMeta:o,state:r,adapter:n,pickFilter:a}=e;if(t==="meta")console.log(JSON.stringify({ok:!0,meta:o}));else if(t==="pages"){let i=a?r.collectedPages.map(s=>({...s,data:Ze(s.data,a)})):r.collectedPages;console.log(JSON.stringify({ok:!0,data:i,meta:o}))}else{let i=r.lastResult?n.metaOf(r.lastInput,r.lastResult):{},s=a?Ze(r.collectedRecords,a):r.collectedRecords;console.log(JSON.stringify({ok:!0,data:s,meta:{...i,...o}}))}}async function b(e){let{initialInput:t,fetchPage:o,adapter:r,multiplePagesOutput:n,dumpOutput:a,dumpMerge:i}=e,s=Math.max(1,Math.floor(e.multiplePages||1)),c;if(s<=1)c={handled:!1,result:await o(t)};else{let u=Ot();u.dumpDir||console.error("[cli] warning: --multiple-pages used without --dump-dir; results not persisted.");let d=na({dumpOutput:a,dumpMerge:i}),h;try{h=await Al({initialInput:t,requestedPages:s,fetchPage:o,adapter:r,stream:d,shouldCollectPages:n==="pages",shouldCollectRecords:n==="merged_page"})}finally{d.close()}let g={pagesFetched:h.pagesFetched,totalRecords:h.totalRecords,hasMorePagesAvailable:h.hasMorePagesAvailable,dumpFile:d.mainPath??null};d.pickPath&&(g.dumpFilePick=d.pickPath),xl({multiplePagesOutput:n,summaryMeta:g,state:h,adapter:r,pickFilter:u.pick}),c={handled:!0}}return c}import Vy from"yargs";import{hideBin as Jy}from"yargs/helpers";import{writeFile as Sl,mkdirSync as Fl}from"node:fs";import{join as No}from"node:path";import{homedir as bl}from"node:os";var Ct=["recruit","crm","desk","sign","analytics"],Il=new Set(["sign","analytics"]),Me=new Set(["desk","analytics"]);function Uo(){return No(bl(),".zoho-cli")}function Tt(){return No(Uo(),"config.json")}function Zt(){return No(Uo(),".tokens.json")}function Pe(e,t){return(t?process.env[`ZOHO_${t}_${e}`]:void 0)??process.env[`ZOHO_${e}`]}async function $(){let e=Tt(),t=await xe(e),o=Pe("ACCOUNTS_CLIENT_ID"),r=Pe("ACCOUNTS_CLIENT_SECRET"),n=Pe("ACCOUNTS_REFRESH_TOKEN"),a=o&&r&&n,i;if(!t&&!a)i=void 0;else{let s={clientId:o??t?.shared?.clientId??"",clientSecret:r??t?.shared?.clientSecret??"",refreshToken:n??t?.shared?.refreshToken??"",region:Pe("ACCOUNTS_URL")??t?.shared?.region,apiMode:Pe("API_URL")??t?.shared?.apiMode},c=u=>{let d=u.toUpperCase(),h=Pe("API_URL",d),g=Me.has(u)?Pe("ORG_ID",d):void 0,m=t?.[u],C=process.env[`ZOHO_${d}_ACCOUNTS_CLIENT_ID`],y=process.env[`ZOHO_${d}_ACCOUNTS_CLIENT_SECRET`],R=process.env[`ZOHO_${d}_ACCOUNTS_REFRESH_TOKEN`],f=C||y||R,S;return!m&&!f&&!g?S=void 0:S={clientId:C??m?.clientId,clientSecret:y??m?.clientSecret,refreshToken:R??m?.refreshToken,apiUrl:h??m?.apiUrl,orgId:g??m?.orgId},S};i={shared:s,recruit:c("recruit")??t?.recruit,crm:c("crm")??t?.crm,desk:c("desk")??t?.desk,sign:c("sign")??t?.sign,analytics:c("analytics")??t?.analytics,output:t?.output}}return i}function we(e,t){let o=e[t],r=e.shared,n=!Il.has(t),a=o?.clientId??(n?r.clientId:void 0),i=o?.clientSecret??(n?r.clientSecret:void 0),s=o?.refreshToken??(n?r.refreshToken:void 0),c;return!a||!i||!s?c=void 0:c={clientId:a,clientSecret:i,refreshToken:s,region:r.region??"us",apiMode:o?.apiUrl??r.apiMode??"production",orgId:o?.orgId},c}async function kl(e){let t=Tt();return Fl(Uo(),{recursive:!0}),new Promise((o,r)=>{Sl(t,JSON.stringify(e,null,2),{},n=>{n?r(n):o()})})}function Ke(e,t){return t==null?e??void 0:{...e,...Tn(t)}}async function ae(e){let t=await $(),o={shared:Ke(t?.shared,e.shared),recruit:Ke(t?.recruit,e.recruit),crm:Ke(t?.crm,e.crm),desk:Ke(t?.desk,e.desk),sign:Ke(t?.sign,e.sign),analytics:Ke(t?.analytics,e.analytics),output:e.output===void 0?t?.output:_o(t?.output,e.output)};return await kl(o),o}async function aa(){await ae({output:{dumpDir:void 0,pick:void 0,commands:void 0}})}async function ia(){let e=Tt(),t=Zt();await yt(e),await yt(t)}function ue(e){return Ct.filter(t=>{let o=we(e,t);return o!=null&&(t!=="desk"||o.orgId!=null)})}import{Inject as Uc,Injectable as mh}from"@nestjs/common";function Ve(){return{data:[],info:{page:1,per_page:100,count:0,more_records:!1}}}function j(e,t){return Ge({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.info?.more_records??!1}},buildInputForNextPage:function(o,r,n){return{...r,page:Kn(o),per_page:n.maxItemsPerPage??r.per_page}}})}function Lt(e){let t;switch(e){case"sandbox":t="https://recruitsandbox.zoho.com/recruit";break;case"production":t="https://recruit.zoho.com/recruit";break;default:t=e;break}return t}var Je="Candidates",sa="Job_Openings",Gt="Notes",ca="Emails",At="Attachments";function Kt(e){let t;if(e!=null)switch(typeof e){case"string":t=e;break;case"object":{let o;Array.isArray(e)?o={and:[e]}:o=e,t=Vt(o);break}default:break}return t}function Vt(e){function t(i){let s;return typeof i=="object"?Array.isArray(i)?s=i.map(vo):i&&(s=Vt(i)):s=i,s}function o(i,s){return i.length>1?`(${i.join(s)})`:i[0]}function r(i,s){let c=ce(i.map(t)).flatMap(A);return o(c,s)}let n=e.or?r(e.or,"or"):void 0,a=n;return e.and&&(a=r([r(e.and,"and"),n],"and")),a}var ua=bn({escapeTargets:["(",")",","],escapeCharacter:e=>`\\\\${e}`});function vo(e){let t=ua(e.value);return`(${e.field}:${e.filter}:${t})`}var pa=Kt;import{BaseError as Kl}from"make-error";import{BaseError as Dl}from"make-error";var El="__internal_data_array_blank_error";function Pl(e){return Array.isArray(e?.data)}var qe="success";function ie(e){let t=typeof e,o;return t==="object"?o=e:o={code:e,message:""},o}var Fe=class extends Dl{constructor(o){super(o.message);this.error=o}error;get code(){return this.error.code}},U=class extends Fe{constructor(o,r,n){super(o);this.data=o;this.errorResponseData=r;this.responseError=n}data;errorResponseData;responseError},ze=class extends U{constructor(t,o){super({code:El,message:"Check data for individual errors."},t,o)}get errorDataArray(){return this.errorResponseData.data}};function Q(e,t){let{logDataArrayErrors:o=!1}=t??{};return r=>{r instanceof ze&&!o||(r instanceof U?console.log(`${e}Error(${r.responseError.response.status}): `,{error:r,errorData:r.data}):r instanceof Fe?console.log(`${e}Error(code:${r.code}): `,{error:r}):console.log(`${e}Error(name:${r.name}): `,{error:r}))}}function ee(e,t){return(o,r=t,n)=>async(a,i)=>{try{return await o(a,i)}catch(s){if(s instanceof Ae){let c=await e(s);if(c)throw r(c),n?.(c),c}throw s}}}function pe(e){return(t,o)=>{if(t?.error!=null){let n=new Ae(o),a=e(t,n);if(a)throw a}return t}}var Ml="INTERNAL_ERROR",wl="INVALID_TOKEN",v=class extends U{},la="FAILURE",Lo=class extends U{},_l="4834",je=class extends U{},Nl="INVALID_QUERY",Go=class extends U{get details(){return this.error.details}},Jt="MANDATORY_NOT_FOUND",be="DUPLICATE_DATA",zt="INVALID_DATA",Ul="TOO_MANY_REQUESTS",Ko=429,vl="X-RATELIMIT-LIMIT",Ll="X-RATELIMIT-REMAINING",Gl="X-RATELIMIT-RESET",da=100,ha=Re;function Vo(e){let t=e.get(vl),o=e.get(Ll),r=e.get(Gl),n=null;if(t!=null&&o!=null&&r!=null){let a=Number(t),i=Number(o),s=Number(r),c=new Date(s);n={limit:a,remaining:i,reset:s,resetAt:c}}return n}var Ce=class extends U{get headerDetails(){return Vo(this.responseError.response.headers)}};function te(e,t){let o;if(Pl(e))o=new ze(e,t);else{let r=Te(e,t);if(r){let n=ie(r);switch(n.code){case Ml:o=new Lo(n,e,t);break;case wl:o=new v(n,e,t);break;case _l:o=new je(n,e,t);break;case Nl:o=new Go(n,e,t);break;case Ul:o=new Ce(n,e,t);break;default:o=new U(n,e,t);break}}}return o}function Te(e,t){return e.error??e.data?.[0]??(t.response.ok?void 0:e)}var ma="ALREADY_ASSOCIATED",Jo=class extends Kl{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}moduleName;recordId},We=class extends Fe{},zo=class extends We{},jo=class extends We{},jt=class extends We{get invalidFieldDetails(){return this.error.details}},qo=class extends jt{};function ya(e){let t;switch(e.code){case zt:{let o=new jt(e);o.invalidFieldDetails.id?t=new qo(e):t=o;break}case Jt:t=new zo(e);break;case be:t=new jo(e);break;default:t=new We(e);break}return t}function fa(e,t){return o=>{if(!o?.data?.length)throw new Jo(e,t);return o}}var Vl=Q("ZohoRecruit");async function Jl(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=ga(t,e)),o}function ga(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var Ra=pe(ga),Ca=ee(Jl,Vl);import{BaseError as zl}from"make-error";function $o(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v2/${n}${t}`,L(o,{data:A(r)})).then(a=>{let i=Array.isArray(r),s=le(A(r),a.data),c;if(i)c=s;else{let{successItems:u,errorItems:d}=s;if(d[0]!=null)throw ya(d[0].result);c=u[0].result.details}return c}))}function Ta(e){return $o(e,"","POST")}function Za(e){return $o(e,"/upsert","POST")}function Aa(e){return $o(e,"","PUT")}function xa(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v2/${o}?${T({ids:t,wf_trigger:r})}`,L("DELETE")).then(jl)}function Sa(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}`,L("GET")).then(fa(t.module)).then(o=>o.data[0])}function Fa(e){return(t=>e.fetchJson(`/v2/${t.module}?${Ma(t).toString()}`,L("GET")))}function Ho(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=pa(o.criteria);r.criteria=n}if(!r.word&&!o.criteria&&!o.email&&!o.phone)throw new Error("At least one of word, criteria, email, or phone must be provided");return Ma(r)}return o=>e.fetchJson(`/v2/${o.module}/search?${t(o).toString()}`,L("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function ba(e){return j(Ho(e))}function $e(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v2/${n.module}/${n.id}/${o}?${Xo(n).toString()}`,L("GET")).then(a=>a??(r===!1?a:Ve()))}}function Bo(e){return $e(e)({targetModule:ca})}function Ia(e){return j(Bo(e))}function Yo(e){return $e(e)({targetModule:At})}function ka(e){return j(Yo(e))}var hC=20*1024*1024;function Oa(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n,attachmentUrl:a}=t,i={attachments_category_id:O(o),attachments_category:O(r)};if(!i.attachments_category_id?.length&&!i.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let s=`/v2/${t.module}/${t.id}/${At}?${T(i).toString()}`,c;if(n!=null){let u=new FormData;u.append("file",n),c=e.fetch(s,{method:"POST",headers:{"Content-Type":""},body:u})}else if(a){let u=`${s}&${T({attachment_url:a}).toString()}`;c=e.fetch(u,{method:"POST"})}else throw new Error("file or attachmentUrl must be provided.");return c}}function Da(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${At}/${t.attachment_id}`,{method:"GET"}).then(Mt)}function Ea(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${At}/${t.attachment_id}`,{method:"DELETE"})}var Wo=class extends zl{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}error};function Pa(e){return t=>{let r=T(t.params).toString(),n=!!t.apiKey,a=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),i=`/v2/functions/${t.functionName}/actions/execute?${a}`,c=`${n&&t.apiUrl!=null?Lt(t.apiUrl):""}${i}`;return e.fetchJson(c,L("POST")).then(u=>{if(u.code!=="success")throw new Wo(u);return u.details})}}function Ma(...e){return T(e,{omitKeys:"module"})}function Xo(...e){return T(e,{omitKeys:["id","module"]})}function L(e,t){return{method:e,body:t??void 0}}function jl(e){let{data:t}=e,o=[],r=[];return t.forEach(a=>{a.status===qe?o.push(a):r.push(a)}),{...e,successItems:o,errorItems:r}}function le(e,t){let o=[],r=[];return e.forEach((a,i)=>{let s=t[i];s.status===qe?o.push({input:a,result:s}):r.push({input:a,result:s})}),{successItems:o,errorItems:r}}function wa(e){return t=>e.fetchJson(`/v2/${Je}/actions/associate`,L("PUT",{data:A(t)})).then(o=>{let r=o.data.map(()=>t),n=le(r,o.data),{included:a,excluded:i}=Ue(n.errorItems,s=>s.result.code===la&&s.result.details.error[0].code===ma);return{...n,errorItems:i,alreadyAssociatedErrorItems:a,allErrorItems:n.errorItems}})}function _a(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}/associate?${Xo(t).toString()}`,L("GET")).then(o=>o??Ve())}function Qo(e){let t=_a(e);return o=>t({...o,module:Je})}function Na(e){return j(Qo(e))}function er(e,t=sa){let o=_a(e);return r=>o({...r,module:t})}function Ua(e){return j(er(e))}function tr(e){return t=>e.fetchJson(`/v2/${Gt}`,L("POST",{data:t.data})).then(o=>le(A(t.data),o.data))}function va(e){return t=>e.fetchJson(`/v2/${Gt}?${T({ids:t.ids})}`,L("DELETE")).then(o=>le(A(t.ids),o.data))}function or(e){return $e(e)({targetModule:Gt})}function La(e){return j(or(e))}function Ga(e){let t=tr(e);return o=>{let{module:r,id:n,notes:a}=o,i={data:A(a).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(i)}}function Ja(e){return t=>e.fetchJson(`/v2/settings/tags?${T({module:t.module})}`,L("POST",{tags:A(t.tags)})).then(o=>{let r=le(A(t.tags),o.tags),{included:n,excluded:a}=Ue(r.errorItems,i=>i.result.code===be);return{...r,errorItems:a,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function za(e){return t=>e.fetchJson(`/v2/settings/tags?${T({module:t.module,my_tags:t.my_tags})}`,L("GET")).then(o=>({...o,data:o.tags}))}var Ka=100;function ja(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>Ka)throw new Error(`Cannot add tags to more than ${Ka} records at once.`);return e.fetchJson(`/v2/${Je}/actions/add_tags?${T({tag_names:t.tag_names,ids:t.ids})}`,L("POST")).then(o=>{let r=o.data.map(()=>t);return le(r,o.data)})}}var Va=100;function qa(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>Va)throw new Error(`Cannot remove tags from more than ${Va} records at once.`);return e.fetchJson(`/v2/${Je}/actions/remove_tags?${T({tag_names:t.tag_names,ids:t.ids})}`,L("POST")).then(o=>{let r=o.data.map(()=>t);return le(r,o.data)})}}var ql="invalid_code",Wl="invalid_client",rr=class extends ne{constructor(o){super(`ZohoAccountsAccessTokenError: ${o}`);this.errorCode=o}errorCode},He=class extends ne{constructor(o){super(`Failed to retrieve proper authentication for the API call. Reason: ${o}`);this.reason=o}reason},$l=Q("ZohoAccounts");async function Hl(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Wa(t,e)),o}function Wa(e,t){let o,r=e.error;if(r){let n=ie(r);switch(n.code){case ql:case Wl:o=new rr(n.code);break;default:o=te(e,t);break}}return o}var $a=pe(Wa),Ha=ee(Hl,$l);function de(e){return async()=>{let t=await e();if(!t.accessToken)throw new He;return t.accessToken}}var Bl=e=>{let t="limit"in e?e.limit:void 0,o="resetAt"in e?e.resetAt:void 0,r=t==null?"":" The limit is "+String(t)+" requests per reset period.",n=o==null?"":" Will be reset at "+String(o)+".";console.warn("zohoRateLimitedFetchHandler(): Too many requests made."+r+n)};function xt(e){let{readRateLimitDetails:t,enabledWithoutRateLimitDetails:o=!1}=e,r=e.onTooManyRequests===!1?void 0:e.onTooManyRequests??Bl,n=e.maxRateLimit??da,a=e.resetPeriod??ha;function i(u,d){return{limit:u,startLimitAt:Math.ceil(u/10),cooldownRate:1.2*(u/(a/K)),exponentRate:1.08,maxWaitTime:K*10,resetPeriod:a,resetAt:d}}let s=i(n),c=Ln(s);return Hn({rateLimiter:c,maxRetries:e.maxRetries,updateWithResponse:function(u,d){let h=t(u.headers),g=!1,m=o;if(h){let{remaining:C,limit:y,resetAt:R}=h;if(y!=null&&y!==n){let f=i(y,R??void 0);c.setConfig(f,!1)}if(c.setRemainingLimit(C),R&&c.setNextResetAt(R),m=!0,u.status===Ko){g=!0;try{r?.(h,u,d)}catch{}}}else if(o&&u.status===Ko){g=!0;try{r?.({remaining:0},u,d)}catch{}}return c.setEnabled(m),g}})}function Ie(e){return xt({...e,readRateLimitDetails:nr})}function nr(e){let t=Vo(e),o;return t&&(o={remaining:t.remaining,limit:t.limit,resetAt:t.resetAt}),o}function Ba(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=Ie(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=Lt(i.apiUrl),c=a({apiUrl:s}),u=Ca(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:Ra,handleFetchJsonParseErrorFunction:B});return{recruitContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function qt(e){let t;switch(e){case"sandbox":t="https://crmsandbox.zoho.com/crm";break;case"production":t="https://www.zohoapis.com/crm";break;default:t=e;break}return t}var Wt="Notes",Ya="Emails",St="Attachments";var Xa=Kt;import{BaseError as Yl}from"make-error";var ar=class extends Yl{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}moduleName;recordId},Be=class extends Fe{},ir=class extends Be{},sr=class extends Be{},$t=class extends Be{get invalidFieldDetails(){return this.error.details}},cr=class extends $t{};function Qa(e){let t;switch(e.code){case zt:{let o=new $t(e);o.invalidFieldDetails.api_name==="id"?t=new cr(e):t=o;break}case Jt:t=new ir(e);break;case be:t=new sr(e);break;default:t=new Be(e);break}return t}function ei(e,t){return o=>{if(!o?.data?.length)throw new ar(e,t);return o}}var Xl=Q("ZohoCrm",{logDataArrayErrors:!1});async function Ql(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=ti(t,e)),o}function ti(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var oi=pe(ti),ri=ee(Ql,Xl);import{BaseError as ed}from"make-error";function pr(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v8/${n}${t}`,V(o,{data:A(r)})).catch(Ri).then(a=>{let i=Array.isArray(r),s=ke(A(r),a.data),c;if(i)c=s;else{let{successItems:u,errorItems:d}=s;if(d[0]!=null)throw Qa(d[0].result);c=u[0].result.details}return c}))}function ni(e){return pr(e,"","POST")}function ai(e){return pr(e,"/upsert","POST")}function ii(e){return pr(e,"","PUT")}function si(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v8/${o}?${T({ids:t,wf_trigger:r})}`,V("DELETE")).catch(Ri).then(od)}function ci(e){return t=>e.fetchJson(`/v8/${t.module}/${t.id}`,V("GET")).then(ei(t.module)).then(o=>o.data[0])}function ui(e){return(t=>e.fetchJson(`/v8/${t.module}?${gi(t).toString()}`,V("GET")))}function lr(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=Xa(o.criteria);r.criteria=n}if(!r.word&&!o.cvid&&!o.criteria&&!o.email&&!o.phone)throw new Error("At least one of word, cvid, criteria, email, or phone must be provided");return gi(r)}return o=>e.fetchJson(`/v8/${o.module}/search?${t(o).toString()}`,V("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function pi(e){return j(lr(e))}function Ye(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v8/${n.module}/${n.id}/${o}?${td(n).toString()}`,V("GET")).then(a=>a??(r===!1?a:Ve()))}}function dr(e){let t=Ye(e)({targetModule:Ya});return o=>t(o).then(r=>{let n=r.data??r.Emails;return{...r,data:n}})}function li(e){return j(dr(e))}function hr(e){return Ye(e)({targetModule:St})}function di(e){return j(hr(e))}var dT=20*1024*1024;function hi(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n}=t,a={attachments_category_id:O(o),attachments_category:O(r)};if(!a.attachments_category_id?.length&&!a.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let i=`/v8/${t.module}/${t.id}/${St}?${T(a).toString()}`,s=new FormData;return s.append("file",n),e.fetch(i,{method:"POST",headers:{"Content-Type":""},body:s})}}function mi(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${St}/${t.attachment_id}`,{method:"GET"}).then(Mt)}function yi(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${St}/${t.attachment_id}`,{method:"DELETE"})}var ur=class extends ed{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}error};function fi(e){return t=>{let r=T(t.params).toString(),n=!!t.apiKey,a=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),i=`/v8/functions/${t.functionName}/actions/execute?${a}`,c=`${n&&t.apiUrl!=null?qt(t.apiUrl):""}${i}`;return e.fetchJson(c,V("POST")).then(u=>{if(u.code!=="success")throw new ur(u);return u.details})}}function gi(...e){return T(e,{omitKeys:"module"})}function td(...e){return T(e,{omitKeys:["id","module"]})}function V(e,t){return{method:e,body:t??void 0}}function Ri(e){let t;if(e instanceof ze)t={data:e.errorDataArray};else throw e;return t}function od(e){let{data:t}=e,o=[],r=[];return t.forEach(a=>{a.status===qe?o.push(a):r.push(a)}),{...e,successItems:o,errorItems:r}}function ke(e,t){let o=[],r=[];return e.forEach((a,i)=>{let s=t[i];s.status===qe?o.push({input:a,result:s}):r.push({input:a,result:s})}),{successItems:o,errorItems:r}}function mr(e){return t=>e.fetchJson(`/v2/${Wt}`,V("POST",{data:t.data})).then(o=>ke(A(t.data),o.data))}function Ci(e){return t=>e.fetchJson(`/v2/${Wt}?${T({ids:t.ids})}`,V("DELETE")).then(o=>ke(A(t.ids),o.data))}function yr(e){return Ye(e)({targetModule:Wt})}function Ti(e){return j(yr(e))}function Zi(e){let t=mr(e);return o=>{let{module:r,id:n,notes:a}=o,i={data:A(a).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(i)}}function xi(e){return t=>e.fetchJson(`/v8/settings/tags?${T({module:t.module})}`,V("POST",{tags:A(t.tags)})).catch(o=>{let r;if(o instanceof U){let n=o.data?.tags;Array.isArray(n)&&(r={tags:n})}if(!r)throw o;return r}).then(o=>{let r=ke(A(t.tags),o.tags),{included:n,excluded:a}=Ue(r.errorItems,i=>i.result.code===be);return{...r,errorItems:a,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function Si(e){return t=>e.fetchJson(`/v8/settings/tags/${t.id}`,V("DELETE")).then(o=>o.tags)}function Fi(e){return t=>e.fetchJson(`/v8/settings/tags?${T({module:t.module,my_tags:t.my_tags})}`,V("GET")).then(o=>({...o,data:o.tags}))}var Ai=100;function bi(e){return t=>e.fetchJson(`/v8/${t.module}/actions/add_tags`,V("POST",Ii(t))).then(o=>{let r=o.data.map(()=>t);return ke(r,o.data)})}function Ii(e){if(Array.isArray(e.ids)&&e.ids.length>Ai)throw new Error(`Cannot add/remove tags from more than ${Ai} records at once.`);let t=[...A(e.tags)],o=new Set(t.map(r=>r.name));return e.tag_names&&A(e.tag_names).forEach(r=>{o.has(r)||(t.push({name:r}),o.add(r))}),{tags:t,ids:A(e.ids)}}function ki(e){return t=>e.fetchJson(`/v8/${t.module}/actions/remove_tags`,V("POST",Ii(t))).then(o=>{let r=o.data.map(()=>t);return ke(r,o.data)})}function Oi(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=Ie(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=qt(i.apiUrl),c=a({apiUrl:s}),u=ri(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:oi,handleFetchJsonParseErrorFunction:B});return{crmContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}var Di="https://signsandbox.zoho.com/api/v1",rd="https://sign.zoho.com/api/v1";function fr(e){let t;switch(e){case"sandbox":t=Di;break;case"production":t=rd;break;default:t=e;break}return t}function Ei(e){let t=fr(e),o;try{o=new URL(t).hostname!==new URL(Di).hostname}catch{o=!0}return o}function Pi(e,t){return Ge({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.page_context?.has_more_rows??!1}},buildInputForNextPage:function(o,r,n){let i=o.result?.page_context,s=n.maxItemsPerPage??r.row_count??i?.row_count??20,c=(i?.start_index??r.start_index??1)+s;return{...r,start_index:c,row_count:s}}})}function he(e,t){return{method:e,body:t??void 0}}function Mi(e){return({requestId:t})=>e.fetchJson(`/requests/${t}`,he("GET"))}function gr(e){return t=>{let{search_columns:o,...r}=t,n={page_context:{...r,...o?{search_columns:o}:{}}};return e.fetchJson({url:"/requests",queryParams:{data:JSON.stringify(n)}},he("GET"))}}function wi(e){let t=gr(e);return Pi(t)}function _i(e){return({requestId:t})=>e.fetchJson(`/requests/${t}/fielddata`,he("GET"))}function Ni(e){return()=>e.fetchJson("/fieldtypes",he("GET"))}function Ui(e){return({requestId:t,...o})=>{let n=T(o).toString(),a=n?`?${n}`:"",i=`/requests/${t}/pdf${a}`;return e.fetch(i,{method:"GET"})}}function vi(e){return({requestId:t})=>e.fetch(`/requests/${t}/completioncertificate`,{method:"GET"})}function Li(e){return({requestData:t,file:o})=>{let r=new FormData;return r.append("data",JSON.stringify({requests:t})),r.append("file",o),e.fetch("/requests",{method:"POST",headers:{"Content-Type":""},body:r}).then(n=>n.json())}}function Gi(e){return({templateId:t,data:o,isQuickSend:r=!0})=>{let n=T({data:JSON.stringify({templates:o})});return e.fetchJson({url:`/templates/${t}/createdocument`,queryParams:{is_quicksend:String(r)}},{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString()})}}function Ki(e){return({templateId:t})=>e.fetchJson(`/templates/${t}`,he("GET"))}function Vi(e){return(t={})=>{let{search_columns:o,...r}=t,n={page_context:{...r,...o?{search_columns:o}:{}}};return e.fetchJson({url:"/templates",queryParams:{data:JSON.stringify(n)}},he("GET"))}}function Ji(e){return({requestId:t,data:o})=>e.fetchJson(`/requests/${t}`,he("PUT",{requests:o}))}function zi(e){return({requestId:t,data:o})=>{let r=o?{requests:o}:void 0;return e.fetchJson(`/requests/${t}/submit`,he("POST",r))}}function ji(e){return({requestId:t,expire_by:o})=>e.fetchJson(`/requests/${t}/extend`,he("PUT",{expire_by:o}))}function qi(e){return({requestId:t,recall_inprogress:o,reason:r})=>{let n={};o!=null&&(n.recall_inprogress=String(o)),r!=null&&(n.reason=r);let a=T(n),i=a.toString().length>0;return e.fetchJson(`/requests/${t}/delete`,{method:"PUT",...i?{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:a.toString()}:{}})}}function Wi(e){return async({requestId:t,actionId:o,host:r})=>{let n=e.config.apiUrl;if(n!=null&&Ei(n)&&!/^https:\/\//i.test(r))throw new Error(`Zoho Sign requires an https embedded-signing host for this environment, but received "${r}".`);return e.fetchJson({url:`/requests/${t}/actions/${o}/embedtoken`,queryParams:{host:r}},he("POST"))}}var nd=Q("ZohoSign",{logDataArrayErrors:!1});async function ad(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=$i(t,e)),o}function $i(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var Hi=pe($i),Bi=ee(ad,nd);function Yi(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=Ie(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoConfig missing api url.");let s=fr(i.apiUrl),c=a({apiUrl:s}),u=Bi(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:Hi,handleFetchJsonParseErrorFunction:B});return{signContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function Xi(e){let t;switch(e){case"sandbox":case"production":t="https://desk.zoho.com/api/v1";break;default:t=e;break}return t}var id=Q("ZohoDesk",{logDataArrayErrors:!1});async function sd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Qi(t,e)),o}function Qi(e,t){let o,r=Te(e,t);if(r)switch(ie(r).code){default:o=te(e,t);break}return o}var es=pe(Qi),ts=ee(sd,id);var cd="X-Rate-Limit-Remaining-v3",ud="Retry-After",pd=200;function ld(e){let t=e.get(cd),o;if(t!=null){let r=Number(t),n,a=e.get(ud);if(a!=null){let i=Number(a);Number.isNaN(i)||(n=new Date(Date.now()+i*K))}Number.isNaN(r)||(o={remaining:r,resetAt:n})}return o}function os(e){return xt({maxRateLimit:pd,...e,readRateLimitDetails:ld})}function rs(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=os(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`,orgId:i.orgId}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoDeskConfig missing api url.");if(!i.orgId)throw new Error("ZohoDeskConfig missing orgId.");let s=Xi(i.apiUrl),c=a({apiUrl:s,orgId:i.orgId}),u=ts(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:es,handleFetchJsonParseErrorFunction:B});return{deskContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}var ns=25;function se(e,t){return Ge({...t,fetch:e,readFetchPageResultInfo:function(o){let r=o.data?.length??0;return{hasNext:r>0&&r>=ns}},buildInputForNextPage:function(o,r,n){let a=n.maxItemsPerPage??r.limit??ns,s=(r.from??1)+a;return{...r,from:s,limit:a}}})}function _e(e,t){return{method:e,body:t??void 0}}function Xe(e,t){return T(e,{omitKeys:t})}function Ht(e){let t;return e&&(t=O(A(e))),t}function Rr(e){return t=>{let{include:o,...r}=t,n=Xe([{...r,include:Ht(o)}]);return e.fetchJson(`/tickets?${n}`,_e("GET")).then(a=>a??{data:[]})}}function as(e){return t=>{let{ticketId:o,include:r}=t,a=Xe([{include:Ht(r)}]).toString(),i=a?"?"+a:"";return e.fetchJson(`/tickets/${o}${i}`,_e("GET"))}}function Cr(e){return t=>{let o=Xe([t]);return e.fetchJson(`/tickets/search?${o}`,_e("GET")).then(r=>r??{data:[]})}}function is(e){return t=>{let{contactId:o,include:r,...n}=t,a=Xe([{...n,include:Ht(r)}]);return e.fetchJson(`/contacts/${o}/tickets?${a}`,_e("GET")).then(i=>i??{data:[]})}}function ss(e){return t=>{let{productId:o,include:r,...n}=t,a=Xe([{...n,include:Ht(r)}]);return e.fetchJson(`/products/${o}/tickets?${a}`,_e("GET")).then(i=>i??{data:[]})}}function cs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/metrics`,_e("GET"))}function us(e){return t=>{let o=Xe([{agentIds:O(A(t.agentIds)),departmentId:t.departmentId}]);return e.fetchJson(`/agentsTicketsCount?${o}`,_e("GET"))}}function ps(e){return se(Rr(e))}function ls(e){return se(Cr(e))}function ds(e){return{method:e}}function hs(e){return t=>{let o=T([t]);return e.fetchJson(`/departments?${o}`,ds("GET")).then(r=>r??{data:[]})}}function ms(e){return t=>e.fetchJson(`/departments/${t.departmentId}`,ds("GET"))}function Tr(e){return{method:e}}function ys(e){let t;return e&&(t=O(A(e))),t}function Zr(e){return t=>{let{include:o,...r}=t,n=T([{...r,include:ys(o)}]);return e.fetchJson(`/contacts?${n}`,Tr("GET")).then(a=>a??{data:[]})}}function fs(e){return t=>{let{contactId:o,include:r}=t,a=T([{include:ys(r)}]).toString(),i=a?"?"+a:"";return e.fetchJson(`/contacts/${o}${i}`,Tr("GET"))}}function gs(e){return t=>{let o=T([{contactIds:O(A(t.contactIds))}]);return e.fetchJson(`/contacts/contactsByIds?${o}`,Tr("GET")).then(r=>r??[])}}function Rs(e){return se(Zr(e))}function Ft(e,t){return{method:e,body:t??void 0}}function Cs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags`,Ft("GET")).then(o=>o??[])}function Ts(e){return t=>{let o={tags:A(t.tags).map(r=>({name:r}))};return e.fetchJson(`/tickets/${t.ticketId}/tags`,Ft("POST",o)).then(r=>r??[])}}function Zs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags/${t.tagId}`,Ft("DELETE"))}function As(e){return t=>{let o=T([t]);return e.fetchJson(`/tags/search?${o}`,Ft("GET")).then(r=>r??{data:[]})}}function xs(e){return t=>{let o=T([t]);return e.fetchJson(`/ticketTags?${o}`,Ft("GET")).then(r=>r??{data:[]})}}function Ar(e,t){return{method:e,body:t??void 0}}function Ss(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/followers`,Ar("GET")).then(o=>o??[])}function Fs(e){return t=>{let o={ids:A(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,Ar("POST",o))}}function bs(e){return t=>{let o={ids:A(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,Ar("DELETE",o))}}function Is(e,t){return{method:e,body:t??void 0}}function dd(e){let t;return e&&(t=O(A(e))),t}function ks(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:dd(r)}]);return e.fetchJson(`/tickets/${o}/attachments?${a}`,Is("GET")).then(i=>i??{data:[]})}}function Os(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/attachments/${t.attachmentId}`,Is("DELETE"))}function Bt(e,t){return{method:e,body:t??void 0}}function Ds(e){let t;return e&&(t=O(A(e))),t}function Es(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:Ds(r)}]);return e.fetchJson(`/tickets/${o}/comments?${a}`,Bt("GET")).then(i=>i??{data:[]})}}function Ps(e){return t=>{let{ticketId:o,commentId:r,include:n}=t,i=T([{include:Ds(n)}]).toString(),s=i?"?"+i:"";return e.fetchJson(`/tickets/${o}/comments/${r}${s}`,Bt("GET"))}}function Ms(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/comments`,Bt("POST",r))}}function ws(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/comments/${t.commentId}`,Bt("DELETE"))}function bt(e,t){return{method:e,body:t??void 0}}function _s(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timer`,bt("GET"))}function Ns(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/timer`,bt("POST",r))}}function Us(e){return t=>{let{ticketId:o,...r}=t,n=T([r]);return e.fetchJson(`/tickets/${o}/timeEntries?${n}`,bt("GET")).then(a=>a??{data:[]})}}function vs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/${t.timeEntryId}`,bt("GET"))}function Ls(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/summation`,bt("GET"))}function Gs(e){return{method:e}}function Ks(e){let t;return e&&(t=O(A(e))),t}function xr(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:Ks(r)}]);return e.fetchJson(`/tickets/${o}/threads?${a}`,Gs("GET")).then(i=>i??{data:[]})}}function Vs(e){return t=>{let{ticketId:o,threadId:r,include:n}=t,i=T([{include:Ks(n)}]).toString(),s=i?"?"+i:"";return e.fetchJson(`/tickets/${o}/threads/${r}${s}`,Gs("GET"))}}function Js(e){return se(xr(e))}function hd(e){return{method:e}}function md(e){let t;return e&&(t=O(A(e))),t}function Sr(e){return t=>{let{ticketId:o,include:r,...n}=t,a=T([{...n,include:md(r)}]);return e.fetchJson(`/tickets/${o}/activities?${a}`,hd("GET")).then(i=>i??{data:[]})}}function zs(e){return se(Sr(e))}function Yt(e){return{method:e}}function js(e){let t;return e&&(t=O(A(e))),t}function Fr(e){return t=>{let{include:o,...r}=t,n=T([{...r,include:js(o)}]);return e.fetchJson(`/agents?${n}`,Yt("GET")).then(a=>a??{data:[]})}}function qs(e){return t=>{let{agentId:o,include:r}=t,a=T([{include:js(r)}]).toString(),i=a?"?"+a:"";return e.fetchJson(`/agents/${o}${i}`,Yt("GET"))}}function Ws(e){return t=>{let o=T([{agentIds:O(A(t.agentIds))}]);return e.fetchJson(`/agentsByIds?${o}`,Yt("GET")).then(r=>r?.data??[])}}function $s(e){return()=>e.fetchJson("/myinfo",Yt("GET"))}function Hs(e){return se(Fr(e))}var yd="https://accounts.zoho.com",fd="https://accounts.zoho.eu",gd="https://accounts.zoho.in",Rd="https://accounts.zoho.com.au",Cd="https://accounts.zoho.jp",Td="https://accounts.zoho.uk",Zd="https://accounts.zohocloud.ca",Ad="https://accounts.zoho.sa",xd={us:yd,eu:fd,in:gd,au:Rd,jp:Cd,uk:Td,ca:Zd,sa:Ad};function Bs(e){return xd[e]??e}var Ys="/oauth/v2/token";function Xt(e){return t=>{let{clientId:o,clientSecret:r,refreshToken:n}=e.config,{client:a,refreshToken:i}=t??{},s=a?.clientId??o,c=a?.clientSecret??r,d=T({grant_type:"refresh_token",client_id:s,client_secret:c,refresh_token:i??n});return e.fetchJson(`${Ys}?${d}`,Sd("POST"))}}function Sd(e,t){return{method:e,body:t}}function Fd(e){return t=>X.makeFetch({baseUrl:t.apiUrl,baseRequest:{headers:{"Content-Type":"application/json"}},fetchHandler:e,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}function bd(e,t){let o=Ha(e,t),r=Y(o,{interceptJsonResponse:$a,handleFetchJsonParseErrorFunction:B});return{fetch:o,fetchJson:r}}function Xs(e){let t=Ie(),{logZohoServerErrorFunction:o,fetchFactory:r=Fd(t)}=e;return n=>{if(n.refreshToken)if(n.clientId){if(!n.clientSecret)throw new Error("ZohoAccountsConfig missing clientSecret.")}else throw new Error("ZohoAccountsConfig missing clientId.");else throw new Error("ZohoAccountsConfig missing refreshToken.");let a=Bs(n.apiUrl??"us"),i=r({apiUrl:a}),{fetch:s,fetchJson:c}=bd(i,o),u=async()=>{let m=Date.now(),{access_token:C,api_domain:y,scope:R,expires_in:f}=await Xt(h)();return{accessToken:C,apiDomain:y,expiresIn:f,expiresAt:new Date(m+f*K),scope:R}};u.resetAccessToken=async()=>n.accessTokenCache?.clearCachedToken();let d=Id({tokenRefresher:u,accessTokenCache:n.accessTokenCache}),h={fetch:s,fetchJson:c,loadAccessToken:d,config:{...n,apiUrl:a}};return{accountsContext:h}}}function Id(e){let{tokenRefresher:t,accessTokenCache:o,tokenExpirationBuffer:r}=e,n=r??Re,a=null,i=async()=>{a=null},s=async()=>{if(!a){let c=await o?.loadCachedToken();c&&(a=c)}if(a!=null&&Date.now()+n>=a.expiresAt.getTime()&&(a=null),!a){try{a=await t()}catch(c){throw console.error("zohoAccountsZohoAccessTokenFactory(): Failed retrieving new token from tokenRefresher: ",c),new He("Token Refresh Failed")}try{await o?.updateCachedToken(a)}catch{}}return a};return s.resetAccessToken=i,s}var Qs="ZANALYTICS-ORGID";function ec(e){let t;switch(e){case"sandbox":case"production":t="https://analyticsapi.zoho.com/restapi/v2";break;default:t=e;break}return t}var kd="CONFIG",Od="application/x-www-form-urlencoded";function tc(e){return e==null?"":T({[kd]:JSON.stringify(e)}).toString()}function Oe(e){let t=tc(e);return t?`?${t}`:""}function G(e,t){return{method:e,body:t??void 0}}function Qt(e,t){return{method:e,headers:{"Content-Type":Od},body:tc(t)}}var Dd="failure",Ed="8535",Pd="8083",Md="6045",wd=["6043","6044"],br=class extends U{};function oc(e){return e?.status===Dd}function _d(e){let{summary:t,data:o}=e,r=o?.errorCode;return{code:r==null?t??"":String(r),message:o?.errorMessage??t??"",details:{summary:t}}}function rc(e,t){let o;if(oc(e)){let r=_d(e),n={error:r};switch(r.code){case Ed:o=new v(r,n,t);break;case Pd:o=new br(r,n,t);break;case Md:o=new Ce(r,n,t);break;default:o=wd.includes(r.code)?new Ce(r,n,t):new U(r,n,t);break}}else o=te(e,t);return o}var Nd=Q("ZohoAnalytics",{logDataArrayErrors:!1});async function Ud(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=rc(t,e)),o}var nc=(e,t)=>{if(oc(e)){let o=rc(e,new Ae(t));if(o)throw o}return e},ac=ee(Ud,Nd);var vd=100;var Ld=Re;function ic(e){return xt({maxRateLimit:vd,resetPeriod:Ld,...e,readRateLimitDetails:nr,enabledWithoutRateLimitDetails:!0})}var Gd="1001",Kd="1002";var Vd="1004";var Jd=K*2,zd=150;function jd(e){return e===Gd||e===Kd}function De(e){return e===Vd}function eo(e){let{loadJob:t,readJobCode:o,pollWait:r=Jd,maxPolls:n=zd}=e;return Un({next:async a=>(a>0&&await mt(r),t()),checkContinue:(a,i)=>a!=null&&jd(o(a))&&i<n})}var qd=65279;function Wd(e,t){let o=e.codePointAt(0)===qd?e.slice(1):e,r=[],n=[],a="",i=!1,s=!1,c=0;for(;c<o.length;){let u=o[c];i?u==='"'?o[c+1]==='"'?(a+='"',c+=2):(i=!1,c+=1):(a+=u,c+=1):u==='"'&&a===""?(i=!0,s=!0,c+=1):u===t?(n.push(a),a="",s=!0,c+=1):u===`
|
|
9
9
|
`||u==="\r"?(n.push(a),r.push(n),n=[],a="",s=!1,c+=u==="\r"&&o[c+1]===`
|
|
10
|
-
`?2:1):(a+=u,s=!0,c+=1)}return(s||a!==""||n.length>0)&&(n.push(a),r.push(n)),r}function $d(e,t){let o=Wd(e,t??","),[r,...n]=o,a;if(r==null)a={columnNames:[],rows:[]};else{let i=r.map(c=>c.trim()),s=n.map(c=>{let u={};return i.forEach((d,h)=>{d!==""&&(u[d]=c[h]??"")}),u});a={columnNames:xo(i.filter(c=>c!=="")),rows:s}}return a}function Hd(e){let t;try{t=JSON.parse(e)}catch(a){throw new Error(`zohoAnalyticsRowDataFromJson(): the content is not valid JSON. ${a.message}`,{cause:a})}let o=a=>a!=null&&typeof a=="object"&&!Array.isArray(a),r=Array.isArray(t)?t:[t];if(!r.every(o))throw new Error("zohoAnalyticsRowDataFromJson(): the content must be an array of row objects, as a Zoho Analytics JSON import is.");let n=r;return{columnNames:xo(n.flatMap(a=>Object.keys(a))),rows:n}}function sc(e){let{content:t,fileType:o,delimiter:r}=e;return o==="json"?Hd(t):$d(t,r)}var Bd=3,Yd=/[\s,%$£€¥]/g,Xd=new Set(["true","false","yes","no","y","n","t","f","1","0"]),Qd=/^[\d\s/.:+-]+$/,eh=new Set(["PLAIN","MULTI_LINE","EMAIL","URL"]);function Ir(e){return e==null?"":String(e).trim()}var th=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,oh=/^www\./i;function et(e){let{text:t,allowNegative:o,allowFraction:r}=e,n=Number(t.replaceAll(Yd,"")),a;return Number.isFinite(n)?!o&&n<0?a="negative":!r&&!Number.isInteger(n)&&(a="notAnInteger"):a="notANumber",a}var rh={NUMBER:e=>et({text:e,allowNegative:!0,allowFraction:!1}),AUTO_NUMBER:e=>et({text:e,allowNegative:!0,allowFraction:!1}),POSITIVE_NUMBER:e=>et({text:e,allowNegative:!1,allowFraction:!1}),DECIMAL_NUMBER:e=>et({text:e,allowNegative:!0,allowFraction:!0}),CURRENCY:e=>et({text:e,allowNegative:!0,allowFraction:!0}),PERCENT:e=>et({text:e,allowNegative:!0,allowFraction:!0}),DATE:e=>Number.isNaN(Date.parse(e))&&!Qd.test(e)?"notADate":void 0,BOOLEAN:e=>Xd.has(e.toLowerCase())?void 0:"notABoolean",EMAIL:e=>th.test(e)?void 0:"notAnEmail",URL:e=>URL.canParse(e)||oh.test(e)?void 0:"notAUrl"};function nh(e,t,o){let r=o==null||eh.has(o);return t.columnMaxSize!=null&&e.length>t.columnMaxSize&&r}function ah(e,t){let o=Ir(e),r=t.dataType?.toUpperCase(),n;return o===""?n=t.isNullable===!1&&t.defaultValue==null?"emptyInNonNullable":void 0:nh(o,t,r)?n="tooLong":n=r==null?void 0:rh[r]?.(o),n}function ih(e,t){return`${e}\0${t}`}function cc(e){let{columns:t,columnNames:o,rows:r,maxSamples:n}=e,a=n??Bd,i=new Map(t.map(f=>[f.columnName,f])),s=new Map(t.map(f=>[f.columnName.trim().toLowerCase(),f.columnName])),c=new Set(o),u=[],d=[],h=[],g=new Set;o.forEach(f=>{let S=s.get(f.trim().toLowerCase());i.has(f)?u.push(f):S==null?d.push(f):(h.push({dataColumnName:f,tableColumnName:S}),g.add(S))});let m=d.map(f=>({columnName:f,valueCount:r.reduce((S,I)=>Ir(I[f])===""?S:S+1,0)})),C=t.filter(f=>!c.has(f.columnName)&&!g.has(f.columnName)).map(f=>({columnName:f.columnName,dataType:f.dataType,isNullable:f.isNullable,required:f.isNullable===!1&&f.defaultValue==null})),y=new Map;r.forEach((f,S)=>{u.forEach(I=>{let z=i.get(I),F=ah(f[I],z);if(F!=null){let P=ih(I,F),M=y.get(P);if(M==null){let H=[];M={conflict:{columnName:I,dataType:z.dataType,reason:F,conflictCount:0,samples:H},count:0,samples:H},y.set(P,M)}M.count+=1,M.samples.length<a&&M.samples.push({row:S+1,value:Ir(f[I])})}})});let R=Array.from(y.values()).map(f=>({...f.conflict,conflictCount:f.count}));return{matchedColumns:u,droppedColumns:m,emptyColumns:C,caseMismatchedColumns:h,conflicts:R,rowCount:r.length}}function uc(e,t){let o=t?.strict?e.emptyColumns.length:e.emptyColumns.filter(r=>r.required).length;return e.droppedColumns.length===0&&e.caseMismatchedColumns.length===0&&e.conflicts.length===0&&o===0}function pc(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=ic(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Zoho-oauthtoken ${await o()}`,...i.orgId?{[Qs]:i.orgId}:void 0}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoAnalyticsConfig missing api url.");let s=ec(i.apiUrl),c=a({apiUrl:s,orgId:i.orgId}),u=ac(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:nc,handleFetchJsonParseErrorFunction:B});return{analyticsContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function lc(e){return()=>e.fetchJson("/orgs",G("GET"))}function dc(e){return()=>e.fetchJson("/workspaces",G("GET"))}function hc(e){return()=>e.fetchJson("/workspaces/owned",G("GET"))}function mc(e){return()=>e.fetchJson("/workspaces/shared",G("GET"))}function yc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}`,G("GET"))}function fc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views`,G("GET"))}function gc(e){return t=>e.fetchJson(`/views/${t.viewId}`,G("GET"))}function Rc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/metadata`,G("GET"))}var sh="import";function ch(e,t){let{file:o,data:r,rows:n}=e,a=new FormData;if(o!=null)a.append("FILE",o);else{if(r==null&&n==null)throw new Error("zohoAnalyticsImportFormData(): one of file, data, or rows must be provided.");{let i=r??JSON.stringify(n);if(t?.asFile){let s=t.fileType??(n==null?"csv":"json");a.append("FILE",new File([i],`${sh}.${s}`,{type:s==="json"?"application/json":"text/csv"}))}else a.append("DATA",i)}}return a}function kr(e,t){let{file:o,rows:r}=e,n=t;if(n==null){if(r!=null)n="json";else if(o!=null){let a=o.name.split(".").pop()?.toLowerCase();n=a==="json"||a==="csv"?a:void 0}}return n}function to(e){return e??!0}function Cc(e,t){let o=kr(e,t);if(o==null)throw new Error("zohoAnalyticsCreateImportJob(): config.fileType is required for an async import job when the data is not rows or a file with a .csv/.json name.");return o}async function oo(e){let{context:t,url:o,config:r,dataInput:n,formDataOptions:a}=e,i=ch(n,a);return(await t.fetch(`${o}${ke(r)}`,{method:"POST",headers:{"Content-Type":""},body:i})).json()}function Tc(e){return t=>{let{workspaceId:o,viewId:r,config:n,...a}=t,i={...n,autoIdentify:to(n.autoIdentify),fileType:kr(a,n.fileType)};return oo({context:e,url:`/workspaces/${o}/views/${r}/data`,config:i,dataInput:a})}}function Zc(e){return t=>{let{workspaceId:o,config:r,...n}=t,a={...r,autoIdentify:to(r.autoIdentify),fileType:kr(n,r.fileType)};return oo({context:e,url:`/workspaces/${o}/data`,config:a,dataInput:n})}}function Or(e){return t=>{let{workspaceId:o,viewId:r,config:n,...a}=t,i=Cc(a,n.fileType),s={...n,autoIdentify:to(n.autoIdentify),fileType:i};return oo({context:e,url:`/bulk/workspaces/${o}/views/${r}/data`,config:s,dataInput:a,formDataOptions:{asFile:!0,fileType:i}})}}function Ac(e){return t=>{let{workspaceId:o,config:r,...n}=t,a=Cc(n,r.fileType),i={...r,autoIdentify:to(r.autoIdentify),fileType:a};return oo({context:e,url:`/bulk/workspaces/${o}/data`,config:i,dataInput:n,formDataOptions:{asFile:!0,fileType:a}})}}function Dr(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/importjobs/${t.jobId}`,{method:"GET"})}function xc(e){let t=Or(e),o=Dr(e);return async r=>{let{poll:n,...a}=r,{data:i}=await t(a);return eo({...n,loadJob:()=>o({workspaceId:r.workspaceId,jobId:i.jobId}),readJobCode:s=>s.data.jobCode})}}function Sc(e){return t=>e.fetch(`/workspaces/${t.workspaceId}/views/${t.viewId}/data${ke(t.config)}`,{method:"GET"})}function Er(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/views/${t.viewId}/data${ke(t.config)}`,G("GET"))}function Fc(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/data${ke(t.config)}`,G("GET"))}function Pr(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/exportjobs/${t.jobId}`,G("GET"))}function bc(e){return t=>e.fetch(`/bulk/workspaces/${t.workspaceId}/exportjobs/${t.jobId}/data`,{method:"GET"})}function Ic(e){let t=Er(e),o=Pr(e);return async r=>{let{poll:n,...a}=r,{data:i}=await t(a);return eo({...n,loadJob:()=>o({workspaceId:r.workspaceId,jobId:i.jobId}),readJobCode:s=>s.data.jobCode})}}function kc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/rows`,Qt("POST",t.config))}function Oc(e){return t=>{let{criteria:o,updateAllRows:r}=t.config;if(!o&&!r)throw new Error("zohoAnalyticsUpdateRows(): either criteria or updateAllRows must be provided.");return e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/rows`,Qt("PUT",t.config))}}function Dc(e){return t=>{let{criteria:o,deleteAllRows:r}=t.config;if(!o&&!r)throw new Error("zohoAnalyticsDeleteRows(): either criteria or deleteAllRows must be provided.");return e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/rows`,Qt("DELETE",t.config))}}function Ec(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}${ke(t.config)}`,G("DELETE"))}function Pc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}`,G("DELETE"))}function me(e){if(!e.apiUrl)throw new Error("No Zoho API url or type specified.")}var ro=class{zohoAccounts;factoryConfig;static assertValidConfig(t){let{zohoAccounts:o}=t;if(o)if(o.serviceAccessTokenKey)if(o.refreshToken)if(o.apiUrl){if(!o.clientId)throw new Error("ZohoAccountsServiceConfig.zohoAccounts.clientId is required")}else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.apiUrl is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.refreshToken is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.serviceAccessTokenKey is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts is required")}};import{Injectable as uh}from"@nestjs/common";var tt=class{};tt=q([uh()],tt);function ph(e){return{load:async()=>{let t=await e.loadCachedToken().catch(()=>{});return t!=null&&!Rn(t)?t:void 0},update:t=>e.updateCachedToken(t),clear:()=>e.clearCachedToken()}}function lh(e,t){return e.updateCachedToken(t).then(()=>null).catch(o=>[e,o])}function dh(e){console.warn(`mergeZohoAccountsAccessTokenCacheServices(): failed updating ${e.length} caches.`),e.forEach(([t,o],r)=>{console.warn(`Cache update failure ${r+1}: - ${o}`)})}function wc(e,t){let o=[...e],r=typeof t=="function"?t:t===!1?void 0:dh;if(o.length===0)throw new Error("mergeZohoAccountsAccessTokenCacheServices() input cannot be empty.");function n(a){let i=o.map(u=>u.loadZohoAccessTokenCache(a)),s=i.map(ph),c=Fn(s);return{loadCachedToken:()=>c.load(),updateCachedToken:async u=>{let d=await Promise.allSettled(i.map(h=>lh(h,u)));if(r!=null){let h=ce(d.map(g=>g.value));h.length&&r(h)}},clearCachedToken:async()=>{await Promise.allSettled(i.map(u=>u.clearCachedToken()))}}}return{loadZohoAccessTokenCache:n}}function _c(e,t){let o={};if(e!=null)for(let a of Object.keys(e)){let i=e[a];i!=null&&(o[a]=i)}let r=xn(o);function n(a){return{loadCachedToken:async()=>{let i=await r.get(a);return t&&console.log("retrieving access token from memory: ",{service:a,hit:i!=null,expiresAt:i?.expiresAt}),i},updateCachedToken:async i=>{await r.set(a,i),t&&console.log("updating access token in memory: ",{service:a,expiresAt:i?.expiresAt})},clearCachedToken:async()=>{await r.remove(a),t&&console.log("clearing access token in memory: ",{service:a})}}}return{loadZohoAccessTokenCache:n}}var hh=".tmp/zoho-access-tokens.json";function Mc(e){let t;if(e==null||typeof e!="object")t=void 0;else{let o=e,r=o.expiresAt,n=r!=null&&!(r instanceof Date)?new Date(r):r;t={...o,expiresAt:n}}return t}function Nc(e=hh,t=!0){let o=Yn({filePath:e,reviver:Mc}),r=t?Sn(o):o;function n(c){return{loadCachedToken:()=>r.get(c),updateCachedToken:async u=>{try{await r.set(c,u)}catch(d){console.error("Failed updating access token in file: ",d)}},clearCachedToken:async()=>{try{await r.remove(c)}catch(u){console.error("Failed clearing access token in file: ",u)}}}}async function a(){let c=await Ae(e),u;if(c==null)u=void 0;else{let d={};for(let h of Object.keys(c))d[h]=Mc(c[h]);u=d}return u}async function i(c){await r.clear();for(let[u,d]of Object.entries(c))d!=null&&await r.set(u,d)}async function s(){await r.clear()}return{loadZohoAccessTokenCache:n,readTokenFile:a,writeTokenFile:i,deleteTokenFile:s}}var J=class{constructor(t,o){this.config=t;this.cacheService=o;let r=t.zohoAccounts.accessTokenCache??o.loadZohoAccessTokenCache(t.zohoAccounts.serviceAccessTokenKey);this.zohoAccounts=Xs(t.factoryConfig??{})({accessTokenCache:r,...t.zohoAccounts})}config;cacheService;zohoAccounts;get accountsContext(){return this.zohoAccounts.accountsContext}get accessToken(){return Xt(this.accountsContext)}};J=q([mh(),N(0,Uc(ro)),N(1,Uc(tt))],J);import{Inject as vc,Injectable as yh}from"@nestjs/common";var no=class{zohoCrm;factoryConfig;static assertValidConfig(t){me(t.zohoCrm)}};var ot=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoCrm=Oi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoCrm)}config;zohoAccountsApi;zohoCrm;get crmContext(){return this.zohoCrm.crmContext}get zohoRateLimiter(){return this.zohoCrm.crmContext.zohoRateLimiter}get insertRecord(){return ni(this.crmContext)}get upsertRecord(){return ai(this.crmContext)}get updateRecord(){return ii(this.crmContext)}get deleteRecord(){return si(this.crmContext)}get getRecordById(){return ci(this.crmContext)}get getRecords(){return ui(this.crmContext)}get searchRecords(){return lr(this.crmContext)}get searchRecordsPageFactory(){return pi(this.crmContext)}get getRelatedRecordsFunctionFactory(){return Xe(this.crmContext)}get getEmailsForRecord(){return dr(this.crmContext)}get getEmailsForRecordPageFactory(){return li(this.crmContext)}get getAttachmentsForRecord(){return hr(this.crmContext)}get getAttachmentsForRecordPageFactory(){return di(this.crmContext)}get uploadAttachmentForRecord(){return hi(this.crmContext)}get downloadAttachmentForRecord(){return mi(this.crmContext)}get deleteAttachmentFromRecord(){return yi(this.crmContext)}get createNotes(){return mr(this.crmContext)}get deleteNotes(){return Ci(this.crmContext)}get createNotesForRecord(){return Zi(this.crmContext)}get getNotesForRecord(){return yr(this.crmContext)}get getNotesForRecordPageFactory(){return Ti(this.crmContext)}get executeRestApiFunction(){return fi(this.crmContext)}get createTagsForModule(){return xi(this.crmContext)}get deleteTag(){return Si(this.crmContext)}get getTagsForModule(){return Fi(this.crmContext)}get addTagsToRecords(){return bi(this.crmContext)}get removeTagsFromRecords(){return ki(this.crmContext)}};ot=q([yh(),N(0,vc(no)),N(1,vc(J))],ot);import{Inject as Lc,Injectable as fh}from"@nestjs/common";var ao=class{zohoRecruit;factoryConfig;static assertValidConfig(t){me(t.zohoRecruit)}};var rt=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoRecruit=Ba({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoRecruit)}config;zohoAccountsApi;zohoRecruit;get recruitContext(){return this.zohoRecruit.recruitContext}get zohoRateLimiter(){return this.zohoRecruit.recruitContext.zohoRateLimiter}get insertRecord(){return Ta(this.recruitContext)}get upsertRecord(){return Za(this.recruitContext)}get updateRecord(){return Aa(this.recruitContext)}get deleteRecord(){return xa(this.recruitContext)}get getRecordById(){return Sa(this.recruitContext)}get getRecords(){return Fa(this.recruitContext)}get searchRecords(){return Ho(this.recruitContext)}get searchRecordsPageFactory(){return ba(this.recruitContext)}get getRelatedRecordsFunctionFactory(){return He(this.recruitContext)}get getEmailsForRecord(){return Bo(this.recruitContext)}get getEmailsForRecordPageFactory(){return Ia(this.recruitContext)}get getAttachmentsForRecord(){return Yo(this.recruitContext)}get getAttachmentsForRecordPageFactory(){return ka(this.recruitContext)}get uploadAttachmentForRecord(){return Oa(this.recruitContext)}get downloadAttachmentForRecord(){return Da(this.recruitContext)}get deleteAttachmentFromRecord(){return Ea(this.recruitContext)}get createNotes(){return tr(this.recruitContext)}get deleteNotes(){return va(this.recruitContext)}get createNotesForRecord(){return Ga(this.recruitContext)}get getNotesForRecord(){return or(this.recruitContext)}get getNotesForRecordPageFactory(){return La(this.recruitContext)}get executeRestApiFunction(){return Pa(this.recruitContext)}get associateCandidateRecordsWithJobOpenings(){return wa(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecords(){return Qo(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecordsPageFactory(){return Na(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecords(){return er(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecordsPageFactory(){return Ua(this.recruitContext)}get createTagsForModule(){return Ja(this.recruitContext)}get getTagsForModule(){return za(this.recruitContext)}get addTagsToRecords(){return ja(this.recruitContext)}get removeTagsFromRecords(){return qa(this.recruitContext)}};rt=q([fh(),N(0,Lc(ao)),N(1,Lc(J))],rt);import{Inject as Gc,Injectable as gh}from"@nestjs/common";var io=class{zohoSign;factoryConfig;static assertValidConfig(t){me(t.zohoSign)}};var nt=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoSign=Yi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoSign)}config;zohoAccountsApi;zohoSign;get signContext(){return this.zohoSign.signContext}get zohoRateLimiter(){return this.zohoSign.signContext.zohoRateLimiter}get getDocument(){return Mi(this.signContext)}get getDocuments(){return gr(this.signContext)}get getDocumentsPageFactory(){return wi(this.signContext)}get getDocumentFormData(){return _i(this.signContext)}get retrieveFieldTypes(){return Ni(this.signContext)}get downloadPdf(){return Ui(this.signContext)}get downloadCompletionCertificate(){return vi(this.signContext)}get createDocument(){return Li(this.signContext)}get createDocumentFromTemplate(){return Gi(this.signContext)}get getTemplate(){return Ki(this.signContext)}get getTemplates(){return Vi(this.signContext)}get updateDocument(){return Ji(this.signContext)}get sendDocumentForSignature(){return zi(this.signContext)}get extendDocument(){return ji(this.signContext)}get deleteDocument(){return qi(this.signContext)}get getEmbeddedSigningUrl(){return Wi(this.signContext)}};nt=q([gh(),N(0,Gc(io)),N(1,Gc(J))],nt);import{Inject as Kc,Injectable as Rh}from"@nestjs/common";var so=class{zohoDesk;factoryConfig;static assertValidConfig(t){if(me(t.zohoDesk),!t.zohoDesk.orgId)throw new Error("No Zoho Desk orgId specified.")}};var at=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoDesk=rs({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoDesk)}config;zohoAccountsApi;zohoDesk;get deskContext(){return this.zohoDesk.deskContext}get zohoRateLimiter(){return this.zohoDesk.deskContext.zohoRateLimiter}get getTickets(){return Rr(this.deskContext)}get getTicketById(){return as(this.deskContext)}get searchTickets(){return Cr(this.deskContext)}get getTicketsForContact(){return is(this.deskContext)}get getTicketsForProduct(){return ss(this.deskContext)}get getTicketMetrics(){return cs(this.deskContext)}get getAgentsTicketsCount(){return us(this.deskContext)}get getTicketsPageFactory(){return ps(this.deskContext)}get searchTicketsPageFactory(){return ls(this.deskContext)}get getDepartments(){return hs(this.deskContext)}get getDepartmentById(){return ms(this.deskContext)}get getContacts(){return Zr(this.deskContext)}get getContactById(){return fs(this.deskContext)}get getContactsByIds(){return gs(this.deskContext)}get getContactsPageFactory(){return Rs(this.deskContext)}get getTicketTags(){return Cs(this.deskContext)}get associateTicketTags(){return Ts(this.deskContext)}get dissociateTicketTag(){return Zs(this.deskContext)}get searchTags(){return As(this.deskContext)}get getAllTags(){return xs(this.deskContext)}get getTicketFollowers(){return Ss(this.deskContext)}get addTicketFollowers(){return Fs(this.deskContext)}get removeTicketFollowers(){return bs(this.deskContext)}get getTicketAttachments(){return ks(this.deskContext)}get deleteTicketAttachment(){return Os(this.deskContext)}get getTicketComments(){return Es(this.deskContext)}get getTicketCommentById(){return Ps(this.deskContext)}get createTicketComment(){return Ms(this.deskContext)}get deleteTicketComment(){return ws(this.deskContext)}get getTicketTimer(){return _s(this.deskContext)}get performTicketTimerAction(){return Ns(this.deskContext)}get getTicketTimeEntries(){return Us(this.deskContext)}get getTicketTimeEntryById(){return vs(this.deskContext)}get getTicketTimeEntrySummation(){return Ls(this.deskContext)}get getTicketThreads(){return xr(this.deskContext)}get getTicketThreadById(){return Vs(this.deskContext)}get getTicketThreadsPageFactory(){return Js(this.deskContext)}get getTicketActivities(){return Sr(this.deskContext)}get getTicketActivitiesPageFactory(){return zs(this.deskContext)}get getAgents(){return Fr(this.deskContext)}get getAgentById(){return qs(this.deskContext)}get getAgentsByIds(){return Ws(this.deskContext)}get getMyInfo(){return $s(this.deskContext)}get getAgentsPageFactory(){return Hs(this.deskContext)}};at=q([Rh(),N(0,Kc(so)),N(1,Kc(J))],at);import{Inject as Vc,Injectable as Ch}from"@nestjs/common";var co=class{zohoAnalytics;factoryConfig;static assertValidConfig(t){me(t.zohoAnalytics)}};var it=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoAnalytics=pc({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoAnalytics)}config;zohoAccountsApi;zohoAnalytics;get analyticsContext(){return this.zohoAnalytics.analyticsContext}get zohoRateLimiter(){return this.zohoAnalytics.analyticsContext.zohoRateLimiter}get getOrgs(){return lc(this.analyticsContext)}get getAllWorkspaces(){return dc(this.analyticsContext)}get getOwnedWorkspaces(){return hc(this.analyticsContext)}get getSharedWorkspaces(){return mc(this.analyticsContext)}get getWorkspaceDetails(){return yc(this.analyticsContext)}get getViews(){return fc(this.analyticsContext)}get getViewDetails(){return gc(this.analyticsContext)}get getTableMetadata(){return Rc(this.analyticsContext)}get importDataInTable(){return Tc(this.analyticsContext)}get importDataInNewTable(){return Zc(this.analyticsContext)}get createImportJobInTable(){return Or(this.analyticsContext)}get createImportJobInNewTable(){return Ac(this.analyticsContext)}get getImportJob(){return Dr(this.analyticsContext)}get importDataInTableAndAwaitJob(){return xc(this.analyticsContext)}get exportData(){return Sc(this.analyticsContext)}get createExportJob(){return Er(this.analyticsContext)}get createExportJobForSqlQuery(){return Fc(this.analyticsContext)}get getExportJob(){return Pr(this.analyticsContext)}get downloadExport(){return bc(this.analyticsContext)}get exportDataAndAwaitJob(){return Ic(this.analyticsContext)}get addRow(){return kc(this.analyticsContext)}get updateRows(){return Oc(this.analyticsContext)}get deleteRows(){return Dc(this.analyticsContext)}get deleteView(){return Ec(this.analyticsContext)}get deleteWorkspace(){return Pc(this.analyticsContext)}};it=q([Ch(),N(0,Vc(co)),N(1,Vc(J))],it);function uo(e){return{recruit:e.recruitApi,crm:e.crmApi,desk:e.deskApi,sign:e.signApi,analytics:e.analyticsApi}}function Th(e){return`${e.clientId}:${e.refreshToken}`}function st(e){let t=wc([_c(),Nc(Zt())]),o=new Map;function r(C,y){let R=Th(C),f=o.get(R),S;if(f)S=f;else{let I={zohoAccounts:{serviceAccessTokenKey:y,refreshToken:C.refreshToken,clientId:C.clientId,clientSecret:C.clientSecret,apiUrl:C.region??"us"}};S=new J(I,t),o.set(R,S)}return S}let n,a=we(e,"recruit");if(a){let C=r(a,"recruit"),y={zohoRecruit:{apiUrl:a.apiMode}};n=new rt(y,C)}let i,s=we(e,"crm");if(s){let C=r(s,"crm"),y={zohoCrm:{apiUrl:s.apiMode}};i=new ot(y,C)}let c,u=we(e,"desk");if(u?.orgId){let C=r(u,"desk"),y={zohoDesk:{apiUrl:u.apiMode,orgId:u.orgId}};c=new at(y,C)}let d,h=we(e,"sign");if(h){let C=r(h,"sign"),y={zohoSign:{apiUrl:h.apiMode}};d=new nt(y,C)}let g,m=we(e,"analytics");if(m){let C=r(m,"analytics"),y={zohoAnalytics:{apiUrl:m.apiMode,orgId:m.orgId}};g=new it(y,C)}return{recruitApi:n,crmApi:i,deskApi:c,signApi:d,analyticsApi:g}}Ro([...fo,/1000\.\w{20,}/g]);function Jc(e){let t;return e instanceof v?t={ok:!1,error:ge(e.message),code:"TOKEN_EXPIRED",suggestion:"Run: zoho-cli auth check"}:e instanceof qe?t={ok:!1,error:ge(e.message),code:"AUTH_ERROR",suggestion:"Check your client ID, secret, and refresh token."}:e instanceof Ce?t={ok:!1,error:ge(e.message),code:"RATE_LIMITED",suggestion:"Wait and retry. Zoho rate limit exceeded."}:e instanceof U?t={ok:!1,error:ge(e.message),code:"API_ERROR"}:t=Co(e),t}zr(e=>e instanceof v||e instanceof qe||e instanceof Ce||e instanceof U?Jc(e):void 0);function l(e){console.log(JSON.stringify(Jc(e)))}var zc={us:"https://accounts.zoho.com",eu:"https://accounts.zoho.eu",in:"https://accounts.zoho.in",au:"https://accounts.zoho.com.au",jp:"https://accounts.zoho.jp"},Mr={recruit:["ZohoRecruit.modules.ALL","ZohoRecruit.settings.all","ZohoRecruit.functions.execute.READ","ZohoRecruit.functions.execute.CREATE"],crm:["ZohoCRM.modules.ALL","ZohoCRM.settings.ALL","ZohoCRM.functions.execute.READ","ZohoCRM.functions.execute.CREATE"],desk:["Desk.tickets.ALL","Desk.tasks.ALL","Desk.contacts.ALL","Desk.settings.ALL","Desk.events.ALL","Desk.search.READ","Desk.articles.READ","Desk.basic.READ"],sign:["ZohoSign.documents.ALL","ZohoSign.templates.ALL"],analytics:["ZohoAnalytics.data.all","ZohoAnalytics.metadata.all","ZohoAnalytics.modeling.all"]},jc="http://localhost/oauth",qc=`Organization ID, for the products scoped by one (${Array.from(Me).join(", ")})`;function Zh(e){let t;if(!e)t=void 0;else if(e.startsWith("http://")||e.startsWith("https://"))try{let r=new URL(e).searchParams.get("code");if(!r)throw new Error('No "code" parameter found in the provided URL.');t=r}catch(o){throw o instanceof TypeError?new Error(`Invalid URL provided for --code: ${e}`,{cause:o}):o}else t=e;return t}var Ah={command:"setup",describe:"Generate OAuth authorization URL, exchange code, or set refresh token directly",builder:e=>e.option("client-id",{type:"string",describe:"OAuth client ID (from https://api-console.zoho.com/)"}).option("client-secret",{type:"string",describe:"OAuth client secret"}).option("redirect-uri",{type:"string",default:jc,describe:"Redirect URI (must match API console config)"}).option("region",{type:"string",default:"us",choices:["us","eu","in","au","jp"],describe:"Zoho region"}).option("scopes",{type:"string",defaultDescription:"--product when given, otherwise recruit,crm,desk",describe:"Comma-separated products for OAuth scopes (recruit,crm,desk,sign,analytics)"}).option("code",{type:"string",describe:"Authorization code or the full redirect URL (code is extracted automatically)"}).option("token",{type:"string",describe:"Set a refresh token directly (skips OAuth code exchange)"}).option("product",{type:"string",choices:[...Ct],describe:"Store credentials for a specific product instead of shared"}).option("org-id",{type:"string",describe:qc}).option("api-mode",{type:"string",default:"production",choices:["production","sandbox"],describe:"API mode"}).example([["$0 auth setup --client-id 1000.ABC --client-secret xyz","Step 1: Get OAuth URL (saves shared credentials)"],["$0 auth setup --code 1000.AUTH.CODE","Step 2: Exchange code for refresh token"],['$0 auth setup --code "http://localhost/oauth?code=1000.AUTH.CODE&location=us"',"Step 2: Paste the full redirect URL"],["$0 auth setup --client-id 1000.ABC --client-secret xyz --token 1000.REFRESH.TOKEN","Set shared refresh token directly"],["$0 auth setup --product crm --client-id 1000.CRM --client-secret xyz --token 1000.CRM.TOKEN","Set CRM-specific credentials"],["$0 auth setup --product sign --client-id 1000.SIGN --client-secret xyz","Sign uses a separate OAuth client (sign-only scopes)"],["$0 auth setup --product analytics --client-id 1000.ANALYTICS --client-secret xyz --org-id 1234567","Analytics uses a separate OAuth client; --scopes defaults to analytics"]]),handler:async e=>{try{let t=await $(),o=Fh(e,t);if(!o.clientId||!o.clientSecret)throw new Error("--client-id and --client-secret are required. Get them from https://api-console.zoho.com/");o.token?await bh(o,t):o.code?await Ih(o,t):await Oh(o,t)}catch(t){l(t),process.exit(1)}}},xh="recruit,crm,desk";function Sh(e,t){return(e??t??xh).split(",").map(o=>o.trim())}function Fh(e,t){let o=e.region??t?.shared?.region??"us",r=e.product,n=r?t?.[r]:void 0;return{product:r,clientId:e.clientId??n?.clientId??t?.shared?.clientId,clientSecret:e.clientSecret??n?.clientSecret??t?.shared?.clientSecret,redirectUri:e.redirectUri??jc,region:o,scopes:Sh(e.scopes,r),code:Zh(e.code),token:e.token,accountsUrl:zc[o]??zc.us,apiMode:e.apiMode,orgId:e.orgId}}function wr({product:e,credentials:t,apiMode:o,orgId:r}){return{...t,apiUrl:o??void 0,orgId:Me.has(e)?r??void 0:void 0}}async function Wc(e,t,o){return e.product?ae({shared:o??{clientId:"",clientSecret:"",refreshToken:""},[e.product]:wr({product:e.product,credentials:t,apiMode:e.apiMode,orgId:e.orgId})}):ae({shared:{...t,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0})}async function bh(e,t){let o={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:e.token},r=await Wc(e,o,t?.shared);p({success:!0,...e.product?{product:e.product}:{},refreshToken:xe(e.token),configSaved:!0,configuredProducts:ue(r)})}async function Ih(e,t){let o=`${e.accountsUrl}/oauth/v2/token`,r=new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,client_secret:e.clientSecret,redirect_uri:e.redirectUri,code:e.code}),a=await(await fetch(o,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()})).json();if(a.error)throw new Error(`Token exchange failed: ${a.error}`);let i=a.refresh_token;if(!i)throw new Error("No refresh_token in response. The authorization code may have expired (valid for 2 minutes). Generate a new one.");let s={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:i},c=await Wc(e,s,t?.shared);p({step:2,success:!0,product:e.product??"shared",refreshToken:xe(i),accessToken:a.access_token?xe(a.access_token):null,scope:a.scope,configSaved:!0,configuredProducts:ue(c)})}async function kh(e,t){let o;return e.product?o=await ae({shared:{clientId:t?.shared?.clientId??"",clientSecret:t?.shared?.clientSecret??"",refreshToken:t?.shared?.refreshToken??"",region:e.region,apiMode:e.apiMode??t?.shared?.apiMode},[e.product]:wr({product:e.product,credentials:{clientId:e.clientId,clientSecret:e.clientSecret},apiMode:e.apiMode,orgId:e.orgId})}):o=await ae({shared:{clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:t?.shared?.refreshToken??"",region:e.region,apiMode:e.apiMode??t?.shared?.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),o}async function Oh(e,t){let o=e.product?Mr[e.product]??[]:e.scopes.flatMap(a=>Mr[a]??[]);if(o.length===0)throw new Error(`No valid products specified. Choose from: ${Object.keys(Mr).join(", ")}`);let r=`${e.accountsUrl}/oauth/v2/auth?scope=${o.join(",")}&client_id=${encodeURIComponent(e.clientId)}&response_type=code&access_type=offline&redirect_uri=${encodeURIComponent(e.redirectUri)}`;await kh(e,t);let n=e.product?`--product ${e.product} `:"";p({step:1,product:e.product??"shared",instructions:'Open the authorization URL in a browser. Authorize the application. Copy the "code" parameter from the redirect URL.',authorizationUrl:r,redirectUri:e.redirectUri,scopes:o,credentialsSaved:!0,nextStep:`zoho-cli auth setup ${n}--code "PASTE_REDIRECT_URL_OR_AUTH_CODE"`})}var Dh={command:"set",describe:"Save Zoho API credentials directly",builder:e=>e.option("client-id",{type:"string",demandOption:!0,describe:"OAuth client ID"}).option("client-secret",{type:"string",demandOption:!0,describe:"OAuth client secret"}).option("refresh-token",{type:"string",demandOption:!0,describe:"OAuth refresh token"}).option("product",{type:"string",choices:[...Ct],describe:"Store for a specific product instead of shared"}).option("region",{type:"string",default:"us",describe:"Zoho region (us, eu, in, au, jp)"}).option("org-id",{type:"string",describe:qc}).option("api-mode",{type:"string",default:"production",choices:["production","sandbox"],describe:"API mode"}).example([["$0 auth set --client-id abc --client-secret xyz --refresh-token 1000.abc.xyz","Set shared credentials"],["$0 auth set --product crm --client-id abc --client-secret xyz --refresh-token 1000.crm.xyz","Set CRM-specific credentials"]]),handler:async e=>{try{let t=e.product,o={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:e.refreshToken},r;t?r=await ae({shared:(await $())?.shared??{clientId:"",clientSecret:"",refreshToken:""},[t]:wr({product:t,credentials:o,apiMode:e.apiMode,orgId:e.orgId})}):r=await ae({shared:{...o,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),p({saved:!0,product:t??"shared",configuredProducts:ue(r)})}catch(t){l(t),process.exit(1)}}};function $c(e){return e?{clientId:e.clientId?xe(e.clientId):void 0,clientSecret:e.clientSecret?xe(e.clientSecret):void 0,refreshToken:e.refreshToken?xe(e.refreshToken):void 0}:void 0}function Eh(e,t){return t?{...$c(t),apiUrl:t.apiUrl,...Me.has(e)?{orgId:t.orgId}:{}}:null}function Ph(e){let t=Object.fromEntries(Ct.map(o=>[o,Eh(o,e[o])]));return{configured:!0,shared:{...$c(e.shared),region:e.shared?.region??"us",apiMode:e.shared?.apiMode??"production"},...t,configuredProducts:ue(e)}}var Mh={command:"show",describe:"Show current configuration (secrets masked)",builder:e=>e,handler:async()=>{try{let e=await $();p(e?Ph(e):{configured:!1})}catch(e){l(e),process.exit(1)}}},wh={command:"check",describe:"Verify credentials by exchanging tokens",builder:e=>e,handler:async()=>{try{let e=await $();if(e){let t=ue(e);if(t.length===0)p({authenticated:!1,error:"No products have complete credentials. Run: zoho-cli auth setup"});else{let o=st(e),r=uo(o),n={};for(let a of t)try{let i=r[a];if(!i){n[a]={authenticated:!1,error:"Not configured"};continue}let s=await i.zohoAccountsApi.accessToken();n[a]={authenticated:!0,scope:s.scope,expiresIn:s.expires_in}}catch(i){let s=i instanceof Error?i.message:String(i);n[a]={authenticated:!1,error:s}}p({products:n})}}else p({authenticated:!1,error:"No credentials configured. Run: zoho-cli auth setup"})}catch(e){l(e),process.exit(1)}}},_h={command:"clear",describe:"Remove stored credentials and token cache",builder:e=>e,handler:async()=>{try{await ia(),p({cleared:!0})}catch(e){l(e),process.exit(1)}}},Hc={command:"auth",describe:"Manage Zoho API credentials",builder:e=>e.command(Ah).command(Dh).command(Mh).command(wh).command(_h).demandCommand(1,"Please specify an auth subcommand."),handler:Z};import{access as Nh,constants as Uh}from"node:fs";import{dirname as vh}from"node:path";function Lh(e){return e.every(t=>t.status==="pass")}var Bc={command:"doctor",describe:"Check CLI configuration and connectivity",builder:e=>e,handler:async()=>{let e=await $(),t=[];t.push(Gh(e));let o=Kh(e);if(o&&t.push(o),t.push(await Vh()),e){let n=ue(e);t.push(Jh(n),...await zh(e,n),...qh(e,n))}let r=Lh(t);p({checks:t,healthy:r}),r||process.exit(t.some(n=>n.status==="fail")?1:0)}};function Gh(e){return e?{name:"config",status:"pass",message:`Config loaded from ${Tt()}`}:{name:"config",status:"fail",message:"No config found. Run: zoho-cli auth setup"}}function Kh(e){if(e?.shared?.clientId&&e?.shared?.clientSecret&&e?.shared?.refreshToken)return{name:"shared-credentials",status:"pass",message:"Shared credentials present"};if(e)return{name:"shared-credentials",status:"warn",message:"Missing shared credentials. Per-product credentials may still work."}}async function Vh(){let e=vh(Zt());return await Wh(e)?{name:"token-cache",status:"pass",message:`Token cache directory writable: ${e}`}:{name:"token-cache",status:"warn",message:`Token cache directory not writable: ${e}`}}function Jh(e){return e.length>0?{name:"products",status:"pass",message:`Configured products: ${e.join(", ")}`}:{name:"products",status:"fail",message:"No products have complete credentials"}}async function zh(e,t){let o=uo(st(e)),r=[];for(let n of t)r.push(await jh(o[n],n));return r}async function jh(e,t){if(!e)return{name:`${t}-token`,status:"warn",message:`${t}: API not configured`};let o;try{let r=await e.zohoAccountsApi.accessToken();o={name:`${t}-token`,status:"pass",message:`${t}: Token exchange successful. Scope: ${r.scope}`}}catch(r){let n=r instanceof Error?r.message:String(r);o={name:`${t}-token`,status:"fail",message:`${t}: Token exchange failed: ${n}`}}return o}function qh(e,t){return Array.from(Me).map(o=>{let r=e[o]?.orgId,n=`${o}-org-id`,a;return r?a={name:n,status:"pass",message:`${o}: Org ID configured: ${r}`}:t.includes(o)?a={name:n,status:"fail",message:`${o}: No org ID configured, but ${o} is reported as configured \u2014 every org-scoped ${o} command will fail. Run: zoho-cli auth set --product ${o} --org-id <ORG_ID>`}:a={name:n,status:"warn",message:`${o}: No org ID. ${o} commands unavailable.`},a})}function Wh(e){return new Promise(t=>{Nh(e,Uh.W_OK,o=>{t(!o)})})}var Yc=wt({notInitializedMessage:"CLI context not initialized. This is a bug."});function Xc(e){return async t=>{let o=t._?.[0];if(!(typeof o=="string"&&e.has(o)))try{let r=await $();r||(l(new Error("Not authenticated. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z")),process.exit(4)),ue(r).length===0&&(l(new Error("No products configured with complete credentials. Run: zoho-cli auth setup")),process.exit(4)),Yc.set(st(r))}catch(r){l(r),process.exit(4)}}}function It(e){return Yc.require()}function oe(e){let{recruitApi:t}=It(e);if(!t)throw new Error("Recruit not configured. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z");return t}function re(e){let{crmApi:t}=It(e);if(!t)throw new Error("CRM not configured. Run: zoho-cli auth setup --product crm --client-id X --client-secret Y --token Z");return t}function x(e){let{deskApi:t}=It(e);if(!t)throw new Error("Desk not configured. Run: zoho-cli auth setup --product desk --client-id X --client-secret Y --token Z --org-id YOUR_ORG_ID");return t}function w(e){let{signApi:t}=It(e);if(!t)throw new Error("Sign not configured. Zoho Sign requires its own OAuth client. Run: zoho-cli auth setup --product sign --client-id X --client-secret Y --token Z");return t}function k(e){let{analyticsApi:t}=It(e);if(!t)throw new Error("Analytics not configured. Zoho Analytics requires its own OAuth client. Run: zoho-cli auth setup --product analytics --client-id X --client-secret Y --token Z --org-id YOUR_ORG_ID");return t}function ye(e){return Nt(e.option("page",{type:"number",default:1,describe:"Page number (1-based)"}).option("per-page",{type:"number",default:20,describe:"Records per page"}))}function D(e){return Nt(e.option("from",{type:"number",default:1,describe:"Start index (1-based)"}).option("limit",{type:"number",default:25,describe:"Max records (max 50)"}))}function po(e){return Nt(e.option("start-index",{type:"number",default:1,describe:"Start index (1-based)"}).option("row-count",{type:"number",default:20,describe:"Records per page"}))}function _(e){return e.option("module",{alias:"m",type:"string",demandOption:!0,describe:"Zoho module name (e.g. Candidates, Contacts, Leads)"})}function De(e){return e.option("id",{type:"string",demandOption:!0,describe:"Record ID"})}function kt(e,t=!1){return e.option("fields",{type:"string",demandOption:t,describe:"Comma-separated field names to return"})}function lo(e){return e.option("sort-by",{type:"string",describe:"Field to sort by"}).option("sort-order",{type:"string",choices:["asc","desc"],describe:"Sort direction"})}var $h={nextInput:(e,t)=>{let o;if(t.info?.more_records){let r=e.page??1;o={...e,page:r+1}}else o=void 0;return o},countOf:e=>e.data?.length??0,metaOf:(e,t)=>({page:t.info?.page??e.page,per_page:t.info?.per_page??e.per_page,more_records:t.info?.more_records??!1}),hasMorePagesAvailable:(e,t)=>t.info?.more_records??!1},E={nextInput:(e,t)=>{let o=e.limit??25,r=t.data?.length??0,n;if(o<=0||r<o)n=void 0;else{let a=e.from??1;n={...e,from:a+o}}return n},countOf:e=>e.data?.length??0,metaOf:(e,t)=>({from:e.from,limit:e.limit,count:t.data?.length??0}),hasMorePagesAvailable:(e,t)=>{let o=e.limit??25,r=t.data?.length??0;return o>0&&r>=o}},Hh={nextInput:(e,t)=>{let o;if(t.page_context?.has_more_rows){let r=e.row_count??t.page_context?.row_count??20,n=e.start_index??t.page_context?.start_index??1;o={...e,start_index:n+r}}else o=void 0;return o},countOf:e=>e.data?.length??0,metaOf:(e,t)=>({start_index:t.page_context?.start_index??e.start_index,row_count:t.page_context?.row_count??e.row_count,total_count:t.page_context?.total_count,has_more_rows:t.page_context?.has_more_rows??!1}),hasMorePagesAvailable:(e,t)=>t.page_context?.has_more_rows??!1};async function fe(e){let{argv:t,initialInput:o,fetchPage:r}=e,n=await b({initialInput:o,fetchPage:r,adapter:$h,multiplePages:t.multiplePages,multiplePagesOutput:t.multiplePagesOutput,dumpOutput:t.dumpOutput,dumpMerge:t.dumpMerge});if(n.handled===!1){let a=n.result;p(a.data,{page:a.info?.page,per_page:a.info?.per_page,more_records:a.info?.more_records})}}async function ho(e){let{argv:t,initialInput:o,fetchPage:r}=e,n=await b({initialInput:o,fetchPage:async a=>{let i=await r(a);return{data:i.requests??[],page_context:i.page_context}},adapter:Hh,multiplePages:t.multiplePages,multiplePagesOutput:t.multiplePagesOutput,dumpOutput:t.dumpOutput,dumpMerge:t.dumpMerge});if(n.handled===!1){let a=n.result;p(a.data,{start_index:a.page_context?.start_index,row_count:a.page_context?.row_count,total_count:a.page_context?.total_count,has_more_rows:a.page_context?.has_more_rows??!1})}}var Bh={command:"list",describe:"List records from a module",builder:e=>lo(kt(ye(_(e)))),handler:async e=>{try{let t=oe(e),o={module:e.module,page:e.page,per_page:e.perPage,fields:e.fields,sort_by:e.sortBy,sort_order:e.sortOrder};await fe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){l(t),process.exit(1)}}},Yh={command:"get",describe:"Get a record by ID",builder:e=>De(_(e)),handler:async e=>{try{let o=await oe(e).getRecordById({module:e.module,id:e.id});p(o)}catch(t){l(t),process.exit(1)}}},Xh={command:"search",describe:"Search records in a module",builder:e=>ye(_(e)).option("criteria",{type:"string",describe:"Search criteria string, e.g. (First_Name:equals:John)"}).option("word",{type:"string",describe:"Keyword search"}).option("email",{type:"string",describe:"Search by email"}).option("phone",{type:"string",describe:"Search by phone"}),handler:async e=>{try{let t=oe(e),o={module:e.module,criteria:e.criteria,word:e.word,email:e.email,phone:e.phone,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){l(t),process.exit(1)}}},Qh={command:"insert",describe:"Insert a record into a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=oe(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},em={command:"upsert",describe:"Upsert a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=oe(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},tm={command:"update",describe:"Update a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=oe(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},om={command:"delete",describe:"Delete records from a module",builder:e=>_(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=oe(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});p(r)}catch(t){l(t),process.exit(1)}}},rm={command:"emails",describe:"Get emails for a record",builder:e=>ye(De(_(e))),handler:async e=>{try{let t=oe(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){l(t),process.exit(1)}}},nm={command:"attachments",describe:"Get attachments for a record",builder:e=>ye(De(_(e))),handler:async e=>{try{let t=oe(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){l(t),process.exit(1)}}},Qc={command:"recruit",describe:"Zoho Recruit operations",builder:e=>e.command(Bh).command(Yh).command(Xh).command(Qh).command(em).command(tm).command(om).command(rm).command(nm).demandCommand(1,"Please specify a recruit subcommand.").example([["$0 recruit list -m Candidates --per-page 10","List first 10 candidates"],["$0 recruit get -m Candidates --id 12345","Get a candidate by ID"],['$0 recruit search -m Candidates --word "John"',"Search candidates by keyword"],[`$0 recruit insert -m Candidates --data '{"First_Name":"John","Last_Name":"Doe"}'`,"Insert a candidate"]]),handler:Z};var am={command:"list",describe:"List records from a module",builder:e=>lo(kt(ye(_(e)),!0)),handler:async e=>{try{let t=re(e),o={module:e.module,fields:e.fields,page:e.page,per_page:e.perPage,sort_by:e.sortBy,sort_order:e.sortOrder};await fe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){l(t),process.exit(1)}}},im={command:"get",describe:"Get a record by ID",builder:e=>De(_(e)),handler:async e=>{try{let o=await re(e).getRecordById({module:e.module,id:e.id});p(o)}catch(t){l(t),process.exit(1)}}},sm={command:"search",describe:"Search records in a module",builder:e=>ye(_(e)).option("criteria",{type:"string",describe:"Search criteria string, e.g. (First_Name:equals:John)"}).option("word",{type:"string",describe:"Keyword search"}).option("email",{type:"string",describe:"Search by email"}).option("phone",{type:"string",describe:"Search by phone"}),handler:async e=>{try{let t=re(e),o={module:e.module,criteria:e.criteria,word:e.word,email:e.email,phone:e.phone,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){l(t),process.exit(1)}}},cm={command:"insert",describe:"Insert a record into a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=re(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},um={command:"upsert",describe:"Upsert a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=re(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},pm={command:"update",describe:"Update a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=re(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},lm={command:"delete",describe:"Delete records from a module",builder:e=>_(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=re(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});p(r)}catch(t){l(t),process.exit(1)}}},dm={command:"emails",describe:"Get emails for a record",builder:e=>ye(De(_(e))),handler:async e=>{try{let t=re(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){l(t),process.exit(1)}}},hm={command:"attachments",describe:"Get attachments for a record",builder:e=>kt(ye(De(_(e))),!0),handler:async e=>{try{let t=re(e),o={module:e.module,id:e.id,fields:e.fields,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){l(t),process.exit(1)}}},eu={command:"crm",describe:"Zoho CRM operations",builder:e=>e.command(am).command(im).command(sm).command(cm).command(um).command(pm).command(lm).command(dm).command(hm).demandCommand(1,"Please specify a CRM subcommand.").example([['$0 crm list -m Contacts --fields "First_Name,Last_Name,Email" --per-page 10',"List contacts"],["$0 crm get -m Contacts --id 12345","Get a contact by ID"],['$0 crm search -m Leads --word "Acme"',"Search leads by keyword"],[`$0 crm insert -m Contacts --data '{"First_Name":"Jane","Last_Name":"Doe"}'`,"Insert a contact"]]),handler:Z};var mm={command:"list",describe:"List tickets",builder:e=>D(e).option("department-id",{type:"string",describe:"Filter by department ID"}).option("status",{type:"string",describe:"Filter by status"}).option("sort-by",{type:"string",describe:"Field to sort by"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. contacts,assignee,departments,team,isRead)"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId,status:e.status,sortBy:e.sortBy,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getTickets(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},ym={command:"get <ticketId>",describe:"Get a ticket by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. contacts,assignee,departments,team,isRead)"}),handler:async e=>{try{let o=await x(e).getTicketById({ticketId:e.ticketId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},fm={command:"search",describe:"Search tickets",builder:e=>D(e).option("subject",{type:"string",describe:"Search by subject"}).option("status",{type:"string",describe:"Filter by status"}).option("email",{type:"string",describe:"Filter by email"}).option("department-id",{type:"string",describe:"Filter by department ID"}).option("channel",{type:"string",describe:"Filter by channel"}).option("priority",{type:"string",describe:"Filter by priority"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,subject:e.subject,status:e.status,email:e.email,departmentId:e.departmentId,channel:e.channel,priority:e.priority},r=await b({initialInput:o,fetchPage:n=>t.searchTickets(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},gm={command:"by-contact <contactId>",describe:"List tickets for a contact",builder:e=>D(e).positional("contactId",{type:"string",demandOption:!0,describe:"Contact ID"}),handler:async e=>{try{let t=x(e),o={contactId:e.contactId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketsForContact(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Rm={command:"metrics <ticketId>",describe:"Get ticket metrics",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketMetrics({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Cm={command:"agent-counts",describe:"Get ticket counts per agent",builder:e=>e.option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}).option("department-id",{type:"string",describe:"Filter by department ID"}),handler:async e=>{try{let t=x(e),o=e.agentIds.split(",").map(n=>n.trim()),r=await t.getAgentsTicketsCount({agentIds:o,departmentId:e.departmentId});p(r)}catch(t){l(t),process.exit(1)}}},tu={command:"tickets",describe:"Desk ticket operations",builder:e=>e.command(mm).command(ym).command(fm).command(gm).command(Rm).command(Cm).demandCommand(1),handler:Z};var Tm={command:"list",describe:"List departments",builder:e=>D(e).option("search",{type:"string",describe:"Search by name"}).option("is-enabled",{type:"boolean",describe:"Filter by enabled status"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,searchStr:e.search,isEnabled:e.isEnabled},r=await b({initialInput:o,fetchPage:n=>t.getDepartments(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Zm={command:"get <departmentId>",describe:"Get a department by ID",builder:e=>e.positional("departmentId",{type:"string",demandOption:!0,describe:"Department ID"}),handler:async e=>{try{let o=await x(e).getDepartmentById({departmentId:e.departmentId});p(o)}catch(t){l(t),process.exit(1)}}},ou={command:"departments",describe:"Desk department operations",builder:e=>e.command(Tm).command(Zm).demandCommand(1),handler:Z};var Am={command:"list",describe:"List contacts",builder:e=>D(e).option("sort-by",{type:"string",describe:"Field to sort by"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,sortBy:e.sortBy,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getContacts(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},xm={command:"get <contactId>",describe:"Get a contact by ID",builder:e=>e.positional("contactId",{type:"string",demandOption:!0,describe:"Contact ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await x(e).getContactById({contactId:e.contactId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},ru={command:"contacts",describe:"Desk contact operations",builder:e=>e.command(Am).command(xm).demandCommand(1),handler:Z};var Sm={command:"list",describe:"List agents",builder:e=>D(e).option("department-id",{type:"string",describe:"Filter by department ID"}).option("status",{type:"string",describe:"Filter by status (active, disabled)"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. role,profile,departments)"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId,status:e.status,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getAgents(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Fm={command:"get <agentId>",describe:"Get an agent by ID",builder:e=>e.positional("agentId",{type:"string",demandOption:!0,describe:"Agent ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await x(e).getAgentById({agentId:e.agentId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},bm={command:"my-info",describe:"Get current authenticated agent info",builder:e=>e,handler:async e=>{try{let o=await x(e).getMyInfo();p(o)}catch(t){l(t),process.exit(1)}}},nu={command:"agents",describe:"Desk agent operations",builder:e=>e.command(Sm).command(Fm).command(bm).demandCommand(1),handler:Z};var Im={command:"list",describe:"List all tags",builder:e=>D(e).option("department-id",{alias:"d",type:"string",demandOption:!0,describe:"Department ID"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId},r=await b({initialInput:o,fetchPage:n=>t.getAllTags(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},km={command:"search",describe:"Search tags",builder:e=>D(e).option("department-id",{alias:"d",type:"string",describe:"Department ID"}).option("query",{alias:"q",type:"string",demandOption:!0,describe:"Search string"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId,searchVal:e.query},r=await b({initialInput:o,fetchPage:n=>t.searchTags(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Om={command:"for-ticket <ticketId>",describe:"Get tags on a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketTags({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Dm={command:"associate <ticketId>",describe:"Add tags to a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("tags",{type:"string",demandOption:!0,describe:"Comma-separated tag names"}),handler:async e=>{try{let t=x(e),o=e.tags.split(",").map(n=>n.trim()),r=await t.associateTicketTags({ticketId:e.ticketId,tags:o});p(r)}catch(t){l(t),process.exit(1)}}},Em={command:"dissociate <ticketId>",describe:"Remove a tag from a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("tag-id",{type:"string",demandOption:!0,describe:"Tag ID to remove"}),handler:async e=>{try{await x(e).dissociateTicketTag({ticketId:e.ticketId,tagId:e.tagId}),p({removed:!0})}catch(t){l(t),process.exit(1)}}},au={command:"tags",describe:"Desk tag operations",builder:e=>e.command(Im).command(km).command(Om).command(Dm).command(Em).demandCommand(1),handler:Z};var Pm={command:"list <ticketId>",describe:"List comments on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("sort-by",{type:"string",describe:"Sort field"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit,sortBy:e.sortBy},r=await b({initialInput:o,fetchPage:n=>t.getTicketComments(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Mm={command:"get <ticketId> <commentId>",describe:"Get a comment by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("commentId",{type:"string",demandOption:!0,describe:"Comment ID"}),handler:async e=>{try{let o=await x(e).getTicketCommentById({ticketId:e.ticketId,commentId:e.commentId});p(o)}catch(t){l(t),process.exit(1)}}},wm={command:"create <ticketId>",describe:"Create a comment on a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("content",{type:"string",demandOption:!0,describe:"Comment content"}).option("public",{type:"boolean",default:!1,describe:"Make comment public"}).option("content-type",{type:"string",default:"plainText",choices:["plainText","html"],describe:"Content type"}),handler:async e=>{try{let o=await x(e).createTicketComment({ticketId:e.ticketId,content:e.content,isPublic:e.public,contentType:e.contentType});p(o)}catch(t){l(t),process.exit(1)}}},_m={command:"delete <ticketId> <commentId>",describe:"Delete a comment",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("commentId",{type:"string",demandOption:!0,describe:"Comment ID"}),handler:async e=>{try{await x(e).deleteTicketComment({ticketId:e.ticketId,commentId:e.commentId}),p({deleted:!0})}catch(t){l(t),process.exit(1)}}},iu={command:"comments",describe:"Desk comment operations",builder:e=>e.command(Pm).command(Mm).command(wm).command(_m).demandCommand(1),handler:Z};var Nm={command:"list <ticketId>",describe:"List attachments on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketAttachments(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Um={command:"delete <ticketId> <attachmentId>",describe:"Delete an attachment",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("attachmentId",{type:"string",demandOption:!0,describe:"Attachment ID"}),handler:async e=>{try{await x(e).deleteTicketAttachment({ticketId:e.ticketId,attachmentId:e.attachmentId}),p({deleted:!0})}catch(t){l(t),process.exit(1)}}},su={command:"attachments",describe:"Desk attachment operations",builder:e=>e.command(Nm).command(Um).demandCommand(1),handler:Z};var vm={command:"list <ticketId>",describe:"List followers of a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketFollowers({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Lm={command:"add <ticketId>",describe:"Add followers to a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}),handler:async e=>{try{let t=x(e),o=e.agentIds.split(",").map(r=>r.trim());await t.addTicketFollowers({ticketId:e.ticketId,agentIds:o}),p({added:!0})}catch(t){l(t),process.exit(1)}}},Gm={command:"remove <ticketId>",describe:"Remove followers from a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}),handler:async e=>{try{let t=x(e),o=e.agentIds.split(",").map(r=>r.trim());await t.removeTicketFollowers({ticketId:e.ticketId,agentIds:o}),p({removed:!0})}catch(t){l(t),process.exit(1)}}},cu={command:"followers",describe:"Desk ticket follower operations",builder:e=>e.command(vm).command(Lm).command(Gm).demandCommand(1),handler:Z};var Km={command:"timer <ticketId>",describe:"Get current timer state for a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketTimer({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Vm={command:"timer-action <ticketId>",describe:"Start, pause, resume, or stop a timer",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("action",{type:"string",demandOption:!0,choices:["start","pause","resume","stop"],describe:"Timer action"}),handler:async e=>{try{let o=await x(e).performTicketTimerAction({ticketId:e.ticketId,timerAction:e.action});p(o)}catch(t){l(t),process.exit(1)}}},Jm={command:"entries <ticketId>",describe:"List time entries for a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketTimeEntries(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},zm={command:"summation <ticketId>",describe:"Get time entry summation for a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketTimeEntrySummation({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},uu={command:"time",describe:"Desk time tracking operations",builder:e=>e.command(Km).command(Vm).command(Jm).command(zm).demandCommand(1),handler:Z};var jm={command:"list <ticketId>",describe:"List threads on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getTicketThreads(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},qm={command:"get <ticketId> <threadId>",describe:"Get a thread by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("threadId",{type:"string",demandOption:!0,describe:"Thread ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await x(e).getTicketThreadById({ticketId:e.ticketId,threadId:e.threadId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},pu={command:"threads",describe:"Desk ticket thread operations",builder:e=>e.command(jm).command(qm).demandCommand(1),handler:Z};var Wm={command:"list <ticketId>",describe:"List activities on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketActivities(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},lu={command:"activities",describe:"Desk ticket activity operations",builder:e=>e.command(Wm).demandCommand(1),handler:Z};var du={command:"desk",describe:"Zoho Desk operations",builder:e=>e.command(tu).command(ou).command(ru).command(nu).command(au).command(iu).command(su).command(cu).command(uu).command(pu).command(lu).demandCommand(1,"Please specify a desk subcommand.").example([["$0 desk tickets list --limit 10","List first 10 tickets"],["$0 desk tickets get 12345","Get a ticket by ID"],["$0 desk agents my-info","Get current agent info"],['$0 desk comments create 12345 --content "Looking into this"',"Add a comment"]]),handler:Z};import{readFile as $m,writeFile as hu}from"node:fs/promises";import{basename as Hm}from"node:path";function Bm(e){let t={};return e.requestName&&(t.request_name=e.requestName),e.folderName&&(t.folder_name=e.folderName),e.ownerFullName&&(t.owner_full_name=e.ownerFullName),e.recipientEmail&&(t.recipient_email=e.recipientEmail),e.recipientName&&(t.recipient_name=e.recipientName),e.formName&&(t.form_name=e.formName),Object.keys(t).length>0?t:void 0}var Ym={command:"list",describe:"List sign requests (documents)",builder:e=>po(e).option("sort-column",{type:"string",describe:"Column to sort by (e.g. request_name, created_time, recipient_email)"}).option("sort-order",{type:"string",choices:["ASC","DESC"],describe:"Sort direction"}).option("request-name",{type:"string",describe:"Filter by request name"}).option("folder-name",{type:"string",describe:"Filter by folder name"}).option("owner-full-name",{type:"string",describe:"Filter by owner full name"}).option("recipient-email",{type:"string",describe:"Filter by recipient email"}).option("recipient-name",{type:"string",describe:"Filter by recipient name"}).option("form-name",{type:"string",describe:"Filter by form name"}),handler:async e=>{try{let t=w(e),o={start_index:e.startIndex,row_count:e.rowCount,sort_column:e.sortColumn,sort_order:e.sortOrder,search_columns:Bm(e)};await ho({argv:e,initialInput:o,fetchPage:r=>t.getDocuments(r)})}catch(t){l(t),process.exit(1)}}},Xm={command:"get <requestId>",describe:"Get a sign request by ID",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}),handler:async e=>{try{let o=await w(e).getDocument({requestId:e.requestId});p(o)}catch(t){l(t),process.exit(1)}}},Qm={command:"form-data <requestId>",describe:"Get filled form-field values for a completed request",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}),handler:async e=>{try{let o=await w(e).getDocumentFormData({requestId:e.requestId});p(o)}catch(t){l(t),process.exit(1)}}},ey={command:"create",describe:"Create a draft sign request from a local file",builder:e=>e.option("file",{type:"string",demandOption:!0,describe:"Path to the local document to upload"}).option("data",{type:"string",demandOption:!0,describe:"JSON request data (ZohoSignRequestData: request_name, is_sequential, actions, ...)"}).option("content-type",{type:"string",default:"application/pdf",describe:"MIME type of the uploaded file"}),handler:async e=>{try{let t=w(e),o=JSON.parse(e.data),r=await $m(e.file),n=new File([r],Hm(e.file),{type:e.contentType}),a=await t.createDocument({requestData:o,file:n});p(a)}catch(t){l(t),process.exit(1)}}},ty={command:"create-from-template",describe:"Create a sign request from a template",builder:e=>e.option("template-id",{type:"string",demandOption:!0,describe:"Template ID"}).option("data",{type:"string",demandOption:!0,describe:"JSON template data (ZohoSignCreateDocumentFromTemplateData: request_name, actions, field_data, ...)"}).option("quick-send",{type:"boolean",default:!0,describe:"Send immediately (true) or leave as a draft (false)"}),handler:async e=>{try{let t=w(e),o=JSON.parse(e.data),r=await t.createDocumentFromTemplate({templateId:e.templateId,data:o,isQuickSend:e.quickSend});p(r)}catch(t){l(t),process.exit(1)}}},oy={command:"update <requestId>",describe:"Update a draft sign request",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("data",{type:"string",demandOption:!0,describe:"JSON partial request data to apply"}),handler:async e=>{try{let t=w(e),o=JSON.parse(e.data),r=await t.updateDocument({requestId:e.requestId,data:o});p(r)}catch(t){l(t),process.exit(1)}}},ry={command:"send <requestId>",describe:"Submit a draft request to its recipients for signing",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("data",{type:"string",describe:"Optional JSON partial request data to apply before sending"}),handler:async e=>{try{let t=w(e),o=e.data?JSON.parse(e.data):void 0,r=await t.sendDocumentForSignature({requestId:e.requestId,data:o});p(r)}catch(t){l(t),process.exit(1)}}},ny={command:"extend <requestId>",describe:"Extend the expiration date of an in-progress request",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("expire-by",{type:"string",demandOption:!0,describe:'New expiration date string (e.g. "30 November 2024")'}),handler:async e=>{try{let o=await w(e).extendDocument({requestId:e.requestId,expire_by:e.expireBy});p(o)}catch(t){l(t),process.exit(1)}}},ay={command:"delete <requestId>",describe:"Delete a request (optionally recalling an in-progress one)",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("recall-inprogress",{type:"boolean",describe:"Recall an in-progress request before deleting"}).option("reason",{type:"string",describe:"Reason for recalling/deleting"}),handler:async e=>{try{let o=await w(e).deleteDocument({requestId:e.requestId,recall_inprogress:e.recallInprogress,reason:e.reason});p(o)}catch(t){l(t),process.exit(1)}}},iy={command:"download <requestId>",describe:"Download the signed PDF (or ZIP) for a request to a local file",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("output",{type:"string",demandOption:!0,describe:"Path to write the downloaded file to"}).option("with-coc",{type:"boolean",describe:"Include the completion certificate"}).option("merge",{type:"boolean",describe:"Merge all signed documents into one file"}).option("password",{type:"string",describe:"Password for protected documents"}),handler:async e=>{try{let o=await w(e).downloadPdf({requestId:e.requestId,with_coc:e.withCoc,merge:e.merge,password:e.password});if(!o.ok)throw new Error(`Download failed with status ${o.status}`);let r=Buffer.from(await o.arrayBuffer());await hu(e.output,r),p({saved:!0,path:e.output,bytes:r.length})}catch(t){l(t),process.exit(1)}}},sy={command:"certificate <requestId>",describe:"Download the completion certificate PDF for a request to a local file",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("output",{type:"string",demandOption:!0,describe:"Path to write the certificate to"}),handler:async e=>{try{let o=await w(e).downloadCompletionCertificate({requestId:e.requestId});if(!o.ok)throw new Error(`Certificate download failed with status ${o.status}`);let r=Buffer.from(await o.arrayBuffer());await hu(e.output,r),p({saved:!0,path:e.output,bytes:r.length})}catch(t){l(t),process.exit(1)}}},cy={command:"embed-url <requestId> <actionId>",describe:"Generate an embedded signing URL for a recipient action",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).positional("actionId",{type:"string",demandOption:!0,describe:"Recipient action ID"}).option("host",{type:"string",demandOption:!0,describe:"Hosting origin embedded in the token (https required in production)"}),handler:async e=>{try{let o=await w(e).getEmbeddedSigningUrl({requestId:e.requestId,actionId:e.actionId,host:e.host});p(o)}catch(t){l(t),process.exit(1)}}},mu={command:"documents",describe:"Zoho Sign document (request) operations",builder:e=>e.command(Ym).command(Xm).command(Qm).command(ey).command(ty).command(oy).command(ry).command(ny).command(ay).command(iy).command(sy).command(cy).demandCommand(1,"Please specify a documents subcommand.").example([["$0 sign documents list --row-count 10","List first 10 sign requests"],["$0 sign documents get 12345","Get a request by ID"],[`$0 sign documents create --file ./nda.pdf --data '{"request_name":"NDA","is_sequential":true,"actions":[{"action_type":"SIGN","recipient_name":"Jane","recipient_email":"jane@example.com"}]}'`,"Create a draft from a file"],["$0 sign documents download 12345 --output ./signed.pdf --with-coc --merge","Download the signed PDF"]]),handler:Z};function uy(e){let t={};return e.templateName&&(t.template_name=e.templateName),e.ownerFullName&&(t.owner_full_name=e.ownerFullName),Object.keys(t).length>0?t:void 0}var py={command:"list",describe:"List templates",builder:e=>po(e).option("sort-column",{type:"string",describe:"Column to sort by (e.g. template_name, created_time)"}).option("sort-order",{type:"string",choices:["ASC","DESC"],describe:"Sort direction"}).option("template-name",{type:"string",describe:"Filter by template name"}).option("owner-full-name",{type:"string",describe:"Filter by owner full name"}),handler:async e=>{try{let t=w(e),o={start_index:e.startIndex,row_count:e.rowCount,sort_column:e.sortColumn,sort_order:e.sortOrder,search_columns:uy(e)};await ho({argv:e,initialInput:o,fetchPage:r=>t.getTemplates(r)})}catch(t){l(t),process.exit(1)}}},ly={command:"get <templateId>",describe:"Get a template by ID",builder:e=>e.positional("templateId",{type:"string",demandOption:!0,describe:"Template ID"}),handler:async e=>{try{let o=await w(e).getTemplate({templateId:e.templateId});p(o)}catch(t){l(t),process.exit(1)}}},yu={command:"templates",describe:"Zoho Sign template operations",builder:e=>e.command(py).command(ly).demandCommand(1,"Please specify a templates subcommand.").example([["$0 sign templates list --row-count 10","List first 10 templates"],["$0 sign templates get 286906000001616000","Get a template by ID"]]),handler:Z};var dy={command:"field-types",describe:"List available document field types",builder:e=>e,handler:async e=>{try{let o=await w(e).retrieveFieldTypes();p(o)}catch(t){l(t),process.exit(1)}}},fu={command:"sign",describe:"Zoho Sign operations",builder:e=>e.command(mu).command(yu).command(dy).demandCommand(1,"Please specify a sign subcommand.").example([["$0 sign documents list --row-count 10","List first 10 sign requests"],["$0 sign templates list","List templates"],["$0 sign documents get 12345","Get a request by ID"],["$0 sign field-types","List available field types"]]),handler:Z};var hy={command:"list",describe:"List the organizations available to the authenticated user",handler:async e=>{try{let o=await k(e).getOrgs();p(o.data.orgs,{count:o.data.orgs?.length})}catch(t){l(t),process.exit(1)}}},gu={command:"orgs",describe:"Analytics organization operations",builder:e=>e.command(hy).demandCommand(1).example([["$0 analytics orgs list","Find the org id needed by every other Analytics command"]]),handler:Z};var my={command:"list",describe:"List all accessible workspaces",builder:e=>e.option("owned",{type:"boolean",describe:"Only workspaces owned by the authenticated user"}).option("shared",{type:"boolean",describe:"Only workspaces shared with the authenticated user"}),handler:async e=>{try{let t=k(e);if(e.owned){let o=await t.getOwnedWorkspaces();p(o.data.workspaces,{count:o.data.workspaces?.length})}else if(e.shared){let o=await t.getSharedWorkspaces();p(o.data.workspaces,{count:o.data.workspaces?.length})}else{let o=await t.getAllWorkspaces();p(o.data)}}catch(t){l(t),process.exit(1)}}},yy={command:"get <workspaceId>",describe:"Get a workspace by ID",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}),handler:async e=>{try{let o=await k(e).getWorkspaceDetails({workspaceId:e.workspaceId});p(o.data.workspaces)}catch(t){l(t),process.exit(1)}}};function fy(e,t){if(!t)throw new Error(`Deleting a workspace cannot be undone. Re-run with --confirm ${e} to proceed.`);if(t!==e)throw new Error(`--confirm ${t} does not match the workspace being deleted (${e}).`);return e}var gy={command:"delete <workspaceId>",describe:"Delete a workspace and everything in it. This cannot be undone",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).option("confirm",{type:"string",describe:"Repeat the workspace ID to confirm. Required"}),handler:async e=>{try{let t=fy(e.workspaceId,e.confirm);await k(e).deleteWorkspace({workspaceId:t}),p({deleted:!0,workspaceId:t})}catch(t){l(t),process.exit(1)}}},Ru={command:"workspaces",describe:"Analytics workspace operations",builder:e=>e.command(my).command(yy).command(gy).demandCommand(1).example([["$0 analytics workspaces list","List owned and shared workspaces"],["$0 analytics workspaces list --owned","List only owned workspaces"],["$0 analytics workspaces delete 1767024000000060001 --confirm 1767024000000060001","Delete a workspace, confirming the id"]]),handler:Z};var Ry={command:"list <workspaceId>",describe:"List the views of a workspace",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}),handler:async e=>{try{let o=await k(e).getViews({workspaceId:e.workspaceId});p(o.data.views,{count:o.data.views?.length})}catch(t){l(t),process.exit(1)}}},Cy={command:"get <viewId>",describe:"Get a view by ID",builder:e=>e.positional("viewId",{type:"string",demandOption:!0,describe:"View ID (globally unique, no workspace needed)"}),handler:async e=>{try{let o=await k(e).getViewDetails({viewId:e.viewId});p(o.data.views)}catch(t){l(t),process.exit(1)}}},Ty={command:"columns <workspaceId> <viewId>",describe:"List the columns of a table",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"View ID"}),handler:async e=>{try{let o=await k(e).getTableMetadata({workspaceId:e.workspaceId,viewId:e.viewId});p(o.data.columns,{count:o.data.columns?.length})}catch(t){l(t),process.exit(1)}}},Zy={command:"delete <workspaceId> <viewId>",describe:"Delete a view. This cannot be undone",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"View ID"}).option("dependent-views",{type:"boolean",default:!1,describe:"Also delete the reports, dashboards and query tables built on this view"}),handler:async e=>{try{await k(e).deleteView({workspaceId:e.workspaceId,viewId:e.viewId,config:{deleteDependentViews:e.dependentViews}}),p({deleted:!0,workspaceId:e.workspaceId,viewId:e.viewId,deletedDependentViews:e.dependentViews})}catch(t){l(t),process.exit(1)}}},Cu={command:"views",describe:"Analytics view operations",builder:e=>e.command(Ry).command(Cy).command(Ty).command(Zy).demandCommand(1).example([["$0 analytics views list 1767024000000060001","List the views of a workspace"],["$0 analytics views columns 1767024000000060001 1767024000000149001","Inspect a table before importing into it"],["$0 analytics views delete 1767024000000060001 1767024000000149001",'Drop a table created by "import new-table"']]),handler:Z};import{readFile as Ay}from"node:fs/promises";import{basename as xy,extname as Tu}from"node:path";var Sy=["append","truncateadd","updateadd"],Fy=["abort","skiprow","setcolumnempty"];async function Zu(e){let t=await Ay(e,"utf8"),o=xy(e),r=Tu(e).toLowerCase()===".json"?"application/json":"text/csv";return $n({content:t,fileName:o,mimeType:r})}function mo(e){let t=Tu(e).toLowerCase();return{".json":"json",".csv":"csv"}[t]}function by(e,t){let o=t?.split(",").map(r=>r.trim()).filter(r=>r.length>0);if(e==="updateadd"&&!o?.length)throw new Error("The updateadd mode requires --matching-columns.");return o?.length?o:void 0}function Au(e){return e.option("file",{alias:"f",type:"string",demandOption:!0,describe:"Path to the CSV or JSON file to import"}).option("file-type",{type:"string",choices:["csv","json"],describe:"Format of the file. Inferred from its extension when omitted"}).option("on-error",{type:"string",choices:Fy,describe:"What to do when a row cannot be imported"}).option("async",{type:"boolean",default:!1,describe:"Queue the import as a job and poll it, rather than waiting on one request"})}var Iy={command:"data <workspaceId> <viewId>",describe:"Import a file into an existing table",builder:e=>Au(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"Target table view ID"}).option("mode",{alias:"m",type:"string",choices:Sy,default:"append",describe:"append adds rows, truncateadd replaces every row, updateadd upserts on --matching-columns"}).option("matching-columns",{type:"string",describe:"Comma-separated columns to match on. Required for the updateadd mode"}),handler:async e=>{try{let t=k(e),o=e.mode,r=by(o,e.matchingColumns),n=await Zu(e.file),a={importType:o,fileType:e.fileType??mo(e.file),onError:e.onError,matchingColumns:r};if(e.async){let i=await t.importDataInTableAndAwaitJob({workspaceId:e.workspaceId,viewId:e.viewId,file:n,config:a}),{jobCode:s,jobStatus:c,jobInfo:u}=i.data;p({jobCode:s,jobStatus:c,...u},{complete:Oe(s)})}else{let i=await t.importDataInTable({workspaceId:e.workspaceId,viewId:e.viewId,file:n,config:a});p(i.data)}}catch(t){l(t),process.exit(1)}}},ky={command:"new-table <workspaceId> <tableName>",describe:"Create a table in a workspace from an imported file",builder:e=>Au(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("tableName",{type:"string",demandOption:!0,describe:"Name of the table to create"}),handler:async e=>{try{let t=k(e),o=await Zu(e.file),r={tableName:e.tableName,fileType:e.fileType??mo(e.file),onError:e.onError};if(e.async){let n=await t.createImportJobInNewTable({workspaceId:e.workspaceId,file:o,config:r});p(n.data)}else{let n=await t.importDataInNewTable({workspaceId:e.workspaceId,file:o,config:r});p(n.data)}}catch(t){l(t),process.exit(1)}}},Oy={command:"job <workspaceId> <jobId>",describe:"Get the status of an asynchronous import job",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("jobId",{type:"string",demandOption:!0,describe:"Import job ID"}),handler:async e=>{try{let o=await k(e).getImportJob({workspaceId:e.workspaceId,jobId:e.jobId});p(o.data,{complete:Oe(o.data.jobCode)})}catch(t){l(t),process.exit(1)}}},xu={command:"import",describe:"Analytics import operations",builder:e=>e.command(Iy).command(ky).command(Oy).demandCommand(1).example([["$0 analytics import data WS VIEW -f rows.csv","Append the rows of a CSV to a table"],["$0 analytics import data WS VIEW -f rows.csv -m truncateadd","Replace every row in a table"],["$0 analytics import data WS VIEW -f big.csv --async","Queue a large import and poll it"],["$0 analytics import new-table WS Sales -f rows.csv","Create a table from a CSV"]]),handler:Z};import{writeFile as Dy}from"node:fs/promises";var Ey=["csv","json","xml","xls","pdf","html","image"];async function _r(e,t){let o=await e.text(),r;return t?await Dy(t,o,"utf8"):r=o,r}function Su(e){return e.option("format",{type:"string",choices:Ey,default:"csv",describe:"Format of the exported data"}).option("out",{alias:"o",type:"string",describe:"Write the export to this file instead of printing it"}).option("criteria",{type:"string",describe:`Filter expression, e.g. "Sales"."Region"='West'`}).option("columns",{type:"string",describe:"Comma-separated columns to export"})}function Py(e){let t=e?.split(",").map(o=>o.trim()).filter(o=>o.length>0);return t?.length?t:void 0}function Fu(e){return{responseFormat:e.format,criteria:e.criteria,selectedColumns:Py(e.columns)}}var My={command:"data <workspaceId> <viewId>",describe:"Export the data of a view",builder:e=>Su(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"View ID"}).option("async",{type:"boolean",default:!1,describe:"Queue the export as a job and poll it. Required for dashboards, query tables, and tables over a million rows"}),handler:async e=>{try{let t=k(e),o=Fu(e);if(e.async){let r=await t.exportDataAndAwaitJob({workspaceId:e.workspaceId,viewId:e.viewId,config:o});if(Oe(r.data.jobCode)){let n=await t.downloadExport({workspaceId:e.workspaceId,jobId:r.data.jobId}),a=await _r(n,e.out);p(a??{written:e.out,jobId:r.data.jobId})}else p(r.data,{complete:!1})}else{let r=await t.exportData({workspaceId:e.workspaceId,viewId:e.viewId,config:o}),n=await _r(r,e.out);p(n??{written:e.out})}}catch(t){l(t),process.exit(1)}}},wy={command:"query <workspaceId>",describe:"Export the results of a SQL query",builder:e=>Su(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).option("sql",{type:"string",demandOption:!0,describe:"The SQL SELECT statement to run"}),handler:async e=>{try{let t=k(e),o={...Fu(e),sqlQuery:e.sql},r=await t.createExportJobForSqlQuery({workspaceId:e.workspaceId,config:o}),n=await t.getExportJob({workspaceId:e.workspaceId,jobId:r.data.jobId});p(n.data,{complete:Oe(n.data.jobCode)})}catch(t){l(t),process.exit(1)}}},_y={command:"job <workspaceId> <jobId>",describe:"Get the status of an asynchronous export job",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("jobId",{type:"string",demandOption:!0,describe:"Export job ID"}).option("download",{type:"boolean",default:!1,describe:"Download the export when the job has completed"}).option("out",{alias:"o",type:"string",describe:"Write the download to this file instead of printing it"}),handler:async e=>{try{let t=k(e),o=await t.getExportJob({workspaceId:e.workspaceId,jobId:e.jobId});if(e.download&&Oe(o.data.jobCode)){let r=await t.downloadExport({workspaceId:e.workspaceId,jobId:e.jobId}),n=await _r(r,e.out);p(n??{written:e.out})}else p(o.data,{complete:Oe(o.data.jobCode)})}catch(t){l(t),process.exit(1)}}},bu={command:"export",describe:"Analytics export operations",builder:e=>e.command(My).command(wy).command(_y).demandCommand(1).example([["$0 analytics export data WS VIEW -o rows.csv","Export a table to a CSV file"],["$0 analytics export data WS VIEW --format json","Print a table as JSON"],['$0 analytics export query WS --sql "select * from Sales"',"Queue an ad-hoc SQL export"]]),handler:Z};import{readFile as Ny}from"node:fs/promises";function Uy(e,t){return{clean:t,rowCount:e.rowCount,matched:e.matchedColumns.length,dropped:e.droppedColumns.length,empty:e.emptyColumns.length,emptyRequired:e.emptyColumns.filter(o=>o.required).length,caseMismatched:e.caseMismatchedColumns.length,conflicts:e.conflicts.length,conflictingValues:e.conflicts.reduce((o,r)=>o+r.conflictCount,0)}}var vy={command:"schema <workspaceId> <viewId>",describe:"Compare a file against a table before importing it",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"Target table view ID"}).option("file",{alias:"f",type:"string",demandOption:!0,describe:"Path to the CSV or JSON file that would be imported"}).option("file-type",{type:"string",choices:["csv","json"],describe:"Format of the file. Inferred from its extension when omitted"}).option("delimiter",{type:"string",describe:"Field delimiter of the CSV. Defaults to a comma"}).option("max-samples",{type:"number",describe:"Offending values to report per conflict. Defaults to 3"}).option("strict",{type:"boolean",default:!1,describe:"Also treat a nullable column the file omits as drift"}).option("quiet",{type:"boolean",default:!1,describe:"Report only through the exit code, printing nothing"}),handler:async e=>{try{let t=k(e),o=e.fileType??mo(e.file);if(o==null)throw new Error(`Cannot tell the format of "${e.file}" from its extension. Pass --file-type csv or --file-type json.`);let r=await Ny(e.file,"utf8"),n=sc({content:r,fileType:o,delimiter:e.delimiter}),{data:a}=await t.getTableMetadata({workspaceId:e.workspaceId,viewId:e.viewId}),i=cc({...n,columns:a.columns??[],maxSamples:e.maxSamples}),s=uc(i,{strict:e.strict});e.quiet||p(i,Uy(i,s)),s||process.exit(1)}catch(t){l(t),process.exit(1)}}},Iu={command:"diff",describe:"Analytics comparison operations",builder:e=>e.command(vy).demandCommand(1).example([["$0 analytics diff schema WS VIEW -f rows.csv","Report what an import of the file would drop, leave empty, or mangle"],["$0 analytics diff schema WS VIEW -f rows.csv --strict","Also fail on a nullable column the file omits"],["$0 analytics diff schema WS VIEW -f rows.csv --quiet && zoho-cli analytics import data WS VIEW -f rows.csv","Gate an import on a clean diff"]]),handler:Z};function Nr(e){return e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"Table view ID"})}var Ly={command:"add <workspaceId> <viewId>",describe:"Add a single row to a table",builder:e=>Nr(e).option("columns",{type:"string",demandOption:!0,describe:"Row as a JSON object of column name to value"}),handler:async e=>{try{let t=k(e),o=JSON.parse(e.columns),r=await t.addRow({workspaceId:e.workspaceId,viewId:e.viewId,config:{columns:o}});p(r.data)}catch(t){l(t),process.exit(1)}}},Gy={command:"update <workspaceId> <viewId>",describe:"Update the rows of a table matching a criteria expression",builder:e=>Nr(e).option("columns",{type:"string",demandOption:!0,describe:"New values as a JSON object of column name to value"}).option("criteria",{type:"string",describe:`Filter expression, e.g. "Sales"."Region"='West'`}).option("all-rows",{type:"boolean",default:!1,describe:"Update every row. Required when no --criteria is given"}).option("add-if-not-exist",{type:"boolean",default:!1,describe:"Insert a row when the criteria matches nothing"}),handler:async e=>{try{let t=k(e),o=JSON.parse(e.columns),r=await t.updateRows({workspaceId:e.workspaceId,viewId:e.viewId,config:{columns:o,criteria:e.criteria,updateAllRows:e.allRows,addIfNotExist:e.addIfNotExist}});p(r.data)}catch(t){l(t),process.exit(1)}}},Ky={command:"delete <workspaceId> <viewId>",describe:"Delete the rows of a table matching a criteria expression",builder:e=>Nr(e).option("criteria",{type:"string",describe:`Filter expression, e.g. "Sales"."Region"='West'`}).option("all-rows",{type:"boolean",default:!1,describe:"Delete every row. Required when no --criteria is given"}),handler:async e=>{try{let o=await k(e).deleteRows({workspaceId:e.workspaceId,viewId:e.viewId,config:{criteria:e.criteria,deleteAllRows:e.allRows}});p(o.data)}catch(t){l(t),process.exit(1)}}},ku={command:"rows",describe:"Analytics row operations",builder:e=>e.command(Ly).command(Gy).command(Ky).demandCommand(1).example([[`$0 analytics rows add WS VIEW --columns '{"Region":"East"}'`,"Add one row"],[`$0 analytics rows delete WS VIEW --criteria '"Sales"."Region"='"'"'West'"'"''`,"Delete the rows matching a filter"]]),handler:Z};var Ou={command:"analytics",describe:"Zoho Analytics operations",builder:e=>e.command(gu).command(Ru).command(Cu).command(xu).command(bu).command(ku).command(Iu).demandCommand(1,"Please specify an analytics subcommand.").example([["$0 analytics orgs list","Find the org id every other command needs"],["$0 analytics workspaces list","List the accessible workspaces"],["$0 analytics import data WS VIEW -f rows.csv -m truncateadd","Replace a table with the rows of a CSV"],["$0 analytics export data WS VIEW -o rows.csv","Export a table to a CSV file"]]),handler:Z};var Du={command:"request <product> <method> <path>",describe:"Make a raw API request through the authenticated context",builder:e=>e.positional("product",{type:"string",demandOption:!0,choices:["recruit","crm","desk","sign"],describe:"Zoho product"}).positional("method",{type:"string",demandOption:!0,choices:["GET","POST","PUT","PATCH","DELETE"],describe:"HTTP method"}).positional("path",{type:"string",demandOption:!0,describe:"API path (relative to product base URL)"}).option("body",{type:"string",describe:"JSON request body"}).option("query",{type:"string",describe:"JSON query parameters"}).example([["$0 request recruit GET /v2/Candidates","List candidates via raw API"],[`$0 request desk GET /tickets --query '{"limit":5}'`,"List 5 desk tickets via raw API"],[`$0 request crm POST /v8/Contacts --body '{"data":[{"Last_Name":"Test"}]}'`,"Create a CRM contact via raw API"],["$0 request sign GET /templates","List sign templates via raw API"]]),handler:async e=>{try{let t=e.product,o=e.method,r=e.path,n;switch(t){case"recruit":n=oe(e).recruitContext;break;case"crm":n=re(e).crmContext;break;case"desk":n=x(e).deskContext;break;case"sign":n=w(e).signContext;break;default:throw new Error(`Unknown product: ${t}`)}let a=r;if(e.query){let c=JSON.parse(e.query),u=new URLSearchParams(c),d=a.includes("?")?"&":"?";a=`${a}${d}${u.toString()}`}let i={method:o};e.body&&(i.body=e.body,i.headers={"Content-Type":"application/json"});let s=await n.fetchJson(a,i);p(s)}catch(t){l(t),process.exit(1)}}};var zy=ra({cliName:"zoho-cli",loadOutputConfig:async()=>(await $())?.output,mergeOutputConfig:e=>ae({output:e}),clearOutputConfig:aa}),jy=[Qc,eu,du,fu,Ou,Du],Eu=[Hc,zy,Bc];function qy(e){return e.command.split(" ")[0]}var Pu=new Set(Eu.map(qy)),Wy=oa({cliName:"zoho-cli",skipCommands:Pu,loadOutputConfig:async()=>(await $())?.output,saveCommandOutputConfig:async(e,t)=>{await ae({output:{commands:{[e]:t}}})}});async function $y(){try{await Vy(Jy(process.argv)).scriptName("zoho-cli").usage("$0 <command> [options]").option("verbose",{alias:"v",type:"boolean",default:!1,global:!0,describe:"Verbose output"}).option("dump-dir",{type:"string",global:!0,describe:"Directory to save full API responses as JSON files (overrides config)"}).option("pick",{type:"string",global:!0,describe:"Comma-separated top-level fields to include in output (overrides config)"}).option("set-dump-dir",{type:"string",global:!0,describe:"Save dump directory to config for this command and apply now"}).option("set-pick",{type:"string",global:!0,describe:"Save pick fields to config for this command and apply now"}).option("pick-all",{type:"boolean",global:!0,describe:"Ignore any configured pick filters and return full response data"}).middleware([Xc(Pu),Wy],!0).command(Eu).command(jy).demandCommand(1,"Please specify a command. Use --help for available commands.").strict().fail(!1).help().alias("help","h").version(!1).wrap(Math.min(120,process.stdout.columns||80)).parse()}catch(e){l(e),process.exit(1)}}await $y();
|
|
10
|
+
`?2:1):(a+=u,s=!0,c+=1)}return(s||a!==""||n.length>0)&&(n.push(a),r.push(n)),r}function $d(e,t){let o=Wd(e,t??","),[r,...n]=o,a;if(r==null)a={columnNames:[],rows:[]};else{let i=r.map(c=>c.trim()),s=n.map(c=>{let u={};return i.forEach((d,h)=>{d!==""&&(u[d]=c[h]??"")}),u});a={columnNames:xo(i.filter(c=>c!=="")),rows:s}}return a}function Hd(e){let t;try{t=JSON.parse(e)}catch(a){throw new Error(`zohoAnalyticsRowDataFromJson(): the content is not valid JSON. ${a.message}`,{cause:a})}let o=a=>a!=null&&typeof a=="object"&&!Array.isArray(a),r=Array.isArray(t)?t:[t];if(!r.every(o))throw new Error("zohoAnalyticsRowDataFromJson(): the content must be an array of row objects, as a Zoho Analytics JSON import is.");let n=r;return{columnNames:xo(n.flatMap(a=>Object.keys(a))),rows:n}}function sc(e){let{content:t,fileType:o,delimiter:r}=e;return o==="json"?Hd(t):$d(t,r)}var Bd=3,Yd=/[\s,%$£€¥]/g,Xd=new Set(["true","false","yes","no","y","n","t","f","1","0"]),Qd=/^[\d\s/.:+-]+$/,eh=new Set(["PLAIN","MULTI_LINE","EMAIL","URL"]);function Ir(e){return e==null?"":String(e).trim()}var th=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,oh=/^www\./i;function Qe(e){let{text:t,allowNegative:o,allowFraction:r}=e,n=Number(t.replaceAll(Yd,"")),a;return Number.isFinite(n)?!o&&n<0?a="negative":!r&&!Number.isInteger(n)&&(a="notAnInteger"):a="notANumber",a}var rh={NUMBER:e=>Qe({text:e,allowNegative:!0,allowFraction:!1}),AUTO_NUMBER:e=>Qe({text:e,allowNegative:!0,allowFraction:!1}),POSITIVE_NUMBER:e=>Qe({text:e,allowNegative:!1,allowFraction:!1}),DECIMAL_NUMBER:e=>Qe({text:e,allowNegative:!0,allowFraction:!0}),CURRENCY:e=>Qe({text:e,allowNegative:!0,allowFraction:!0}),PERCENT:e=>Qe({text:e,allowNegative:!0,allowFraction:!0}),DATE:e=>Number.isNaN(Date.parse(e))&&!Qd.test(e)?"notADate":void 0,BOOLEAN:e=>Xd.has(e.toLowerCase())?void 0:"notABoolean",EMAIL:e=>th.test(e)?void 0:"notAnEmail",URL:e=>URL.canParse(e)||oh.test(e)?void 0:"notAUrl"};function nh(e,t,o){let r=o==null||eh.has(o);return t.columnMaxSize!=null&&e.length>t.columnMaxSize&&r}function ah(e,t){let o=Ir(e),r=t.dataType?.toUpperCase(),n;return o===""?n=t.isNullable===!1&&t.defaultValue==null?"emptyInNonNullable":void 0:nh(o,t,r)?n="tooLong":n=r==null?void 0:rh[r]?.(o),n}function ih(e,t){return`${e}\0${t}`}function cc(e){let{columns:t,columnNames:o,rows:r,maxSamples:n}=e,a=n??Bd,i=new Map(t.map(f=>[f.columnName,f])),s=new Map(t.map(f=>[f.columnName.trim().toLowerCase(),f.columnName])),c=new Set(o),u=[],d=[],h=[],g=new Set;o.forEach(f=>{let S=s.get(f.trim().toLowerCase());i.has(f)?u.push(f):S==null?d.push(f):(h.push({dataColumnName:f,tableColumnName:S}),g.add(S))});let m=d.map(f=>({columnName:f,valueCount:r.reduce((S,I)=>Ir(I[f])===""?S:S+1,0)})),C=t.filter(f=>!c.has(f.columnName)&&!g.has(f.columnName)).map(f=>({columnName:f.columnName,dataType:f.dataType,isNullable:f.isNullable,required:f.isNullable===!1&&f.defaultValue==null})),y=new Map;r.forEach((f,S)=>{u.forEach(I=>{let z=i.get(I),F=ah(f[I],z);if(F!=null){let P=ih(I,F),M=y.get(P);if(M==null){let H=[];M={conflict:{columnName:I,dataType:z.dataType,reason:F,conflictCount:0,samples:H},count:0,samples:H},y.set(P,M)}M.count+=1,M.samples.length<a&&M.samples.push({row:S+1,value:Ir(f[I])})}})});let R=Array.from(y.values()).map(f=>({...f.conflict,conflictCount:f.count}));return{matchedColumns:u,droppedColumns:m,emptyColumns:C,caseMismatchedColumns:h,conflicts:R,rowCount:r.length}}function uc(e,t){let o=t?.strict?e.emptyColumns.length:e.emptyColumns.filter(r=>r.required).length;return e.droppedColumns.length===0&&e.caseMismatchedColumns.length===0&&e.conflicts.length===0&&o===0}function pc(e){let{accountsContext:t}=e,o=de(t.loadAccessToken),r=ic(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:a=i=>X.makeFetch({baseUrl:i.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Zoho-oauthtoken ${await o()}`,...i.orgId?{[Qs]:i.orgId}:void 0}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return i=>{if(!i.apiUrl)throw new Error("ZohoAnalyticsConfig missing api url.");let s=ec(i.apiUrl),c=a({apiUrl:s,orgId:i.orgId}),u=ac(c,n,m=>{m instanceof v&&t.loadAccessToken.resetAccessToken()}),d=Y(u,{interceptJsonResponse:nc,handleFetchJsonParseErrorFunction:B});return{analyticsContext:{fetch:u,fetchJson:d,accessTokenStringFactory:o,config:{...i,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function lc(e){return()=>e.fetchJson("/orgs",G("GET"))}function dc(e){return()=>e.fetchJson("/workspaces",G("GET"))}function hc(e){return()=>e.fetchJson("/workspaces/owned",G("GET"))}function mc(e){return()=>e.fetchJson("/workspaces/shared",G("GET"))}function yc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}`,G("GET"))}function fc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views`,G("GET"))}function gc(e){return t=>e.fetchJson(`/views/${t.viewId}`,G("GET"))}function Rc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/metadata`,G("GET"))}var sh="import";function ch(e,t){let{file:o,data:r,rows:n}=e,a=new FormData;if(o!=null)a.append("FILE",o);else{if(r==null&&n==null)throw new Error("zohoAnalyticsImportFormData(): one of file, data, or rows must be provided.");{let i=r??JSON.stringify(n);if(t?.asFile){let s=t.fileType??(n==null?"csv":"json");a.append("FILE",new File([i],`${sh}.${s}`,{type:s==="json"?"application/json":"text/csv"}))}else a.append("DATA",i)}}return a}function kr(e,t){let{file:o,rows:r}=e,n=t;if(n==null){if(r!=null)n="json";else if(o!=null){let a=o.name.split(".").pop()?.toLowerCase();n=a==="json"||a==="csv"?a:void 0}}return n}function to(e){return e??!0}function Cc(e,t){let o=kr(e,t);if(o==null)throw new Error("zohoAnalyticsCreateImportJob(): config.fileType is required for an async import job when the data is not rows or a file with a .csv/.json name.");return o}async function oo(e){let{context:t,url:o,config:r,dataInput:n,formDataOptions:a}=e,i=ch(n,a);return(await t.fetch(`${o}${Oe(r)}`,{method:"POST",headers:{"Content-Type":""},body:i})).json()}function Tc(e){return t=>{let{workspaceId:o,viewId:r,config:n,...a}=t,i={...n,autoIdentify:to(n.autoIdentify),fileType:kr(a,n.fileType)};return oo({context:e,url:`/workspaces/${o}/views/${r}/data`,config:i,dataInput:a})}}function Zc(e){return t=>{let{workspaceId:o,config:r,...n}=t,a={...r,autoIdentify:to(r.autoIdentify),fileType:kr(n,r.fileType)};return oo({context:e,url:`/workspaces/${o}/data`,config:a,dataInput:n})}}function Or(e){return t=>{let{workspaceId:o,viewId:r,config:n,...a}=t,i=Cc(a,n.fileType),s={...n,autoIdentify:to(n.autoIdentify),fileType:i};return oo({context:e,url:`/bulk/workspaces/${o}/views/${r}/data`,config:s,dataInput:a,formDataOptions:{asFile:!0,fileType:i}})}}function Ac(e){return t=>{let{workspaceId:o,config:r,...n}=t,a=Cc(n,r.fileType),i={...r,autoIdentify:to(r.autoIdentify),fileType:a};return oo({context:e,url:`/bulk/workspaces/${o}/data`,config:i,dataInput:n,formDataOptions:{asFile:!0,fileType:a}})}}function Dr(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/importjobs/${t.jobId}`,{method:"GET"})}function xc(e){let t=Or(e),o=Dr(e);return async r=>{let{poll:n,...a}=r,{data:i}=await t(a);return eo({...n,loadJob:()=>o({workspaceId:r.workspaceId,jobId:i.jobId}),readJobCode:s=>s.data.jobCode})}}function Sc(e){return t=>e.fetch(`/workspaces/${t.workspaceId}/views/${t.viewId}/data${Oe(t.config)}`,{method:"GET"})}function Er(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/views/${t.viewId}/data${Oe(t.config)}`,G("GET"))}function Fc(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/data${Oe(t.config)}`,G("GET"))}function Pr(e){return t=>e.fetchJson(`/bulk/workspaces/${t.workspaceId}/exportjobs/${t.jobId}`,G("GET"))}function bc(e){return t=>e.fetch(`/bulk/workspaces/${t.workspaceId}/exportjobs/${t.jobId}/data`,{method:"GET"})}function Ic(e){let t=Er(e),o=Pr(e);return async r=>{let{poll:n,...a}=r,{data:i}=await t(a);return eo({...n,loadJob:()=>o({workspaceId:r.workspaceId,jobId:i.jobId}),readJobCode:s=>s.data.jobCode})}}function kc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/rows`,Qt("POST",t.config))}function Oc(e){return t=>{let{criteria:o,updateAllRows:r}=t.config;if(!o&&!r)throw new Error("zohoAnalyticsUpdateRows(): either criteria or updateAllRows must be provided.");return e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/rows`,Qt("PUT",t.config))}}function Dc(e){return t=>{let{criteria:o,deleteAllRows:r}=t.config;if(!o&&!r)throw new Error("zohoAnalyticsDeleteRows(): either criteria or deleteAllRows must be provided.");return e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}/rows`,Qt("DELETE",t.config))}}function Ec(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}/views/${t.viewId}${Oe(t.config)}`,G("DELETE"))}function Pc(e){return t=>e.fetchJson(`/workspaces/${t.workspaceId}`,G("DELETE"))}function me(e){if(!e.apiUrl)throw new Error("No Zoho API url or type specified.")}var ro=class{zohoAccounts;factoryConfig;static assertValidConfig(t){let{zohoAccounts:o}=t;if(o)if(o.serviceAccessTokenKey)if(o.refreshToken)if(o.apiUrl){if(!o.clientId)throw new Error("ZohoAccountsServiceConfig.zohoAccounts.clientId is required")}else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.apiUrl is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.refreshToken is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts.serviceAccessTokenKey is required");else throw new Error("ZohoAccountsServiceConfig.zohoAccounts is required")}};import{Injectable as uh}from"@nestjs/common";var et=class{};et=q([uh()],et);function ph(e){return{load:async()=>{let t=await e.loadCachedToken().catch(()=>{});return t!=null&&!Rn(t)?t:void 0},update:t=>e.updateCachedToken(t),clear:()=>e.clearCachedToken()}}function lh(e,t){return e.updateCachedToken(t).then(()=>null).catch(o=>[e,o])}function dh(e){console.warn(`mergeZohoAccountsAccessTokenCacheServices(): failed updating ${e.length} caches.`),e.forEach(([t,o],r)=>{console.warn(`Cache update failure ${r+1}: - ${o}`)})}function wc(e,t){let o=[...e],r=typeof t=="function"?t:t===!1?void 0:dh;if(o.length===0)throw new Error("mergeZohoAccountsAccessTokenCacheServices() input cannot be empty.");function n(a){let i=o.map(u=>u.loadZohoAccessTokenCache(a)),s=i.map(ph),c=Fn(s);return{loadCachedToken:()=>c.load(),updateCachedToken:async u=>{let d=await Promise.allSettled(i.map(h=>lh(h,u)));if(r!=null){let h=ce(d.map(g=>g.value));h.length&&r(h)}},clearCachedToken:async()=>{await Promise.allSettled(i.map(u=>u.clearCachedToken()))}}}return{loadZohoAccessTokenCache:n}}function _c(e,t){let o={};if(e!=null)for(let a of Object.keys(e)){let i=e[a];i!=null&&(o[a]=i)}let r=xn(o);function n(a){return{loadCachedToken:async()=>{let i=await r.get(a);return t&&console.log("retrieving access token from memory: ",{service:a,hit:i!=null,expiresAt:i?.expiresAt}),i},updateCachedToken:async i=>{await r.set(a,i),t&&console.log("updating access token in memory: ",{service:a,expiresAt:i?.expiresAt})},clearCachedToken:async()=>{await r.remove(a),t&&console.log("clearing access token in memory: ",{service:a})}}}return{loadZohoAccessTokenCache:n}}var hh=".tmp/zoho-access-tokens.json";function Mc(e){let t;if(e==null||typeof e!="object")t=void 0;else{let o=e,r=o.expiresAt,n=r!=null&&!(r instanceof Date)?new Date(r):r;t={...o,expiresAt:n}}return t}function Nc(e=hh,t=!0){let o=Yn({filePath:e,reviver:Mc}),r=t?Sn(o):o;function n(c){return{loadCachedToken:()=>r.get(c),updateCachedToken:async u=>{try{await r.set(c,u)}catch(d){console.error("Failed updating access token in file: ",d)}},clearCachedToken:async()=>{try{await r.remove(c)}catch(u){console.error("Failed clearing access token in file: ",u)}}}}async function a(){let c=await xe(e),u;if(c==null)u=void 0;else{let d={};for(let h of Object.keys(c))d[h]=Mc(c[h]);u=d}return u}async function i(c){await r.clear();for(let[u,d]of Object.entries(c))d!=null&&await r.set(u,d)}async function s(){await r.clear()}return{loadZohoAccessTokenCache:n,readTokenFile:a,writeTokenFile:i,deleteTokenFile:s}}var J=class{constructor(t,o){this.config=t;this.cacheService=o;let r=t.zohoAccounts.accessTokenCache??o.loadZohoAccessTokenCache(t.zohoAccounts.serviceAccessTokenKey);this.zohoAccounts=Xs(t.factoryConfig??{})({accessTokenCache:r,...t.zohoAccounts})}config;cacheService;zohoAccounts;get accountsContext(){return this.zohoAccounts.accountsContext}get accessToken(){return Xt(this.accountsContext)}};J=q([mh(),N(0,Uc(ro)),N(1,Uc(et))],J);import{Inject as vc,Injectable as yh}from"@nestjs/common";var no=class{zohoCrm;factoryConfig;static assertValidConfig(t){me(t.zohoCrm)}};var tt=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoCrm=Oi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoCrm)}config;zohoAccountsApi;zohoCrm;get crmContext(){return this.zohoCrm.crmContext}get zohoRateLimiter(){return this.zohoCrm.crmContext.zohoRateLimiter}get insertRecord(){return ni(this.crmContext)}get upsertRecord(){return ai(this.crmContext)}get updateRecord(){return ii(this.crmContext)}get deleteRecord(){return si(this.crmContext)}get getRecordById(){return ci(this.crmContext)}get getRecords(){return ui(this.crmContext)}get searchRecords(){return lr(this.crmContext)}get searchRecordsPageFactory(){return pi(this.crmContext)}get getRelatedRecordsFunctionFactory(){return Ye(this.crmContext)}get getEmailsForRecord(){return dr(this.crmContext)}get getEmailsForRecordPageFactory(){return li(this.crmContext)}get getAttachmentsForRecord(){return hr(this.crmContext)}get getAttachmentsForRecordPageFactory(){return di(this.crmContext)}get uploadAttachmentForRecord(){return hi(this.crmContext)}get downloadAttachmentForRecord(){return mi(this.crmContext)}get deleteAttachmentFromRecord(){return yi(this.crmContext)}get createNotes(){return mr(this.crmContext)}get deleteNotes(){return Ci(this.crmContext)}get createNotesForRecord(){return Zi(this.crmContext)}get getNotesForRecord(){return yr(this.crmContext)}get getNotesForRecordPageFactory(){return Ti(this.crmContext)}get executeRestApiFunction(){return fi(this.crmContext)}get createTagsForModule(){return xi(this.crmContext)}get deleteTag(){return Si(this.crmContext)}get getTagsForModule(){return Fi(this.crmContext)}get addTagsToRecords(){return bi(this.crmContext)}get removeTagsFromRecords(){return ki(this.crmContext)}};tt=q([yh(),N(0,vc(no)),N(1,vc(J))],tt);import{Inject as Lc,Injectable as fh}from"@nestjs/common";var ao=class{zohoRecruit;factoryConfig;static assertValidConfig(t){me(t.zohoRecruit)}};var ot=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoRecruit=Ba({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoRecruit)}config;zohoAccountsApi;zohoRecruit;get recruitContext(){return this.zohoRecruit.recruitContext}get zohoRateLimiter(){return this.zohoRecruit.recruitContext.zohoRateLimiter}get insertRecord(){return Ta(this.recruitContext)}get upsertRecord(){return Za(this.recruitContext)}get updateRecord(){return Aa(this.recruitContext)}get deleteRecord(){return xa(this.recruitContext)}get getRecordById(){return Sa(this.recruitContext)}get getRecords(){return Fa(this.recruitContext)}get searchRecords(){return Ho(this.recruitContext)}get searchRecordsPageFactory(){return ba(this.recruitContext)}get getRelatedRecordsFunctionFactory(){return $e(this.recruitContext)}get getEmailsForRecord(){return Bo(this.recruitContext)}get getEmailsForRecordPageFactory(){return Ia(this.recruitContext)}get getAttachmentsForRecord(){return Yo(this.recruitContext)}get getAttachmentsForRecordPageFactory(){return ka(this.recruitContext)}get uploadAttachmentForRecord(){return Oa(this.recruitContext)}get downloadAttachmentForRecord(){return Da(this.recruitContext)}get deleteAttachmentFromRecord(){return Ea(this.recruitContext)}get createNotes(){return tr(this.recruitContext)}get deleteNotes(){return va(this.recruitContext)}get createNotesForRecord(){return Ga(this.recruitContext)}get getNotesForRecord(){return or(this.recruitContext)}get getNotesForRecordPageFactory(){return La(this.recruitContext)}get executeRestApiFunction(){return Pa(this.recruitContext)}get associateCandidateRecordsWithJobOpenings(){return wa(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecords(){return Qo(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecordsPageFactory(){return Na(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecords(){return er(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecordsPageFactory(){return Ua(this.recruitContext)}get createTagsForModule(){return Ja(this.recruitContext)}get getTagsForModule(){return za(this.recruitContext)}get addTagsToRecords(){return ja(this.recruitContext)}get removeTagsFromRecords(){return qa(this.recruitContext)}};ot=q([fh(),N(0,Lc(ao)),N(1,Lc(J))],ot);import{Inject as Gc,Injectable as gh}from"@nestjs/common";var io=class{zohoSign;factoryConfig;static assertValidConfig(t){me(t.zohoSign)}};var rt=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoSign=Yi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoSign)}config;zohoAccountsApi;zohoSign;get signContext(){return this.zohoSign.signContext}get zohoRateLimiter(){return this.zohoSign.signContext.zohoRateLimiter}get getDocument(){return Mi(this.signContext)}get getDocuments(){return gr(this.signContext)}get getDocumentsPageFactory(){return wi(this.signContext)}get getDocumentFormData(){return _i(this.signContext)}get retrieveFieldTypes(){return Ni(this.signContext)}get downloadPdf(){return Ui(this.signContext)}get downloadCompletionCertificate(){return vi(this.signContext)}get createDocument(){return Li(this.signContext)}get createDocumentFromTemplate(){return Gi(this.signContext)}get getTemplate(){return Ki(this.signContext)}get getTemplates(){return Vi(this.signContext)}get updateDocument(){return Ji(this.signContext)}get sendDocumentForSignature(){return zi(this.signContext)}get extendDocument(){return ji(this.signContext)}get deleteDocument(){return qi(this.signContext)}get getEmbeddedSigningUrl(){return Wi(this.signContext)}};rt=q([gh(),N(0,Gc(io)),N(1,Gc(J))],rt);import{Inject as Kc,Injectable as Rh}from"@nestjs/common";var so=class{zohoDesk;factoryConfig;static assertValidConfig(t){if(me(t.zohoDesk),!t.zohoDesk.orgId)throw new Error("No Zoho Desk orgId specified.")}};var nt=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoDesk=rs({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoDesk)}config;zohoAccountsApi;zohoDesk;get deskContext(){return this.zohoDesk.deskContext}get zohoRateLimiter(){return this.zohoDesk.deskContext.zohoRateLimiter}get getTickets(){return Rr(this.deskContext)}get getTicketById(){return as(this.deskContext)}get searchTickets(){return Cr(this.deskContext)}get getTicketsForContact(){return is(this.deskContext)}get getTicketsForProduct(){return ss(this.deskContext)}get getTicketMetrics(){return cs(this.deskContext)}get getAgentsTicketsCount(){return us(this.deskContext)}get getTicketsPageFactory(){return ps(this.deskContext)}get searchTicketsPageFactory(){return ls(this.deskContext)}get getDepartments(){return hs(this.deskContext)}get getDepartmentById(){return ms(this.deskContext)}get getContacts(){return Zr(this.deskContext)}get getContactById(){return fs(this.deskContext)}get getContactsByIds(){return gs(this.deskContext)}get getContactsPageFactory(){return Rs(this.deskContext)}get getTicketTags(){return Cs(this.deskContext)}get associateTicketTags(){return Ts(this.deskContext)}get dissociateTicketTag(){return Zs(this.deskContext)}get searchTags(){return As(this.deskContext)}get getAllTags(){return xs(this.deskContext)}get getTicketFollowers(){return Ss(this.deskContext)}get addTicketFollowers(){return Fs(this.deskContext)}get removeTicketFollowers(){return bs(this.deskContext)}get getTicketAttachments(){return ks(this.deskContext)}get deleteTicketAttachment(){return Os(this.deskContext)}get getTicketComments(){return Es(this.deskContext)}get getTicketCommentById(){return Ps(this.deskContext)}get createTicketComment(){return Ms(this.deskContext)}get deleteTicketComment(){return ws(this.deskContext)}get getTicketTimer(){return _s(this.deskContext)}get performTicketTimerAction(){return Ns(this.deskContext)}get getTicketTimeEntries(){return Us(this.deskContext)}get getTicketTimeEntryById(){return vs(this.deskContext)}get getTicketTimeEntrySummation(){return Ls(this.deskContext)}get getTicketThreads(){return xr(this.deskContext)}get getTicketThreadById(){return Vs(this.deskContext)}get getTicketThreadsPageFactory(){return Js(this.deskContext)}get getTicketActivities(){return Sr(this.deskContext)}get getTicketActivitiesPageFactory(){return zs(this.deskContext)}get getAgents(){return Fr(this.deskContext)}get getAgentById(){return qs(this.deskContext)}get getAgentsByIds(){return Ws(this.deskContext)}get getMyInfo(){return $s(this.deskContext)}get getAgentsPageFactory(){return Hs(this.deskContext)}};nt=q([Rh(),N(0,Kc(so)),N(1,Kc(J))],nt);import{Inject as Vc,Injectable as Ch}from"@nestjs/common";var co=class{zohoAnalytics;factoryConfig;static assertValidConfig(t){me(t.zohoAnalytics)}};var at=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoAnalytics=pc({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoAnalytics)}config;zohoAccountsApi;zohoAnalytics;get analyticsContext(){return this.zohoAnalytics.analyticsContext}get zohoRateLimiter(){return this.zohoAnalytics.analyticsContext.zohoRateLimiter}get getOrgs(){return lc(this.analyticsContext)}get getAllWorkspaces(){return dc(this.analyticsContext)}get getOwnedWorkspaces(){return hc(this.analyticsContext)}get getSharedWorkspaces(){return mc(this.analyticsContext)}get getWorkspaceDetails(){return yc(this.analyticsContext)}get getViews(){return fc(this.analyticsContext)}get getViewDetails(){return gc(this.analyticsContext)}get getTableMetadata(){return Rc(this.analyticsContext)}get importDataInTable(){return Tc(this.analyticsContext)}get importDataInNewTable(){return Zc(this.analyticsContext)}get createImportJobInTable(){return Or(this.analyticsContext)}get createImportJobInNewTable(){return Ac(this.analyticsContext)}get getImportJob(){return Dr(this.analyticsContext)}get importDataInTableAndAwaitJob(){return xc(this.analyticsContext)}get exportData(){return Sc(this.analyticsContext)}get createExportJob(){return Er(this.analyticsContext)}get createExportJobForSqlQuery(){return Fc(this.analyticsContext)}get getExportJob(){return Pr(this.analyticsContext)}get downloadExport(){return bc(this.analyticsContext)}get exportDataAndAwaitJob(){return Ic(this.analyticsContext)}get addRow(){return kc(this.analyticsContext)}get updateRows(){return Oc(this.analyticsContext)}get deleteRows(){return Dc(this.analyticsContext)}get deleteView(){return Ec(this.analyticsContext)}get deleteWorkspace(){return Pc(this.analyticsContext)}};at=q([Ch(),N(0,Vc(co)),N(1,Vc(J))],at);function uo(e){return{recruit:e.recruitApi,crm:e.crmApi,desk:e.deskApi,sign:e.signApi,analytics:e.analyticsApi}}function Th(e){return`${e.clientId}:${e.refreshToken}`}function it(e){let t=wc([_c(),Nc(Zt())]),o=new Map;function r(C,y){let R=Th(C),f=o.get(R),S;if(f)S=f;else{let I={zohoAccounts:{serviceAccessTokenKey:y,refreshToken:C.refreshToken,clientId:C.clientId,clientSecret:C.clientSecret,apiUrl:C.region??"us"}};S=new J(I,t),o.set(R,S)}return S}let n,a=we(e,"recruit");if(a){let C=r(a,"recruit"),y={zohoRecruit:{apiUrl:a.apiMode}};n=new ot(y,C)}let i,s=we(e,"crm");if(s){let C=r(s,"crm"),y={zohoCrm:{apiUrl:s.apiMode}};i=new tt(y,C)}let c,u=we(e,"desk");if(u?.orgId){let C=r(u,"desk"),y={zohoDesk:{apiUrl:u.apiMode,orgId:u.orgId}};c=new nt(y,C)}let d,h=we(e,"sign");if(h){let C=r(h,"sign"),y={zohoSign:{apiUrl:h.apiMode}};d=new rt(y,C)}let g,m=we(e,"analytics");if(m){let C=r(m,"analytics"),y={zohoAnalytics:{apiUrl:m.apiMode,orgId:m.orgId}};g=new at(y,C)}return{recruitApi:n,crmApi:i,deskApi:c,signApi:d,analyticsApi:g}}Ro([...fo,/1000\.\w{20,}/g]);function Jc(e){let t;return e instanceof v?t={ok:!1,error:ge(e.message),code:"TOKEN_EXPIRED",suggestion:"Run: zoho-cli auth check"}:e instanceof je?t={ok:!1,error:ge(e.message),code:"AUTH_ERROR",suggestion:"Check your client ID, secret, and refresh token."}:e instanceof Ce?t={ok:!1,error:ge(e.message),code:"RATE_LIMITED",suggestion:"Wait and retry. Zoho rate limit exceeded."}:e instanceof U?t={ok:!1,error:ge(e.message),code:"API_ERROR"}:t=Co(e),t}zr(e=>e instanceof v||e instanceof je||e instanceof Ce||e instanceof U?Jc(e):void 0);function l(e){console.log(JSON.stringify(Jc(e)))}var zc={us:"https://accounts.zoho.com",eu:"https://accounts.zoho.eu",in:"https://accounts.zoho.in",au:"https://accounts.zoho.com.au",jp:"https://accounts.zoho.jp"},Mr={recruit:["ZohoRecruit.modules.ALL","ZohoRecruit.settings.all","ZohoRecruit.functions.execute.READ","ZohoRecruit.functions.execute.CREATE"],crm:["ZohoCRM.modules.ALL","ZohoCRM.settings.ALL","ZohoCRM.functions.execute.READ","ZohoCRM.functions.execute.CREATE"],desk:["Desk.tickets.ALL","Desk.tasks.ALL","Desk.contacts.ALL","Desk.settings.ALL","Desk.events.ALL","Desk.search.READ","Desk.articles.READ","Desk.basic.READ"],sign:["ZohoSign.documents.ALL","ZohoSign.templates.ALL"],analytics:["ZohoAnalytics.data.all","ZohoAnalytics.metadata.all","ZohoAnalytics.modeling.all"]},jc="http://localhost/oauth",qc=`Organization ID, for the products scoped by one (${Array.from(Me).join(", ")})`;function Zh(e){let t;if(!e)t=void 0;else if(e.startsWith("http://")||e.startsWith("https://"))try{let r=new URL(e).searchParams.get("code");if(!r)throw new Error('No "code" parameter found in the provided URL.');t=r}catch(o){throw o instanceof TypeError?new Error(`Invalid URL provided for --code: ${e}`,{cause:o}):o}else t=e;return t}var Ah={command:"setup",describe:"Generate OAuth authorization URL, exchange code, or set refresh token directly",builder:e=>e.option("client-id",{type:"string",describe:"OAuth client ID (from https://api-console.zoho.com/)"}).option("client-secret",{type:"string",describe:"OAuth client secret"}).option("redirect-uri",{type:"string",default:jc,describe:"Redirect URI (must match API console config)"}).option("region",{type:"string",default:"us",choices:["us","eu","in","au","jp"],describe:"Zoho region"}).option("scopes",{type:"string",defaultDescription:"--product when given, otherwise recruit,crm,desk",describe:"Comma-separated products for OAuth scopes (recruit,crm,desk,sign,analytics)"}).option("code",{type:"string",describe:"Authorization code or the full redirect URL (code is extracted automatically)"}).option("token",{type:"string",describe:"Set a refresh token directly (skips OAuth code exchange)"}).option("product",{type:"string",choices:[...Ct],describe:"Store credentials for a specific product instead of shared"}).option("org-id",{type:"string",describe:qc}).option("api-mode",{type:"string",default:"production",choices:["production","sandbox"],describe:"API mode"}).example([["$0 auth setup --client-id 1000.ABC --client-secret xyz","Step 1: Get OAuth URL (saves shared credentials)"],["$0 auth setup --code 1000.AUTH.CODE","Step 2: Exchange code for refresh token"],['$0 auth setup --code "http://localhost/oauth?code=1000.AUTH.CODE&location=us"',"Step 2: Paste the full redirect URL"],["$0 auth setup --client-id 1000.ABC --client-secret xyz --token 1000.REFRESH.TOKEN","Set shared refresh token directly"],["$0 auth setup --product crm --client-id 1000.CRM --client-secret xyz --token 1000.CRM.TOKEN","Set CRM-specific credentials"],["$0 auth setup --product sign --client-id 1000.SIGN --client-secret xyz","Sign uses a separate OAuth client (sign-only scopes)"],["$0 auth setup --product analytics --client-id 1000.ANALYTICS --client-secret xyz --org-id 1234567","Analytics uses a separate OAuth client; --scopes defaults to analytics"]]),handler:async e=>{try{let t=await $(),o=Fh(e,t);if(!o.clientId||!o.clientSecret)throw new Error("--client-id and --client-secret are required. Get them from https://api-console.zoho.com/");o.token?await bh(o,t):o.code?await Ih(o,t):await Oh(o,t)}catch(t){l(t),process.exit(1)}}},xh="recruit,crm,desk";function Sh(e,t){return(e??t??xh).split(",").map(o=>o.trim())}function Fh(e,t){let o=e.region??t?.shared?.region??"us",r=e.product,n=r?t?.[r]:void 0;return{product:r,clientId:e.clientId??n?.clientId??t?.shared?.clientId,clientSecret:e.clientSecret??n?.clientSecret??t?.shared?.clientSecret,redirectUri:e.redirectUri??jc,region:o,scopes:Sh(e.scopes,r),code:Zh(e.code),token:e.token,accountsUrl:zc[o]??zc.us,apiMode:e.apiMode,orgId:e.orgId}}function wr({product:e,credentials:t,apiMode:o,orgId:r}){return{...t,apiUrl:o??void 0,orgId:Me.has(e)?r??void 0:void 0}}async function Wc(e,t,o){return e.product?ae({shared:o??{clientId:"",clientSecret:"",refreshToken:""},[e.product]:wr({product:e.product,credentials:t,apiMode:e.apiMode,orgId:e.orgId})}):ae({shared:{...t,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0})}async function bh(e,t){let o={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:e.token},r=await Wc(e,o,t?.shared);p({success:!0,...e.product?{product:e.product}:{},refreshToken:Se(e.token),configSaved:!0,configuredProducts:ue(r)})}async function Ih(e,t){let o=`${e.accountsUrl}/oauth/v2/token`,r=new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,client_secret:e.clientSecret,redirect_uri:e.redirectUri,code:e.code}),a=await(await fetch(o,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()})).json();if(a.error)throw new Error(`Token exchange failed: ${a.error}`);let i=a.refresh_token;if(!i)throw new Error("No refresh_token in response. The authorization code may have expired (valid for 2 minutes). Generate a new one.");let s={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:i},c=await Wc(e,s,t?.shared);p({step:2,success:!0,product:e.product??"shared",refreshToken:Se(i),accessToken:a.access_token?Se(a.access_token):null,scope:a.scope,configSaved:!0,configuredProducts:ue(c)})}async function kh(e,t){let o;return e.product?o=await ae({shared:{clientId:t?.shared?.clientId??"",clientSecret:t?.shared?.clientSecret??"",refreshToken:t?.shared?.refreshToken??"",region:e.region,apiMode:e.apiMode??t?.shared?.apiMode},[e.product]:wr({product:e.product,credentials:{clientId:e.clientId,clientSecret:e.clientSecret},apiMode:e.apiMode,orgId:e.orgId})}):o=await ae({shared:{clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:t?.shared?.refreshToken??"",region:e.region,apiMode:e.apiMode??t?.shared?.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),o}async function Oh(e,t){let o=e.product?Mr[e.product]??[]:e.scopes.flatMap(a=>Mr[a]??[]);if(o.length===0)throw new Error(`No valid products specified. Choose from: ${Object.keys(Mr).join(", ")}`);let r=`${e.accountsUrl}/oauth/v2/auth?scope=${o.join(",")}&client_id=${encodeURIComponent(e.clientId)}&response_type=code&access_type=offline&redirect_uri=${encodeURIComponent(e.redirectUri)}`;await kh(e,t);let n=e.product?`--product ${e.product} `:"";p({step:1,product:e.product??"shared",instructions:'Open the authorization URL in a browser. Authorize the application. Copy the "code" parameter from the redirect URL.',authorizationUrl:r,redirectUri:e.redirectUri,scopes:o,credentialsSaved:!0,nextStep:`zoho-cli auth setup ${n}--code "PASTE_REDIRECT_URL_OR_AUTH_CODE"`})}var Dh={command:"set",describe:"Save Zoho API credentials directly",builder:e=>e.option("client-id",{type:"string",demandOption:!0,describe:"OAuth client ID"}).option("client-secret",{type:"string",demandOption:!0,describe:"OAuth client secret"}).option("refresh-token",{type:"string",demandOption:!0,describe:"OAuth refresh token"}).option("product",{type:"string",choices:[...Ct],describe:"Store for a specific product instead of shared"}).option("region",{type:"string",default:"us",describe:"Zoho region (us, eu, in, au, jp)"}).option("org-id",{type:"string",describe:qc}).option("api-mode",{type:"string",default:"production",choices:["production","sandbox"],describe:"API mode"}).example([["$0 auth set --client-id abc --client-secret xyz --refresh-token 1000.abc.xyz","Set shared credentials"],["$0 auth set --product crm --client-id abc --client-secret xyz --refresh-token 1000.crm.xyz","Set CRM-specific credentials"]]),handler:async e=>{try{let t=e.product,o={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:e.refreshToken},r;t?r=await ae({shared:(await $())?.shared??{clientId:"",clientSecret:"",refreshToken:""},[t]:wr({product:t,credentials:o,apiMode:e.apiMode,orgId:e.orgId})}):r=await ae({shared:{...o,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),p({saved:!0,product:t??"shared",configuredProducts:ue(r)})}catch(t){l(t),process.exit(1)}}};function $c(e){return e?{clientId:e.clientId?Se(e.clientId):void 0,clientSecret:e.clientSecret?Se(e.clientSecret):void 0,refreshToken:e.refreshToken?Se(e.refreshToken):void 0}:void 0}function Eh(e,t){return t?{...$c(t),apiUrl:t.apiUrl,...Me.has(e)?{orgId:t.orgId}:{}}:null}function Ph(e){let t=Object.fromEntries(Ct.map(o=>[o,Eh(o,e[o])]));return{configured:!0,shared:{...$c(e.shared),region:e.shared?.region??"us",apiMode:e.shared?.apiMode??"production"},...t,configuredProducts:ue(e)}}var Mh={command:"show",describe:"Show current configuration (secrets masked)",builder:e=>e,handler:async()=>{try{let e=await $();p(e?Ph(e):{configured:!1})}catch(e){l(e),process.exit(1)}}},wh={command:"check",describe:"Verify credentials by exchanging tokens",builder:e=>e,handler:async()=>{try{let e=await $();if(e){let t=ue(e);if(t.length===0)p({authenticated:!1,error:"No products have complete credentials. Run: zoho-cli auth setup"});else{let o=it(e),r=uo(o),n={};for(let a of t)try{let i=r[a];if(!i){n[a]={authenticated:!1,error:"Not configured"};continue}let s=await i.zohoAccountsApi.accessToken();n[a]={authenticated:!0,scope:s.scope,expiresIn:s.expires_in}}catch(i){let s=i instanceof Error?i.message:String(i);n[a]={authenticated:!1,error:s}}p({products:n})}}else p({authenticated:!1,error:"No credentials configured. Run: zoho-cli auth setup"})}catch(e){l(e),process.exit(1)}}},_h={command:"clear",describe:"Remove stored credentials and token cache",builder:e=>e,handler:async()=>{try{await ia(),p({cleared:!0})}catch(e){l(e),process.exit(1)}}},Hc={command:"auth",describe:"Manage Zoho API credentials",builder:e=>e.command(Ah).command(Dh).command(Mh).command(wh).command(_h).demandCommand(1,"Please specify an auth subcommand."),handler:Z};import{access as Nh,constants as Uh}from"node:fs";import{dirname as vh}from"node:path";function Lh(e){return e.every(t=>t.status==="pass")}var Bc={command:"doctor",describe:"Check CLI configuration and connectivity",builder:e=>e,handler:async()=>{let e=await $(),t=[];t.push(Gh(e));let o=Kh(e);if(o&&t.push(o),t.push(await Vh()),e){let n=ue(e);t.push(Jh(n),...await zh(e,n),...qh(e,n))}let r=Lh(t);p({checks:t,healthy:r}),r||process.exit(t.some(n=>n.status==="fail")?1:0)}};function Gh(e){return e?{name:"config",status:"pass",message:`Config loaded from ${Tt()}`}:{name:"config",status:"fail",message:"No config found. Run: zoho-cli auth setup"}}function Kh(e){if(e?.shared?.clientId&&e?.shared?.clientSecret&&e?.shared?.refreshToken)return{name:"shared-credentials",status:"pass",message:"Shared credentials present"};if(e)return{name:"shared-credentials",status:"warn",message:"Missing shared credentials. Per-product credentials may still work."}}async function Vh(){let e=vh(Zt());return await Wh(e)?{name:"token-cache",status:"pass",message:`Token cache directory writable: ${e}`}:{name:"token-cache",status:"warn",message:`Token cache directory not writable: ${e}`}}function Jh(e){return e.length>0?{name:"products",status:"pass",message:`Configured products: ${e.join(", ")}`}:{name:"products",status:"fail",message:"No products have complete credentials"}}async function zh(e,t){let o=uo(it(e)),r=[];for(let n of t)r.push(await jh(o[n],n));return r}async function jh(e,t){if(!e)return{name:`${t}-token`,status:"warn",message:`${t}: API not configured`};let o;try{let r=await e.zohoAccountsApi.accessToken();o={name:`${t}-token`,status:"pass",message:`${t}: Token exchange successful. Scope: ${r.scope}`}}catch(r){let n=r instanceof Error?r.message:String(r);o={name:`${t}-token`,status:"fail",message:`${t}: Token exchange failed: ${n}`}}return o}function qh(e,t){return Array.from(Me).map(o=>{let r=e[o]?.orgId,n=`${o}-org-id`,a;return r?a={name:n,status:"pass",message:`${o}: Org ID configured: ${r}`}:t.includes(o)?a={name:n,status:"fail",message:`${o}: No org ID configured, but ${o} is reported as configured \u2014 every org-scoped ${o} command will fail. Run: zoho-cli auth set --product ${o} --org-id <ORG_ID>`}:a={name:n,status:"warn",message:`${o}: No org ID. ${o} commands unavailable.`},a})}function Wh(e){return new Promise(t=>{Nh(e,Uh.W_OK,o=>{t(!o)})})}var Yc=wt({notInitializedMessage:"CLI context not initialized. This is a bug."});function Xc(e){return async t=>{let o=t._?.[0];if(!(typeof o=="string"&&e.has(o)))try{let r=await $();r||(l(new Error("Not authenticated. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z")),process.exit(4)),ue(r).length===0&&(l(new Error("No products configured with complete credentials. Run: zoho-cli auth setup")),process.exit(4)),Yc.set(it(r))}catch(r){l(r),process.exit(4)}}}function It(e){return Yc.require()}function oe(e){let{recruitApi:t}=It(e);if(!t)throw new Error("Recruit not configured. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z");return t}function re(e){let{crmApi:t}=It(e);if(!t)throw new Error("CRM not configured. Run: zoho-cli auth setup --product crm --client-id X --client-secret Y --token Z");return t}function x(e){let{deskApi:t}=It(e);if(!t)throw new Error("Desk not configured. Run: zoho-cli auth setup --product desk --client-id X --client-secret Y --token Z --org-id YOUR_ORG_ID");return t}function w(e){let{signApi:t}=It(e);if(!t)throw new Error("Sign not configured. Zoho Sign requires its own OAuth client. Run: zoho-cli auth setup --product sign --client-id X --client-secret Y --token Z");return t}function k(e){let{analyticsApi:t}=It(e);if(!t)throw new Error("Analytics not configured. Zoho Analytics requires its own OAuth client. Run: zoho-cli auth setup --product analytics --client-id X --client-secret Y --token Z --org-id YOUR_ORG_ID");return t}function ye(e){return Nt(e.option("page",{type:"number",default:1,describe:"Page number (1-based)"}).option("per-page",{type:"number",default:20,describe:"Records per page"}))}function D(e){return Nt(e.option("from",{type:"number",default:1,describe:"Start index (1-based)"}).option("limit",{type:"number",default:25,describe:"Max records (max 50)"}))}function po(e){return Nt(e.option("start-index",{type:"number",default:1,describe:"Start index (1-based)"}).option("row-count",{type:"number",default:20,describe:"Records per page"}))}function _(e){return e.option("module",{alias:"m",type:"string",demandOption:!0,describe:"Zoho module name (e.g. Candidates, Contacts, Leads)"})}function Ee(e){return e.option("id",{type:"string",demandOption:!0,describe:"Record ID"})}function kt(e,t=!1){return e.option("fields",{type:"string",demandOption:t,describe:"Comma-separated field names to return"})}function lo(e){return e.option("sort-by",{type:"string",describe:"Field to sort by"}).option("sort-order",{type:"string",choices:["asc","desc"],describe:"Sort direction"})}var $h={nextInput:(e,t)=>{let o;if(t.info?.more_records){let r=e.page??1;o={...e,page:r+1}}else o=void 0;return o},countOf:e=>e.data?.length??0,metaOf:(e,t)=>({page:t.info?.page??e.page,per_page:t.info?.per_page??e.per_page,more_records:t.info?.more_records??!1}),hasMorePagesAvailable:(e,t)=>t.info?.more_records??!1},E={nextInput:(e,t)=>{let o=e.limit??25,r=t.data?.length??0,n;if(o<=0||r<o)n=void 0;else{let a=e.from??1;n={...e,from:a+o}}return n},countOf:e=>e.data?.length??0,metaOf:(e,t)=>({from:e.from,limit:e.limit,count:t.data?.length??0}),hasMorePagesAvailable:(e,t)=>{let o=e.limit??25,r=t.data?.length??0;return o>0&&r>=o}},Hh={nextInput:(e,t)=>{let o;if(t.page_context?.has_more_rows){let r=e.row_count??t.page_context?.row_count??20,n=e.start_index??t.page_context?.start_index??1;o={...e,start_index:n+r}}else o=void 0;return o},countOf:e=>e.data?.length??0,metaOf:(e,t)=>({start_index:t.page_context?.start_index??e.start_index,row_count:t.page_context?.row_count??e.row_count,total_count:t.page_context?.total_count,has_more_rows:t.page_context?.has_more_rows??!1}),hasMorePagesAvailable:(e,t)=>t.page_context?.has_more_rows??!1};async function fe(e){let{argv:t,initialInput:o,fetchPage:r}=e,n=await b({initialInput:o,fetchPage:r,adapter:$h,multiplePages:t.multiplePages,multiplePagesOutput:t.multiplePagesOutput,dumpOutput:t.dumpOutput,dumpMerge:t.dumpMerge});if(n.handled===!1){let a=n.result;p(a.data,{page:a.info?.page,per_page:a.info?.per_page,more_records:a.info?.more_records})}}async function ho(e){let{argv:t,initialInput:o,fetchPage:r}=e,n=await b({initialInput:o,fetchPage:async a=>{let i=await r(a);return{data:i.requests??[],page_context:i.page_context}},adapter:Hh,multiplePages:t.multiplePages,multiplePagesOutput:t.multiplePagesOutput,dumpOutput:t.dumpOutput,dumpMerge:t.dumpMerge});if(n.handled===!1){let a=n.result;p(a.data,{start_index:a.page_context?.start_index,row_count:a.page_context?.row_count,total_count:a.page_context?.total_count,has_more_rows:a.page_context?.has_more_rows??!1})}}var Bh={command:"list",describe:"List records from a module",builder:e=>lo(kt(ye(_(e)))),handler:async e=>{try{let t=oe(e),o={module:e.module,page:e.page,per_page:e.perPage,fields:e.fields,sort_by:e.sortBy,sort_order:e.sortOrder};await fe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){l(t),process.exit(1)}}},Yh={command:"get",describe:"Get a record by ID",builder:e=>Ee(_(e)),handler:async e=>{try{let o=await oe(e).getRecordById({module:e.module,id:e.id});p(o)}catch(t){l(t),process.exit(1)}}},Xh={command:"search",describe:"Search records in a module",builder:e=>ye(_(e)).option("criteria",{type:"string",describe:"Search criteria string, e.g. (First_Name:equals:John)"}).option("word",{type:"string",describe:"Keyword search"}).option("email",{type:"string",describe:"Search by email"}).option("phone",{type:"string",describe:"Search by phone"}),handler:async e=>{try{let t=oe(e),o={module:e.module,criteria:e.criteria,word:e.word,email:e.email,phone:e.phone,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){l(t),process.exit(1)}}},Qh={command:"insert",describe:"Insert a record into a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=oe(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},em={command:"upsert",describe:"Upsert a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=oe(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},tm={command:"update",describe:"Update a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=oe(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},om={command:"delete",describe:"Delete records from a module",builder:e=>_(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=oe(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});p(r)}catch(t){l(t),process.exit(1)}}},rm={command:"emails",describe:"Get emails for a record",builder:e=>ye(Ee(_(e))),handler:async e=>{try{let t=oe(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){l(t),process.exit(1)}}},nm={command:"attachments",describe:"Get attachments for a record",builder:e=>ye(Ee(_(e))),handler:async e=>{try{let t=oe(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){l(t),process.exit(1)}}},Qc={command:"recruit",describe:"Zoho Recruit operations",builder:e=>e.command(Bh).command(Yh).command(Xh).command(Qh).command(em).command(tm).command(om).command(rm).command(nm).demandCommand(1,"Please specify a recruit subcommand.").example([["$0 recruit list -m Candidates --per-page 10","List first 10 candidates"],["$0 recruit get -m Candidates --id 12345","Get a candidate by ID"],['$0 recruit search -m Candidates --word "John"',"Search candidates by keyword"],[`$0 recruit insert -m Candidates --data '{"First_Name":"John","Last_Name":"Doe"}'`,"Insert a candidate"]]),handler:Z};var am={command:"list",describe:"List records from a module",builder:e=>lo(kt(ye(_(e)),!0)),handler:async e=>{try{let t=re(e),o={module:e.module,fields:e.fields,page:e.page,per_page:e.perPage,sort_by:e.sortBy,sort_order:e.sortOrder};await fe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){l(t),process.exit(1)}}},im={command:"get",describe:"Get a record by ID",builder:e=>Ee(_(e)),handler:async e=>{try{let o=await re(e).getRecordById({module:e.module,id:e.id});p(o)}catch(t){l(t),process.exit(1)}}},sm={command:"search",describe:"Search records in a module",builder:e=>ye(_(e)).option("criteria",{type:"string",describe:"Search criteria string, e.g. (First_Name:equals:John)"}).option("word",{type:"string",describe:"Keyword search"}).option("email",{type:"string",describe:"Search by email"}).option("phone",{type:"string",describe:"Search by phone"}),handler:async e=>{try{let t=re(e),o={module:e.module,criteria:e.criteria,word:e.word,email:e.email,phone:e.phone,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){l(t),process.exit(1)}}},cm={command:"insert",describe:"Insert a record into a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=re(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},um={command:"upsert",describe:"Upsert a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=re(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},pm={command:"update",describe:"Update a record in a module",builder:e=>_(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=re(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});p(r)}catch(t){l(t),process.exit(1)}}},lm={command:"delete",describe:"Delete records from a module",builder:e=>_(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=re(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});p(r)}catch(t){l(t),process.exit(1)}}},dm={command:"emails",describe:"Get emails for a record",builder:e=>ye(Ee(_(e))),handler:async e=>{try{let t=re(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){l(t),process.exit(1)}}},hm={command:"attachments",describe:"Get attachments for a record",builder:e=>kt(ye(Ee(_(e))),!0),handler:async e=>{try{let t=re(e),o={module:e.module,id:e.id,fields:e.fields,page:e.page,per_page:e.perPage};await fe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){l(t),process.exit(1)}}},eu={command:"crm",describe:"Zoho CRM operations",builder:e=>e.command(am).command(im).command(sm).command(cm).command(um).command(pm).command(lm).command(dm).command(hm).demandCommand(1,"Please specify a CRM subcommand.").example([['$0 crm list -m Contacts --fields "First_Name,Last_Name,Email" --per-page 10',"List contacts"],["$0 crm get -m Contacts --id 12345","Get a contact by ID"],['$0 crm search -m Leads --word "Acme"',"Search leads by keyword"],[`$0 crm insert -m Contacts --data '{"First_Name":"Jane","Last_Name":"Doe"}'`,"Insert a contact"]]),handler:Z};var mm={command:"list",describe:"List tickets",builder:e=>D(e).option("department-id",{type:"string",describe:"Filter by department ID"}).option("status",{type:"string",describe:"Filter by status"}).option("sort-by",{type:"string",describe:"Field to sort by"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. contacts,assignee,departments,team,isRead)"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId,status:e.status,sortBy:e.sortBy,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getTickets(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},ym={command:"get <ticketId>",describe:"Get a ticket by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. contacts,assignee,departments,team,isRead)"}),handler:async e=>{try{let o=await x(e).getTicketById({ticketId:e.ticketId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},fm={command:"search",describe:"Search tickets",builder:e=>D(e).option("subject",{type:"string",describe:"Search by subject"}).option("status",{type:"string",describe:"Filter by status"}).option("email",{type:"string",describe:"Filter by email"}).option("department-id",{type:"string",describe:"Filter by department ID"}).option("channel",{type:"string",describe:"Filter by channel"}).option("priority",{type:"string",describe:"Filter by priority"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,subject:e.subject,status:e.status,email:e.email,departmentId:e.departmentId,channel:e.channel,priority:e.priority},r=await b({initialInput:o,fetchPage:n=>t.searchTickets(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},gm={command:"by-contact <contactId>",describe:"List tickets for a contact",builder:e=>D(e).positional("contactId",{type:"string",demandOption:!0,describe:"Contact ID"}),handler:async e=>{try{let t=x(e),o={contactId:e.contactId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketsForContact(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Rm={command:"metrics <ticketId>",describe:"Get ticket metrics",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketMetrics({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Cm={command:"agent-counts",describe:"Get ticket counts per agent",builder:e=>e.option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}).option("department-id",{type:"string",describe:"Filter by department ID"}),handler:async e=>{try{let t=x(e),o=e.agentIds.split(",").map(n=>n.trim()),r=await t.getAgentsTicketsCount({agentIds:o,departmentId:e.departmentId});p(r)}catch(t){l(t),process.exit(1)}}},tu={command:"tickets",describe:"Desk ticket operations",builder:e=>e.command(mm).command(ym).command(fm).command(gm).command(Rm).command(Cm).demandCommand(1),handler:Z};var Tm={command:"list",describe:"List departments",builder:e=>D(e).option("search",{type:"string",describe:"Search by name"}).option("is-enabled",{type:"boolean",describe:"Filter by enabled status"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,searchStr:e.search,isEnabled:e.isEnabled},r=await b({initialInput:o,fetchPage:n=>t.getDepartments(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Zm={command:"get <departmentId>",describe:"Get a department by ID",builder:e=>e.positional("departmentId",{type:"string",demandOption:!0,describe:"Department ID"}),handler:async e=>{try{let o=await x(e).getDepartmentById({departmentId:e.departmentId});p(o)}catch(t){l(t),process.exit(1)}}},ou={command:"departments",describe:"Desk department operations",builder:e=>e.command(Tm).command(Zm).demandCommand(1),handler:Z};var Am={command:"list",describe:"List contacts",builder:e=>D(e).option("sort-by",{type:"string",describe:"Field to sort by"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,sortBy:e.sortBy,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getContacts(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},xm={command:"get <contactId>",describe:"Get a contact by ID",builder:e=>e.positional("contactId",{type:"string",demandOption:!0,describe:"Contact ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await x(e).getContactById({contactId:e.contactId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},ru={command:"contacts",describe:"Desk contact operations",builder:e=>e.command(Am).command(xm).demandCommand(1),handler:Z};var Sm={command:"list",describe:"List agents",builder:e=>D(e).option("department-id",{type:"string",describe:"Filter by department ID"}).option("status",{type:"string",describe:"Filter by status (active, disabled)"}).option("include",{type:"string",describe:"Comma-separated includes (e.g. role,profile,departments)"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId,status:e.status,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getAgents(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Fm={command:"get <agentId>",describe:"Get an agent by ID",builder:e=>e.positional("agentId",{type:"string",demandOption:!0,describe:"Agent ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await x(e).getAgentById({agentId:e.agentId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},bm={command:"my-info",describe:"Get current authenticated agent info",builder:e=>e,handler:async e=>{try{let o=await x(e).getMyInfo();p(o)}catch(t){l(t),process.exit(1)}}},nu={command:"agents",describe:"Desk agent operations",builder:e=>e.command(Sm).command(Fm).command(bm).demandCommand(1),handler:Z};var Im={command:"list",describe:"List all tags",builder:e=>D(e).option("department-id",{alias:"d",type:"string",demandOption:!0,describe:"Department ID"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId},r=await b({initialInput:o,fetchPage:n=>t.getAllTags(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},km={command:"search",describe:"Search tags",builder:e=>D(e).option("department-id",{alias:"d",type:"string",describe:"Department ID"}).option("query",{alias:"q",type:"string",demandOption:!0,describe:"Search string"}),handler:async e=>{try{let t=x(e),o={from:e.from,limit:e.limit,departmentId:e.departmentId,searchVal:e.query},r=await b({initialInput:o,fetchPage:n=>t.searchTags(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Om={command:"for-ticket <ticketId>",describe:"Get tags on a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketTags({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Dm={command:"associate <ticketId>",describe:"Add tags to a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("tags",{type:"string",demandOption:!0,describe:"Comma-separated tag names"}),handler:async e=>{try{let t=x(e),o=e.tags.split(",").map(n=>n.trim()),r=await t.associateTicketTags({ticketId:e.ticketId,tags:o});p(r)}catch(t){l(t),process.exit(1)}}},Em={command:"dissociate <ticketId>",describe:"Remove a tag from a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("tag-id",{type:"string",demandOption:!0,describe:"Tag ID to remove"}),handler:async e=>{try{await x(e).dissociateTicketTag({ticketId:e.ticketId,tagId:e.tagId}),p({removed:!0})}catch(t){l(t),process.exit(1)}}},au={command:"tags",describe:"Desk tag operations",builder:e=>e.command(Im).command(km).command(Om).command(Dm).command(Em).demandCommand(1),handler:Z};var Pm={command:"list <ticketId>",describe:"List comments on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("sort-by",{type:"string",describe:"Sort field"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit,sortBy:e.sortBy},r=await b({initialInput:o,fetchPage:n=>t.getTicketComments(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Mm={command:"get <ticketId> <commentId>",describe:"Get a comment by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("commentId",{type:"string",demandOption:!0,describe:"Comment ID"}),handler:async e=>{try{let o=await x(e).getTicketCommentById({ticketId:e.ticketId,commentId:e.commentId});p(o)}catch(t){l(t),process.exit(1)}}},wm={command:"create <ticketId>",describe:"Create a comment on a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("content",{type:"string",demandOption:!0,describe:"Comment content"}).option("public",{type:"boolean",default:!1,describe:"Make comment public"}).option("content-type",{type:"string",default:"plainText",choices:["plainText","html"],describe:"Content type"}),handler:async e=>{try{let o=await x(e).createTicketComment({ticketId:e.ticketId,content:e.content,isPublic:e.public,contentType:e.contentType});p(o)}catch(t){l(t),process.exit(1)}}},_m={command:"delete <ticketId> <commentId>",describe:"Delete a comment",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("commentId",{type:"string",demandOption:!0,describe:"Comment ID"}),handler:async e=>{try{await x(e).deleteTicketComment({ticketId:e.ticketId,commentId:e.commentId}),p({deleted:!0})}catch(t){l(t),process.exit(1)}}},iu={command:"comments",describe:"Desk comment operations",builder:e=>e.command(Pm).command(Mm).command(wm).command(_m).demandCommand(1),handler:Z};var Nm={command:"list <ticketId>",describe:"List attachments on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketAttachments(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},Um={command:"delete <ticketId> <attachmentId>",describe:"Delete an attachment",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("attachmentId",{type:"string",demandOption:!0,describe:"Attachment ID"}),handler:async e=>{try{await x(e).deleteTicketAttachment({ticketId:e.ticketId,attachmentId:e.attachmentId}),p({deleted:!0})}catch(t){l(t),process.exit(1)}}},su={command:"attachments",describe:"Desk attachment operations",builder:e=>e.command(Nm).command(Um).demandCommand(1),handler:Z};var vm={command:"list <ticketId>",describe:"List followers of a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketFollowers({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Lm={command:"add <ticketId>",describe:"Add followers to a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}),handler:async e=>{try{let t=x(e),o=e.agentIds.split(",").map(r=>r.trim());await t.addTicketFollowers({ticketId:e.ticketId,agentIds:o}),p({added:!0})}catch(t){l(t),process.exit(1)}}},Gm={command:"remove <ticketId>",describe:"Remove followers from a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("agent-ids",{type:"string",demandOption:!0,describe:"Comma-separated agent IDs"}),handler:async e=>{try{let t=x(e),o=e.agentIds.split(",").map(r=>r.trim());await t.removeTicketFollowers({ticketId:e.ticketId,agentIds:o}),p({removed:!0})}catch(t){l(t),process.exit(1)}}},cu={command:"followers",describe:"Desk ticket follower operations",builder:e=>e.command(vm).command(Lm).command(Gm).demandCommand(1),handler:Z};var Km={command:"timer <ticketId>",describe:"Get current timer state for a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketTimer({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},Vm={command:"timer-action <ticketId>",describe:"Start, pause, resume, or stop a timer",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("action",{type:"string",demandOption:!0,choices:["start","pause","resume","stop"],describe:"Timer action"}),handler:async e=>{try{let o=await x(e).performTicketTimerAction({ticketId:e.ticketId,timerAction:e.action});p(o)}catch(t){l(t),process.exit(1)}}},Jm={command:"entries <ticketId>",describe:"List time entries for a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketTimeEntries(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},zm={command:"summation <ticketId>",describe:"Get time entry summation for a ticket",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let o=await x(e).getTicketTimeEntrySummation({ticketId:e.ticketId});p(o)}catch(t){l(t),process.exit(1)}}},uu={command:"time",describe:"Desk time tracking operations",builder:e=>e.command(Km).command(Vm).command(Jm).command(zm).demandCommand(1),handler:Z};var jm={command:"list <ticketId>",describe:"List threads on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit,include:e.include},r=await b({initialInput:o,fetchPage:n=>t.getTicketThreads(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},qm={command:"get <ticketId> <threadId>",describe:"Get a thread by ID",builder:e=>e.positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}).positional("threadId",{type:"string",demandOption:!0,describe:"Thread ID"}).option("include",{type:"string",describe:"Comma-separated includes"}),handler:async e=>{try{let o=await x(e).getTicketThreadById({ticketId:e.ticketId,threadId:e.threadId,include:e.include});p(o)}catch(t){l(t),process.exit(1)}}},pu={command:"threads",describe:"Desk ticket thread operations",builder:e=>e.command(jm).command(qm).demandCommand(1),handler:Z};var Wm={command:"list <ticketId>",describe:"List activities on a ticket",builder:e=>D(e).positional("ticketId",{type:"string",demandOption:!0,describe:"Ticket ID"}),handler:async e=>{try{let t=x(e),o={ticketId:e.ticketId,from:e.from,limit:e.limit},r=await b({initialInput:o,fetchPage:n=>t.getTicketActivities(n),adapter:E,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;p(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){l(t),process.exit(1)}}},lu={command:"activities",describe:"Desk ticket activity operations",builder:e=>e.command(Wm).demandCommand(1),handler:Z};var du={command:"desk",describe:"Zoho Desk operations",builder:e=>e.command(tu).command(ou).command(ru).command(nu).command(au).command(iu).command(su).command(cu).command(uu).command(pu).command(lu).demandCommand(1,"Please specify a desk subcommand.").example([["$0 desk tickets list --limit 10","List first 10 tickets"],["$0 desk tickets get 12345","Get a ticket by ID"],["$0 desk agents my-info","Get current agent info"],['$0 desk comments create 12345 --content "Looking into this"',"Add a comment"]]),handler:Z};import{readFile as $m,writeFile as hu}from"node:fs/promises";import{basename as Hm}from"node:path";function Bm(e){let t={};return e.requestName&&(t.request_name=e.requestName),e.folderName&&(t.folder_name=e.folderName),e.ownerFullName&&(t.owner_full_name=e.ownerFullName),e.recipientEmail&&(t.recipient_email=e.recipientEmail),e.recipientName&&(t.recipient_name=e.recipientName),e.formName&&(t.form_name=e.formName),Object.keys(t).length>0?t:void 0}var Ym={command:"list",describe:"List sign requests (documents)",builder:e=>po(e).option("sort-column",{type:"string",describe:"Column to sort by (e.g. request_name, created_time, recipient_email)"}).option("sort-order",{type:"string",choices:["ASC","DESC"],describe:"Sort direction"}).option("request-name",{type:"string",describe:"Filter by request name"}).option("folder-name",{type:"string",describe:"Filter by folder name"}).option("owner-full-name",{type:"string",describe:"Filter by owner full name"}).option("recipient-email",{type:"string",describe:"Filter by recipient email"}).option("recipient-name",{type:"string",describe:"Filter by recipient name"}).option("form-name",{type:"string",describe:"Filter by form name"}),handler:async e=>{try{let t=w(e),o={start_index:e.startIndex,row_count:e.rowCount,sort_column:e.sortColumn,sort_order:e.sortOrder,search_columns:Bm(e)};await ho({argv:e,initialInput:o,fetchPage:r=>t.getDocuments(r)})}catch(t){l(t),process.exit(1)}}},Xm={command:"get <requestId>",describe:"Get a sign request by ID",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}),handler:async e=>{try{let o=await w(e).getDocument({requestId:e.requestId});p(o)}catch(t){l(t),process.exit(1)}}},Qm={command:"form-data <requestId>",describe:"Get filled form-field values for a completed request",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}),handler:async e=>{try{let o=await w(e).getDocumentFormData({requestId:e.requestId});p(o)}catch(t){l(t),process.exit(1)}}},ey={command:"create",describe:"Create a draft sign request from a local file",builder:e=>e.option("file",{type:"string",demandOption:!0,describe:"Path to the local document to upload"}).option("data",{type:"string",demandOption:!0,describe:"JSON request data (ZohoSignRequestData: request_name, is_sequential, actions, ...)"}).option("content-type",{type:"string",default:"application/pdf",describe:"MIME type of the uploaded file"}),handler:async e=>{try{let t=w(e),o=JSON.parse(e.data),r=await $m(e.file),n=new File([r],Hm(e.file),{type:e.contentType}),a=await t.createDocument({requestData:o,file:n});p(a)}catch(t){l(t),process.exit(1)}}},ty={command:"create-from-template",describe:"Create a sign request from a template",builder:e=>e.option("template-id",{type:"string",demandOption:!0,describe:"Template ID"}).option("data",{type:"string",demandOption:!0,describe:"JSON template data (ZohoSignCreateDocumentFromTemplateData: request_name, actions, field_data, ...)"}).option("quick-send",{type:"boolean",default:!0,describe:"Send immediately (true) or leave as a draft (false)"}),handler:async e=>{try{let t=w(e),o=JSON.parse(e.data),r=await t.createDocumentFromTemplate({templateId:e.templateId,data:o,isQuickSend:e.quickSend});p(r)}catch(t){l(t),process.exit(1)}}},oy={command:"update <requestId>",describe:"Update a draft sign request",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("data",{type:"string",demandOption:!0,describe:"JSON partial request data to apply"}),handler:async e=>{try{let t=w(e),o=JSON.parse(e.data),r=await t.updateDocument({requestId:e.requestId,data:o});p(r)}catch(t){l(t),process.exit(1)}}},ry={command:"send <requestId>",describe:"Submit a draft request to its recipients for signing",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("data",{type:"string",describe:"Optional JSON partial request data to apply before sending"}),handler:async e=>{try{let t=w(e),o=e.data?JSON.parse(e.data):void 0,r=await t.sendDocumentForSignature({requestId:e.requestId,data:o});p(r)}catch(t){l(t),process.exit(1)}}},ny={command:"extend <requestId>",describe:"Extend the expiration date of an in-progress request",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("expire-by",{type:"string",demandOption:!0,describe:'New expiration date string (e.g. "30 November 2024")'}),handler:async e=>{try{let o=await w(e).extendDocument({requestId:e.requestId,expire_by:e.expireBy});p(o)}catch(t){l(t),process.exit(1)}}},ay={command:"delete <requestId>",describe:"Delete a request (optionally recalling an in-progress one)",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("recall-inprogress",{type:"boolean",describe:"Recall an in-progress request before deleting"}).option("reason",{type:"string",describe:"Reason for recalling/deleting"}),handler:async e=>{try{let o=await w(e).deleteDocument({requestId:e.requestId,recall_inprogress:e.recallInprogress,reason:e.reason});p(o)}catch(t){l(t),process.exit(1)}}},iy={command:"download <requestId>",describe:"Download the signed PDF (or ZIP) for a request to a local file",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("output",{type:"string",demandOption:!0,describe:"Path to write the downloaded file to"}).option("with-coc",{type:"boolean",describe:"Include the completion certificate"}).option("merge",{type:"boolean",describe:"Merge all signed documents into one file"}).option("password",{type:"string",describe:"Password for protected documents"}),handler:async e=>{try{let o=await w(e).downloadPdf({requestId:e.requestId,with_coc:e.withCoc,merge:e.merge,password:e.password});if(!o.ok)throw new Error(`Download failed with status ${o.status}`);let r=Buffer.from(await o.arrayBuffer());await hu(e.output,r),p({saved:!0,path:e.output,bytes:r.length})}catch(t){l(t),process.exit(1)}}},sy={command:"certificate <requestId>",describe:"Download the completion certificate PDF for a request to a local file",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).option("output",{type:"string",demandOption:!0,describe:"Path to write the certificate to"}),handler:async e=>{try{let o=await w(e).downloadCompletionCertificate({requestId:e.requestId});if(!o.ok)throw new Error(`Certificate download failed with status ${o.status}`);let r=Buffer.from(await o.arrayBuffer());await hu(e.output,r),p({saved:!0,path:e.output,bytes:r.length})}catch(t){l(t),process.exit(1)}}},cy={command:"embed-url <requestId> <actionId>",describe:"Generate an embedded signing URL for a recipient action",builder:e=>e.positional("requestId",{type:"string",demandOption:!0,describe:"Request (envelope) ID"}).positional("actionId",{type:"string",demandOption:!0,describe:"Recipient action ID"}).option("host",{type:"string",demandOption:!0,describe:"Hosting origin embedded in the token (https required in production)"}),handler:async e=>{try{let o=await w(e).getEmbeddedSigningUrl({requestId:e.requestId,actionId:e.actionId,host:e.host});p(o)}catch(t){l(t),process.exit(1)}}},mu={command:"documents",describe:"Zoho Sign document (request) operations",builder:e=>e.command(Ym).command(Xm).command(Qm).command(ey).command(ty).command(oy).command(ry).command(ny).command(ay).command(iy).command(sy).command(cy).demandCommand(1,"Please specify a documents subcommand.").example([["$0 sign documents list --row-count 10","List first 10 sign requests"],["$0 sign documents get 12345","Get a request by ID"],[`$0 sign documents create --file ./nda.pdf --data '{"request_name":"NDA","is_sequential":true,"actions":[{"action_type":"SIGN","recipient_name":"Jane","recipient_email":"jane@example.com"}]}'`,"Create a draft from a file"],["$0 sign documents download 12345 --output ./signed.pdf --with-coc --merge","Download the signed PDF"]]),handler:Z};function uy(e){let t={};return e.templateName&&(t.template_name=e.templateName),e.ownerFullName&&(t.owner_full_name=e.ownerFullName),Object.keys(t).length>0?t:void 0}var py={command:"list",describe:"List templates",builder:e=>po(e).option("sort-column",{type:"string",describe:"Column to sort by (e.g. template_name, created_time)"}).option("sort-order",{type:"string",choices:["ASC","DESC"],describe:"Sort direction"}).option("template-name",{type:"string",describe:"Filter by template name"}).option("owner-full-name",{type:"string",describe:"Filter by owner full name"}),handler:async e=>{try{let t=w(e),o={start_index:e.startIndex,row_count:e.rowCount,sort_column:e.sortColumn,sort_order:e.sortOrder,search_columns:uy(e)};await ho({argv:e,initialInput:o,fetchPage:r=>t.getTemplates(r)})}catch(t){l(t),process.exit(1)}}},ly={command:"get <templateId>",describe:"Get a template by ID",builder:e=>e.positional("templateId",{type:"string",demandOption:!0,describe:"Template ID"}),handler:async e=>{try{let o=await w(e).getTemplate({templateId:e.templateId});p(o)}catch(t){l(t),process.exit(1)}}},yu={command:"templates",describe:"Zoho Sign template operations",builder:e=>e.command(py).command(ly).demandCommand(1,"Please specify a templates subcommand.").example([["$0 sign templates list --row-count 10","List first 10 templates"],["$0 sign templates get 286906000001616000","Get a template by ID"]]),handler:Z};var dy={command:"field-types",describe:"List available document field types",builder:e=>e,handler:async e=>{try{let o=await w(e).retrieveFieldTypes();p(o)}catch(t){l(t),process.exit(1)}}},fu={command:"sign",describe:"Zoho Sign operations",builder:e=>e.command(mu).command(yu).command(dy).demandCommand(1,"Please specify a sign subcommand.").example([["$0 sign documents list --row-count 10","List first 10 sign requests"],["$0 sign templates list","List templates"],["$0 sign documents get 12345","Get a request by ID"],["$0 sign field-types","List available field types"]]),handler:Z};var hy={command:"list",describe:"List the organizations available to the authenticated user",handler:async e=>{try{let o=await k(e).getOrgs();p(o.data.orgs,{count:o.data.orgs?.length})}catch(t){l(t),process.exit(1)}}},gu={command:"orgs",describe:"Analytics organization operations",builder:e=>e.command(hy).demandCommand(1).example([["$0 analytics orgs list","Find the org id needed by every other Analytics command"]]),handler:Z};var my={command:"list",describe:"List all accessible workspaces",builder:e=>e.option("owned",{type:"boolean",describe:"Only workspaces owned by the authenticated user"}).option("shared",{type:"boolean",describe:"Only workspaces shared with the authenticated user"}),handler:async e=>{try{let t=k(e);if(e.owned){let o=await t.getOwnedWorkspaces();p(o.data.workspaces,{count:o.data.workspaces?.length})}else if(e.shared){let o=await t.getSharedWorkspaces();p(o.data.workspaces,{count:o.data.workspaces?.length})}else{let o=await t.getAllWorkspaces();p(o.data)}}catch(t){l(t),process.exit(1)}}},yy={command:"get <workspaceId>",describe:"Get a workspace by ID",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}),handler:async e=>{try{let o=await k(e).getWorkspaceDetails({workspaceId:e.workspaceId});p(o.data.workspaces)}catch(t){l(t),process.exit(1)}}};function fy(e,t){if(!t)throw new Error(`Deleting a workspace cannot be undone. Re-run with --confirm ${e} to proceed.`);if(t!==e)throw new Error(`--confirm ${t} does not match the workspace being deleted (${e}).`);return e}var gy={command:"delete <workspaceId>",describe:"Delete a workspace and everything in it. This cannot be undone",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).option("confirm",{type:"string",describe:"Repeat the workspace ID to confirm. Required"}),handler:async e=>{try{let t=fy(e.workspaceId,e.confirm);await k(e).deleteWorkspace({workspaceId:t}),p({deleted:!0,workspaceId:t})}catch(t){l(t),process.exit(1)}}},Ru={command:"workspaces",describe:"Analytics workspace operations",builder:e=>e.command(my).command(yy).command(gy).demandCommand(1).example([["$0 analytics workspaces list","List owned and shared workspaces"],["$0 analytics workspaces list --owned","List only owned workspaces"],["$0 analytics workspaces delete 1767024000000060001 --confirm 1767024000000060001","Delete a workspace, confirming the id"]]),handler:Z};var Ry={command:"list <workspaceId>",describe:"List the views of a workspace",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}),handler:async e=>{try{let o=await k(e).getViews({workspaceId:e.workspaceId});p(o.data.views,{count:o.data.views?.length})}catch(t){l(t),process.exit(1)}}},Cy={command:"get <viewId>",describe:"Get a view by ID",builder:e=>e.positional("viewId",{type:"string",demandOption:!0,describe:"View ID (globally unique, no workspace needed)"}),handler:async e=>{try{let o=await k(e).getViewDetails({viewId:e.viewId});p(o.data.views)}catch(t){l(t),process.exit(1)}}},Ty={command:"columns <workspaceId> <viewId>",describe:"List the columns of a table",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"View ID"}),handler:async e=>{try{let o=await k(e).getTableMetadata({workspaceId:e.workspaceId,viewId:e.viewId});p(o.data.columns,{count:o.data.columns?.length})}catch(t){l(t),process.exit(1)}}},Zy={command:"delete <workspaceId> <viewId>",describe:"Delete a view. This cannot be undone",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"View ID"}).option("dependent-views",{type:"boolean",default:!1,describe:"Also delete the reports, dashboards and query tables built on this view"}),handler:async e=>{try{await k(e).deleteView({workspaceId:e.workspaceId,viewId:e.viewId,config:{deleteDependentViews:e.dependentViews}}),p({deleted:!0,workspaceId:e.workspaceId,viewId:e.viewId,deletedDependentViews:e.dependentViews})}catch(t){l(t),process.exit(1)}}},Cu={command:"views",describe:"Analytics view operations",builder:e=>e.command(Ry).command(Cy).command(Ty).command(Zy).demandCommand(1).example([["$0 analytics views list 1767024000000060001","List the views of a workspace"],["$0 analytics views columns 1767024000000060001 1767024000000149001","Inspect a table before importing into it"],["$0 analytics views delete 1767024000000060001 1767024000000149001",'Drop a table created by "import new-table"']]),handler:Z};import{readFile as Ay}from"node:fs/promises";import{basename as xy,extname as Tu}from"node:path";var Sy=["append","truncateadd","updateadd"],Fy=["abort","skiprow","setcolumnempty"];async function Zu(e){let t=await Ay(e,"utf8"),o=xy(e),r=Tu(e).toLowerCase()===".json"?"application/json":"text/csv";return $n({content:t,fileName:o,mimeType:r})}function mo(e){let t=Tu(e).toLowerCase();return{".json":"json",".csv":"csv"}[t]}function by(e,t){let o=t?.split(",").map(r=>r.trim()).filter(r=>r.length>0);if(e==="updateadd"&&!o?.length)throw new Error("The updateadd mode requires --matching-columns.");return o?.length?o:void 0}function Au(e){return e.option("file",{alias:"f",type:"string",demandOption:!0,describe:"Path to the CSV or JSON file to import"}).option("file-type",{type:"string",choices:["csv","json"],describe:"Format of the file. Inferred from its extension when omitted"}).option("on-error",{type:"string",choices:Fy,describe:"What to do when a row cannot be imported"}).option("async",{type:"boolean",default:!1,describe:"Queue the import as a job and poll it, rather than waiting on one request"})}var Iy={command:"data <workspaceId> <viewId>",describe:"Import a file into an existing table",builder:e=>Au(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"Target table view ID"}).option("mode",{alias:"m",type:"string",choices:Sy,default:"append",describe:"append adds rows, truncateadd replaces every row, updateadd upserts on --matching-columns"}).option("matching-columns",{type:"string",describe:"Comma-separated columns to match on. Required for the updateadd mode"}),handler:async e=>{try{let t=k(e),o=e.mode,r=by(o,e.matchingColumns),n=await Zu(e.file),a={importType:o,fileType:e.fileType??mo(e.file),onError:e.onError,matchingColumns:r};if(e.async){let i=await t.importDataInTableAndAwaitJob({workspaceId:e.workspaceId,viewId:e.viewId,file:n,config:a}),{jobCode:s,jobStatus:c,jobInfo:u}=i.data;p({jobCode:s,jobStatus:c,...u},{complete:De(s)})}else{let i=await t.importDataInTable({workspaceId:e.workspaceId,viewId:e.viewId,file:n,config:a});p(i.data)}}catch(t){l(t),process.exit(1)}}},ky={command:"new-table <workspaceId> <tableName>",describe:"Create a table in a workspace from an imported file",builder:e=>Au(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("tableName",{type:"string",demandOption:!0,describe:"Name of the table to create"}),handler:async e=>{try{let t=k(e),o=await Zu(e.file),r={tableName:e.tableName,fileType:e.fileType??mo(e.file),onError:e.onError};if(e.async){let n=await t.createImportJobInNewTable({workspaceId:e.workspaceId,file:o,config:r});p(n.data)}else{let n=await t.importDataInNewTable({workspaceId:e.workspaceId,file:o,config:r});p(n.data)}}catch(t){l(t),process.exit(1)}}},Oy={command:"job <workspaceId> <jobId>",describe:"Get the status of an asynchronous import job",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("jobId",{type:"string",demandOption:!0,describe:"Import job ID"}),handler:async e=>{try{let o=await k(e).getImportJob({workspaceId:e.workspaceId,jobId:e.jobId});p(o.data,{complete:De(o.data.jobCode)})}catch(t){l(t),process.exit(1)}}},xu={command:"import",describe:"Analytics import operations",builder:e=>e.command(Iy).command(ky).command(Oy).demandCommand(1).example([["$0 analytics import data WS VIEW -f rows.csv","Append the rows of a CSV to a table"],["$0 analytics import data WS VIEW -f rows.csv -m truncateadd","Replace every row in a table"],["$0 analytics import data WS VIEW -f big.csv --async","Queue a large import and poll it"],["$0 analytics import new-table WS Sales -f rows.csv","Create a table from a CSV"]]),handler:Z};import{writeFile as Dy}from"node:fs/promises";var Ey=["csv","json","xml","xls","pdf","html","image"];async function _r(e,t){let o=await e.text(),r;return t?await Dy(t,o,"utf8"):r=o,r}function Su(e){return e.option("format",{type:"string",choices:Ey,default:"csv",describe:"Format of the exported data"}).option("out",{alias:"o",type:"string",describe:"Write the export to this file instead of printing it"}).option("criteria",{type:"string",describe:`Filter expression, e.g. "Sales"."Region"='West'`}).option("columns",{type:"string",describe:"Comma-separated columns to export"})}function Py(e){let t=e?.split(",").map(o=>o.trim()).filter(o=>o.length>0);return t?.length?t:void 0}function Fu(e){return{responseFormat:e.format,criteria:e.criteria,selectedColumns:Py(e.columns)}}var My={command:"data <workspaceId> <viewId>",describe:"Export the data of a view",builder:e=>Su(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"View ID"}).option("async",{type:"boolean",default:!1,describe:"Queue the export as a job and poll it. Required for dashboards, query tables, and tables over a million rows"}),handler:async e=>{try{let t=k(e),o=Fu(e);if(e.async){let r=await t.exportDataAndAwaitJob({workspaceId:e.workspaceId,viewId:e.viewId,config:o});if(De(r.data.jobCode)){let n=await t.downloadExport({workspaceId:e.workspaceId,jobId:r.data.jobId}),a=await _r(n,e.out);p(a??{written:e.out,jobId:r.data.jobId})}else p(r.data,{complete:!1})}else{let r=await t.exportData({workspaceId:e.workspaceId,viewId:e.viewId,config:o}),n=await _r(r,e.out);p(n??{written:e.out})}}catch(t){l(t),process.exit(1)}}},wy={command:"query <workspaceId>",describe:"Export the results of a SQL query",builder:e=>Su(e).positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).option("sql",{type:"string",demandOption:!0,describe:"The SQL SELECT statement to run"}),handler:async e=>{try{let t=k(e),o={...Fu(e),sqlQuery:e.sql},r=await t.createExportJobForSqlQuery({workspaceId:e.workspaceId,config:o}),n=await t.getExportJob({workspaceId:e.workspaceId,jobId:r.data.jobId});p(n.data,{complete:De(n.data.jobCode)})}catch(t){l(t),process.exit(1)}}},_y={command:"job <workspaceId> <jobId>",describe:"Get the status of an asynchronous export job",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("jobId",{type:"string",demandOption:!0,describe:"Export job ID"}).option("download",{type:"boolean",default:!1,describe:"Download the export when the job has completed"}).option("out",{alias:"o",type:"string",describe:"Write the download to this file instead of printing it"}),handler:async e=>{try{let t=k(e),o=await t.getExportJob({workspaceId:e.workspaceId,jobId:e.jobId});if(e.download&&De(o.data.jobCode)){let r=await t.downloadExport({workspaceId:e.workspaceId,jobId:e.jobId}),n=await _r(r,e.out);p(n??{written:e.out})}else p(o.data,{complete:De(o.data.jobCode)})}catch(t){l(t),process.exit(1)}}},bu={command:"export",describe:"Analytics export operations",builder:e=>e.command(My).command(wy).command(_y).demandCommand(1).example([["$0 analytics export data WS VIEW -o rows.csv","Export a table to a CSV file"],["$0 analytics export data WS VIEW --format json","Print a table as JSON"],['$0 analytics export query WS --sql "select * from Sales"',"Queue an ad-hoc SQL export"]]),handler:Z};import{readFile as Ny}from"node:fs/promises";function Uy(e,t){return{clean:t,rowCount:e.rowCount,matched:e.matchedColumns.length,dropped:e.droppedColumns.length,empty:e.emptyColumns.length,emptyRequired:e.emptyColumns.filter(o=>o.required).length,caseMismatched:e.caseMismatchedColumns.length,conflicts:e.conflicts.length,conflictingValues:e.conflicts.reduce((o,r)=>o+r.conflictCount,0)}}var vy={command:"schema <workspaceId> <viewId>",describe:"Compare a file against a table before importing it",builder:e=>e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"Target table view ID"}).option("file",{alias:"f",type:"string",demandOption:!0,describe:"Path to the CSV or JSON file that would be imported"}).option("file-type",{type:"string",choices:["csv","json"],describe:"Format of the file. Inferred from its extension when omitted"}).option("delimiter",{type:"string",describe:"Field delimiter of the CSV. Defaults to a comma"}).option("max-samples",{type:"number",describe:"Offending values to report per conflict. Defaults to 3"}).option("strict",{type:"boolean",default:!1,describe:"Also treat a nullable column the file omits as drift"}).option("quiet",{type:"boolean",default:!1,describe:"Report only through the exit code, printing nothing"}),handler:async e=>{try{let t=k(e),o=e.fileType??mo(e.file);if(o==null)throw new Error(`Cannot tell the format of "${e.file}" from its extension. Pass --file-type csv or --file-type json.`);let r=await Ny(e.file,"utf8"),n=sc({content:r,fileType:o,delimiter:e.delimiter}),{data:a}=await t.getTableMetadata({workspaceId:e.workspaceId,viewId:e.viewId}),i=cc({...n,columns:a.columns??[],maxSamples:e.maxSamples}),s=uc(i,{strict:e.strict});e.quiet||p(i,Uy(i,s)),s||process.exit(1)}catch(t){l(t),process.exit(1)}}},Iu={command:"diff",describe:"Analytics comparison operations",builder:e=>e.command(vy).demandCommand(1).example([["$0 analytics diff schema WS VIEW -f rows.csv","Report what an import of the file would drop, leave empty, or mangle"],["$0 analytics diff schema WS VIEW -f rows.csv --strict","Also fail on a nullable column the file omits"],["$0 analytics diff schema WS VIEW -f rows.csv --quiet && zoho-cli analytics import data WS VIEW -f rows.csv","Gate an import on a clean diff"]]),handler:Z};function Nr(e){return e.positional("workspaceId",{type:"string",demandOption:!0,describe:"Workspace ID"}).positional("viewId",{type:"string",demandOption:!0,describe:"Table view ID"})}var Ly={command:"add <workspaceId> <viewId>",describe:"Add a single row to a table",builder:e=>Nr(e).option("columns",{type:"string",demandOption:!0,describe:"Row as a JSON object of column name to value"}),handler:async e=>{try{let t=k(e),o=JSON.parse(e.columns),r=await t.addRow({workspaceId:e.workspaceId,viewId:e.viewId,config:{columns:o}});p(r.data)}catch(t){l(t),process.exit(1)}}},Gy={command:"update <workspaceId> <viewId>",describe:"Update the rows of a table matching a criteria expression",builder:e=>Nr(e).option("columns",{type:"string",demandOption:!0,describe:"New values as a JSON object of column name to value"}).option("criteria",{type:"string",describe:`Filter expression, e.g. "Sales"."Region"='West'`}).option("all-rows",{type:"boolean",default:!1,describe:"Update every row. Required when no --criteria is given"}).option("add-if-not-exist",{type:"boolean",default:!1,describe:"Insert a row when the criteria matches nothing"}),handler:async e=>{try{let t=k(e),o=JSON.parse(e.columns),r=await t.updateRows({workspaceId:e.workspaceId,viewId:e.viewId,config:{columns:o,criteria:e.criteria,updateAllRows:e.allRows,addIfNotExist:e.addIfNotExist}});p(r.data)}catch(t){l(t),process.exit(1)}}},Ky={command:"delete <workspaceId> <viewId>",describe:"Delete the rows of a table matching a criteria expression",builder:e=>Nr(e).option("criteria",{type:"string",describe:`Filter expression, e.g. "Sales"."Region"='West'`}).option("all-rows",{type:"boolean",default:!1,describe:"Delete every row. Required when no --criteria is given"}),handler:async e=>{try{let o=await k(e).deleteRows({workspaceId:e.workspaceId,viewId:e.viewId,config:{criteria:e.criteria,deleteAllRows:e.allRows}});p(o.data)}catch(t){l(t),process.exit(1)}}},ku={command:"rows",describe:"Analytics row operations",builder:e=>e.command(Ly).command(Gy).command(Ky).demandCommand(1).example([[`$0 analytics rows add WS VIEW --columns '{"Region":"East"}'`,"Add one row"],[`$0 analytics rows delete WS VIEW --criteria '"Sales"."Region"='"'"'West'"'"''`,"Delete the rows matching a filter"]]),handler:Z};var Ou={command:"analytics",describe:"Zoho Analytics operations",builder:e=>e.command(gu).command(Ru).command(Cu).command(xu).command(bu).command(ku).command(Iu).demandCommand(1,"Please specify an analytics subcommand.").example([["$0 analytics orgs list","Find the org id every other command needs"],["$0 analytics workspaces list","List the accessible workspaces"],["$0 analytics import data WS VIEW -f rows.csv -m truncateadd","Replace a table with the rows of a CSV"],["$0 analytics export data WS VIEW -o rows.csv","Export a table to a CSV file"]]),handler:Z};var Du={command:"request <product> <method> <path>",describe:"Make a raw API request through the authenticated context",builder:e=>e.positional("product",{type:"string",demandOption:!0,choices:["recruit","crm","desk","sign"],describe:"Zoho product"}).positional("method",{type:"string",demandOption:!0,choices:["GET","POST","PUT","PATCH","DELETE"],describe:"HTTP method"}).positional("path",{type:"string",demandOption:!0,describe:"API path (relative to product base URL)"}).option("body",{type:"string",describe:"JSON request body"}).option("query",{type:"string",describe:"JSON query parameters"}).example([["$0 request recruit GET /v2/Candidates","List candidates via raw API"],[`$0 request desk GET /tickets --query '{"limit":5}'`,"List 5 desk tickets via raw API"],[`$0 request crm POST /v8/Contacts --body '{"data":[{"Last_Name":"Test"}]}'`,"Create a CRM contact via raw API"],["$0 request sign GET /templates","List sign templates via raw API"]]),handler:async e=>{try{let t=e.product,o=e.method,r=e.path,n;switch(t){case"recruit":n=oe(e).recruitContext;break;case"crm":n=re(e).crmContext;break;case"desk":n=x(e).deskContext;break;case"sign":n=w(e).signContext;break;default:throw new Error(`Unknown product: ${t}`)}let a=r;if(e.query){let c=JSON.parse(e.query),u=new URLSearchParams(c),d=a.includes("?")?"&":"?";a=`${a}${d}${u.toString()}`}let i={method:o};e.body&&(i.body=e.body,i.headers={"Content-Type":"application/json"});let s=await n.fetchJson(a,i);p(s)}catch(t){l(t),process.exit(1)}}};var zy=ra({cliName:"zoho-cli",loadOutputConfig:async()=>(await $())?.output,mergeOutputConfig:e=>ae({output:e}),clearOutputConfig:aa}),jy=[Qc,eu,du,fu,Ou,Du],Eu=[Hc,zy,Bc];function qy(e){return e.command.split(" ")[0]}var Pu=new Set(Eu.map(qy)),Wy=oa({cliName:"zoho-cli",skipCommands:Pu,loadOutputConfig:async()=>(await $())?.output,saveCommandOutputConfig:async(e,t)=>{await ae({output:{commands:{[e]:t}}})}});async function $y(){try{await Vy(Jy(process.argv)).scriptName("zoho-cli").usage("$0 <command> [options]").option("verbose",{alias:"v",type:"boolean",default:!1,global:!0,describe:"Verbose output"}).option("dump-dir",{type:"string",global:!0,describe:"Directory to save full API responses as JSON files (overrides config)"}).option("pick",{type:"string",global:!0,describe:"Comma-separated top-level fields to include in output (overrides config)"}).option("set-dump-dir",{type:"string",global:!0,describe:"Save dump directory to config for this command and apply now"}).option("set-pick",{type:"string",global:!0,describe:"Save pick fields to config for this command and apply now"}).option("pick-all",{type:"boolean",global:!0,describe:"Ignore any configured pick filters and return full response data"}).middleware([Xc(Pu),Wy],!0).command(Eu).command(jy).demandCommand(1,"Please specify a command. Use --help for available commands.").strict().fail(!1).help().alias("help","h").version(!1).wrap(Math.min(120,process.stdout.columns||80)).parse()}catch(e){l(e),process.exit(1)}}await $y();
|
package/cli/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/zoho/cli",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.7.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"zoho-cli": "index.js"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@dereekb/dbx-cli": "14.
|
|
11
|
-
"@dereekb/nestjs": "14.
|
|
12
|
-
"@dereekb/rxjs": "14.
|
|
13
|
-
"@dereekb/util": "14.
|
|
14
|
-
"@dereekb/zoho": "14.
|
|
15
|
-
"@dereekb/zoho/nestjs": "14.
|
|
10
|
+
"@dereekb/dbx-cli": "14.7.0",
|
|
11
|
+
"@dereekb/nestjs": "14.7.0",
|
|
12
|
+
"@dereekb/rxjs": "14.7.0",
|
|
13
|
+
"@dereekb/util": "14.7.0",
|
|
14
|
+
"@dereekb/zoho": "14.7.0",
|
|
15
|
+
"@dereekb/zoho/nestjs": "14.7.0",
|
|
16
16
|
"yargs": "^18.0.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
package/nestjs/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/zoho/nestjs",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.7.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"peerDependencies": {
|
|
7
|
-
"@dereekb/nestjs": "14.
|
|
8
|
-
"@dereekb/rxjs": "14.
|
|
9
|
-
"@dereekb/util": "14.
|
|
10
|
-
"@dereekb/zoho": "14.
|
|
7
|
+
"@dereekb/nestjs": "14.7.0",
|
|
8
|
+
"@dereekb/rxjs": "14.7.0",
|
|
9
|
+
"@dereekb/util": "14.7.0",
|
|
10
|
+
"@dereekb/zoho": "14.7.0",
|
|
11
11
|
"@nestjs/common": "^12.0.1",
|
|
12
12
|
"@nestjs/config": "^12.0.0",
|
|
13
13
|
"express": "^5.2.1"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/zoho",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.7.0",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@dereekb/date": "14.
|
|
27
|
-
"@dereekb/dbx-cli": "14.
|
|
28
|
-
"@dereekb/firebase": "14.
|
|
29
|
-
"@dereekb/model": "14.
|
|
30
|
-
"@dereekb/nestjs": "14.
|
|
31
|
-
"@dereekb/rxjs": "14.
|
|
32
|
-
"@dereekb/util": "14.
|
|
26
|
+
"@dereekb/date": "14.7.0",
|
|
27
|
+
"@dereekb/dbx-cli": "14.7.0",
|
|
28
|
+
"@dereekb/firebase": "14.7.0",
|
|
29
|
+
"@dereekb/model": "14.7.0",
|
|
30
|
+
"@dereekb/nestjs": "14.7.0",
|
|
31
|
+
"@dereekb/rxjs": "14.7.0",
|
|
32
|
+
"@dereekb/util": "14.7.0",
|
|
33
33
|
"@nestjs/common": "^12.0.1",
|
|
34
34
|
"@nestjs/config": "^12.0.0",
|
|
35
35
|
"express": "^5.2.1",
|