@corsair-dev/zoominfo 0.1.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.
Files changed (49) hide show
  1. package/LICENSE +191 -0
  2. package/dist/api.test.d.ts +2 -0
  3. package/dist/api.test.d.ts.map +1 -0
  4. package/dist/auth.d.ts +31 -0
  5. package/dist/auth.d.ts.map +1 -0
  6. package/dist/auth.test.d.ts +2 -0
  7. package/dist/auth.test.d.ts.map +1 -0
  8. package/dist/client.d.ts +49 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/endpoints/endpoints.test.d.ts +2 -0
  11. package/dist/endpoints/endpoints.test.d.ts.map +1 -0
  12. package/dist/endpoints/enrichments.d.ts +16 -0
  13. package/dist/endpoints/enrichments.d.ts.map +1 -0
  14. package/dist/endpoints/index.d.ts +21 -0
  15. package/dist/endpoints/index.d.ts.map +1 -0
  16. package/dist/endpoints/input-fields.d.ts +8 -0
  17. package/dist/endpoints/input-fields.d.ts.map +1 -0
  18. package/dist/endpoints/searches.d.ts +9 -0
  19. package/dist/endpoints/searches.d.ts.map +1 -0
  20. package/dist/endpoints/shared.d.ts +21 -0
  21. package/dist/endpoints/shared.d.ts.map +1 -0
  22. package/dist/endpoints/types.d.ts +1769 -0
  23. package/dist/endpoints/types.d.ts.map +1 -0
  24. package/dist/error-handlers.d.ts +22 -0
  25. package/dist/error-handlers.d.ts.map +1 -0
  26. package/dist/index.d.ts +971 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +1 -0
  29. package/dist/schema/database.d.ts +122 -0
  30. package/dist/schema/database.d.ts.map +1 -0
  31. package/dist/schema/index.d.ts +120 -0
  32. package/dist/schema/index.d.ts.map +1 -0
  33. package/dist/tsup.config.d.ts +3 -0
  34. package/dist/tsup.config.d.ts.map +1 -0
  35. package/dist/webhooks/index.d.ts +79 -0
  36. package/dist/webhooks/index.d.ts.map +1 -0
  37. package/dist/webhooks/subscribe.d.ts +27 -0
  38. package/dist/webhooks/subscribe.d.ts.map +1 -0
  39. package/dist/webhooks/subscribe.test.d.ts +2 -0
  40. package/dist/webhooks/subscribe.test.d.ts.map +1 -0
  41. package/dist/webhooks/tenant-matcher.d.ts +13 -0
  42. package/dist/webhooks/tenant-matcher.d.ts.map +1 -0
  43. package/dist/webhooks/types.d.ts +113 -0
  44. package/dist/webhooks/types.d.ts.map +1 -0
  45. package/dist/webhooks/updates.d.ts +4 -0
  46. package/dist/webhooks/updates.d.ts.map +1 -0
  47. package/dist/webhooks/webhooks.test.d.ts +2 -0
  48. package/dist/webhooks/webhooks.test.d.ts.map +1 -0
  49. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import{AuthMissingError as Tn}from"corsair/core";import{AuthMissingError as mn}from"corsair/core";import{createSign as en}from"crypto";import{ApiError as an,request as rn}from"corsair/http";var k=class extends Error{constructor(r,i){super(r);this.code=i;this.name="ZoominfoAPIError"}},mo="https://api.zoominfo.com",sn=3600*1e3,pn=300*1e3;function uo(n,t,r=Date.now()){if(!n)return!1;let i=typeof t=="number"?t:Number(t??Number.NaN);return Number.isFinite(i)?i-pn>r:!1}function cn(n){let t=n.length;for(;t>0&&n.charCodeAt(t-1)===47;)t--;return n.slice(0,t)}function P(n){return Buffer.from(n).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function ln({username:n,clientId:t,privateKey:r,now:i=Date.now()}){let s=Math.floor(i/1e3),h={typ:"JWT",alg:"RS256"},u={aud:"enterprise_api",iss:"zoominfo-api-auth-client-nodejs",username:n,client_id:t,iat:s-60,exp:s+300-60},p=`${P(JSON.stringify(h))}.${P(JSON.stringify(u))}`,g=en("RSA-SHA256");return g.update(p),g.end(),`${p}.${P(g.sign(r))}`}async function ho(n,{baseUrl:t=mo,now:r=Date.now()}={}){let i={"Content-Type":"application/json"},s="{}";n.kind==="basic"?s=JSON.stringify({username:n.username,password:n.password}):i.Authorization=`Bearer ${ln({username:n.username,clientId:n.clientId,privateKey:n.privateKey,now:r})}`;let h=await fetch(`${cn(t)}/authenticate`,{method:"POST",headers:i,body:s}),u=await h.text();if(!h.ok)throw new k(`ZoomInfo authentication failed: ${u||h.statusText}`,String(h.status));let p;try{p=JSON.parse(u).jwt}catch{p=void 0}if(!p)throw new k("ZoomInfo authentication returned no JWT in the response body");return{accessToken:p,expiresAt:r+sn}}async function T(n,t,r={}){let{method:i="GET",body:s,query:h,baseUrl:u=mo}=r,p={BASE:u,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{"Content-Type":"application/json"}},g={method:i,url:n,body:i==="GET"||i==="DELETE"?void 0:s,mediaType:"application/json",query:h};try{return await rn(p,g)}catch(f){throw f instanceof an?f:f instanceof Error?new k(f.message):new k("Unknown error")}}var R=new Map;function go(n){let t=n.zoominfo_username;return t?n.zoominfo_client_id&&n.zoominfo_private_key?{kind:"pki",username:t,clientId:n.zoominfo_client_id,privateKey:n.zoominfo_private_key}:n.zoominfo_password?{kind:"basic",username:t,password:n.zoominfo_password}:null:null}async function z(n,{baseUrl:t}={}){let[r,i,s]=await Promise.all([n.keys.get_access_token(),n.keys.get_expires_at(),n.keys.get_integration_credentials()]);if(r&&uo(r,i))return r;let h=go(s);if(!h)throw new mn("zoominfo","oauth_2");let u=R.get(n.tenantId);if(u)return u;let p=(async()=>{let g=await ho(h,{baseUrl:t});try{await n.keys.set_access_token(g.accessToken),await n.keys.set_expires_at(String(g.expiresAt))}catch(f){console.warn(`[corsair:zoominfo] Obtained a JWT but failed to persist it: ${f instanceof Error?f.message:String(f)}`)}return g.accessToken})();R.set(n.tenantId,p);try{return await p}finally{R.delete(n.tenantId)}}import{logEventFromContext as un}from"corsair/core";function dn(n){if(typeof n!="object"||n===null)return{filters:[]};let t=n,i={filters:Object.keys(t).filter(s=>t[s]!==void 0).filter(s=>s!=="rpp"&&s!=="page").sort()};return typeof t.rpp=="number"&&(i.rpp=t.rpp),typeof t.page=="number"&&(i.page=t.page),i}async function d(n,{event:t,path:r,method:i="POST",inputSchema:s,outputSchema:h},u){let p=s.parse(u),g=await T(r,n.key,{method:i,body:i==="POST"?p:void 0}),f=h.parse(g);return await un(n,t,dn(p),"completed"),f}import{z as o}from"zod";var b=o.object({rpp:o.number().int().positive().optional(),page:o.number().int().positive().optional(),sortBy:o.string().optional(),sortOrder:o.enum(["asc","ascending","desc","descending"]).optional().describe("Defaults to desc.")}),O=o.object({companyDescription:o.string().optional(),companyType:o.string().optional(),companyRanking:o.string().optional(),companyStructureIncludedSubUnitTypes:o.string().optional(),subUnitTypes:o.string().optional(),address:o.string().optional(),street:o.string().optional(),state:o.string().optional(),zipCode:o.string().optional(),country:o.string().optional(),continent:o.string().optional(),metroRegion:o.string().optional(),excludedRegions:o.string().optional(),zipCodeRadiusMiles:o.string().optional(),locationSearchType:o.enum(["PersonOrHQ","PersonAndHQ","Person","HQ","PersonThenHQ"]).optional(),hashTagString:o.string().optional(),techAttributeTagList:o.string().optional(),primaryIndustriesOnly:o.boolean().optional(),industryCodes:o.string().optional(),industryKeywords:o.string().optional(),sicCodes:o.string().optional(),naicsCodes:o.string().optional(),revenue:o.string().optional(),revenueMin:o.number().int().optional(),revenueMax:o.number().int().optional(),employeeCount:o.string().optional(),employeeRangeMin:o.string().optional(),employeeRangeMax:o.string().optional(),fundingAmountMin:o.number().int().optional(),fundingAmountMax:o.number().int().optional(),fundingStartDate:o.string().optional(),fundingEndDate:o.string().optional(),oneYearEmployeeGrowthRateMin:o.string().optional(),oneYearEmployeeGrowthRateMax:o.string().optional(),twoYearEmployeeGrowthRateMin:o.string().optional(),twoYearEmployeeGrowthRateMax:o.string().optional(),zoominfoContactsMin:o.string().optional(),zoominfoContactsMax:o.string().optional()}),A=o.object({companyId:o.string().optional(),companyName:o.string().optional(),companyWebsite:o.string().optional(),parentId:o.string().optional(),ultimateParentId:o.string().optional()}),fo=o.object({personId:o.string().optional(),emailAddress:o.string().optional(),hashedEmail:o.string().optional(),fullName:o.string().optional(),firstName:o.string().optional(),middleInitial:o.string().optional(),lastName:o.string().optional(),jobTitle:o.string().optional(),excludeJobTitle:o.string().optional(),managementLevel:o.string().optional(),excludeManagementLevel:o.string().optional(),department:o.string().optional(),jobFunction:o.string().optional(),boardMember:o.enum(["include","exclude","only"]).optional(),hasBeenNotified:o.enum(["include","exclude","only"]).optional(),companyPastOrPresent:o.enum(["present","past","pastAndPresent"]).optional(),excludePartialProfiles:o.boolean().optional(),executivesOnly:o.boolean().optional(),requiredFields:o.string().optional(),contactAccuracyScoreMin:o.string().optional(),contactAccuracyScoreMax:o.string().optional(),lastUpdatedInMonths:o.number().int().optional(),school:o.string().optional(),degree:o.string().optional(),locationCompanyId:o.array(o.string()).optional()}),x=o.looseObject({id:o.number().optional(),name:o.string().optional()});function y(n){return o.looseObject({maxResults:o.number().optional(),totalResults:o.number().optional(),currentPage:o.number().optional(),data:o.array(n)})}function yo(n){return o.looseObject({success:o.boolean().optional(),data:o.looseObject({outputFields:o.array(o.array(o.string())).optional(),result:o.array(o.looseObject({input:o.record(o.string(),o.unknown()).optional(),data:o.array(n)}))})})}var hn=o.looseObject({id:o.number().optional(),name:o.string().optional(),website:o.string().optional(),ticker:o.string().optional(),domainList:o.array(o.string()).optional(),logo:o.string().optional(),revenue:o.number().optional(),employeeCount:o.number().optional(),phone:o.string().optional(),street:o.string().optional(),city:o.string().optional(),state:o.string().optional(),zipCode:o.string().optional(),country:o.string().optional(),companyStatus:o.string().optional()}),gn=o.looseObject({id:o.number().optional(),firstName:o.string().optional(),middleName:o.string().optional(),lastName:o.string().optional(),email:o.string().optional(),phone:o.string().optional(),mobilePhone:o.string().optional(),jobTitle:o.string().optional(),contactAccuracyScore:o.number().optional(),lastUpdatedDate:o.string().optional(),validDate:o.string().optional(),companyId:o.number().optional(),companyName:o.string().optional(),companyWebsite:o.string().optional()}),fn=o.looseObject({fieldName:o.string(),fieldType:o.string().optional(),description:o.string().optional(),accessGranted:o.string().optional()}),S=o.array(fn),F=b.extend(O.shape).extend(A.shape).extend({companyTicker:o.array(o.string()).optional(),certified:o.union([o.literal(0),o.literal(1)]).optional(),excludeDefunctCompanies:o.boolean().optional(),businessModel:o.array(o.enum(["B2C","B2B","B2G"])).optional(),engagementStartDate:o.string().optional(),engagementEndDate:o.string().optional(),engagementType:o.array(o.enum(["email","phone","online meeting"])).optional(),marketingDepartmentBudgetMin:o.number().int().min(0).optional(),marketingDepartmentBudgetMax:o.number().int().min(0).optional(),financeDepartmentBudgetMin:o.number().int().min(0).optional(),financeDepartmentBudgetMax:o.number().int().min(0).optional(),itDepartmentBudgetMin:o.number().int().min(0).optional(),itDepartmentBudgetMax:o.number().int().min(0).optional(),hrDepartmentBudgetMin:o.number().int().min(0).optional(),hrDepartmentBudgetMax:o.number().int().min(0).optional()}),W=y(o.looseObject({id:o.number(),name:o.string().optional()})),j=b.extend(O.shape).extend(A.shape).extend(fo.shape).extend({companyTicker:o.array(o.string()).optional(),exactJobTitle:o.string().optional(),yearsOfExperience:o.string().optional(),phone:o.array(o.string()).optional(),supplementalEmail:o.array(o.string()).optional(),webReferences:o.array(o.string()).optional(),techSkills:o.array(o.string()).optional(),buyingGroup:o.array(o.string()).max(1).optional(),lastUpdatedDateAfter:o.string().optional(),validDateAfter:o.string().optional(),positionStartDateMin:o.string().optional(),positionStartDateMax:o.string().optional(),engagementStartDate:o.string().optional(),engagementEndDate:o.string().optional(),engagementType:o.array(o.enum(["email","phone","online meeting"])).optional()}),U=y(o.looseObject({id:o.number(),firstName:o.string().optional(),middleName:o.string().optional(),lastName:o.string().optional(),validDate:o.string().optional(),lastUpdatedDate:o.string().optional(),jobTitle:o.string().optional(),contactAccuracyScore:o.number().optional(),hasEmail:o.boolean().optional(),hasSupplementalEmail:o.boolean().optional(),hasDirectPhone:o.boolean().optional(),hasMobilePhone:o.boolean().optional(),hasCompanyIndustry:o.boolean().optional(),hasCompanyPhone:o.boolean().optional(),hasCompanyStreet:o.boolean().optional(),hasCompanyState:o.boolean().optional(),hasCompanyZipCode:o.boolean().optional(),hasCompanyCountry:o.boolean().optional(),hasCompanyRevenue:o.boolean().optional(),hasCompanyEmployeeCount:o.boolean().optional(),company:x.optional()})),v=o.enum(["A","B","C","D","E"]),D=b.extend(O.shape).extend({topics:o.array(o.string()).optional(),signalStartDate:o.string().optional(),signalEndDate:o.string().optional(),signalScoreMin:o.number().int().min(60).max(100).optional(),signalScoreMax:o.number().int().min(60).max(100).optional(),audienceStrengthMin:v.optional(),audienceStrengthMax:v.optional(),certified:o.union([o.literal(0),o.literal(1)]).optional(),excludeDefunctCompanies:o.boolean().optional()}),bo=o.looseObject({id:o.string(),category:o.string().optional(),topic:o.string().optional(),signalScore:o.number().optional(),audienceStrength:o.string().optional(),newSignal:o.boolean().optional(),signalDate:o.string().optional(),trend:o.number().optional(),recommendedContacts:o.array(o.looseObject({id:o.number().optional(),firstName:o.string().optional(),lastName:o.string().optional(),jobTitle:o.string().optional(),jobFunction:o.array(o.looseObject({name:o.string().optional(),department:o.string().optional()})).optional()})).optional(),company:x.extend({website:o.string().optional(),hasOtherTopicConsumption:o.boolean().optional()}).optional()}),_=y(bo),M=o.object({rpp:o.number().int().positive().optional(),page:o.number().int().positive().optional(),categories:o.array(o.string()).optional(),pageDateMin:o.string().optional(),pageDateMax:o.string().optional()}),So=o.looseObject({domain:o.string().optional(),title:o.string().optional(),url:o.string().optional(),imageUrl:o.string().optional(),pageDate:o.string().optional(),description:o.string().optional(),categories:o.array(o.string()).optional(),company:o.array(x).optional()}),L=y(So),B=b.extend(O.shape).extend(A.shape).extend(fo.shape).extend({scoopId:o.string().optional(),scoopType:o.string().optional(),scoopTopic:o.string().optional(),description:o.string().optional(),publishedStartDate:o.string().optional(),publishedEndDate:o.string().optional(),updatedSinceCreation:o.boolean().optional(),certified:o.union([o.literal(0),o.literal(1)]).optional(),excludeDefunctCompanies:o.boolean().optional()}),Co=o.looseObject({id:o.number(),publishedDate:o.string().optional(),originalPublishedDate:o.string().optional(),linkText:o.string().optional(),link:o.string().optional(),description:o.string().optional(),updateText:o.string().optional(),topics:o.array(o.unknown()).optional(),types:o.array(o.looseObject({id:o.number().optional(),type:o.string().optional()})).optional(),contacts:o.array(o.unknown()).optional(),company:x.optional()}),H=y(Co),K=o.object({matchCompanyInput:o.array(o.object({companyId:o.union([o.number(),o.string()]).optional(),companyName:o.string().optional(),companyWebsite:o.string().optional(),companyTicker:o.string().optional(),companyPhone:o.string().optional(),companyFax:o.string().optional(),companyStreet:o.string().optional(),companyCity:o.string().optional(),companyState:o.string().optional(),companyZipCode:o.string().optional(),companyCountry:o.string().optional(),ipAddress:o.string().optional()}).refine(n=>Object.values(n).some(t=>t!==void 0),{message:"each matchCompanyInput entry needs one identifier"})).min(1).max(25),outputFields:o.array(o.string()).optional()}),q=yo(hn),G=o.object({matchPersonInput:o.array(o.object({personId:o.union([o.number(),o.string()]).optional(),firstName:o.string().optional(),lastName:o.string().optional(),fullName:o.string().optional(),emailAddress:o.string().optional(),hashedEmail:o.string().optional(),phone:o.string().optional(),jobTitle:o.string().optional(),companyId:o.union([o.number(),o.string()]).optional(),companyName:o.string().optional(),companyWebsite:o.string().optional()}).refine(n=>Object.values(n).some(t=>t!==void 0),{message:"each matchPersonInput entry needs one identifier"})).min(1).max(25),outputFields:o.array(o.string()).optional()}),$=yo(gn),J=b.extend({companyId:o.string().optional(),companyName:o.string().optional(),companyWebsite:o.string().optional(),street:o.string().optional(),city:o.string().optional(),state:o.string().optional(),zipCode:o.string().optional(),country:o.string().optional()}).refine(n=>n.companyId!==void 0||n.companyName!==void 0||n.companyWebsite!==void 0,{message:"companyId, companyName or companyWebsite is required"}),Y=y(o.looseObject({phone:o.string().optional(),fax:o.string().optional(),street:o.string().optional(),city:o.string().optional(),state:o.string().optional(),zipCode:o.string().optional(),country:o.string().optional(),company:x.extend({addressStatus:o.string().optional(),subUnitType:o.string().optional(),locationName:o.string().optional(),locationEmployeeCount:o.number().optional()}).optional()})),Q=b.extend({companyId:o.union([o.number(),o.string()]).optional(),companyName:o.string().optional(),companyWebsite:o.string().optional(),topics:o.array(o.string()).optional(),signalStartDate:o.string().optional(),signalEndDate:o.string().optional(),signalScoreMin:o.number().int().min(60).max(100).optional(),signalScoreMax:o.number().int().min(60).max(100).optional(),audienceStrengthMin:v.optional(),audienceStrengthMax:v.optional()}).refine(n=>n.companyId!==void 0||n.companyName!==void 0||n.companyWebsite!==void 0,{message:"companyId, companyName or companyWebsite is required"}),V=y(bo),X=o.object({companyId:o.union([o.number(),o.string()]).optional(),companyName:o.string().optional(),companyWebsite:o.string().optional(),categories:o.array(o.string()).optional(),url:o.array(o.string()).optional(),pageDateMin:o.string().optional(),pageDateMax:o.string().optional(),limit:o.number().int().positive().optional()}).refine(n=>n.companyId!==void 0||n.companyName!==void 0||n.companyWebsite!==void 0,{message:"companyId, companyName or companyWebsite is required"}),oo=y(So),no=b.extend({companyId:o.union([o.number(),o.string()]).optional(),companyName:o.string().optional(),companyWebsite:o.string().optional(),scoopType:o.string().optional(),scoopTopic:o.string().optional(),department:o.string().optional(),publishedStartDate:o.string().optional(),publishedEndDate:o.string().optional(),updatedSinceCreation:o.boolean().optional()}).refine(n=>n.companyId!==void 0||n.companyName!==void 0||n.companyWebsite!==void 0,{message:"companyId, companyName or companyWebsite is required"}),to=y(Co),eo=b.extend({companyId:o.union([o.number(),o.string()]).optional(),companyName:o.string().optional(),companyWebsite:o.string().optional()}).refine(n=>n.companyId!==void 0||n.companyName!==void 0||n.companyWebsite!==void 0,{message:"companyId, companyName or companyWebsite is required"}),io=y(o.looseObject({tag:o.string().optional(),categoryParent:o.string().optional(),category:o.string().optional(),vendor:o.string().optional(),product:o.string().optional(),attribute:o.string().optional(),website:o.string().optional(),logo:o.string().optional(),domain:o.string().optional(),createdTime:o.string().optional(),modifiedTime:o.string().optional(),description:o.string().optional()})),C=o.object({}),c={searchCompanies:F,searchContacts:j,searchIntent:D,searchNews:M,searchScoops:B,enrichCompany:K,enrichContact:G,enrichIntent:Q,enrichLocation:J,enrichNews:X,enrichScoop:no,enrichTechnology:eo,getCompanySearchInputFields:C,getContactSearchInputFields:C,getIntentSearchInputFields:C,getNewsSearchInputFields:C,getScoopSearchInputFields:C},l={searchCompanies:W,searchContacts:U,searchIntent:_,searchNews:L,searchScoops:H,enrichCompany:q,enrichContact:$,enrichIntent:V,enrichLocation:Y,enrichNews:oo,enrichScoop:to,enrichTechnology:io,getCompanySearchInputFields:S,getContactSearchInputFields:S,getIntentSearchInputFields:S,getNewsSearchInputFields:S,getScoopSearchInputFields:S};var ko=(n,t)=>d(n,{event:"zoominfo.enrichCompany",path:"enrich/company",inputSchema:K,outputSchema:q},t),xo=(n,t)=>d(n,{event:"zoominfo.enrichContact",path:"enrich/contact",inputSchema:G,outputSchema:$},t),Io=(n,t)=>d(n,{event:"zoominfo.enrichIntent",path:"enrich/intent",inputSchema:Q,outputSchema:V},t),Zo=(n,t)=>d(n,{event:"zoominfo.enrichLocation",path:"enrich/location",inputSchema:J,outputSchema:Y},t),wo=(n,t)=>d(n,{event:"zoominfo.enrichNews",path:"enrich/news",inputSchema:X,outputSchema:oo},t),Eo=(n,t)=>d(n,{event:"zoominfo.enrichScoop",path:"enrich/scoop",inputSchema:no,outputSchema:to},t),To=(n,t)=>d(n,{event:"zoominfo.enrichTechnology",path:"enrich/tech",inputSchema:eo,outputSchema:io},t);function I(n,t){return(r,i)=>d(r,{event:t,path:`lookup/inputfields/${n}/search`,method:"GET",inputSchema:C,outputSchema:S},i)}var zo=I("company","zoominfo.getCompanySearchInputFields"),vo=I("contact","zoominfo.getContactSearchInputFields"),Oo=I("intent","zoominfo.getIntentSearchInputFields"),No=I("news","zoominfo.getNewsSearchInputFields"),Po=I("scoop","zoominfo.getScoopSearchInputFields");var Ro=(n,t)=>d(n,{event:"zoominfo.searchCompanies",path:"search/company",inputSchema:F,outputSchema:W},t),Ao=(n,t)=>d(n,{event:"zoominfo.searchContacts",path:"search/contact",inputSchema:j,outputSchema:U},t),Fo=(n,t)=>d(n,{event:"zoominfo.searchIntent",path:"search/intent",inputSchema:D,outputSchema:_},t),Wo=(n,t)=>d(n,{event:"zoominfo.searchNews",path:"search/news",inputSchema:M,outputSchema:L},t),jo=(n,t)=>d(n,{event:"zoominfo.searchScoops",path:"search/scoop",inputSchema:B,outputSchema:H},t);var m={searchCompanies:Ro,searchContacts:Ao,searchIntent:Fo,searchNews:Wo,searchScoops:jo,enrichCompany:ko,enrichContact:xo,enrichIntent:Io,enrichLocation:Zo,enrichNews:wo,enrichScoop:Eo,enrichTechnology:To,getCompanySearchInputFields:zo,getContactSearchInputFields:vo,getIntentSearchInputFields:Oo,getNewsSearchInputFields:No,getScoopSearchInputFields:Po};import{ApiError as ao}from"corsair/http";var yn="zi0001",Uo={RATE_LIMIT_ERROR:{match:n=>{if(n instanceof ao&&n.status===429)return!0;let t=n.message.toLowerCase();return t.includes("rate limit")||t.includes("429")},handler:async n=>({maxRetries:0,headersRetryAfterMs:n instanceof ao?n.retryAfter:void 0})},AUTH_ERROR:{match:n=>{if(n instanceof ao&&n.status===401)return!0;let t=n.message.toLowerCase();return t.includes(yn)||t.includes("unauthorized")||t.includes("authentication failed")||t.includes("invalid bearer token")},handler:async()=>({maxRetries:0})},DEFAULT:{match:()=>!0,handler:async()=>({maxRetries:0})}};import{z as e}from"zod";var Z=e.object({id:e.number().nullable().optional(),name:e.string().nullable().optional()}),Do=e.object({id:e.union([e.string(),e.number()]),name:e.string().nullable().optional(),website:e.string().nullable().optional(),ticker:e.string().nullable().optional(),revenue:e.number().nullable().optional(),employeeCount:e.number().nullable().optional(),numberOfContactsInZoomInfo:e.number().nullable().optional(),phone:e.string().nullable().optional(),street:e.string().nullable().optional(),city:e.string().nullable().optional(),state:e.string().nullable().optional(),zipCode:e.string().nullable().optional(),country:e.string().nullable().optional(),companyStatus:e.string().nullable().optional(),foundedYear:e.union([e.string(),e.number()]).nullable().optional(),logo:e.string().nullable().optional(),socialMediaUrls:e.array(e.unknown()).nullable().optional(),domainList:e.array(e.string()).nullable().optional(),sicCodes:e.array(e.unknown()).nullable().optional(),naicsCodes:e.array(e.unknown()).nullable().optional()}),_o=e.object({id:e.union([e.string(),e.number()]),firstName:e.string().nullable().optional(),middleName:e.string().nullable().optional(),lastName:e.string().nullable().optional(),jobTitle:e.string().nullable().optional(),contactAccuracyScore:e.number().nullable().optional(),hasEmail:e.boolean().nullable().optional(),hasSupplementalEmail:e.boolean().nullable().optional(),hasDirectPhone:e.boolean().nullable().optional(),hasMobilePhone:e.boolean().nullable().optional(),validDate:e.coerce.date().nullable().optional(),lastUpdatedDate:e.coerce.date().nullable().optional(),company:Z.nullable().optional()}),Mo=e.object({id:e.string(),category:e.string().nullable().optional(),topic:e.string().nullable().optional(),signalScore:e.number().nullable().optional(),audienceStrength:e.string().nullable().optional(),newSignal:e.boolean().nullable().optional(),signalDate:e.coerce.date().nullable().optional(),trend:e.number().nullable().optional(),company:Z.nullable().optional()}),Lo=e.object({id:e.string(),url:e.string().nullable().optional(),title:e.string().nullable().optional(),domain:e.string().nullable().optional(),imageUrl:e.string().nullable().optional(),description:e.string().nullable().optional(),pageDate:e.coerce.date().nullable().optional(),categories:e.array(e.string()).nullable().optional(),companies:e.array(Z).nullable().optional()}),Bo=e.object({id:e.union([e.string(),e.number()]),description:e.string().nullable().optional(),link:e.string().nullable().optional(),linkText:e.string().nullable().optional(),updateText:e.string().nullable().optional(),publishedDate:e.coerce.date().nullable().optional(),originalPublishedDate:e.coerce.date().nullable().optional(),topics:e.array(e.unknown()).nullable().optional(),types:e.array(e.unknown()).nullable().optional(),company:Z.nullable().optional()}),Ho=e.object({id:e.string(),vendor:e.string().nullable().optional(),product:e.string().nullable().optional(),category:e.string().nullable().optional(),categoryParent:e.string().nullable().optional(),attribute:e.string().nullable().optional(),website:e.string().nullable().optional(),domain:e.string().nullable().optional(),logo:e.string().nullable().optional(),description:e.string().nullable().optional()}),Ko=e.object({id:e.string(),street:e.string().nullable().optional(),city:e.string().nullable().optional(),state:e.string().nullable().optional(),zipCode:e.string().nullable().optional(),country:e.string().nullable().optional(),phone:e.string().nullable().optional(),fax:e.string().nullable().optional(),addressStatus:e.string().nullable().optional(),subUnitType:e.string().nullable().optional(),locationName:e.string().nullable().optional(),locationEmployeeCount:e.number().nullable().optional(),company:Z.nullable().optional()});var qo={version:"1.0.0",entities:{companies:Do,contacts:_o,intentSignals:Mo,newsArticles:Lo,scoops:Bo,technologies:Ho,locations:Ko}};import{logEventFromContext as Yo}from"corsair/core";import{timingSafeEqual as bn}from"crypto";import{z as a}from"zod";var N="x-zoominfo-token",ro=a.looseObject({id:a.string(),title:a.string().optional(),objectType:a.string(),eventType:a.string()}),Go=a.looseObject({webhookDetails:ro,data:a.array(a.looseObject({id:a.union([a.string(),a.number()])}))}),so=n=>t=>typeof t=="string"&&t.toLowerCase()===n,w=Go.extend({webhookDetails:ro.extend({objectType:a.string().refine(so("contact"))}),data:a.array(a.looseObject({id:a.union([a.string(),a.number()]),firstName:a.string().optional(),lastName:a.string().optional(),email:a.string().optional(),changedAttributes:a.array(a.string()).optional()}))}),E=Go.extend({webhookDetails:ro.extend({objectType:a.string().refine(so("company"))}),data:a.array(a.looseObject({id:a.union([a.string(),a.number()]),name:a.string().optional(),website:a.string().optional(),changedAttributes:a.array(a.string()).optional()}))});function Sn(n){if(typeof n=="string")try{let t=JSON.parse(n);return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:null}function po(n){return t=>{let i=Sn(t.body)?.webhookDetails;return typeof i!="object"||i===null?!1:so(n)(i.objectType)}}function Cn(n,t){if(n){for(let[r,i]of Object.entries(n))if(r.toLowerCase()===t){if(typeof i=="string")return i;if(Array.isArray(i)&&typeof i[0]=="string")return i[0]}}}function co(n,t){if(n.hubVerified===!0)return{valid:!0};if(!t)return{valid:!1,error:"No ZoomInfo verification token configured"};let r=Cn(n.headers,N);if(!r)return{valid:!1,error:`Missing ${N} header`};let i=Buffer.from(r),s=Buffer.from(t);return i.length!==s.length||!bn(i,s)?{valid:!1,error:"Verification token mismatch"}:{valid:!0}}var kn=a.looseObject({subscriptionId:a.string().optional(),eventType:a.string().optional(),objectType:a.string().optional(),fullPayload:a.boolean().optional()}),lo=a.looseObject({id:a.string(),title:a.string().optional(),enabled:a.boolean().optional(),targetUrl:a.string(),createdDate:a.string().optional(),verificationToken:a.string().optional(),subscriptions:a.array(kn).optional()}),$o=a.looseObject({webhooks:a.array(lo)}),Jo=a.looseObject({verificationToken:a.string()});var Qo={match:po("contact"),handler:async(n,t)=>{let r=co(t,n.key);if(!r.valid)return{success:!1,statusCode:401,error:r.error??"Signature verification failed"};let i=w.parse(t.payload);return await Yo(n,"zoominfo.webhook.contactUpdate",{webhookId:i.webhookDetails.id,eventType:i.webhookDetails.eventType,recordCount:i.data.length,changedAttributes:[...new Set(i.data.flatMap(s=>s.changedAttributes??[]))].sort()},"completed"),{success:!0,data:i}}},Vo={match:po("company"),handler:async(n,t)=>{let r=co(t,n.key);if(!r.valid)return{success:!1,statusCode:401,error:r.error??"Signature verification failed"};let i=E.parse(t.payload);return await Yo(n,"zoominfo.webhook.companyUpdate",{webhookId:i.webhookDetails.id,eventType:i.webhookDetails.eventType,recordCount:i.data.length,changedAttributes:[...new Set(i.data.flatMap(s=>s.changedAttributes??[]))].sort()},"completed"),{success:!0,data:i}}};import{asRecord as xn,firstString as In,readBodyRecord as Zn}from"corsair/core";function Xo(n){let t=Zn(n);if(!t)return null;let r=In([xn(t.webhookDetails)?.id]);return r?{linkType:"tenant_external_id",externalId:r}:null}var on={contactUpdate:Qo,companyUpdate:Vo};var nn=[{eventType:"Update",objectType:"Contact",fullPayload:!0},{eventType:"Update",objectType:"Company",fullPayload:!0}],wn="Corsair";async function tn(n,t){let r=n.options?.baseUrl,i=await z(n,{baseUrl:r}),s=(g,f)=>T(g,i,{...f,baseUrl:r}),u=await En(s,t.webhookUrl)??lo.parse(await s("webhooks",{method:"POST",body:{title:wn,enabled:!1,targetUrl:t.webhookUrl,subscriptions:nn}})),p=u.verificationToken??Jo.parse(await s(`webhooks/${u.id}/token`,{method:"POST"})).verificationToken;return await n.keys.set_webhook_signature(p),await s(`webhooks/${u.id}`,{method:"PUT",body:{enabled:!0,subscriptions:nn}}),{webhookLink:{linkType:"tenant_external_id",externalId:u.id},webhookSecret:p}}async function En(n,t){let r=$o.safeParse(await n("webhooks",{method:"GET"}));return r.success?r.data.webhooks.find(i=>i.targetUrl===t)??null:null}var zn={zoominfo:{searchCompanies:m.searchCompanies,searchContacts:m.searchContacts,searchIntent:m.searchIntent,searchNews:m.searchNews,searchScoops:m.searchScoops,enrichCompany:m.enrichCompany,enrichContact:m.enrichContact,enrichIntent:m.enrichIntent,enrichLocation:m.enrichLocation,enrichNews:m.enrichNews,enrichScoop:m.enrichScoop,enrichTechnology:m.enrichTechnology,getCompanySearchInputFields:m.getCompanySearchInputFields,getContactSearchInputFields:m.getContactSearchInputFields,getIntentSearchInputFields:m.getIntentSearchInputFields,getNewsSearchInputFields:m.getNewsSearchInputFields,getScoopSearchInputFields:m.getScoopSearchInputFields}},vn={zoominfo:on},On={"zoominfo.searchCompanies":{input:c.searchCompanies,output:l.searchCompanies},"zoominfo.searchContacts":{input:c.searchContacts,output:l.searchContacts},"zoominfo.searchIntent":{input:c.searchIntent,output:l.searchIntent},"zoominfo.searchNews":{input:c.searchNews,output:l.searchNews},"zoominfo.searchScoops":{input:c.searchScoops,output:l.searchScoops},"zoominfo.enrichCompany":{input:c.enrichCompany,output:l.enrichCompany},"zoominfo.enrichContact":{input:c.enrichContact,output:l.enrichContact},"zoominfo.enrichIntent":{input:c.enrichIntent,output:l.enrichIntent},"zoominfo.enrichLocation":{input:c.enrichLocation,output:l.enrichLocation},"zoominfo.enrichNews":{input:c.enrichNews,output:l.enrichNews},"zoominfo.enrichScoop":{input:c.enrichScoop,output:l.enrichScoop},"zoominfo.enrichTechnology":{input:c.enrichTechnology,output:l.enrichTechnology},"zoominfo.getCompanySearchInputFields":{input:c.getCompanySearchInputFields,output:l.getCompanySearchInputFields},"zoominfo.getContactSearchInputFields":{input:c.getContactSearchInputFields,output:l.getContactSearchInputFields},"zoominfo.getIntentSearchInputFields":{input:c.getIntentSearchInputFields,output:l.getIntentSearchInputFields},"zoominfo.getNewsSearchInputFields":{input:c.getNewsSearchInputFields,output:l.getNewsSearchInputFields},"zoominfo.getScoopSearchInputFields":{input:c.getScoopSearchInputFields,output:l.getScoopSearchInputFields}},Nn={"zoominfo.contactUpdate":{description:"A contact you have enriched was updated",payload:w,response:w},"zoominfo.companyUpdate":{description:"A company you have enriched was updated",payload:E,response:E}},Pn="oauth_2",Rn={"zoominfo.searchCompanies":{riskLevel:"read",description:"Search companies by firmographics, location and technology"},"zoominfo.searchContacts":{riskLevel:"read",description:"Search contacts by name, title, seniority and company"},"zoominfo.searchIntent":{riskLevel:"read",description:"Search companies showing buying intent on given topics"},"zoominfo.searchNews":{riskLevel:"read",description:"Search news articles by category and publish date"},"zoominfo.searchScoops":{riskLevel:"read",description:"Search Scoops, ZoomInfo research notes about companies"},"zoominfo.enrichCompany":{riskLevel:"read",description:"Enrich up to 25 companies from partial identifiers"},"zoominfo.enrichContact":{riskLevel:"read",description:"Enrich up to 25 contacts from partial identifiers"},"zoominfo.enrichIntent":{riskLevel:"read",description:"Fetch intent signals for one company"},"zoominfo.enrichLocation":{riskLevel:"read",description:"Fetch every known office location for one company"},"zoominfo.enrichNews":{riskLevel:"read",description:"Fetch news articles for one company"},"zoominfo.enrichScoop":{riskLevel:"read",description:"Fetch Scoops for one company"},"zoominfo.enrichTechnology":{riskLevel:"read",description:"Fetch the technologies detected in one company's stack"},"zoominfo.getCompanySearchInputFields":{riskLevel:"read",description:"List the company search filters this account may use"},"zoominfo.getContactSearchInputFields":{riskLevel:"read",description:"List the contact search filters this account may use"},"zoominfo.getIntentSearchInputFields":{riskLevel:"read",description:"List the intent search filters this account may use"},"zoominfo.getNewsSearchInputFields":{riskLevel:"read",description:"List the news search filters this account may use"},"zoominfo.getScoopSearchInputFields":{riskLevel:"read",description:"List the scoop search filters this account may use"}},An={oauth_2:{integration:["zoominfo_username","zoominfo_password","zoominfo_client_id","zoominfo_private_key"],account:["tenant_external_id"]}};function Dt(n={}){let t={...n,authType:n.authType??Pn};return{id:"zoominfo",authConfig:An,schema:qo,options:t,hooks:t.hooks,webhookHooks:t.webhookHooks,endpoints:zn,webhooks:vn,endpointMeta:Rn,endpointSchemas:On,webhookSchemas:Nn,pluginWebhookMatcher:r=>Object.keys(r.headers??{}).some(i=>i.toLowerCase()===N),pluginTenantWebhookMatcher:Xo,oauthWebhookTenantLinkResolver:void 0,subscribe:tn,errorHandlers:{...Uo,...t.errorHandlers},keyBuilder:async(r,i)=>{if(i==="webhook"){if(t.webhookSecret)return t.webhookSecret;let s=await r.keys.get_webhook_signature();if(!s)throw new Tn("zoominfo","webhook_signature");return s}return t.key?t.key:z(r,{baseUrl:t.baseUrl})}}}export{go as selectZoominfoCredentials,Dt as zoominfo,An as zoominfoAuthConfig,On as zoominfoEndpointSchemas};
@@ -0,0 +1,122 @@
1
+ import { z } from 'zod';
2
+ export declare const ZoominfoCompany: z.ZodObject<{
3
+ id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
4
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
5
+ website: z.ZodOptional<z.ZodNullable<z.ZodString>>;
6
+ ticker: z.ZodOptional<z.ZodNullable<z.ZodString>>;
7
+ revenue: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
8
+ employeeCount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
9
+ numberOfContactsInZoomInfo: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
10
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
11
+ street: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
+ city: z.ZodOptional<z.ZodNullable<z.ZodString>>;
13
+ state: z.ZodOptional<z.ZodNullable<z.ZodString>>;
14
+ zipCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
15
+ country: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16
+ companyStatus: z.ZodOptional<z.ZodNullable<z.ZodString>>;
17
+ foundedYear: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
18
+ logo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
+ socialMediaUrls: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
20
+ domainList: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
21
+ sicCodes: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
22
+ naicsCodes: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
23
+ }, z.core.$strip>;
24
+ export type ZoominfoCompany = z.infer<typeof ZoominfoCompany>;
25
+ export declare const ZoominfoContact: z.ZodObject<{
26
+ id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
27
+ firstName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
28
+ middleName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
29
+ lastName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ jobTitle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
31
+ contactAccuracyScore: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
32
+ hasEmail: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
33
+ hasSupplementalEmail: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
34
+ hasDirectPhone: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
35
+ hasMobilePhone: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
36
+ validDate: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
37
+ lastUpdatedDate: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
38
+ company: z.ZodOptional<z.ZodNullable<z.ZodObject<{
39
+ id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
40
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
41
+ }, z.core.$strip>>>;
42
+ }, z.core.$strip>;
43
+ export type ZoominfoContact = z.infer<typeof ZoominfoContact>;
44
+ export declare const ZoominfoIntentSignal: z.ZodObject<{
45
+ id: z.ZodString;
46
+ category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
47
+ topic: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ signalScore: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
49
+ audienceStrength: z.ZodOptional<z.ZodNullable<z.ZodString>>;
50
+ newSignal: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
51
+ signalDate: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
52
+ trend: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
53
+ company: z.ZodOptional<z.ZodNullable<z.ZodObject<{
54
+ id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
55
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
56
+ }, z.core.$strip>>>;
57
+ }, z.core.$strip>;
58
+ export type ZoominfoIntentSignal = z.infer<typeof ZoominfoIntentSignal>;
59
+ export declare const ZoominfoNewsArticle: z.ZodObject<{
60
+ id: z.ZodString;
61
+ url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
62
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
63
+ domain: z.ZodOptional<z.ZodNullable<z.ZodString>>;
64
+ imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
65
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
66
+ pageDate: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
67
+ categories: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
68
+ companies: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
69
+ id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
70
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
71
+ }, z.core.$strip>>>>;
72
+ }, z.core.$strip>;
73
+ export type ZoominfoNewsArticle = z.infer<typeof ZoominfoNewsArticle>;
74
+ export declare const ZoominfoScoop: z.ZodObject<{
75
+ id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
76
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
77
+ link: z.ZodOptional<z.ZodNullable<z.ZodString>>;
78
+ linkText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
79
+ updateText: z.ZodOptional<z.ZodNullable<z.ZodString>>;
80
+ publishedDate: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
81
+ originalPublishedDate: z.ZodOptional<z.ZodNullable<z.ZodCoercedDate<unknown>>>;
82
+ topics: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
83
+ types: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnknown>>>;
84
+ company: z.ZodOptional<z.ZodNullable<z.ZodObject<{
85
+ id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
86
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
87
+ }, z.core.$strip>>>;
88
+ }, z.core.$strip>;
89
+ export type ZoominfoScoop = z.infer<typeof ZoominfoScoop>;
90
+ export declare const ZoominfoTechnology: z.ZodObject<{
91
+ id: z.ZodString;
92
+ vendor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
93
+ product: z.ZodOptional<z.ZodNullable<z.ZodString>>;
94
+ category: z.ZodOptional<z.ZodNullable<z.ZodString>>;
95
+ categoryParent: z.ZodOptional<z.ZodNullable<z.ZodString>>;
96
+ attribute: z.ZodOptional<z.ZodNullable<z.ZodString>>;
97
+ website: z.ZodOptional<z.ZodNullable<z.ZodString>>;
98
+ domain: z.ZodOptional<z.ZodNullable<z.ZodString>>;
99
+ logo: z.ZodOptional<z.ZodNullable<z.ZodString>>;
100
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
101
+ }, z.core.$strip>;
102
+ export type ZoominfoTechnology = z.infer<typeof ZoominfoTechnology>;
103
+ export declare const ZoominfoLocation: z.ZodObject<{
104
+ id: z.ZodString;
105
+ street: z.ZodOptional<z.ZodNullable<z.ZodString>>;
106
+ city: z.ZodOptional<z.ZodNullable<z.ZodString>>;
107
+ state: z.ZodOptional<z.ZodNullable<z.ZodString>>;
108
+ zipCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
109
+ country: z.ZodOptional<z.ZodNullable<z.ZodString>>;
110
+ phone: z.ZodOptional<z.ZodNullable<z.ZodString>>;
111
+ fax: z.ZodOptional<z.ZodNullable<z.ZodString>>;
112
+ addressStatus: z.ZodOptional<z.ZodNullable<z.ZodString>>;
113
+ subUnitType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
114
+ locationName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
115
+ locationEmployeeCount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
116
+ company: z.ZodOptional<z.ZodNullable<z.ZodObject<{
117
+ id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
118
+ name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
119
+ }, z.core.$strip>>>;
120
+ }, z.core.$strip>;
121
+ export type ZoominfoLocation = z.infer<typeof ZoominfoLocation>;
122
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../schema/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;iBAuB1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;iBAgB1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;iBAa/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;iBAY9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;iBAYxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAa7B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;iBAe3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,120 @@
1
+ export declare const ZoominfoSchema: {
2
+ readonly version: "1.0.0";
3
+ readonly entities: {
4
+ readonly companies: import("zod").ZodObject<{
5
+ id: import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>;
6
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
7
+ website: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
8
+ ticker: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
9
+ revenue: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
10
+ employeeCount: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
11
+ numberOfContactsInZoomInfo: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
12
+ phone: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
13
+ street: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
14
+ city: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
15
+ state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
16
+ zipCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
17
+ country: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
18
+ companyStatus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
19
+ foundedYear: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>>>;
20
+ logo: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
21
+ socialMediaUrls: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodUnknown>>>;
22
+ domainList: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
23
+ sicCodes: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodUnknown>>>;
24
+ naicsCodes: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodUnknown>>>;
25
+ }, import("zod/v4/core").$strip>;
26
+ readonly contacts: import("zod").ZodObject<{
27
+ id: import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>;
28
+ firstName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
29
+ middleName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
30
+ lastName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
31
+ jobTitle: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
32
+ contactAccuracyScore: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
33
+ hasEmail: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
34
+ hasSupplementalEmail: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
35
+ hasDirectPhone: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
36
+ hasMobilePhone: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
37
+ validDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>>;
38
+ lastUpdatedDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>>;
39
+ company: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
40
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
41
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
42
+ }, import("zod/v4/core").$strip>>>;
43
+ }, import("zod/v4/core").$strip>;
44
+ readonly intentSignals: import("zod").ZodObject<{
45
+ id: import("zod").ZodString;
46
+ category: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
47
+ topic: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
48
+ signalScore: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
49
+ audienceStrength: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
50
+ newSignal: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodBoolean>>;
51
+ signalDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>>;
52
+ trend: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
53
+ company: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
54
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
55
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
56
+ }, import("zod/v4/core").$strip>>>;
57
+ }, import("zod/v4/core").$strip>;
58
+ readonly newsArticles: import("zod").ZodObject<{
59
+ id: import("zod").ZodString;
60
+ url: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
61
+ title: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
62
+ domain: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
63
+ imageUrl: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
64
+ description: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
65
+ pageDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>>;
66
+ categories: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodString>>>;
67
+ companies: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
68
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
69
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
70
+ }, import("zod/v4/core").$strip>>>>;
71
+ }, import("zod/v4/core").$strip>;
72
+ readonly scoops: import("zod").ZodObject<{
73
+ id: import("zod").ZodUnion<readonly [import("zod").ZodString, import("zod").ZodNumber]>;
74
+ description: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
75
+ link: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
76
+ linkText: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
77
+ updateText: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
78
+ publishedDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>>;
79
+ originalPublishedDate: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodCoercedDate<unknown>>>;
80
+ topics: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodUnknown>>>;
81
+ types: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodUnknown>>>;
82
+ company: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
83
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
84
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
85
+ }, import("zod/v4/core").$strip>>>;
86
+ }, import("zod/v4/core").$strip>;
87
+ readonly technologies: import("zod").ZodObject<{
88
+ id: import("zod").ZodString;
89
+ vendor: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
90
+ product: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
91
+ category: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
92
+ categoryParent: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
93
+ attribute: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
94
+ website: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
95
+ domain: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
96
+ logo: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
97
+ description: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
98
+ }, import("zod/v4/core").$strip>;
99
+ readonly locations: import("zod").ZodObject<{
100
+ id: import("zod").ZodString;
101
+ street: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
102
+ city: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
103
+ state: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
104
+ zipCode: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
105
+ country: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
106
+ phone: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
107
+ fax: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
108
+ addressStatus: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
109
+ subUnitType: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
110
+ locationName: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
111
+ locationEmployeeCount: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
112
+ company: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodObject<{
113
+ id: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
114
+ name: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
115
+ }, import("zod/v4/core").$strip>>>;
116
+ }, import("zod/v4/core").$strip>;
117
+ };
118
+ };
119
+ export * from './database';
120
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../schema/index.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWjB,CAAC;AAEX,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("tsup").Options | import("tsup").Options[] | ((overrideOptions: import("tsup").Options) => import("tsup").Options | import("tsup").Options[] | Promise<import("tsup").Options | import("tsup").Options[]>);
2
+ export default _default;
3
+ //# sourceMappingURL=tsup.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsup.config.d.ts","sourceRoot":"","sources":["../tsup.config.ts"],"names":[],"mappings":";AAEA,wBAYG"}
@@ -0,0 +1,79 @@
1
+ export declare const ZoominfoWebhookHandlers: {
2
+ contactUpdate: {
3
+ match: import("corsair/core").CorsairWebhookMatcher;
4
+ handler: import("corsair/core").CorsairWebhookHandler<import("..").ZoominfoContext, {
5
+ [x: string]: unknown;
6
+ webhookDetails: {
7
+ [x: string]: unknown;
8
+ id: string;
9
+ eventType: string;
10
+ objectType: string;
11
+ title?: string | undefined;
12
+ };
13
+ data: {
14
+ [x: string]: unknown;
15
+ id: string | number;
16
+ firstName?: string | undefined;
17
+ lastName?: string | undefined;
18
+ email?: string | undefined;
19
+ changedAttributes?: string[] | undefined;
20
+ }[];
21
+ }, {
22
+ [x: string]: unknown;
23
+ webhookDetails: {
24
+ [x: string]: unknown;
25
+ id: string;
26
+ eventType: string;
27
+ objectType: string;
28
+ title?: string | undefined;
29
+ };
30
+ data: {
31
+ [x: string]: unknown;
32
+ id: string | number;
33
+ firstName?: string | undefined;
34
+ lastName?: string | undefined;
35
+ email?: string | undefined;
36
+ changedAttributes?: string[] | undefined;
37
+ }[];
38
+ }>;
39
+ };
40
+ companyUpdate: {
41
+ match: import("corsair/core").CorsairWebhookMatcher;
42
+ handler: import("corsair/core").CorsairWebhookHandler<import("..").ZoominfoContext, {
43
+ [x: string]: unknown;
44
+ webhookDetails: {
45
+ [x: string]: unknown;
46
+ id: string;
47
+ eventType: string;
48
+ objectType: string;
49
+ title?: string | undefined;
50
+ };
51
+ data: {
52
+ [x: string]: unknown;
53
+ id: string | number;
54
+ name?: string | undefined;
55
+ website?: string | undefined;
56
+ changedAttributes?: string[] | undefined;
57
+ }[];
58
+ }, {
59
+ [x: string]: unknown;
60
+ webhookDetails: {
61
+ [x: string]: unknown;
62
+ id: string;
63
+ eventType: string;
64
+ objectType: string;
65
+ title?: string | undefined;
66
+ };
67
+ data: {
68
+ [x: string]: unknown;
69
+ id: string | number;
70
+ name?: string | undefined;
71
+ website?: string | undefined;
72
+ changedAttributes?: string[] | undefined;
73
+ }[];
74
+ }>;
75
+ };
76
+ };
77
+ export * from './tenant-matcher';
78
+ export * from './types';
79
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../webhooks/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGnC,CAAC;AAEF,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { CorsairPluginSubscribeResult } from 'corsair/core';
2
+ import type { ZoominfoAuthContext } from '../auth';
3
+ /**
4
+ * ctx is the account context `keyBuilder` receives, plus the webhook-signature
5
+ * setter used to persist the verification token.
6
+ */
7
+ export type ZoominfoSubscribeContext = ZoominfoAuthContext & {
8
+ keys: {
9
+ set_webhook_signature: (value: string) => Promise<unknown>;
10
+ };
11
+ options?: {
12
+ baseUrl?: string;
13
+ };
14
+ };
15
+ /**
16
+ * Arms the ZoomInfo webhook for this account and hands Hub the two values it
17
+ * needs: the webhook id inbound deliveries are routed on, and the verification
18
+ * token they are checked against.
19
+ *
20
+ * Follows the order ZoomInfo's Monitoring API docs recommend — create disabled,
21
+ * confirm the target URL is reachable, then enable — so a webhook is never live
22
+ * before the token that guards it has been stored.
23
+ */
24
+ export declare function zoominfoSubscribe(ctx: ZoominfoSubscribeContext, input: {
25
+ webhookUrl: string;
26
+ }): Promise<CorsairPluginSubscribeResult | null>;
27
+ //# sourceMappingURL=subscribe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../webhooks/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAUnD;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,GAAG;IAC5D,IAAI,EAAE;QAAE,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACrE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,CAAC;AAeF;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAkD9C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=subscribe.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribe.test.d.ts","sourceRoot":"","sources":["../../webhooks/subscribe.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { RawWebhookRequest, WebhookTenantMatch } from 'corsair/core';
2
+ /**
3
+ * ZoomInfo deliveries identify themselves by the webhook's own id, which the
4
+ * Monitoring API assigns at creation time and repeats in every payload. It is
5
+ * the only stable per-tenant value in the request, so it is what accounts are
6
+ * linked on.
7
+ *
8
+ * `subscribe` is what puts that id on the account: it creates the webhook via
9
+ * POST /webhooks at connect time and returns the id as the account's
10
+ * `tenant_external_id`. ZoomInfo has no OAuth callback to derive it from.
11
+ */
12
+ export declare function matchZoominfoTenantWebhook(request: RawWebhookRequest): WebhookTenantMatch | null;
13
+ //# sourceMappingURL=tenant-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-matcher.d.ts","sourceRoot":"","sources":["../../webhooks/tenant-matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAG1E;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACzC,OAAO,EAAE,iBAAiB,GACxB,kBAAkB,GAAG,IAAI,CAQ3B"}
@@ -0,0 +1,113 @@
1
+ import type { CorsairWebhookMatcher, WebhookRequest } from 'corsair/core';
2
+ import { z } from 'zod';
3
+ /**
4
+ * ZoomInfo's Monitoring API sends the webhook's verification token in the
5
+ * x-zoominfo-token header. It is a shared secret rather than a signature over
6
+ * the body, so verification is an equality check on the token itself.
7
+ */
8
+ export declare const ZOOMINFO_TOKEN_HEADER = "x-zoominfo-token";
9
+ /** Contact and Company are the only object types; Update is the only event. */
10
+ export declare const ZoominfoWebhookDetailsSchema: z.ZodObject<{
11
+ id: z.ZodString;
12
+ title: z.ZodOptional<z.ZodString>;
13
+ objectType: z.ZodString;
14
+ eventType: z.ZodString;
15
+ }, z.core.$loose>;
16
+ export declare const ZoominfoWebhookPayloadSchema: z.ZodObject<{
17
+ webhookDetails: z.ZodObject<{
18
+ id: z.ZodString;
19
+ title: z.ZodOptional<z.ZodString>;
20
+ objectType: z.ZodString;
21
+ eventType: z.ZodString;
22
+ }, z.core.$loose>;
23
+ data: z.ZodArray<z.ZodObject<{
24
+ id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
25
+ }, z.core.$loose>>;
26
+ }, z.core.$loose>;
27
+ export type ZoominfoWebhookPayload = z.infer<typeof ZoominfoWebhookPayloadSchema>;
28
+ export declare const ContactUpdateEventSchema: z.ZodObject<{
29
+ webhookDetails: z.ZodObject<{
30
+ id: z.ZodString;
31
+ title: z.ZodOptional<z.ZodString>;
32
+ eventType: z.ZodString;
33
+ objectType: z.ZodString;
34
+ }, z.core.$loose>;
35
+ data: z.ZodArray<z.ZodObject<{
36
+ id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
37
+ firstName: z.ZodOptional<z.ZodString>;
38
+ lastName: z.ZodOptional<z.ZodString>;
39
+ email: z.ZodOptional<z.ZodString>;
40
+ changedAttributes: z.ZodOptional<z.ZodArray<z.ZodString>>;
41
+ }, z.core.$loose>>;
42
+ }, z.core.$loose>;
43
+ export declare const CompanyUpdateEventSchema: z.ZodObject<{
44
+ webhookDetails: z.ZodObject<{
45
+ id: z.ZodString;
46
+ title: z.ZodOptional<z.ZodString>;
47
+ eventType: z.ZodString;
48
+ objectType: z.ZodString;
49
+ }, z.core.$loose>;
50
+ data: z.ZodArray<z.ZodObject<{
51
+ id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
52
+ name: z.ZodOptional<z.ZodString>;
53
+ website: z.ZodOptional<z.ZodString>;
54
+ changedAttributes: z.ZodOptional<z.ZodArray<z.ZodString>>;
55
+ }, z.core.$loose>>;
56
+ }, z.core.$loose>;
57
+ export type ContactUpdateEvent = z.infer<typeof ContactUpdateEventSchema>;
58
+ export type CompanyUpdateEvent = z.infer<typeof CompanyUpdateEventSchema>;
59
+ export type ZoominfoWebhookOutputs = {
60
+ contactUpdate: ContactUpdateEvent;
61
+ companyUpdate: CompanyUpdateEvent;
62
+ };
63
+ /** Routes a delivery by its objectType, which is the only discriminator. */
64
+ export declare function createZoominfoMatch(objectType: 'contact' | 'company'): CorsairWebhookMatcher;
65
+ /**
66
+ * Fails closed: without a configured token there is nothing to check against,
67
+ * so the delivery is rejected rather than trusted.
68
+ */
69
+ export declare function verifyZoominfoWebhookSignature(request: WebhookRequest<ZoominfoWebhookPayload>, secret?: string): {
70
+ valid: boolean;
71
+ error?: string;
72
+ };
73
+ export declare const ZoominfoWebhookSubscriptionSchema: z.ZodObject<{
74
+ subscriptionId: z.ZodOptional<z.ZodString>;
75
+ eventType: z.ZodOptional<z.ZodString>;
76
+ objectType: z.ZodOptional<z.ZodString>;
77
+ fullPayload: z.ZodOptional<z.ZodBoolean>;
78
+ }, z.core.$loose>;
79
+ export declare const ZoominfoWebhookRecordSchema: z.ZodObject<{
80
+ id: z.ZodString;
81
+ title: z.ZodOptional<z.ZodString>;
82
+ enabled: z.ZodOptional<z.ZodBoolean>;
83
+ targetUrl: z.ZodString;
84
+ createdDate: z.ZodOptional<z.ZodString>;
85
+ verificationToken: z.ZodOptional<z.ZodString>;
86
+ subscriptions: z.ZodOptional<z.ZodArray<z.ZodObject<{
87
+ subscriptionId: z.ZodOptional<z.ZodString>;
88
+ eventType: z.ZodOptional<z.ZodString>;
89
+ objectType: z.ZodOptional<z.ZodString>;
90
+ fullPayload: z.ZodOptional<z.ZodBoolean>;
91
+ }, z.core.$loose>>>;
92
+ }, z.core.$loose>;
93
+ export type ZoominfoWebhookRecord = z.infer<typeof ZoominfoWebhookRecordSchema>;
94
+ export declare const ZoominfoWebhookListSchema: z.ZodObject<{
95
+ webhooks: z.ZodArray<z.ZodObject<{
96
+ id: z.ZodString;
97
+ title: z.ZodOptional<z.ZodString>;
98
+ enabled: z.ZodOptional<z.ZodBoolean>;
99
+ targetUrl: z.ZodString;
100
+ createdDate: z.ZodOptional<z.ZodString>;
101
+ verificationToken: z.ZodOptional<z.ZodString>;
102
+ subscriptions: z.ZodOptional<z.ZodArray<z.ZodObject<{
103
+ subscriptionId: z.ZodOptional<z.ZodString>;
104
+ eventType: z.ZodOptional<z.ZodString>;
105
+ objectType: z.ZodOptional<z.ZodString>;
106
+ fullPayload: z.ZodOptional<z.ZodBoolean>;
107
+ }, z.core.$loose>>>;
108
+ }, z.core.$loose>>;
109
+ }, z.core.$loose>;
110
+ export declare const ZoominfoWebhookTokenSchema: z.ZodObject<{
111
+ verificationToken: z.ZodString;
112
+ }, z.core.$loose>;
113
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../webhooks/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,qBAAqB,EAErB,cAAc,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD,+EAA+E;AAC/E,eAAO,MAAM,4BAA4B;;;;;iBAKvC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;iBAIvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC3C,OAAO,4BAA4B,CACnC,CAAC;AAKF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAgBnC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;iBAYnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,MAAM,MAAM,sBAAsB,GAAG;IACpC,aAAa,EAAE,kBAAkB,CAAC;IAClC,aAAa,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAoBF,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,SAAS,GAAG,SAAS,GAC/B,qBAAqB,CASvB;AAeD;;;GAGG;AACH,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,cAAc,CAAC,sBAAsB,CAAC,EAC/C,MAAM,CAAC,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CA0BpC;AAMD,eAAO,MAAM,iCAAiC;;;;;iBAK5C,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;iBAUtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;iBAEpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;iBAErC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ZoominfoWebhooks } from '..';
2
+ export declare const contactUpdate: ZoominfoWebhooks['contactUpdate'];
3
+ export declare const companyUpdate: ZoominfoWebhooks['companyUpdate'];
4
+ //# sourceMappingURL=updates.d.ts.map