attio-mcp 1.3.6 → 1.4.1

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 (440) hide show
  1. package/CHANGELOG.md +284 -3
  2. package/README.md +143 -334
  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 +42 -20
  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 +3 -3
  14. package/dist/api/operations/batch.d.ts.map +1 -1
  15. package/dist/api/operations/batch.js.map +1 -1
  16. package/dist/api/operations/crud.d.ts.map +1 -1
  17. package/dist/api/operations/crud.js.map +1 -1
  18. package/dist/api/operations/search.d.ts.map +1 -1
  19. package/dist/api/operations/search.js.map +1 -1
  20. package/dist/cli/commands/generate-skill.d.ts +28 -0
  21. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  22. package/dist/cli/commands/generate-skill.js +101 -0
  23. package/dist/cli/commands/generate-skill.js.map +1 -0
  24. package/dist/cli/discover.js +65 -0
  25. package/dist/cli/discover.js.map +1 -1
  26. package/dist/cli.js.map +1 -1
  27. package/dist/config/deal-defaults.d.ts +2 -2
  28. package/dist/config/deal-defaults.d.ts.map +1 -1
  29. package/dist/config/deal-defaults.js +15 -6
  30. package/dist/config/deal-defaults.js.map +1 -1
  31. package/dist/config/tool-aliases.d.ts +12 -0
  32. package/dist/config/tool-aliases.d.ts.map +1 -1
  33. package/dist/config/tool-aliases.js +213 -69
  34. package/dist/config/tool-aliases.js.map +1 -1
  35. package/dist/constants/tool-names.d.ts +84 -0
  36. package/dist/constants/tool-names.d.ts.map +1 -0
  37. package/dist/constants/tool-names.js +81 -0
  38. package/dist/constants/tool-names.js.map +1 -0
  39. package/dist/constants/universal.constants.d.ts +24 -0
  40. package/dist/constants/universal.constants.d.ts.map +1 -1
  41. package/dist/constants/universal.constants.js +81 -9
  42. package/dist/constants/universal.constants.js.map +1 -1
  43. package/dist/errors/value-match-error.js +1 -1
  44. package/dist/handlers/tool-configs/lists.d.ts +142 -19
  45. package/dist/handlers/tool-configs/lists.d.ts.map +1 -1
  46. package/dist/handlers/tool-configs/lists.js +319 -25
  47. package/dist/handlers/tool-configs/lists.js.map +1 -1
  48. package/dist/handlers/tool-configs/universal/batch-search.d.ts +1 -1
  49. package/dist/handlers/tool-configs/universal/batch-search.d.ts.map +1 -1
  50. package/dist/handlers/tool-configs/universal/batch-search.js +17 -13
  51. package/dist/handlers/tool-configs/universal/batch-search.js.map +1 -1
  52. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts +26 -4
  53. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts.map +1 -1
  54. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js +181 -21
  55. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js.map +1 -1
  56. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts +4 -4
  57. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
  58. package/dist/handlers/tool-configs/universal/core/crud-operations.js +37 -24
  59. package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
  60. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js +3 -3
  61. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js.map +1 -1
  62. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts +17 -0
  63. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts.map +1 -0
  64. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js +118 -0
  65. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js.map +1 -0
  66. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts +14 -0
  67. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts.map +1 -0
  68. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js +77 -0
  69. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js.map +1 -0
  70. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts +24 -0
  71. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts.map +1 -0
  72. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js +35 -0
  73. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js.map +1 -0
  74. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts +15 -0
  75. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts.map +1 -0
  76. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js +108 -0
  77. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js.map +1 -0
  78. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts +14 -0
  79. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts.map +1 -0
  80. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js +91 -0
  81. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js.map +1 -0
  82. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts +14 -0
  83. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts.map +1 -0
  84. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js +118 -0
  85. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js.map +1 -0
  86. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts +77 -0
  87. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts.map +1 -0
  88. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js +42 -0
  89. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js.map +1 -0
  90. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts +15 -0
  91. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts.map +1 -0
  92. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js +109 -0
  93. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js.map +1 -0
  94. package/dist/handlers/tool-configs/universal/core/index.d.ts +63 -22
  95. package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
  96. package/dist/handlers/tool-configs/universal/core/index.js +24 -22
  97. package/dist/handlers/tool-configs/universal/core/index.js.map +1 -1
  98. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts +43 -1
  99. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts.map +1 -1
  100. package/dist/handlers/tool-configs/universal/core/metadata-operations.js +117 -11
  101. package/dist/handlers/tool-configs/universal/core/metadata-operations.js.map +1 -1
  102. package/dist/handlers/tool-configs/universal/core/notes-operations.js +12 -12
  103. package/dist/handlers/tool-configs/universal/core/notes-operations.js.map +1 -1
  104. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts +6 -3
  105. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts.map +1 -1
  106. package/dist/handlers/tool-configs/universal/core/record-details-operations.js +35 -10
  107. package/dist/handlers/tool-configs/universal/core/record-details-operations.js.map +1 -1
  108. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts +4 -3
  109. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
  110. package/dist/handlers/tool-configs/universal/core/search-operations.js +31 -12
  111. package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
  112. package/dist/handlers/tool-configs/universal/core/utils.d.ts +1 -0
  113. package/dist/handlers/tool-configs/universal/core/utils.d.ts.map +1 -1
  114. package/dist/handlers/tool-configs/universal/core/utils.js +3 -0
  115. package/dist/handlers/tool-configs/universal/core/utils.js.map +1 -1
  116. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.d.ts.map +1 -1
  117. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js +32 -9
  118. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js.map +1 -1
  119. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.d.ts.map +1 -1
  120. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js +45 -6
  121. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js.map +1 -1
  122. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.d.ts.map +1 -1
  123. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js +36 -5
  124. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js.map +1 -1
  125. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts +1 -1
  126. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts.map +1 -1
  127. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js +17 -1
  128. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js.map +1 -1
  129. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.d.ts.map +1 -1
  130. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js +3 -1
  131. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js.map +1 -1
  132. package/dist/handlers/tool-configs/universal/index.d.ts +75 -34
  133. package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
  134. package/dist/handlers/tool-configs/universal/index.js +58 -58
  135. package/dist/handlers/tool-configs/universal/index.js.map +1 -1
  136. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts +3 -3
  137. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts.map +1 -1
  138. package/dist/handlers/tool-configs/universal/operations/advanced-search.js +17 -10
  139. package/dist/handlers/tool-configs/universal/operations/advanced-search.js.map +1 -1
  140. package/dist/handlers/tool-configs/universal/operations/batch-format.d.ts +1 -1
  141. package/dist/handlers/tool-configs/universal/operations/batch-format.d.ts.map +1 -1
  142. package/dist/handlers/tool-configs/universal/operations/batch-format.js +31 -10
  143. package/dist/handlers/tool-configs/universal/operations/batch-format.js.map +1 -1
  144. package/dist/handlers/tool-configs/universal/operations/batch-operations.js +3 -3
  145. package/dist/handlers/tool-configs/universal/operations/content-search.d.ts +3 -3
  146. package/dist/handlers/tool-configs/universal/operations/content-search.d.ts.map +1 -1
  147. package/dist/handlers/tool-configs/universal/operations/content-search.js +15 -9
  148. package/dist/handlers/tool-configs/universal/operations/content-search.js.map +1 -1
  149. package/dist/handlers/tool-configs/universal/operations/index.d.ts +10 -10
  150. package/dist/handlers/tool-configs/universal/operations/index.js +15 -15
  151. package/dist/handlers/tool-configs/universal/operations/relationship-search.d.ts +3 -3
  152. package/dist/handlers/tool-configs/universal/operations/relationship-search.d.ts.map +1 -1
  153. package/dist/handlers/tool-configs/universal/operations/relationship-search.js +11 -8
  154. package/dist/handlers/tool-configs/universal/operations/relationship-search.js.map +1 -1
  155. package/dist/handlers/tool-configs/universal/operations/timeframe-search.d.ts +3 -3
  156. package/dist/handlers/tool-configs/universal/operations/timeframe-search.d.ts.map +1 -1
  157. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js +16 -10
  158. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js.map +1 -1
  159. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.d.ts.map +1 -1
  160. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js +5 -2
  161. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js.map +1 -1
  162. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts +29 -0
  163. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts.map +1 -1
  164. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js +28 -0
  165. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js.map +1 -1
  166. package/dist/handlers/tool-configs/universal/schemas.d.ts +1 -1
  167. package/dist/handlers/tool-configs/universal/schemas.d.ts.map +1 -1
  168. package/dist/handlers/tool-configs/universal/schemas.js +1 -1
  169. package/dist/handlers/tool-configs/universal/schemas.js.map +1 -1
  170. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts +27 -7
  171. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts.map +1 -1
  172. package/dist/handlers/tool-configs/universal/shared-handlers.js +221 -25
  173. package/dist/handlers/tool-configs/universal/shared-handlers.js.map +1 -1
  174. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js +2 -2
  175. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js.map +1 -1
  176. package/dist/handlers/tool-configs/universal/types.d.ts +17 -7
  177. package/dist/handlers/tool-configs/universal/types.d.ts.map +1 -1
  178. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts +11 -0
  179. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts.map +1 -1
  180. package/dist/handlers/tool-configs/universal/validators/schema-validator.js +80 -17
  181. package/dist/handlers/tool-configs/universal/validators/schema-validator.js.map +1 -1
  182. package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
  183. package/dist/handlers/tools/dispatcher/core.js +9 -2
  184. package/dist/handlers/tools/dispatcher/core.js.map +1 -1
  185. package/dist/handlers/tools/dispatcher/operations/lists.d.ts +20 -1
  186. package/dist/handlers/tools/dispatcher/operations/lists.d.ts.map +1 -1
  187. package/dist/handlers/tools/dispatcher/operations/lists.js +366 -17
  188. package/dist/handlers/tools/dispatcher/operations/lists.js.map +1 -1
  189. package/dist/handlers/tools/formatters.d.ts +8 -1
  190. package/dist/handlers/tools/formatters.d.ts.map +1 -1
  191. package/dist/handlers/tools/formatters.js +30 -14
  192. package/dist/handlers/tools/formatters.js.map +1 -1
  193. package/dist/handlers/tools/registry.d.ts +409 -122
  194. package/dist/handlers/tools/registry.d.ts.map +1 -1
  195. package/dist/handlers/tools/registry.js +14 -9
  196. package/dist/handlers/tools/registry.js.map +1 -1
  197. package/dist/handlers/tools/standards/index.d.ts.map +1 -1
  198. package/dist/handlers/tools/standards/index.js +19 -11
  199. package/dist/handlers/tools/standards/index.js.map +1 -1
  200. package/dist/objects/companies/attributes.d.ts +5 -0
  201. package/dist/objects/companies/attributes.d.ts.map +1 -1
  202. package/dist/objects/companies/attributes.js +45 -31
  203. package/dist/objects/companies/attributes.js.map +1 -1
  204. package/dist/objects/companies/basic.d.ts.map +1 -1
  205. package/dist/objects/companies/basic.js.map +1 -1
  206. package/dist/objects/lists/base.d.ts.map +1 -1
  207. package/dist/objects/lists/base.js +6 -2
  208. package/dist/objects/lists/base.js.map +1 -1
  209. package/dist/objects/lists/shared.d.ts.map +1 -1
  210. package/dist/objects/lists/shared.js +12 -1
  211. package/dist/objects/lists/shared.js.map +1 -1
  212. package/dist/objects/records/index.d.ts.map +1 -1
  213. package/dist/objects/records/index.js.map +1 -1
  214. package/dist/server/createServer.d.ts.map +1 -1
  215. package/dist/server/createServer.js +4 -3
  216. package/dist/server/createServer.js.map +1 -1
  217. package/dist/services/ErrorService.js +3 -3
  218. package/dist/services/ErrorService.js.map +1 -1
  219. package/dist/services/OpenAiCompatibilityService.d.ts.map +1 -1
  220. package/dist/services/OpenAiCompatibilityService.js +12 -8
  221. package/dist/services/OpenAiCompatibilityService.js.map +1 -1
  222. package/dist/services/UniversalCreateService.d.ts +3 -3
  223. package/dist/services/UniversalCreateService.d.ts.map +1 -1
  224. package/dist/services/UniversalCreateService.js +162 -38
  225. package/dist/services/UniversalCreateService.js.map +1 -1
  226. package/dist/services/UniversalMetadataService.d.ts +8 -0
  227. package/dist/services/UniversalMetadataService.d.ts.map +1 -1
  228. package/dist/services/UniversalMetadataService.js +21 -0
  229. package/dist/services/UniversalMetadataService.js.map +1 -1
  230. package/dist/services/UniversalRetrievalService.d.ts +7 -5
  231. package/dist/services/UniversalRetrievalService.d.ts.map +1 -1
  232. package/dist/services/UniversalRetrievalService.js +31 -29
  233. package/dist/services/UniversalRetrievalService.js.map +1 -1
  234. package/dist/services/UniversalSearchService.d.ts +8 -27
  235. package/dist/services/UniversalSearchService.d.ts.map +1 -1
  236. package/dist/services/UniversalSearchService.js +19 -327
  237. package/dist/services/UniversalSearchService.js.map +1 -1
  238. package/dist/services/UniversalUpdateService.d.ts +25 -7
  239. package/dist/services/UniversalUpdateService.d.ts.map +1 -1
  240. package/dist/services/UniversalUpdateService.js +132 -157
  241. package/dist/services/UniversalUpdateService.js.map +1 -1
  242. package/dist/services/UniversalUtilityService.d.ts +9 -1
  243. package/dist/services/UniversalUtilityService.d.ts.map +1 -1
  244. package/dist/services/UniversalUtilityService.js +13 -0
  245. package/dist/services/UniversalUtilityService.js.map +1 -1
  246. package/dist/services/ValidationService.js +4 -4
  247. package/dist/services/ValidationService.js.map +1 -1
  248. package/dist/services/create/attio-create.service.d.ts.map +1 -1
  249. package/dist/services/create/attio-create.service.js +2 -1
  250. package/dist/services/create/attio-create.service.js.map +1 -1
  251. package/dist/services/create/creators/company-creator.js.map +1 -1
  252. package/dist/services/create/creators/note-creator.d.ts.map +1 -1
  253. package/dist/services/create/creators/note-creator.js +4 -2
  254. package/dist/services/create/creators/note-creator.js.map +1 -1
  255. package/dist/services/create/factory.d.ts.map +1 -1
  256. package/dist/services/create/factory.js +2 -1
  257. package/dist/services/create/factory.js.map +1 -1
  258. package/dist/services/create/mock-create.service.d.ts.map +1 -1
  259. package/dist/services/create/mock-create.service.js.map +1 -1
  260. package/dist/services/create/strategies/BaseCreateStrategy.d.ts +2 -2
  261. package/dist/services/create/strategies/BaseCreateStrategy.d.ts.map +1 -1
  262. package/dist/services/create/strategies/ListCreateStrategy.d.ts +3 -3
  263. package/dist/services/create/strategies/ListCreateStrategy.d.ts.map +1 -1
  264. package/dist/services/create/strategies/ListCreateStrategy.js +2 -16
  265. package/dist/services/create/strategies/ListCreateStrategy.js.map +1 -1
  266. package/dist/services/create/strategies/TaskCreateStrategy.d.ts.map +1 -1
  267. package/dist/services/create/strategies/TaskCreateStrategy.js.map +1 -1
  268. package/dist/services/metadata/AttributeOptionsService.d.ts +38 -0
  269. package/dist/services/metadata/AttributeOptionsService.d.ts.map +1 -0
  270. package/dist/services/metadata/AttributeOptionsService.js +92 -0
  271. package/dist/services/metadata/AttributeOptionsService.js.map +1 -0
  272. package/dist/services/metadata/MetadataDiscoveryService.d.ts.map +1 -1
  273. package/dist/services/metadata/MetadataDiscoveryService.js.map +1 -1
  274. package/dist/services/metadata/MetadataTransformService.d.ts.map +1 -1
  275. package/dist/services/metadata/MetadataTransformService.js.map +1 -1
  276. package/dist/services/metadata/index.d.ts +1 -0
  277. package/dist/services/metadata/index.d.ts.map +1 -1
  278. package/dist/services/metadata/index.js +1 -0
  279. package/dist/services/metadata/index.js.map +1 -1
  280. package/dist/services/search/QueryApiService.d.ts +27 -0
  281. package/dist/services/search/QueryApiService.d.ts.map +1 -0
  282. package/dist/services/search/QueryApiService.js +144 -0
  283. package/dist/services/search/QueryApiService.js.map +1 -0
  284. package/dist/services/search/RecordsSearchService.d.ts +27 -0
  285. package/dist/services/search/RecordsSearchService.d.ts.map +1 -0
  286. package/dist/services/search/RecordsSearchService.js +122 -0
  287. package/dist/services/search/RecordsSearchService.js.map +1 -0
  288. package/dist/services/search/SearchCoordinator.d.ts +41 -0
  289. package/dist/services/search/SearchCoordinator.d.ts.map +1 -0
  290. package/dist/services/search/SearchCoordinator.js +83 -0
  291. package/dist/services/search/SearchCoordinator.js.map +1 -0
  292. package/dist/services/search/StrategyFactory.d.ts +31 -0
  293. package/dist/services/search/StrategyFactory.d.ts.map +1 -0
  294. package/dist/services/search/StrategyFactory.js +100 -0
  295. package/dist/services/search/StrategyFactory.js.map +1 -0
  296. package/dist/services/search-strategies/BaseSearchStrategy.d.ts +5 -5
  297. package/dist/services/search-strategies/BaseSearchStrategy.d.ts.map +1 -1
  298. package/dist/services/search-strategies/BaseSearchStrategy.js.map +1 -1
  299. package/dist/services/search-strategies/CompanySearchStrategy.d.ts +4 -4
  300. package/dist/services/search-strategies/CompanySearchStrategy.d.ts.map +1 -1
  301. package/dist/services/search-strategies/CompanySearchStrategy.js +1 -1
  302. package/dist/services/search-strategies/CompanySearchStrategy.js.map +1 -1
  303. package/dist/services/search-strategies/DealSearchStrategy.d.ts +4 -4
  304. package/dist/services/search-strategies/DealSearchStrategy.d.ts.map +1 -1
  305. package/dist/services/search-strategies/DealSearchStrategy.js +1 -1
  306. package/dist/services/search-strategies/DealSearchStrategy.js.map +1 -1
  307. package/dist/services/search-strategies/ListSearchStrategy.d.ts +34 -7
  308. package/dist/services/search-strategies/ListSearchStrategy.d.ts.map +1 -1
  309. package/dist/services/search-strategies/ListSearchStrategy.js +65 -24
  310. package/dist/services/search-strategies/ListSearchStrategy.js.map +1 -1
  311. package/dist/services/search-strategies/NoteSearchStrategy.d.ts +4 -4
  312. package/dist/services/search-strategies/NoteSearchStrategy.d.ts.map +1 -1
  313. package/dist/services/search-strategies/NoteSearchStrategy.js +6 -7
  314. package/dist/services/search-strategies/NoteSearchStrategy.js.map +1 -1
  315. package/dist/services/search-strategies/PeopleSearchStrategy.d.ts +4 -4
  316. package/dist/services/search-strategies/PeopleSearchStrategy.d.ts.map +1 -1
  317. package/dist/services/search-strategies/PeopleSearchStrategy.js +1 -1
  318. package/dist/services/search-strategies/PeopleSearchStrategy.js.map +1 -1
  319. package/dist/services/search-strategies/TaskSearchStrategy.d.ts +4 -4
  320. package/dist/services/search-strategies/TaskSearchStrategy.d.ts.map +1 -1
  321. package/dist/services/search-strategies/TaskSearchStrategy.js +7 -8
  322. package/dist/services/search-strategies/TaskSearchStrategy.js.map +1 -1
  323. package/dist/services/search-strategies/interfaces.d.ts +7 -6
  324. package/dist/services/search-strategies/interfaces.d.ts.map +1 -1
  325. package/dist/services/search-utilities/SearchUtilities.d.ts +22 -7
  326. package/dist/services/search-utilities/SearchUtilities.d.ts.map +1 -1
  327. package/dist/services/search-utilities/SearchUtilities.js +52 -4
  328. package/dist/services/search-utilities/SearchUtilities.js.map +1 -1
  329. package/dist/services/skill-generator/OutputWriterService.d.ts +41 -0
  330. package/dist/services/skill-generator/OutputWriterService.d.ts.map +1 -0
  331. package/dist/services/skill-generator/OutputWriterService.js +100 -0
  332. package/dist/services/skill-generator/OutputWriterService.js.map +1 -0
  333. package/dist/services/skill-generator/SchemaFormatterService.d.ts +61 -0
  334. package/dist/services/skill-generator/SchemaFormatterService.d.ts.map +1 -0
  335. package/dist/services/skill-generator/SchemaFormatterService.js +168 -0
  336. package/dist/services/skill-generator/SchemaFormatterService.js.map +1 -0
  337. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts +84 -0
  338. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts.map +1 -0
  339. package/dist/services/skill-generator/WorkspaceSchemaService.js +292 -0
  340. package/dist/services/skill-generator/WorkspaceSchemaService.js.map +1 -0
  341. package/dist/services/skill-generator/index.d.ts +12 -0
  342. package/dist/services/skill-generator/index.d.ts.map +1 -0
  343. package/dist/services/skill-generator/index.js +11 -0
  344. package/dist/services/skill-generator/index.js.map +1 -0
  345. package/dist/services/skill-generator/types.d.ts +137 -0
  346. package/dist/services/skill-generator/types.d.ts.map +1 -0
  347. package/dist/services/skill-generator/types.js +10 -0
  348. package/dist/services/skill-generator/types.js.map +1 -0
  349. package/dist/services/update/FieldPersistenceHandler.d.ts +101 -0
  350. package/dist/services/update/FieldPersistenceHandler.d.ts.map +1 -0
  351. package/dist/services/update/FieldPersistenceHandler.js +207 -0
  352. package/dist/services/update/FieldPersistenceHandler.js.map +1 -0
  353. package/dist/services/update/FieldValidationHandler.d.ts +77 -0
  354. package/dist/services/update/FieldValidationHandler.d.ts.map +1 -0
  355. package/dist/services/update/FieldValidationHandler.js +157 -0
  356. package/dist/services/update/FieldValidationHandler.js.map +1 -0
  357. package/dist/services/update/MetadataResolver.d.ts +50 -0
  358. package/dist/services/update/MetadataResolver.d.ts.map +1 -0
  359. package/dist/services/update/MetadataResolver.js +110 -0
  360. package/dist/services/update/MetadataResolver.js.map +1 -0
  361. package/dist/services/update/ResponseNormalizer.d.ts +4 -4
  362. package/dist/services/update/ResponseNormalizer.d.ts.map +1 -1
  363. package/dist/services/update/ResponseNormalizer.js +18 -9
  364. package/dist/services/update/ResponseNormalizer.js.map +1 -1
  365. package/dist/services/update/UpdateOrchestrator.d.ts +37 -0
  366. package/dist/services/update/UpdateOrchestrator.d.ts.map +1 -0
  367. package/dist/services/update/UpdateOrchestrator.js +58 -0
  368. package/dist/services/update/UpdateOrchestrator.js.map +1 -0
  369. package/dist/services/update/UpdateValidation.d.ts +7 -3
  370. package/dist/services/update/UpdateValidation.d.ts.map +1 -1
  371. package/dist/services/update/UpdateValidation.js +56 -32
  372. package/dist/services/update/UpdateValidation.js.map +1 -1
  373. package/dist/services/update/strategies/BaseUpdateStrategy.d.ts +2 -2
  374. package/dist/services/update/strategies/BaseUpdateStrategy.d.ts.map +1 -1
  375. package/dist/services/update/strategies/ListUpdateStrategy.d.ts +3 -3
  376. package/dist/services/update/strategies/ListUpdateStrategy.d.ts.map +1 -1
  377. package/dist/services/update/strategies/ListUpdateStrategy.js +4 -14
  378. package/dist/services/update/strategies/ListUpdateStrategy.js.map +1 -1
  379. package/dist/services/value-transformer/index.d.ts +57 -0
  380. package/dist/services/value-transformer/index.d.ts.map +1 -0
  381. package/dist/services/value-transformer/index.js +326 -0
  382. package/dist/services/value-transformer/index.js.map +1 -0
  383. package/dist/services/value-transformer/multi-select-transformer.d.ts +63 -0
  384. package/dist/services/value-transformer/multi-select-transformer.d.ts.map +1 -0
  385. package/dist/services/value-transformer/multi-select-transformer.js +144 -0
  386. package/dist/services/value-transformer/multi-select-transformer.js.map +1 -0
  387. package/dist/services/value-transformer/record-reference-transformer.d.ts +43 -0
  388. package/dist/services/value-transformer/record-reference-transformer.d.ts.map +1 -0
  389. package/dist/services/value-transformer/record-reference-transformer.js +245 -0
  390. package/dist/services/value-transformer/record-reference-transformer.js.map +1 -0
  391. package/dist/services/value-transformer/select-transformer.d.ts +48 -0
  392. package/dist/services/value-transformer/select-transformer.d.ts.map +1 -0
  393. package/dist/services/value-transformer/select-transformer.js +232 -0
  394. package/dist/services/value-transformer/select-transformer.js.map +1 -0
  395. package/dist/services/value-transformer/status-transformer.d.ts +32 -0
  396. package/dist/services/value-transformer/status-transformer.d.ts.map +1 -0
  397. package/dist/services/value-transformer/status-transformer.js +329 -0
  398. package/dist/services/value-transformer/status-transformer.js.map +1 -0
  399. package/dist/services/value-transformer/types.d.ts +100 -0
  400. package/dist/services/value-transformer/types.d.ts.map +1 -0
  401. package/dist/services/value-transformer/types.js +6 -0
  402. package/dist/services/value-transformer/types.js.map +1 -0
  403. package/dist/templates/skill/SKILL.template.md +78 -0
  404. package/dist/templates/skill/attribute-reference.template.md +126 -0
  405. package/dist/templates/skill/complex-types.template.md +255 -0
  406. package/dist/types/attio.d.ts +55 -0
  407. package/dist/types/attio.d.ts.map +1 -1
  408. package/dist/types/attio.js +36 -0
  409. package/dist/types/attio.js.map +1 -1
  410. package/dist/utils/client-resolver.d.ts.map +1 -1
  411. package/dist/utils/client-resolver.js +8 -16
  412. package/dist/utils/client-resolver.js.map +1 -1
  413. package/dist/utils/complex-type-validation.d.ts +16 -0
  414. package/dist/utils/complex-type-validation.d.ts.map +1 -0
  415. package/dist/utils/complex-type-validation.js +196 -0
  416. package/dist/utils/complex-type-validation.js.map +1 -0
  417. package/dist/utils/error-response-utils.js +3 -3
  418. package/dist/utils/error-response-utils.js.map +1 -1
  419. package/dist/utils/error-utilities.d.ts.map +1 -1
  420. package/dist/utils/error-utilities.js +16 -9
  421. package/dist/utils/error-utilities.js.map +1 -1
  422. package/dist/utils/location-normalizer.d.ts +26 -0
  423. package/dist/utils/location-normalizer.d.ts.map +1 -0
  424. package/dist/utils/location-normalizer.js +39 -0
  425. package/dist/utils/location-normalizer.js.map +1 -0
  426. package/dist/utils/metadata-utils.d.ts +27 -0
  427. package/dist/utils/metadata-utils.d.ts.map +1 -0
  428. package/dist/utils/metadata-utils.js +59 -0
  429. package/dist/utils/metadata-utils.js.map +1 -0
  430. package/dist/utils/normalization/record-data-normalization.d.ts +47 -0
  431. package/dist/utils/normalization/record-data-normalization.d.ts.map +1 -0
  432. package/dist/utils/normalization/record-data-normalization.js +103 -0
  433. package/dist/utils/normalization/record-data-normalization.js.map +1 -0
  434. package/dist/utils/personal-name-parser.d.ts.map +1 -1
  435. package/dist/utils/personal-name-parser.js +26 -17
  436. package/dist/utils/personal-name-parser.js.map +1 -1
  437. package/dist/validators/company/field_detector.d.ts.map +1 -1
  438. package/dist/validators/company/field_detector.js +5 -0
  439. package/dist/validators/company/field_detector.js.map +1 -1
  440. package/package.json +35 -33
