@dereekb/zoho 13.26.0 → 13.27.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 CHANGED
@@ -1,8 +1,8 @@
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 xc=Object.defineProperty;var Zc=Object.getOwnPropertyDescriptor;var A=(e,t,o,r)=>{for(var n=r>1?void 0:r?Zc(t,o):t,i=e.length-1,a;i>=0;i--)(a=e[i])&&(n=(r?a(t,o,n):a(n))||n);return r&&n&&xc(t,o,n),n},k=(e,t)=>(o,r)=>t(o,r,e);import{existsSync as Fc,mkdirSync as Sc,writeFileSync as Ac}from"node:fs";import{join as bc}from"node:path";var Cr=1;var to=[/Bearer\s+\S+/gi,/access_token[=:]\s*\S+/gi,/refresh_token[=:]\s*\S+/gi,/client_secret[=:]\s*\S+/gi,/id_token[=:]\s*\S+/gi],xr=6e4,Ne={},Zr=[...to],eo,Ic=!1,kc=xr;function oo(e){Ne=e}function At(){return Ne}function Fr(e){Ic=e}function Sr(e){kc=e===void 0?xr:e}function ro(e){Zr=e}function Ar(e){eo=e}function de(e){let t=e;for(let o of Zr)t=t.replace(o,"[REDACTED]");return t}function br(){return new Date().toISOString().replaceAll(/[:.]/g,"-")}function at(e,t){let{dumpDir:o,commandPath:r}=Ne,n;if(o){Fc(o)||Sc(o,{recursive:!0});let i=r?.length?r.join("_"):"response",a=br(),s=t?`${i}_${a}_${t}`:`${i}_${a}`;n=bc(o,`${s}.${e}`)}else n=void 0;return n}function Pc(e,t){let o=at("json");if(!o)return;let r={ok:!0,data:e,...t?{meta:t}:{}};Ac(o,JSON.stringify(r,null,2))}function Ae(e,t){let o=t.split(",").map(n=>n.trim()),r;return Array.isArray(e)?r=e.map(n=>Tr(n,o)):e!=null&&typeof e=="object"?r=Tr(e,o):r=e,r}function Tr(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 Ir(e){return Ne.pretty?JSON.stringify(e,null,2):JSON.stringify(e)}function l(e,t){Pc(e,t);let r={ok:!0,data:Ne.pick?Ae(e,Ne.pick):e,...t?{meta:t}:{}};console.log(Ir(r))}function kr(e){console.log(Ir(no(e)))}var it=class extends Error{code;suggestion;constructor(t){super(t.message),this.name="CliError",this.code=t.code,this.suggestion=t.suggestion}};function no(e){let t=eo?eo(e):void 0,o;return t?o=t:e instanceof it?o={ok:!1,error:de(e.message),code:e.code,...e.suggestion?{suggestion:e.suggestion}:{}}:e instanceof Error?o={ok:!1,error:de(e.message),code:"ERROR"}:o={ok:!1,error:de(String(e)),code:"UNKNOWN_ERROR"},o}function we(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 st(e){let t=!0;for(let o of e){t=!1;break}return t}function io(e,t){for(let o of e)t(o)}function q(e,t,o=!1){e!=null&&(we(e,o)?io(e,t):t(e))}function Pr(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(a=>Array.isArray(a)?a.length!==n:!0)!==-1}else r=!0;t=r?[e]:e}else t=e;return t}function Ec(e){return e==null?[]:Oc(e)}var C=Ec;function Oc(e){return Array.isArray(e)?e:[e]}function Er(e,t=!0){return t?((...o)=>!e.call(void 0,...o)):e}function ao(e){return Object.keys(e).length===0}function Or(e){let t={};return e.forEach((o,r)=>{t[r]=o}),t}function Dr(e){return{...e}}function Mr(e){return e!=null}function bt(e){return we(e,!1)?!st(e):_r(e)}function so(e){let t;return we(e,!0)?t=!st(e):_r(e)?t=typeof e=="object"?!ao(e):!0:t=!1,t}function _r(e){return e!=null&&e!==""}function Dc(e){return t=>{let o;return t==null?o=[]:o=t.filter((r,n,i)=>e(r,n,i)),o}}var me=Dc(Mr);function vr({base:e,build:t}){let o=e??{};return t(o),o}var Mc=(e=>e);function Nr(){return Mc}function Ue(e,t){let o=_c(e,r=>t(r)?"in":"out");return{included:o.in??[],excluded:o.out??[]}}function _c(e,t){return Or(vc(e,t))}function vc(e,t){let o=new Map;return e?.forEach(r=>{let n=t(r),i=o.get(n);i==null?o.set(n,[r]):i.push(r)}),o}function wr(e,t,o){return C(t).forEach(r=>e.set(r,o)),e}function co(e){return Array.from(e.entries())}function Ur(e){return Nc(co(e))}function Nc(e){let t=[];return e.forEach(([o,r])=>{q(r,n=>{t.push([o,n])})}),t}function Lr(){let e=new Map,t=(n,i)=>{let a=e.get(n);a==null&&(a=[],e.set(n,a)),q(i,s=>a.push(s))},o=(n,i)=>t(n,Pr(i));return{map:()=>e,entries:()=>co(e),tuples:()=>Ur(e),delete:n=>e.delete(n),add:t,addTuples:o,addToKeys:(n,i)=>q(n,a=>t(a,i)),addTuplesToKeys:(n,i)=>q(n,a=>o(a,i)),has:n=>e.has(n),get:n=>e.get(n)??[]}}function wc(e){return typeof e=="function"?e.prototype?Object.getOwnPropertyDescriptor(e,"prototype")?.writable?"function":"class":e.constructor.name==="AsyncFunction"?"function":"arrow":null}function Gr(e){let t=wc(e);return t!=null&&t!=="class"}function Kr(e){return Gr(e)?e:()=>e}function Vr(e,t){return Math.log(t)/Math.log(e)}var Hr=",",Uc=" ";function Lc(e,t=Hr,o=!1){if(e==null)return e;let r=C(e);return o&&(r=r.map(n=>n?.trim())),r.filter(Boolean).join(t)}function uo(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),i=[];if(n.length>1){let a=n.length>o,s=a?o-1:n.length;for(let c=0;c<s;c+=1)i.push(n[c]);a&&i.push(n.slice(s).join(t))}else i.push(n[0]);r=i;break}}return r}function Gc(e){let{joiner:t,trimByDefault:o=!1}=e,r=function(n,i=o){return Lc(n,t,i)};return r.joiner=t,r.trimByDefault=o,r}function zr(e){let{joiner:t}=e,o=Gc(e),r=(n,i=a=>a)=>n.split(t).map(s=>i(s.trim()));return{joiner:t,trimByDefault:o.trimByDefault,joinStrings:o,splitStrings:r,splitStringsToSet(n){return new Set(n==null?[]:r(n))},splitJoinRemainder(n,i){return uo(n,t,i)}}}var po=zr({joiner:Hr}),Kc=zr({joiner:Uc,trimByDefault:!0});var P=po.joinStrings,Xh=po.splitStrings,Yh=po.splitStringsToSet,Qh=Kc.joinStrings;var jr=Er;function Br(e,{forEach:t,filter:o}){Vc(e,o).forEach((n,i)=>t(n,i))}function Vc(e,t){return lo(t)(e)}function lo(e){let t;if(e==null)t=Wr;else{let o=Hc(e);t=r=>Wr(r).filter((n,i)=>o(n,i))}return t}function Wr(e){return Object.entries(e)}function ho(e){return typeof e=="object"?e:{valueFilter:e}}function Hc(e){let t=ho(e),{valueFilter:o=1,invertFilter:r=!1,keysFilter:n}=t,i;switch(o){case 1:i=([,a])=>a!==void 0;break;case 2:i=([,a])=>a!=null;break;case 3:i=([,a])=>!!a;break;case 4:i=([,a])=>bt(a);break;case 5:i=([,a])=>so(a);break;case 6:i=([,a])=>!!a&&bt(a);break;case 7:i=([,a])=>!!a&&so(a);break;default:i=()=>!0;break}if(n){let a=i,s=new Set(n.map(c=>c.toString()));i=(c,u)=>a(c,u)&&s.has(c[0])}return jr(i,r)}function ct(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 zc({filter:e,copy:t,dynamic:o=!1}){let r=e==null?Wc:Le({filter:e,copy:!1});return n=>{let i=()=>{let s={};return n.forEach(c=>{let u=r({...c});Object.assign(s,u)}),s},a=o?i:ct(i);return s=>{let c=a();return t&&(s=Dr(s)),Object.assign(s,c),s}}}function qr(e,t){return jc(t)(e)}function jc(e){let t=zc({filter:e,copy:!1,dynamic:!0});return o=>t(me(o))({})}var lm=Le({copy:!0,filter:{valueFilter:1}}),hm=Le({copy:!0,filter:{valueFilter:2}}),Jr=Le({copy:!0,filter:{valueFilter:4}}),mm=Le({copy:!0,filter:{valueFilter:6}}),ym=mo({valueFilter:1}),gm=mo({valueFilter:6}),fm=mo({valueFilter:2});function mo(e){let t=$r({filter:e,forEach:([o],r,n,i)=>{i.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=ho(t);o.invertFilter=!o.invertFilter;let r=$r({filter:o,forEach:([n],i,a)=>{delete a[n]}});return(n,i)=>((typeof i=="boolean"?i:e)&&(n={...n}),r(n),n)}var Wc=Le({copy:!1});function $r({forEach:e,filter:t}){let o=lo(t);return((r,n)=>{o(r).forEach((a,s)=>e(a,s,r,n))})}function Xr(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 Yr(e){let t,o,r=0;function n(){let i;if(t==null){if(o==null){let a=r;o=e.load().then(s=>(r===a&&(t={entries:s},o=void 0),s),s=>{throw r===a&&(o=void 0),s})}i=o}else i=Promise.resolve(t.entries);return i}return{load:async()=>({...await n()}),get:async i=>(await n())[i],set:async(i,a)=>{let s=await n();r+=1,o=void 0,await e.set(i,a),t={entries:{...s,[i]:a}}},remove:async i=>{let a=await n();r+=1,o=void 0,await e.remove(i);let s={...a};delete s[i],t={entries:s}},clear:async()=>{r+=1,o=void 0,await e.clear(),t={entries:{}}}}}function Qr(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 It(e,t,o){let[r,n]=yo(e,t,!1);return r+o+n}function yo(e,t,o=!1){let r=e.substring(0,t),n=e.substring(t+(o?0:1));return[r,n]}var Bc=["\\","^","$",".","|","?","*","+","(",")","[","]","{","}"],Sm=new Set(Bc);function en(e){let{escapeTargets:t,escapeCharacter:o}=e,r=t instanceof Set?t:new Set(t);return n=>{let i=kt(r,n),a;switch(i.length){case 0:a=n;break;case 1:{let s=n[i[0]];a=It(n,i[0],o(s));break}default:{let s=[],c=i.length,u=0,p=0;for(let d=0;d<c;d+=1){p=i[d];let y=n[p],T=n.substring(u,p)+o(y);s.push(T),u=p+1}s.push(n.substring(u)),a=s.join("");break}}return a}}function qc(e){return(t,o)=>{let r=o??Number.MAX_SAFE_INTEGER,n=[];for(let[i,a]of[...t].entries())if(e.has(a)&&(n.push(i),n.length>=r))break;return n}}function kt(e,t,o){return qc(e)(t,o)}function Jc(e,t){return kt(e,t,1)[0]}function $c(e){return t=>{let r=Jc(typeof e=="string"?new Set([e]):e,t),n;return r==null?n=[t,void 0]:n=yo(t,r,!1),n}}function tn(e,t){return $c(t)(e)}var Ge="/",Xc=".";function Yc(e){let t=e.split(Xc,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 on(e){return Yc(e)!=="invalid"}var Qc=/^\/+/,eu=/\/+$/;var tu=/\/{2,}/g;function rn(e){return e.startsWith(Ge)?e.replace(Qc,Ge):`${Ge}${e}`}function nn(e){return e.replaceAll(tu,Ge)}function an(e){return e.replace(eu,"")}function ou(e){let t=e.indexOf(".");return t>0&&t<e.length-1}var sn=/:(\d+)/;function ru(e){return sn.test(e)}function nu(e){let t=sn.exec(e);return t?Number(t[1]):void 0}function iu(e){let t=dn(e),o=au(t),{domain:r,path:n}=o,i=ou(r),a=ru(e),s=a?nu(e)??void 0:void 0,[c,u]=tn(o.path,"?"),p=i&&(c===""||on(c+"/")),d=cu(e);return{input:e,isWebsiteUrl:p,hasWebsiteDomain:i,hasHttpPrefix:d,hasPortNumber:a,portNumber:s,splitPair:o,domain:r,websitePath:n,path:c,query:u}}function cn(e){let t=iu(e);return t.hasHttpPrefix&&t.isWebsiteUrl}function un(e,t=!1){let o=kt(new Set("?"),e),r,n=e;return t&&o.length?r=o:o.length>1&&(r=o.reverse(),r.pop()),r?.length&&r.forEach(i=>n=It(n,i,"&")),n}function au(e){let t=dn(e);return su(t)}function su(e){let t=uo(e,"/",2),o=t[0],r=t[1];return{domain:o,path:rn(r??"/")}}var pn=/^https:\/\/|http:\/\//;function dn(e){return e.replace(pn,"")}function cu(e){return pn.test(e)}function S(){}function ln(e){let t;return e==null||yu(e)?t=e:t=uu(e),t}function uu(e){return e==null?e:new Date(e)}var hn=24,pu=60;var du=60,lu=du*pu,L=1e3,be=L*60,go=be*60,hu=go*hn,wm=lu*hn,mu=7,Um=hu*mu;function yu(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function mn(e){return e.getTime()<Date.now()}function yn(e,t){return e==null?e:new Date(e.getTime()+(t??0))}function gu(e){let{expiresAt:t,expires:o,now:r,expiresFromDate:n,defaultExpiresFromDateToNow:i,expiresIn:a}=e,s=n==null?null:ln(n);function c(y){return y??r??new Date}function u(y,m=!1){let T=c(y),g=d(T),R;return g==null?R=m:R=g<=T,R}function p(y){let m=c(y);return d(m)}function d(y){let m=null;return o!=null?m=o.expiresAt??null:t!=null?m=t:a!=null&&(m=yn(s??(i===!1?null:y),a)),m}return{input:e,hasExpired:u,getExpirationDate:p}}function gn(e,t){let o=!0;return e!=null&&(o=gu(e).hasExpired(t,!0)),o}function fn(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}async function fo(e,t){return new Promise(o=>setTimeout(()=>o(t),e))}function fu(e){let n=go,i={startLimitAt:1,cooldownRate:1,exponentRate:2,maxWaitTime:n},a=0,s=Number.MAX_SAFE_INTEGER,c=new Date,u=!0;m(e??i);function p(){return{...i}}function d(){return u}function y(F){u=F}function m(F,U=!1){let z=Math.max(0,F.startLimitAt??1),b=F.cooldownRate??1,v=F.maxWaitTime??n,V=F.exponentRate??2;i={startLimitAt:z,cooldownRate:b,maxWaitTime:v,exponentRate:V},s=Vr(V,v/L+1),U&&T()}function T(){a=0,c=new Date}function g(F){let U;if(u){let{cooldownRate:z}=i,v=(Date.now()-c.getTime())*z/L,V=Math.max(a-v,0),j=Math.max(0,V-i.startLimitAt);F&&(a=V+F,c=new Date),U=j>=s?i.maxWaitTime:(Math.pow(i.exponentRate,Math.max(j,0))-1)*L}else U=0;return U}function R(F){return g(F??0)}function Z(){let F=g(1);return fo(F)}return{waitForRateLimit:Z,getNextWaitTime:R,getConfig:p,setConfig:m,getEnabled:d,setEnabled:y,reset:T}}function Rn(e){let o=fu({exponentRate:1.5,maxWaitTime:L*8,...e}),r=be,n=new Date,i=0,a=0,s=!0;Z(e,!0);function c(){mn(n)&&d()}function u(){return s}function p(b){s=b}function d(){a=i,n=new Date(Date.now()+r)}function y(){return n}function m(){return Math.max(0,n.getTime()-Date.now())}function T(b){n=b}function g(){return c(),a}function R(b){a=b}function Z(b,v=!1){i=b.limit??i,r=b.resetPeriod??r;let V={cooldownRate:b.cooldownRate??Math.max(.1,r/L),exponentRate:b.exponentRate??1.5,maxWaitTime:b.maxWaitTime??L*8};o.setConfig(V,v),v&&d(),n=b.resetAt??n}function F(b){let v=0;if(s){let j=function(){return a-=b,o.getNextWaitTime(b)};var V=j;a>0?v=j():(c(),a>0?v=j():v=m())}return v}function U(b){return F(b??0)}function z(){let b=F(1);return fo(b)}return{getRemainingLimit:g,setRemainingLimit:R,getTimeUntilNextReset:m,getResetAt:y,setNextResetAt:T,setConfig:Z,reset:d,getNextWaitTime:U,waitForRateLimit:z,getEnabled:u,setEnabled:p}}var Ru="__CATCH_ALL_HANDLE_RESULT_KEY__";function Tn(e,t){let o=t?.defaultResult??!0,r=t?.negativeResult??!1;return()=>{let n,i=new Map,a=u=>{n=u},s=(u,p)=>{u===Ru?a(p):wr(i,u,p)},c=(u,p,d)=>{let y=d.bind(u);s(p,y)};return vr({base:(u=>{let p=e(u),d=(p==null?void 0:i.get(p))??n,y;return d?y=Promise.resolve(d(u)).then(m=>m??o):y=Promise.resolve(r),y}),build:u=>{u.readKey=e,u.set=s,u.bindSet=c,u.setCatchAll=a}})}}function Tu(e,t){return{accessor:t,boundTo:e,set:(o,r)=>{t.bindSet(e,o,r)},setCatchAll:o=>{t.setCatchAll(o)}}}function Cu(e,t){let o=r=>{e.set(t,r)};return o.key=t,o}function xu(e,t,o){let r=Cu(e,t);return n=>{r(function(i){let a=o(i);return n.call(this,a)})}}function Cn(e,t){return o=>xu(e,o,t)}function xn(e){return t=>(o,r)=>{let n=Tu(o,t),i=e.configurerForAccessor(n);r(i)}}var Zu=-1,Zn=0;function Fu(e){return e?.page??Zu}function Fn(e){return Fu(e)+1}import{BaseError as Sn}from"make-error";var J=class extends Sn{constructor(o){super(`Fetch request failed to build due to an unexpected error: ${typeof o=="object"?o.message:o}`);this.error=o}};function An(e){return(t,o)=>Su(e(t,o))}var Ke=class extends Sn{constructor(o){super(`Fetch response was a non-ok status code (${o.status}): ${o.statusText}`);this.response=o}};function Su(e){return e.then(t=>{if(!t.ok)throw new Ke(t);return t})}import{BaseError as oy}from"make-error";function bn(e){return(t,o)=>{let r,n=o?.timeout??t.timeout;if(!o?.signal&&n){let a=new AbortController;r=a,o={...o,signal:a.signal}}let i=e(t,o??void 0);if(n){let a=setTimeout(()=>{r?.abort()},n);i=i.finally(()=>{clearTimeout(a)})}return i}}function kn(e){let{makeFetch:t,makeRequest:o,baseRequest:r}=e;return{fetchRequestFactory:n=>Pn({makeRequest:o,baseRequest:r,...n}),makeFetch:(n={})=>bu({makeRequest:o,makeFetch:t,baseRequest:r,...n}),makeRequest:e.makeRequest}}var Au=(e,t)=>t(e);function bu(e){let{makeFetch:t=fetch,fetchHandler:o=Au,useTimeout:r,requireOkResponse:n,mapResponse:i}=e,a=t;r&&(a=bn(a)),n&&(a=An(a));let s=Pn(e);return async(c,u)=>{let p=await s(c,u),d=o(p,a);return i&&(d=i(d)),d}}var Iu=(e,t)=>new Request(e,t??void 0);function Pn(e){let{makeRequest:t=Iu,baseUrl:o,baseRequest:r,timeout:n,requestInitFactory:i,useBaseUrlForConfiguredFetchRequests:a=!1,forceBaseUrlForWebsiteUrlWithPrefix:s=a}=e,c=o?new URL(an(o)):void 0,u=c?m=>{let T,g=m.toString();if(!s&&cn(g))T=new URL(g);else{let R=c.origin+nn("/"+c.pathname+"/"+m);T=new URL(R,c)}return T}:void 0;async function p(m){let T=fn(m)?await m:m;return In(T)?T:t(T)}let d=u?async m=>{let T,g,R;if(typeof m=="string"?T=m:In(m)?a?(T=m.url,g=m):R=m:R=await t(m),!R){let Z=u(T);R=await t(Z.href,g)}return R}:p,y;if(r!=null||n!=null){let m=Kr(r);async function T(){let R=await m();return n?{...R,timeout:n}:R}async function g(R,Z){let F=await T(),U=ku(F,await Z),z=U.timeout===void 0?R.timeout:U.timeout;return{...U,timeout:z}}i?y=(R,Z)=>i(R,g(R,Z)):y=(R,Z)=>g(R,Z)}else i?y=i:y=(m,T)=>T;return async(m,T)=>{try{let g=await d(m);T=await y(g,T??void 0);let R=await t(g,T);return R.timeout=n,R}catch(g){throw g instanceof J?g:new J(g)}}}function ku(e,t){let o;if(t){let r=Pu([e.headers,t.headers]);o={...e,...t,headers:r}}else o=e;return o}function Pu(e){let t=Lr();return me(e).forEach(o=>{let r=Eu(o),n=new Set;r.forEach(([i,a])=>{n.has(i)||(t.delete(i),n.add(i)),a&&t.add(i,a)})}),t.tuples()}function Eu(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 In(e){return!!e.url}import{safeParse as Ou}from"fast-content-type-parse";function Pt(e){let t=e.headers.get("content-type"),o=Ou(t??""),r=o.type===""?void 0:o;return{response:e,rawContentType:t,contentType:r,mimeType:r?.type}}function En(e){let{updateWithResponse:t,maxRetries:o}=e,r=o??1,n=e.rateLimiter,i=async(a,s)=>{async function c(u){await n.waitForRateLimit();let p,d;try{p=await s(a.clone())}catch(m){d=m,p=d.response}if(await t(p,d)&&u<r)p=await c(u+1);else if(d!=null)throw d;return p}return c(0)};return i._rateLimiter=n,i}var Ro=class extends J{constructor(o){super("There was no next page for this.");this.page=o}},To=class extends J{constructor(o,r){super(`The limit of ${r} for the number of pages to read was reached.`);this.page=o;this.limit=r}},Du=100;function Ve(e){let{fetch:t,readFetchPageResultInfo:o,buildInputForNextPage:r,defaultMaxPage:n,defaultMaxItemsPerPage:i}=e;return(a,s)=>{let{maxPage:c=n,maxItemsPerPage:u}=s??{},p=u??i,d=c===null?Number.MAX_SAFE_INTEGER:c??Du;function y(T,g=void 0){return async()=>{let R=await t(T),{cursor:Z,nextPageCursor:F,hasNext:U}=await o(R),z=Z??g?.cursor,b=U!==!1,v=g?g.page+1:Zn,V=v>=d,j={input:T,result:R,page:v,previous:g,hasNext:b,isAtMaxPage:V,cursor:z,nextPageCursor:F,fetchNext:ct(async()=>{if(V)throw new To(j,d);let Rr=b?await r(j,T,{maxPage:d,maxItemsPerPage:p}):void 0;if(!Rr)throw new Ro(j);return y({...T,...Rr},j)()})};return j}}return{input:a,fetchNext:ct(()=>y(a)())}}}function f(e,t){let{omitKeys:o,filterEmptyValues:r}=t??{},n=Array.isArray(e)?qr(e):e,i=r??!0?Jr(n??{}):n,a=new URLSearchParams(i);return o!=null&&q(o,s=>a.delete(s),!1),a}function Co(e){let t;if(typeof e=="string")t=e;else if(Mu(e))t=e.href;else{let o=Co(e.url);if(e.queryParams){let r=Nu(e.queryParams);st(r)?t=o:t=un(o+`?${r.toString()}`)}else t=o}return t}function Mu(e){return typeof e=="object"&&e instanceof URL}function _u(e){return typeof e=="object"&&e instanceof URLSearchParams}function vu(e){let t=[];return io(e,o=>{let[r,n]=o;if(r!=null&&n!=null){let i=String(r);q(n,a=>{a!=null&&t.push([i,String(a)])})}}),t}function Nu(e){let t;return _u(e)?t=e:typeof e=="string"?t=new URLSearchParams(e):we(e)?t=new URLSearchParams(vu(e)):t=wu(e),t}function wu(e){let t=[];return Br(e,{forEach:o=>{let[r,n]=o,i=String(r);n!=null&&q(n,a=>{t.push([i,String(a)])})}}),new URLSearchParams(t)}var xo=class extends Error{constructor(o){super("Failed to parse the JSON body.");this.response=o}};function Uu(e){return e==null?void 0:typeof e=="string"?e:JSON.stringify(e)}var Lu=e=>{throw new xo(e)},Y=e=>null;function Q(e,t){let o;typeof t=="function"?o={handleFetchJsonParseErrorFunction:t}:o=t??{},o={...o,handleFetchJsonParseErrorFunction:o.handleFetchJsonParseErrorFunction??Lu};let{handleFetchJsonParseErrorFunction:r,interceptJsonResponse:n}=o,i=On(o);return(a,s,c)=>{let u=Co(a),p=i(s,c),d=typeof s=="object"?s.interceptResponse:void 0;return e(u,p).then(m=>{let T=m.json().catch(r),g=n?T.then(R=>n(R,m)):T;return d?g.then(R=>d(R,m)):g})}}function On(e={}){let{defaultMethod:t="GET",mapFetchJsonInput:o=Nr()}=e;return(r=t,n)=>{let i;return typeof r=="string"?i={method:r,body:n}:i=r??{method:t,body:n},i=o(i),{...i,method:i.method,body:Uu(i.body)}}}var xy=On();var ee=kn({makeFetch:fetch,makeRequest:(e,t)=>new Request(e,t)});function Dn(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 Et(e,t=Cr){return async o=>{try{await e(o)}catch(r){kr(r),process.exit(t)}}}var Gu=["raw","page_by_line","data_by_line"],Ku=["replace","concat"],Vu=["meta","pages","merged_page"];function Zo(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:Vu,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:Gu,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:Ku,default:"replace",describe:"Across pages with multiple-pages > 1: replace (truncate file each iteration; only last page survives) or concat (append)."})}import{createParamDecorator as Hu}from"@nestjs/common";var Yy=Hu((e,t)=>zu(t));function zu(e){let o=e.switchToHttp().getRequest().headers.origin??"";return o.startsWith("http://localhost")||o.startsWith("https://localhost")}import{createParamDecorator as Fo,BadRequestException as ju,InternalServerErrorException as Wu,Logger as Bu}from"@nestjs/common";import qu from"raw-body";import{parse as Ju}from"node:querystring";var Mn=new Bu("RawBody"),rg=Fo(async(e,t)=>{let o=t.switchToHttp().getRequest();if(!o.readable)throw Mn.error("RawBody request was not readable. This is generally due to bad configuration."),new ju("Invalid body");return qu(o)}),_n=Fo(async(e,t)=>{let r=t.switchToHttp().getRequest().body;if(!Buffer.isBuffer(r))throw Mn.error("RawBody expected a buffer set to req.body."),new Wu("failed parsing body");return r}),ng=Fo(async(e,t)=>{let o=t.switchToHttp().getRequest();return o.body=$u(o.body),o.body});function $u(e){let t=Xu(e);return Ju(t)}function Xu(e){return e.toString("utf8").trim()}import{Injectable as Yu}from"@nestjs/common";import Qu from"body-parser";var He=class{use(t,o,r){Qu.json()(t,o,r)}};He=A([Yu()],He);import{Injectable as ep}from"@nestjs/common";import tp from"body-parser";var ze=class{use(t,o,r){tp.raw({type:"*/*"})(t,o,r)}};ze=A([ep()],ze);import{Logger as op,Module as rp,RequestMethod as np}from"@nestjs/common";var ip="/webhook",ap={path:`${ip}/{*path}`,method:np.POST},So=class{configure(t){sp(t)}},Ot=class extends So{logger=new op("ConfigureWebhookMiddlewareModule");configure(t){super.configure(t),this.logger.debug("Configured webhook routes with proper middleware.")}};Ot=A([rp({})],Ot);function sp(e){e.apply(ze).forRoutes(ap).apply(He).forRoutes("{*path}")}var vn="CLIENT_WEB_APP_URL";var Ie=class{client;static assertValidConfig(t){if(!t.client.clientWebAppUrl)throw new Error("No client app url specified.")}};import{Inject as cp,Injectable as up}from"@nestjs/common";var ke=class{_config;constructor(t){this._config=t}get config(){return this._config}get webAppUrl(){return this.config.client.clientWebAppUrl}get webAppHost(){return this.webAppUrl.split("://",2)[1]}};ke=A([up(),k(0,cp(Ie))],ke);import{Module as pp}from"@nestjs/common";import{ConfigModule as dp,ConfigService as lp}from"@nestjs/config";function hp(e){let t={client:{clientWebAppUrl:e.get(vn)}};return Ie.assertValidConfig(t),t}var Dt=class{};Dt=A([pp({imports:[dp],providers:[{provide:Ie,inject:[lp],useFactory:hp},ke],exports:[ke]})],Dt);var Nn="SERVER_ENV_TOKEN";import{Inject as mp,Injectable as yp}from"@nestjs/common";function wn(){return process.env.NODE_ENV==="test"}var Mt=class{constructor(t){this.env=t}get isTestingEnv(){return wn()}get isProduction(){return this.env.production}get isStaging(){return!!this.env.staging}get developerToolsEnabled(){return!!(!this.isProduction&&this.env.developerToolsEnabled)}get appUrl(){return this.env.appUrl}get appApiUrl(){return this.env.appApiUrl}};Mt=A([yp(),k(0,mp(Nn))],Mt);import{dirname as xp}from"node:path";import{chmod as gp,mkdirSync as fp,readFile as Rp,writeFile as Tp}from"node:fs";import{rm as Cp}from"node:fs/promises";function ye(e){return new Promise((t,o)=>{Rp(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 _t(e){return fp(e.dirPath,{recursive:!0}),new Promise((t,o)=>{Tp(e.filePath,JSON.stringify(e.data,null,2),{mode:e.mode},r=>{r?o(r):e.mode==null?t():gp(e.filePath,e.mode,n=>{n?o(n):t()})})})}function ut(e){return Cp(e,{force:!0})}var Zp=384;function Un(e){let{filePath:t,mode:o,reviver:r,replacer:n}=e,i=o??Zp;async function a(){let p=await ye(t),d;if(p==null)d={};else if(r==null)d=p;else{d={};for(let y of Object.keys(p)){let m=r(p[y]);m!=null&&(d[y]=m)}}return d}async function s(p){let d=n==null?p:Object.fromEntries(Object.entries(p).map(([y,m])=>[y,n(m)]));await _t({filePath:t,dirPath:xp(t),data:d,mode:i})}let c=Promise.resolve();function u(p){let d=c.then(p,p);return c=d.catch(()=>{}),d}return{load:a,get:async p=>(await a())[p],set:(p,d)=>u(async()=>{let y=await a();await s({...y,[p]:d})}),remove:p=>u(async()=>{let y={...await a()};delete y[p],await s(y)}),clear:()=>u(async()=>{await ut(t)})}}var Zf=Buffer.from([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function pt(e){return ye(e.configFilePath)}function Fp(e){return _t({filePath:e.configFilePath,dirPath:e.configDir,data:e.config})}async function dt(e){let t=await pt({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:Ao(t.output,e.updates.output)};return await Fp({configFilePath:e.configFilePath,configDir:e.configDir,config:o}),o}function Ao(e,t){return{dumpDir:"dumpDir"in t?t.dumpDir:e?.dumpDir,pick:"pick"in t?t.pick:e?.pick,commands:Sp(e?.commands,t)}}function Sp(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 Ln(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 ge(e){let t;return e==null?t=e:e.length<=4?t="***":t=e.substring(0,4)+"***",t}import{homedir as Ap}from"node:os";import{join as bo}from"node:path";function vt(e){let t=e.configDirOverride??bo(Ap(),`.${e.cliName}`);return{configDir:t,configFilePath:bo(t,"config.json"),tokenCachePath:bo(t,".tokens.json")}}function Gn(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await pt({configFilePath:t.configFilePath}))?.output),r=e.saveCommandOutputConfig??(async(n,i)=>{await dt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:{commands:{[n]:i}}}})});return async n=>{Fr(!!n.verbose),Sr(typeof n.timeout=="number"?n.timeout*1e3:void 0);let i=n._?n._.map(String):[],a=i[0],s=n.setDumpDir,c=n.setPick;if((s!==void 0||c!==void 0)&&a&&!e.skipCommands.has(a)){let m=i.join("."),T={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await r(m,T)}let p=a&&!e.skipCommands.has(a),d=p?await o():void 0,y=p?Ln({outputConfig:d,commandPath:i,cliFlags:{dumpDir:n.dumpDir??s,pick:n.pick??c}}):{dumpDir:void 0,pick:void 0};oo({dumpDir:y.dumpDir,pick:n.pickAll?void 0:y.pick,commandPath:i,pretty:!!n.pretty})}}function bp(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await pt({configFilePath:t.configFilePath}))?.output),r=e.mergeOutputConfig??(i=>dt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:i}})),n=e.clearOutputConfig??(()=>dt({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 Kn(e){let t=bp(e),o={command:"set",describe:"Configure output settings (global or per-command)",builder:i=>i.option("command",{alias:"c",type:"string",describe:"Command path to configure (e.g. recruit.list)"}).check(a=>{if(a.setDumpDir==null&&a.setPick==null)throw new Error("At least one of --set-dump-dir or --set-pick is required");return!0}),handler:Et(async i=>{let a=i.command,s=i.setDumpDir,c=i.setPick,u;if(a){let d={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};u={commands:{[a]:d}}}else u={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await t.mergeOutputConfig(u);let p=await t.loadOutputConfig();l({saved:!0,output:p??{}})})},r={command:"show",describe:"Show current output configuration",builder:i=>i,handler:Et(async()=>{let i=await t.loadOutputConfig();l({output:i??{}})})},n={command:"clear",describe:"Clear output configuration (global or per-command)",builder:i=>i.option("command",{alias:"c",type:"string",describe:"Command path to clear (omit to clear all output config)"}),handler:Et(async i=>{let a=i.command;if(a){let s=await t.loadOutputConfig();if(!s?.commands?.[a])throw new it({message:`No per-command output config for "${a}".`,code:"OUTPUT_COMMAND_NOT_FOUND"});let c={...s.commands};delete c[a],await t.mergeOutputConfig({...s,commands:c}),l({cleared:!0,command:a})}else await t.clearOutputConfig(),l({cleared:!0})})};return{command:"output",describe:"Configure output settings (dump, field filtering)",builder:i=>i.command(o).command(r).command(n).demandCommand(1,"Specify an output subcommand."),handler:S}}import{writeFileSync as Ip,appendFileSync as kp}from"node:fs";function Vn(e){let{dumpOutput:t,dumpMerge:o}=e,{pick:r}=At(),n=t==="raw"?"json":"ndjson",i=at(n),a=r?at(n,"pick"):void 0,s;if(i){let c=0,u=g=>{let R;if(r){let Z=Ae(g.data,r);R={...g,data:Z}}else R=g;return R},p=g=>{let R=g.append?kp:Ip;R(i,g.mainContent),a&&g.pickContent!==void 0&&R(a,g.pickContent)},d=(g,R)=>{let Z=JSON.stringify(g,null,2),F=a?JSON.stringify(u(g),null,2):void 0;p({mainContent:Z,pickContent:F,append:R})},y=(g,R)=>{let Z=JSON.stringify(g)+`
4
+ var xc=Object.defineProperty;var Zc=Object.getOwnPropertyDescriptor;var A=(e,t,o,r)=>{for(var n=r>1?void 0:r?Zc(t,o):t,i=e.length-1,a;i>=0;i--)(a=e[i])&&(n=(r?a(t,o,n):a(n))||n);return r&&n&&xc(t,o,n),n},k=(e,t)=>(o,r)=>t(o,r,e);import{existsSync as Fc,mkdirSync as Sc,writeFileSync as Ac}from"node:fs";import{join as bc}from"node:path";var Cr=1;var to=[/Bearer\s+\S+/gi,/access_token[=:]\s*\S+/gi,/refresh_token[=:]\s*\S+/gi,/client_secret[=:]\s*\S+/gi,/id_token[=:]\s*\S+/gi],xr=6e4,Ne={},Zr=[...to],eo,Ic=!1,kc=xr;function oo(e){Ne=e}function At(){return Ne}function Fr(e){Ic=e}function Sr(e){kc=e===void 0?xr:e}function ro(e){Zr=e}function Ar(e){eo=e}function de(e){let t=e;for(let o of Zr)t=t.replace(o,"[REDACTED]");return t}function br(){return new Date().toISOString().replaceAll(/[:.]/g,"-")}function at(e,t){let{dumpDir:o,commandPath:r}=Ne,n;if(o){Fc(o)||Sc(o,{recursive:!0});let i=r?.length?r.join("_"):"response",a=br(),s=t?`${i}_${a}_${t}`:`${i}_${a}`;n=bc(o,`${s}.${e}`)}else n=void 0;return n}function Pc(e,t){let o=at("json");if(!o)return;let r={ok:!0,data:e,...t?{meta:t}:{}};Ac(o,JSON.stringify(r,null,2))}function Ae(e,t){let o=t.split(",").map(n=>n.trim()),r;return Array.isArray(e)?r=e.map(n=>Tr(n,o)):e!=null&&typeof e=="object"?r=Tr(e,o):r=e,r}function Tr(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 Ir(e){return Ne.pretty?JSON.stringify(e,null,2):JSON.stringify(e)}function l(e,t){Pc(e,t);let r={ok:!0,data:Ne.pick?Ae(e,Ne.pick):e,...t?{meta:t}:{}};console.log(Ir(r))}function kr(e){console.log(Ir(no(e)))}var it=class extends Error{code;suggestion;constructor(t){super(t.message),this.name="CliError",this.code=t.code,this.suggestion=t.suggestion}};function no(e){let t=eo?eo(e):void 0,o;return t?o=t:e instanceof it?o={ok:!1,error:de(e.message),code:e.code,...e.suggestion?{suggestion:e.suggestion}:{}}:e instanceof Error?o={ok:!1,error:de(e.message),code:"ERROR"}:o={ok:!1,error:de(String(e)),code:"UNKNOWN_ERROR"},o}function we(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 st(e){let t=!0;for(let o of e){t=!1;break}return t}function io(e,t){for(let o of e)t(o)}function q(e,t,o=!1){e!=null&&(we(e,o)?io(e,t):t(e))}function Pr(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(a=>Array.isArray(a)?a.length!==n:!0)!==-1}else r=!0;t=r?[e]:e}else t=e;return t}function Ec(e){return e==null?[]:Oc(e)}var C=Ec;function Oc(e){return Array.isArray(e)?e:[e]}function Er(e,t=!0){return t?((...o)=>!e.call(void 0,...o)):e}function ao(e){return Object.keys(e).length===0}function Or(e){let t={};return e.forEach((o,r)=>{t[r]=o}),t}function Dr(e){return{...e}}function Mr(e){return e!=null}function bt(e){return we(e,!1)?!st(e):_r(e)}function so(e){let t;return we(e,!0)?t=!st(e):_r(e)?t=typeof e=="object"?!ao(e):!0:t=!1,t}function _r(e){return e!=null&&e!==""}function Dc(e){return t=>{let o;return t==null?o=[]:o=t.filter((r,n,i)=>e(r,n,i)),o}}var me=Dc(Mr);function vr({base:e,build:t}){let o=e??{};return t(o),o}var Mc=(e=>e);function Nr(){return Mc}function Ue(e,t){let o=_c(e,r=>t(r)?"in":"out");return{included:o.in??[],excluded:o.out??[]}}function _c(e,t){return Or(vc(e,t))}function vc(e,t){let o=new Map;return e?.forEach(r=>{let n=t(r),i=o.get(n);i==null?o.set(n,[r]):i.push(r)}),o}function wr(e,t,o){return C(t).forEach(r=>e.set(r,o)),e}function co(e){return Array.from(e.entries())}function Ur(e){return Nc(co(e))}function Nc(e){let t=[];return e.forEach(([o,r])=>{q(r,n=>{t.push([o,n])})}),t}function Lr(){let e=new Map,t=(n,i)=>{let a=e.get(n);a==null&&(a=[],e.set(n,a)),q(i,s=>a.push(s))},o=(n,i)=>t(n,Pr(i));return{map:()=>e,entries:()=>co(e),tuples:()=>Ur(e),delete:n=>e.delete(n),add:t,addTuples:o,addToKeys:(n,i)=>q(n,a=>t(a,i)),addTuplesToKeys:(n,i)=>q(n,a=>o(a,i)),has:n=>e.has(n),get:n=>e.get(n)??[]}}function wc(e){return typeof e=="function"?e.prototype?Object.getOwnPropertyDescriptor(e,"prototype")?.writable?"function":"class":e.constructor.name==="AsyncFunction"?"function":"arrow":null}function Gr(e){let t=wc(e);return t!=null&&t!=="class"}function Kr(e){return Gr(e)?e:()=>e}function Vr(e,t){return Math.log(t)/Math.log(e)}var Hr=",",Uc=" ";function Lc(e,t=Hr,o=!1){if(e==null)return e;let r=C(e);return o&&(r=r.map(n=>n?.trim())),r.filter(Boolean).join(t)}function uo(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),i=[];if(n.length>1){let a=n.length>o,s=a?o-1:n.length;for(let c=0;c<s;c+=1)i.push(n[c]);a&&i.push(n.slice(s).join(t))}else i.push(n[0]);r=i;break}}return r}function Gc(e){let{joiner:t,trimByDefault:o=!1}=e,r=function(n,i=o){return Lc(n,t,i)};return r.joiner=t,r.trimByDefault=o,r}function zr(e){let{joiner:t}=e,o=Gc(e),r=(n,i=a=>a)=>n.split(t).map(s=>i(s.trim()));return{joiner:t,trimByDefault:o.trimByDefault,joinStrings:o,splitStrings:r,splitStringsToSet(n){return new Set(n==null?[]:r(n))},splitJoinRemainder(n,i){return uo(n,t,i)}}}var po=zr({joiner:Hr}),Kc=zr({joiner:Uc,trimByDefault:!0});var P=po.joinStrings,Xh=po.splitStrings,Yh=po.splitStringsToSet,Qh=Kc.joinStrings;var jr=Er;function Br(e,{forEach:t,filter:o}){Vc(e,o).forEach((n,i)=>t(n,i))}function Vc(e,t){return lo(t)(e)}function lo(e){let t;if(e==null)t=Wr;else{let o=Hc(e);t=r=>Wr(r).filter((n,i)=>o(n,i))}return t}function Wr(e){return Object.entries(e)}function ho(e){return typeof e=="object"?e:{valueFilter:e}}function Hc(e){let t=ho(e),{valueFilter:o=1,invertFilter:r=!1,keysFilter:n}=t,i;switch(o){case 1:i=([,a])=>a!==void 0;break;case 2:i=([,a])=>a!=null;break;case 3:i=([,a])=>!!a;break;case 4:i=([,a])=>bt(a);break;case 5:i=([,a])=>so(a);break;case 6:i=([,a])=>!!a&&bt(a);break;case 7:i=([,a])=>!!a&&so(a);break;default:i=()=>!0;break}if(n){let a=i,s=new Set(n.map(c=>c.toString()));i=(c,u)=>a(c,u)&&s.has(c[0])}return jr(i,r)}function ct(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 qr(e){let t;return e==null||$c(e)?t=e:t=zc(e),t}function zc(e){return e==null?e:new Date(e)}var Jr=24,jc=60;var Wc=60,Bc=Wc*jc,L=1e3,be=L*60,mo=be*60,qc=mo*Jr,sm=Bc*Jr,Jc=7,cm=qc*Jc;function $c(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function $r(e){return e.getTime()<Date.now()}function Xr(e,t){return e==null?e:new Date(e.getTime()+(t??0))}function Xc(e){let{expiresAt:t,expires:o,now:r,expiresFromDate:n,defaultExpiresFromDateToNow:i,expiresIn:a}=e,s=n==null?null:qr(n);function c(y){return y??r??new Date}function u(y,m=!1){let T=c(y),g=d(T),R;return g==null?R=m:R=g<=T,R}function p(y){let m=c(y);return d(m)}function d(y){let m=null;return o!=null?m=o.expiresAt??null:t!=null?m=t:a!=null&&(m=Xr(s??(i===!1?null:y),a)),m}return{input:e,hasExpired:u,getExpirationDate:p}}function Yr(e,t){let o=!0;return e!=null&&(o=Xc(e).hasExpired(t,!0)),o}function Yc({filter:e,copy:t,dynamic:o=!1}){let r=e==null?eu:Le({filter:e,copy:!1});return n=>{let i=()=>{let s={};return n.forEach(c=>{let u=r({...c});Object.assign(s,u)}),s},a=o?i:ct(i);return s=>{let c=a();return t&&(s=Dr(s)),Object.assign(s,c),s}}}function Qr(e,t){return Qc(t)(e)}function Qc(e){let t=Yc({filter:e,copy:!1,dynamic:!0});return o=>t(me(o))({})}var fm=Le({copy:!0,filter:{valueFilter:1}}),Rm=Le({copy:!0,filter:{valueFilter:2}}),en=Le({copy:!0,filter:{valueFilter:4}}),Tm=Le({copy:!0,filter:{valueFilter:6}}),Cm=yo({valueFilter:1}),xm=yo({valueFilter:6}),Zm=yo({valueFilter:2});function yo(e){let t=tn({filter:e,forEach:([o],r,n,i)=>{i.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=ho(t);o.invertFilter=!o.invertFilter;let r=tn({filter:o,forEach:([n],i,a)=>{delete a[n]}});return(n,i)=>((typeof i=="boolean"?i:e)&&(n={...n}),r(n),n)}var eu=Le({copy:!1});function tn({forEach:e,filter:t}){let o=lo(t);return((r,n)=>{o(r).forEach((a,s)=>e(a,s,r,n))})}function on(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 rn(e){let t,o,r=0;function n(){let i;if(t==null){if(o==null){let a=r;o=e.load().then(s=>(r===a&&(t={entries:s},o=void 0),s),s=>{throw r===a&&(o=void 0),s})}i=o}else i=Promise.resolve(t.entries);return i}return{load:async()=>({...await n()}),get:async i=>(await n())[i],set:async(i,a)=>{let s=await n();r+=1,o=void 0,await e.set(i,a),t={entries:{...s,[i]:a}}},remove:async i=>{let a=await n();r+=1,o=void 0,await e.remove(i);let s={...a};delete s[i],t={entries:s}},clear:async()=>{r+=1,o=void 0,await e.clear(),t={entries:{}}}}}function nn(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 It(e,t,o){let[r,n]=go(e,t,!1);return r+o+n}function go(e,t,o=!1){let r=e.substring(0,t),n=e.substring(t+(o?0:1));return[r,n]}var tu=["\\","^","$",".","|","?","*","+","(",")","[","]","{","}"],Pm=new Set(tu);function an(e){let{escapeTargets:t,escapeCharacter:o}=e,r=t instanceof Set?t:new Set(t);return n=>{let i=kt(r,n),a;switch(i.length){case 0:a=n;break;case 1:{let s=n[i[0]];a=It(n,i[0],o(s));break}default:{let s=[],c=i.length,u=0,p=0;for(let d=0;d<c;d+=1){p=i[d];let y=n[p],T=n.substring(u,p)+o(y);s.push(T),u=p+1}s.push(n.substring(u)),a=s.join("");break}}return a}}function ou(e){return(t,o)=>{let r=o??Number.MAX_SAFE_INTEGER,n=[];for(let[i,a]of[...t].entries())if(e.has(a)&&(n.push(i),n.length>=r))break;return n}}function kt(e,t,o){return ou(e)(t,o)}function ru(e,t){return kt(e,t,1)[0]}function nu(e){return t=>{let r=ru(typeof e=="string"?new Set([e]):e,t),n;return r==null?n=[t,void 0]:n=go(t,r,!1),n}}function sn(e,t){return nu(t)(e)}var Ge="/",iu=".";function au(e){let t=e.split(iu,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 cn(e){return au(e)!=="invalid"}var su=/^\/+/,cu=/\/+$/;var uu=/\/{2,}/g;function un(e){return e.startsWith(Ge)?e.replace(su,Ge):`${Ge}${e}`}function pn(e){return e.replaceAll(uu,Ge)}function dn(e){return e.replace(cu,"")}function pu(e){let t=e.indexOf(".");return t>0&&t<e.length-1}var ln=/:(\d+)/;function du(e){return ln.test(e)}function lu(e){let t=ln.exec(e);return t?Number(t[1]):void 0}function hu(e){let t=gn(e),o=mu(t),{domain:r,path:n}=o,i=pu(r),a=du(e),s=a?lu(e)??void 0:void 0,[c,u]=sn(o.path,"?"),p=i&&(c===""||cn(c+"/")),d=gu(e);return{input:e,isWebsiteUrl:p,hasWebsiteDomain:i,hasHttpPrefix:d,hasPortNumber:a,portNumber:s,splitPair:o,domain:r,websitePath:n,path:c,query:u}}function hn(e){let t=hu(e);return t.hasHttpPrefix&&t.isWebsiteUrl}function mn(e,t=!1){let o=kt(new Set("?"),e),r,n=e;return t&&o.length?r=o:o.length>1&&(r=o.reverse(),r.pop()),r?.length&&r.forEach(i=>n=It(n,i,"&")),n}function mu(e){let t=gn(e);return yu(t)}function yu(e){let t=uo(e,"/",2),o=t[0],r=t[1];return{domain:o,path:un(r??"/")}}var yn=/^https:\/\/|http:\/\//;function gn(e){return e.replace(yn,"")}function gu(e){return yn.test(e)}function S(){}function fn(e){return!!e&&(typeof e=="object"||typeof e=="function")&&typeof e.then=="function"}async function fo(e,t){return new Promise(o=>setTimeout(()=>o(t),e))}function fu(e){let n=mo,i={startLimitAt:1,cooldownRate:1,exponentRate:2,maxWaitTime:n},a=0,s=Number.MAX_SAFE_INTEGER,c=new Date,u=!0;m(e??i);function p(){return{...i}}function d(){return u}function y(F){u=F}function m(F,U=!1){let z=Math.max(0,F.startLimitAt??1),b=F.cooldownRate??1,v=F.maxWaitTime??n,V=F.exponentRate??2;i={startLimitAt:z,cooldownRate:b,maxWaitTime:v,exponentRate:V},s=Vr(V,v/L+1),U&&T()}function T(){a=0,c=new Date}function g(F){let U;if(u){let{cooldownRate:z}=i,v=(Date.now()-c.getTime())*z/L,V=Math.max(a-v,0),j=Math.max(0,V-i.startLimitAt);F&&(a=V+F,c=new Date),U=j>=s?i.maxWaitTime:(Math.pow(i.exponentRate,Math.max(j,0))-1)*L}else U=0;return U}function R(F){return g(F??0)}function Z(){let F=g(1);return fo(F)}return{waitForRateLimit:Z,getNextWaitTime:R,getConfig:p,setConfig:m,getEnabled:d,setEnabled:y,reset:T}}function Rn(e){let o=fu({exponentRate:1.5,maxWaitTime:L*8,...e}),r=be,n=new Date,i=0,a=0,s=!0;Z(e,!0);function c(){$r(n)&&d()}function u(){return s}function p(b){s=b}function d(){a=i,n=new Date(Date.now()+r)}function y(){return n}function m(){return Math.max(0,n.getTime()-Date.now())}function T(b){n=b}function g(){return c(),a}function R(b){a=b}function Z(b,v=!1){i=b.limit??i,r=b.resetPeriod??r;let V={cooldownRate:b.cooldownRate??Math.max(.1,r/L),exponentRate:b.exponentRate??1.5,maxWaitTime:b.maxWaitTime??L*8};o.setConfig(V,v),v&&d(),n=b.resetAt??n}function F(b){let v=0;if(s){let j=function(){return a-=b,o.getNextWaitTime(b)};var V=j;a>0?v=j():(c(),a>0?v=j():v=m())}return v}function U(b){return F(b??0)}function z(){let b=F(1);return fo(b)}return{getRemainingLimit:g,setRemainingLimit:R,getTimeUntilNextReset:m,getResetAt:y,setNextResetAt:T,setConfig:Z,reset:d,getNextWaitTime:U,waitForRateLimit:z,getEnabled:u,setEnabled:p}}var Ru="__CATCH_ALL_HANDLE_RESULT_KEY__";function Tn(e,t){let o=t?.defaultResult??!0,r=t?.negativeResult??!1;return()=>{let n,i=new Map,a=u=>{n=u},s=(u,p)=>{u===Ru?a(p):wr(i,u,p)},c=(u,p,d)=>{let y=d.bind(u);s(p,y)};return vr({base:(u=>{let p=e(u),d=(p==null?void 0:i.get(p))??n,y;return d?y=Promise.resolve(d(u)).then(m=>m??o):y=Promise.resolve(r),y}),build:u=>{u.readKey=e,u.set=s,u.bindSet=c,u.setCatchAll=a}})}}function Tu(e,t){return{accessor:t,boundTo:e,set:(o,r)=>{t.bindSet(e,o,r)},setCatchAll:o=>{t.setCatchAll(o)}}}function Cu(e,t){let o=r=>{e.set(t,r)};return o.key=t,o}function xu(e,t,o){let r=Cu(e,t);return n=>{r(function(i){let a=o(i);return n.call(this,a)})}}function Cn(e,t){return o=>xu(e,o,t)}function xn(e){return t=>(o,r)=>{let n=Tu(o,t),i=e.configurerForAccessor(n);r(i)}}var Zu=-1,Zn=0;function Fu(e){return e?.page??Zu}function Fn(e){return Fu(e)+1}import{BaseError as Sn}from"make-error";var J=class extends Sn{constructor(o){super(`Fetch request failed to build due to an unexpected error: ${typeof o=="object"?o.message:o}`);this.error=o}};function An(e){return(t,o)=>Su(e(t,o))}var Ke=class extends Sn{constructor(o){super(`Fetch response was a non-ok status code (${o.status}): ${o.statusText}`);this.response=o}};function Su(e){return e.then(t=>{if(!t.ok)throw new Ke(t);return t})}import{BaseError as oy}from"make-error";function bn(e){return(t,o)=>{let r,n=o?.timeout??t.timeout;if(!o?.signal&&n){let a=new AbortController;r=a,o={...o,signal:a.signal}}let i=e(t,o??void 0);if(n){let a=setTimeout(()=>{r?.abort()},n);i=i.finally(()=>{clearTimeout(a)})}return i}}function kn(e){let{makeFetch:t,makeRequest:o,baseRequest:r}=e;return{fetchRequestFactory:n=>Pn({makeRequest:o,baseRequest:r,...n}),makeFetch:(n={})=>bu({makeRequest:o,makeFetch:t,baseRequest:r,...n}),makeRequest:e.makeRequest}}var Au=(e,t)=>t(e);function bu(e){let{makeFetch:t=fetch,fetchHandler:o=Au,useTimeout:r,requireOkResponse:n,mapResponse:i}=e,a=t;r&&(a=bn(a)),n&&(a=An(a));let s=Pn(e);return async(c,u)=>{let p=await s(c,u),d=o(p,a);return i&&(d=i(d)),d}}var Iu=(e,t)=>new Request(e,t??void 0);function Pn(e){let{makeRequest:t=Iu,baseUrl:o,baseRequest:r,timeout:n,requestInitFactory:i,useBaseUrlForConfiguredFetchRequests:a=!1,forceBaseUrlForWebsiteUrlWithPrefix:s=a}=e,c=o?new URL(dn(o)):void 0,u=c?m=>{let T,g=m.toString();if(!s&&hn(g))T=new URL(g);else{let R=c.origin+pn("/"+c.pathname+"/"+m);T=new URL(R,c)}return T}:void 0;async function p(m){let T=fn(m)?await m:m;return In(T)?T:t(T)}let d=u?async m=>{let T,g,R;if(typeof m=="string"?T=m:In(m)?a?(T=m.url,g=m):R=m:R=await t(m),!R){let Z=u(T);R=await t(Z.href,g)}return R}:p,y;if(r!=null||n!=null){let m=Kr(r);async function T(){let R=await m();return n?{...R,timeout:n}:R}async function g(R,Z){let F=await T(),U=ku(F,await Z),z=U.timeout===void 0?R.timeout:U.timeout;return{...U,timeout:z}}i?y=(R,Z)=>i(R,g(R,Z)):y=(R,Z)=>g(R,Z)}else i?y=i:y=(m,T)=>T;return async(m,T)=>{try{let g=await d(m);T=await y(g,T??void 0);let R=await t(g,T);return R.timeout=n,R}catch(g){throw g instanceof J?g:new J(g)}}}function ku(e,t){let o;if(t){let r=Pu([e.headers,t.headers]);o={...e,...t,headers:r}}else o=e;return o}function Pu(e){let t=Lr();return me(e).forEach(o=>{let r=Eu(o),n=new Set;r.forEach(([i,a])=>{n.has(i)||(t.delete(i),n.add(i)),a&&t.add(i,a)})}),t.tuples()}function Eu(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 In(e){return!!e.url}import{safeParse as Ou}from"fast-content-type-parse";function Pt(e){let t=e.headers.get("content-type"),o=Ou(t??""),r=o.type===""?void 0:o;return{response:e,rawContentType:t,contentType:r,mimeType:r?.type}}function En(e){let{updateWithResponse:t,maxRetries:o}=e,r=o??1,n=e.rateLimiter,i=async(a,s)=>{async function c(u){await n.waitForRateLimit();let p,d;try{p=await s(a.clone())}catch(m){d=m,p=d.response}if(await t(p,d)&&u<r)p=await c(u+1);else if(d!=null)throw d;return p}return c(0)};return i._rateLimiter=n,i}var Ro=class extends J{constructor(o){super("There was no next page for this.");this.page=o}},To=class extends J{constructor(o,r){super(`The limit of ${r} for the number of pages to read was reached.`);this.page=o;this.limit=r}},Du=100;function Ve(e){let{fetch:t,readFetchPageResultInfo:o,buildInputForNextPage:r,defaultMaxPage:n,defaultMaxItemsPerPage:i}=e;return(a,s)=>{let{maxPage:c=n,maxItemsPerPage:u}=s??{},p=u??i,d=c===null?Number.MAX_SAFE_INTEGER:c??Du;function y(T,g=void 0){return async()=>{let R=await t(T),{cursor:Z,nextPageCursor:F,hasNext:U}=await o(R),z=Z??g?.cursor,b=U!==!1,v=g?g.page+1:Zn,V=v>=d,j={input:T,result:R,page:v,previous:g,hasNext:b,isAtMaxPage:V,cursor:z,nextPageCursor:F,fetchNext:ct(async()=>{if(V)throw new To(j,d);let Rr=b?await r(j,T,{maxPage:d,maxItemsPerPage:p}):void 0;if(!Rr)throw new Ro(j);return y({...T,...Rr},j)()})};return j}}return{input:a,fetchNext:ct(()=>y(a)())}}}function f(e,t){let{omitKeys:o,filterEmptyValues:r}=t??{},n=Array.isArray(e)?Qr(e):e,i=r??!0?en(n??{}):n,a=new URLSearchParams(i);return o!=null&&q(o,s=>a.delete(s),!1),a}function Co(e){let t;if(typeof e=="string")t=e;else if(Mu(e))t=e.href;else{let o=Co(e.url);if(e.queryParams){let r=Nu(e.queryParams);st(r)?t=o:t=mn(o+`?${r.toString()}`)}else t=o}return t}function Mu(e){return typeof e=="object"&&e instanceof URL}function _u(e){return typeof e=="object"&&e instanceof URLSearchParams}function vu(e){let t=[];return io(e,o=>{let[r,n]=o;if(r!=null&&n!=null){let i=String(r);q(n,a=>{a!=null&&t.push([i,String(a)])})}}),t}function Nu(e){let t;return _u(e)?t=e:typeof e=="string"?t=new URLSearchParams(e):we(e)?t=new URLSearchParams(vu(e)):t=wu(e),t}function wu(e){let t=[];return Br(e,{forEach:o=>{let[r,n]=o,i=String(r);n!=null&&q(n,a=>{t.push([i,String(a)])})}}),new URLSearchParams(t)}var xo=class extends Error{constructor(o){super("Failed to parse the JSON body.");this.response=o}};function Uu(e){return e==null?void 0:typeof e=="string"?e:JSON.stringify(e)}var Lu=e=>{throw new xo(e)},Y=e=>null;function Q(e,t){let o;typeof t=="function"?o={handleFetchJsonParseErrorFunction:t}:o=t??{},o={...o,handleFetchJsonParseErrorFunction:o.handleFetchJsonParseErrorFunction??Lu};let{handleFetchJsonParseErrorFunction:r,interceptJsonResponse:n}=o,i=On(o);return(a,s,c)=>{let u=Co(a),p=i(s,c),d=typeof s=="object"?s.interceptResponse:void 0;return e(u,p).then(m=>{let T=m.json().catch(r),g=n?T.then(R=>n(R,m)):T;return d?g.then(R=>d(R,m)):g})}}function On(e={}){let{defaultMethod:t="GET",mapFetchJsonInput:o=Nr()}=e;return(r=t,n)=>{let i;return typeof r=="string"?i={method:r,body:n}:i=r??{method:t,body:n},i=o(i),{...i,method:i.method,body:Uu(i.body)}}}var xy=On();var ee=kn({makeFetch:fetch,makeRequest:(e,t)=>new Request(e,t)});function Dn(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 Et(e,t=Cr){return async o=>{try{await e(o)}catch(r){kr(r),process.exit(t)}}}var Gu=["raw","page_by_line","data_by_line"],Ku=["replace","concat"],Vu=["meta","pages","merged_page"];function Zo(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:Vu,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:Gu,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:Ku,default:"replace",describe:"Across pages with multiple-pages > 1: replace (truncate file each iteration; only last page survives) or concat (append)."})}import{createParamDecorator as Hu}from"@nestjs/common";var Yy=Hu((e,t)=>zu(t));function zu(e){let o=e.switchToHttp().getRequest().headers.origin??"";return o.startsWith("http://localhost")||o.startsWith("https://localhost")}import{createParamDecorator as Fo,BadRequestException as ju,InternalServerErrorException as Wu,Logger as Bu}from"@nestjs/common";import qu from"raw-body";import{parse as Ju}from"node:querystring";var Mn=new Bu("RawBody"),rg=Fo(async(e,t)=>{let o=t.switchToHttp().getRequest();if(!o.readable)throw Mn.error("RawBody request was not readable. This is generally due to bad configuration."),new ju("Invalid body");return qu(o)}),_n=Fo(async(e,t)=>{let r=t.switchToHttp().getRequest().body;if(!Buffer.isBuffer(r))throw Mn.error("RawBody expected a buffer set to req.body."),new Wu("failed parsing body");return r}),ng=Fo(async(e,t)=>{let o=t.switchToHttp().getRequest();return o.body=$u(o.body),o.body});function $u(e){let t=Xu(e);return Ju(t)}function Xu(e){return e.toString("utf8").trim()}import{Injectable as Yu}from"@nestjs/common";import Qu from"body-parser";var He=class{use(t,o,r){Qu.json()(t,o,r)}};He=A([Yu()],He);import{Injectable as ep}from"@nestjs/common";import tp from"body-parser";var ze=class{use(t,o,r){tp.raw({type:"*/*"})(t,o,r)}};ze=A([ep()],ze);import{Logger as op,Module as rp,RequestMethod as np}from"@nestjs/common";var ip="/webhook",ap={path:`${ip}/{*path}`,method:np.POST},So=class{configure(t){sp(t)}},Ot=class extends So{logger=new op("ConfigureWebhookMiddlewareModule");configure(t){super.configure(t),this.logger.debug("Configured webhook routes with proper middleware.")}};Ot=A([rp({})],Ot);function sp(e){e.apply(ze).forRoutes(ap).apply(He).forRoutes("{*path}")}var vn="CLIENT_WEB_APP_URL";var Ie=class{client;static assertValidConfig(t){if(!t.client.clientWebAppUrl)throw new Error("No client app url specified.")}};import{Inject as cp,Injectable as up}from"@nestjs/common";var ke=class{_config;constructor(t){this._config=t}get config(){return this._config}get webAppUrl(){return this.config.client.clientWebAppUrl}get webAppHost(){return this.webAppUrl.split("://",2)[1]}};ke=A([up(),k(0,cp(Ie))],ke);import{Module as pp}from"@nestjs/common";import{ConfigModule as dp,ConfigService as lp}from"@nestjs/config";function hp(e){let t={client:{clientWebAppUrl:e.get(vn)}};return Ie.assertValidConfig(t),t}var Dt=class{};Dt=A([pp({imports:[dp],providers:[{provide:Ie,inject:[lp],useFactory:hp},ke],exports:[ke]})],Dt);var Nn="SERVER_ENV_TOKEN";import{Inject as mp,Injectable as yp}from"@nestjs/common";function wn(){return process.env.NODE_ENV==="test"}var Mt=class{constructor(t){this.env=t}get isTestingEnv(){return wn()}get isProduction(){return this.env.production}get isStaging(){return!!this.env.staging}get developerToolsEnabled(){return!!(!this.isProduction&&this.env.developerToolsEnabled)}get appUrl(){return this.env.appUrl}get appApiUrl(){return this.env.appApiUrl}};Mt=A([yp(),k(0,mp(Nn))],Mt);import{dirname as xp}from"node:path";import{chmod as gp,mkdirSync as fp,readFile as Rp,writeFile as Tp}from"node:fs";import{rm as Cp}from"node:fs/promises";function ye(e){return new Promise((t,o)=>{Rp(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 _t(e){return fp(e.dirPath,{recursive:!0}),new Promise((t,o)=>{Tp(e.filePath,JSON.stringify(e.data,null,2),{mode:e.mode},r=>{r?o(r):e.mode==null?t():gp(e.filePath,e.mode,n=>{n?o(n):t()})})})}function ut(e){return Cp(e,{force:!0})}var Zp=384;function Un(e){let{filePath:t,mode:o,reviver:r,replacer:n}=e,i=o??Zp;async function a(){let p=await ye(t),d;if(p==null)d={};else if(r==null)d=p;else{d={};for(let y of Object.keys(p)){let m=r(p[y]);m!=null&&(d[y]=m)}}return d}async function s(p){let d=n==null?p:Object.fromEntries(Object.entries(p).map(([y,m])=>[y,n(m)]));await _t({filePath:t,dirPath:xp(t),data:d,mode:i})}let c=Promise.resolve();function u(p){let d=c.then(p,p);return c=d.catch(()=>{}),d}return{load:a,get:async p=>(await a())[p],set:(p,d)=>u(async()=>{let y=await a();await s({...y,[p]:d})}),remove:p=>u(async()=>{let y={...await a()};delete y[p],await s(y)}),clear:()=>u(async()=>{await ut(t)})}}var Zf=Buffer.from([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function pt(e){return ye(e.configFilePath)}function Fp(e){return _t({filePath:e.configFilePath,dirPath:e.configDir,data:e.config})}async function dt(e){let t=await pt({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:Ao(t.output,e.updates.output)};return await Fp({configFilePath:e.configFilePath,configDir:e.configDir,config:o}),o}function Ao(e,t){return{dumpDir:"dumpDir"in t?t.dumpDir:e?.dumpDir,pick:"pick"in t?t.pick:e?.pick,commands:Sp(e?.commands,t)}}function Sp(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 Ln(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 ge(e){let t;return e==null?t=e:e.length<=4?t="***":t=e.substring(0,4)+"***",t}import{homedir as Ap}from"node:os";import{join as bo}from"node:path";function vt(e){let t=e.configDirOverride??bo(Ap(),`.${e.cliName}`);return{configDir:t,configFilePath:bo(t,"config.json"),tokenCachePath:bo(t,".tokens.json")}}function Gn(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await pt({configFilePath:t.configFilePath}))?.output),r=e.saveCommandOutputConfig??(async(n,i)=>{await dt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:{commands:{[n]:i}}}})});return async n=>{Fr(!!n.verbose),Sr(typeof n.timeout=="number"?n.timeout*1e3:void 0);let i=n._?n._.map(String):[],a=i[0],s=n.setDumpDir,c=n.setPick;if((s!==void 0||c!==void 0)&&a&&!e.skipCommands.has(a)){let m=i.join("."),T={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await r(m,T)}let p=a&&!e.skipCommands.has(a),d=p?await o():void 0,y=p?Ln({outputConfig:d,commandPath:i,cliFlags:{dumpDir:n.dumpDir??s,pick:n.pick??c}}):{dumpDir:void 0,pick:void 0};oo({dumpDir:y.dumpDir,pick:n.pickAll?void 0:y.pick,commandPath:i,pretty:!!n.pretty})}}function bp(e){let t=vt({cliName:e.cliName}),o=e.loadOutputConfig??(async()=>(await pt({configFilePath:t.configFilePath}))?.output),r=e.mergeOutputConfig??(i=>dt({configFilePath:t.configFilePath,configDir:t.configDir,updates:{output:i}})),n=e.clearOutputConfig??(()=>dt({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 Kn(e){let t=bp(e),o={command:"set",describe:"Configure output settings (global or per-command)",builder:i=>i.option("command",{alias:"c",type:"string",describe:"Command path to configure (e.g. recruit.list)"}).check(a=>{if(a.setDumpDir==null&&a.setPick==null)throw new Error("At least one of --set-dump-dir or --set-pick is required");return!0}),handler:Et(async i=>{let a=i.command,s=i.setDumpDir,c=i.setPick,u;if(a){let d={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};u={commands:{[a]:d}}}else u={...s===void 0?{}:{dumpDir:s},...c===void 0?{}:{pick:c}};await t.mergeOutputConfig(u);let p=await t.loadOutputConfig();l({saved:!0,output:p??{}})})},r={command:"show",describe:"Show current output configuration",builder:i=>i,handler:Et(async()=>{let i=await t.loadOutputConfig();l({output:i??{}})})},n={command:"clear",describe:"Clear output configuration (global or per-command)",builder:i=>i.option("command",{alias:"c",type:"string",describe:"Command path to clear (omit to clear all output config)"}),handler:Et(async i=>{let a=i.command;if(a){let s=await t.loadOutputConfig();if(!s?.commands?.[a])throw new it({message:`No per-command output config for "${a}".`,code:"OUTPUT_COMMAND_NOT_FOUND"});let c={...s.commands};delete c[a],await t.mergeOutputConfig({...s,commands:c}),l({cleared:!0,command:a})}else await t.clearOutputConfig(),l({cleared:!0})})};return{command:"output",describe:"Configure output settings (dump, field filtering)",builder:i=>i.command(o).command(r).command(n).demandCommand(1,"Specify an output subcommand."),handler:S}}import{writeFileSync as Ip,appendFileSync as kp}from"node:fs";function Vn(e){let{dumpOutput:t,dumpMerge:o}=e,{pick:r}=At(),n=t==="raw"?"json":"ndjson",i=at(n),a=r?at(n,"pick"):void 0,s;if(i){let c=0,u=g=>{let R;if(r){let Z=Ae(g.data,r);R={...g,data:Z}}else R=g;return R},p=g=>{let R=g.append?kp:Ip;R(i,g.mainContent),a&&g.pickContent!==void 0&&R(a,g.pickContent)},d=(g,R)=>{let Z=JSON.stringify(g,null,2),F=a?JSON.stringify(u(g),null,2):void 0;p({mainContent:Z,pickContent:F,append:R})},y=(g,R)=>{let Z=JSON.stringify(g)+`
5
5
  `,F=a?JSON.stringify(u(g))+`
6
6
  `:void 0;p({mainContent:Z,pickContent:F,append:R})},m=(g,R)=>{let Z=g.data??[],F=a?Ae(Z,r):void 0;Z.length===0?R||p({mainContent:"",pickContent:a?"":void 0,append:!1}):Z.forEach((U,z)=>{let b=R||z>0,v=JSON.stringify(U)+`
7
7
  `,V=a&&F?JSON.stringify(F[z])+`
8
- `:void 0;p({mainContent:v,pickContent:V,append:b})})};s={mainPath:i,pickPath:a,writePage:g=>{let Z=o==="concat"&&!(c===0);t==="raw"?d(g,Z):t==="page_by_line"?y(g,Z):m(g,Z),c+=1},close:()=>{}}}else s={mainPath:void 0,pickPath:void 0,writePage:()=>{},close:()=>{}};return s}async function Pp(e){let{initialInput:t,requestedPages:o,fetchPage:r,adapter:n,stream:i,shouldCollectPages:a,shouldCollectRecords:s}=e,c={pagesFetched:0,totalRecords:0,hasMorePagesAvailable:!1,lastResult:void 0,lastInput:t,collectedPages:[],collectedRecords:[]},u=t;for(let p=0;p<o;p++){let d=await r(u);if(c.pagesFetched+=1,c.totalRecords+=n.countOf(d),c.lastResult=d,c.lastInput=u,i.writePage(d),a)c.collectedPages.push(d);else if(s)for(let m of d.data??[])c.collectedRecords.push(m);c.hasMorePagesAvailable=n.hasMorePagesAvailable(u,d);let y=n.nextInput(u,d);if(!y)break;u=y}return c}function Ep(e){let{multiplePagesOutput:t,summaryMeta:o,state:r,adapter:n,pickFilter:i}=e;if(t==="meta")console.log(JSON.stringify({ok:!0,meta:o}));else if(t==="pages"){let a=i?r.collectedPages.map(s=>({...s,data:Ae(s.data,i)})):r.collectedPages;console.log(JSON.stringify({ok:!0,data:a,meta:o}))}else{let a=r.lastResult?n.metaOf(r.lastInput,r.lastResult):{},s=i?Ae(r.collectedRecords,i):r.collectedRecords;console.log(JSON.stringify({ok:!0,data:s,meta:{...a,...o}}))}}async function I(e){let{initialInput:t,fetchPage:o,adapter:r,multiplePagesOutput:n,dumpOutput:i,dumpMerge:a}=e,s=Math.max(1,Math.floor(e.multiplePages||1)),c;if(s<=1)c={handled:!1,result:await o(t)};else{let u=At();u.dumpDir||console.error("[cli] warning: --multiple-pages used without --dump-dir; results not persisted.");let p=Vn({dumpOutput:i,dumpMerge:a}),d;try{d=await Pp({initialInput:t,requestedPages:s,fetchPage:o,adapter:r,stream:p,shouldCollectPages:n==="pages",shouldCollectRecords:n==="merged_page"})}finally{p.close()}let y={pagesFetched:d.pagesFetched,totalRecords:d.totalRecords,hasMorePagesAvailable:d.hasMorePagesAvailable,dumpFile:p.mainPath??null};p.pickPath&&(y.dumpFilePick=p.pickPath),Ep({multiplePagesOutput:n,summaryMeta:y,state:d,adapter:r,pickFilter:u.pick}),c={handled:!0}}return c}import gh from"yargs";import{hideBin as fh}from"yargs/helpers";import{writeFile as Op,mkdirSync as Dp}from"node:fs";import{join as Io}from"node:path";import{homedir as Mp}from"node:os";var Nt=["recruit","crm","desk"];function ko(){return Io(Mp(),".zoho-cli")}function lt(){return Io(ko(),"config.json")}function ht(){return Io(ko(),".tokens.json")}function Pe(e,t){return(t?process.env[`ZOHO_${t}_${e}`]:void 0)??process.env[`ZOHO_${e}`]}async function H(){let e=lt(),t=await ye(e),o=Pe("ACCOUNTS_CLIENT_ID"),r=Pe("ACCOUNTS_CLIENT_SECRET"),n=Pe("ACCOUNTS_REFRESH_TOKEN"),i=o&&r&&n,a;if(!t&&!i)a=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 p=u.toUpperCase(),d=Pe("API_URL",p),y=u==="desk"?Pe("DESK_ORG_ID"):void 0,m=t?.[u],T=process.env[`ZOHO_${p}_ACCOUNTS_CLIENT_ID`],g=process.env[`ZOHO_${p}_ACCOUNTS_CLIENT_SECRET`],R=process.env[`ZOHO_${p}_ACCOUNTS_REFRESH_TOKEN`],Z=T||g||R,F;return!m&&!Z&&!y?F=void 0:F={clientId:T??m?.clientId,clientSecret:g??m?.clientSecret,refreshToken:R??m?.refreshToken,apiUrl:d??m?.apiUrl,orgId:y??m?.orgId},F};a={shared:s,recruit:c("recruit")??t?.recruit,crm:c("crm")??t?.crm,desk:c("desk")??t?.desk,output:t?.output}}return a}function mt(e,t){let o=e[t],r=e.shared,n=o?.clientId??r.clientId,i=o?.clientSecret??r.clientSecret,a=o?.refreshToken??r.refreshToken,s;return!n||!i||!a?s=void 0:s={clientId:n,clientSecret:i,refreshToken:a,region:r.region??"us",apiMode:o?.apiUrl??r.apiMode??"production",orgId:o?.orgId},s}async function _p(e){let t=lt();return Dp(ko(),{recursive:!0}),new Promise((o,r)=>{Op(t,JSON.stringify(e,null,2),{},n=>{n?r(n):o()})})}async function te(e){let t=await H(),o={shared:{...t?.shared,...e.shared},recruit:e.recruit===void 0?t?.recruit:{...t?.recruit,...e.recruit},crm:e.crm===void 0?t?.crm:{...t?.crm,...e.crm},desk:e.desk===void 0?t?.desk:{...t?.desk,...e.desk},output:e.output===void 0?t?.output:Ao(t?.output,e.output)};return await _p(o),o}async function Hn(){await te({output:{dumpDir:void 0,pick:void 0,commands:void 0}})}async function zn(){let e=lt(),t=ht();await ut(e),await ut(t)}function oe(e){return Nt.filter(t=>{let o=mt(e,t);return o!=null&&(t!=="desk"||o.orgId!=null)})}import{Inject as Gs,Injectable as Pd}from"@nestjs/common";function je(){return{data:[],info:{page:1,per_page:100,count:0,more_records:!1}}}function N(e,t){return Ve({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.info?.more_records??!1}},buildInputForNextPage:function(o,r,n){return{...r,page:Fn(o),per_page:n.maxItemsPerPage??r.per_page}}})}function wt(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 We="Candidates",jn="Job_Openings",Ut="Notes",Wn="Emails",yt="Attachments";function Lt(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=Gt(o);break}default:break}return t}function Gt(e){function t(a){let s;return typeof a=="object"?Array.isArray(a)?s=a.map(Po):a&&(s=Gt(a)):s=a,s}function o(a,s){return a.length>1?`(${a.join(s)})`:a[0]}function r(a,s){let c=me(a.map(t)).flatMap(C);return o(c,s)}let n=e.or?r(e.or,"or"):void 0,i=n;return e.and&&(i=r([r(e.and,"and"),n],"and")),i}var Bn=en({escapeTargets:["(",")",","],escapeCharacter:e=>`\\\\${e}`});function Po(e){let t=Bn(e.value);return`(${e.field}:${e.filter}:${t})`}var qn=Lt;import{BaseError as Bp}from"make-error";import{BaseError as Np}from"make-error";var wp="__internal_data_array_blank_error";function Up(e){return Array.isArray(e?.data)}var $e="success";function $(e){let t=typeof e,o;return t==="object"?o=e:o={code:e,message:""},o}var fe=class extends Np{constructor(o){super(o.message);this.error=o}get code(){return this.error.code}},G=class extends fe{constructor(o,r,n){super(o);this.data=o;this.errorResponseData=r;this.responseError=n}},Be=class extends G{constructor(t,o){super({code:wp,message:"Check data for individual errors."},t,o)}get errorDataArray(){return this.errorResponseData.data}};function re(e,t){let{logDataArrayErrors:o=!1}=t??{};return r=>{r instanceof Be&&!o||(r instanceof G?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 ne(e,t){return(o,r=t,n)=>async(i,a)=>{try{return await o(i,a)}catch(s){if(s instanceof Ke){let c=await e(s);if(c)throw r(c),n?.(c),c}throw s}}}function ie(e){return(t,o)=>{if(t?.error!=null){let n=new Ke(o),i=e(t,n);if(i)throw i}return t}}var Lp="INTERNAL_ERROR",Gp="INVALID_TOKEN",K=class extends G{},Jn="FAILURE",Eo=class extends G{},Kp="4834",qe=class extends G{},Vp="INVALID_QUERY",Oo=class extends G{get details(){return this.error.details}},Kt="MANDATORY_NOT_FOUND",Re="DUPLICATE_DATA",Vt="INVALID_DATA",Hp="TOO_MANY_REQUESTS",$n=429,zp="X-RATELIMIT-LIMIT",jp="X-RATELIMIT-REMAINING",Wp="X-RATELIMIT-RESET",Xn=100,Yn=be;function Do(e){let t=e.get(zp),o=e.get(jp),r=e.get(Wp),n=null;if(t!=null&&o!=null&&r!=null){let i=Number(t),a=Number(o),s=Number(r),c=new Date(s);n={limit:i,remaining:a,reset:s,resetAt:c}}return n}var Je=class extends G{get headerDetails(){return Do(this.responseError.response.headers)}};function ae(e,t){let o;if(Up(e))o=new Be(e,t);else{let r=le(e,t);if(r){let n=$(r);switch(n.code){case Lp:o=new Eo(n,e,t);break;case Gp:o=new K(n,e,t);break;case Kp:o=new qe(n,e,t);break;case Vp:o=new Oo(n,e,t);break;case Hp:o=new Je(n,e,t);break;default:o=new G(n,e,t);break}}}return o}function le(e,t){return e.error??e.data?.[0]??(t.response.ok?void 0:e)}var Qn="ALREADY_ASSOCIATED",Mo=class extends Bp{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}},Xe=class extends fe{},_o=class extends Xe{},vo=class extends Xe{},Ht=class extends Xe{get invalidFieldDetails(){return this.error.details}},No=class extends Ht{};function ei(e){let t;switch(e.code){case Vt:{let o=new Ht(e);o.invalidFieldDetails.id?t=new No(e):t=o;break}case Kt:t=new _o(e);break;case Re:t=new vo(e);break;default:t=new Xe(e);break}return t}function ti(e,t){return o=>{if(!o?.data?.length)throw new Mo(e,t);return o}}var qp=re("ZohoRecruit");async function Jp(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=oi(t,e)),o}function oi(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var ri=ie(oi),ni=ne(Jp,qp);import{BaseError as $p}from"make-error";function Uo(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v2/${n}${t}`,M(o,{data:C(r)})).then(i=>{let a=Array.isArray(r),s=se(C(r),i.data),c;if(a)c=s;else{let{successItems:u,errorItems:p}=s;if(p[0]!=null)throw ei(p[0].result);c=u[0].result.details}return c}))}function ii(e){return Uo(e,"","POST")}function ai(e){return Uo(e,"/upsert","POST")}function si(e){return Uo(e,"","PUT")}function ci(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v2/${o}?${f({ids:t,wf_trigger:r})}`,M("DELETE")).then(Xp)}function ui(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}`,M("GET")).then(ti(t.module)).then(o=>o.data[0])}function pi(e){return(t=>e.fetchJson(`/v2/${t.module}?${Ri(t).toString()}`,M("GET")))}function Lo(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=qn(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 Ri(r)}return o=>e.fetchJson(`/v2/${o.module}/search?${t(o).toString()}`,M("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function di(e){return N(Lo(e))}function Ye(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v2/${n.module}/${n.id}/${o}?${Vo(n,n.filter).toString()}`,M("GET")).then(i=>i??(r===!1?i:je()))}}function Go(e){return Ye(e)({targetModule:Wn})}function li(e){return N(Go(e))}function Ko(e){return Ye(e)({targetModule:yt})}function hi(e){return N(Ko(e))}var vR=20*1024*1024;function mi(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n,attachmentUrl:i}=t,a={attachments_category_id:P(o),attachments_category:P(r)};if(!a.attachments_category_id?.length&&!a.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let s=`/v2/${t.module}/${t.id}/${yt}?${f(a).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(i){let u=`${s}&${f({attachment_url:i}).toString()}`;c=e.fetch(u,{method:"POST"})}else throw new Error("file or attachmentUrl must be provided.");return c}}function yi(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${yt}/${t.attachment_id}`,{method:"GET"}).then(Pt)}function gi(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${yt}/${t.attachment_id}`,{method:"DELETE"})}var wo=class extends $p{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}};function fi(e){return t=>{let r=f(t.params).toString(),n=!!t.apiKey,i=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),a=`/v2/functions/${t.functionName}/actions/execute?${i}`,c=`${n&&t.apiUrl!=null?wt(t.apiUrl):""}${a}`;return e.fetchJson(c,M("POST")).then(u=>{if(u.code!=="success")throw new wo(u);return u.details})}}function Ri(...e){return f(e,{omitKeys:"module"})}function Vo(...e){return f(e,{omitKeys:["id","module"]})}function M(e,t){return{method:e,body:t??void 0}}function Xp(e){let{data:t}=e,o=[],r=[];return t.forEach(i=>{i.status===$e?o.push(i):r.push(i)}),{...e,successItems:o,errorItems:r}}function se(e,t){let o=[],r=[];return e.forEach((i,a)=>{let s=t[a];s.status===$e?o.push({input:i,result:s}):r.push({input:i,result:s})}),{successItems:o,errorItems:r}}function Ti(e){return t=>e.fetchJson(`/v2/${We}/actions/associate`,M("PUT",{data:C(t)})).then(o=>{let r=o.data.map(()=>t),n=se(r,o.data),{included:i,excluded:a}=Ue(n.errorItems,s=>s.result.code===Jn&&s.result.details.error[0].code===Qn);return{...n,errorItems:a,alreadyAssociatedErrorItems:i,allErrorItems:n.errorItems}})}function Ci(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}/associate?${Vo(t).toString()}`,M("GET")).then(o=>o??je())}function Ho(e){let t=Ci(e);return o=>t({...o,module:We})}function xi(e){return N(Ho(e))}function zo(e,t=jn){let o=Ci(e);return r=>o({...r,module:t})}function Zi(e){return N(zo(e))}function jo(e){return t=>e.fetchJson(`/v2/${Ut}`,M("POST",{data:t.data})).then(o=>se(C(t.data),o.data))}function Fi(e){return t=>e.fetchJson(`/v2/${Ut}?${f({ids:t.ids})}`,M("DELETE")).then(o=>se(C(t.ids),o.data))}function Wo(e){return Ye(e)({targetModule:Ut})}function Si(e){return N(Wo(e))}function Ai(e){let t=jo(e);return o=>{let{module:r,id:n,notes:i}=o,a={data:C(i).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(a)}}function ki(e){return t=>e.fetchJson(`/v2/settings/tags?${f({module:t.module})}`,M("POST",{tags:C(t.tags)})).then(o=>{let r=se(C(t.tags),o.tags),{included:n,excluded:i}=Ue(r.errorItems,a=>a.result.code===Re);return{...r,errorItems:i,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function Pi(e){return t=>e.fetchJson(`/v2/settings/tags?${f({module:t.module,my_tags:t.my_tags})}`,M("GET")).then(o=>({...o,data:o.tags}))}var bi=100;function Ei(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>bi)throw new Error(`Cannot add tags to more than ${bi} records at once.`);return e.fetchJson(`/v2/${We}/actions/add_tags?${f({tag_names:t.tag_names,ids:t.ids})}`,M("POST")).then(o=>{let r=o.data.map(()=>t);return se(r,o.data)})}}var Ii=100;function Oi(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>Ii)throw new Error(`Cannot remove tags from more than ${Ii} records at once.`);return e.fetchJson(`/v2/${We}/actions/remove_tags?${f({tag_names:t.tag_names,ids:t.ids})}`,M("POST")).then(o=>{let r=o.data.map(()=>t);return se(r,o.data)})}}var Yp="invalid_code",Qp="invalid_client",Bo=class extends J{constructor(o){super(`ZohoAccountsAccessTokenError: ${o}`);this.errorCode=o}},Qe=class extends J{constructor(o){super(`Failed to retrieve proper authentication for the API call. Reason: ${o}`);this.reason=o}},ed=re("ZohoAccounts");async function td(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Di(t,e)),o}function Di(e,t){let o,r=e.error;if(r){let n=$(r);switch(n.code){case Yp:case Qp:o=new Bo(n.code);break;default:o=ae(e,t);break}}return o}var Mi=ie(Di),_i=ne(td,ed);function Te(e){return async()=>{let t=await e();if(!t.accessToken)throw new Qe;return t.accessToken}}var od=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 qo(e){let{readRateLimitDetails:t}=e,o=e.onTooManyRequests===!1?void 0:e.onTooManyRequests??od,r=e.maxRateLimit??Xn,n=e.resetPeriod??Yn;function i(c,u){return{limit:c,startLimitAt:Math.ceil(c/10),cooldownRate:1.2*(c/(n/L)),exponentRate:1.08,maxWaitTime:L*10,resetPeriod:n,resetAt:u}}let a=i(r),s=Rn(a);return En({rateLimiter:s,maxRetries:e.maxRetries,updateWithResponse:function(c,u){let p=t(c.headers),d=!1,y=!1;if(p){let{remaining:m,limit:T,resetAt:g}=p;if(T!=null&&T!==r){let R=i(T,g??void 0);s.setConfig(R,!1)}if(s.setRemainingLimit(m),g&&s.setNextResetAt(g),y=!0,c.status===$n){d=!0;try{o?.(p,c,u)}catch{}}}return s.setEnabled(y),d}})}function Ce(e){return qo({...e,readRateLimitDetails:rd})}function rd(e){let t=Do(e),o;return t&&(o={remaining:t.remaining,limit:t.limit,resetAt:t.resetAt}),o}function vi(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ce(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoConfig missing api url.");let s=wt(a.apiUrl),c=i({apiUrl:s}),u=ni(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:ri,handleFetchJsonParseErrorFunction:Y});return{recruitContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function zt(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 jt="Notes",Ni="Emails",gt="Attachments";var wi=Lt;import{BaseError as nd}from"make-error";var Jo=class extends nd{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}},et=class extends fe{},$o=class extends et{},Xo=class extends et{},Wt=class extends et{get invalidFieldDetails(){return this.error.details}},Yo=class extends Wt{};function Ui(e){let t;switch(e.code){case Vt:{let o=new Wt(e);o.invalidFieldDetails.api_name==="id"?t=new Yo(e):t=o;break}case Kt:t=new $o(e);break;case Re:t=new Xo(e);break;default:t=new et(e);break}return t}function Li(e,t){return o=>{if(!o?.data?.length)throw new Jo(e,t);return o}}var id=re("ZohoCrm",{logDataArrayErrors:!1});async function ad(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Gi(t,e)),o}function Gi(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var Ki=ie(Gi),Vi=ne(ad,id);import{BaseError as sd}from"make-error";function er(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v8/${n}${t}`,w(o,{data:C(r)})).catch(ra).then(i=>{let a=Array.isArray(r),s=xe(C(r),i.data),c;if(a)c=s;else{let{successItems:u,errorItems:p}=s;if(p[0]!=null)throw Ui(p[0].result);c=u[0].result.details}return c}))}function Hi(e){return er(e,"","POST")}function zi(e){return er(e,"/upsert","POST")}function ji(e){return er(e,"","PUT")}function Wi(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v8/${o}?${f({ids:t,wf_trigger:r})}`,w("DELETE")).catch(ra).then(ud)}function Bi(e){return t=>e.fetchJson(`/v8/${t.module}/${t.id}`,w("GET")).then(Li(t.module)).then(o=>o.data[0])}function qi(e){return(t=>e.fetchJson(`/v8/${t.module}?${oa(t).toString()}`,w("GET")))}function tr(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=wi(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 oa(r)}return o=>e.fetchJson(`/v8/${o.module}/search?${t(o).toString()}`,w("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function Ji(e){return N(tr(e))}function tt(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v8/${n.module}/${n.id}/${o}?${cd(n,n.filter).toString()}`,w("GET")).then(i=>i??(r===!1?i:je()))}}function or(e){let t=tt(e)({targetModule:Ni});return o=>t(o).then(r=>{let n=r.data??r.Emails;return{...r,data:n}})}function $i(e){return N(or(e))}function rr(e){return tt(e)({targetModule:gt})}function Xi(e){return N(rr(e))}var qT=20*1024*1024;function Yi(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n}=t,i={attachments_category_id:P(o),attachments_category:P(r)};if(!i.attachments_category_id?.length&&!i.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let a=`/v8/${t.module}/${t.id}/${gt}?${f(i).toString()}`,s=new FormData;return s.append("file",n),e.fetch(a,{method:"POST",headers:{"Content-Type":""},body:s})}}function Qi(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${gt}/${t.attachment_id}`,{method:"GET"}).then(Pt)}function ea(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${gt}/${t.attachment_id}`,{method:"DELETE"})}var Qo=class extends sd{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}};function ta(e){return t=>{let r=f(t.params).toString(),n=!!t.apiKey,i=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),a=`/v8/functions/${t.functionName}/actions/execute?${i}`,c=`${n&&t.apiUrl!=null?zt(t.apiUrl):""}${a}`;return e.fetchJson(c,w("POST")).then(u=>{if(u.code!=="success")throw new Qo(u);return u.details})}}function oa(...e){return f(e,{omitKeys:"module"})}function cd(...e){return f(e,{omitKeys:["id","module"]})}function w(e,t){return{method:e,body:t??void 0}}function ra(e){let t;if(e instanceof Be)t={data:e.errorDataArray};else throw e;return t}function ud(e){let{data:t}=e,o=[],r=[];return t.forEach(i=>{i.status===$e?o.push(i):r.push(i)}),{...e,successItems:o,errorItems:r}}function xe(e,t){let o=[],r=[];return e.forEach((i,a)=>{let s=t[a];s.status===$e?o.push({input:i,result:s}):r.push({input:i,result:s})}),{successItems:o,errorItems:r}}function nr(e){return t=>e.fetchJson(`/v2/${jt}`,w("POST",{data:t.data})).then(o=>xe(C(t.data),o.data))}function na(e){return t=>e.fetchJson(`/v2/${jt}?${f({ids:t.ids})}`,w("DELETE")).then(o=>xe(C(t.ids),o.data))}function ir(e){return tt(e)({targetModule:jt})}function ia(e){return N(ir(e))}function aa(e){let t=nr(e);return o=>{let{module:r,id:n,notes:i}=o,a={data:C(i).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(a)}}function ca(e){return t=>e.fetchJson(`/v8/settings/tags?${f({module:t.module})}`,w("POST",{tags:C(t.tags)})).catch(o=>{let r;if(o instanceof G){let n=o.data?.tags;Array.isArray(n)&&(r={tags:n})}if(!r)throw o;return r}).then(o=>{let r=xe(C(t.tags),o.tags),{included:n,excluded:i}=Ue(r.errorItems,a=>a.result.code===Re);return{...r,errorItems:i,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function ua(e){return t=>e.fetchJson(`/v8/settings/tags/${t.id}`,w("DELETE")).then(o=>o.tags)}function pa(e){return t=>e.fetchJson(`/v8/settings/tags?${f({module:t.module,my_tags:t.my_tags})}`,w("GET")).then(o=>({...o,data:o.tags}))}var sa=100;function da(e){return t=>e.fetchJson(`/v8/${t.module}/actions/add_tags`,w("POST",la(t))).then(o=>{let r=o.data.map(()=>t);return xe(r,o.data)})}function la(e){if(Array.isArray(e.ids)&&e.ids.length>sa)throw new Error(`Cannot add/remove tags from more than ${sa} records at once.`);let t=[...C(e.tags)],o=new Set(t.map(r=>r.name));return e.tag_names&&C(e.tag_names).forEach(r=>{o.has(r)||(t.push({name:r}),o.add(r))}),{tags:t,ids:C(e.ids)}}function ha(e){return t=>e.fetchJson(`/v8/${t.module}/actions/remove_tags`,w("POST",la(t))).then(o=>{let r=o.data.map(()=>t);return xe(r,o.data)})}function ma(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ce(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoConfig missing api url.");let s=zt(a.apiUrl),c=i({apiUrl:s}),u=Vi(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:Ki,handleFetchJsonParseErrorFunction:Y});return{crmContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function ya(e,t){return Ve({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.page_context?.has_more_rows??!1}},buildInputForNextPage:function(o,r,n){let a=o.result?.page_context,s=n.maxItemsPerPage??r.row_count??a?.row_count??20,c=(a?.start_index??r.start_index??1)+s;return{...r,start_index:c,row_count:s}}})}function ce(e,t){return{method:e,body:t??void 0}}function ga(e){return({requestId:t})=>e.fetchJson(`/requests/${t}`,ce("GET"))}function ar(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)}},ce("GET"))}}function fa(e){let t=ar(e);return ya(t)}function Ra(e){return({requestId:t})=>e.fetchJson(`/requests/${t}/fielddata`,ce("GET"))}function Ta(e){return()=>e.fetchJson("/fieldtypes",ce("GET"))}function Ca(e){return({requestId:t,...o})=>{let n=f(o).toString(),i=n?`?${n}`:"",a=`/requests/${t}/pdf${i}`;return e.fetch(a,{method:"GET"})}}function xa(e){return({requestId:t})=>e.fetch(`/requests/${t}/completioncertificate`,{method:"GET"})}function Za(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 Fa(e){return({templateId:t,data:o,isQuickSend:r=!0})=>{let n=f({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 Sa(e){return({templateId:t})=>e.fetchJson(`/templates/${t}`,ce("GET"))}function Aa(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)}},ce("GET"))}}function ba(e){return({requestId:t,data:o})=>e.fetchJson(`/requests/${t}`,ce("PUT",{requests:o}))}function Ia(e){return({requestId:t,data:o})=>{let r=o?{requests:o}:void 0;return e.fetchJson(`/requests/${t}/submit`,ce("POST",r))}}function ka(e){return({requestId:t,expire_by:o})=>e.fetchJson(`/requests/${t}/extend`,ce("PUT",{expire_by:o}))}function Pa(e){return({requestId:t,recall_inprogress:o,reason:r})=>{let n={};o!=null&&(n.recall_inprogress=String(o)),r!=null&&(n.reason=r);let i=f(n),a=i.toString().length>0;return e.fetchJson(`/requests/${t}/delete`,{method:"PUT",...a?{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()}:{}})}}function Ea(e){return({requestId:t,actionId:o,host:r})=>e.fetchJson({url:`/requests/${t}/actions/${o}/embedtoken`,queryParams:{host:r}},ce("POST"))}function Oa(e){let t;switch(e){case"sandbox":t="https://signsandbox.zoho.com/api/v1";break;case"production":t="https://sign.zoho.com/api/v1";break;default:t=e;break}return t}var pd=re("ZohoSign",{logDataArrayErrors:!1});async function dd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Da(t,e)),o}function Da(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var Ma=ie(Da),_a=ne(dd,pd);function va(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ce(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoConfig missing api url.");let s=Oa(a.apiUrl),c=i({apiUrl:s}),u=_a(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:Ma,handleFetchJsonParseErrorFunction:Y});return{signContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function Na(e){let t;switch(e){case"sandbox":case"production":t="https://desk.zoho.com/api/v1";break;default:t=e;break}return t}var ld=re("ZohoDesk",{logDataArrayErrors:!1});async function hd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=wa(t,e)),o}function wa(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var Ua=ie(wa),La=ne(hd,ld);var md="X-Rate-Limit-Remaining-v3",yd="Retry-After",gd=200;function fd(e){let t=e.get(md),o;if(t!=null){let r=Number(t),n,i=e.get(yd);if(i!=null){let a=Number(i);Number.isNaN(a)||(n=new Date(Date.now()+a*L))}Number.isNaN(r)||(o={remaining:r,resetAt:n})}return o}function Ga(e){return qo({maxRateLimit:gd,...e,readRateLimitDetails:fd})}function Ka(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ga(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`,orgId:a.orgId}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoDeskConfig missing api url.");if(!a.orgId)throw new Error("ZohoDeskConfig missing orgId.");let s=Na(a.apiUrl),c=i({apiUrl:s,orgId:a.orgId}),u=La(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:Ua,handleFetchJsonParseErrorFunction:Y});return{deskContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}var Va=25;function X(e,t){return Ve({...t,fetch:e,readFetchPageResultInfo:function(o){let r=o.data?.length??0;return{hasNext:r>0&&r>=Va}},buildInputForNextPage:function(o,r,n){let i=n.maxItemsPerPage??r.limit??Va,s=(r.from??1)+i;return{...r,from:s,limit:i}}})}function Ee(e,t){return{method:e,body:t??void 0}}function ot(e,t){return f(e,{omitKeys:t})}function Bt(e){let t;return e&&(t=P(C(e))),t}function sr(e){return t=>{let{include:o,...r}=t,n=ot([{...r,include:Bt(o)}]);return e.fetchJson(`/tickets?${n}`,Ee("GET")).then(i=>i??{data:[]})}}function Ha(e){return t=>{let{ticketId:o,include:r}=t,i=ot([{include:Bt(r)}]).toString(),a=i?"?"+i:"";return e.fetchJson(`/tickets/${o}${a}`,Ee("GET"))}}function cr(e){return t=>{let o=ot([t]);return e.fetchJson(`/tickets/search?${o}`,Ee("GET")).then(r=>r??{data:[]})}}function za(e){return t=>{let{contactId:o,include:r,...n}=t,i=ot([{...n,include:Bt(r)}]);return e.fetchJson(`/contacts/${o}/tickets?${i}`,Ee("GET")).then(a=>a??{data:[]})}}function ja(e){return t=>{let{productId:o,include:r,...n}=t,i=ot([{...n,include:Bt(r)}]);return e.fetchJson(`/products/${o}/tickets?${i}`,Ee("GET")).then(a=>a??{data:[]})}}function Wa(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/metrics`,Ee("GET"))}function Ba(e){return t=>{let o=ot([{agentIds:P(C(t.agentIds)),departmentId:t.departmentId}]);return e.fetchJson(`/agentsTicketsCount?${o}`,Ee("GET"))}}function qa(e){return X(sr(e))}function Ja(e){return X(cr(e))}function $a(e){return{method:e}}function Xa(e){return t=>{let o=f([t]);return e.fetchJson(`/departments?${o}`,$a("GET")).then(r=>r??{data:[]})}}function Ya(e){return t=>e.fetchJson(`/departments/${t.departmentId}`,$a("GET"))}function ur(e){return{method:e}}function Qa(e){let t;return e&&(t=P(C(e))),t}function pr(e){return t=>{let{include:o,...r}=t,n=f([{...r,include:Qa(o)}]);return e.fetchJson(`/contacts?${n}`,ur("GET")).then(i=>i??{data:[]})}}function es(e){return t=>{let{contactId:o,include:r}=t,i=f([{include:Qa(r)}]).toString(),a=i?"?"+i:"";return e.fetchJson(`/contacts/${o}${a}`,ur("GET"))}}function ts(e){return t=>{let o=f([{contactIds:P(C(t.contactIds))}]);return e.fetchJson(`/contacts/contactsByIds?${o}`,ur("GET")).then(r=>r??[])}}function os(e){return X(pr(e))}function ft(e,t){return{method:e,body:t??void 0}}function rs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags`,ft("GET")).then(o=>o??[])}function ns(e){return t=>{let o={tags:C(t.tags).map(r=>({name:r}))};return e.fetchJson(`/tickets/${t.ticketId}/tags`,ft("POST",o)).then(r=>r??[])}}function is(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags/${t.tagId}`,ft("DELETE"))}function as(e){return t=>{let o=f([t]);return e.fetchJson(`/tags/search?${o}`,ft("GET")).then(r=>r??{data:[]})}}function ss(e){return t=>{let o=f([t]);return e.fetchJson(`/ticketTags?${o}`,ft("GET")).then(r=>r??{data:[]})}}function dr(e,t){return{method:e,body:t??void 0}}function cs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/followers`,dr("GET")).then(o=>o??[])}function us(e){return t=>{let o={ids:C(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,dr("POST",o))}}function ps(e){return t=>{let o={ids:C(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,dr("DELETE",o))}}function ds(e,t){return{method:e,body:t??void 0}}function Rd(e){let t;return e&&(t=P(C(e))),t}function ls(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:Rd(r)}]);return e.fetchJson(`/tickets/${o}/attachments?${i}`,ds("GET")).then(a=>a??{data:[]})}}function hs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/attachments/${t.attachmentId}`,ds("DELETE"))}function qt(e,t){return{method:e,body:t??void 0}}function ms(e){let t;return e&&(t=P(C(e))),t}function ys(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:ms(r)}]);return e.fetchJson(`/tickets/${o}/comments?${i}`,qt("GET")).then(a=>a??{data:[]})}}function gs(e){return t=>{let{ticketId:o,commentId:r,include:n}=t,a=f([{include:ms(n)}]).toString(),s=a?"?"+a:"";return e.fetchJson(`/tickets/${o}/comments/${r}${s}`,qt("GET"))}}function fs(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/comments`,qt("POST",r))}}function Rs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/comments/${t.commentId}`,qt("DELETE"))}function Rt(e,t){return{method:e,body:t??void 0}}function Ts(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timer`,Rt("GET"))}function Cs(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/timer`,Rt("POST",r))}}function xs(e){return t=>{let{ticketId:o,...r}=t,n=f([r]);return e.fetchJson(`/tickets/${o}/timeEntries?${n}`,Rt("GET")).then(i=>i??{data:[]})}}function Zs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/${t.timeEntryId}`,Rt("GET"))}function Fs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/summation`,Rt("GET"))}function Ss(e){return{method:e}}function As(e){let t;return e&&(t=P(C(e))),t}function lr(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:As(r)}]);return e.fetchJson(`/tickets/${o}/threads?${i}`,Ss("GET")).then(a=>a??{data:[]})}}function bs(e){return t=>{let{ticketId:o,threadId:r,include:n}=t,a=f([{include:As(n)}]).toString(),s=a?"?"+a:"";return e.fetchJson(`/tickets/${o}/threads/${r}${s}`,Ss("GET"))}}function Is(e){return X(lr(e))}function Td(e){return{method:e}}function Cd(e){let t;return e&&(t=P(C(e))),t}function hr(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:Cd(r)}]);return e.fetchJson(`/tickets/${o}/activities?${i}`,Td("GET")).then(a=>a??{data:[]})}}function ks(e){return X(hr(e))}function Jt(e){return{method:e}}function Ps(e){let t;return e&&(t=P(C(e))),t}function mr(e){return t=>{let{include:o,...r}=t,n=f([{...r,include:Ps(o)}]);return e.fetchJson(`/agents?${n}`,Jt("GET")).then(i=>i??{data:[]})}}function Es(e){return t=>{let{agentId:o,include:r}=t,i=f([{include:Ps(r)}]).toString(),a=i?"?"+i:"";return e.fetchJson(`/agents/${o}${a}`,Jt("GET"))}}function Os(e){return t=>{let o=f([{agentIds:P(C(t.agentIds))}]);return e.fetchJson(`/agentsByIds?${o}`,Jt("GET")).then(r=>r?.data??[])}}function Ds(e){return()=>e.fetchJson("/myinfo",Jt("GET"))}function Ms(e){return X(mr(e))}function $t(e){return t=>{let{clientId:o,clientSecret:r,refreshToken:n}=e.config,{client:i,refreshToken:a}=t??{},s=i?.clientId??o,c=i?.clientSecret??r,p=f({grant_type:"refresh_token",client_id:s,client_secret:c,refresh_token:a??n});return e.fetchJson(`/oauth/v2/token?${p}`,xd("POST"))}}function xd(e,t){return{method:e,body:t}}var Zd="https://accounts.zoho.com";function _s(e){let t;return e==="us"?t=Zd:t=e,t}function vs(e){let t=Ce(),{logZohoServerErrorFunction:o,fetchFactory:r=n=>ee.makeFetch({baseUrl:n.apiUrl,baseRequest:{headers:{"Content-Type":"application/json"}},fetchHandler:t,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=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 i=_s(n.apiUrl??"us"),a=r({apiUrl:i}),s=_i(a,o),c=Q(s,{interceptJsonResponse:Mi,handleFetchJsonParseErrorFunction:Y}),u=async()=>{let m=Date.now(),{access_token:T,api_domain:g,scope:R,expires_in:Z}=await $t(d)();return{accessToken:T,apiDomain:g,expiresIn:Z,expiresAt:new Date(m+Z*L),scope:R}};u.resetAccessToken=async()=>n.accessTokenCache?.clearCachedToken();let p=Fd({tokenRefresher:u,accessTokenCache:n.accessTokenCache}),d={fetch:s,fetchJson:c,loadAccessToken:p,config:{...n,apiUrl:i}};return{accountsContext:d}}}function Fd(e){let{tokenRefresher:t,accessTokenCache:o,tokenExpirationBuffer:r}=e,n=r??be,i=null,a=async()=>{i=null},s=async()=>{if(!i){let c=await o?.loadCachedToken();c&&(i=c)}if(i!=null&&Date.now()+n>=i.expiresAt.getTime()&&(i=null),!i){try{i=await t()}catch(c){throw console.error("zohoAccountsZohoAccessTokenFactory(): Failed retrieving new token from tokenRefresher: ",c),new Qe("Token Refresh Failed")}try{await o?.updateCachedToken(i)}catch{}}return i};return s.resetAccessToken=a,s}function Ze(e){if(!e.apiUrl)throw new Error("No Zoho API url or type specified.")}var Fe=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 Sd}from"@nestjs/common";var rt=class{};rt=A([Sd()],rt);function Ad(e){return{load:async()=>{let t=await e.loadCachedToken().catch(()=>{});return t!=null&&!gn(t)?t:void 0},update:t=>e.updateCachedToken(t),clear:()=>e.clearCachedToken()}}function bd(e,t){return e.updateCachedToken(t).then(()=>null).catch(o=>[e,o])}function Id(e){console.warn(`mergeZohoAccountsAccessTokenCacheServices(): failed updating ${e.length} caches.`),e.forEach(([t,o],r)=>{console.warn(`Cache update failure ${r+1}: - ${o}`)})}function ws(e,t){let o=[...e],r=typeof t=="function"?t:t===!1?void 0:Id;if(o.length===0)throw new Error("mergeZohoAccountsAccessTokenCacheServices() input cannot be empty.");function n(i){let a=o.map(u=>u.loadZohoAccessTokenCache(i)),s=a.map(Ad),c=Qr(s);return{loadCachedToken:()=>c.load(),updateCachedToken:async u=>{let p=await Promise.allSettled(a.map(d=>bd(d,u)));if(r!=null){let d=me(p.map(y=>y.value));d.length&&r(d)}},clearCachedToken:async()=>{await Promise.allSettled(a.map(u=>u.clearCachedToken()))}}}return{loadZohoAccessTokenCache:n}}function Us(e,t){let o={};if(e!=null)for(let i of Object.keys(e)){let a=e[i];a!=null&&(o[i]=a)}let r=Xr(o);function n(i){return{loadCachedToken:async()=>{let a=await r.get(i);return t&&console.log("retrieving access token from memory: ",{service:i,hit:a!=null,expiresAt:a?.expiresAt}),a},updateCachedToken:async a=>{await r.set(i,a),t&&console.log("updating access token in memory: ",{service:i,expiresAt:a?.expiresAt})},clearCachedToken:async()=>{await r.remove(i),t&&console.log("clearing access token in memory: ",{service:i})}}}return{loadZohoAccessTokenCache:n}}var kd=".tmp/zoho-access-tokens.json";function Ns(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 Ls(e=kd,t=!0){let o=Un({filePath:e,reviver:Ns}),r=t?Yr(o):o;function n(c){return{loadCachedToken:()=>r.get(c),updateCachedToken:async u=>{try{await r.set(c,u)}catch(p){console.error("Failed updating access token in file: ",p)}},clearCachedToken:async()=>{try{await r.remove(c)}catch(u){console.error("Failed clearing access token in file: ",u)}}}}async function i(){let c=await ye(e),u;if(c==null)u=void 0;else{let p={};for(let d of Object.keys(c))p[d]=Ns(c[d]);u=p}return u}async function a(c){await r.clear();for(let[u,p]of Object.entries(c))p!=null&&await r.set(u,p)}async function s(){await r.clear()}return{loadZohoAccessTokenCache:n,readTokenFile:i,writeTokenFile:a,deleteTokenFile:s}}var _=class{constructor(t,o){this.config=t;this.cacheService=o;let r=t.zohoAccounts.accessTokenCache??o.loadZohoAccessTokenCache(t.zohoAccounts.serviceAccessTokenKey);this.zohoAccounts=vs(t.factoryConfig??{})({accessTokenCache:r,...t.zohoAccounts})}zohoAccounts;get accountsContext(){return this.zohoAccounts.accountsContext}get accessToken(){return $t(this.accountsContext)}};_=A([Pd(),k(0,Gs(Fe)),k(1,Gs(rt))],_);import{Inject as Ks,Injectable as Ed}from"@nestjs/common";var Tt=class{zohoCrm;factoryConfig;static assertValidConfig(t){Ze(t.zohoCrm)}};var Oe=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoCrm=ma({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoCrm)}zohoCrm;get crmContext(){return this.zohoCrm.crmContext}get zohoRateLimiter(){return this.zohoCrm.crmContext.zohoRateLimiter}get insertRecord(){return Hi(this.crmContext)}get upsertRecord(){return zi(this.crmContext)}get updateRecord(){return ji(this.crmContext)}get deleteRecord(){return Wi(this.crmContext)}get getRecordById(){return Bi(this.crmContext)}get getRecords(){return qi(this.crmContext)}get searchRecords(){return tr(this.crmContext)}get searchRecordsPageFactory(){return Ji(this.crmContext)}get getRelatedRecordsFunctionFactory(){return tt(this.crmContext)}get getEmailsForRecord(){return or(this.crmContext)}get getEmailsForRecordPageFactory(){return $i(this.crmContext)}get getAttachmentsForRecord(){return rr(this.crmContext)}get getAttachmentsForRecordPageFactory(){return Xi(this.crmContext)}get uploadAttachmentForRecord(){return Yi(this.crmContext)}get downloadAttachmentForRecord(){return Qi(this.crmContext)}get deleteAttachmentFromRecord(){return ea(this.crmContext)}get createNotes(){return nr(this.crmContext)}get deleteNotes(){return na(this.crmContext)}get createNotesForRecord(){return aa(this.crmContext)}get getNotesForRecord(){return ir(this.crmContext)}get getNotesForRecordPageFactory(){return ia(this.crmContext)}get executeRestApiFunction(){return ta(this.crmContext)}get createTagsForModule(){return ca(this.crmContext)}get deleteTag(){return ua(this.crmContext)}get getTagsForModule(){return pa(this.crmContext)}get addTagsToRecords(){return da(this.crmContext)}get removeTagsFromRecords(){return ha(this.crmContext)}};Oe=A([Ed(),k(0,Ks(Tt)),k(1,Ks(_))],Oe);import{ConfigModule as fF,ConfigService as RF}from"@nestjs/config";import{Inject as Vs,Injectable as Od}from"@nestjs/common";var Ct=class{zohoRecruit;factoryConfig;static assertValidConfig(t){Ze(t.zohoRecruit)}};var De=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoRecruit=vi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoRecruit)}zohoRecruit;get recruitContext(){return this.zohoRecruit.recruitContext}get zohoRateLimiter(){return this.zohoRecruit.recruitContext.zohoRateLimiter}get insertRecord(){return ii(this.recruitContext)}get upsertRecord(){return ai(this.recruitContext)}get updateRecord(){return si(this.recruitContext)}get deleteRecord(){return ci(this.recruitContext)}get getRecordById(){return ui(this.recruitContext)}get getRecords(){return pi(this.recruitContext)}get searchRecords(){return Lo(this.recruitContext)}get searchRecordsPageFactory(){return di(this.recruitContext)}get getRelatedRecordsFunctionFactory(){return Ye(this.recruitContext)}get getEmailsForRecord(){return Go(this.recruitContext)}get getEmailsForRecordPageFactory(){return li(this.recruitContext)}get getAttachmentsForRecord(){return Ko(this.recruitContext)}get getAttachmentsForRecordPageFactory(){return hi(this.recruitContext)}get uploadAttachmentForRecord(){return mi(this.recruitContext)}get downloadAttachmentForRecord(){return yi(this.recruitContext)}get deleteAttachmentFromRecord(){return gi(this.recruitContext)}get createNotes(){return jo(this.recruitContext)}get deleteNotes(){return Fi(this.recruitContext)}get createNotesForRecord(){return Ai(this.recruitContext)}get getNotesForRecord(){return Wo(this.recruitContext)}get getNotesForRecordPageFactory(){return Si(this.recruitContext)}get executeRestApiFunction(){return fi(this.recruitContext)}get associateCandidateRecordsWithJobOpenings(){return Ti(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecords(){return Ho(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecordsPageFactory(){return xi(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecords(){return zo(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecordsPageFactory(){return Zi(this.recruitContext)}get createTagsForModule(){return ki(this.recruitContext)}get getTagsForModule(){return Pi(this.recruitContext)}get addTagsToRecords(){return Ei(this.recruitContext)}get removeTagsFromRecords(){return Oi(this.recruitContext)}};De=A([Od(),k(0,Vs(Ct)),k(1,Vs(_))],De);import{ConfigModule as GF,ConfigService as KF}from"@nestjs/config";import{Inject as Hs,Injectable as Dd}from"@nestjs/common";var xt=class{zohoSign;factoryConfig;static assertValidConfig(t){Ze(t.zohoSign)}};var Zt=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoSign=va({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoSign)}zohoSign;get signContext(){return this.zohoSign.signContext}get zohoRateLimiter(){return this.zohoSign.signContext.zohoRateLimiter}get getDocument(){return ga(this.signContext)}get getDocuments(){return ar(this.signContext)}get getDocumentsPageFactory(){return fa(this.signContext)}get getDocumentFormData(){return Ra(this.signContext)}get retrieveFieldTypes(){return Ta(this.signContext)}get downloadPdf(){return Ca(this.signContext)}get downloadCompletionCertificate(){return xa(this.signContext)}get createDocument(){return Za(this.signContext)}get createDocumentFromTemplate(){return Fa(this.signContext)}get getTemplate(){return Sa(this.signContext)}get getTemplates(){return Aa(this.signContext)}get updateDocument(){return ba(this.signContext)}get sendDocumentForSignature(){return Ia(this.signContext)}get extendDocument(){return ka(this.signContext)}get deleteDocument(){return Pa(this.signContext)}get getEmbeddedSigningUrl(){return Ea(this.signContext)}};Zt=A([Dd(),k(0,Hs(xt)),k(1,Hs(_))],Zt);import{ConfigModule as uS,ConfigService as pS}from"@nestjs/config";function zs(e){return{...e,operationType:e.notifications.operation_type}}var js=Tn(e=>e.operationType),Ws=xn({configurerForAccessor:e=>{let t=Cn(e,r=>r);return{...e,handleRequestSubmitted:t("RequestSubmitted"),handleRequestViewed:t("RequestViewed"),handleRequestSigningSuccess:t("RequestSigningSuccess"),handleRequestCompleted:t("RequestCompleted"),handleRequestRejected:t("RequestRejected"),handleRequestRecalled:t("RequestRecalled"),handleRequestForwarded:t("RequestForwarded"),handleRequestExpired:t("RequestExpired")}}});var Bs="ZOHO_SIGN_WEBHOOK_SECRET_TOKEN",Me=class{zohoSignWebhook;static assertValidConfig(t){if(!t.zohoSignWebhook.webhookSecret)throw new Error("No Zoho Sign webhook secret specified.")}};import{Controller as Ld,Inject as Gd,Post as Kd,Req as Vd}from"@nestjs/common";import{Inject as Nd,Injectable as wd,Logger as Ud}from"@nestjs/common";import{createHmac as Md,timingSafeEqual as _d}from"node:crypto";var vd="x-zs-webhook-signature";function qs(e){let{secret:t}=e;return async(o,r)=>{let n=o.headers[vd],i={valid:!1};if(n){let a=r.toString("utf-8"),s=Md("sha256",t).update(a,"utf-8").digest("base64"),c=!1;try{let p=Buffer.from(n,"base64"),d=Buffer.from(s,"base64");p.length===d.length&&(c=_d(p,d))}catch{c=!1}let u;if(c)try{let p=JSON.parse(a);u=zs(p)}catch{c=!1}c&&u&&(i={valid:!0,event:u})}return i}}var he=class{logger=new Ud("ZohoSignWebhookService");_verifier;handler=js();configure=Ws(this.handler);constructor(t){let{webhookSecret:o}=t.zohoSignWebhook;this._verifier=qs({secret:o})}async updateForWebhook(t,o){let r=await this._verifier(t,o);r.valid?await this.updateForZohoSignEvent(r.event):this.logger.warn("Received invalid Zoho Sign webhook event.",t)}async updateForZohoSignEvent(t){await this.handler(t)||this.logger.warn("Received unexpected/unhandled Zoho Sign webhook event.",t)}};he=A([wd(),k(0,Nd(Me))],he);var _e=class{_zohoSignWebhookService;constructor(t){this._zohoSignWebhookService=t}async handleZohoSignWebhook(t,o){await this._zohoSignWebhookService.updateForWebhook(t,o)}};A([Kd(),k(0,Vd()),k(1,_n())],_e.prototype,"handleZohoSignWebhook",1),_e=A([Ld("/webhook/zoho/sign"),k(0,Gd(he))],_e);import{Module as Hd}from"@nestjs/common";import{ConfigModule as zd,ConfigService as jd}from"@nestjs/config";function Wd(e){let t={zohoSignWebhook:{webhookSecret:e.get(Bs)}};return Me.assertValidConfig(t),t}var Yt=class{};Yt=A([Hd({imports:[zd],controllers:[_e],providers:[{provide:Me,inject:[jd],useFactory:Wd},he],exports:[he]})],Yt);import{Inject as Js,Injectable as Bd}from"@nestjs/common";var Ft=class{zohoDesk;factoryConfig;static assertValidConfig(t){if(Ze(t.zohoDesk),!t.zohoDesk.orgId)throw new Error("No Zoho Desk orgId specified.")}};var ve=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoDesk=Ka({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoDesk)}zohoDesk;get deskContext(){return this.zohoDesk.deskContext}get zohoRateLimiter(){return this.zohoDesk.deskContext.zohoRateLimiter}get getTickets(){return sr(this.deskContext)}get getTicketById(){return Ha(this.deskContext)}get searchTickets(){return cr(this.deskContext)}get getTicketsForContact(){return za(this.deskContext)}get getTicketsForProduct(){return ja(this.deskContext)}get getTicketMetrics(){return Wa(this.deskContext)}get getAgentsTicketsCount(){return Ba(this.deskContext)}get getTicketsPageFactory(){return qa(this.deskContext)}get searchTicketsPageFactory(){return Ja(this.deskContext)}get getDepartments(){return Xa(this.deskContext)}get getDepartmentById(){return Ya(this.deskContext)}get getContacts(){return pr(this.deskContext)}get getContactById(){return es(this.deskContext)}get getContactsByIds(){return ts(this.deskContext)}get getContactsPageFactory(){return os(this.deskContext)}get getTicketTags(){return rs(this.deskContext)}get associateTicketTags(){return ns(this.deskContext)}get dissociateTicketTag(){return is(this.deskContext)}get searchTags(){return as(this.deskContext)}get getAllTags(){return ss(this.deskContext)}get getTicketFollowers(){return cs(this.deskContext)}get addTicketFollowers(){return us(this.deskContext)}get removeTicketFollowers(){return ps(this.deskContext)}get getTicketAttachments(){return ls(this.deskContext)}get deleteTicketAttachment(){return hs(this.deskContext)}get getTicketComments(){return ys(this.deskContext)}get getTicketCommentById(){return gs(this.deskContext)}get createTicketComment(){return fs(this.deskContext)}get deleteTicketComment(){return Rs(this.deskContext)}get getTicketTimer(){return Ts(this.deskContext)}get performTicketTimerAction(){return Cs(this.deskContext)}get getTicketTimeEntries(){return xs(this.deskContext)}get getTicketTimeEntryById(){return Zs(this.deskContext)}get getTicketTimeEntrySummation(){return Fs(this.deskContext)}get getTicketThreads(){return lr(this.deskContext)}get getTicketThreadById(){return bs(this.deskContext)}get getTicketThreadsPageFactory(){return Is(this.deskContext)}get getTicketActivities(){return hr(this.deskContext)}get getTicketActivitiesPageFactory(){return ks(this.deskContext)}get getAgents(){return mr(this.deskContext)}get getAgentById(){return Es(this.deskContext)}get getAgentsByIds(){return Os(this.deskContext)}get getMyInfo(){return Ds(this.deskContext)}get getAgentsPageFactory(){return Ms(this.deskContext)}};ve=A([Bd(),k(0,Js(Ft)),k(1,Js(_))],ve);import{ConfigModule as pA,ConfigService as dA}from"@nestjs/config";function qd(e){return`${e.clientId}:${e.refreshToken}`}function nt(e){let t=ws([Us(),Ls(ht())]),o=new Map;function r(p,d){let y=qd(p),m=o.get(y),T;if(m)T=m;else{let g={zohoAccounts:{serviceAccessTokenKey:d,refreshToken:p.refreshToken,clientId:p.clientId,clientSecret:p.clientSecret,apiUrl:p.region??"us"}};T=new _(g,t),o.set(y,T)}return T}let n,i=mt(e,"recruit");if(i){let p=r(i,"recruit"),d={zohoRecruit:{apiUrl:i.apiMode}};n=new De(d,p)}let a,s=mt(e,"crm");if(s){let p=r(s,"crm"),d={zohoCrm:{apiUrl:s.apiMode}};a=new Oe(d,p)}let c,u=mt(e,"desk");if(u?.orgId){let p=r(u,"desk"),d={zohoDesk:{apiUrl:u.apiMode,orgId:u.orgId}};c=new ve(d,p)}return{recruitApi:n,crmApi:a,deskApi:c}}ro([...to,/1000\.\w{20,}/g]);function $s(e){let t;return e instanceof K?t={ok:!1,error:de(e.message),code:"TOKEN_EXPIRED",suggestion:"Run: zoho-cli auth check"}:e instanceof qe?t={ok:!1,error:de(e.message),code:"AUTH_ERROR",suggestion:"Check your client ID, secret, and refresh token."}:e instanceof Je?t={ok:!1,error:de(e.message),code:"RATE_LIMITED",suggestion:"Wait and retry. Zoho rate limit exceeded."}:e instanceof G?t={ok:!1,error:de(e.message),code:"API_ERROR"}:t=no(e),t}Ar(e=>e instanceof K||e instanceof qe||e instanceof Je||e instanceof G?$s(e):void 0);function h(e){console.log(JSON.stringify($s(e)))}var Xs={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"},Ys={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"]};function Jd(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 $d={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:"http://localhost/oauth",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",default:"recruit,crm,desk",describe:"Comma-separated products for OAuth scopes (recruit,crm,desk,sign)"}).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:[...Nt],describe:"Store credentials for a specific product instead of shared"}).option("org-id",{type:"string",describe:"Zoho Desk organization ID"}).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"]]),handler:async e=>{try{let t=await H(),o=Xd(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 Yd(o,t):o.code?await Qd(o,t):await el(o,t)}catch(t){h(t),process.exit(1)}}};function Xd(e,t){let o=e.region??t?.shared?.region??"us";return{product:e.product,clientId:e.clientId??t?.shared?.clientId,clientSecret:e.clientSecret??t?.shared?.clientSecret,redirectUri:e.redirectUri,region:o,scopes:e.scopes.split(",").map(r=>r.trim()),code:Jd(e.code),token:e.token,accountsUrl:Xs[o]??Xs.us,apiMode:e.apiMode,orgId:e.orgId}}async function Qs(e,t,o){return e.product?te({shared:o??{clientId:"",clientSecret:"",refreshToken:""},[e.product]:{...t,apiUrl:e.apiMode,orgId:e.product==="desk"?e.orgId:void 0}}):te({shared:{...t,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0})}async function Yd(e,t){let o={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:e.token},r=await Qs(e,o,t?.shared);l({success:!0,...e.product?{product:e.product}:{},refreshToken:ge(e.token),configSaved:!0,configuredProducts:oe(r)})}async function Qd(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}),i=await(await fetch(o,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()})).json();if(i.error)throw new Error(`Token exchange failed: ${i.error}`);let a=i.refresh_token;if(!a)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:a},c=await Qs(e,s,t?.shared);l({step:2,success:!0,product:e.product??"shared",refreshToken:ge(a),accessToken:i.access_token?ge(i.access_token):null,scope:i.scope,configSaved:!0,configuredProducts:oe(c)})}async function el(e,t){let o=e.scopes.flatMap(n=>Ys[n]??[]);if(o.length===0)throw new Error(`No valid products specified. Choose from: ${Object.keys(Ys).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 te({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}),l({step:1,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 --code "PASTE_REDIRECT_URL_OR_AUTH_CODE"'})}var tl={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:[...Nt],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:"Zoho Desk organization ID"}).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 te({shared:(await H())?.shared??{clientId:"",clientSecret:"",refreshToken:""},[t]:{...o,apiUrl:e.apiMode,orgId:t==="desk"?e.orgId:void 0}}):r=await te({shared:{...o,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),l({saved:!0,product:t??"shared",configuredProducts:oe(r)})}catch(t){h(t),process.exit(1)}}},ol={command:"show",describe:"Show current configuration (secrets masked)",builder:e=>e,handler:async()=>{try{let o=function(r){return r?{clientId:r.clientId?ge(r.clientId):void 0,clientSecret:r.clientSecret?ge(r.clientSecret):void 0,refreshToken:r.refreshToken?ge(r.refreshToken):void 0}:void 0};var e=o;let t=await H();if(!t){l({configured:!1});return}l({configured:!0,shared:{...o(t.shared),region:t.shared?.region??"us",apiMode:t.shared?.apiMode??"production"},recruit:t.recruit?{...o(t.recruit),apiUrl:t.recruit.apiUrl}:null,crm:t.crm?{...o(t.crm),apiUrl:t.crm.apiUrl}:null,desk:t.desk?{...o(t.desk),apiUrl:t.desk.apiUrl,orgId:t.desk.orgId}:null,configuredProducts:oe(t)})}catch(t){h(t),process.exit(1)}}},rl={command:"check",describe:"Verify credentials by exchanging tokens",builder:e=>e,handler:async()=>{try{let e=await H();if(e){let t=oe(e);if(t.length===0)l({authenticated:!1,error:"No products have complete credentials. Run: zoho-cli auth setup"});else{let o=nt(e),r={};for(let n of t)try{let i;if(n==="recruit"?i=o.recruitApi:n==="crm"?i=o.crmApi:i=o.deskApi,!i){r[n]={authenticated:!1,error:"Not configured"};continue}let s=await i.zohoAccountsApi.accessToken();r[n]={authenticated:!0,scope:s.scope,expiresIn:s.expires_in}}catch(i){let a=i instanceof Error?i.message:String(i);r[n]={authenticated:!1,error:a}}l({products:r})}}else l({authenticated:!1,error:"No credentials configured. Run: zoho-cli auth setup"})}catch(e){h(e),process.exit(1)}}},nl={command:"clear",describe:"Remove stored credentials and token cache",builder:e=>e,handler:async()=>{try{await zn(),l({cleared:!0})}catch(e){h(e),process.exit(1)}}},ec={command:"auth",describe:"Manage Zoho API credentials",builder:e=>e.command($d).command(tl).command(ol).command(rl).command(nl).demandCommand(1,"Please specify an auth subcommand."),handler:S};import{access as il,constants as al}from"node:fs";import{dirname as sl}from"node:path";var tc={command:"doctor",describe:"Check CLI configuration and connectivity",builder:e=>e,handler:async()=>{let e=await H(),t=[];t.push(cl(e));let o=ul(e);if(o&&t.push(o),t.push(await pl()),e){let n=oe(e);t.push(dl(n),...await ll(e,n));let i=yl(e,n);i&&t.push(i)}let r=t.every(n=>n.status==="pass");l({checks:t,healthy:r}),r||process.exit(t.some(n=>n.status==="fail")?1:0)}};function cl(e){return e?{name:"config",status:"pass",message:`Config loaded from ${lt()}`}:{name:"config",status:"fail",message:"No config found. Run: zoho-cli auth setup"}}function ul(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 pl(){let e=sl(ht());return await gl(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 dl(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 ll(e,t){let o=nt(e),r=[];for(let n of t)r.push(await hl(o,n));return r}async function hl(e,t){let o=ml(e,t);if(!o)return{name:`${t}-token`,status:"warn",message:`${t}: API not configured`};let r;try{let i=await o.zohoAccountsApi.accessToken();r={name:`${t}-token`,status:"pass",message:`${t}: Token exchange successful. Scope: ${i.scope}`}}catch(n){let i=n instanceof Error?n.message:String(n);r={name:`${t}-token`,status:"fail",message:`${t}: Token exchange failed: ${i}`}}return r}function ml(e,t){return t==="recruit"?e.recruitApi:t==="crm"?e.crmApi:e.deskApi}function yl(e,t){if(e.desk?.orgId)return{name:"desk-org-id",status:"pass",message:`Desk org ID configured: ${e.desk.orgId}`};if(!t.includes("desk"))return{name:"desk-org-id",status:"warn",message:"No Desk org ID. Desk commands unavailable."}}function gl(e){return new Promise(t=>{il(e,al.W_OK,o=>{t(!o)})})}var oc=Dn({notInitializedMessage:"CLI context not initialized. This is a bug."});function rc(e){return async t=>{let o=t._?.[0];if(!(typeof o=="string"&&e.has(o)))try{let r=await H();r||(h(new Error("Not authenticated. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z")),process.exit(4)),oe(r).length===0&&(h(new Error("No products configured with complete credentials. Run: zoho-cli auth setup")),process.exit(4)),oc.set(nt(r))}catch(r){h(r),process.exit(4)}}}function fr(e){return oc.require()}function W(e){let{recruitApi:t}=fr(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 B(e){let{crmApi:t}=fr(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}=fr(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 ue(e){return Zo(e.option("page",{type:"number",default:1,describe:"Page number (1-based)"}).option("per-page",{type:"number",default:20,describe:"Records per page"}))}function E(e){return Zo(e.option("from",{type:"number",default:1,describe:"Start index (1-based)"}).option("limit",{type:"number",default:25,describe:"Max records (max 50)"}))}function D(e){return e.option("module",{alias:"m",type:"string",demandOption:!0,describe:"Zoho module name (e.g. Candidates, Contacts, Leads)"})}function Se(e){return e.option("id",{type:"string",demandOption:!0,describe:"Record ID"})}function St(e,t=!1){return e.option("fields",{type:"string",demandOption:t,describe:"Comma-separated field names to return"})}function Qt(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 fl={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},O={nextInput:(e,t)=>{let o=e.limit??25,r=t.data?.length??0,n;if(o<=0||r<o)n=void 0;else{let i=e.from??1;n={...e,from:i+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}};async function pe(e){let{argv:t,initialInput:o,fetchPage:r}=e,n=await I({initialInput:o,fetchPage:r,adapter:fl,multiplePages:t.multiplePages,multiplePagesOutput:t.multiplePagesOutput,dumpOutput:t.dumpOutput,dumpMerge:t.dumpMerge});if(n.handled===!1){let i=n.result;l(i.data,{page:i.info?.page,per_page:i.info?.per_page,more_records:i.info?.more_records})}}var Rl={command:"list",describe:"List records from a module",builder:e=>Qt(St(ue(D(e)))),handler:async e=>{try{let t=W(e),o={module:e.module,page:e.page,per_page:e.perPage,fields:e.fields,sort_by:e.sortBy,sort_order:e.sortOrder};await pe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){h(t),process.exit(1)}}},Tl={command:"get",describe:"Get a record by ID",builder:e=>Se(D(e)),handler:async e=>{try{let o=await W(e).getRecordById({module:e.module,id:e.id});l(o)}catch(t){h(t),process.exit(1)}}},Cl={command:"search",describe:"Search records in a module",builder:e=>ue(D(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=W(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 pe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){h(t),process.exit(1)}}},xl={command:"insert",describe:"Insert a record into a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=W(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Zl={command:"upsert",describe:"Upsert a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=W(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Fl={command:"update",describe:"Update a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=W(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Sl={command:"delete",describe:"Delete records from a module",builder:e=>D(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=W(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});l(r)}catch(t){h(t),process.exit(1)}}},Al={command:"emails",describe:"Get emails for a record",builder:e=>ue(Se(D(e))),handler:async e=>{try{let t=W(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){h(t),process.exit(1)}}},bl={command:"attachments",describe:"Get attachments for a record",builder:e=>ue(Se(D(e))),handler:async e=>{try{let t=W(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){h(t),process.exit(1)}}},nc={command:"recruit",describe:"Zoho Recruit operations",builder:e=>e.command(Rl).command(Tl).command(Cl).command(xl).command(Zl).command(Fl).command(Sl).command(Al).command(bl).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:S};var Il={command:"list",describe:"List records from a module",builder:e=>Qt(St(ue(D(e)),!0)),handler:async e=>{try{let t=B(e),o={module:e.module,fields:e.fields,page:e.page,per_page:e.perPage,sort_by:e.sortBy,sort_order:e.sortOrder};await pe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){h(t),process.exit(1)}}},kl={command:"get",describe:"Get a record by ID",builder:e=>Se(D(e)),handler:async e=>{try{let o=await B(e).getRecordById({module:e.module,id:e.id});l(o)}catch(t){h(t),process.exit(1)}}},Pl={command:"search",describe:"Search records in a module",builder:e=>ue(D(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=B(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 pe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){h(t),process.exit(1)}}},El={command:"insert",describe:"Insert a record into a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=B(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Ol={command:"upsert",describe:"Upsert a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=B(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Dl={command:"update",describe:"Update a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=B(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Ml={command:"delete",describe:"Delete records from a module",builder:e=>D(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=B(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});l(r)}catch(t){h(t),process.exit(1)}}},_l={command:"emails",describe:"Get emails for a record",builder:e=>ue(Se(D(e))),handler:async e=>{try{let t=B(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){h(t),process.exit(1)}}},vl={command:"attachments",describe:"Get attachments for a record",builder:e=>St(ue(Se(D(e))),!0),handler:async e=>{try{let t=B(e),o={module:e.module,id:e.id,fields:e.fields,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){h(t),process.exit(1)}}},ic={command:"crm",describe:"Zoho CRM operations",builder:e=>e.command(Il).command(kl).command(Pl).command(El).command(Ol).command(Dl).command(Ml).command(_l).command(vl).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:S};var Nl={command:"list",describe:"List tickets",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTickets(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},wl={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});l(o)}catch(t){h(t),process.exit(1)}}},Ul={command:"search",describe:"Search tickets",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.searchTickets(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Ll={command:"by-contact <contactId>",describe:"List tickets for a contact",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketsForContact(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Gl={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});l(o)}catch(t){h(t),process.exit(1)}}},Kl={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});l(r)}catch(t){h(t),process.exit(1)}}},ac={command:"tickets",describe:"Desk ticket operations",builder:e=>e.command(Nl).command(wl).command(Ul).command(Ll).command(Gl).command(Kl).demandCommand(1),handler:S};var Vl={command:"list",describe:"List departments",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getDepartments(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Hl={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});l(o)}catch(t){h(t),process.exit(1)}}},sc={command:"departments",describe:"Desk department operations",builder:e=>e.command(Vl).command(Hl).demandCommand(1),handler:S};var zl={command:"list",describe:"List contacts",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getContacts(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},jl={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});l(o)}catch(t){h(t),process.exit(1)}}},cc={command:"contacts",describe:"Desk contact operations",builder:e=>e.command(zl).command(jl).demandCommand(1),handler:S};var Wl={command:"list",describe:"List agents",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getAgents(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Bl={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});l(o)}catch(t){h(t),process.exit(1)}}},ql={command:"my-info",describe:"Get current authenticated agent info",builder:e=>e,handler:async e=>{try{let o=await x(e).getMyInfo();l(o)}catch(t){h(t),process.exit(1)}}},uc={command:"agents",describe:"Desk agent operations",builder:e=>e.command(Wl).command(Bl).command(ql).demandCommand(1),handler:S};var Jl={command:"list",describe:"List all tags",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getAllTags(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},$l={command:"search",describe:"Search tags",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.searchTags(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Xl={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});l(o)}catch(t){h(t),process.exit(1)}}},Yl={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});l(r)}catch(t){h(t),process.exit(1)}}},Ql={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}),l({removed:!0})}catch(t){h(t),process.exit(1)}}},pc={command:"tags",describe:"Desk tag operations",builder:e=>e.command(Jl).command($l).command(Xl).command(Yl).command(Ql).demandCommand(1),handler:S};var eh={command:"list <ticketId>",describe:"List comments on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketComments(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},th={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});l(o)}catch(t){h(t),process.exit(1)}}},oh={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});l(o)}catch(t){h(t),process.exit(1)}}},rh={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}),l({deleted:!0})}catch(t){h(t),process.exit(1)}}},dc={command:"comments",describe:"Desk comment operations",builder:e=>e.command(eh).command(th).command(oh).command(rh).demandCommand(1),handler:S};var nh={command:"list <ticketId>",describe:"List attachments on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketAttachments(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},ih={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}),l({deleted:!0})}catch(t){h(t),process.exit(1)}}},lc={command:"attachments",describe:"Desk attachment operations",builder:e=>e.command(nh).command(ih).demandCommand(1),handler:S};var ah={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});l(o)}catch(t){h(t),process.exit(1)}}},sh={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}),l({added:!0})}catch(t){h(t),process.exit(1)}}},ch={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}),l({removed:!0})}catch(t){h(t),process.exit(1)}}},hc={command:"followers",describe:"Desk ticket follower operations",builder:e=>e.command(ah).command(sh).command(ch).demandCommand(1),handler:S};var uh={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});l(o)}catch(t){h(t),process.exit(1)}}},ph={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});l(o)}catch(t){h(t),process.exit(1)}}},dh={command:"entries <ticketId>",describe:"List time entries for a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketTimeEntries(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},lh={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});l(o)}catch(t){h(t),process.exit(1)}}},mc={command:"time",describe:"Desk time tracking operations",builder:e=>e.command(uh).command(ph).command(dh).command(lh).demandCommand(1),handler:S};var hh={command:"list <ticketId>",describe:"List threads on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketThreads(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},mh={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});l(o)}catch(t){h(t),process.exit(1)}}},yc={command:"threads",describe:"Desk ticket thread operations",builder:e=>e.command(hh).command(mh).demandCommand(1),handler:S};var yh={command:"list <ticketId>",describe:"List activities on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketActivities(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},gc={command:"activities",describe:"Desk ticket activity operations",builder:e=>e.command(yh).demandCommand(1),handler:S};var fc={command:"desk",describe:"Zoho Desk operations",builder:e=>e.command(ac).command(sc).command(cc).command(uc).command(pc).command(dc).command(lc).command(hc).command(mc).command(yc).command(gc).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:S};var Rc={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"],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"]]),handler:async e=>{try{let t=e.product,o=e.method,r=e.path,n;switch(t){case"recruit":n=W(e).recruitContext;break;case"crm":n=B(e).crmContext;break;case"desk":n=x(e).deskContext;break;default:throw new Error(`Unknown product: ${t}`)}let i=r;if(e.query){let c=JSON.parse(e.query),u=new URLSearchParams(c),p=i.includes("?")?"&":"?";i=`${i}${p}${u.toString()}`}let a={method:o};e.body&&(a.body=e.body,a.headers={"Content-Type":"application/json"});let s=await n.fetchJson(i,a);l(s)}catch(t){h(t),process.exit(1)}}};var Rh=Kn({cliName:"zoho-cli",loadOutputConfig:async()=>(await H())?.output,mergeOutputConfig:e=>te({output:e}),clearOutputConfig:Hn}),Th=[nc,ic,fc,Rc],Tc=[ec,Rh,tc];function Ch(e){return e.command.split(" ")[0]}var Cc=new Set(Tc.map(Ch)),xh=Gn({cliName:"zoho-cli",skipCommands:Cc,loadOutputConfig:async()=>(await H())?.output,saveCommandOutputConfig:async(e,t)=>{await te({output:{commands:{[e]:t}}})}});async function Zh(){try{await gh(fh(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([rc(Cc),xh],!0).command(Tc).command(Th).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){h(e),process.exit(1)}}await Zh();
8
+ `:void 0;p({mainContent:v,pickContent:V,append:b})})};s={mainPath:i,pickPath:a,writePage:g=>{let Z=o==="concat"&&!(c===0);t==="raw"?d(g,Z):t==="page_by_line"?y(g,Z):m(g,Z),c+=1},close:()=>{}}}else s={mainPath:void 0,pickPath:void 0,writePage:()=>{},close:()=>{}};return s}async function Pp(e){let{initialInput:t,requestedPages:o,fetchPage:r,adapter:n,stream:i,shouldCollectPages:a,shouldCollectRecords:s}=e,c={pagesFetched:0,totalRecords:0,hasMorePagesAvailable:!1,lastResult:void 0,lastInput:t,collectedPages:[],collectedRecords:[]},u=t;for(let p=0;p<o;p++){let d=await r(u);if(c.pagesFetched+=1,c.totalRecords+=n.countOf(d),c.lastResult=d,c.lastInput=u,i.writePage(d),a)c.collectedPages.push(d);else if(s)for(let m of d.data??[])c.collectedRecords.push(m);c.hasMorePagesAvailable=n.hasMorePagesAvailable(u,d);let y=n.nextInput(u,d);if(!y)break;u=y}return c}function Ep(e){let{multiplePagesOutput:t,summaryMeta:o,state:r,adapter:n,pickFilter:i}=e;if(t==="meta")console.log(JSON.stringify({ok:!0,meta:o}));else if(t==="pages"){let a=i?r.collectedPages.map(s=>({...s,data:Ae(s.data,i)})):r.collectedPages;console.log(JSON.stringify({ok:!0,data:a,meta:o}))}else{let a=r.lastResult?n.metaOf(r.lastInput,r.lastResult):{},s=i?Ae(r.collectedRecords,i):r.collectedRecords;console.log(JSON.stringify({ok:!0,data:s,meta:{...a,...o}}))}}async function I(e){let{initialInput:t,fetchPage:o,adapter:r,multiplePagesOutput:n,dumpOutput:i,dumpMerge:a}=e,s=Math.max(1,Math.floor(e.multiplePages||1)),c;if(s<=1)c={handled:!1,result:await o(t)};else{let u=At();u.dumpDir||console.error("[cli] warning: --multiple-pages used without --dump-dir; results not persisted.");let p=Vn({dumpOutput:i,dumpMerge:a}),d;try{d=await Pp({initialInput:t,requestedPages:s,fetchPage:o,adapter:r,stream:p,shouldCollectPages:n==="pages",shouldCollectRecords:n==="merged_page"})}finally{p.close()}let y={pagesFetched:d.pagesFetched,totalRecords:d.totalRecords,hasMorePagesAvailable:d.hasMorePagesAvailable,dumpFile:p.mainPath??null};p.pickPath&&(y.dumpFilePick=p.pickPath),Ep({multiplePagesOutput:n,summaryMeta:y,state:d,adapter:r,pickFilter:u.pick}),c={handled:!0}}return c}import gh from"yargs";import{hideBin as fh}from"yargs/helpers";import{writeFile as Op,mkdirSync as Dp}from"node:fs";import{join as Io}from"node:path";import{homedir as Mp}from"node:os";var Nt=["recruit","crm","desk"];function ko(){return Io(Mp(),".zoho-cli")}function lt(){return Io(ko(),"config.json")}function ht(){return Io(ko(),".tokens.json")}function Pe(e,t){return(t?process.env[`ZOHO_${t}_${e}`]:void 0)??process.env[`ZOHO_${e}`]}async function H(){let e=lt(),t=await ye(e),o=Pe("ACCOUNTS_CLIENT_ID"),r=Pe("ACCOUNTS_CLIENT_SECRET"),n=Pe("ACCOUNTS_REFRESH_TOKEN"),i=o&&r&&n,a;if(!t&&!i)a=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 p=u.toUpperCase(),d=Pe("API_URL",p),y=u==="desk"?Pe("DESK_ORG_ID"):void 0,m=t?.[u],T=process.env[`ZOHO_${p}_ACCOUNTS_CLIENT_ID`],g=process.env[`ZOHO_${p}_ACCOUNTS_CLIENT_SECRET`],R=process.env[`ZOHO_${p}_ACCOUNTS_REFRESH_TOKEN`],Z=T||g||R,F;return!m&&!Z&&!y?F=void 0:F={clientId:T??m?.clientId,clientSecret:g??m?.clientSecret,refreshToken:R??m?.refreshToken,apiUrl:d??m?.apiUrl,orgId:y??m?.orgId},F};a={shared:s,recruit:c("recruit")??t?.recruit,crm:c("crm")??t?.crm,desk:c("desk")??t?.desk,output:t?.output}}return a}function mt(e,t){let o=e[t],r=e.shared,n=o?.clientId??r.clientId,i=o?.clientSecret??r.clientSecret,a=o?.refreshToken??r.refreshToken,s;return!n||!i||!a?s=void 0:s={clientId:n,clientSecret:i,refreshToken:a,region:r.region??"us",apiMode:o?.apiUrl??r.apiMode??"production",orgId:o?.orgId},s}async function _p(e){let t=lt();return Dp(ko(),{recursive:!0}),new Promise((o,r)=>{Op(t,JSON.stringify(e,null,2),{},n=>{n?r(n):o()})})}async function te(e){let t=await H(),o={shared:{...t?.shared,...e.shared},recruit:e.recruit===void 0?t?.recruit:{...t?.recruit,...e.recruit},crm:e.crm===void 0?t?.crm:{...t?.crm,...e.crm},desk:e.desk===void 0?t?.desk:{...t?.desk,...e.desk},output:e.output===void 0?t?.output:Ao(t?.output,e.output)};return await _p(o),o}async function Hn(){await te({output:{dumpDir:void 0,pick:void 0,commands:void 0}})}async function zn(){let e=lt(),t=ht();await ut(e),await ut(t)}function oe(e){return Nt.filter(t=>{let o=mt(e,t);return o!=null&&(t!=="desk"||o.orgId!=null)})}import{Inject as Gs,Injectable as Pd}from"@nestjs/common";function je(){return{data:[],info:{page:1,per_page:100,count:0,more_records:!1}}}function N(e,t){return Ve({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.info?.more_records??!1}},buildInputForNextPage:function(o,r,n){return{...r,page:Fn(o),per_page:n.maxItemsPerPage??r.per_page}}})}function wt(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 We="Candidates",jn="Job_Openings",Ut="Notes",Wn="Emails",yt="Attachments";function Lt(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=Gt(o);break}default:break}return t}function Gt(e){function t(a){let s;return typeof a=="object"?Array.isArray(a)?s=a.map(Po):a&&(s=Gt(a)):s=a,s}function o(a,s){return a.length>1?`(${a.join(s)})`:a[0]}function r(a,s){let c=me(a.map(t)).flatMap(C);return o(c,s)}let n=e.or?r(e.or,"or"):void 0,i=n;return e.and&&(i=r([r(e.and,"and"),n],"and")),i}var Bn=an({escapeTargets:["(",")",","],escapeCharacter:e=>`\\\\${e}`});function Po(e){let t=Bn(e.value);return`(${e.field}:${e.filter}:${t})`}var qn=Lt;import{BaseError as Bp}from"make-error";import{BaseError as Np}from"make-error";var wp="__internal_data_array_blank_error";function Up(e){return Array.isArray(e?.data)}var $e="success";function $(e){let t=typeof e,o;return t==="object"?o=e:o={code:e,message:""},o}var fe=class extends Np{constructor(o){super(o.message);this.error=o}get code(){return this.error.code}},G=class extends fe{constructor(o,r,n){super(o);this.data=o;this.errorResponseData=r;this.responseError=n}},Be=class extends G{constructor(t,o){super({code:wp,message:"Check data for individual errors."},t,o)}get errorDataArray(){return this.errorResponseData.data}};function re(e,t){let{logDataArrayErrors:o=!1}=t??{};return r=>{r instanceof Be&&!o||(r instanceof G?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 ne(e,t){return(o,r=t,n)=>async(i,a)=>{try{return await o(i,a)}catch(s){if(s instanceof Ke){let c=await e(s);if(c)throw r(c),n?.(c),c}throw s}}}function ie(e){return(t,o)=>{if(t?.error!=null){let n=new Ke(o),i=e(t,n);if(i)throw i}return t}}var Lp="INTERNAL_ERROR",Gp="INVALID_TOKEN",K=class extends G{},Jn="FAILURE",Eo=class extends G{},Kp="4834",qe=class extends G{},Vp="INVALID_QUERY",Oo=class extends G{get details(){return this.error.details}},Kt="MANDATORY_NOT_FOUND",Re="DUPLICATE_DATA",Vt="INVALID_DATA",Hp="TOO_MANY_REQUESTS",$n=429,zp="X-RATELIMIT-LIMIT",jp="X-RATELIMIT-REMAINING",Wp="X-RATELIMIT-RESET",Xn=100,Yn=be;function Do(e){let t=e.get(zp),o=e.get(jp),r=e.get(Wp),n=null;if(t!=null&&o!=null&&r!=null){let i=Number(t),a=Number(o),s=Number(r),c=new Date(s);n={limit:i,remaining:a,reset:s,resetAt:c}}return n}var Je=class extends G{get headerDetails(){return Do(this.responseError.response.headers)}};function ae(e,t){let o;if(Up(e))o=new Be(e,t);else{let r=le(e,t);if(r){let n=$(r);switch(n.code){case Lp:o=new Eo(n,e,t);break;case Gp:o=new K(n,e,t);break;case Kp:o=new qe(n,e,t);break;case Vp:o=new Oo(n,e,t);break;case Hp:o=new Je(n,e,t);break;default:o=new G(n,e,t);break}}}return o}function le(e,t){return e.error??e.data?.[0]??(t.response.ok?void 0:e)}var Qn="ALREADY_ASSOCIATED",Mo=class extends Bp{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}},Xe=class extends fe{},_o=class extends Xe{},vo=class extends Xe{},Ht=class extends Xe{get invalidFieldDetails(){return this.error.details}},No=class extends Ht{};function ei(e){let t;switch(e.code){case Vt:{let o=new Ht(e);o.invalidFieldDetails.id?t=new No(e):t=o;break}case Kt:t=new _o(e);break;case Re:t=new vo(e);break;default:t=new Xe(e);break}return t}function ti(e,t){return o=>{if(!o?.data?.length)throw new Mo(e,t);return o}}var qp=re("ZohoRecruit");async function Jp(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=oi(t,e)),o}function oi(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var ri=ie(oi),ni=ne(Jp,qp);import{BaseError as $p}from"make-error";function Uo(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v2/${n}${t}`,M(o,{data:C(r)})).then(i=>{let a=Array.isArray(r),s=se(C(r),i.data),c;if(a)c=s;else{let{successItems:u,errorItems:p}=s;if(p[0]!=null)throw ei(p[0].result);c=u[0].result.details}return c}))}function ii(e){return Uo(e,"","POST")}function ai(e){return Uo(e,"/upsert","POST")}function si(e){return Uo(e,"","PUT")}function ci(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v2/${o}?${f({ids:t,wf_trigger:r})}`,M("DELETE")).then(Xp)}function ui(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}`,M("GET")).then(ti(t.module)).then(o=>o.data[0])}function pi(e){return(t=>e.fetchJson(`/v2/${t.module}?${Ri(t).toString()}`,M("GET")))}function Lo(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=qn(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 Ri(r)}return o=>e.fetchJson(`/v2/${o.module}/search?${t(o).toString()}`,M("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function di(e){return N(Lo(e))}function Ye(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v2/${n.module}/${n.id}/${o}?${Vo(n,n.filter).toString()}`,M("GET")).then(i=>i??(r===!1?i:je()))}}function Go(e){return Ye(e)({targetModule:Wn})}function li(e){return N(Go(e))}function Ko(e){return Ye(e)({targetModule:yt})}function hi(e){return N(Ko(e))}var vR=20*1024*1024;function mi(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n,attachmentUrl:i}=t,a={attachments_category_id:P(o),attachments_category:P(r)};if(!a.attachments_category_id?.length&&!a.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let s=`/v2/${t.module}/${t.id}/${yt}?${f(a).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(i){let u=`${s}&${f({attachment_url:i}).toString()}`;c=e.fetch(u,{method:"POST"})}else throw new Error("file or attachmentUrl must be provided.");return c}}function yi(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${yt}/${t.attachment_id}`,{method:"GET"}).then(Pt)}function gi(e){return t=>e.fetch(`/v2/${t.module}/${t.id}/${yt}/${t.attachment_id}`,{method:"DELETE"})}var wo=class extends $p{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}};function fi(e){return t=>{let r=f(t.params).toString(),n=!!t.apiKey,i=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),a=`/v2/functions/${t.functionName}/actions/execute?${i}`,c=`${n&&t.apiUrl!=null?wt(t.apiUrl):""}${a}`;return e.fetchJson(c,M("POST")).then(u=>{if(u.code!=="success")throw new wo(u);return u.details})}}function Ri(...e){return f(e,{omitKeys:"module"})}function Vo(...e){return f(e,{omitKeys:["id","module"]})}function M(e,t){return{method:e,body:t??void 0}}function Xp(e){let{data:t}=e,o=[],r=[];return t.forEach(i=>{i.status===$e?o.push(i):r.push(i)}),{...e,successItems:o,errorItems:r}}function se(e,t){let o=[],r=[];return e.forEach((i,a)=>{let s=t[a];s.status===$e?o.push({input:i,result:s}):r.push({input:i,result:s})}),{successItems:o,errorItems:r}}function Ti(e){return t=>e.fetchJson(`/v2/${We}/actions/associate`,M("PUT",{data:C(t)})).then(o=>{let r=o.data.map(()=>t),n=se(r,o.data),{included:i,excluded:a}=Ue(n.errorItems,s=>s.result.code===Jn&&s.result.details.error[0].code===Qn);return{...n,errorItems:a,alreadyAssociatedErrorItems:i,allErrorItems:n.errorItems}})}function Ci(e){return t=>e.fetchJson(`/v2/${t.module}/${t.id}/associate?${Vo(t).toString()}`,M("GET")).then(o=>o??je())}function Ho(e){let t=Ci(e);return o=>t({...o,module:We})}function xi(e){return N(Ho(e))}function zo(e,t=jn){let o=Ci(e);return r=>o({...r,module:t})}function Zi(e){return N(zo(e))}function jo(e){return t=>e.fetchJson(`/v2/${Ut}`,M("POST",{data:t.data})).then(o=>se(C(t.data),o.data))}function Fi(e){return t=>e.fetchJson(`/v2/${Ut}?${f({ids:t.ids})}`,M("DELETE")).then(o=>se(C(t.ids),o.data))}function Wo(e){return Ye(e)({targetModule:Ut})}function Si(e){return N(Wo(e))}function Ai(e){let t=jo(e);return o=>{let{module:r,id:n,notes:i}=o,a={data:C(i).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(a)}}function ki(e){return t=>e.fetchJson(`/v2/settings/tags?${f({module:t.module})}`,M("POST",{tags:C(t.tags)})).then(o=>{let r=se(C(t.tags),o.tags),{included:n,excluded:i}=Ue(r.errorItems,a=>a.result.code===Re);return{...r,errorItems:i,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function Pi(e){return t=>e.fetchJson(`/v2/settings/tags?${f({module:t.module,my_tags:t.my_tags})}`,M("GET")).then(o=>({...o,data:o.tags}))}var bi=100;function Ei(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>bi)throw new Error(`Cannot add tags to more than ${bi} records at once.`);return e.fetchJson(`/v2/${We}/actions/add_tags?${f({tag_names:t.tag_names,ids:t.ids})}`,M("POST")).then(o=>{let r=o.data.map(()=>t);return se(r,o.data)})}}var Ii=100;function Oi(e){return t=>{if(Array.isArray(t.ids)&&t.ids.length>Ii)throw new Error(`Cannot remove tags from more than ${Ii} records at once.`);return e.fetchJson(`/v2/${We}/actions/remove_tags?${f({tag_names:t.tag_names,ids:t.ids})}`,M("POST")).then(o=>{let r=o.data.map(()=>t);return se(r,o.data)})}}var Yp="invalid_code",Qp="invalid_client",Bo=class extends J{constructor(o){super(`ZohoAccountsAccessTokenError: ${o}`);this.errorCode=o}},Qe=class extends J{constructor(o){super(`Failed to retrieve proper authentication for the API call. Reason: ${o}`);this.reason=o}},ed=re("ZohoAccounts");async function td(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Di(t,e)),o}function Di(e,t){let o,r=e.error;if(r){let n=$(r);switch(n.code){case Yp:case Qp:o=new Bo(n.code);break;default:o=ae(e,t);break}}return o}var Mi=ie(Di),_i=ne(td,ed);function Te(e){return async()=>{let t=await e();if(!t.accessToken)throw new Qe;return t.accessToken}}var od=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 qo(e){let{readRateLimitDetails:t}=e,o=e.onTooManyRequests===!1?void 0:e.onTooManyRequests??od,r=e.maxRateLimit??Xn,n=e.resetPeriod??Yn;function i(c,u){return{limit:c,startLimitAt:Math.ceil(c/10),cooldownRate:1.2*(c/(n/L)),exponentRate:1.08,maxWaitTime:L*10,resetPeriod:n,resetAt:u}}let a=i(r),s=Rn(a);return En({rateLimiter:s,maxRetries:e.maxRetries,updateWithResponse:function(c,u){let p=t(c.headers),d=!1,y=!1;if(p){let{remaining:m,limit:T,resetAt:g}=p;if(T!=null&&T!==r){let R=i(T,g??void 0);s.setConfig(R,!1)}if(s.setRemainingLimit(m),g&&s.setNextResetAt(g),y=!0,c.status===$n){d=!0;try{o?.(p,c,u)}catch{}}}return s.setEnabled(y),d}})}function Ce(e){return qo({...e,readRateLimitDetails:rd})}function rd(e){let t=Do(e),o;return t&&(o={remaining:t.remaining,limit:t.limit,resetAt:t.resetAt}),o}function vi(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ce(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoConfig missing api url.");let s=wt(a.apiUrl),c=i({apiUrl:s}),u=ni(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:ri,handleFetchJsonParseErrorFunction:Y});return{recruitContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function zt(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 jt="Notes",Ni="Emails",gt="Attachments";var wi=Lt;import{BaseError as nd}from"make-error";var Jo=class extends nd{constructor(o,r){super("There was no content or matching records for the content. It may not exist.");this.moduleName=o;this.recordId=r}},et=class extends fe{},$o=class extends et{},Xo=class extends et{},Wt=class extends et{get invalidFieldDetails(){return this.error.details}},Yo=class extends Wt{};function Ui(e){let t;switch(e.code){case Vt:{let o=new Wt(e);o.invalidFieldDetails.api_name==="id"?t=new Yo(e):t=o;break}case Kt:t=new $o(e);break;case Re:t=new Xo(e);break;default:t=new et(e);break}return t}function Li(e,t){return o=>{if(!o?.data?.length)throw new Jo(e,t);return o}}var id=re("ZohoCrm",{logDataArrayErrors:!1});async function ad(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Gi(t,e)),o}function Gi(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var Ki=ie(Gi),Vi=ne(ad,id);import{BaseError as sd}from"make-error";function er(e,t,o){return(({data:r,module:n})=>e.fetchJson(`/v8/${n}${t}`,w(o,{data:C(r)})).catch(ra).then(i=>{let a=Array.isArray(r),s=xe(C(r),i.data),c;if(a)c=s;else{let{successItems:u,errorItems:p}=s;if(p[0]!=null)throw Ui(p[0].result);c=u[0].result.details}return c}))}function Hi(e){return er(e,"","POST")}function zi(e){return er(e,"/upsert","POST")}function ji(e){return er(e,"","PUT")}function Wi(e){return({ids:t,module:o,wf_trigger:r})=>e.fetchJson(`/v8/${o}?${f({ids:t,wf_trigger:r})}`,w("DELETE")).catch(ra).then(ud)}function Bi(e){return t=>e.fetchJson(`/v8/${t.module}/${t.id}`,w("GET")).then(Li(t.module)).then(o=>o.data[0])}function qi(e){return(t=>e.fetchJson(`/v8/${t.module}?${oa(t).toString()}`,w("GET")))}function tr(e){function t(o){let r={...o};if(delete r.criteria,o.criteria!=null){let n=wi(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 oa(r)}return o=>e.fetchJson(`/v8/${o.module}/search?${t(o).toString()}`,w("GET")).then(r=>r??{data:[],info:{more_records:!1}})}function Ji(e){return N(tr(e))}function tt(e){return t=>{let{targetModule:o,returnEmptyRecordsInsteadOfNull:r=!0}=t;return n=>e.fetchJson(`/v8/${n.module}/${n.id}/${o}?${cd(n,n.filter).toString()}`,w("GET")).then(i=>i??(r===!1?i:je()))}}function or(e){let t=tt(e)({targetModule:Ni});return o=>t(o).then(r=>{let n=r.data??r.Emails;return{...r,data:n}})}function $i(e){return N(or(e))}function rr(e){return tt(e)({targetModule:gt})}function Xi(e){return N(rr(e))}var qT=20*1024*1024;function Yi(e){return t=>{let{attachmentCategoryId:o,attachmentCategoryName:r,file:n}=t,i={attachments_category_id:P(o),attachments_category:P(r)};if(!i.attachments_category_id?.length&&!i.attachments_category?.length)throw new Error("attachmentCategoryId or attachmentCategoryName must be provided and not empty.");let a=`/v8/${t.module}/${t.id}/${gt}?${f(i).toString()}`,s=new FormData;return s.append("file",n),e.fetch(a,{method:"POST",headers:{"Content-Type":""},body:s})}}function Qi(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${gt}/${t.attachment_id}`,{method:"GET"}).then(Pt)}function ea(e){return t=>e.fetch(`/v8/${t.module}/${t.id}/${gt}/${t.attachment_id}`,{method:"DELETE"})}var Qo=class extends sd{constructor(o){super(`An error occured during the execution of the function. Code: ${o.code}, Message: ${o.message}`);this.error=o}};function ta(e){return t=>{let r=f(t.params).toString(),n=!!t.apiKey,i=(n?`auth_type=apikey&zapikey=${t.apiKey}`:"auth_type=oauth")+(r?`&${r}`:""),a=`/v8/functions/${t.functionName}/actions/execute?${i}`,c=`${n&&t.apiUrl!=null?zt(t.apiUrl):""}${a}`;return e.fetchJson(c,w("POST")).then(u=>{if(u.code!=="success")throw new Qo(u);return u.details})}}function oa(...e){return f(e,{omitKeys:"module"})}function cd(...e){return f(e,{omitKeys:["id","module"]})}function w(e,t){return{method:e,body:t??void 0}}function ra(e){let t;if(e instanceof Be)t={data:e.errorDataArray};else throw e;return t}function ud(e){let{data:t}=e,o=[],r=[];return t.forEach(i=>{i.status===$e?o.push(i):r.push(i)}),{...e,successItems:o,errorItems:r}}function xe(e,t){let o=[],r=[];return e.forEach((i,a)=>{let s=t[a];s.status===$e?o.push({input:i,result:s}):r.push({input:i,result:s})}),{successItems:o,errorItems:r}}function nr(e){return t=>e.fetchJson(`/v2/${jt}`,w("POST",{data:t.data})).then(o=>xe(C(t.data),o.data))}function na(e){return t=>e.fetchJson(`/v2/${jt}?${f({ids:t.ids})}`,w("DELETE")).then(o=>xe(C(t.ids),o.data))}function ir(e){return tt(e)({targetModule:jt})}function ia(e){return N(ir(e))}function aa(e){let t=nr(e);return o=>{let{module:r,id:n,notes:i}=o,a={data:C(i).map(s=>({...s,se_module:r,Parent_Id:n}))};return t(a)}}function ca(e){return t=>e.fetchJson(`/v8/settings/tags?${f({module:t.module})}`,w("POST",{tags:C(t.tags)})).catch(o=>{let r;if(o instanceof G){let n=o.data?.tags;Array.isArray(n)&&(r={tags:n})}if(!r)throw o;return r}).then(o=>{let r=xe(C(t.tags),o.tags),{included:n,excluded:i}=Ue(r.errorItems,a=>a.result.code===Re);return{...r,errorItems:i,duplicateErrorItems:n,allErrorItems:r.errorItems}})}function ua(e){return t=>e.fetchJson(`/v8/settings/tags/${t.id}`,w("DELETE")).then(o=>o.tags)}function pa(e){return t=>e.fetchJson(`/v8/settings/tags?${f({module:t.module,my_tags:t.my_tags})}`,w("GET")).then(o=>({...o,data:o.tags}))}var sa=100;function da(e){return t=>e.fetchJson(`/v8/${t.module}/actions/add_tags`,w("POST",la(t))).then(o=>{let r=o.data.map(()=>t);return xe(r,o.data)})}function la(e){if(Array.isArray(e.ids)&&e.ids.length>sa)throw new Error(`Cannot add/remove tags from more than ${sa} records at once.`);let t=[...C(e.tags)],o=new Set(t.map(r=>r.name));return e.tag_names&&C(e.tag_names).forEach(r=>{o.has(r)||(t.push({name:r}),o.add(r))}),{tags:t,ids:C(e.ids)}}function ha(e){return t=>e.fetchJson(`/v8/${t.module}/actions/remove_tags`,w("POST",la(t))).then(o=>{let r=o.data.map(()=>t);return xe(r,o.data)})}function ma(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ce(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoConfig missing api url.");let s=zt(a.apiUrl),c=i({apiUrl:s}),u=Vi(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:Ki,handleFetchJsonParseErrorFunction:Y});return{crmContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function ya(e,t){return Ve({...t,fetch:e,readFetchPageResultInfo:function(o){return{hasNext:o.page_context?.has_more_rows??!1}},buildInputForNextPage:function(o,r,n){let a=o.result?.page_context,s=n.maxItemsPerPage??r.row_count??a?.row_count??20,c=(a?.start_index??r.start_index??1)+s;return{...r,start_index:c,row_count:s}}})}function ce(e,t){return{method:e,body:t??void 0}}function ga(e){return({requestId:t})=>e.fetchJson(`/requests/${t}`,ce("GET"))}function ar(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)}},ce("GET"))}}function fa(e){let t=ar(e);return ya(t)}function Ra(e){return({requestId:t})=>e.fetchJson(`/requests/${t}/fielddata`,ce("GET"))}function Ta(e){return()=>e.fetchJson("/fieldtypes",ce("GET"))}function Ca(e){return({requestId:t,...o})=>{let n=f(o).toString(),i=n?`?${n}`:"",a=`/requests/${t}/pdf${i}`;return e.fetch(a,{method:"GET"})}}function xa(e){return({requestId:t})=>e.fetch(`/requests/${t}/completioncertificate`,{method:"GET"})}function Za(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 Fa(e){return({templateId:t,data:o,isQuickSend:r=!0})=>{let n=f({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 Sa(e){return({templateId:t})=>e.fetchJson(`/templates/${t}`,ce("GET"))}function Aa(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)}},ce("GET"))}}function ba(e){return({requestId:t,data:o})=>e.fetchJson(`/requests/${t}`,ce("PUT",{requests:o}))}function Ia(e){return({requestId:t,data:o})=>{let r=o?{requests:o}:void 0;return e.fetchJson(`/requests/${t}/submit`,ce("POST",r))}}function ka(e){return({requestId:t,expire_by:o})=>e.fetchJson(`/requests/${t}/extend`,ce("PUT",{expire_by:o}))}function Pa(e){return({requestId:t,recall_inprogress:o,reason:r})=>{let n={};o!=null&&(n.recall_inprogress=String(o)),r!=null&&(n.reason=r);let i=f(n),a=i.toString().length>0;return e.fetchJson(`/requests/${t}/delete`,{method:"PUT",...a?{headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()}:{}})}}function Ea(e){return({requestId:t,actionId:o,host:r})=>e.fetchJson({url:`/requests/${t}/actions/${o}/embedtoken`,queryParams:{host:r}},ce("POST"))}function Oa(e){let t;switch(e){case"sandbox":t="https://signsandbox.zoho.com/api/v1";break;case"production":t="https://sign.zoho.com/api/v1";break;default:t=e;break}return t}var pd=re("ZohoSign",{logDataArrayErrors:!1});async function dd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=Da(t,e)),o}function Da(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var Ma=ie(Da),_a=ne(dd,pd);function va(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ce(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoConfig missing api url.");let s=Oa(a.apiUrl),c=i({apiUrl:s}),u=_a(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:Ma,handleFetchJsonParseErrorFunction:Y});return{signContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}function Na(e){let t;switch(e){case"sandbox":case"production":t="https://desk.zoho.com/api/v1";break;default:t=e;break}return t}var ld=re("ZohoDesk",{logDataArrayErrors:!1});async function hd(e){let t=await e.response.json().catch(()=>{}),o;return t&&(o=wa(t,e)),o}function wa(e,t){let o,r=le(e,t);if(r)switch($(r).code){default:o=ae(e,t);break}return o}var Ua=ie(wa),La=ne(hd,ld);var md="X-Rate-Limit-Remaining-v3",yd="Retry-After",gd=200;function fd(e){let t=e.get(md),o;if(t!=null){let r=Number(t),n,i=e.get(yd);if(i!=null){let a=Number(i);Number.isNaN(a)||(n=new Date(Date.now()+a*L))}Number.isNaN(r)||(o={remaining:r,resetAt:n})}return o}function Ga(e){return qo({maxRateLimit:gd,...e,readRateLimitDetails:fd})}function Ka(e){let{accountsContext:t}=e,o=Te(t.loadAccessToken),r=Ga(e.rateLimiterConfig),{logZohoServerErrorFunction:n,fetchFactory:i=a=>ee.makeFetch({baseUrl:a.apiUrl,baseRequest:async()=>({headers:{"Content-Type":"application/json",Authorization:`Bearer ${await o()}`,orgId:a.orgId}}),fetchHandler:r,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=e;return a=>{if(!a.apiUrl)throw new Error("ZohoDeskConfig missing api url.");if(!a.orgId)throw new Error("ZohoDeskConfig missing orgId.");let s=Na(a.apiUrl),c=i({apiUrl:s,orgId:a.orgId}),u=La(c,n,m=>{m instanceof K&&t.loadAccessToken.resetAccessToken()}),p=Q(u,{interceptJsonResponse:Ua,handleFetchJsonParseErrorFunction:Y});return{deskContext:{fetch:u,fetchJson:p,accessTokenStringFactory:o,config:{...a,apiUrl:s},zohoRateLimiter:r._rateLimiter}}}}var Va=25;function X(e,t){return Ve({...t,fetch:e,readFetchPageResultInfo:function(o){let r=o.data?.length??0;return{hasNext:r>0&&r>=Va}},buildInputForNextPage:function(o,r,n){let i=n.maxItemsPerPage??r.limit??Va,s=(r.from??1)+i;return{...r,from:s,limit:i}}})}function Ee(e,t){return{method:e,body:t??void 0}}function ot(e,t){return f(e,{omitKeys:t})}function Bt(e){let t;return e&&(t=P(C(e))),t}function sr(e){return t=>{let{include:o,...r}=t,n=ot([{...r,include:Bt(o)}]);return e.fetchJson(`/tickets?${n}`,Ee("GET")).then(i=>i??{data:[]})}}function Ha(e){return t=>{let{ticketId:o,include:r}=t,i=ot([{include:Bt(r)}]).toString(),a=i?"?"+i:"";return e.fetchJson(`/tickets/${o}${a}`,Ee("GET"))}}function cr(e){return t=>{let o=ot([t]);return e.fetchJson(`/tickets/search?${o}`,Ee("GET")).then(r=>r??{data:[]})}}function za(e){return t=>{let{contactId:o,include:r,...n}=t,i=ot([{...n,include:Bt(r)}]);return e.fetchJson(`/contacts/${o}/tickets?${i}`,Ee("GET")).then(a=>a??{data:[]})}}function ja(e){return t=>{let{productId:o,include:r,...n}=t,i=ot([{...n,include:Bt(r)}]);return e.fetchJson(`/products/${o}/tickets?${i}`,Ee("GET")).then(a=>a??{data:[]})}}function Wa(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/metrics`,Ee("GET"))}function Ba(e){return t=>{let o=ot([{agentIds:P(C(t.agentIds)),departmentId:t.departmentId}]);return e.fetchJson(`/agentsTicketsCount?${o}`,Ee("GET"))}}function qa(e){return X(sr(e))}function Ja(e){return X(cr(e))}function $a(e){return{method:e}}function Xa(e){return t=>{let o=f([t]);return e.fetchJson(`/departments?${o}`,$a("GET")).then(r=>r??{data:[]})}}function Ya(e){return t=>e.fetchJson(`/departments/${t.departmentId}`,$a("GET"))}function ur(e){return{method:e}}function Qa(e){let t;return e&&(t=P(C(e))),t}function pr(e){return t=>{let{include:o,...r}=t,n=f([{...r,include:Qa(o)}]);return e.fetchJson(`/contacts?${n}`,ur("GET")).then(i=>i??{data:[]})}}function es(e){return t=>{let{contactId:o,include:r}=t,i=f([{include:Qa(r)}]).toString(),a=i?"?"+i:"";return e.fetchJson(`/contacts/${o}${a}`,ur("GET"))}}function ts(e){return t=>{let o=f([{contactIds:P(C(t.contactIds))}]);return e.fetchJson(`/contacts/contactsByIds?${o}`,ur("GET")).then(r=>r??[])}}function os(e){return X(pr(e))}function ft(e,t){return{method:e,body:t??void 0}}function rs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags`,ft("GET")).then(o=>o??[])}function ns(e){return t=>{let o={tags:C(t.tags).map(r=>({name:r}))};return e.fetchJson(`/tickets/${t.ticketId}/tags`,ft("POST",o)).then(r=>r??[])}}function is(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/tags/${t.tagId}`,ft("DELETE"))}function as(e){return t=>{let o=f([t]);return e.fetchJson(`/tags/search?${o}`,ft("GET")).then(r=>r??{data:[]})}}function ss(e){return t=>{let o=f([t]);return e.fetchJson(`/ticketTags?${o}`,ft("GET")).then(r=>r??{data:[]})}}function dr(e,t){return{method:e,body:t??void 0}}function cs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/followers`,dr("GET")).then(o=>o??[])}function us(e){return t=>{let o={ids:C(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,dr("POST",o))}}function ps(e){return t=>{let o={ids:C(t.agentIds)};return e.fetchJson(`/tickets/${t.ticketId}/followers`,dr("DELETE",o))}}function ds(e,t){return{method:e,body:t??void 0}}function Rd(e){let t;return e&&(t=P(C(e))),t}function ls(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:Rd(r)}]);return e.fetchJson(`/tickets/${o}/attachments?${i}`,ds("GET")).then(a=>a??{data:[]})}}function hs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/attachments/${t.attachmentId}`,ds("DELETE"))}function qt(e,t){return{method:e,body:t??void 0}}function ms(e){let t;return e&&(t=P(C(e))),t}function ys(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:ms(r)}]);return e.fetchJson(`/tickets/${o}/comments?${i}`,qt("GET")).then(a=>a??{data:[]})}}function gs(e){return t=>{let{ticketId:o,commentId:r,include:n}=t,a=f([{include:ms(n)}]).toString(),s=a?"?"+a:"";return e.fetchJson(`/tickets/${o}/comments/${r}${s}`,qt("GET"))}}function fs(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/comments`,qt("POST",r))}}function Rs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/comments/${t.commentId}`,qt("DELETE"))}function Rt(e,t){return{method:e,body:t??void 0}}function Ts(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timer`,Rt("GET"))}function Cs(e){return t=>{let{ticketId:o,...r}=t;return e.fetchJson(`/tickets/${o}/timer`,Rt("POST",r))}}function xs(e){return t=>{let{ticketId:o,...r}=t,n=f([r]);return e.fetchJson(`/tickets/${o}/timeEntries?${n}`,Rt("GET")).then(i=>i??{data:[]})}}function Zs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/${t.timeEntryId}`,Rt("GET"))}function Fs(e){return t=>e.fetchJson(`/tickets/${t.ticketId}/timeEntries/summation`,Rt("GET"))}function Ss(e){return{method:e}}function As(e){let t;return e&&(t=P(C(e))),t}function lr(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:As(r)}]);return e.fetchJson(`/tickets/${o}/threads?${i}`,Ss("GET")).then(a=>a??{data:[]})}}function bs(e){return t=>{let{ticketId:o,threadId:r,include:n}=t,a=f([{include:As(n)}]).toString(),s=a?"?"+a:"";return e.fetchJson(`/tickets/${o}/threads/${r}${s}`,Ss("GET"))}}function Is(e){return X(lr(e))}function Td(e){return{method:e}}function Cd(e){let t;return e&&(t=P(C(e))),t}function hr(e){return t=>{let{ticketId:o,include:r,...n}=t,i=f([{...n,include:Cd(r)}]);return e.fetchJson(`/tickets/${o}/activities?${i}`,Td("GET")).then(a=>a??{data:[]})}}function ks(e){return X(hr(e))}function Jt(e){return{method:e}}function Ps(e){let t;return e&&(t=P(C(e))),t}function mr(e){return t=>{let{include:o,...r}=t,n=f([{...r,include:Ps(o)}]);return e.fetchJson(`/agents?${n}`,Jt("GET")).then(i=>i??{data:[]})}}function Es(e){return t=>{let{agentId:o,include:r}=t,i=f([{include:Ps(r)}]).toString(),a=i?"?"+i:"";return e.fetchJson(`/agents/${o}${a}`,Jt("GET"))}}function Os(e){return t=>{let o=f([{agentIds:P(C(t.agentIds))}]);return e.fetchJson(`/agentsByIds?${o}`,Jt("GET")).then(r=>r?.data??[])}}function Ds(e){return()=>e.fetchJson("/myinfo",Jt("GET"))}function Ms(e){return X(mr(e))}function $t(e){return t=>{let{clientId:o,clientSecret:r,refreshToken:n}=e.config,{client:i,refreshToken:a}=t??{},s=i?.clientId??o,c=i?.clientSecret??r,p=f({grant_type:"refresh_token",client_id:s,client_secret:c,refresh_token:a??n});return e.fetchJson(`/oauth/v2/token?${p}`,xd("POST"))}}function xd(e,t){return{method:e,body:t}}var Zd="https://accounts.zoho.com";function _s(e){let t;return e==="us"?t=Zd:t=e,t}function vs(e){let t=Ce(),{logZohoServerErrorFunction:o,fetchFactory:r=n=>ee.makeFetch({baseUrl:n.apiUrl,baseRequest:{headers:{"Content-Type":"application/json"}},fetchHandler:t,timeout:20*1e3,requireOkResponse:!0,useTimeout:!0})}=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 i=_s(n.apiUrl??"us"),a=r({apiUrl:i}),s=_i(a,o),c=Q(s,{interceptJsonResponse:Mi,handleFetchJsonParseErrorFunction:Y}),u=async()=>{let m=Date.now(),{access_token:T,api_domain:g,scope:R,expires_in:Z}=await $t(d)();return{accessToken:T,apiDomain:g,expiresIn:Z,expiresAt:new Date(m+Z*L),scope:R}};u.resetAccessToken=async()=>n.accessTokenCache?.clearCachedToken();let p=Fd({tokenRefresher:u,accessTokenCache:n.accessTokenCache}),d={fetch:s,fetchJson:c,loadAccessToken:p,config:{...n,apiUrl:i}};return{accountsContext:d}}}function Fd(e){let{tokenRefresher:t,accessTokenCache:o,tokenExpirationBuffer:r}=e,n=r??be,i=null,a=async()=>{i=null},s=async()=>{if(!i){let c=await o?.loadCachedToken();c&&(i=c)}if(i!=null&&Date.now()+n>=i.expiresAt.getTime()&&(i=null),!i){try{i=await t()}catch(c){throw console.error("zohoAccountsZohoAccessTokenFactory(): Failed retrieving new token from tokenRefresher: ",c),new Qe("Token Refresh Failed")}try{await o?.updateCachedToken(i)}catch{}}return i};return s.resetAccessToken=a,s}function Ze(e){if(!e.apiUrl)throw new Error("No Zoho API url or type specified.")}var Fe=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 Sd}from"@nestjs/common";var rt=class{};rt=A([Sd()],rt);function Ad(e){return{load:async()=>{let t=await e.loadCachedToken().catch(()=>{});return t!=null&&!Yr(t)?t:void 0},update:t=>e.updateCachedToken(t),clear:()=>e.clearCachedToken()}}function bd(e,t){return e.updateCachedToken(t).then(()=>null).catch(o=>[e,o])}function Id(e){console.warn(`mergeZohoAccountsAccessTokenCacheServices(): failed updating ${e.length} caches.`),e.forEach(([t,o],r)=>{console.warn(`Cache update failure ${r+1}: - ${o}`)})}function ws(e,t){let o=[...e],r=typeof t=="function"?t:t===!1?void 0:Id;if(o.length===0)throw new Error("mergeZohoAccountsAccessTokenCacheServices() input cannot be empty.");function n(i){let a=o.map(u=>u.loadZohoAccessTokenCache(i)),s=a.map(Ad),c=nn(s);return{loadCachedToken:()=>c.load(),updateCachedToken:async u=>{let p=await Promise.allSettled(a.map(d=>bd(d,u)));if(r!=null){let d=me(p.map(y=>y.value));d.length&&r(d)}},clearCachedToken:async()=>{await Promise.allSettled(a.map(u=>u.clearCachedToken()))}}}return{loadZohoAccessTokenCache:n}}function Us(e,t){let o={};if(e!=null)for(let i of Object.keys(e)){let a=e[i];a!=null&&(o[i]=a)}let r=on(o);function n(i){return{loadCachedToken:async()=>{let a=await r.get(i);return t&&console.log("retrieving access token from memory: ",{service:i,hit:a!=null,expiresAt:a?.expiresAt}),a},updateCachedToken:async a=>{await r.set(i,a),t&&console.log("updating access token in memory: ",{service:i,expiresAt:a?.expiresAt})},clearCachedToken:async()=>{await r.remove(i),t&&console.log("clearing access token in memory: ",{service:i})}}}return{loadZohoAccessTokenCache:n}}var kd=".tmp/zoho-access-tokens.json";function Ns(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 Ls(e=kd,t=!0){let o=Un({filePath:e,reviver:Ns}),r=t?rn(o):o;function n(c){return{loadCachedToken:()=>r.get(c),updateCachedToken:async u=>{try{await r.set(c,u)}catch(p){console.error("Failed updating access token in file: ",p)}},clearCachedToken:async()=>{try{await r.remove(c)}catch(u){console.error("Failed clearing access token in file: ",u)}}}}async function i(){let c=await ye(e),u;if(c==null)u=void 0;else{let p={};for(let d of Object.keys(c))p[d]=Ns(c[d]);u=p}return u}async function a(c){await r.clear();for(let[u,p]of Object.entries(c))p!=null&&await r.set(u,p)}async function s(){await r.clear()}return{loadZohoAccessTokenCache:n,readTokenFile:i,writeTokenFile:a,deleteTokenFile:s}}var _=class{constructor(t,o){this.config=t;this.cacheService=o;let r=t.zohoAccounts.accessTokenCache??o.loadZohoAccessTokenCache(t.zohoAccounts.serviceAccessTokenKey);this.zohoAccounts=vs(t.factoryConfig??{})({accessTokenCache:r,...t.zohoAccounts})}zohoAccounts;get accountsContext(){return this.zohoAccounts.accountsContext}get accessToken(){return $t(this.accountsContext)}};_=A([Pd(),k(0,Gs(Fe)),k(1,Gs(rt))],_);import{Inject as Ks,Injectable as Ed}from"@nestjs/common";var Tt=class{zohoCrm;factoryConfig;static assertValidConfig(t){Ze(t.zohoCrm)}};var Oe=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoCrm=ma({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoCrm)}zohoCrm;get crmContext(){return this.zohoCrm.crmContext}get zohoRateLimiter(){return this.zohoCrm.crmContext.zohoRateLimiter}get insertRecord(){return Hi(this.crmContext)}get upsertRecord(){return zi(this.crmContext)}get updateRecord(){return ji(this.crmContext)}get deleteRecord(){return Wi(this.crmContext)}get getRecordById(){return Bi(this.crmContext)}get getRecords(){return qi(this.crmContext)}get searchRecords(){return tr(this.crmContext)}get searchRecordsPageFactory(){return Ji(this.crmContext)}get getRelatedRecordsFunctionFactory(){return tt(this.crmContext)}get getEmailsForRecord(){return or(this.crmContext)}get getEmailsForRecordPageFactory(){return $i(this.crmContext)}get getAttachmentsForRecord(){return rr(this.crmContext)}get getAttachmentsForRecordPageFactory(){return Xi(this.crmContext)}get uploadAttachmentForRecord(){return Yi(this.crmContext)}get downloadAttachmentForRecord(){return Qi(this.crmContext)}get deleteAttachmentFromRecord(){return ea(this.crmContext)}get createNotes(){return nr(this.crmContext)}get deleteNotes(){return na(this.crmContext)}get createNotesForRecord(){return aa(this.crmContext)}get getNotesForRecord(){return ir(this.crmContext)}get getNotesForRecordPageFactory(){return ia(this.crmContext)}get executeRestApiFunction(){return ta(this.crmContext)}get createTagsForModule(){return ca(this.crmContext)}get deleteTag(){return ua(this.crmContext)}get getTagsForModule(){return pa(this.crmContext)}get addTagsToRecords(){return da(this.crmContext)}get removeTagsFromRecords(){return ha(this.crmContext)}};Oe=A([Ed(),k(0,Ks(Tt)),k(1,Ks(_))],Oe);import{ConfigModule as fF,ConfigService as RF}from"@nestjs/config";import{Inject as Vs,Injectable as Od}from"@nestjs/common";var Ct=class{zohoRecruit;factoryConfig;static assertValidConfig(t){Ze(t.zohoRecruit)}};var De=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoRecruit=vi({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoRecruit)}zohoRecruit;get recruitContext(){return this.zohoRecruit.recruitContext}get zohoRateLimiter(){return this.zohoRecruit.recruitContext.zohoRateLimiter}get insertRecord(){return ii(this.recruitContext)}get upsertRecord(){return ai(this.recruitContext)}get updateRecord(){return si(this.recruitContext)}get deleteRecord(){return ci(this.recruitContext)}get getRecordById(){return ui(this.recruitContext)}get getRecords(){return pi(this.recruitContext)}get searchRecords(){return Lo(this.recruitContext)}get searchRecordsPageFactory(){return di(this.recruitContext)}get getRelatedRecordsFunctionFactory(){return Ye(this.recruitContext)}get getEmailsForRecord(){return Go(this.recruitContext)}get getEmailsForRecordPageFactory(){return li(this.recruitContext)}get getAttachmentsForRecord(){return Ko(this.recruitContext)}get getAttachmentsForRecordPageFactory(){return hi(this.recruitContext)}get uploadAttachmentForRecord(){return mi(this.recruitContext)}get downloadAttachmentForRecord(){return yi(this.recruitContext)}get deleteAttachmentFromRecord(){return gi(this.recruitContext)}get createNotes(){return jo(this.recruitContext)}get deleteNotes(){return Fi(this.recruitContext)}get createNotesForRecord(){return Ai(this.recruitContext)}get getNotesForRecord(){return Wo(this.recruitContext)}get getNotesForRecordPageFactory(){return Si(this.recruitContext)}get executeRestApiFunction(){return fi(this.recruitContext)}get associateCandidateRecordsWithJobOpenings(){return Ti(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecords(){return Ho(this.recruitContext)}get searchCandidateAssociatedJobOpeningRecordsPageFactory(){return xi(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecords(){return zo(this.recruitContext)}get searchJobOpeningAssociatedCandidateRecordsPageFactory(){return Zi(this.recruitContext)}get createTagsForModule(){return ki(this.recruitContext)}get getTagsForModule(){return Pi(this.recruitContext)}get addTagsToRecords(){return Ei(this.recruitContext)}get removeTagsFromRecords(){return Oi(this.recruitContext)}};De=A([Od(),k(0,Vs(Ct)),k(1,Vs(_))],De);import{ConfigModule as GF,ConfigService as KF}from"@nestjs/config";import{Inject as Hs,Injectable as Dd}from"@nestjs/common";var xt=class{zohoSign;factoryConfig;static assertValidConfig(t){Ze(t.zohoSign)}};var Zt=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoSign=va({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoSign)}zohoSign;get signContext(){return this.zohoSign.signContext}get zohoRateLimiter(){return this.zohoSign.signContext.zohoRateLimiter}get getDocument(){return ga(this.signContext)}get getDocuments(){return ar(this.signContext)}get getDocumentsPageFactory(){return fa(this.signContext)}get getDocumentFormData(){return Ra(this.signContext)}get retrieveFieldTypes(){return Ta(this.signContext)}get downloadPdf(){return Ca(this.signContext)}get downloadCompletionCertificate(){return xa(this.signContext)}get createDocument(){return Za(this.signContext)}get createDocumentFromTemplate(){return Fa(this.signContext)}get getTemplate(){return Sa(this.signContext)}get getTemplates(){return Aa(this.signContext)}get updateDocument(){return ba(this.signContext)}get sendDocumentForSignature(){return Ia(this.signContext)}get extendDocument(){return ka(this.signContext)}get deleteDocument(){return Pa(this.signContext)}get getEmbeddedSigningUrl(){return Ea(this.signContext)}};Zt=A([Dd(),k(0,Hs(xt)),k(1,Hs(_))],Zt);import{ConfigModule as uS,ConfigService as pS}from"@nestjs/config";function zs(e){return{...e,operationType:e.notifications.operation_type}}var js=Tn(e=>e.operationType),Ws=xn({configurerForAccessor:e=>{let t=Cn(e,r=>r);return{...e,handleRequestSubmitted:t("RequestSubmitted"),handleRequestViewed:t("RequestViewed"),handleRequestSigningSuccess:t("RequestSigningSuccess"),handleRequestCompleted:t("RequestCompleted"),handleRequestRejected:t("RequestRejected"),handleRequestRecalled:t("RequestRecalled"),handleRequestForwarded:t("RequestForwarded"),handleRequestExpired:t("RequestExpired")}}});var Bs="ZOHO_SIGN_WEBHOOK_SECRET_TOKEN",Me=class{zohoSignWebhook;static assertValidConfig(t){if(!t.zohoSignWebhook.webhookSecret)throw new Error("No Zoho Sign webhook secret specified.")}};import{Controller as Ld,Inject as Gd,Post as Kd,Req as Vd}from"@nestjs/common";import{Inject as Nd,Injectable as wd,Logger as Ud}from"@nestjs/common";import{createHmac as Md,timingSafeEqual as _d}from"node:crypto";var vd="x-zs-webhook-signature";function qs(e){let{secret:t}=e;return async(o,r)=>{let n=o.headers[vd],i={valid:!1};if(n){let a=r.toString("utf-8"),s=Md("sha256",t).update(a,"utf-8").digest("base64"),c=!1;try{let p=Buffer.from(n,"base64"),d=Buffer.from(s,"base64");p.length===d.length&&(c=_d(p,d))}catch{c=!1}let u;if(c)try{let p=JSON.parse(a);u=zs(p)}catch{c=!1}c&&u&&(i={valid:!0,event:u})}return i}}var he=class{logger=new Ud("ZohoSignWebhookService");_verifier;handler=js();configure=Ws(this.handler);constructor(t){let{webhookSecret:o}=t.zohoSignWebhook;this._verifier=qs({secret:o})}async updateForWebhook(t,o){let r=await this._verifier(t,o);r.valid?await this.updateForZohoSignEvent(r.event):this.logger.warn("Received invalid Zoho Sign webhook event.",t)}async updateForZohoSignEvent(t){await this.handler(t)||this.logger.warn("Received unexpected/unhandled Zoho Sign webhook event.",t)}};he=A([wd(),k(0,Nd(Me))],he);var _e=class{_zohoSignWebhookService;constructor(t){this._zohoSignWebhookService=t}async handleZohoSignWebhook(t,o){await this._zohoSignWebhookService.updateForWebhook(t,o)}};A([Kd(),k(0,Vd()),k(1,_n())],_e.prototype,"handleZohoSignWebhook",1),_e=A([Ld("/webhook/zoho/sign"),k(0,Gd(he))],_e);import{Module as Hd}from"@nestjs/common";import{ConfigModule as zd,ConfigService as jd}from"@nestjs/config";function Wd(e){let t={zohoSignWebhook:{webhookSecret:e.get(Bs)}};return Me.assertValidConfig(t),t}var Yt=class{};Yt=A([Hd({imports:[zd],controllers:[_e],providers:[{provide:Me,inject:[jd],useFactory:Wd},he],exports:[he]})],Yt);import{Inject as Js,Injectable as Bd}from"@nestjs/common";var Ft=class{zohoDesk;factoryConfig;static assertValidConfig(t){if(Ze(t.zohoDesk),!t.zohoDesk.orgId)throw new Error("No Zoho Desk orgId specified.")}};var ve=class{constructor(t,o){this.config=t;this.zohoAccountsApi=o;this.zohoDesk=Ka({...t.factoryConfig,accountsContext:o.accountsContext})(t.zohoDesk)}zohoDesk;get deskContext(){return this.zohoDesk.deskContext}get zohoRateLimiter(){return this.zohoDesk.deskContext.zohoRateLimiter}get getTickets(){return sr(this.deskContext)}get getTicketById(){return Ha(this.deskContext)}get searchTickets(){return cr(this.deskContext)}get getTicketsForContact(){return za(this.deskContext)}get getTicketsForProduct(){return ja(this.deskContext)}get getTicketMetrics(){return Wa(this.deskContext)}get getAgentsTicketsCount(){return Ba(this.deskContext)}get getTicketsPageFactory(){return qa(this.deskContext)}get searchTicketsPageFactory(){return Ja(this.deskContext)}get getDepartments(){return Xa(this.deskContext)}get getDepartmentById(){return Ya(this.deskContext)}get getContacts(){return pr(this.deskContext)}get getContactById(){return es(this.deskContext)}get getContactsByIds(){return ts(this.deskContext)}get getContactsPageFactory(){return os(this.deskContext)}get getTicketTags(){return rs(this.deskContext)}get associateTicketTags(){return ns(this.deskContext)}get dissociateTicketTag(){return is(this.deskContext)}get searchTags(){return as(this.deskContext)}get getAllTags(){return ss(this.deskContext)}get getTicketFollowers(){return cs(this.deskContext)}get addTicketFollowers(){return us(this.deskContext)}get removeTicketFollowers(){return ps(this.deskContext)}get getTicketAttachments(){return ls(this.deskContext)}get deleteTicketAttachment(){return hs(this.deskContext)}get getTicketComments(){return ys(this.deskContext)}get getTicketCommentById(){return gs(this.deskContext)}get createTicketComment(){return fs(this.deskContext)}get deleteTicketComment(){return Rs(this.deskContext)}get getTicketTimer(){return Ts(this.deskContext)}get performTicketTimerAction(){return Cs(this.deskContext)}get getTicketTimeEntries(){return xs(this.deskContext)}get getTicketTimeEntryById(){return Zs(this.deskContext)}get getTicketTimeEntrySummation(){return Fs(this.deskContext)}get getTicketThreads(){return lr(this.deskContext)}get getTicketThreadById(){return bs(this.deskContext)}get getTicketThreadsPageFactory(){return Is(this.deskContext)}get getTicketActivities(){return hr(this.deskContext)}get getTicketActivitiesPageFactory(){return ks(this.deskContext)}get getAgents(){return mr(this.deskContext)}get getAgentById(){return Es(this.deskContext)}get getAgentsByIds(){return Os(this.deskContext)}get getMyInfo(){return Ds(this.deskContext)}get getAgentsPageFactory(){return Ms(this.deskContext)}};ve=A([Bd(),k(0,Js(Ft)),k(1,Js(_))],ve);import{ConfigModule as pA,ConfigService as dA}from"@nestjs/config";function qd(e){return`${e.clientId}:${e.refreshToken}`}function nt(e){let t=ws([Us(),Ls(ht())]),o=new Map;function r(p,d){let y=qd(p),m=o.get(y),T;if(m)T=m;else{let g={zohoAccounts:{serviceAccessTokenKey:d,refreshToken:p.refreshToken,clientId:p.clientId,clientSecret:p.clientSecret,apiUrl:p.region??"us"}};T=new _(g,t),o.set(y,T)}return T}let n,i=mt(e,"recruit");if(i){let p=r(i,"recruit"),d={zohoRecruit:{apiUrl:i.apiMode}};n=new De(d,p)}let a,s=mt(e,"crm");if(s){let p=r(s,"crm"),d={zohoCrm:{apiUrl:s.apiMode}};a=new Oe(d,p)}let c,u=mt(e,"desk");if(u?.orgId){let p=r(u,"desk"),d={zohoDesk:{apiUrl:u.apiMode,orgId:u.orgId}};c=new ve(d,p)}return{recruitApi:n,crmApi:a,deskApi:c}}ro([...to,/1000\.\w{20,}/g]);function $s(e){let t;return e instanceof K?t={ok:!1,error:de(e.message),code:"TOKEN_EXPIRED",suggestion:"Run: zoho-cli auth check"}:e instanceof qe?t={ok:!1,error:de(e.message),code:"AUTH_ERROR",suggestion:"Check your client ID, secret, and refresh token."}:e instanceof Je?t={ok:!1,error:de(e.message),code:"RATE_LIMITED",suggestion:"Wait and retry. Zoho rate limit exceeded."}:e instanceof G?t={ok:!1,error:de(e.message),code:"API_ERROR"}:t=no(e),t}Ar(e=>e instanceof K||e instanceof qe||e instanceof Je||e instanceof G?$s(e):void 0);function h(e){console.log(JSON.stringify($s(e)))}var Xs={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"},Ys={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"]};function Jd(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 $d={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:"http://localhost/oauth",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",default:"recruit,crm,desk",describe:"Comma-separated products for OAuth scopes (recruit,crm,desk,sign)"}).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:[...Nt],describe:"Store credentials for a specific product instead of shared"}).option("org-id",{type:"string",describe:"Zoho Desk organization ID"}).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"]]),handler:async e=>{try{let t=await H(),o=Xd(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 Yd(o,t):o.code?await Qd(o,t):await el(o,t)}catch(t){h(t),process.exit(1)}}};function Xd(e,t){let o=e.region??t?.shared?.region??"us";return{product:e.product,clientId:e.clientId??t?.shared?.clientId,clientSecret:e.clientSecret??t?.shared?.clientSecret,redirectUri:e.redirectUri,region:o,scopes:e.scopes.split(",").map(r=>r.trim()),code:Jd(e.code),token:e.token,accountsUrl:Xs[o]??Xs.us,apiMode:e.apiMode,orgId:e.orgId}}async function Qs(e,t,o){return e.product?te({shared:o??{clientId:"",clientSecret:"",refreshToken:""},[e.product]:{...t,apiUrl:e.apiMode,orgId:e.product==="desk"?e.orgId:void 0}}):te({shared:{...t,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0})}async function Yd(e,t){let o={clientId:e.clientId,clientSecret:e.clientSecret,refreshToken:e.token},r=await Qs(e,o,t?.shared);l({success:!0,...e.product?{product:e.product}:{},refreshToken:ge(e.token),configSaved:!0,configuredProducts:oe(r)})}async function Qd(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}),i=await(await fetch(o,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()})).json();if(i.error)throw new Error(`Token exchange failed: ${i.error}`);let a=i.refresh_token;if(!a)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:a},c=await Qs(e,s,t?.shared);l({step:2,success:!0,product:e.product??"shared",refreshToken:ge(a),accessToken:i.access_token?ge(i.access_token):null,scope:i.scope,configSaved:!0,configuredProducts:oe(c)})}async function el(e,t){let o=e.scopes.flatMap(n=>Ys[n]??[]);if(o.length===0)throw new Error(`No valid products specified. Choose from: ${Object.keys(Ys).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 te({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}),l({step:1,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 --code "PASTE_REDIRECT_URL_OR_AUTH_CODE"'})}var tl={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:[...Nt],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:"Zoho Desk organization ID"}).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 te({shared:(await H())?.shared??{clientId:"",clientSecret:"",refreshToken:""},[t]:{...o,apiUrl:e.apiMode,orgId:t==="desk"?e.orgId:void 0}}):r=await te({shared:{...o,region:e.region,apiMode:e.apiMode},desk:e.orgId?{orgId:e.orgId}:void 0}),l({saved:!0,product:t??"shared",configuredProducts:oe(r)})}catch(t){h(t),process.exit(1)}}},ol={command:"show",describe:"Show current configuration (secrets masked)",builder:e=>e,handler:async()=>{try{let o=function(r){return r?{clientId:r.clientId?ge(r.clientId):void 0,clientSecret:r.clientSecret?ge(r.clientSecret):void 0,refreshToken:r.refreshToken?ge(r.refreshToken):void 0}:void 0};var e=o;let t=await H();if(!t){l({configured:!1});return}l({configured:!0,shared:{...o(t.shared),region:t.shared?.region??"us",apiMode:t.shared?.apiMode??"production"},recruit:t.recruit?{...o(t.recruit),apiUrl:t.recruit.apiUrl}:null,crm:t.crm?{...o(t.crm),apiUrl:t.crm.apiUrl}:null,desk:t.desk?{...o(t.desk),apiUrl:t.desk.apiUrl,orgId:t.desk.orgId}:null,configuredProducts:oe(t)})}catch(t){h(t),process.exit(1)}}},rl={command:"check",describe:"Verify credentials by exchanging tokens",builder:e=>e,handler:async()=>{try{let e=await H();if(e){let t=oe(e);if(t.length===0)l({authenticated:!1,error:"No products have complete credentials. Run: zoho-cli auth setup"});else{let o=nt(e),r={};for(let n of t)try{let i;if(n==="recruit"?i=o.recruitApi:n==="crm"?i=o.crmApi:i=o.deskApi,!i){r[n]={authenticated:!1,error:"Not configured"};continue}let s=await i.zohoAccountsApi.accessToken();r[n]={authenticated:!0,scope:s.scope,expiresIn:s.expires_in}}catch(i){let a=i instanceof Error?i.message:String(i);r[n]={authenticated:!1,error:a}}l({products:r})}}else l({authenticated:!1,error:"No credentials configured. Run: zoho-cli auth setup"})}catch(e){h(e),process.exit(1)}}},nl={command:"clear",describe:"Remove stored credentials and token cache",builder:e=>e,handler:async()=>{try{await zn(),l({cleared:!0})}catch(e){h(e),process.exit(1)}}},ec={command:"auth",describe:"Manage Zoho API credentials",builder:e=>e.command($d).command(tl).command(ol).command(rl).command(nl).demandCommand(1,"Please specify an auth subcommand."),handler:S};import{access as il,constants as al}from"node:fs";import{dirname as sl}from"node:path";var tc={command:"doctor",describe:"Check CLI configuration and connectivity",builder:e=>e,handler:async()=>{let e=await H(),t=[];t.push(cl(e));let o=ul(e);if(o&&t.push(o),t.push(await pl()),e){let n=oe(e);t.push(dl(n),...await ll(e,n));let i=yl(e,n);i&&t.push(i)}let r=t.every(n=>n.status==="pass");l({checks:t,healthy:r}),r||process.exit(t.some(n=>n.status==="fail")?1:0)}};function cl(e){return e?{name:"config",status:"pass",message:`Config loaded from ${lt()}`}:{name:"config",status:"fail",message:"No config found. Run: zoho-cli auth setup"}}function ul(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 pl(){let e=sl(ht());return await gl(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 dl(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 ll(e,t){let o=nt(e),r=[];for(let n of t)r.push(await hl(o,n));return r}async function hl(e,t){let o=ml(e,t);if(!o)return{name:`${t}-token`,status:"warn",message:`${t}: API not configured`};let r;try{let i=await o.zohoAccountsApi.accessToken();r={name:`${t}-token`,status:"pass",message:`${t}: Token exchange successful. Scope: ${i.scope}`}}catch(n){let i=n instanceof Error?n.message:String(n);r={name:`${t}-token`,status:"fail",message:`${t}: Token exchange failed: ${i}`}}return r}function ml(e,t){return t==="recruit"?e.recruitApi:t==="crm"?e.crmApi:e.deskApi}function yl(e,t){if(e.desk?.orgId)return{name:"desk-org-id",status:"pass",message:`Desk org ID configured: ${e.desk.orgId}`};if(!t.includes("desk"))return{name:"desk-org-id",status:"warn",message:"No Desk org ID. Desk commands unavailable."}}function gl(e){return new Promise(t=>{il(e,al.W_OK,o=>{t(!o)})})}var oc=Dn({notInitializedMessage:"CLI context not initialized. This is a bug."});function rc(e){return async t=>{let o=t._?.[0];if(!(typeof o=="string"&&e.has(o)))try{let r=await H();r||(h(new Error("Not authenticated. Run: zoho-cli auth setup --client-id X --client-secret Y --token Z")),process.exit(4)),oe(r).length===0&&(h(new Error("No products configured with complete credentials. Run: zoho-cli auth setup")),process.exit(4)),oc.set(nt(r))}catch(r){h(r),process.exit(4)}}}function fr(e){return oc.require()}function W(e){let{recruitApi:t}=fr(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 B(e){let{crmApi:t}=fr(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}=fr(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 ue(e){return Zo(e.option("page",{type:"number",default:1,describe:"Page number (1-based)"}).option("per-page",{type:"number",default:20,describe:"Records per page"}))}function E(e){return Zo(e.option("from",{type:"number",default:1,describe:"Start index (1-based)"}).option("limit",{type:"number",default:25,describe:"Max records (max 50)"}))}function D(e){return e.option("module",{alias:"m",type:"string",demandOption:!0,describe:"Zoho module name (e.g. Candidates, Contacts, Leads)"})}function Se(e){return e.option("id",{type:"string",demandOption:!0,describe:"Record ID"})}function St(e,t=!1){return e.option("fields",{type:"string",demandOption:t,describe:"Comma-separated field names to return"})}function Qt(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 fl={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},O={nextInput:(e,t)=>{let o=e.limit??25,r=t.data?.length??0,n;if(o<=0||r<o)n=void 0;else{let i=e.from??1;n={...e,from:i+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}};async function pe(e){let{argv:t,initialInput:o,fetchPage:r}=e,n=await I({initialInput:o,fetchPage:r,adapter:fl,multiplePages:t.multiplePages,multiplePagesOutput:t.multiplePagesOutput,dumpOutput:t.dumpOutput,dumpMerge:t.dumpMerge});if(n.handled===!1){let i=n.result;l(i.data,{page:i.info?.page,per_page:i.info?.per_page,more_records:i.info?.more_records})}}var Rl={command:"list",describe:"List records from a module",builder:e=>Qt(St(ue(D(e)))),handler:async e=>{try{let t=W(e),o={module:e.module,page:e.page,per_page:e.perPage,fields:e.fields,sort_by:e.sortBy,sort_order:e.sortOrder};await pe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){h(t),process.exit(1)}}},Tl={command:"get",describe:"Get a record by ID",builder:e=>Se(D(e)),handler:async e=>{try{let o=await W(e).getRecordById({module:e.module,id:e.id});l(o)}catch(t){h(t),process.exit(1)}}},Cl={command:"search",describe:"Search records in a module",builder:e=>ue(D(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=W(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 pe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){h(t),process.exit(1)}}},xl={command:"insert",describe:"Insert a record into a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=W(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Zl={command:"upsert",describe:"Upsert a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=W(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Fl={command:"update",describe:"Update a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=W(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Sl={command:"delete",describe:"Delete records from a module",builder:e=>D(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=W(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});l(r)}catch(t){h(t),process.exit(1)}}},Al={command:"emails",describe:"Get emails for a record",builder:e=>ue(Se(D(e))),handler:async e=>{try{let t=W(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){h(t),process.exit(1)}}},bl={command:"attachments",describe:"Get attachments for a record",builder:e=>ue(Se(D(e))),handler:async e=>{try{let t=W(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){h(t),process.exit(1)}}},nc={command:"recruit",describe:"Zoho Recruit operations",builder:e=>e.command(Rl).command(Tl).command(Cl).command(xl).command(Zl).command(Fl).command(Sl).command(Al).command(bl).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:S};var Il={command:"list",describe:"List records from a module",builder:e=>Qt(St(ue(D(e)),!0)),handler:async e=>{try{let t=B(e),o={module:e.module,fields:e.fields,page:e.page,per_page:e.perPage,sort_by:e.sortBy,sort_order:e.sortOrder};await pe({argv:e,initialInput:o,fetchPage:r=>t.getRecords(r)})}catch(t){h(t),process.exit(1)}}},kl={command:"get",describe:"Get a record by ID",builder:e=>Se(D(e)),handler:async e=>{try{let o=await B(e).getRecordById({module:e.module,id:e.id});l(o)}catch(t){h(t),process.exit(1)}}},Pl={command:"search",describe:"Search records in a module",builder:e=>ue(D(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=B(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 pe({argv:e,initialInput:o,fetchPage:r=>t.searchRecords(r)})}catch(t){h(t),process.exit(1)}}},El={command:"insert",describe:"Insert a record into a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array)"}),handler:async e=>{try{let t=B(e),o=JSON.parse(e.data),r=await t.insertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Ol={command:"upsert",describe:"Upsert a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, include id for update)"}),handler:async e=>{try{let t=B(e),o=JSON.parse(e.data),r=await t.upsertRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Dl={command:"update",describe:"Update a record in a module",builder:e=>D(e).option("data",{type:"string",demandOption:!0,describe:"JSON record data (object or array, must include id)"}),handler:async e=>{try{let t=B(e),o=JSON.parse(e.data),r=await t.updateRecord({module:e.module,data:o});l(r)}catch(t){h(t),process.exit(1)}}},Ml={command:"delete",describe:"Delete records from a module",builder:e=>D(e).option("ids",{type:"string",demandOption:!0,describe:"Comma-separated record IDs to delete"}),handler:async e=>{try{let t=B(e),o=e.ids.split(",").map(n=>n.trim()),r=await t.deleteRecord({module:e.module,ids:o});l(r)}catch(t){h(t),process.exit(1)}}},_l={command:"emails",describe:"Get emails for a record",builder:e=>ue(Se(D(e))),handler:async e=>{try{let t=B(e),o={module:e.module,id:e.id,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getEmailsForRecord(r)})}catch(t){h(t),process.exit(1)}}},vl={command:"attachments",describe:"Get attachments for a record",builder:e=>St(ue(Se(D(e))),!0),handler:async e=>{try{let t=B(e),o={module:e.module,id:e.id,fields:e.fields,page:e.page,per_page:e.perPage};await pe({argv:e,initialInput:o,fetchPage:r=>t.getAttachmentsForRecord(r)})}catch(t){h(t),process.exit(1)}}},ic={command:"crm",describe:"Zoho CRM operations",builder:e=>e.command(Il).command(kl).command(Pl).command(El).command(Ol).command(Dl).command(Ml).command(_l).command(vl).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:S};var Nl={command:"list",describe:"List tickets",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTickets(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},wl={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});l(o)}catch(t){h(t),process.exit(1)}}},Ul={command:"search",describe:"Search tickets",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.searchTickets(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Ll={command:"by-contact <contactId>",describe:"List tickets for a contact",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketsForContact(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Gl={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});l(o)}catch(t){h(t),process.exit(1)}}},Kl={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});l(r)}catch(t){h(t),process.exit(1)}}},ac={command:"tickets",describe:"Desk ticket operations",builder:e=>e.command(Nl).command(wl).command(Ul).command(Ll).command(Gl).command(Kl).demandCommand(1),handler:S};var Vl={command:"list",describe:"List departments",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getDepartments(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Hl={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});l(o)}catch(t){h(t),process.exit(1)}}},sc={command:"departments",describe:"Desk department operations",builder:e=>e.command(Vl).command(Hl).demandCommand(1),handler:S};var zl={command:"list",describe:"List contacts",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getContacts(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},jl={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});l(o)}catch(t){h(t),process.exit(1)}}},cc={command:"contacts",describe:"Desk contact operations",builder:e=>e.command(zl).command(jl).demandCommand(1),handler:S};var Wl={command:"list",describe:"List agents",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getAgents(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Bl={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});l(o)}catch(t){h(t),process.exit(1)}}},ql={command:"my-info",describe:"Get current authenticated agent info",builder:e=>e,handler:async e=>{try{let o=await x(e).getMyInfo();l(o)}catch(t){h(t),process.exit(1)}}},uc={command:"agents",describe:"Desk agent operations",builder:e=>e.command(Wl).command(Bl).command(ql).demandCommand(1),handler:S};var Jl={command:"list",describe:"List all tags",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getAllTags(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},$l={command:"search",describe:"Search tags",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.searchTags(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},Xl={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});l(o)}catch(t){h(t),process.exit(1)}}},Yl={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});l(r)}catch(t){h(t),process.exit(1)}}},Ql={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}),l({removed:!0})}catch(t){h(t),process.exit(1)}}},pc={command:"tags",describe:"Desk tag operations",builder:e=>e.command(Jl).command($l).command(Xl).command(Yl).command(Ql).demandCommand(1),handler:S};var eh={command:"list <ticketId>",describe:"List comments on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketComments(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},th={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});l(o)}catch(t){h(t),process.exit(1)}}},oh={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});l(o)}catch(t){h(t),process.exit(1)}}},rh={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}),l({deleted:!0})}catch(t){h(t),process.exit(1)}}},dc={command:"comments",describe:"Desk comment operations",builder:e=>e.command(eh).command(th).command(oh).command(rh).demandCommand(1),handler:S};var nh={command:"list <ticketId>",describe:"List attachments on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketAttachments(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},ih={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}),l({deleted:!0})}catch(t){h(t),process.exit(1)}}},lc={command:"attachments",describe:"Desk attachment operations",builder:e=>e.command(nh).command(ih).demandCommand(1),handler:S};var ah={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});l(o)}catch(t){h(t),process.exit(1)}}},sh={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}),l({added:!0})}catch(t){h(t),process.exit(1)}}},ch={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}),l({removed:!0})}catch(t){h(t),process.exit(1)}}},hc={command:"followers",describe:"Desk ticket follower operations",builder:e=>e.command(ah).command(sh).command(ch).demandCommand(1),handler:S};var uh={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});l(o)}catch(t){h(t),process.exit(1)}}},ph={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});l(o)}catch(t){h(t),process.exit(1)}}},dh={command:"entries <ticketId>",describe:"List time entries for a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketTimeEntries(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},lh={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});l(o)}catch(t){h(t),process.exit(1)}}},mc={command:"time",describe:"Desk time tracking operations",builder:e=>e.command(uh).command(ph).command(dh).command(lh).demandCommand(1),handler:S};var hh={command:"list <ticketId>",describe:"List threads on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketThreads(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},mh={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});l(o)}catch(t){h(t),process.exit(1)}}},yc={command:"threads",describe:"Desk ticket thread operations",builder:e=>e.command(hh).command(mh).demandCommand(1),handler:S};var yh={command:"list <ticketId>",describe:"List activities on a ticket",builder:e=>E(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 I({initialInput:o,fetchPage:n=>t.getTicketActivities(n),adapter:O,multiplePages:e.multiplePages,multiplePagesOutput:e.multiplePagesOutput,dumpOutput:e.dumpOutput,dumpMerge:e.dumpMerge});if(r.handled===!1){let n=r.result;l(n.data,{from:e.from,limit:e.limit,count:n.data?.length})}}catch(t){h(t),process.exit(1)}}},gc={command:"activities",describe:"Desk ticket activity operations",builder:e=>e.command(yh).demandCommand(1),handler:S};var fc={command:"desk",describe:"Zoho Desk operations",builder:e=>e.command(ac).command(sc).command(cc).command(uc).command(pc).command(dc).command(lc).command(hc).command(mc).command(yc).command(gc).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:S};var Rc={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"],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"]]),handler:async e=>{try{let t=e.product,o=e.method,r=e.path,n;switch(t){case"recruit":n=W(e).recruitContext;break;case"crm":n=B(e).crmContext;break;case"desk":n=x(e).deskContext;break;default:throw new Error(`Unknown product: ${t}`)}let i=r;if(e.query){let c=JSON.parse(e.query),u=new URLSearchParams(c),p=i.includes("?")?"&":"?";i=`${i}${p}${u.toString()}`}let a={method:o};e.body&&(a.body=e.body,a.headers={"Content-Type":"application/json"});let s=await n.fetchJson(i,a);l(s)}catch(t){h(t),process.exit(1)}}};var Rh=Kn({cliName:"zoho-cli",loadOutputConfig:async()=>(await H())?.output,mergeOutputConfig:e=>te({output:e}),clearOutputConfig:Hn}),Th=[nc,ic,fc,Rc],Tc=[ec,Rh,tc];function Ch(e){return e.command.split(" ")[0]}var Cc=new Set(Tc.map(Ch)),xh=Gn({cliName:"zoho-cli",skipCommands:Cc,loadOutputConfig:async()=>(await H())?.output,saveCommandOutputConfig:async(e,t)=>{await te({output:{commands:{[e]:t}}})}});async function Zh(){try{await gh(fh(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([rc(Cc),xh],!0).command(Tc).command(Th).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){h(e),process.exit(1)}}await Zh();
package/cli/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@dereekb/zoho/cli",
3
- "version": "13.26.0",
3
+ "version": "13.27.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "zoho-cli": "index.js"
7
7
  },
8
8
  "peerDependencies": {
9
- "@dereekb/dbx-cli": "13.26.0",
10
- "@dereekb/nestjs": "13.26.0",
11
- "@dereekb/rxjs": "13.26.0",
12
- "@dereekb/util": "13.26.0",
13
- "@dereekb/zoho": "13.26.0",
14
- "@dereekb/zoho/nestjs": "13.26.0",
9
+ "@dereekb/dbx-cli": "13.27.0",
10
+ "@dereekb/nestjs": "13.27.0",
11
+ "@dereekb/rxjs": "13.27.0",
12
+ "@dereekb/util": "13.27.0",
13
+ "@dereekb/zoho": "13.27.0",
14
+ "@dereekb/zoho/nestjs": "13.27.0",
15
15
  "yargs": "^18.0.0"
16
16
  },
17
17
  "devDependencies": {
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@dereekb/zoho/nestjs",
3
- "version": "13.26.0",
3
+ "version": "13.27.0",
4
4
  "peerDependencies": {
5
- "@dereekb/nestjs": "13.26.0",
6
- "@dereekb/rxjs": "13.26.0",
7
- "@dereekb/util": "13.26.0",
8
- "@dereekb/zoho": "13.26.0",
5
+ "@dereekb/nestjs": "13.27.0",
6
+ "@dereekb/rxjs": "13.27.0",
7
+ "@dereekb/util": "13.27.0",
8
+ "@dereekb/zoho": "13.27.0",
9
9
  "@nestjs/common": "^11.1.19",
10
10
  "@nestjs/config": "^4.0.4",
11
11
  "express": "^5.2.1"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/zoho",
3
- "version": "13.26.0",
3
+ "version": "13.27.0",
4
4
  "bin": {
5
5
  "zoho-cli": "cli/index.js"
6
6
  },
@@ -23,13 +23,13 @@
23
23
  }
24
24
  },
25
25
  "peerDependencies": {
26
- "@dereekb/date": "13.26.0",
27
- "@dereekb/dbx-cli": "13.26.0",
28
- "@dereekb/firebase": "13.26.0",
29
- "@dereekb/model": "13.26.0",
30
- "@dereekb/nestjs": "13.26.0",
31
- "@dereekb/rxjs": "13.26.0",
32
- "@dereekb/util": "13.26.0",
26
+ "@dereekb/date": "13.27.0",
27
+ "@dereekb/dbx-cli": "13.27.0",
28
+ "@dereekb/firebase": "13.27.0",
29
+ "@dereekb/model": "13.27.0",
30
+ "@dereekb/nestjs": "13.27.0",
31
+ "@dereekb/rxjs": "13.27.0",
32
+ "@dereekb/util": "13.27.0",
33
33
  "@nestjs/common": "^11.1.19",
34
34
  "@nestjs/config": "^4.0.4",
35
35
  "express": "^5.2.1",