attio-mcp 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 (644) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/LICENSE +236 -0
  3. package/README.md +105 -0
  4. package/dist/api/attio-client.d.ts +25 -0
  5. package/dist/api/attio-client.d.ts.map +1 -0
  6. package/dist/api/attio-client.js +64 -0
  7. package/dist/api/attio-client.js.map +1 -0
  8. package/dist/api/attribute-types.d.ts +119 -0
  9. package/dist/api/attribute-types.d.ts.map +1 -0
  10. package/dist/api/attribute-types.js +320 -0
  11. package/dist/api/attribute-types.js.map +1 -0
  12. package/dist/api/client.d.ts +3 -0
  13. package/dist/api/client.d.ts.map +1 -0
  14. package/dist/api/client.js +61 -0
  15. package/dist/api/client.js.map +1 -0
  16. package/dist/api/operations/batch.d.ts +55 -0
  17. package/dist/api/operations/batch.d.ts.map +1 -0
  18. package/dist/api/operations/batch.js +176 -0
  19. package/dist/api/operations/batch.js.map +1 -0
  20. package/dist/api/operations/crud.d.ts +61 -0
  21. package/dist/api/operations/crud.d.ts.map +1 -0
  22. package/dist/api/operations/crud.js +192 -0
  23. package/dist/api/operations/crud.js.map +1 -0
  24. package/dist/api/operations/index.d.ts +14 -0
  25. package/dist/api/operations/index.d.ts.map +1 -0
  26. package/dist/api/operations/index.js +18 -0
  27. package/dist/api/operations/index.js.map +1 -0
  28. package/dist/api/operations/lists.d.ts +66 -0
  29. package/dist/api/operations/lists.d.ts.map +1 -0
  30. package/dist/api/operations/lists.js +300 -0
  31. package/dist/api/operations/lists.js.map +1 -0
  32. package/dist/api/operations/notes.d.ts +29 -0
  33. package/dist/api/operations/notes.d.ts.map +1 -0
  34. package/dist/api/operations/notes.js +63 -0
  35. package/dist/api/operations/notes.js.map +1 -0
  36. package/dist/api/operations/retry.d.ts +48 -0
  37. package/dist/api/operations/retry.d.ts.map +1 -0
  38. package/dist/api/operations/retry.js +98 -0
  39. package/dist/api/operations/retry.js.map +1 -0
  40. package/dist/api/operations/search.d.ts +37 -0
  41. package/dist/api/operations/search.d.ts.map +1 -0
  42. package/dist/api/operations/search.js +186 -0
  43. package/dist/api/operations/search.js.map +1 -0
  44. package/dist/api/operations/tasks.d.ts +20 -0
  45. package/dist/api/operations/tasks.d.ts.map +1 -0
  46. package/dist/api/operations/tasks.js +87 -0
  47. package/dist/api/operations/tasks.js.map +1 -0
  48. package/dist/api/operations/types.d.ts +61 -0
  49. package/dist/api/operations/types.d.ts.map +1 -0
  50. package/dist/api/operations/types.js +10 -0
  51. package/dist/api/operations/types.js.map +1 -0
  52. package/dist/cli/commands/attributes.d.ts +34 -0
  53. package/dist/cli/commands/attributes.d.ts.map +1 -0
  54. package/dist/cli/commands/attributes.js +171 -0
  55. package/dist/cli/commands/attributes.js.map +1 -0
  56. package/dist/cli/discover.d.ts +3 -0
  57. package/dist/cli/discover.d.ts.map +1 -0
  58. package/dist/cli/discover.js +72 -0
  59. package/dist/cli/discover.js.map +1 -0
  60. package/dist/errors/api-errors.d.ts +191 -0
  61. package/dist/errors/api-errors.d.ts.map +1 -0
  62. package/dist/errors/api-errors.js +305 -0
  63. package/dist/errors/api-errors.js.map +1 -0
  64. package/dist/errors/company-errors.d.ts +40 -0
  65. package/dist/errors/company-errors.d.ts.map +1 -0
  66. package/dist/errors/company-errors.js +62 -0
  67. package/dist/errors/company-errors.js.map +1 -0
  68. package/dist/errors/value-match-error.d.ts +15 -0
  69. package/dist/errors/value-match-error.d.ts.map +1 -0
  70. package/dist/errors/value-match-error.js +40 -0
  71. package/dist/errors/value-match-error.js.map +1 -0
  72. package/dist/handlers/error-interceptor.d.ts +6 -0
  73. package/dist/handlers/error-interceptor.d.ts.map +1 -0
  74. package/dist/handlers/error-interceptor.js +17 -0
  75. package/dist/handlers/error-interceptor.js.map +1 -0
  76. package/dist/handlers/rate-limited-handler.d.ts +17 -0
  77. package/dist/handlers/rate-limited-handler.d.ts.map +1 -0
  78. package/dist/handlers/rate-limited-handler.js +126 -0
  79. package/dist/handlers/rate-limited-handler.js.map +1 -0
  80. package/dist/handlers/resources.d.ts +11 -0
  81. package/dist/handlers/resources.d.ts.map +1 -0
  82. package/dist/handlers/resources.js +109 -0
  83. package/dist/handlers/resources.js.map +1 -0
  84. package/dist/handlers/tool-configs/companies/attributes.d.ts +85 -0
  85. package/dist/handlers/tool-configs/companies/attributes.d.ts.map +1 -0
  86. package/dist/handlers/tool-configs/companies/attributes.js +203 -0
  87. package/dist/handlers/tool-configs/companies/attributes.js.map +1 -0
  88. package/dist/handlers/tool-configs/companies/batch.d.ts +145 -0
  89. package/dist/handlers/tool-configs/companies/batch.d.ts.map +1 -0
  90. package/dist/handlers/tool-configs/companies/batch.js +249 -0
  91. package/dist/handlers/tool-configs/companies/batch.js.map +1 -0
  92. package/dist/handlers/tool-configs/companies/crud.d.ts +103 -0
  93. package/dist/handlers/tool-configs/companies/crud.d.ts.map +1 -0
  94. package/dist/handlers/tool-configs/companies/crud.js +157 -0
  95. package/dist/handlers/tool-configs/companies/crud.js.map +1 -0
  96. package/dist/handlers/tool-configs/companies/definitions.d.ts +5 -0
  97. package/dist/handlers/tool-configs/companies/definitions.d.ts.map +1 -0
  98. package/dist/handlers/tool-configs/companies/definitions.js +9 -0
  99. package/dist/handlers/tool-configs/companies/definitions.js.map +1 -0
  100. package/dist/handlers/tool-configs/companies/formatters.d.ts +42 -0
  101. package/dist/handlers/tool-configs/companies/formatters.d.ts.map +1 -0
  102. package/dist/handlers/tool-configs/companies/formatters.js +324 -0
  103. package/dist/handlers/tool-configs/companies/formatters.js.map +1 -0
  104. package/dist/handlers/tool-configs/companies/index.d.ts +642 -0
  105. package/dist/handlers/tool-configs/companies/index.d.ts.map +1 -0
  106. package/dist/handlers/tool-configs/companies/index.js +86 -0
  107. package/dist/handlers/tool-configs/companies/index.js.map +1 -0
  108. package/dist/handlers/tool-configs/companies/notes.d.ts +61 -0
  109. package/dist/handlers/tool-configs/companies/notes.d.ts.map +1 -0
  110. package/dist/handlers/tool-configs/companies/notes.js +109 -0
  111. package/dist/handlers/tool-configs/companies/notes.js.map +1 -0
  112. package/dist/handlers/tool-configs/companies/relationships.d.ts +137 -0
  113. package/dist/handlers/tool-configs/companies/relationships.d.ts.map +1 -0
  114. package/dist/handlers/tool-configs/companies/relationships.js +163 -0
  115. package/dist/handlers/tool-configs/companies/relationships.js.map +1 -0
  116. package/dist/handlers/tool-configs/companies/search.d.ts +101 -0
  117. package/dist/handlers/tool-configs/companies/search.d.ts.map +1 -0
  118. package/dist/handlers/tool-configs/companies/search.js +163 -0
  119. package/dist/handlers/tool-configs/companies/search.js.map +1 -0
  120. package/dist/handlers/tool-configs/companies/types.d.ts +6 -0
  121. package/dist/handlers/tool-configs/companies/types.d.ts.map +1 -0
  122. package/dist/handlers/tool-configs/companies/types.js +2 -0
  123. package/dist/handlers/tool-configs/companies/types.js.map +1 -0
  124. package/dist/handlers/tool-configs/index.d.ts +12 -0
  125. package/dist/handlers/tool-configs/index.d.ts.map +1 -0
  126. package/dist/handlers/tool-configs/index.js +12 -0
  127. package/dist/handlers/tool-configs/index.js.map +1 -0
  128. package/dist/handlers/tool-configs/lists.d.ts +459 -0
  129. package/dist/handlers/tool-configs/lists.d.ts.map +1 -0
  130. package/dist/handlers/tool-configs/lists.js +597 -0
  131. package/dist/handlers/tool-configs/lists.js.map +1 -0
  132. package/dist/handlers/tool-configs/paginated-people.d.ts +197 -0
  133. package/dist/handlers/tool-configs/paginated-people.d.ts.map +1 -0
  134. package/dist/handlers/tool-configs/paginated-people.js +256 -0
  135. package/dist/handlers/tool-configs/paginated-people.js.map +1 -0
  136. package/dist/handlers/tool-configs/people/activity-search.d.ts +98 -0
  137. package/dist/handlers/tool-configs/people/activity-search.d.ts.map +1 -0
  138. package/dist/handlers/tool-configs/people/activity-search.js +113 -0
  139. package/dist/handlers/tool-configs/people/activity-search.js.map +1 -0
  140. package/dist/handlers/tool-configs/people/advanced-search.d.ts +62 -0
  141. package/dist/handlers/tool-configs/people/advanced-search.d.ts.map +1 -0
  142. package/dist/handlers/tool-configs/people/advanced-search.js +74 -0
  143. package/dist/handlers/tool-configs/people/advanced-search.js.map +1 -0
  144. package/dist/handlers/tool-configs/people/crud.d.ts +63 -0
  145. package/dist/handlers/tool-configs/people/crud.d.ts.map +1 -0
  146. package/dist/handlers/tool-configs/people/crud.js +71 -0
  147. package/dist/handlers/tool-configs/people/crud.js.map +1 -0
  148. package/dist/handlers/tool-configs/people/date-search.d.ts +42 -0
  149. package/dist/handlers/tool-configs/people/date-search.d.ts.map +1 -0
  150. package/dist/handlers/tool-configs/people/date-search.js +93 -0
  151. package/dist/handlers/tool-configs/people/date-search.js.map +1 -0
  152. package/dist/handlers/tool-configs/people/formatters.d.ts +19 -0
  153. package/dist/handlers/tool-configs/people/formatters.d.ts.map +1 -0
  154. package/dist/handlers/tool-configs/people/formatters.js +98 -0
  155. package/dist/handlers/tool-configs/people/formatters.js.map +1 -0
  156. package/dist/handlers/tool-configs/people/index.d.ts +407 -0
  157. package/dist/handlers/tool-configs/people/index.d.ts.map +1 -0
  158. package/dist/handlers/tool-configs/people/index.js +30 -0
  159. package/dist/handlers/tool-configs/people/index.js.map +1 -0
  160. package/dist/handlers/tool-configs/people/notes.d.ts +38 -0
  161. package/dist/handlers/tool-configs/people/notes.d.ts.map +1 -0
  162. package/dist/handlers/tool-configs/people/notes.js +57 -0
  163. package/dist/handlers/tool-configs/people/notes.js.map +1 -0
  164. package/dist/handlers/tool-configs/people/relationships.d.ts +112 -0
  165. package/dist/handlers/tool-configs/people/relationships.d.ts.map +1 -0
  166. package/dist/handlers/tool-configs/people/relationships.js +173 -0
  167. package/dist/handlers/tool-configs/people/relationships.js.map +1 -0
  168. package/dist/handlers/tool-configs/people/search.d.ts +53 -0
  169. package/dist/handlers/tool-configs/people/search.d.ts.map +1 -0
  170. package/dist/handlers/tool-configs/people/search.js +61 -0
  171. package/dist/handlers/tool-configs/people/search.js.map +1 -0
  172. package/dist/handlers/tool-configs/people-fix-complete.d.ts +6 -0
  173. package/dist/handlers/tool-configs/people-fix-complete.d.ts.map +1 -0
  174. package/dist/handlers/tool-configs/people-fix-complete.js +76 -0
  175. package/dist/handlers/tool-configs/people-fix-complete.js.map +1 -0
  176. package/dist/handlers/tool-configs/people-fixed.d.ts +12 -0
  177. package/dist/handlers/tool-configs/people-fixed.d.ts.map +1 -0
  178. package/dist/handlers/tool-configs/people-fixed.js +58 -0
  179. package/dist/handlers/tool-configs/people-fixed.js.map +1 -0
  180. package/dist/handlers/tool-configs/people-types.d.ts +32 -0
  181. package/dist/handlers/tool-configs/people-types.d.ts.map +1 -0
  182. package/dist/handlers/tool-configs/people-types.js +5 -0
  183. package/dist/handlers/tool-configs/people-types.js.map +1 -0
  184. package/dist/handlers/tool-configs/people.d.ts +599 -0
  185. package/dist/handlers/tool-configs/people.d.ts.map +1 -0
  186. package/dist/handlers/tool-configs/people.js +817 -0
  187. package/dist/handlers/tool-configs/people.js.map +1 -0
  188. package/dist/handlers/tool-configs/prompts.d.ts +69 -0
  189. package/dist/handlers/tool-configs/prompts.d.ts.map +1 -0
  190. package/dist/handlers/tool-configs/prompts.js +90 -0
  191. package/dist/handlers/tool-configs/prompts.js.map +1 -0
  192. package/dist/handlers/tool-configs/rate-limited-people.d.ts +203 -0
  193. package/dist/handlers/tool-configs/rate-limited-people.d.ts.map +1 -0
  194. package/dist/handlers/tool-configs/rate-limited-people.js +44 -0
  195. package/dist/handlers/tool-configs/rate-limited-people.js.map +1 -0
  196. package/dist/handlers/tool-configs/records/index.d.ts +282 -0
  197. package/dist/handlers/tool-configs/records/index.d.ts.map +1 -0
  198. package/dist/handlers/tool-configs/records/index.js +277 -0
  199. package/dist/handlers/tool-configs/records/index.js.map +1 -0
  200. package/dist/handlers/tool-configs/records.d.ts +282 -0
  201. package/dist/handlers/tool-configs/records.d.ts.map +1 -0
  202. package/dist/handlers/tool-configs/records.js +277 -0
  203. package/dist/handlers/tool-configs/records.js.map +1 -0
  204. package/dist/handlers/tool-configs/resource-specific-tools.d.ts +15 -0
  205. package/dist/handlers/tool-configs/resource-specific-tools.d.ts.map +1 -0
  206. package/dist/handlers/tool-configs/resource-specific-tools.js +33 -0
  207. package/dist/handlers/tool-configs/resource-specific-tools.js.map +1 -0
  208. package/dist/handlers/tool-configs/tasks.d.ts +127 -0
  209. package/dist/handlers/tool-configs/tasks.d.ts.map +1 -0
  210. package/dist/handlers/tool-configs/tasks.js +95 -0
  211. package/dist/handlers/tool-configs/tasks.js.map +1 -0
  212. package/dist/handlers/tool-types.d.ts +47 -0
  213. package/dist/handlers/tool-types.d.ts.map +1 -0
  214. package/dist/handlers/tool-types.js +2 -0
  215. package/dist/handlers/tool-types.js.map +1 -0
  216. package/dist/handlers/tools/config-verifier.d.ts +27 -0
  217. package/dist/handlers/tools/config-verifier.d.ts.map +1 -0
  218. package/dist/handlers/tools/config-verifier.js +108 -0
  219. package/dist/handlers/tools/config-verifier.js.map +1 -0
  220. package/dist/handlers/tools/dispatcher/core.d.ts +12 -0
  221. package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -0
  222. package/dist/handlers/tools/dispatcher/core.js +276 -0
  223. package/dist/handlers/tools/dispatcher/core.js.map +1 -0
  224. package/dist/handlers/tools/dispatcher/formatting.d.ts +17 -0
  225. package/dist/handlers/tools/dispatcher/formatting.d.ts.map +1 -0
  226. package/dist/handlers/tools/dispatcher/formatting.js +25 -0
  227. package/dist/handlers/tools/dispatcher/formatting.js.map +1 -0
  228. package/dist/handlers/tools/dispatcher/logging.d.ts +63 -0
  229. package/dist/handlers/tools/dispatcher/logging.d.ts.map +1 -0
  230. package/dist/handlers/tools/dispatcher/logging.js +108 -0
  231. package/dist/handlers/tools/dispatcher/logging.js.map +1 -0
  232. package/dist/handlers/tools/dispatcher/operations/batch.d.ts +29 -0
  233. package/dist/handlers/tools/dispatcher/operations/batch.d.ts.map +1 -0
  234. package/dist/handlers/tools/dispatcher/operations/batch.js +137 -0
  235. package/dist/handlers/tools/dispatcher/operations/batch.js.map +1 -0
  236. package/dist/handlers/tools/dispatcher/operations/crud.d.ts +25 -0
  237. package/dist/handlers/tools/dispatcher/operations/crud.d.ts.map +1 -0
  238. package/dist/handlers/tools/dispatcher/operations/crud.js +110 -0
  239. package/dist/handlers/tools/dispatcher/operations/crud.js.map +1 -0
  240. package/dist/handlers/tools/dispatcher/operations/details.d.ts +13 -0
  241. package/dist/handlers/tools/dispatcher/operations/details.d.ts.map +1 -0
  242. package/dist/handlers/tools/dispatcher/operations/details.js +52 -0
  243. package/dist/handlers/tools/dispatcher/operations/details.js.map +1 -0
  244. package/dist/handlers/tools/dispatcher/operations/info.d.ts +25 -0
  245. package/dist/handlers/tools/dispatcher/operations/info.d.ts.map +1 -0
  246. package/dist/handlers/tools/dispatcher/operations/info.js +82 -0
  247. package/dist/handlers/tools/dispatcher/operations/info.js.map +1 -0
  248. package/dist/handlers/tools/dispatcher/operations/lists.d.ts +62 -0
  249. package/dist/handlers/tools/dispatcher/operations/lists.d.ts.map +1 -0
  250. package/dist/handlers/tools/dispatcher/operations/lists.js +283 -0
  251. package/dist/handlers/tools/dispatcher/operations/lists.js.map +1 -0
  252. package/dist/handlers/tools/dispatcher/operations/notes.d.ts +17 -0
  253. package/dist/handlers/tools/dispatcher/operations/notes.d.ts.map +1 -0
  254. package/dist/handlers/tools/dispatcher/operations/notes.js +102 -0
  255. package/dist/handlers/tools/dispatcher/operations/notes.js.map +1 -0
  256. package/dist/handlers/tools/dispatcher/operations/search.d.ts +43 -0
  257. package/dist/handlers/tools/dispatcher/operations/search.d.ts.map +1 -0
  258. package/dist/handlers/tools/dispatcher/operations/search.js +190 -0
  259. package/dist/handlers/tools/dispatcher/operations/search.js.map +1 -0
  260. package/dist/handlers/tools/dispatcher/validation.d.ts +27 -0
  261. package/dist/handlers/tools/dispatcher/validation.d.ts.map +1 -0
  262. package/dist/handlers/tools/dispatcher/validation.js +47 -0
  263. package/dist/handlers/tools/dispatcher/validation.js.map +1 -0
  264. package/dist/handlers/tools/dispatcher.d.ts +11 -0
  265. package/dist/handlers/tools/dispatcher.d.ts.map +1 -0
  266. package/dist/handlers/tools/dispatcher.js +15 -0
  267. package/dist/handlers/tools/dispatcher.js.map +1 -0
  268. package/dist/handlers/tools/error-types.d.ts +33 -0
  269. package/dist/handlers/tools/error-types.d.ts.map +1 -0
  270. package/dist/handlers/tools/error-types.js +21 -0
  271. package/dist/handlers/tools/error-types.js.map +1 -0
  272. package/dist/handlers/tools/formatters.d.ts +43 -0
  273. package/dist/handlers/tools/formatters.d.ts.map +1 -0
  274. package/dist/handlers/tools/formatters.js +170 -0
  275. package/dist/handlers/tools/formatters.js.map +1 -0
  276. package/dist/handlers/tools/index.d.ts +15 -0
  277. package/dist/handlers/tools/index.d.ts.map +1 -0
  278. package/dist/handlers/tools/index.js +34 -0
  279. package/dist/handlers/tools/index.js.map +1 -0
  280. package/dist/handlers/tools/registry.d.ts +1874 -0
  281. package/dist/handlers/tools/registry.d.ts.map +1 -0
  282. package/dist/handlers/tools/registry.js +103 -0
  283. package/dist/handlers/tools/registry.js.map +1 -0
  284. package/dist/health/http-server.d.ts +24 -0
  285. package/dist/health/http-server.d.ts.map +1 -0
  286. package/dist/health/http-server.js +106 -0
  287. package/dist/health/http-server.js.map +1 -0
  288. package/dist/index.d.ts +3 -0
  289. package/dist/index.d.ts.map +1 -0
  290. package/dist/index.js +238 -0
  291. package/dist/index.js.map +1 -0
  292. package/dist/objects/base-operations.d.ts +41 -0
  293. package/dist/objects/base-operations.d.ts.map +1 -0
  294. package/dist/objects/base-operations.js +116 -0
  295. package/dist/objects/base-operations.js.map +1 -0
  296. package/dist/objects/batch-companies.d.ts +112 -0
  297. package/dist/objects/batch-companies.d.ts.map +1 -0
  298. package/dist/objects/batch-companies.js +347 -0
  299. package/dist/objects/batch-companies.js.map +1 -0
  300. package/dist/objects/companies/attributes.d.ts +83 -0
  301. package/dist/objects/companies/attributes.d.ts.map +1 -0
  302. package/dist/objects/companies/attributes.js +426 -0
  303. package/dist/objects/companies/attributes.js.map +1 -0
  304. package/dist/objects/companies/basic.d.ts +117 -0
  305. package/dist/objects/companies/basic.d.ts.map +1 -0
  306. package/dist/objects/companies/basic.js +367 -0
  307. package/dist/objects/companies/basic.js.map +1 -0
  308. package/dist/objects/companies/batch.d.ts +6 -0
  309. package/dist/objects/companies/batch.d.ts.map +1 -0
  310. package/dist/objects/companies/batch.js +6 -0
  311. package/dist/objects/companies/batch.js.map +1 -0
  312. package/dist/objects/companies/index.d.ts +13 -0
  313. package/dist/objects/companies/index.d.ts.map +1 -0
  314. package/dist/objects/companies/index.js +17 -0
  315. package/dist/objects/companies/index.js.map +1 -0
  316. package/dist/objects/companies/notes.d.ts +26 -0
  317. package/dist/objects/companies/notes.d.ts.map +1 -0
  318. package/dist/objects/companies/notes.js +199 -0
  319. package/dist/objects/companies/notes.js.map +1 -0
  320. package/dist/objects/companies/relationships.d.ts +41 -0
  321. package/dist/objects/companies/relationships.d.ts.map +1 -0
  322. package/dist/objects/companies/relationships.js +142 -0
  323. package/dist/objects/companies/relationships.js.map +1 -0
  324. package/dist/objects/companies/search.d.ts +158 -0
  325. package/dist/objects/companies/search.d.ts.map +1 -0
  326. package/dist/objects/companies/search.js +463 -0
  327. package/dist/objects/companies/search.js.map +1 -0
  328. package/dist/objects/companies/types.d.ts +27 -0
  329. package/dist/objects/companies/types.d.ts.map +1 -0
  330. package/dist/objects/companies/types.js +3 -0
  331. package/dist/objects/companies/types.js.map +1 -0
  332. package/dist/objects/lists.d.ts +148 -0
  333. package/dist/objects/lists.d.ts.map +1 -0
  334. package/dist/objects/lists.js +586 -0
  335. package/dist/objects/lists.js.map +1 -0
  336. package/dist/objects/paginated-people.d.ts +50 -0
  337. package/dist/objects/paginated-people.d.ts.map +1 -0
  338. package/dist/objects/paginated-people.js +171 -0
  339. package/dist/objects/paginated-people.js.map +1 -0
  340. package/dist/objects/people/basic.d.ts +90 -0
  341. package/dist/objects/people/basic.d.ts.map +1 -0
  342. package/dist/objects/people/basic.js +157 -0
  343. package/dist/objects/people/basic.js.map +1 -0
  344. package/dist/objects/people/batch.d.ts +24 -0
  345. package/dist/objects/people/batch.d.ts.map +1 -0
  346. package/dist/objects/people/batch.js +145 -0
  347. package/dist/objects/people/batch.js.map +1 -0
  348. package/dist/objects/people/index.d.ts +11 -0
  349. package/dist/objects/people/index.d.ts.map +1 -0
  350. package/dist/objects/people/index.js +17 -0
  351. package/dist/objects/people/index.js.map +1 -0
  352. package/dist/objects/people/notes.d.ts +20 -0
  353. package/dist/objects/people/notes.d.ts.map +1 -0
  354. package/dist/objects/people/notes.js +60 -0
  355. package/dist/objects/people/notes.js.map +1 -0
  356. package/dist/objects/people/relationships.d.ts +23 -0
  357. package/dist/objects/people/relationships.d.ts.map +1 -0
  358. package/dist/objects/people/relationships.js +116 -0
  359. package/dist/objects/people/relationships.js.map +1 -0
  360. package/dist/objects/people/search.d.ts +83 -0
  361. package/dist/objects/people/search.d.ts.map +1 -0
  362. package/dist/objects/people/search.js +286 -0
  363. package/dist/objects/people/search.js.map +1 -0
  364. package/dist/objects/people/types.d.ts +37 -0
  365. package/dist/objects/people/types.d.ts.map +1 -0
  366. package/dist/objects/people/types.js +71 -0
  367. package/dist/objects/people/types.js.map +1 -0
  368. package/dist/objects/people-write.d.ts +71 -0
  369. package/dist/objects/people-write.d.ts.map +1 -0
  370. package/dist/objects/people-write.js +261 -0
  371. package/dist/objects/people-write.js.map +1 -0
  372. package/dist/objects/records/formatters.d.ts +20 -0
  373. package/dist/objects/records/formatters.d.ts.map +1 -0
  374. package/dist/objects/records/formatters.js +47 -0
  375. package/dist/objects/records/formatters.js.map +1 -0
  376. package/dist/objects/records/index.d.ts +74 -0
  377. package/dist/objects/records/index.d.ts.map +1 -0
  378. package/dist/objects/records/index.js +374 -0
  379. package/dist/objects/records/index.js.map +1 -0
  380. package/dist/objects/records.d.ts +88 -0
  381. package/dist/objects/records.d.ts.map +1 -0
  382. package/dist/objects/records.js +432 -0
  383. package/dist/objects/records.js.map +1 -0
  384. package/dist/objects/tasks.d.ts +19 -0
  385. package/dist/objects/tasks.d.ts.map +1 -0
  386. package/dist/objects/tasks.js +23 -0
  387. package/dist/objects/tasks.js.map +1 -0
  388. package/dist/prompts/error-handler.d.ts +28 -0
  389. package/dist/prompts/error-handler.d.ts.map +1 -0
  390. package/dist/prompts/error-handler.js +47 -0
  391. package/dist/prompts/error-handler.js.map +1 -0
  392. package/dist/prompts/handlers.d.ts +49 -0
  393. package/dist/prompts/handlers.d.ts.map +1 -0
  394. package/dist/prompts/handlers.js +353 -0
  395. package/dist/prompts/handlers.js.map +1 -0
  396. package/dist/prompts/index.d.ts +11 -0
  397. package/dist/prompts/index.d.ts.map +1 -0
  398. package/dist/prompts/index.js +15 -0
  399. package/dist/prompts/index.js.map +1 -0
  400. package/dist/prompts/templates/companies.d.ts +10 -0
  401. package/dist/prompts/templates/companies.d.ts.map +1 -0
  402. package/dist/prompts/templates/companies.js +128 -0
  403. package/dist/prompts/templates/companies.js.map +1 -0
  404. package/dist/prompts/templates/index.d.ts +42 -0
  405. package/dist/prompts/templates/index.d.ts.map +1 -0
  406. package/dist/prompts/templates/index.js +58 -0
  407. package/dist/prompts/templates/index.js.map +1 -0
  408. package/dist/prompts/templates/lists.d.ts +10 -0
  409. package/dist/prompts/templates/lists.d.ts.map +1 -0
  410. package/dist/prompts/templates/lists.js +127 -0
  411. package/dist/prompts/templates/lists.js.map +1 -0
  412. package/dist/prompts/templates/notes.d.ts +10 -0
  413. package/dist/prompts/templates/notes.d.ts.map +1 -0
  414. package/dist/prompts/templates/notes.js +119 -0
  415. package/dist/prompts/templates/notes.js.map +1 -0
  416. package/dist/prompts/templates/people.d.ts +10 -0
  417. package/dist/prompts/templates/people.d.ts.map +1 -0
  418. package/dist/prompts/templates/people.js +127 -0
  419. package/dist/prompts/templates/people.js.map +1 -0
  420. package/dist/prompts/types.d.ts +52 -0
  421. package/dist/prompts/types.d.ts.map +1 -0
  422. package/dist/prompts/types.js +5 -0
  423. package/dist/prompts/types.js.map +1 -0
  424. package/dist/types/attio.d.ts +424 -0
  425. package/dist/types/attio.d.ts.map +1 -0
  426. package/dist/types/attio.js +116 -0
  427. package/dist/types/attio.js.map +1 -0
  428. package/dist/types/company-types.d.ts +52 -0
  429. package/dist/types/company-types.d.ts.map +1 -0
  430. package/dist/types/company-types.js +5 -0
  431. package/dist/types/company-types.js.map +1 -0
  432. package/dist/types/tool-types.d.ts +262 -0
  433. package/dist/types/tool-types.d.ts.map +1 -0
  434. package/dist/types/tool-types.js +6 -0
  435. package/dist/types/tool-types.js.map +1 -0
  436. package/dist/utils/api-fallback.d.ts +39 -0
  437. package/dist/utils/api-fallback.d.ts.map +1 -0
  438. package/dist/utils/api-fallback.js +94 -0
  439. package/dist/utils/api-fallback.js.map +1 -0
  440. package/dist/utils/attribute-mapping/attribute-mappers.d.ts +39 -0
  441. package/dist/utils/attribute-mapping/attribute-mappers.d.ts.map +1 -0
  442. package/dist/utils/attribute-mapping/attribute-mappers.js +394 -0
  443. package/dist/utils/attribute-mapping/attribute-mappers.js.map +1 -0
  444. package/dist/utils/attribute-mapping/filter-translator.d.ts +9 -0
  445. package/dist/utils/attribute-mapping/filter-translator.d.ts.map +1 -0
  446. package/dist/utils/attribute-mapping/filter-translator.js +104 -0
  447. package/dist/utils/attribute-mapping/filter-translator.js.map +1 -0
  448. package/dist/utils/attribute-mapping/index.d.ts +10 -0
  449. package/dist/utils/attribute-mapping/index.d.ts.map +1 -0
  450. package/dist/utils/attribute-mapping/index.js +12 -0
  451. package/dist/utils/attribute-mapping/index.js.map +1 -0
  452. package/dist/utils/attribute-mapping/legacy-maps.d.ts +11 -0
  453. package/dist/utils/attribute-mapping/legacy-maps.d.ts.map +1 -0
  454. package/dist/utils/attribute-mapping/legacy-maps.js +54 -0
  455. package/dist/utils/attribute-mapping/legacy-maps.js.map +1 -0
  456. package/dist/utils/attribute-mapping/mapping-utils.d.ts +90 -0
  457. package/dist/utils/attribute-mapping/mapping-utils.d.ts.map +1 -0
  458. package/dist/utils/attribute-mapping/mapping-utils.js +145 -0
  459. package/dist/utils/attribute-mapping/mapping-utils.js.map +1 -0
  460. package/dist/utils/auto-discovery.d.ts +22 -0
  461. package/dist/utils/auto-discovery.d.ts.map +1 -0
  462. package/dist/utils/auto-discovery.js +143 -0
  463. package/dist/utils/auto-discovery.js.map +1 -0
  464. package/dist/utils/cli-colors.d.ts +36 -0
  465. package/dist/utils/cli-colors.d.ts.map +1 -0
  466. package/dist/utils/cli-colors.js +35 -0
  467. package/dist/utils/cli-colors.js.map +1 -0
  468. package/dist/utils/config-loader.d.ts +41 -0
  469. package/dist/utils/config-loader.d.ts.map +1 -0
  470. package/dist/utils/config-loader.js +167 -0
  471. package/dist/utils/config-loader.js.map +1 -0
  472. package/dist/utils/config-migration.d.ts +140 -0
  473. package/dist/utils/config-migration.d.ts.map +1 -0
  474. package/dist/utils/config-migration.js +310 -0
  475. package/dist/utils/config-migration.js.map +1 -0
  476. package/dist/utils/date-utils.d.ts +63 -0
  477. package/dist/utils/date-utils.d.ts.map +1 -0
  478. package/dist/utils/date-utils.js +329 -0
  479. package/dist/utils/date-utils.js.map +1 -0
  480. package/dist/utils/debug-b2b-segment.d.ts +2 -0
  481. package/dist/utils/debug-b2b-segment.d.ts.map +1 -0
  482. package/dist/utils/debug-b2b-segment.js +67 -0
  483. package/dist/utils/debug-b2b-segment.js.map +1 -0
  484. package/dist/utils/domain-utils.d.ts +46 -0
  485. package/dist/utils/domain-utils.d.ts.map +1 -0
  486. package/dist/utils/domain-utils.js +143 -0
  487. package/dist/utils/domain-utils.js.map +1 -0
  488. package/dist/utils/dynamic-import.d.ts +33 -0
  489. package/dist/utils/dynamic-import.d.ts.map +1 -0
  490. package/dist/utils/dynamic-import.js +41 -0
  491. package/dist/utils/dynamic-import.js.map +1 -0
  492. package/dist/utils/error-enhancer.d.ts +23 -0
  493. package/dist/utils/error-enhancer.d.ts.map +1 -0
  494. package/dist/utils/error-enhancer.js +188 -0
  495. package/dist/utils/error-enhancer.js.map +1 -0
  496. package/dist/utils/error-handler.d.ts +89 -0
  497. package/dist/utils/error-handler.d.ts.map +1 -0
  498. package/dist/utils/error-handler.js +336 -0
  499. package/dist/utils/error-handler.js.map +1 -0
  500. package/dist/utils/filters/builders/activity.d.ts +13 -0
  501. package/dist/utils/filters/builders/activity.d.ts.map +1 -0
  502. package/dist/utils/filters/builders/activity.js +65 -0
  503. package/dist/utils/filters/builders/activity.js.map +1 -0
  504. package/dist/utils/filters/builders/basic.d.ts +13 -0
  505. package/dist/utils/filters/builders/basic.d.ts.map +1 -0
  506. package/dist/utils/filters/builders/basic.js +36 -0
  507. package/dist/utils/filters/builders/basic.js.map +1 -0
  508. package/dist/utils/filters/builders/complex.d.ts +31 -0
  509. package/dist/utils/filters/builders/complex.d.ts.map +1 -0
  510. package/dist/utils/filters/builders/complex.js +92 -0
  511. package/dist/utils/filters/builders/complex.js.map +1 -0
  512. package/dist/utils/filters/builders/date.d.ts +17 -0
  513. package/dist/utils/filters/builders/date.d.ts.map +1 -0
  514. package/dist/utils/filters/builders/date.js +51 -0
  515. package/dist/utils/filters/builders/date.js.map +1 -0
  516. package/dist/utils/filters/builders/index.d.ts +8 -0
  517. package/dist/utils/filters/builders/index.d.ts.map +1 -0
  518. package/dist/utils/filters/builders/index.js +8 -0
  519. package/dist/utils/filters/builders/index.js.map +1 -0
  520. package/dist/utils/filters/builders/numeric.d.ts +17 -0
  521. package/dist/utils/filters/builders/numeric.d.ts.map +1 -0
  522. package/dist/utils/filters/builders/numeric.js +61 -0
  523. package/dist/utils/filters/builders/numeric.js.map +1 -0
  524. package/dist/utils/filters/builders/text.d.ts +17 -0
  525. package/dist/utils/filters/builders/text.d.ts.map +1 -0
  526. package/dist/utils/filters/builders/text.js +47 -0
  527. package/dist/utils/filters/builders/text.js.map +1 -0
  528. package/dist/utils/filters/builders/types.d.ts +2 -0
  529. package/dist/utils/filters/builders/types.d.ts.map +1 -0
  530. package/dist/utils/filters/builders/types.js +2 -0
  531. package/dist/utils/filters/builders/types.js.map +1 -0
  532. package/dist/utils/filters/builders.d.ts +2 -0
  533. package/dist/utils/filters/builders.d.ts.map +1 -0
  534. package/dist/utils/filters/builders.js +2 -0
  535. package/dist/utils/filters/builders.js.map +1 -0
  536. package/dist/utils/filters/cache.d.ts +80 -0
  537. package/dist/utils/filters/cache.d.ts.map +1 -0
  538. package/dist/utils/filters/cache.js +212 -0
  539. package/dist/utils/filters/cache.js.map +1 -0
  540. package/dist/utils/filters/index.d.ts +51 -0
  541. package/dist/utils/filters/index.d.ts.map +1 -0
  542. package/dist/utils/filters/index.js +67 -0
  543. package/dist/utils/filters/index.js.map +1 -0
  544. package/dist/utils/filters/operators.d.ts +65 -0
  545. package/dist/utils/filters/operators.d.ts.map +1 -0
  546. package/dist/utils/filters/operators.js +214 -0
  547. package/dist/utils/filters/operators.js.map +1 -0
  548. package/dist/utils/filters/relationship.d.ts +81 -0
  549. package/dist/utils/filters/relationship.d.ts.map +1 -0
  550. package/dist/utils/filters/relationship.js +393 -0
  551. package/dist/utils/filters/relationship.js.map +1 -0
  552. package/dist/utils/filters/translators.d.ts +120 -0
  553. package/dist/utils/filters/translators.d.ts.map +1 -0
  554. package/dist/utils/filters/translators.js +397 -0
  555. package/dist/utils/filters/translators.js.map +1 -0
  556. package/dist/utils/filters/types.d.ts +77 -0
  557. package/dist/utils/filters/types.d.ts.map +1 -0
  558. package/dist/utils/filters/types.js +85 -0
  559. package/dist/utils/filters/types.js.map +1 -0
  560. package/dist/utils/filters/utils.d.ts +86 -0
  561. package/dist/utils/filters/utils.d.ts.map +1 -0
  562. package/dist/utils/filters/utils.js +142 -0
  563. package/dist/utils/filters/utils.js.map +1 -0
  564. package/dist/utils/filters/validation-utils.d.ts +123 -0
  565. package/dist/utils/filters/validation-utils.d.ts.map +1 -0
  566. package/dist/utils/filters/validation-utils.js +282 -0
  567. package/dist/utils/filters/validation-utils.js.map +1 -0
  568. package/dist/utils/filters/validators.d.ts +73 -0
  569. package/dist/utils/filters/validators.d.ts.map +1 -0
  570. package/dist/utils/filters/validators.js +311 -0
  571. package/dist/utils/filters/validators.js.map +1 -0
  572. package/dist/utils/json-serializer.d.ts +68 -0
  573. package/dist/utils/json-serializer.d.ts.map +1 -0
  574. package/dist/utils/json-serializer.js +235 -0
  575. package/dist/utils/json-serializer.js.map +1 -0
  576. package/dist/utils/logger.d.ts +226 -0
  577. package/dist/utils/logger.d.ts.map +1 -0
  578. package/dist/utils/logger.js +323 -0
  579. package/dist/utils/logger.js.map +1 -0
  580. package/dist/utils/numeric-utils.d.ts +27 -0
  581. package/dist/utils/numeric-utils.d.ts.map +1 -0
  582. package/dist/utils/numeric-utils.js +83 -0
  583. package/dist/utils/numeric-utils.js.map +1 -0
  584. package/dist/utils/pagination.d.ts +85 -0
  585. package/dist/utils/pagination.d.ts.map +1 -0
  586. package/dist/utils/pagination.js +169 -0
  587. package/dist/utils/pagination.js.map +1 -0
  588. package/dist/utils/person-lookup.d.ts +35 -0
  589. package/dist/utils/person-lookup.d.ts.map +1 -0
  590. package/dist/utils/person-lookup.js +67 -0
  591. package/dist/utils/person-lookup.js.map +1 -0
  592. package/dist/utils/rate-limiter.d.ts +82 -0
  593. package/dist/utils/rate-limiter.d.ts.map +1 -0
  594. package/dist/utils/rate-limiter.js +159 -0
  595. package/dist/utils/rate-limiter.js.map +1 -0
  596. package/dist/utils/record-utils.d.ts +74 -0
  597. package/dist/utils/record-utils.d.ts.map +1 -0
  598. package/dist/utils/record-utils.js +312 -0
  599. package/dist/utils/record-utils.js.map +1 -0
  600. package/dist/utils/relationship-utils.d.ts +61 -0
  601. package/dist/utils/relationship-utils.d.ts.map +1 -0
  602. package/dist/utils/relationship-utils.js +242 -0
  603. package/dist/utils/relationship-utils.js.map +1 -0
  604. package/dist/utils/response-formatter.d.ts +121 -0
  605. package/dist/utils/response-formatter.d.ts.map +1 -0
  606. package/dist/utils/response-formatter.js +188 -0
  607. package/dist/utils/response-formatter.js.map +1 -0
  608. package/dist/utils/uri-parser.d.ts +18 -0
  609. package/dist/utils/uri-parser.d.ts.map +1 -0
  610. package/dist/utils/uri-parser.js +31 -0
  611. package/dist/utils/uri-parser.js.map +1 -0
  612. package/dist/utils/validation.d.ts +59 -0
  613. package/dist/utils/validation.d.ts.map +1 -0
  614. package/dist/utils/validation.js +264 -0
  615. package/dist/utils/validation.js.map +1 -0
  616. package/dist/utils/value-matcher.d.ts +58 -0
  617. package/dist/utils/value-matcher.d.ts.map +1 -0
  618. package/dist/utils/value-matcher.js +131 -0
  619. package/dist/utils/value-matcher.js.map +1 -0
  620. package/dist/validators/attribute-validator.d.ts +59 -0
  621. package/dist/validators/attribute-validator.d.ts.map +1 -0
  622. package/dist/validators/attribute-validator.js +531 -0
  623. package/dist/validators/attribute-validator.js.map +1 -0
  624. package/dist/validators/company/field_detector.d.ts +5 -0
  625. package/dist/validators/company/field_detector.d.ts.map +1 -0
  626. package/dist/validators/company/field_detector.js +95 -0
  627. package/dist/validators/company/field_detector.js.map +1 -0
  628. package/dist/validators/company/index.d.ts +26 -0
  629. package/dist/validators/company/index.d.ts.map +1 -0
  630. package/dist/validators/company/index.js +433 -0
  631. package/dist/validators/company/index.js.map +1 -0
  632. package/dist/validators/company/type_cache.d.ts +14 -0
  633. package/dist/validators/company/type_cache.d.ts.map +1 -0
  634. package/dist/validators/company/type_cache.js +28 -0
  635. package/dist/validators/company/type_cache.js.map +1 -0
  636. package/dist/validators/company/types.d.ts +8 -0
  637. package/dist/validators/company/types.d.ts.map +1 -0
  638. package/dist/validators/company/types.js +2 -0
  639. package/dist/validators/company/types.js.map +1 -0
  640. package/dist/validators/company-validator.d.ts +2 -0
  641. package/dist/validators/company-validator.d.ts.map +1 -0
  642. package/dist/validators/company-validator.js +2 -0
  643. package/dist/validators/company-validator.js.map +1 -0
  644. package/package.json +167 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Validation utility for validating input data against schemas