@@ -0,0 +1,157 @@
1
+ /**
2
+ * FieldValidationHandler - Validation orchestration with display name resolution
3
+ *
4
+ * Consolidates validation logic and integrates display name resolution
5
+ * for create/update operations.
6
+ *
7
+ * @see Issue #984 - Extend display name resolution to create/update operations
8
+ */
9
+ import { validateFields } from '../../handlers/tool-configs/universal/field-mapper.js';
10
+ import { ValidationService } from '../../services/ValidationService.js';
11
+ import { debug, OperationType } from '../../utils/logger.js';
12
+ /**
13
+ * FieldValidationHandler - Validation and display name resolution
14
+ */
15
+ export class FieldValidationHandler {
16
+ /**
17
+ * Validate fields and optionally resolve display names to API slugs
18
+ *
19
+ * Integrates display name resolution (previously only in get_attribute_options)
20
+ * to work for create/update operations.
21
+ *
22
+ * @param resourceType - Resource type being validated
23
+ * @param values - Field values to validate
24
+ * @param objectSlug - Optional object slug for display name resolution
25
+ * @param enableDisplayNameResolution - Whether to attempt display name resolution (default: true)
26
+ * @returns Validation result with warnings, suggestions, and resolved field names
27
+ */
28
+ static async validateAndResolve(resourceType, values, objectSlug, enableDisplayNameResolution = true) {
29
+ const result = {
30
+ valid: true,
31
+ errors: [],
32
+ warnings: [],
33
+ suggestions: [],
34
+ resolvedFields: new Map(),
35
+ };
36
+ // Pre-validate fields with suggestions
37
+ const fieldValidation = validateFields(resourceType, values);
38
+ // Propagate validation results (PR #1006 Phase 3.1)
39
+ result.valid = fieldValidation.valid;
40
+ result.errors.push(...fieldValidation.errors);
41
+ if (fieldValidation.warnings.length > 0) {
42
+ result.warnings.push(...fieldValidation.warnings);
43
+ debug('FieldValidationHandler', 'Field validation warnings', {
44
+ resourceType,
45
+ warnings: fieldValidation.warnings.join('\n'),
46
+ });
47
+ }
48
+ if (fieldValidation.suggestions.length > 0) {
49
+ const truncated = ValidationService.truncateSuggestions(fieldValidation.suggestions);
50
+ result.suggestions.push(...truncated);
51
+ debug('FieldValidationHandler', 'Field suggestions', {
52
+ resourceType,
53
+ suggestions: truncated.join('\n'),
54
+ });
55
+ }
56
+ // NEW: Attempt display name resolution for unknown fields
57
+ if (enableDisplayNameResolution && objectSlug) {
58
+ await this.resolveDisplayNames(values, objectSlug, result);
59
+ }
60
+ return result;
61
+ }
62
+ /**
63
+ * Apply deal-specific validation and defaults
64
+ *
65
+ * @param values - Deal values to validate
66
+ * @param skipApiValidation - Whether to skip API validation
67
+ * @returns Deal validation result with validated data, warnings, and suggestions
68
+ */
69
+ static async validateDealDefaults(values, skipApiValidation = false) {
70
+ try {
71
+ const { applyDealDefaultsWithValidation } = await import('../../config/deal-defaults.js');
72
+ const dealValidation = await applyDealDefaultsWithValidation(values, skipApiValidation);
73
+ debug('FieldValidationHandler', 'Deal validation applied', {
74
+ warnings: dealValidation.warnings,
75
+ suggestions: dealValidation.suggestions,
76
+ });
77
+ return {
78
+ dealData: dealValidation.dealData,
79
+ warnings: dealValidation.warnings,
80
+ suggestions: dealValidation.suggestions,
81
+ };
82
+ }
83
+ catch (error) {
84
+ const errorMessage = error instanceof Error ? error.message : String(error);
85
+ debug('FieldValidationHandler', 'Deal validation failed', {
86
+ error: errorMessage,
87
+ });
88
+ return {
89
+ dealData: values,
90
+ warnings: [`Deal validation warning: ${errorMessage}`],
91
+ suggestions: [],
92
+ };
93
+ }
94
+ }
95
+ /**
96
+ * Attempt to resolve display names to API slugs for unknown fields
97
+ *
98
+ * This extends display name resolution (previously only in get_attribute_options)
99
+ * to work for create/update operations, improving UX consistency.
100
+ *
101
+ * @param values - Field values (may contain display names like "Deal stage")
102
+ * @param objectSlug - Object slug for attribute lookup
103
+ * @param result - Validation result to populate with resolutions
104
+ */
105
+ static async resolveDisplayNames(values, objectSlug, result) {
106
+ // Import display name resolver (will be exported in Phase 4)
107
+ // For now, we'll use a simplified version until shared-handlers exports it
108
+ try {
109
+ const fieldNames = Object.keys(values);
110
+ for (const fieldName of fieldNames) {
111
+ // Only attempt resolution for fields with spaces or mixed case (likely display names)
112
+ const mightBeDisplayName = fieldName.includes(' ') || /[A-Z]/.test(fieldName);
113
+ if (!mightBeDisplayName) {
114
+ continue;
115
+ }
116
+ // Attempt to resolve display name to API slug
117
+ // Uses the exported resolveAttributeDisplayName from shared-handlers.ts
118
+ const resolved = await this.attemptDisplayNameResolution(objectSlug, fieldName);
119
+ if (resolved && resolved !== fieldName) {
120
+ result.resolvedFields.set(fieldName, resolved);
121
+ debug('FieldValidationHandler', 'Resolved display name', {
122
+ from: fieldName,
123
+ to: resolved,
124
+ objectSlug,
125
+ });
126
+ }
127
+ }
128
+ }
129
+ catch (error) {
130
+ // Silent fallback - display name resolution is best-effort
131
+ debug('FieldValidationHandler', 'Display name resolution failed', {
132
+ error: error instanceof Error ? error.message : String(error),
133
+ });
134
+ }
135
+ }
136
+ /**
137
+ * Attempt to resolve a display name to an API slug
138
+ *
139
+ * Uses the exported resolveAttributeDisplayName from shared-handlers.ts
140
+ * to support user-friendly field names like "Deal stage" instead of "stage"
141
+ *
142
+ * @param objectSlug - The object slug (e.g., "deals", "companies")
143
+ * @param fieldName - The field name to resolve (e.g., "Deal stage")
144
+ * @returns The resolved API slug if found, or null
145
+ */
146
+ static async attemptDisplayNameResolution(objectSlug, fieldName) {
147
+ try {
148
+ const { resolveAttributeDisplayName } = await import('../../handlers/tool-configs/universal/shared-handlers.js');
149
+ return await resolveAttributeDisplayName(objectSlug, fieldName);
150
+ }
151
+ catch (err) {
152
+ debug('FieldValidationHandler', 'Display name resolution failed', { objectSlug, fieldName, error: err }, 'attemptDisplayNameResolution', OperationType.DATA_PROCESSING);
153
+ return null;
154
+ }
155
+ }
156
+ }
157
+ //# sourceMappingURL=FieldValidationHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldValidationHandler.js","sourceRoot":"","sources":["../../../src/services/update/FieldValidationHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * MetadataResolver - Centralized metadata fetching with caching
3
+ *
4
+ * Consolidates duplicate metadata fetching from UniversalUpdateService
5
+ * and value-transformer into a single, cacheable operation.
6
+ *
7
+ * @see Issue #984 - Consolidate metadata fetching to reduce API calls by 40-60%
8
+ */
9
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
10
+ import type { AttributeMetadata } from '../../services/value-transformer/types.js';
11
+ /**
12
+ * Result of metadata resolution
13
+ */
14
+ export interface MetadataResolutionResult {
15
+ /** Map of attribute slug → metadata for transformer */
16
+ metadataMap: Map<string, AttributeMetadata>;
17
+ /** Array of attribute slugs (lowercase) for field mapper */
18
+ availableAttributes: string[];
19
+ /** Whether result came from cache (true) or fresh fetch (false) */
20
+ fromCache: boolean;
21
+ }
22
+ /**
23
+ * MetadataResolver - Single source of truth for metadata fetching
24
+ */
25
+ export declare class MetadataResolver {
26
+ /**
27
+ * Fetch metadata for a resource type with caching
28
+ *
29
+ * This is the single entry point for metadata fetching across
30
+ * UniversalUpdateService, UniversalCreateService, and value-transformer.
31
+ *
32
+ * @param resourceType - The resource type to fetch metadata for
33
+ * @param recordData - Optional record data containing object slug
34
+ * @returns Metadata map and available attributes for field mapping
35
+ */
36
+ static fetchMetadata(resourceType: UniversalResourceType, recordData?: Record<string, unknown>): Promise<MetadataResolutionResult>;
37
+ /**
38
+ * Fetch fresh metadata from Attio API
39
+ */
40
+ private static fetchFreshMetadata;
41
+ /**
42
+ * Extract object slug from resource type and record data
43
+ */
44
+ static extractObjectSlug(resourceType: UniversalResourceType, recordData?: Record<string, unknown>): string | undefined;
45
+ /**
46
+ * Extract attribute slugs for field mapper (lowercase)
47
+ */
48
+ private static extractAttributeSlugs;
49
+ }
50
+ //# sourceMappingURL=MetadataResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataResolver.d.ts","sourceRoot":"","sources":["../../../src/services/update/MetadataResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAGnF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAI/E;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,uDAAuD;IACvD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC5C,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;;;OASG;WACU,aAAa,CACxB,YAAY,EAAE,qBAAqB,EACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,wBAAwB,CAAC;IAkFpC;;OAEG;mBACkB,kBAAkB;IAcvC;;OAEG;WACW,iBAAiB,CAC7B,YAAY,EAAE,qBAAqB,EACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,GAAG,SAAS;IAcrB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAarC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * MetadataResolver - Centralized metadata fetching with caching
3
+ *
4
+ * Consolidates duplicate metadata fetching from UniversalUpdateService
5
+ * and value-transformer into a single, cacheable operation.
6
+ *
7
+ * @see Issue #984 - Consolidate metadata fetching to reduce API calls by 40-60%
8
+ */
9
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
10
+ import { CachingService } from '../../services/CachingService.js';
11
+ import { DEFAULT_ATTRIBUTES_CACHE_TTL } from '../../constants/universal.constants.js';
12
+ import { debug, error as logError } from '../../utils/logger.js';
13
+ import { convertToMetadataMap } from '../../utils/metadata-utils.js';
14
+ /**
15
+ * MetadataResolver - Single source of truth for metadata fetching
16
+ */
17
+ export class MetadataResolver {
18
+ /**
19
+ * Fetch metadata for a resource type with caching
20
+ *
21
+ * This is the single entry point for metadata fetching across
22
+ * UniversalUpdateService, UniversalCreateService, and value-transformer.
23
+ *
24
+ * @param resourceType - The resource type to fetch metadata for
25
+ * @param recordData - Optional record data containing object slug
26
+ * @returns Metadata map and available attributes for field mapping
27
+ */
28
+ static async fetchMetadata(resourceType, recordData) {
29
+ const objectSlug = this.extractObjectSlug(resourceType, recordData);
30
+ try {
31
+ // Try cache first, then load fresh data
32
+ const result = await CachingService.getOrLoadAttributes(() => this.fetchFreshMetadata(resourceType, objectSlug), resourceType, objectSlug, DEFAULT_ATTRIBUTES_CACHE_TTL);
33
+ // Use shared utility from metadata-utils (PR #1006 Phase 2.1)
34
+ const metadataMap = convertToMetadataMap(result.data);
35
+ const availableAttributes = this.extractAttributeSlugs(metadataMap);
36
+ debug('MetadataResolver', 'Metadata fetched', {
37
+ resourceType,
38
+ objectSlug,
39
+ fromCache: result.fromCache,
40
+ attributeCount: metadataMap.size,
41
+ });
42
+ return {
43
+ metadataMap,
44
+ availableAttributes,
45
+ fromCache: result.fromCache,
46
+ };
47
+ }
48
+ catch (err) {
49
+ const error = err instanceof Error ? err : new Error(String(err));
50
+ // Re-throw critical authentication errors (Issue #984 extension - PR review feedback)
51
+ if (error.message.includes('401') ||
52
+ error.message.includes('403') ||
53
+ error.message.includes('Unauthorized') ||
54
+ error.message.includes('Forbidden')) {
55
+ logError('MetadataResolver', 'Authentication error fetching metadata', error, { resourceType, objectSlug });
56
+ throw error;
57
+ }
58
+ // Re-throw schema validation errors
59
+ if (error.message.includes('validation') ||
60
+ error.message.includes('schema')) {
61
+ logError('MetadataResolver', 'Schema validation error fetching metadata', error, { resourceType, objectSlug });
62
+ throw error;
63
+ }
64
+ // Log and return empty for non-critical errors (transient failures, network issues)
65
+ logError('MetadataResolver', 'Non-critical metadata fetch error, using empty metadata', error, { resourceType, objectSlug });
66
+ debug('MetadataResolver', 'Graceful degradation with empty metadata', {
67
+ resourceType,
68
+ objectSlug,
69
+ });
70
+ return {
71
+ metadataMap: new Map(),
72
+ availableAttributes: [],
73
+ fromCache: false,
74
+ };
75
+ }
76
+ }
77
+ /**
78
+ * Fetch fresh metadata from Attio API
79
+ */
80
+ static async fetchFreshMetadata(resourceType, objectSlug) {
81
+ const { UniversalMetadataService } = await import('../../services/UniversalMetadataService.js');
82
+ const options = objectSlug ? { objectSlug } : undefined;
83
+ return UniversalMetadataService.discoverAttributesForResourceType(resourceType, options);
84
+ }
85
+ /**
86
+ * Extract object slug from resource type and record data
87
+ */
88
+ static extractObjectSlug(resourceType, recordData) {
89
+ if (resourceType === UniversalResourceType.RECORDS) {
90
+ return (recordData?.object ||
91
+ recordData?.object_api_slug ||
92
+ 'records');
93
+ }
94
+ if (resourceType === UniversalResourceType.DEALS) {
95
+ return 'deals';
96
+ }
97
+ return undefined;
98
+ }
99
+ /**
100
+ * Extract attribute slugs for field mapper (lowercase)
101
+ */
102
+ static extractAttributeSlugs(metadataMap) {
103
+ return Array.from(new Set(Array.from(metadataMap.values()).flatMap((attr) => {
104
+ return [attr.api_slug, attr.title, attr.slug]
105
+ .filter((s) => typeof s === 'string')
106
+ .map((s) => s.toLowerCase());
107
+ })));
108
+ }
109
+ }
110
+ //# sourceMappingURL=MetadataResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataResolver.js","sourceRoot":"","sources":["../../../src/services/update/MetadataResolver.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import type { AttioRecord } from '../../types/attio.js';
2
- import type { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
1
+ import type { AttioList, AttioRecord, UniversalRecord } from '../../types/attio.js';
2
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
3
3
  export declare const ResponseNormalizer: {
4
- normalizeResponseFormat(resourceType: UniversalResourceType, record: AttioRecord): AttioRecord;
4
+ normalizeResponseFormat(resourceType: UniversalResourceType, record: UniversalRecord): UniversalRecord;
5
5
  normalizeCompanyRecord(record: AttioRecord): AttioRecord;
6
6
  normalizePersonRecord(record: AttioRecord): AttioRecord;
7
- normalizeListRecord(record: AttioRecord): AttioRecord;
7
+ normalizeListRecord(record: AttioList): AttioList;
8
8
  normalizeTaskRecord(record: AttioRecord): AttioRecord;
9
9
  normalizeDealRecord(record: AttioRecord): AttioRecord;
10
10
  normalizeGenericRecord(record: AttioRecord): AttioRecord;
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseNormalizer.d.ts","sourceRoot":"","sources":["../../../src/services/update/ResponseNormalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAE5F,eAAO,MAAM,kBAAkB;0CAEb,qBAAqB,UAC3B,WAAW,GAClB,WAAW;mCA+BiB,WAAW,GAAG,WAAW;kCAmB1B,WAAW,GAAG,WAAW;gCAsB3B,WAAW,GAAG,WAAW;gCAYzB,WAAW,GAAG,WAAW;gCAkBzB,WAAW,GAAG,WAAW;mCAgBtB,WAAW,GAAG,WAAW;CAOzD,CAAC"}
1
+ {"version":3,"file":"ResponseNormalizer.d.ts","sourceRoot":"","sources":["../../../src/services/update/ResponseNormalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,eAAO,MAAM,kBAAkB;0CAEb,qBAAqB,UAC3B,eAAe,GACtB,eAAe;mCA4Ca,WAAW,GAAG,WAAW;kCAmB1B,WAAW,GAAG,WAAW;gCAsB3B,SAAS,GAAG,SAAS;gCAYrB,WAAW,GAAG,WAAW;gCAkBzB,WAAW,GAAG,WAAW;mCAgBtB,WAAW,GAAG,WAAW;CAOzD,CAAC"}
@@ -1,8 +1,19 @@
1
+ import { isAttioList, isAttioRecord } from '../../types/attio.js';
2
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
1
3
  export const ResponseNormalizer = {
2
4
  normalizeResponseFormat(resourceType, record) {
3
5
  if (!record || typeof record !== 'object') {
4
6
  throw new Error(`Invalid record format received for ${resourceType}: ${typeof record}`);
5
7
  }
8
+ if (resourceType === UniversalResourceType.LISTS) {
9
+ if (!isAttioList(record)) {
10
+ throw new Error(`Invalid list format received for ${resourceType}: ${typeof record}`);
11
+ }
12
+ return this.normalizeListRecord(record);
13
+ }
14
+ if (!isAttioRecord(record)) {
15
+ throw new Error(`Invalid record format received for ${resourceType}: ${typeof record}`);
16
+ }
6
17
  const normalized = {
7
18
  id: record.id || { record_id: 'unknown' },
8
19
  values: record.values || {},
@@ -10,17 +21,15 @@ export const ResponseNormalizer = {
10
21
  updated_at: record.updated_at || new Date().toISOString(),
11
22
  };
12
23
  switch (resourceType) {
13
- case 'companies':
24
+ case UniversalResourceType.COMPANIES:
14
25
  return this.normalizeCompanyRecord(normalized);
15
- case 'people':
26
+ case UniversalResourceType.PEOPLE:
16
27
  return this.normalizePersonRecord(normalized);
17
- case 'lists':
18
- return this.normalizeListRecord(normalized);
19
- case 'tasks':
28
+ case UniversalResourceType.TASKS:
20
29
  return this.normalizeTaskRecord(normalized);
21
- case 'deals':
30
+ case UniversalResourceType.DEALS:
22
31
  return this.normalizeDealRecord(normalized);
23
- case 'records':
32
+ case UniversalResourceType.RECORDS:
24
33
  return this.normalizeGenericRecord(normalized);
25
34
  default:
26
35
  return normalized;
@@ -71,9 +80,9 @@ export const ResponseNormalizer = {
71
80
  ...record,
72
81
  id: {
73
82
  ...record.id,
74
- object_id: idObj.object_id || 'lists',
75
- list_id: idObj.list_id || idObj.record_id,
83
+ list_id: idObj.list_id || record.id.list_id,
76
84
  },
85
+ name: record.name || record.title,
77
86
  };
78
87
  },
79
88
  normalizeTaskRecord(record) {
@@ -1 +1 @@
1
- {"version":3,"file":"ResponseNormalizer.js","sourceRoot":"","sources":["../../../src/services/update/ResponseNormalizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ResponseNormalizer.js","sourceRoot":"","sources":["../../../src/services/update/ResponseNormalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * UpdateOrchestrator - Strategy pattern orchestration for updates
3
+ *
4
+ * Extracted from UniversalUpdateService to separate concerns.
5
+ * Delegates to resource-specific update strategies.
6
+ *
7
+ * @see Issue #984 - Modularize UniversalUpdateService (831→220 lines)
8
+ */
9
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
10
+ import type { UniversalRecord } from '../../types/attio.js';
11
+ /**
12
+ * Context for update orchestration
13
+ */
14
+ export interface UpdateContext {
15
+ /** Resource type being updated */
16
+ resourceType: UniversalResourceType;
17
+ /** ID of the record to update */
18
+ recordId: string;
19
+ /** Sanitized values to update */
20
+ sanitizedValues: Record<string, unknown>;
21
+ /** Optional object slug for records/deals */
22
+ objectSlug?: string;
23
+ }
24
+ /**
25
+ * UpdateOrchestrator - Delegates updates to resource-specific strategies
26
+ */
27
+ export declare class UpdateOrchestrator {
28
+ /**
29
+ * Dispatch update to appropriate strategy based on resource type
30
+ *
31
+ * @param context - Update context with resource type, record ID, values, and options
32
+ * @returns Updated record from Attio API
33
+ * @throws Error if resource type is unsupported
34
+ */
35
+ static executeUpdate(context: UpdateContext): Promise<UniversalRecord>;
36
+ }
37
+ //# sourceMappingURL=UpdateOrchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/update/UpdateOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,YAAY,EAAE,qBAAqB,CAAC;IACpC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;OAMG;WACU,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;CAsE7E"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * UpdateOrchestrator - Strategy pattern orchestration for updates
3
+ *
4
+ * Extracted from UniversalUpdateService to separate concerns.
5
+ * Delegates to resource-specific update strategies.
6
+ *
7
+ * @see Issue #984 - Modularize UniversalUpdateService (831→220 lines)
8
+ */
9
+ import { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
10
+ import { debug } from '../../utils/logger.js';
11
+ /**
12
+ * UpdateOrchestrator - Delegates updates to resource-specific strategies
13
+ */
14
+ export class UpdateOrchestrator {
15
+ /**
16
+ * Dispatch update to appropriate strategy based on resource type
17
+ *
18
+ * @param context - Update context with resource type, record ID, values, and options
19
+ * @returns Updated record from Attio API
20
+ * @throws Error if resource type is unsupported
21
+ */
22
+ static async executeUpdate(context) {
23
+ const { resourceType, recordId, sanitizedValues, objectSlug } = context;
24
+ debug('UpdateOrchestrator', 'Dispatching update', {
25
+ resourceType,
26
+ recordId,
27
+ objectSlug,
28
+ fieldCount: Object.keys(sanitizedValues).length,
29
+ });
30
+ switch (resourceType) {
31
+ case UniversalResourceType.COMPANIES: {
32
+ const { CompanyUpdateStrategy } = await import('../../services/update/strategies/CompanyUpdateStrategy.js');
33
+ return new CompanyUpdateStrategy().update(recordId, sanitizedValues, resourceType);
34
+ }
35
+ case UniversalResourceType.LISTS: {
36
+ const { ListUpdateStrategy } = await import('../../services/update/strategies/ListUpdateStrategy.js');
37
+ return new ListUpdateStrategy().update(recordId, sanitizedValues, resourceType);
38
+ }
39
+ case UniversalResourceType.PEOPLE: {
40
+ const { PersonUpdateStrategy } = await import('../../services/update/strategies/PersonUpdateStrategy.js');
41
+ return new PersonUpdateStrategy().update(recordId, sanitizedValues, resourceType);
42
+ }
43
+ case UniversalResourceType.RECORDS:
44
+ case UniversalResourceType.DEALS: {
45
+ const { RecordUpdateStrategy } = await import('../../services/update/strategies/RecordUpdateStrategy.js');
46
+ return new RecordUpdateStrategy().update(recordId, sanitizedValues, resourceType, { objectSlug: objectSlug || 'records' });
47
+ }
48
+ case UniversalResourceType.TASKS: {
49
+ const { TaskUpdateStrategy } = await import('../../services/update/strategies/TaskUpdateStrategy.js');
50
+ return new TaskUpdateStrategy().update(recordId, sanitizedValues, resourceType);
51
+ }
52
+ default: {
53
+ throw new Error(`Unsupported resource type for update: ${resourceType}`);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=UpdateOrchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateOrchestrator.js","sourceRoot":"","sources":["../../../src/services/update/UpdateOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAEnF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAgB1C;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,OAAsB;QAC/C,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAExE,KAAK,CAAC,oBAAoB,EAAE,oBAAoB,EAAE;YAChD,YAAY;YACZ,QAAQ;YACR,UAAU;YACV,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM;SAChD,CAAC,CAAC;QAEH,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;gBACrC,MAAM,EAAE,qBAAqB,EAAE,GAC7B,MAAM,MAAM,CAAC,uDAAuD,CAAC,CAAC;gBACxE,OAAO,IAAI,qBAAqB,EAAE,CAAC,MAAM,CACvC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,kBAAkB,EAAE,GAC1B,MAAM,MAAM,CAAC,oDAAoD,CAAC,CAAC;gBACrE,OAAO,IAAI,kBAAkB,EAAE,CAAC,MAAM,CACpC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClC,MAAM,EAAE,oBAAoB,EAAE,GAC5B,MAAM,MAAM,CAAC,sDAAsD,CAAC,CAAC;gBACvE,OAAO,IAAI,oBAAoB,EAAE,CAAC,MAAM,CACtC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,OAAO,CAAC;YACnC,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,oBAAoB,EAAE,GAC5B,MAAM,MAAM,CAAC,sDAAsD,CAAC,CAAC;gBACvE,OAAO,IAAI,oBAAoB,EAAE,CAAC,MAAM,CACtC,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,EAAE,UAAU,EAAE,UAAU,IAAI,SAAS,EAAE,CACxC,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjC,MAAM,EAAE,kBAAkB,EAAE,GAC1B,MAAM,MAAM,CAAC,oDAAoD,CAAC,CAAC;gBACrE,OAAO,IAAI,kBAAkB,EAAE,CAAC,MAAM,CACpC,QAAQ,EACR,eAAe,EACf,YAAY,CACb,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,yCAAyC,YAAY,EAAE,CACxD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { AttioRecord } from '../../types/attio.js';
1
+ import { type UniversalRecord } from '../../types/attio.js';
2
2
  import type { UniversalResourceType } from '../../handlers/tool-configs/universal/types.js';
3
3
  export declare const UpdateValidation: {
4
4
  hasForbiddenContent(values: Record<string, unknown>): boolean;
@@ -9,9 +9,13 @@ export declare const UpdateValidation: {
9
9
  discrepancies: string[];
10
10
  warnings: string[];
11
11
  }>;
12
- fetchRecordForVerification(resourceType: UniversalResourceType, recordId: string): Promise<AttioRecord | null>;
12
+ fetchRecordForVerification(resourceType: UniversalResourceType, recordId: string): Promise<UniversalRecord | null>;
13
13
  /**
14
- * Check if a field name represents a status field (like deal stages)
14
+ * Check if a field is a status-type field (stage, status, etc.)
15
+ * Enhanced to recognize more status field variations (Issue #995)
16
+ *
17
+ * Uses exact matching and suffix patterns to avoid false positives
18
+ * from unrelated fields like "status_code" or "status_updated_at"
15
19
  */
16
20
  isStatusField(fieldName: string): boolean;
17
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateValidation.d.ts","sourceRoot":"","sources":["../../../src/services/update/UpdateValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAG5F,eAAO,MAAM,gBAAgB;gCACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;0CAMvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;oCAU5D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;yCAqBV,qBAAqB,YACzB,MAAM,mBACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;6CA+Dc,qBAAqB,YACzB,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAwD9B;;OAEG;6BACsB,MAAM,GAAG,OAAO;IAIzC;;OAEG;oCAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;;OAGG;gCACyB,MAAM,eAAe,OAAO,GAAG,OAAO;IA4BlE;;OAEG;sCAEc,OAAO,EAAE,eACX,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;IAevB;;OAEG;mCAEU,MAAM,iBACF,MAAM,eACR,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAczC;;OAEG;oCAEU,MAAM,iBACF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eACzB,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;OAEG;0CAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;kCAgBV,MAAM,iBACF,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAuC1C,CAAC"}
1
+ {"version":3,"file":"UpdateValidation.d.ts","sourceRoot":"","sources":["../../../src/services/update/UpdateValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAS1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAGxF,eAAO,MAAM,gBAAgB;gCACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;0CAMvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;oCAU5D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;yCAqBV,qBAAqB,YACzB,MAAM,mBACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;6CA6Ec,qBAAqB,YACzB,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAyClC;;;;;;OAMG;6BACsB,MAAM,GAAG,OAAO;IAezC;;OAEG;oCAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;;OAGG;gCACyB,MAAM,eAAe,OAAO,GAAG,OAAO;IAiDlE;;OAEG;sCAEc,OAAO,EAAE,eACX,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;IAevB;;OAEG;mCAEU,MAAM,iBACF,MAAM,eACR,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAczC;;OAEG;oCAEU,MAAM,iBACF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eACzB,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAU9B;;OAEG;0CAEc,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE;kCAgBV,MAAM,iBACF,OAAO,eACT,OAAO,GACnB;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAuC1C,CAAC"}