attio-mcp 1.3.5 → 1.4.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 (305) hide show
  1. package/CHANGELOG.md +263 -9
  2. package/README.md +315 -235
  3. package/dist/api/attio-client.d.ts +13 -3
  4. package/dist/api/attio-client.d.ts.map +1 -1
  5. package/dist/api/attio-client.js +37 -7
  6. package/dist/api/attio-client.js.map +1 -1
  7. package/dist/api/attribute-types.d.ts.map +1 -1
  8. package/dist/api/attribute-types.js +59 -29
  9. package/dist/api/attribute-types.js.map +1 -1
  10. package/dist/api/client-context.d.ts.map +1 -1
  11. package/dist/api/client-context.js +28 -42
  12. package/dist/api/client-context.js.map +1 -1
  13. package/dist/api/operations/batch.d.ts.map +1 -1
  14. package/dist/api/operations/batch.js +3 -1
  15. package/dist/api/operations/batch.js.map +1 -1
  16. package/dist/cli/commands/generate-skill.d.ts +28 -0
  17. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  18. package/dist/cli/commands/generate-skill.js +101 -0
  19. package/dist/cli/commands/generate-skill.js.map +1 -0
  20. package/dist/cli/discover.js +65 -0
  21. package/dist/cli/discover.js.map +1 -1
  22. package/dist/config/deal-defaults.d.ts +2 -2
  23. package/dist/config/deal-defaults.d.ts.map +1 -1
  24. package/dist/config/deal-defaults.js +15 -6
  25. package/dist/config/deal-defaults.js.map +1 -1
  26. package/dist/config/tool-aliases.d.ts +12 -0
  27. package/dist/config/tool-aliases.d.ts.map +1 -1
  28. package/dist/config/tool-aliases.js +213 -69
  29. package/dist/config/tool-aliases.js.map +1 -1
  30. package/dist/constants/tool-names.d.ts +84 -0
  31. package/dist/constants/tool-names.d.ts.map +1 -0
  32. package/dist/constants/tool-names.js +81 -0
  33. package/dist/constants/tool-names.js.map +1 -0
  34. package/dist/constants/universal.constants.d.ts +24 -0
  35. package/dist/constants/universal.constants.d.ts.map +1 -1
  36. package/dist/constants/universal.constants.js +81 -9
  37. package/dist/constants/universal.constants.js.map +1 -1
  38. package/dist/handlers/tool-configs/tasks.d.ts.map +1 -1
  39. package/dist/handlers/tool-configs/tasks.js +28 -0
  40. package/dist/handlers/tool-configs/tasks.js.map +1 -1
  41. package/dist/handlers/tool-configs/universal/batch-search.js +4 -4
  42. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts +26 -4
  43. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts.map +1 -1
  44. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js +181 -21
  45. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js.map +1 -1
  46. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
  47. package/dist/handlers/tool-configs/universal/core/crud-operations.js +52 -13
  48. package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
  49. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js +3 -3
  50. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js.map +1 -1
  51. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts +17 -0
  52. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts.map +1 -0
  53. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js +118 -0
  54. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js.map +1 -0
  55. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts +14 -0
  56. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts.map +1 -0
  57. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js +77 -0
  58. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js.map +1 -0
  59. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts +24 -0
  60. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts.map +1 -0
  61. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js +35 -0
  62. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js.map +1 -0
  63. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts +15 -0
  64. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts.map +1 -0
  65. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js +108 -0
  66. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js.map +1 -0
  67. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts +14 -0
  68. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts.map +1 -0
  69. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js +91 -0
  70. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js.map +1 -0
  71. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts +14 -0
  72. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts.map +1 -0
  73. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js +118 -0
  74. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js.map +1 -0
  75. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts +77 -0
  76. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts.map +1 -0
  77. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js +42 -0
  78. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js.map +1 -0
  79. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts +15 -0
  80. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts.map +1 -0
  81. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js +109 -0
  82. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js.map +1 -0
  83. package/dist/handlers/tool-configs/universal/core/index.d.ts +63 -22
  84. package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
  85. package/dist/handlers/tool-configs/universal/core/index.js +24 -22
  86. package/dist/handlers/tool-configs/universal/core/index.js.map +1 -1
  87. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts +43 -1
  88. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts.map +1 -1
  89. package/dist/handlers/tool-configs/universal/core/metadata-operations.js +117 -11
  90. package/dist/handlers/tool-configs/universal/core/metadata-operations.js.map +1 -1
  91. package/dist/handlers/tool-configs/universal/core/notes-operations.d.ts.map +1 -1
  92. package/dist/handlers/tool-configs/universal/core/notes-operations.js +27 -12
  93. package/dist/handlers/tool-configs/universal/core/notes-operations.js.map +1 -1
  94. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts.map +1 -1
  95. package/dist/handlers/tool-configs/universal/core/record-details-operations.js +20 -3
  96. package/dist/handlers/tool-configs/universal/core/record-details-operations.js.map +1 -1
  97. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
  98. package/dist/handlers/tool-configs/universal/core/search-operations.js +11 -4
  99. package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
  100. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.d.ts.map +1 -1
  101. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js +32 -9
  102. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js.map +1 -1
  103. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.d.ts.map +1 -1
  104. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js +45 -6
  105. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js.map +1 -1
  106. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.d.ts.map +1 -1
  107. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js +36 -5
  108. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js.map +1 -1
  109. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts +1 -1
  110. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts.map +1 -1
  111. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js +17 -1
  112. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js.map +1 -1
  113. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.d.ts.map +1 -1
  114. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js +3 -1
  115. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js.map +1 -1
  116. package/dist/handlers/tool-configs/universal/index.d.ts +75 -34
  117. package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
  118. package/dist/handlers/tool-configs/universal/index.js +58 -58
  119. package/dist/handlers/tool-configs/universal/index.js.map +1 -1
  120. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts.map +1 -1
  121. package/dist/handlers/tool-configs/universal/operations/advanced-search.js +5 -4
  122. package/dist/handlers/tool-configs/universal/operations/advanced-search.js.map +1 -1
  123. package/dist/handlers/tool-configs/universal/operations/batch-operations.js +3 -3
  124. package/dist/handlers/tool-configs/universal/operations/content-search.js +3 -3
  125. package/dist/handlers/tool-configs/universal/operations/index.d.ts +10 -10
  126. package/dist/handlers/tool-configs/universal/operations/index.js +15 -15
  127. package/dist/handlers/tool-configs/universal/operations/relationship-search.js +3 -3
  128. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js +3 -3
  129. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.d.ts.map +1 -1
  130. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js +5 -2
  131. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js.map +1 -1
  132. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts +29 -0
  133. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts.map +1 -1
  134. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js +28 -0
  135. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js.map +1 -1
  136. package/dist/handlers/tool-configs/universal/schemas.d.ts +1 -1
  137. package/dist/handlers/tool-configs/universal/schemas.d.ts.map +1 -1
  138. package/dist/handlers/tool-configs/universal/schemas.js +1 -1
  139. package/dist/handlers/tool-configs/universal/schemas.js.map +1 -1
  140. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts +20 -1
  141. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts.map +1 -1
  142. package/dist/handlers/tool-configs/universal/shared-handlers.js +216 -0
  143. package/dist/handlers/tool-configs/universal/shared-handlers.js.map +1 -1
  144. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js +2 -2
  145. package/dist/handlers/tool-configs/universal/types.d.ts +9 -0
  146. package/dist/handlers/tool-configs/universal/types.d.ts.map +1 -1
  147. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts +11 -0
  148. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts.map +1 -1
  149. package/dist/handlers/tool-configs/universal/validators/schema-validator.js +63 -9
  150. package/dist/handlers/tool-configs/universal/validators/schema-validator.js.map +1 -1
  151. package/dist/handlers/tool-types.d.ts +9 -0
  152. package/dist/handlers/tool-types.d.ts.map +1 -1
  153. package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
  154. package/dist/handlers/tools/dispatcher/core.js +24 -5
  155. package/dist/handlers/tools/dispatcher/core.js.map +1 -1
  156. package/dist/handlers/tools/formatters.d.ts +8 -1
  157. package/dist/handlers/tools/formatters.d.ts.map +1 -1
  158. package/dist/handlers/tools/formatters.js +30 -14
  159. package/dist/handlers/tools/formatters.js.map +1 -1
  160. package/dist/handlers/tools/registry.d.ts +125 -84
  161. package/dist/handlers/tools/registry.d.ts.map +1 -1
  162. package/dist/handlers/tools/registry.js +14 -9
  163. package/dist/handlers/tools/registry.js.map +1 -1
  164. package/dist/handlers/tools/standards/index.d.ts.map +1 -1
  165. package/dist/handlers/tools/standards/index.js +19 -11
  166. package/dist/handlers/tools/standards/index.js.map +1 -1
  167. package/dist/objects/companies/attributes.d.ts +5 -0
  168. package/dist/objects/companies/attributes.d.ts.map +1 -1
  169. package/dist/objects/companies/attributes.js +45 -31
  170. package/dist/objects/companies/attributes.js.map +1 -1
  171. package/dist/server/createServer.d.ts.map +1 -1
  172. package/dist/server/createServer.js +4 -3
  173. package/dist/server/createServer.js.map +1 -1
  174. package/dist/services/ErrorService.js +3 -3
  175. package/dist/services/ErrorService.js.map +1 -1
  176. package/dist/services/UniversalCreateService.d.ts.map +1 -1
  177. package/dist/services/UniversalCreateService.js +136 -12
  178. package/dist/services/UniversalCreateService.js.map +1 -1
  179. package/dist/services/UniversalSearchService.d.ts +4 -25
  180. package/dist/services/UniversalSearchService.d.ts.map +1 -1
  181. package/dist/services/UniversalSearchService.js +14 -324
  182. package/dist/services/UniversalSearchService.js.map +1 -1
  183. package/dist/services/UniversalUpdateService.d.ts +15 -4
  184. package/dist/services/UniversalUpdateService.d.ts.map +1 -1
  185. package/dist/services/UniversalUpdateService.js +79 -151
  186. package/dist/services/UniversalUpdateService.js.map +1 -1
  187. package/dist/services/create/factory.d.ts.map +1 -1
  188. package/dist/services/create/factory.js +2 -1
  189. package/dist/services/create/factory.js.map +1 -1
  190. package/dist/services/metadata/AttributeOptionsService.d.ts +38 -0
  191. package/dist/services/metadata/AttributeOptionsService.d.ts.map +1 -0
  192. package/dist/services/metadata/AttributeOptionsService.js +92 -0
  193. package/dist/services/metadata/AttributeOptionsService.js.map +1 -0
  194. package/dist/services/metadata/index.d.ts +1 -0
  195. package/dist/services/metadata/index.d.ts.map +1 -1
  196. package/dist/services/metadata/index.js +1 -0
  197. package/dist/services/metadata/index.js.map +1 -1
  198. package/dist/services/search/QueryApiService.d.ts +27 -0
  199. package/dist/services/search/QueryApiService.d.ts.map +1 -0
  200. package/dist/services/search/QueryApiService.js +144 -0
  201. package/dist/services/search/QueryApiService.js.map +1 -0
  202. package/dist/services/search/RecordsSearchService.d.ts +27 -0
  203. package/dist/services/search/RecordsSearchService.d.ts.map +1 -0
  204. package/dist/services/search/RecordsSearchService.js +122 -0
  205. package/dist/services/search/RecordsSearchService.js.map +1 -0
  206. package/dist/services/search/SearchCoordinator.d.ts +41 -0
  207. package/dist/services/search/SearchCoordinator.d.ts.map +1 -0
  208. package/dist/services/search/SearchCoordinator.js +83 -0
  209. package/dist/services/search/SearchCoordinator.js.map +1 -0
  210. package/dist/services/search/StrategyFactory.d.ts +31 -0
  211. package/dist/services/search/StrategyFactory.d.ts.map +1 -0
  212. package/dist/services/search/StrategyFactory.js +100 -0
  213. package/dist/services/search/StrategyFactory.js.map +1 -0
  214. package/dist/services/skill-generator/OutputWriterService.d.ts +41 -0
  215. package/dist/services/skill-generator/OutputWriterService.d.ts.map +1 -0
  216. package/dist/services/skill-generator/OutputWriterService.js +100 -0
  217. package/dist/services/skill-generator/OutputWriterService.js.map +1 -0
  218. package/dist/services/skill-generator/SchemaFormatterService.d.ts +61 -0
  219. package/dist/services/skill-generator/SchemaFormatterService.d.ts.map +1 -0
  220. package/dist/services/skill-generator/SchemaFormatterService.js +168 -0
  221. package/dist/services/skill-generator/SchemaFormatterService.js.map +1 -0
  222. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts +84 -0
  223. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts.map +1 -0
  224. package/dist/services/skill-generator/WorkspaceSchemaService.js +292 -0
  225. package/dist/services/skill-generator/WorkspaceSchemaService.js.map +1 -0
  226. package/dist/services/skill-generator/index.d.ts +12 -0
  227. package/dist/services/skill-generator/index.d.ts.map +1 -0
  228. package/dist/services/skill-generator/index.js +11 -0
  229. package/dist/services/skill-generator/index.js.map +1 -0
  230. package/dist/services/skill-generator/types.d.ts +137 -0
  231. package/dist/services/skill-generator/types.d.ts.map +1 -0
  232. package/dist/services/skill-generator/types.js +10 -0
  233. package/dist/services/skill-generator/types.js.map +1 -0
  234. package/dist/services/update/FieldPersistenceHandler.d.ts +101 -0
  235. package/dist/services/update/FieldPersistenceHandler.d.ts.map +1 -0
  236. package/dist/services/update/FieldPersistenceHandler.js +198 -0
  237. package/dist/services/update/FieldPersistenceHandler.js.map +1 -0
  238. package/dist/services/update/FieldValidationHandler.d.ts +77 -0
  239. package/dist/services/update/FieldValidationHandler.d.ts.map +1 -0
  240. package/dist/services/update/FieldValidationHandler.js +157 -0
  241. package/dist/services/update/FieldValidationHandler.js.map +1 -0
  242. package/dist/services/update/MetadataResolver.d.ts +50 -0
  243. package/dist/services/update/MetadataResolver.d.ts.map +1 -0
  244. package/dist/services/update/MetadataResolver.js +110 -0
  245. package/dist/services/update/MetadataResolver.js.map +1 -0
  246. package/dist/services/update/UpdateOrchestrator.d.ts +37 -0
  247. package/dist/services/update/UpdateOrchestrator.d.ts.map +1 -0
  248. package/dist/services/update/UpdateOrchestrator.js +58 -0
  249. package/dist/services/update/UpdateOrchestrator.js.map +1 -0
  250. package/dist/services/update/UpdateValidation.d.ts +5 -1
  251. package/dist/services/update/UpdateValidation.d.ts.map +1 -1
  252. package/dist/services/update/UpdateValidation.js +46 -14
  253. package/dist/services/update/UpdateValidation.js.map +1 -1
  254. package/dist/services/value-transformer/index.d.ts +57 -0
  255. package/dist/services/value-transformer/index.d.ts.map +1 -0
  256. package/dist/services/value-transformer/index.js +326 -0
  257. package/dist/services/value-transformer/index.js.map +1 -0
  258. package/dist/services/value-transformer/multi-select-transformer.d.ts +63 -0
  259. package/dist/services/value-transformer/multi-select-transformer.d.ts.map +1 -0
  260. package/dist/services/value-transformer/multi-select-transformer.js +144 -0
  261. package/dist/services/value-transformer/multi-select-transformer.js.map +1 -0
  262. package/dist/services/value-transformer/record-reference-transformer.d.ts +43 -0
  263. package/dist/services/value-transformer/record-reference-transformer.d.ts.map +1 -0
  264. package/dist/services/value-transformer/record-reference-transformer.js +245 -0
  265. package/dist/services/value-transformer/record-reference-transformer.js.map +1 -0
  266. package/dist/services/value-transformer/select-transformer.d.ts +48 -0
  267. package/dist/services/value-transformer/select-transformer.d.ts.map +1 -0
  268. package/dist/services/value-transformer/select-transformer.js +232 -0
  269. package/dist/services/value-transformer/select-transformer.js.map +1 -0
  270. package/dist/services/value-transformer/status-transformer.d.ts +32 -0
  271. package/dist/services/value-transformer/status-transformer.d.ts.map +1 -0
  272. package/dist/services/value-transformer/status-transformer.js +294 -0
  273. package/dist/services/value-transformer/status-transformer.js.map +1 -0
  274. package/dist/services/value-transformer/types.d.ts +100 -0
  275. package/dist/services/value-transformer/types.d.ts.map +1 -0
  276. package/dist/services/value-transformer/types.js +6 -0
  277. package/dist/services/value-transformer/types.js.map +1 -0
  278. package/dist/templates/skill/SKILL.template.md +78 -0
  279. package/dist/templates/skill/attribute-reference.template.md +126 -0
  280. package/dist/templates/skill/complex-types.template.md +255 -0
  281. package/dist/utils/client-resolver.d.ts.map +1 -1
  282. package/dist/utils/client-resolver.js +8 -16
  283. package/dist/utils/client-resolver.js.map +1 -1
  284. package/dist/utils/complex-type-validation.d.ts +16 -0
  285. package/dist/utils/complex-type-validation.d.ts.map +1 -0
  286. package/dist/utils/complex-type-validation.js +196 -0
  287. package/dist/utils/complex-type-validation.js.map +1 -0
  288. package/dist/utils/error-utilities.d.ts.map +1 -1
  289. package/dist/utils/error-utilities.js +16 -9
  290. package/dist/utils/error-utilities.js.map +1 -1
  291. package/dist/utils/location-normalizer.d.ts +26 -0
  292. package/dist/utils/location-normalizer.d.ts.map +1 -0
  293. package/dist/utils/location-normalizer.js +39 -0
  294. package/dist/utils/location-normalizer.js.map +1 -0
  295. package/dist/utils/metadata-utils.d.ts +27 -0
  296. package/dist/utils/metadata-utils.d.ts.map +1 -0
  297. package/dist/utils/metadata-utils.js +59 -0
  298. package/dist/utils/metadata-utils.js.map +1 -0
  299. package/dist/utils/personal-name-parser.d.ts.map +1 -1
  300. package/dist/utils/personal-name-parser.js +26 -17
  301. package/dist/utils/personal-name-parser.js.map +1 -1
  302. package/dist/validators/company/field_detector.d.ts.map +1 -1
  303. package/dist/validators/company/field_detector.js +5 -0
  304. package/dist/validators/company/field_detector.js.map +1 -1
  305. package/package.json +28 -25