3
+ */
4
+ import { ErrorType } from './error-handler.js';
5
+ /**
6
+ * Result of a validation operation
7
+ */
8
+ export interface ValidationResult {
9
+ isValid: boolean;
10
+ errors: string[];
11
+ }
12
+ /**
13
+ * Schema definition for validation
14
+ */
15
+ export interface ValidationSchema {
16
+ type: string;
17
+ required?: string[];
18
+ properties?: Record<string, any>;
19
+ items?: ValidationSchema;
20
+ enum?: any[];
21
+ minLength?: number;
22
+ maxLength?: number;
23
+ minimum?: number;
24
+ maximum?: number;
25
+ pattern?: string;
26
+ }
27
+ /**
28
+ * Validates input data against a schema and returns the validation result
29
+ *
30
+ * @param input - Input data to validate
31
+ * @param schema - Schema to validate against
32
+ * @returns Validation result
33
+ */
34
+ export declare function validateInput(input: any, schema: ValidationSchema): ValidationResult;
35
+ /**
36
+ * Validates request parameters against a schema and returns a formatted error response if invalid
37
+ *
38
+ * @param input - Input data to validate
39
+ * @param schema - Schema to validate against
40
+ * @param errorFormatter - Function to format error response
41
+ * @returns Error response if invalid, null if valid
42
+ */
43
+ export declare function validateRequest(input: any, schema: ValidationSchema, errorFormatter: (error: Error, type: ErrorType, details: any) => any): any | null;
44
+ /**
45
+ * Validates that an ID string is valid and secure to use
46
+ *
47
+ * @param id - The ID to validate
48
+ * @returns True if the ID is valid, false otherwise
49
+ */
50
+ export declare function isValidId(id: string): boolean;
51
+ /**
52
+ * Validates that a list ID is valid and safe to use
53
+ * Contains additional validation specific to Attio list IDs
54
+ *
55
+ * @param listId - The list ID to validate
56
+ * @returns True if the list ID is valid, false otherwise
57
+ */
58
+ export declare function isValidListId(listId: string): boolean;
59
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA0OD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,CAOlB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,gBAAgB,EACxB,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,GAAG,GACnE,GAAG,GAAG,IAAI,CAYZ;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAuC7C;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAkBrD"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Validation utility for validating input data against schemas
3
+ */
4
+ import { ErrorType } from './error-handler.js';
5
+ /**
6
+ * Create a validation error message for a schema violation
7
+ *
8
+ * @param path - Path to the property with an error
9
+ * @param message - Error message for the violation
10
+ * @returns Formatted error message
11
+ */
12
+ function formatError(path, message) {
13
+ return path ? `${path}: ${message}` : message;
14
+ }
15
+ /**
16
+ * Validates that a value is of the expected type
17
+ *
18
+ * @param value - Value to validate
19
+ * @param expectedType - Expected type
20
+ * @param path - Path to the property
21
+ * @returns Error message if invalid, empty string if valid
22
+ */
23
+ function validateType(value, expectedType, path) {
24
+ // Handle null/undefined
25
+ if (value === null || value === undefined) {
26
+ return '';
27
+ }
28
+ switch (expectedType) {
29
+ case 'string':
30
+ return typeof value === 'string'
31
+ ? ''
32
+ : formatError(path, `Expected string, got ${typeof value}`);
33
+ case 'number':
34
+ return typeof value === 'number'
35
+ ? ''
36
+ : formatError(path, `Expected number, got ${typeof value}`);
37
+ case 'boolean':
38
+ return typeof value === 'boolean'
39
+ ? ''
40
+ : formatError(path, `Expected boolean, got ${typeof value}`);
41
+ case 'array':
42
+ return Array.isArray(value)
43
+ ? ''
44
+ : formatError(path, `Expected array, got ${typeof value}`);
45
+ case 'object':
46
+ return typeof value === 'object' && !Array.isArray(value)
47
+ ? ''
48
+ : formatError(path, `Expected object, got ${typeof value}`);
49
+ default:
50
+ return formatError(path, `Unknown type ${expectedType}`);
51
+ }
52
+ }
53
+ /**
54
+ * Validates that a value matches the schema's constraints
55
+ *
56
+ * @param value - Value to validate
57
+ * @param schema - Schema to validate against
58
+ * @param path - Path to the property
59
+ * @returns Array of error messages
60
+ */
61
+ function validateConstraints(value, schema, path) {
62
+ const errors = [];
63
+ // Skip validation for null/undefined values
64
+ if (value === null || value === undefined) {
65
+ return errors;
66
+ }
67
+ // Enum validation
68
+ if (schema.enum && !schema.enum.includes(value)) {
69
+ errors.push(formatError(path, `Value must be one of: ${schema.enum.join(', ')}`));
70
+ }
71
+ // String constraints
72
+ if (typeof value === 'string') {
73
+ if (schema.minLength !== undefined && value.length < schema.minLength) {
74
+ errors.push(formatError(path, `String must be at least ${schema.minLength} characters long`));
75
+ }
76
+ if (schema.maxLength !== undefined && value.length > schema.maxLength) {
77
+ errors.push(formatError(path, `String must be at most ${schema.maxLength} characters long`));
78
+ }
79
+ if (schema.pattern) {
80
+ const regex = new RegExp(schema.pattern);
81
+ if (!regex.test(value)) {
82
+ errors.push(formatError(path, `String must match pattern: ${schema.pattern}`));
83
+ }
84
+ }
85
+ }
86
+ // Number constraints
87
+ if (typeof value === 'number') {
88
+ if (schema.minimum !== undefined && value < schema.minimum) {
89
+ errors.push(formatError(path, `Number must be greater than or equal to ${schema.minimum}`));
90
+ }
91
+ if (schema.maximum !== undefined && value > schema.maximum) {
92
+ errors.push(formatError(path, `Number must be less than or equal to ${schema.maximum}`));
93
+ }
94
+ }
95
+ // Array constraints
96
+ if (Array.isArray(value) && schema.items) {
97
+ value.forEach((item, index) => {
98
+ const itemPath = path ? `${path}[${index}]` : `[${index}]`;
99
+ // Validate type
100
+ const itemSchema = schema.items;
101
+ const typeError = validateType(item, itemSchema.type, itemPath);
102
+ if (typeError) {
103
+ errors.push(typeError);
104
+ }
105
+ // Validate constraints recursively
106
+ const constraintErrors = validateConstraints(item, itemSchema, itemPath);
107
+ errors.push(...constraintErrors);
108
+ // Validate nested object or array
109
+ if ((itemSchema.type === 'object' || itemSchema.type === 'array') &&
110
+ item !== null &&
111
+ item !== undefined) {
112
+ const nestedErrors = validateValue(item, itemSchema, itemPath);
113
+ errors.push(...nestedErrors);
114
+ }
115
+ });
116
+ }
117
+ return errors;
118
+ }
119
+ /**
120
+ * Validates a value against a schema
121
+ *
122
+ * @param value - Value to validate
123
+ * @param schema - Schema to validate against
124
+ * @param path - Path to the property
125
+ * @returns Array of error messages
126
+ */
127
+ function validateValue(value, schema, path = '') {
128
+ const errors = [];
129
+ // Type validation
130
+ const typeError = validateType(value, schema.type, path);
131
+ if (typeError) {
132
+ errors.push(typeError);
133
+ return errors; // Don't continue validation if type is wrong
134
+ }
135
+ // Validate constraints
136
+ const constraintErrors = validateConstraints(value, schema, path);
137
+ errors.push(...constraintErrors);
138
+ // Object validation
139
+ if (schema.type === 'object' && schema.properties && value) {
140
+ // Required properties validation
141
+ if (schema.required) {
142
+ for (const requiredProp of schema.required) {
143
+ if (!(requiredProp in value)) {
144
+ errors.push(formatError(path ? `${path}.${requiredProp}` : requiredProp, 'Required property is missing'));
145
+ }
146
+ }
147
+ }
148
+ // Property validation
149
+ if (schema.properties) {
150
+ for (const [propName, propSchema] of Object.entries(schema.properties)) {
151
+ if (propName in value) {
152
+ const propPath = path ? `${path}.${propName}` : propName;
153
+ const propValue = value[propName];
154
+ // Skip undefined/null for non-required fields
155
+ if ((propValue === undefined || propValue === null) &&
156
+ (!schema.required || !schema.required.includes(propName))) {
157
+ continue;
158
+ }
159
+ const propErrors = validateValue(propValue, propSchema, propPath);
160
+ errors.push(...propErrors);
161
+ }
162
+ }
163
+ }
164
+ }
165
+ return errors;
166
+ }
167
+ /**
168
+ * Validates input data against a schema and returns the validation result
169
+ *
170
+ * @param input - Input data to validate
171
+ * @param schema - Schema to validate against
172
+ * @returns Validation result
173
+ */
174
+ export function validateInput(input, schema) {
175
+ const errors = validateValue(input, schema);
176
+ return {
177
+ isValid: errors.length === 0,
178
+ errors,
179
+ };
180
+ }
181
+ /**
182
+ * Validates request parameters against a schema and returns a formatted error response if invalid
183
+ *
184
+ * @param input - Input data to validate
185
+ * @param schema - Schema to validate against
186
+ * @param errorFormatter - Function to format error response
187
+ * @returns Error response if invalid, null if valid
188
+ */
189
+ export function validateRequest(input, schema, errorFormatter) {
190
+ const result = validateInput(input, schema);
191
+ if (!result.isValid) {
192
+ const error = new Error('Validation error: Invalid request parameters');
193
+ return errorFormatter(error, ErrorType.VALIDATION_ERROR, {
194
+ errors: result.errors,
195
+ input,
196
+ });
197
+ }
198
+ return null;
199
+ }
200
+ /**
201
+ * Validates that an ID string is valid and secure to use
202
+ *
203
+ * @param id - The ID to validate
204
+ * @returns True if the ID is valid, false otherwise
205
+ */
206
+ export function isValidId(id) {
207
+ // Basic check for non-empty string
208
+ if (!id || typeof id !== 'string' || id.trim() === '') {
209
+ return false;
210
+ }
211
+ // Check that the ID has a reasonable length
212
+ if (id.length < 3 || id.length > 100) {
213
+ return false;
214
+ }
215
+ // Check that the ID only contains valid characters
216
+ // Allowing alphanumeric, hyphens, and underscores
217
+ if (!/^[a-zA-Z0-9_-]+$/.test(id)) {
218
+ return false;
219
+ }
220
+ // Check for dangerous patterns that could be used for injection
221
+ const dangerousPatterns = [
222
+ /--/, // SQL comment marker
223
+ /\/\*/, // SQL block comment start
224
+ /\*\//, // SQL block comment end
225
+ /\$\{/, // Template literal injection
226
+ /\.\./, // Path traversal
227
+ /\|\|/, // Command injection
228
+ /<script/i, // XSS attempt
229
+ /javascript:/i, // JavaScript protocol
230
+ /data:/i, // Data URL
231
+ /&#/, // HTML entities
232
+ /=/, // Assignment/parameter pollution
233
+ ];
234
+ for (const pattern of dangerousPatterns) {
235
+ if (pattern.test(id)) {
236
+ return false;
237
+ }
238
+ }
239
+ return true;
240
+ }
241
+ /**
242
+ * Validates that a list ID is valid and safe to use
243
+ * Contains additional validation specific to Attio list IDs
244
+ *
245
+ * @param listId - The list ID to validate
246
+ * @returns True if the list ID is valid, false otherwise
247
+ */
248
+ export function isValidListId(listId) {
249
+ // First apply general ID validation
250
+ if (!isValidId(listId)) {
251
+ return false;
252
+ }
253
+ // Additional validation specific to list IDs
254
+ // Attio list IDs typically start with "list_" followed by alphanumeric characters
255
+ if (!/^list_[a-zA-Z0-9]+$/.test(listId)) {
256
+ return false;
257
+ }
258
+ // Ensure the ID isn't suspiciously long
259
+ if (listId.length > 50) {
260
+ return false;
261
+ }
262
+ return true;
263
+ }
264
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ export interface ValueMatch {
2
+ value: string;
3
+ similarity: number;
4
+ }
5
+ export interface ValueMatchResult {
6
+ exactMatch?: string;
7
+ suggestions: ValueMatch[];
8
+ bestMatch?: ValueMatch;
9
+ }
10
+ /**
11
+ * Configuration for value matching behavior
12
+ */
13
+ export interface ValueMatchConfig {
14
+ /** Minimum similarity score to consider a match (0-1) */
15
+ minSimilarity?: number;
16
+ /** Maximum number of suggestions to return */
17
+ maxSuggestions?: number;
18
+ /** Whether to use case-sensitive matching */
19
+ caseSensitive?: boolean;
20
+ }
21
+ /**
22
+ * Find the best matching values from a list of valid options
23
+ *
24
+ * @param searchValue - The value to search for
25
+ * @param validValues - Array of valid values to match against
26
+ * @param config - Optional configuration for matching behavior
27
+ * @returns Match result with exact match or suggestions
28
+ */
29
+ export declare function findBestValueMatch(searchValue: string, validValues: string[], config?: ValueMatchConfig): ValueMatchResult;
30
+ /**
31
+ * Format a value match error message with suggestions
32
+ *
33
+ * @param fieldName - The field being searched
34
+ * @param searchValue - The value that was searched for
35
+ * @param matchResult - The match result with suggestions
36
+ * @returns Formatted error message
37
+ */
38
+ export declare function formatValueMatchError(fieldName: string, searchValue: string, matchResult: ValueMatchResult): string;
39
+ /**
40
+ * Check if a value contains a partial match
41
+ * Useful for "contains" type searches
42
+ *
43
+ * @param searchValue - The partial value to search for
44
+ * @param validValues - Array of valid values to check
45
+ * @param caseSensitive - Whether to use case-sensitive matching
46
+ * @returns Array of values that contain the search value
47
+ */
48
+ export declare function findPartialMatches(searchValue: string, validValues: string[], caseSensitive?: boolean): string[];
49
+ /**
50
+ * Get value suggestions for a field
51
+ * This could be extended to cache or fetch valid values from Attio
52
+ *
53
+ * @param fieldSlug - The field slug (e.g., 'type_persona')
54
+ * @param searchValue - The value being searched for
55
+ * @returns Array of suggested values or null if no suggestions available
56
+ */
57
+ export declare function getValueSuggestions(fieldSlug: string, searchValue: string): Promise<ValueMatch[] | null>;
58
+ //# sourceMappingURL=value-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-matcher.d.ts","sourceRoot":"","sources":["../../src/utils/value-matcher.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAQD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,CAAC,EAAE,gBAAgB,GACxB,gBAAgB,CAyClB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,gBAAgB,GAC5B,MAAM,CAeR;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EAAE,EACrB,aAAa,GAAE,OAAe,GAC7B,MAAM,EAAE,CASV;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CA+B9B"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Value matching utilities for fuzzy matching field values
3
+ * Uses string-similarity for intelligent suggestions when exact matches fail
4
+ */
5
+ import stringSimilarity from 'string-similarity';
6
+ const DEFAULT_CONFIG = {
7
+ minSimilarity: 0.4,
8
+ maxSuggestions: 3,
9
+ caseSensitive: false,
10
+ };
11
+ /**
12
+ * Find the best matching values from a list of valid options
13
+ *
14
+ * @param searchValue - The value to search for
15
+ * @param validValues - Array of valid values to match against
16
+ * @param config - Optional configuration for matching behavior
17
+ * @returns Match result with exact match or suggestions
18
+ */
19
+ export function findBestValueMatch(searchValue, validValues, config) {
20
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
21
+ // Normalize for comparison if not case sensitive
22
+ const normalizedSearch = mergedConfig.caseSensitive
23
+ ? searchValue
24
+ : searchValue.toLowerCase();
25
+ // Check for exact match first
26
+ const exactMatch = validValues.find((value) => {
27
+ const normalizedValue = mergedConfig.caseSensitive
28
+ ? value
29
+ : value.toLowerCase();
30
+ return normalizedValue === normalizedSearch;
31
+ });
32
+ if (exactMatch) {
33
+ return {
34
+ exactMatch,
35
+ suggestions: [],
36
+ bestMatch: { value: exactMatch, similarity: 1.0 },
37
+ };
38
+ }
39
+ // No exact match, find similar values
40
+ const matches = stringSimilarity.findBestMatch(searchValue, validValues);
41
+ // Filter and sort suggestions by similarity
42
+ const suggestions = matches.ratings
43
+ .filter((rating) => rating.rating >= mergedConfig.minSimilarity)
44
+ .sort((a, b) => b.rating - a.rating)
45
+ .slice(0, mergedConfig.maxSuggestions)
46
+ .map((rating) => ({
47
+ value: rating.target,
48
+ similarity: rating.rating,
49
+ }));
50
+ return {
51
+ suggestions,
52
+ bestMatch: suggestions[0],
53
+ };
54
+ }
55
+ /**
56
+ * Format a value match error message with suggestions
57
+ *
58
+ * @param fieldName - The field being searched
59
+ * @param searchValue - The value that was searched for
60
+ * @param matchResult - The match result with suggestions
61
+ * @returns Formatted error message
62
+ */
63
+ export function formatValueMatchError(fieldName, searchValue, matchResult) {
64
+ let message = `'${searchValue}' not found as '${fieldName}'.`;
65
+ if (matchResult.bestMatch && matchResult.bestMatch.similarity >= 0.7) {
66
+ message += ` Did you mean '${matchResult.bestMatch.value}'?`;
67
+ }
68
+ else if (matchResult.suggestions.length > 0) {
69
+ message += ' Did you mean one of these?';
70
+ matchResult.suggestions.forEach((suggestion) => {
71
+ message += `\n - ${suggestion.value} (${Math.round(suggestion.similarity * 100)}% match)`;
72
+ });
73
+ }
74
+ return message;
75
+ }
76
+ /**
77
+ * Check if a value contains a partial match
78
+ * Useful for "contains" type searches
79
+ *
80
+ * @param searchValue - The partial value to search for
81
+ * @param validValues - Array of valid values to check
82
+ * @param caseSensitive - Whether to use case-sensitive matching
83
+ * @returns Array of values that contain the search value
84
+ */
85
+ export function findPartialMatches(searchValue, validValues, caseSensitive = false) {
86
+ const normalizedSearch = caseSensitive
87
+ ? searchValue
88
+ : searchValue.toLowerCase();
89
+ return validValues.filter((value) => {
90
+ const normalizedValue = caseSensitive ? value : value.toLowerCase();
91
+ return normalizedValue.includes(normalizedSearch);
92
+ });
93
+ }
94
+ /**
95
+ * Get value suggestions for a field
96
+ * This could be extended to cache or fetch valid values from Attio
97
+ *
98
+ * @param fieldSlug - The field slug (e.g., 'type_persona')
99
+ * @param searchValue - The value being searched for
100
+ * @returns Array of suggested values or null if no suggestions available
101
+ */
102
+ export async function getValueSuggestions(fieldSlug, searchValue) {
103
+ // This is where we could integrate with Attio API to fetch valid values
104
+ // For now, we'll use known values from our documentation
105
+ const knownValues = {
106
+ type_persona: [
107
+ 'Plastic Surgeon',
108
+ 'Medical Spa/Aesthetics',
109
+ 'Dermatologist',
110
+ 'Medical Practice',
111
+ 'Wellness Center',
112
+ 'Cosmetic Surgery',
113
+ 'Aesthetic Medicine',
114
+ ],
115
+ industry: [
116
+ 'Healthcare',
117
+ 'Technology',
118
+ 'Finance',
119
+ 'Education',
120
+ 'Retail',
121
+ 'Manufacturing',
122
+ ],
123
+ };
124
+ const validValues = knownValues[fieldSlug];
125
+ if (!validValues) {
126
+ return null;
127
+ }
128
+ const matchResult = findBestValueMatch(searchValue, validValues);
129
+ return matchResult.suggestions;
130
+ }
131
+ //# sourceMappingURL=value-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-matcher.js","sourceRoot":"","sources":["../../src/utils/value-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Validation for Attio attribute types
3
+ * Provides validation and type conversion for attribute values
4
+ * to ensure they match Attio's expected types
5
+ *
6
+ * This module handles both validation and automatic type conversion
7
+ * for common data format mismatches, which is particularly useful for
8
+ * LLM-generated content where string representations of other data types
9
+ * are common.
10
+ */
11
+ /**
12
+ * Supported attribute types in Attio
13
+ */
14
+ export type AttributeType = 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'select' | 'record-reference';
15
+ /**
16
+ * Result of attribute validation
17
+ */
18
+ export interface ValidationResult {
19
+ /** Whether the validation was successful */
20
+ valid: boolean;
21
+ /** The converted value (may differ from input if type conversion was applied) */
22
+ convertedValue?: any;
23
+ /** Error message if validation failed */
24
+ error?: string;
25
+ }
26
+ /**
27
+ * Validates an attribute value against the expected type
28
+ *
29
+ * This function validates that a value matches the expected attribute type,
30
+ * and attempts to convert it when possible. It handles both strict validation
31
+ * and auto-conversion for common type mismatches.
32
+ *
33
+ * @param attributeName - The name of the attribute being validated
34
+ * @param value - The value to validate
35
+ * @param expectedType - The expected attribute type
36
+ * @returns Validation result with success status and optionally converted value
37
+ *
38
+ * @example
39
+ * // Validate a string
40
+ * validateAttributeValue('company_name', 'Acme Inc', 'string')
41
+ * // Returns: { valid: true, convertedValue: 'Acme Inc' }
42
+ *
43
+ * @example
44
+ * // Convert string to number
45
+ * validateAttributeValue('employee_count', '250', 'number')
46
+ * // Returns: { valid: true, convertedValue: 250 }
47
+ *
48
+ * @example
49
+ * // Convert string to boolean
50
+ * validateAttributeValue('is_active', 'yes', 'boolean')
51
+ * // Returns: { valid: true, convertedValue: true }
52
+ *
53
+ * @example
54
+ * // Handle invalid values
55
+ * validateAttributeValue('revenue', 'not-a-number', 'number')
56
+ * // Returns: { valid: false, error: 'Invalid number value...' }
57
+ */
58
+ export declare function validateAttributeValue(attributeName: string, value: any, expectedType: AttributeType): ValidationResult;
59
+ //# sourceMappingURL=attribute-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-validator.d.ts","sourceRoot":"","sources":["../../src/validators/attribute-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,iFAAiF;IACjF,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,aAAa,GAC1B,gBAAgB,CA4BlB"}