@@ -0,0 +1,144 @@
1
+ /**
2
+ * QueryApiService - Attio Query API operations for advanced search
3
+ *
4
+ * Issue #935: Extracted from UniversalSearchService.ts to reduce file size
5
+ * Handles relationship, timeframe, and content searches using the Query API
6
+ */
7
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
8
+ import { debug, createScopedLogger, OperationType } from '../../utils/logger.js';
9
+ import { AuthenticationError, AuthorizationError, NetworkError, RateLimitError, ServerError, ResourceNotFoundError, createApiErrorFromAxiosError, } from '../../errors/api-errors.js';
10
+ import { createRelationshipQuery, createTimeframeQuery, createContentSearchQuery, } from '../../utils/filters/index.js';
11
+ import { getLazyAttioClient } from '../../api/lazy-client.js';
12
+ import * as AttioClientModule from '../../api/attio-client.js';
13
+ /**
14
+ * Resolve Query API client (prefers mocked version in tests)
15
+ */
16
+ function resolveQueryApiClient() {
17
+ const mod = AttioClientModule;
18
+ if (typeof mod.getAttioClient === 'function') {
19
+ return mod.getAttioClient();
20
+ }
21
+ return getLazyAttioClient();
22
+ }
23
+ /**
24
+ * Handle Query API errors consistently across methods
25
+ * Issue #935: Extracted to reduce code duplication
26
+ */
27
+ function handleQueryApiError(error, path, context) {
28
+ const apiError = createApiErrorFromAxiosError(error, path, 'POST');
29
+ // Re-throw critical errors that should bubble up
30
+ if (apiError instanceof AuthenticationError ||
31
+ apiError instanceof AuthorizationError ||
32
+ apiError instanceof NetworkError ||
33
+ apiError instanceof RateLimitError ||
34
+ apiError instanceof ServerError) {
35
+ throw apiError;
36
+ }
37
+ // Handle not found gracefully - return empty results
38
+ if (apiError instanceof ResourceNotFoundError) {
39
+ debug('QueryApiService', `No results for ${context.operation}`, context.metadata);
40
+ return [];
41
+ }
42
+ // Log and return empty for other errors
43
+ createScopedLogger('QueryApiService', context.operation, OperationType.API_CALL).error(`${context.operation} failed for ${context.resourceType}`, error);
44
+ return [];
45
+ }
46
+ /**
47
+ * Query API Service for advanced search operations
48
+ */
49
+ export class QueryApiService {
50
+ /**
51
+ * Search records by relationship to another record
52
+ */
53
+ static async searchByRelationship(sourceResourceType, targetResourceType, targetRecordId, limit, offset) {
54
+ const relationshipQuery = {
55
+ sourceObjectType: sourceResourceType,
56
+ targetObjectType: targetResourceType,
57
+ targetAttribute: 'id',
58
+ condition: 'equals',
59
+ value: targetRecordId,
60
+ };
61
+ const queryApiFilter = createRelationshipQuery(relationshipQuery);
62
+ const path = `/objects/${sourceResourceType}/records/query`;
63
+ try {
64
+ const client = resolveQueryApiClient();
65
+ const requestBody = {
66
+ ...queryApiFilter,
67
+ limit: limit || 10,
68
+ offset: offset || 0,
69
+ };
70
+ const response = await client.post(path, requestBody);
71
+ return response?.data?.data || [];
72
+ }
73
+ catch (error) {
74
+ return handleQueryApiError(error, path, {
75
+ resourceType: sourceResourceType,
76
+ operation: 'searchByRelationship',
77
+ metadata: { targetResourceType, targetRecordId },
78
+ });
79
+ }
80
+ }
81
+ /**
82
+ * Search records within a specific timeframe
83
+ */
84
+ static async searchByTimeframe(resourceType, timeframeConfig, limit, offset) {
85
+ const queryApiFilter = createTimeframeQuery(timeframeConfig);
86
+ const path = `/objects/${resourceType}/records/query`;
87
+ try {
88
+ const client = resolveQueryApiClient();
89
+ const requestBody = {
90
+ ...queryApiFilter,
91
+ limit: limit || 10,
92
+ offset: offset || 0,
93
+ };
94
+ const response = await client.post(path, requestBody);
95
+ return response?.data?.data || [];
96
+ }
97
+ catch (error) {
98
+ return handleQueryApiError(error, path, {
99
+ resourceType,
100
+ operation: 'searchByTimeframe',
101
+ metadata: { timeframeConfig },
102
+ });
103
+ }
104
+ }
105
+ /**
106
+ * Search records by content across multiple fields
107
+ */
108
+ static async searchByContent(resourceType, query, searchFields = [], useOrLogic = true, limit, offset) {
109
+ let fields = searchFields;
110
+ if (fields.length === 0) {
111
+ switch (resourceType) {
112
+ case UniversalResourceType.COMPANIES:
113
+ fields = ['name', 'description', 'domains'];
114
+ break;
115
+ case UniversalResourceType.PEOPLE:
116
+ fields = ['name', 'email_addresses', 'job_title'];
117
+ break;
118
+ default:
119
+ fields = ['name'];
120
+ break;
121
+ }
122
+ }
123
+ const queryApiFilter = createContentSearchQuery(fields, query, useOrLogic);
124
+ const path = `/objects/${resourceType}/records/query`;
125
+ try {
126
+ const client = resolveQueryApiClient();
127
+ const requestBody = {
128
+ ...queryApiFilter,
129
+ limit: limit || 10,
130
+ offset: offset || 0,
131
+ };
132
+ const response = await client.post(path, requestBody);
133
+ return response?.data?.data || [];
134
+ }
135
+ catch (error) {
136
+ return handleQueryApiError(error, path, {
137
+ resourceType,
138
+ operation: 'searchByContent',
139
+ metadata: { query, fields },
140
+ });
141
+ }
142
+ }
143
+ }
144
+ //# sourceMappingURL=QueryApiService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryApiService.js","sourceRoot":"","sources":["../../../src/services/search/QueryApiService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * RecordsSearchService - Generic records and custom objects search
3
+ *
4
+ * Issue #935: Extracted from UniversalSearchService.ts to reduce file size
5
+ * Handles generic records and custom object searches
6
+ */
7
+ import { AttioRecord } from '../../types/attio.js';
8
+ /**
9
+ * Records Search Service for generic records and custom objects
10
+ */
11
+ export declare class RecordsSearchService {
12
+ /**
13
+ * Search records using object records API with filter support
14
+ */
15
+ static searchRecordsObjectType(limit?: number, offset?: number, filters?: Record<string, unknown>): Promise<AttioRecord[]>;
16
+ /**
17
+ * Search custom objects using generic records API
18
+ * Enables support for user-defined custom objects (Issue #918)
19
+ *
20
+ * @param objectSlug - The custom object type (e.g., "funds", "investment_opportunities")
21
+ * @param limit - Maximum results
22
+ * @param offset - Pagination offset
23
+ * @param filters - Optional filters to apply to the search
24
+ */
25
+ static searchCustomObject(objectSlug: string, limit?: number, offset?: number, filters?: Record<string, unknown>): Promise<AttioRecord[]>;
26
+ }
27
+ //# sourceMappingURL=RecordsSearchService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordsSearchService.d.ts","sourceRoot":"","sources":["../../../src/services/search/RecordsSearchService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwE/C;;GAEG;AACH,qBAAa,oBAAoB;IAC/B;;OAEG;WACU,uBAAuB,CAClC,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,WAAW,EAAE,CAAC;IAoBzB;;;;;;;;OAQG;WACU,kBAAkB,CAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,WAAW,EAAE,CAAC;CA0D1B"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * RecordsSearchService - Generic records and custom objects search
3
+ *
4
+ * Issue #935: Extracted from UniversalSearchService.ts to reduce file size
5
+ * Handles generic records and custom object searches
6
+ */
7
+ import { debug, createScopedLogger, OperationType } from '../../utils/logger.js';
8
+ import { ValidationService } from '../../services/ValidationService.js';
9
+ import { getLazyAttioClient } from '../../api/lazy-client.js';
10
+ import * as AttioClientModule from '../../api/attio-client.js';
11
+ import { listObjectRecords } from '../../objects/records/index.js';
12
+ import { AuthenticationError, AuthorizationError, NetworkError, RateLimitError, ServerError, ResourceNotFoundError, createApiErrorFromAxiosError, } from '../../errors/api-errors.js';
13
+ /**
14
+ * Resolve API client (prefers mocked version in tests)
15
+ */
16
+ function resolveApiClient() {
17
+ const mod = AttioClientModule;
18
+ if (typeof mod.getAttioClient === 'function') {
19
+ return mod.getAttioClient();
20
+ }
21
+ return getLazyAttioClient();
22
+ }
23
+ /**
24
+ * Handle API errors consistently
25
+ * Issue #935: Matches QueryApiService error handling pattern
26
+ */
27
+ function handleRecordsApiError(error, path, context) {
28
+ const apiError = createApiErrorFromAxiosError(error, path, 'POST');
29
+ // Re-throw critical errors that should bubble up
30
+ if (apiError instanceof AuthenticationError ||
31
+ apiError instanceof AuthorizationError ||
32
+ apiError instanceof NetworkError ||
33
+ apiError instanceof RateLimitError ||
34
+ apiError instanceof ServerError) {
35
+ throw apiError;
36
+ }
37
+ // Handle not found gracefully - return empty results
38
+ if (apiError instanceof ResourceNotFoundError) {
39
+ debug('RecordsSearchService', `No results for ${context.operation}`, context.metadata);
40
+ return [];
41
+ }
42
+ // Log and return empty for other errors
43
+ createScopedLogger('RecordsSearchService', context.operation, OperationType.API_CALL).error(`${context.operation} failed`, error);
44
+ return [];
45
+ }
46
+ /**
47
+ * Records Search Service for generic records and custom objects
48
+ */
49
+ export class RecordsSearchService {
50
+ /**
51
+ * Search records using object records API with filter support
52
+ */
53
+ static async searchRecordsObjectType(limit, offset, filters) {
54
+ // Handle list_membership filters - invalid UUID should return empty array
55
+ if (filters?.list_membership) {
56
+ const listId = String(filters.list_membership);
57
+ if (!ValidationService.validateUUIDForSearch(listId)) {
58
+ return []; // Return empty success for invalid UUID
59
+ }
60
+ createScopedLogger('RecordsSearchService', 'searchRecordsObjectType', OperationType.DATA_PROCESSING).warn('list_membership filter not yet supported in listObjectRecords');
61
+ }
62
+ return await listObjectRecords('records', {
63
+ pageSize: limit,
64
+ page: Math.floor((offset || 0) / (limit || 10)) + 1,
65
+ });
66
+ }
67
+ /**
68
+ * Search custom objects using generic records API
69
+ * Enables support for user-defined custom objects (Issue #918)
70
+ *
71
+ * @param objectSlug - The custom object type (e.g., "funds", "investment_opportunities")
72
+ * @param limit - Maximum results
73
+ * @param offset - Pagination offset
74
+ * @param filters - Optional filters to apply to the search
75
+ */
76
+ static async searchCustomObject(objectSlug, limit, offset, filters) {
77
+ // Handle list_membership filters - invalid UUID should return empty array
78
+ if (filters?.list_membership) {
79
+ const listId = String(filters.list_membership);
80
+ if (!ValidationService.validateUUIDForSearch(listId)) {
81
+ return []; // Return empty success for invalid UUID
82
+ }
83
+ createScopedLogger('RecordsSearchService', 'searchCustomObject', OperationType.DATA_PROCESSING).warn('list_membership filter not yet supported for custom objects');
84
+ }
85
+ createScopedLogger('RecordsSearchService', 'searchCustomObject', OperationType.DATA_PROCESSING).info('Searching custom object', {
86
+ objectSlug,
87
+ limit,
88
+ offset,
89
+ hasFilters: !!filters,
90
+ });
91
+ // Custom objects require POST to /objects/{slug}/records/query
92
+ // The GET endpoint (/objects/{slug}/records) returns 404 for custom objects
93
+ const path = `/objects/${objectSlug}/records/query`;
94
+ const requestBody = {
95
+ limit: limit || 20,
96
+ };
97
+ // Add offset if provided
98
+ if (offset && offset > 0) {
99
+ requestBody.offset = offset;
100
+ }
101
+ // Issue #935: Forward filters to request body (was silently dropped before)
102
+ if (filters && Object.keys(filters).length > 0) {
103
+ // Exclude list_membership from filter object as it's handled separately
104
+ const { list_membership, ...remainingFilters } = filters;
105
+ if (Object.keys(remainingFilters).length > 0) {
106
+ requestBody.filter = remainingFilters;
107
+ }
108
+ }
109
+ try {
110
+ const api = resolveApiClient();
111
+ const response = await api.post(path, requestBody);
112
+ return Array.isArray(response?.data?.data) ? response.data.data : [];
113
+ }
114
+ catch (error) {
115
+ return handleRecordsApiError(error, path, {
116
+ operation: 'searchCustomObject',
117
+ metadata: { objectSlug, limit, offset, hasFilters: !!filters },
118
+ });
119
+ }
120
+ }
121
+ }
122
+ //# sourceMappingURL=RecordsSearchService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordsSearchService.js","sourceRoot":"","sources":["../../../src/services/search/RecordsSearchService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * SearchCoordinator - Coordinates search type routing and execution
3
+ *
4
+ * Issue #935: Extracted from UniversalSearchService.ts to reduce file size
5
+ * Handles search type detection and routing to appropriate services
6
+ */
7
+ import { AttioRecord } from '../../types/attio.js';
8
+ import { UniversalResourceType, SearchType, MatchType, SortType } from '../../handlers/tool-configs/universal/types.js';
9
+ /**
10
+ * Parameters for search routing
11
+ */
12
+ export interface SearchRoutingParams {
13
+ resource_type: UniversalResourceType;
14
+ query?: string;
15
+ filters?: Record<string, unknown>;
16
+ limit?: number;
17
+ offset?: number;
18
+ search_type?: SearchType;
19
+ fields?: string[];
20
+ match_type?: MatchType;
21
+ sort?: SortType;
22
+ relationship_target_type?: UniversalResourceType;
23
+ relationship_target_id?: string;
24
+ timeframe_attribute?: string;
25
+ start_date?: string;
26
+ end_date?: string;
27
+ date_operator?: 'greater_than' | 'less_than' | 'between' | 'equals';
28
+ content_fields?: string[];
29
+ use_or_logic?: boolean;
30
+ }
31
+ /**
32
+ * Coordinates search execution by routing to appropriate services
33
+ */
34
+ export declare class SearchCoordinator {
35
+ /**
36
+ * Route search to appropriate service based on search type
37
+ * Issue #935: Performance tracking is handled at the UniversalSearchService level
38
+ */
39
+ static executeSearch(params: SearchRoutingParams): Promise<AttioRecord[]>;
40
+ }
41
+ //# sourceMappingURL=SearchCoordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchCoordinator.d.ts","sourceRoot":"","sources":["../../../src/services/search/SearchCoordinator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,QAAQ,EACT,MAAM,4CAA4C,CAAC;AAMpD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,qBAAqB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,wBAAwB,CAAC,EAAE,qBAAqB,CAAC;IACjD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IACpE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;;OAGG;WACU,aAAa,CACxB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC;CAsH1B"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * SearchCoordinator - Coordinates search type routing and execution
3
+ *
4
+ * Issue #935: Extracted from UniversalSearchService.ts to reduce file size
5
+ * Handles search type detection and routing to appropriate services
6
+ */
7
+ import { UniversalResourceType, SearchType, } from '../../handlers/tool-configs/universal/types.js';
8
+ import { QueryApiService } from './QueryApiService.js';
9
+ import { RecordsSearchService } from './RecordsSearchService.js';
10
+ import { StrategyFactory } from './StrategyFactory.js';
11
+ /**
12
+ * Coordinates search execution by routing to appropriate services
13
+ */
14
+ export class SearchCoordinator {
15
+ /**
16
+ * Route search to appropriate service based on search type
17
+ * Issue #935: Performance tracking is handled at the UniversalSearchService level
18
+ */
19
+ static async executeSearch(params) {
20
+ const { resource_type, query, filters, limit, offset, search_type, fields, match_type, sort, relationship_target_type, relationship_target_id, timeframe_attribute, start_date, end_date, date_operator, content_fields, use_or_logic, } = params;
21
+ // Handle special search types first
22
+ switch (search_type) {
23
+ case SearchType.RELATIONSHIP:
24
+ if (relationship_target_type && relationship_target_id) {
25
+ return QueryApiService.searchByRelationship(resource_type, relationship_target_type, relationship_target_id, limit, offset);
26
+ }
27
+ throw new Error('Relationship search requires target_type and target_id parameters');
28
+ case SearchType.TIMEFRAME:
29
+ if (timeframe_attribute) {
30
+ const timeframeConfig = {
31
+ resourceType: resource_type,
32
+ attribute: timeframe_attribute,
33
+ startDate: start_date,
34
+ endDate: end_date,
35
+ operator: date_operator || 'between',
36
+ };
37
+ return QueryApiService.searchByTimeframe(resource_type, timeframeConfig, limit, offset);
38
+ }
39
+ throw new Error('Timeframe search requires timeframe_attribute parameter');
40
+ case SearchType.CONTENT:
41
+ // Use Query API if content_fields is explicitly provided
42
+ if (content_fields && content_fields.length > 0) {
43
+ if (!query) {
44
+ throw new Error('Content search requires query parameter');
45
+ }
46
+ return QueryApiService.searchByContent(resource_type, query, content_fields, use_or_logic !== false, limit, offset);
47
+ }
48
+ // Fall through to strategy-based content search
49
+ break;
50
+ }
51
+ // Use strategy pattern for resource-specific searches
52
+ const strategy = await StrategyFactory.getStrategy(resource_type);
53
+ if (strategy) {
54
+ return await strategy.search({
55
+ query,
56
+ filters,
57
+ limit,
58
+ offset,
59
+ search_type,
60
+ fields,
61
+ match_type,
62
+ sort,
63
+ timeframeParams: {
64
+ timeframe_attribute,
65
+ start_date,
66
+ end_date,
67
+ date_operator,
68
+ },
69
+ });
70
+ }
71
+ // Fallback for resources without strategies
72
+ // This handles both 'records' type AND custom objects
73
+ switch (resource_type) {
74
+ case UniversalResourceType.RECORDS:
75
+ return RecordsSearchService.searchRecordsObjectType(limit, offset, filters);
76
+ default:
77
+ // Custom objects: route through generic records API with object slug
78
+ // This enables support for user-defined custom objects (Issue #918)
79
+ return RecordsSearchService.searchCustomObject(resource_type, limit, offset, filters);
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=SearchCoordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchCoordinator.js","sourceRoot":"","sources":["../../../src/services/search/SearchCoordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * StrategyFactory - Creates and initializes search strategies
3
+ *
4
+ * Issue #935: Extracted from UniversalSearchService.ts to reduce file size
5
+ * Handles strategy initialization with dependencies
6
+ */
7
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
8
+ import { ISearchStrategy } from '../../services/search-strategies/index.js';
9
+ /**
10
+ * Factory for creating and managing search strategies
11
+ */
12
+ export declare class StrategyFactory {
13
+ private static strategies;
14
+ /**
15
+ * Get or create a strategy for a resource type
16
+ */
17
+ static getStrategy(resourceType: UniversalResourceType): Promise<ISearchStrategy | undefined>;
18
+ /**
19
+ * Initialize all search strategies with their dependencies
20
+ */
21
+ private static initializeStrategies;
22
+ /**
23
+ * Check if a resource type has a strategy
24
+ */
25
+ static hasStrategy(resourceType: UniversalResourceType): boolean;
26
+ /**
27
+ * Clear all strategies (useful for testing)
28
+ */
29
+ static clearStrategies(): void;
30
+ }
31
+ //# sourceMappingURL=StrategyFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrategyFactory.d.ts","sourceRoot":"","sources":["../../../src/services/search/StrategyFactory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EACL,eAAe,EAQhB,MAAM,uCAAuC,CAAC;AAuB/C;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqD;IAE9E;;OAEG;WACU,WAAW,CACtB,YAAY,EAAE,qBAAqB,GAClC,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAOvC;;OAEG;mBACkB,oBAAoB;IAiFzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,qBAAqB,GAAG,OAAO;IAIhE;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,IAAI;CAG/B"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * StrategyFactory - Creates and initializes search strategies
3
+ *
4
+ * Issue #935: Extracted from UniversalSearchService.ts to reduce file size
5
+ * Handles strategy initialization with dependencies
6
+ */
7
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
8
+ import { CompanySearchStrategy, PeopleSearchStrategy, DealSearchStrategy, TaskSearchStrategy, ListSearchStrategy, NoteSearchStrategy, } from '../../services/search-strategies/index.js';
9
+ import { SearchUtilities } from '../../services/search-utilities/SearchUtilities.js';
10
+ import { ensureFunctionAvailability } from '../../services/search-utilities/FunctionValidator.js';
11
+ import { advancedSearchCompanies } from '../../objects/companies/index.js';
12
+ import { advancedSearchPeople } from '../../objects/people/index.js';
13
+ import { advancedSearchDeals } from '../../objects/deals/index.js';
14
+ import { searchLists } from '../../objects/lists.js';
15
+ import { listTasks } from '../../objects/tasks.js';
16
+ import { listNotes } from '../../objects/notes.js';
17
+ // Dynamic imports for better error handling
18
+ const ensureAdvancedSearchCompanies = () => ensureFunctionAvailability(advancedSearchCompanies, 'advancedSearchCompanies');
19
+ const ensureAdvancedSearchPeople = () => ensureFunctionAvailability(advancedSearchPeople, 'advancedSearchPeople');
20
+ const ensureAdvancedSearchDeals = () => ensureFunctionAvailability(advancedSearchDeals, 'advancedSearchDeals');
21
+ /**
22
+ * Factory for creating and managing search strategies
23
+ */
24
+ export class StrategyFactory {
25
+ static strategies = new Map();
26
+ /**
27
+ * Get or create a strategy for a resource type
28
+ */
29
+ static async getStrategy(resourceType) {
30
+ if (this.strategies.size === 0) {
31
+ await this.initializeStrategies();
32
+ }
33
+ return this.strategies.get(resourceType);
34
+ }
35
+ /**
36
+ * Initialize all search strategies with their dependencies
37
+ */
38
+ static async initializeStrategies() {
39
+ if (this.strategies.size > 0) {
40
+ return; // Already initialized
41
+ }
42
+ // Create dependencies for strategies
43
+ const companyDependencies = {
44
+ advancedSearchFunction: await ensureAdvancedSearchCompanies(),
45
+ createDateFilter: SearchUtilities.createDateFilter,
46
+ mergeFilters: SearchUtilities.mergeFilters,
47
+ rankByRelevance: SearchUtilities.rankByRelevance.bind(SearchUtilities),
48
+ getFieldValue: SearchUtilities.getFieldValue.bind(SearchUtilities),
49
+ };
50
+ const peopleDependencies = {
51
+ paginatedSearchFunction: await ensureAdvancedSearchPeople(),
52
+ createDateFilter: SearchUtilities.createDateFilter,
53
+ mergeFilters: SearchUtilities.mergeFilters,
54
+ rankByRelevance: SearchUtilities.rankByRelevance.bind(SearchUtilities),
55
+ getFieldValue: SearchUtilities.getFieldValue.bind(SearchUtilities),
56
+ };
57
+ const dealDependencies = {
58
+ advancedSearchFunction: await ensureAdvancedSearchDeals(),
59
+ createDateFilter: SearchUtilities.createDateFilter,
60
+ mergeFilters: SearchUtilities.mergeFilters,
61
+ rankByRelevance: SearchUtilities.rankByRelevance.bind(SearchUtilities),
62
+ getFieldValue: SearchUtilities.getFieldValue.bind(SearchUtilities),
63
+ };
64
+ const listDependencies = {
65
+ listFunction: (query, limit, offset) => searchLists(query || '', limit, offset),
66
+ rankByRelevance: SearchUtilities.rankByRelevance.bind(SearchUtilities),
67
+ getFieldValue: SearchUtilities.getFieldValue.bind(SearchUtilities),
68
+ };
69
+ const taskDependencies = {
70
+ taskFunction: (status, assigneeId, page, pageSize) => listTasks(status, assigneeId, page, pageSize),
71
+ rankByRelevance: SearchUtilities.rankByRelevance.bind(SearchUtilities),
72
+ getFieldValue: SearchUtilities.getFieldValue.bind(SearchUtilities),
73
+ };
74
+ const noteDependencies = {
75
+ noteFunction: (query) => listNotes(query || {}),
76
+ rankByRelevance: SearchUtilities.rankByRelevance.bind(SearchUtilities),
77
+ getFieldValue: SearchUtilities.getFieldValue.bind(SearchUtilities),
78
+ };
79
+ // Initialize strategies
80
+ this.strategies.set(UniversalResourceType.COMPANIES, new CompanySearchStrategy(companyDependencies));
81
+ this.strategies.set(UniversalResourceType.PEOPLE, new PeopleSearchStrategy(peopleDependencies));
82
+ this.strategies.set(UniversalResourceType.DEALS, new DealSearchStrategy(dealDependencies));
83
+ this.strategies.set(UniversalResourceType.LISTS, new ListSearchStrategy(listDependencies));
84
+ this.strategies.set(UniversalResourceType.TASKS, new TaskSearchStrategy(taskDependencies));
85
+ this.strategies.set(UniversalResourceType.NOTES, new NoteSearchStrategy(noteDependencies));
86
+ }
87
+ /**
88
+ * Check if a resource type has a strategy
89
+ */
90
+ static hasStrategy(resourceType) {
91
+ return this.strategies.has(resourceType);
92
+ }
93
+ /**
94
+ * Clear all strategies (useful for testing)
95
+ */
96
+ static clearStrategies() {
97
+ this.strategies.clear();
98
+ }
99
+ }
100
+ //# sourceMappingURL=StrategyFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrategyFactory.js","sourceRoot":"","sources":["../../../src/services/search/StrategyFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Service for writing formatted output to disk
3
+ *
4
+ * Handles file I/O operations including:
5
+ * - Creating directory structures
6
+ * - Writing files to disk
7
+ * - Creating ZIP archives
8
+ * - Path validation (security)
9
+ *
10
+ * @see Issue #983
11
+ */
12
+ import type { FormattedOutput, GenerateSkillConfig, SkillOutput } from './types.js';
13
+ /**
14
+ * Service for writing skill output to disk
15
+ */
16
+ export declare class OutputWriterService {
17
+ /**
18
+ * Writes formatted output to disk
19
+ *
20
+ * @param formatted - Formatted output from SchemaFormatterService
21
+ * @param config - Generation configuration
22
+ * @returns Information about written files
23
+ */
24
+ write(formatted: FormattedOutput, config: GenerateSkillConfig): Promise<SkillOutput>;
25
+ /**
26
+ * Creates ZIP archive of output files
27
+ *
28
+ * @param basePath - Base directory path
29
+ * @param files - Map of relative paths to file contents
30
+ */
31
+ private createZip;
32
+ /**
33
+ * Resolves and validates output path
34
+ *
35
+ * @param config - Generation configuration
36
+ * @returns Absolute output path
37
+ * @throws Error if path validation fails (directory traversal attempt)
38
+ */
39
+ private resolveOutputPath;
40
+ }
41
+ //# sourceMappingURL=OutputWriterService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutputWriterService.d.ts","sourceRoot":"","sources":["../../../src/services/skill-generator/OutputWriterService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACG,KAAK,CACT,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,WAAW,CAAC;IAiCvB;;;;;OAKG;YACW,SAAS;IAqBvB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CA4B1B"}