@elevasis/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (564) hide show
  1. package/dist/index.d.ts +435 -0
  2. package/dist/index.js +403 -0
  3. package/dist/organization-model/index.d.ts +435 -0
  4. package/dist/organization-model/index.js +403 -0
  5. package/package.json +62 -0
  6. package/src/README.md +34 -0
  7. package/src/__tests__/observability-exports.test.ts +36 -0
  8. package/src/__tests__/publish.test.ts +18 -0
  9. package/src/__tests__/template-foundations-compatibility.test.ts +34 -0
  10. package/src/auth/index.ts +8 -0
  11. package/src/auth/multi-tenancy/credentials/README.md +38 -0
  12. package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +216 -0
  13. package/src/auth/multi-tenancy/credentials/__tests__/service.test.ts +174 -0
  14. package/src/auth/multi-tenancy/credentials/index.ts +6 -0
  15. package/src/auth/multi-tenancy/credentials/server/encryption.ts +39 -0
  16. package/src/auth/multi-tenancy/credentials/server/service.ts +60 -0
  17. package/src/auth/multi-tenancy/index.ts +17 -0
  18. package/src/auth/multi-tenancy/invitations/__tests__/invitation.test.ts +237 -0
  19. package/src/auth/multi-tenancy/invitations/api-schemas.ts +107 -0
  20. package/src/auth/multi-tenancy/invitations/index.ts +38 -0
  21. package/src/auth/multi-tenancy/invitations/invitation.ts +86 -0
  22. package/src/auth/multi-tenancy/invitations/server/index.ts +25 -0
  23. package/src/auth/multi-tenancy/invitations/server/transforms.ts +24 -0
  24. package/src/auth/multi-tenancy/invitations/server/workos.ts +24 -0
  25. package/src/auth/multi-tenancy/invitations/supabase.ts +50 -0
  26. package/src/auth/multi-tenancy/memberships/__tests__/membership.test.ts +227 -0
  27. package/src/auth/multi-tenancy/memberships/__tests__/supabase-transforms.test.ts +88 -0
  28. package/src/auth/multi-tenancy/memberships/__tests__/workos-transforms.test.ts +139 -0
  29. package/src/auth/multi-tenancy/memberships/api-schemas.ts +126 -0
  30. package/src/auth/multi-tenancy/memberships/index.ts +22 -0
  31. package/src/auth/multi-tenancy/memberships/membership.ts +138 -0
  32. package/src/auth/multi-tenancy/memberships/server/index.ts +15 -0
  33. package/src/auth/multi-tenancy/memberships/server/transforms.ts +32 -0
  34. package/src/auth/multi-tenancy/memberships/server/workos.ts +21 -0
  35. package/src/auth/multi-tenancy/memberships/supabase.ts +46 -0
  36. package/src/auth/multi-tenancy/organizations/__tests__/organization.test.ts +249 -0
  37. package/src/auth/multi-tenancy/organizations/api-schemas.ts +128 -0
  38. package/src/auth/multi-tenancy/organizations/index.ts +23 -0
  39. package/src/auth/multi-tenancy/organizations/organization.ts +25 -0
  40. package/src/auth/multi-tenancy/organizations/server/index.ts +10 -0
  41. package/src/auth/multi-tenancy/organizations/server/transforms.ts +35 -0
  42. package/src/auth/multi-tenancy/organizations/server/workos.ts +20 -0
  43. package/src/auth/multi-tenancy/types.ts +89 -0
  44. package/src/auth/multi-tenancy/users/__tests__/user.test.ts +208 -0
  45. package/src/auth/multi-tenancy/users/api-schemas.ts +194 -0
  46. package/src/auth/multi-tenancy/users/index.ts +28 -0
  47. package/src/auth/multi-tenancy/users/server/index.ts +19 -0
  48. package/src/auth/multi-tenancy/users/server/transforms.ts +21 -0
  49. package/src/auth/multi-tenancy/users/server/workos.ts +16 -0
  50. package/src/auth/multi-tenancy/users/user.ts +65 -0
  51. package/src/business/acquisition/api-schemas.ts +759 -0
  52. package/src/business/acquisition/index.ts +109 -0
  53. package/src/business/acquisition/types.ts +400 -0
  54. package/src/business/crm/api-schemas.ts +75 -0
  55. package/src/business/delivery/index.ts +1 -0
  56. package/src/business/delivery/types.ts +89 -0
  57. package/src/business/index.ts +12 -0
  58. package/src/business/pdf/assets/ElevasisLogo.png +0 -0
  59. package/src/business/pdf/browser/image-utils.ts +74 -0
  60. package/src/business/pdf/browser/index.ts +16 -0
  61. package/src/business/pdf/browser/pdfmake-browser.ts +229 -0
  62. package/src/business/pdf/index.ts +10 -0
  63. package/src/business/pdf/sections/acceptance.ts +112 -0
  64. package/src/business/pdf/sections/automation.ts +56 -0
  65. package/src/business/pdf/sections/cover.ts +51 -0
  66. package/src/business/pdf/sections/index.ts +57 -0
  67. package/src/business/pdf/sections/investment.ts +69 -0
  68. package/src/business/pdf/sections/proposal-document.ts +200 -0
  69. package/src/business/pdf/sections/summary-investment.ts +124 -0
  70. package/src/business/pdf/sections/summary.ts +55 -0
  71. package/src/business/pdf/sections/table-summary.ts +59 -0
  72. package/src/business/pdf/sections/types.ts +124 -0
  73. package/src/business/pdf/server/__tests__/pdfmake-test.ts +219 -0
  74. package/src/business/pdf/server/index.ts +21 -0
  75. package/src/business/pdf/server/pdfmake-service.ts +237 -0
  76. package/src/business/pdf/server/themes/default.ts +8 -0
  77. package/src/business/pdf/server/themes/index.ts +9 -0
  78. package/src/business/pdf/server/themes/types.ts +8 -0
  79. package/src/business/pdf/shared/convert.ts +514 -0
  80. package/src/business/pdf/shared/index.ts +12 -0
  81. package/src/business/pdf/themes.ts +78 -0
  82. package/src/business/pdf/types.ts +272 -0
  83. package/src/business/seo/__tests__/linking.test.ts +549 -0
  84. package/src/business/seo/__tests__/types.test.ts +404 -0
  85. package/src/business/seo/index.ts +2 -0
  86. package/src/business/seo/linking.ts +281 -0
  87. package/src/business/seo/types.ts +199 -0
  88. package/src/commands/index.ts +8 -0
  89. package/src/commands/queue/index.ts +3 -0
  90. package/src/commands/queue/schemas.test.ts +593 -0
  91. package/src/commands/queue/schemas.ts +125 -0
  92. package/src/commands/queue/sse-events.ts +61 -0
  93. package/src/commands/queue/types/action.ts +52 -0
  94. package/src/commands/queue/types/checkpoint.ts +44 -0
  95. package/src/commands/queue/types/index.ts +7 -0
  96. package/src/commands/queue/types/task.ts +116 -0
  97. package/src/commands/queue/types.ts +14 -0
  98. package/src/content/distribution-metadata.ts +61 -0
  99. package/src/content/index.ts +10 -0
  100. package/src/deployments/index.ts +22 -0
  101. package/src/execution/calibration/__tests__/schemas.test.ts +320 -0
  102. package/src/execution/calibration/index.ts +3 -0
  103. package/src/execution/calibration/schemas.ts +121 -0
  104. package/src/execution/calibration/sse-events.ts +125 -0
  105. package/src/execution/calibration/types.ts +190 -0
  106. package/src/execution/core/__tests__/api-schemas.test.ts +667 -0
  107. package/src/execution/core/__tests__/archived-logs.test.ts +72 -0
  108. package/src/execution/core/api-schemas.ts +312 -0
  109. package/src/execution/core/index.ts +11 -0
  110. package/src/execution/core/resource-validator.test.ts +63 -0
  111. package/src/execution/core/runner-types.ts +80 -0
  112. package/src/execution/core/server/environment.ts +31 -0
  113. package/src/execution/core/sse-executions.ts +119 -0
  114. package/src/execution/core/types.ts +29 -0
  115. package/src/execution/engine/__tests__/fixtures/index.ts +2 -0
  116. package/src/execution/engine/__tests__/fixtures/mock-scenarios.ts +60 -0
  117. package/src/execution/engine/__tests__/fixtures/test-agents.ts +85 -0
  118. package/src/execution/engine/__tests__/integration/agent-framework.integration.test.ts +1031 -0
  119. package/src/execution/engine/__tests__/timeout.test.ts +565 -0
  120. package/src/execution/engine/agent/__tests__/errors.test.ts +508 -0
  121. package/src/execution/engine/agent/actions/__tests__/processor.test.ts +531 -0
  122. package/src/execution/engine/agent/actions/executor.ts +205 -0
  123. package/src/execution/engine/agent/actions/navigate-knowledge-executor.ts +230 -0
  124. package/src/execution/engine/agent/actions/processor.ts +116 -0
  125. package/src/execution/engine/agent/actions/types.ts +70 -0
  126. package/src/execution/engine/agent/core/__tests__/agent.test.ts +614 -0
  127. package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +134 -0
  128. package/src/execution/engine/agent/core/agent.ts +810 -0
  129. package/src/execution/engine/agent/core/types.ts +155 -0
  130. package/src/execution/engine/agent/errors.ts +251 -0
  131. package/src/execution/engine/agent/index.ts +78 -0
  132. package/src/execution/engine/agent/knowledge-map/__tests__/navigate-knowledge-executor.test.ts +580 -0
  133. package/src/execution/engine/agent/knowledge-map/__tests__/utils.test.ts +622 -0
  134. package/src/execution/engine/agent/knowledge-map/types.ts +106 -0
  135. package/src/execution/engine/agent/knowledge-map/utils.ts +101 -0
  136. package/src/execution/engine/agent/memory/__tests__/domains.test.ts +72 -0
  137. package/src/execution/engine/agent/memory/__tests__/manager.test.ts +754 -0
  138. package/src/execution/engine/agent/memory/__tests__/utils.test.ts +285 -0
  139. package/src/execution/engine/agent/memory/domains.ts +99 -0
  140. package/src/execution/engine/agent/memory/manager.ts +365 -0
  141. package/src/execution/engine/agent/memory/processor.ts +66 -0
  142. package/src/execution/engine/agent/memory/types.ts +90 -0
  143. package/src/execution/engine/agent/memory/utils.ts +134 -0
  144. package/src/execution/engine/agent/observability/logging.ts +467 -0
  145. package/src/execution/engine/agent/observability/types.ts +64 -0
  146. package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +209 -0
  147. package/src/execution/engine/agent/reasoning/adapters/agent-adapter-helpers.ts +349 -0
  148. package/src/execution/engine/agent/reasoning/processor.ts +92 -0
  149. package/src/execution/engine/agent/reasoning/prompt-sections/base-actions.ts +134 -0
  150. package/src/execution/engine/agent/reasoning/prompt-sections/completion.ts +49 -0
  151. package/src/execution/engine/agent/reasoning/prompt-sections/knowledge-map.ts +93 -0
  152. package/src/execution/engine/agent/reasoning/prompt-sections/memory.ts +65 -0
  153. package/src/execution/engine/agent/reasoning/prompt-sections/security.ts +32 -0
  154. package/src/execution/engine/agent/reasoning/prompt-sections/tools.ts +44 -0
  155. package/src/execution/engine/agent/reasoning/request-builder.ts +169 -0
  156. package/src/execution/engine/agent/reasoning/types.ts +18 -0
  157. package/src/execution/engine/base/__tests__/errors.test.ts +246 -0
  158. package/src/execution/engine/base/__tests__/serialization.test.ts +670 -0
  159. package/src/execution/engine/base/__tests__/utils.test.ts +45 -0
  160. package/src/execution/engine/base/errors.ts +118 -0
  161. package/src/execution/engine/base/index.ts +2 -0
  162. package/src/execution/engine/base/logging.ts +31 -0
  163. package/src/execution/engine/base/serialization.ts +324 -0
  164. package/src/execution/engine/base/types.ts +126 -0
  165. package/src/execution/engine/base/utils.ts +41 -0
  166. package/src/execution/engine/index.ts +440 -0
  167. package/src/execution/engine/interface/index.ts +1 -0
  168. package/src/execution/engine/interface/types.ts +62 -0
  169. package/src/execution/engine/llm/__tests__/errors.test.ts +318 -0
  170. package/src/execution/engine/llm/__tests__/input-sanitizer.test.ts +286 -0
  171. package/src/execution/engine/llm/__tests__/model-info.test.ts +50 -0
  172. package/src/execution/engine/llm/__tests__/model-validation.test.ts +321 -0
  173. package/src/execution/engine/llm/__tests__/response-schema-validator.test.ts +115 -0
  174. package/src/execution/engine/llm/adapters/__tests__/adapter-factory.test.ts +375 -0
  175. package/src/execution/engine/llm/adapters/__tests__/anthropic-adapter.test.ts +463 -0
  176. package/src/execution/engine/llm/adapters/__tests__/anthropic.integration.test.ts +177 -0
  177. package/src/execution/engine/llm/adapters/__tests__/circuit-breaker-error.test.ts +94 -0
  178. package/src/execution/engine/llm/adapters/__tests__/google-adapter.test.ts +722 -0
  179. package/src/execution/engine/llm/adapters/__tests__/google.integration.test.ts +376 -0
  180. package/src/execution/engine/llm/adapters/__tests__/mock-adapter.test.ts +432 -0
  181. package/src/execution/engine/llm/adapters/__tests__/openai-adapter.test.ts +551 -0
  182. package/src/execution/engine/llm/adapters/__tests__/openrouter-adapter.test.ts +563 -0
  183. package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +105 -0
  184. package/src/execution/engine/llm/adapters/__tests__/universal-adapter.test.ts +537 -0
  185. package/src/execution/engine/llm/adapters/circuit-breaker.ts +147 -0
  186. package/src/execution/engine/llm/adapters/index.ts +17 -0
  187. package/src/execution/engine/llm/adapters/mock-adapter.ts +116 -0
  188. package/src/execution/engine/llm/adapters/server/adapter-factory.ts +130 -0
  189. package/src/execution/engine/llm/adapters/server/anthropic.ts +137 -0
  190. package/src/execution/engine/llm/adapters/server/compose-signal.ts +18 -0
  191. package/src/execution/engine/llm/adapters/server/google.ts +283 -0
  192. package/src/execution/engine/llm/adapters/server/index.ts +12 -0
  193. package/src/execution/engine/llm/adapters/server/openai.ts +206 -0
  194. package/src/execution/engine/llm/adapters/server/openrouter.ts +235 -0
  195. package/src/execution/engine/llm/adapters/universal-adapter.ts +230 -0
  196. package/src/execution/engine/llm/errors.ts +186 -0
  197. package/src/execution/engine/llm/input-sanitizer.ts +129 -0
  198. package/src/execution/engine/llm/model-info.ts +332 -0
  199. package/src/execution/engine/llm/response-schema-validator.ts +113 -0
  200. package/src/execution/engine/llm/types.ts +86 -0
  201. package/src/execution/engine/test-utils/index.ts +6 -0
  202. package/src/execution/engine/test-utils/mocks.ts +56 -0
  203. package/src/execution/engine/tools/__tests__/tooling-error.test.ts +265 -0
  204. package/src/execution/engine/tools/__tests__/types.test.ts +47 -0
  205. package/src/execution/engine/tools/integration/base-integration-adapter.ts +50 -0
  206. package/src/execution/engine/tools/integration/index.ts +53 -0
  207. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-adapter.ts +73 -0
  208. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts +209 -0
  209. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-company-email/index.ts +82 -0
  210. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-decision-maker-email/index.ts +122 -0
  211. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-person-email/index.ts +89 -0
  212. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/verify-email/index.ts +84 -0
  213. package/src/execution/engine/tools/integration/server/adapters/anymailfinder/index.ts +16 -0
  214. package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +293 -0
  215. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +100 -0
  216. package/src/execution/engine/tools/integration/server/adapters/apify/apify-tools.ts +217 -0
  217. package/src/execution/engine/tools/integration/server/adapters/apify/fetch/get-dataset-items/index.ts +92 -0
  218. package/src/execution/engine/tools/integration/server/adapters/apify/fetch/run-actor/index.ts +218 -0
  219. package/src/execution/engine/tools/integration/server/adapters/apify/fetch/start-actor/index.ts +87 -0
  220. package/src/execution/engine/tools/integration/server/adapters/apify/index.ts +11 -0
  221. package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +362 -0
  222. package/src/execution/engine/tools/integration/server/adapters/attio/attio-adapter.ts +162 -0
  223. package/src/execution/engine/tools/integration/server/adapters/attio/attio-tools.ts +594 -0
  224. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/README.md +632 -0
  225. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-attribute/index.ts +214 -0
  226. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-note/index.ts +152 -0
  227. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-record/index.ts +141 -0
  228. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-note/index.ts +86 -0
  229. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-record/index.ts +105 -0
  230. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +186 -0
  231. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.ts +118 -0
  232. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-attributes/index.ts +165 -0
  233. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-notes/index.ts +96 -0
  234. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-objects/index.ts +104 -0
  235. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +338 -0
  236. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.ts +156 -0
  237. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-attribute/index.ts +220 -0
  238. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-record/index.ts +140 -0
  239. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/utils/types.ts +147 -0
  240. package/src/execution/engine/tools/integration/server/adapters/attio/index.ts +31 -0
  241. package/src/execution/engine/tools/integration/server/adapters/dropbox/__tests__/dropbox-adapter.test.ts +409 -0
  242. package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-adapter.ts +281 -0
  243. package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-tools.ts +106 -0
  244. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/__tests__/index.test.ts +451 -0
  245. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/index.ts +114 -0
  246. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/__tests__/index.test.ts +415 -0
  247. package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/index.ts +111 -0
  248. package/src/execution/engine/tools/integration/server/adapters/dropbox/index.ts +25 -0
  249. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +210 -0
  250. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +104 -0
  251. package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -0
  252. package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-adapter.ts +1189 -0
  253. package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-tools.ts +641 -0
  254. package/src/execution/engine/tools/integration/server/adapters/google-sheets/index.ts +18 -0
  255. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/activate-campaign/index.ts +86 -0
  256. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/__tests__/index.test.ts +289 -0
  257. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/index.ts +154 -0
  258. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/__tests__/index.test.ts +325 -0
  259. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/index.ts +153 -0
  260. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-delete-leads/index.ts +84 -0
  261. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-campaign/index.ts +125 -0
  262. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-inbox-test/index.ts +107 -0
  263. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/delete-campaign/index.ts +85 -0
  264. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-account-health/index.ts +91 -0
  265. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign/index.ts +92 -0
  266. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/__tests__/index.test.ts +195 -0
  267. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/index.ts +113 -0
  268. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-daily-campaign-analytics/index.ts +104 -0
  269. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-emails/index.ts +155 -0
  270. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/__tests__/index.test.ts +196 -0
  271. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/index.ts +102 -0
  272. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/__tests__/index.test.ts +189 -0
  273. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/index.ts +87 -0
  274. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-leads/index.ts +112 -0
  275. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/patch-lead/index.ts +76 -0
  276. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/pause-campaign/index.ts +86 -0
  277. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/remove-from-subsequence/index.ts +98 -0
  278. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/send-reply/index.ts +126 -0
  279. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/__tests__/index.test.ts +193 -0
  280. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/index.ts +99 -0
  281. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/__tests__/index.test.ts +621 -0
  282. package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/index.ts +125 -0
  283. package/src/execution/engine/tools/integration/server/adapters/instantly/index.ts +29 -0
  284. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-adapter.ts +178 -0
  285. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1473 -0
  286. package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/check-credits/index.ts +59 -0
  287. package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/verify-email/index.ts +102 -0
  288. package/src/execution/engine/tools/integration/server/adapters/millionverifier/index.ts +17 -0
  289. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-adapter.ts +80 -0
  290. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +102 -0
  291. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/get-email/index.ts +102 -0
  292. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +134 -0
  293. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +75 -0
  294. package/src/execution/engine/tools/integration/server/adapters/resend/index.ts +27 -0
  295. package/src/execution/engine/tools/integration/server/adapters/resend/resend-adapter.ts +108 -0
  296. package/src/execution/engine/tools/integration/server/adapters/resend/resend-tools.ts +132 -0
  297. package/src/execution/engine/tools/integration/server/adapters/resend/types.ts +44 -0
  298. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/create-envelope/index.ts +274 -0
  299. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/download-document/index.ts +230 -0
  300. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/get-envelope/index.ts +133 -0
  301. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/utils/types.ts +246 -0
  302. package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/void-envelope/index.ts +90 -0
  303. package/src/execution/engine/tools/integration/server/adapters/signature-api/index.ts +38 -0
  304. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-adapter.ts +87 -0
  305. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +179 -0
  306. package/src/execution/engine/tools/integration/server/adapters/stripe/fetch/utils/types.ts +210 -0
  307. package/src/execution/engine/tools/integration/server/adapters/stripe/index.ts +44 -0
  308. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-adapter.ts +517 -0
  309. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +309 -0
  310. package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts +133 -0
  311. package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts +122 -0
  312. package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts +111 -0
  313. package/src/execution/engine/tools/integration/server/adapters/tomba/index.ts +11 -0
  314. package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-adapter.ts +78 -0
  315. package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-tools.ts +222 -0
  316. package/src/execution/engine/tools/integration/server/index.ts +61 -0
  317. package/src/execution/engine/tools/integration/service.ts +161 -0
  318. package/src/execution/engine/tools/integration/tool.ts +253 -0
  319. package/src/execution/engine/tools/integration/types/anymailfinder.ts +74 -0
  320. package/src/execution/engine/tools/integration/types/apify.ts +92 -0
  321. package/src/execution/engine/tools/integration/types/attio.ts +354 -0
  322. package/src/execution/engine/tools/integration/types/dropbox.ts +64 -0
  323. package/src/execution/engine/tools/integration/types/gmail.ts +35 -0
  324. package/src/execution/engine/tools/integration/types/google-sheets.ts +303 -0
  325. package/src/execution/engine/tools/integration/types/index.ts +19 -0
  326. package/src/execution/engine/tools/integration/types/instantly.ts +557 -0
  327. package/src/execution/engine/tools/integration/types/millionverifier.ts +56 -0
  328. package/src/execution/engine/tools/integration/types/resend.ts +63 -0
  329. package/src/execution/engine/tools/integration/types/signature-api.ts +164 -0
  330. package/src/execution/engine/tools/integration/types/stripe.ts +162 -0
  331. package/src/execution/engine/tools/integration/types/tomba.ts +94 -0
  332. package/src/execution/engine/tools/lead-service-types.ts +884 -0
  333. package/src/execution/engine/tools/llm/index.ts +11 -0
  334. package/src/execution/engine/tools/llm/server/index.ts +8 -0
  335. package/src/execution/engine/tools/llm/server/llm-call-tool.ts +118 -0
  336. package/src/execution/engine/tools/platform/__tests__/approval.test.ts +242 -0
  337. package/src/execution/engine/tools/platform/__tests__/email.test.ts +482 -0
  338. package/src/execution/engine/tools/platform/__tests__/hitl-cancel.test.ts +97 -0
  339. package/src/execution/engine/tools/platform/__tests__/notification.test.ts +208 -0
  340. package/src/execution/engine/tools/platform/__tests__/pdf.test.ts +441 -0
  341. package/src/execution/engine/tools/platform/__tests__/scheduler.test.ts +189 -0
  342. package/src/execution/engine/tools/platform/__tests__/schedules.test.ts +336 -0
  343. package/src/execution/engine/tools/platform/acquisition/company-tools.ts +248 -0
  344. package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +319 -0
  345. package/src/execution/engine/tools/platform/acquisition/index.ts +43 -0
  346. package/src/execution/engine/tools/platform/acquisition/list-tools.ts +148 -0
  347. package/src/execution/engine/tools/platform/acquisition/types.ts +260 -0
  348. package/src/execution/engine/tools/platform/approval/cancel-by-metadata.ts +65 -0
  349. package/src/execution/engine/tools/platform/approval/index.ts +4 -0
  350. package/src/execution/engine/tools/platform/approval/tool.ts +99 -0
  351. package/src/execution/engine/tools/platform/email/index.ts +122 -0
  352. package/src/execution/engine/tools/platform/email/types.ts +96 -0
  353. package/src/execution/engine/tools/platform/index.ts +181 -0
  354. package/src/execution/engine/tools/platform/notification.ts +81 -0
  355. package/src/execution/engine/tools/platform/pdf/index.ts +110 -0
  356. package/src/execution/engine/tools/platform/pdf/types.ts +77 -0
  357. package/src/execution/engine/tools/platform/resource-invocation/__tests__/edge-cases.test.ts +507 -0
  358. package/src/execution/engine/tools/platform/resource-invocation/__tests__/resource-invocation-service.test.ts +500 -0
  359. package/src/execution/engine/tools/platform/resource-invocation/__tests__/tool.test.ts +555 -0
  360. package/src/execution/engine/tools/platform/resource-invocation/dynamic-tool.ts +94 -0
  361. package/src/execution/engine/tools/platform/resource-invocation/index.ts +14 -0
  362. package/src/execution/engine/tools/platform/resource-invocation/resource-invocation-service.ts +147 -0
  363. package/src/execution/engine/tools/platform/resource-invocation/tool.ts +115 -0
  364. package/src/execution/engine/tools/platform/resource-invocation/types.ts +31 -0
  365. package/src/execution/engine/tools/platform/scheduler.ts +87 -0
  366. package/src/execution/engine/tools/platform/schedules/cancel-by-key-tool.ts +48 -0
  367. package/src/execution/engine/tools/platform/schedules/cancel-by-metadata-tool.ts +42 -0
  368. package/src/execution/engine/tools/platform/schedules/delete-by-key-tool.ts +43 -0
  369. package/src/execution/engine/tools/platform/schedules/index.ts +13 -0
  370. package/src/execution/engine/tools/platform/schedules/list-tool.ts +56 -0
  371. package/src/execution/engine/tools/platform/schedules/types.ts +88 -0
  372. package/src/execution/engine/tools/platform/storage/__tests__/storage.test.ts +998 -0
  373. package/src/execution/engine/tools/platform/storage/index.ts +370 -0
  374. package/src/execution/engine/tools/platform/storage/types.ts +128 -0
  375. package/src/execution/engine/tools/platform/types.ts +148 -0
  376. package/src/execution/engine/tools/registry.ts +590 -0
  377. package/src/execution/engine/tools/tool-maps.ts +694 -0
  378. package/src/execution/engine/tools/types.ts +233 -0
  379. package/src/execution/engine/workflow/__tests__/errors.test.ts +139 -0
  380. package/src/execution/engine/workflow/__tests__/utils.test.ts +645 -0
  381. package/src/execution/engine/workflow/__tests__/workflow.test.ts +818 -0
  382. package/src/execution/engine/workflow/errors.ts +63 -0
  383. package/src/execution/engine/workflow/helpers/index.ts +11 -0
  384. package/src/execution/engine/workflow/helpers/server/index.ts +8 -0
  385. package/src/execution/engine/workflow/helpers/server/llm-call.ts +93 -0
  386. package/src/execution/engine/workflow/index.ts +19 -0
  387. package/src/execution/engine/workflow/log-truncate.ts +26 -0
  388. package/src/execution/engine/workflow/logging.ts +191 -0
  389. package/src/execution/engine/workflow/types.ts +183 -0
  390. package/src/execution/engine/workflow/utils.ts +280 -0
  391. package/src/execution/engine/workflow/workflow.ts +168 -0
  392. package/src/execution/index.ts +20 -0
  393. package/src/execution/scheduler/__tests__/api-schemas.test.ts +733 -0
  394. package/src/execution/scheduler/__tests__/retry.test.ts +37 -0
  395. package/src/execution/scheduler/__tests__/utils.test.ts +1009 -0
  396. package/src/execution/scheduler/api-schemas.ts +296 -0
  397. package/src/execution/scheduler/index.ts +50 -0
  398. package/src/execution/scheduler/schemas.ts +264 -0
  399. package/src/execution/scheduler/types.ts +111 -0
  400. package/src/execution/scheduler/utils.ts +364 -0
  401. package/src/forms/index.ts +7 -0
  402. package/src/forms/schemas.test.ts +113 -0
  403. package/src/forms/schemas.ts +69 -0
  404. package/src/forms/types.ts +70 -0
  405. package/src/index.ts +54 -0
  406. package/src/integrations/credentials/__tests__/api-schemas.test.ts +496 -0
  407. package/src/integrations/credentials/__tests__/schemas.test.ts +82 -0
  408. package/src/integrations/credentials/__tests__/utils.test.ts +144 -0
  409. package/src/integrations/credentials/api-schemas.ts +143 -0
  410. package/src/integrations/credentials/index.ts +32 -0
  411. package/src/integrations/credentials/schemas.ts +164 -0
  412. package/src/integrations/credentials/utils.ts +59 -0
  413. package/src/integrations/oauth/__tests__/provider-registry.test.ts +59 -0
  414. package/src/integrations/oauth/api-schemas.ts +92 -0
  415. package/src/integrations/oauth/index.ts +19 -0
  416. package/src/integrations/oauth/provider-registry.ts +61 -0
  417. package/src/integrations/oauth/server/__tests__/refresh-concurrent.test.ts +183 -0
  418. package/src/integrations/oauth/server/__tests__/refresh.integration.test.ts +257 -0
  419. package/src/integrations/oauth/server/__tests__/refresh.test.ts +577 -0
  420. package/src/integrations/oauth/server/credentials.ts +39 -0
  421. package/src/integrations/oauth/server/refresh.ts +214 -0
  422. package/src/integrations/oauth/types.ts +34 -0
  423. package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +318 -0
  424. package/src/integrations/webhook-endpoints/api-schemas.ts +102 -0
  425. package/src/integrations/webhook-endpoints/index.ts +28 -0
  426. package/src/integrations/webhook-endpoints/types.ts +51 -0
  427. package/src/operations/activities/api-schemas.ts +79 -0
  428. package/src/operations/activities/index.ts +9 -0
  429. package/src/operations/activities/sse-events.ts +30 -0
  430. package/src/operations/activities/types.ts +63 -0
  431. package/src/operations/debug-logs/client.ts +60 -0
  432. package/src/operations/debug-logs/debug-logger.ts +83 -0
  433. package/src/operations/debug-logs/index.ts +8 -0
  434. package/src/operations/debug-logs/server.ts +19 -0
  435. package/src/operations/debug-logs/types.ts +33 -0
  436. package/src/operations/index.ts +50 -0
  437. package/src/operations/notifications/__tests__/api-schemas.test.ts +216 -0
  438. package/src/operations/notifications/api-schemas.ts +91 -0
  439. package/src/operations/notifications/index.ts +3 -0
  440. package/src/operations/notifications/sse-events.ts +21 -0
  441. package/src/operations/notifications/types.ts +47 -0
  442. package/src/operations/observability/__tests__/openrouter-cost-flow.test.ts +297 -0
  443. package/src/operations/observability/__tests__/schemas.test.ts +151 -0
  444. package/src/operations/observability/__tests__/types.test.ts +109 -0
  445. package/src/operations/observability/__tests__/utils.test.ts +54 -0
  446. package/src/operations/observability/ai-usage-collector.ts +64 -0
  447. package/src/operations/observability/index.ts +13 -0
  448. package/src/operations/observability/metrics-collector.ts +49 -0
  449. package/src/operations/observability/schemas.ts +39 -0
  450. package/src/operations/observability/types.ts +463 -0
  451. package/src/operations/observability/utils.ts +77 -0
  452. package/src/operations/sessions/__tests__/api-schemas.test.ts +361 -0
  453. package/src/operations/sessions/__tests__/manager.test.ts +821 -0
  454. package/src/operations/sessions/api-schemas.ts +166 -0
  455. package/src/operations/sessions/index.ts +26 -0
  456. package/src/operations/sessions/server/manager.ts +90 -0
  457. package/src/operations/sessions/server/session.ts +180 -0
  458. package/src/operations/sessions/types.ts +98 -0
  459. package/src/operations/triggers/index.ts +12 -0
  460. package/src/operations/triggers/webhook/definitions/__tests__/instantly-reply-received.test.ts +72 -0
  461. package/src/operations/triggers/webhook/definitions/instantly-account-error.ts +44 -0
  462. package/src/operations/triggers/webhook/definitions/instantly-auto-reply-received.ts +51 -0
  463. package/src/operations/triggers/webhook/definitions/instantly-campaign-completed.ts +45 -0
  464. package/src/operations/triggers/webhook/definitions/instantly-email-bounced.ts +49 -0
  465. package/src/operations/triggers/webhook/definitions/instantly-lead-unsubscribed.ts +45 -0
  466. package/src/operations/triggers/webhook/definitions/instantly-reply-received.ts +54 -0
  467. package/src/operations/triggers/webhook/index.ts +35 -0
  468. package/src/operations/triggers/webhook/types.ts +74 -0
  469. package/src/organization-model/README.md +79 -0
  470. package/src/organization-model/__tests__/graph.test.ts +250 -0
  471. package/src/organization-model/__tests__/resolve.test.ts +47 -0
  472. package/src/organization-model/defaults.ts +60 -0
  473. package/src/organization-model/domains/branding.ts +22 -0
  474. package/src/organization-model/domains/crm.ts +46 -0
  475. package/src/organization-model/domains/delivery.ts +48 -0
  476. package/src/organization-model/domains/features.ts +57 -0
  477. package/src/organization-model/domains/lead-gen.ts +33 -0
  478. package/src/organization-model/domains/navigation.ts +103 -0
  479. package/src/organization-model/domains/shared.ts +42 -0
  480. package/src/organization-model/graph/build.ts +432 -0
  481. package/src/organization-model/graph/index.ts +4 -0
  482. package/src/organization-model/graph/schema.ts +50 -0
  483. package/src/organization-model/graph/types.ts +52 -0
  484. package/src/organization-model/index.ts +11 -0
  485. package/src/organization-model/published.ts +18 -0
  486. package/src/organization-model/resolve.ts +42 -0
  487. package/src/organization-model/schema.ts +21 -0
  488. package/src/organization-model/types.ts +27 -0
  489. package/src/platform/api/index.ts +1 -0
  490. package/src/platform/api/types.ts +35 -0
  491. package/src/platform/constants/http.ts +37 -0
  492. package/src/platform/constants/index.ts +5 -0
  493. package/src/platform/constants/limits.ts +32 -0
  494. package/src/platform/constants/resilience.ts +51 -0
  495. package/src/platform/constants/timeouts.ts +20 -0
  496. package/src/platform/constants/versions.ts +3 -0
  497. package/src/platform/index.ts +27 -0
  498. package/src/platform/registry/__tests__/command-view.test.ts +410 -0
  499. package/src/platform/registry/__tests__/resource-registry-static.test.ts +347 -0
  500. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +1004 -0
  501. package/src/platform/registry/__tests__/resource-registry.list-executable.test.ts +393 -0
  502. package/src/platform/registry/__tests__/resource-registry.test.ts +1942 -0
  503. package/src/platform/registry/__tests__/serialization.test.ts +1127 -0
  504. package/src/platform/registry/__tests__/validation.test.ts +1086 -0
  505. package/src/platform/registry/command-view.ts +180 -0
  506. package/src/platform/registry/domains.ts +165 -0
  507. package/src/platform/registry/index.ts +93 -0
  508. package/src/platform/registry/reserved.ts +24 -0
  509. package/src/platform/registry/resource-metadata.ts +59 -0
  510. package/src/platform/registry/resource-registry.command-queue-groups.test.ts +129 -0
  511. package/src/platform/registry/resource-registry.ts +788 -0
  512. package/src/platform/registry/serialization.ts +273 -0
  513. package/src/platform/registry/serialized-types.ts +231 -0
  514. package/src/platform/registry/stats-types.ts +66 -0
  515. package/src/platform/registry/types.ts +404 -0
  516. package/src/platform/registry/validation.ts +513 -0
  517. package/src/platform/resilience/__tests__/circuit-breaker.test.ts +291 -0
  518. package/src/platform/resilience/__tests__/http-error-mapper.test.ts +173 -0
  519. package/src/platform/resilience/__tests__/rate-limiter.test.ts +471 -0
  520. package/src/platform/resilience/__tests__/retry.test.ts +380 -0
  521. package/src/platform/resilience/__tests__/timeout.test.ts +219 -0
  522. package/src/platform/resilience/circuit-breaker.ts +164 -0
  523. package/src/platform/resilience/errors.ts +68 -0
  524. package/src/platform/resilience/http-error-mapper.ts +129 -0
  525. package/src/platform/resilience/index.ts +93 -0
  526. package/src/platform/resilience/rate-limiter-types.ts +46 -0
  527. package/src/platform/resilience/rate-limiter.ts +140 -0
  528. package/src/platform/resilience/retry.ts +89 -0
  529. package/src/platform/resilience/timeout.ts +63 -0
  530. package/src/platform/sse/events.ts +67 -0
  531. package/src/platform/sse/index.ts +7 -0
  532. package/src/platform/utils/__tests__/currency.test.ts +77 -0
  533. package/src/platform/utils/__tests__/validation.test.ts +1083 -0
  534. package/src/platform/utils/currency.ts +96 -0
  535. package/src/platform/utils/debounce.ts +52 -0
  536. package/src/platform/utils/error.ts +42 -0
  537. package/src/platform/utils/hmac.test.ts +97 -0
  538. package/src/platform/utils/index.ts +32 -0
  539. package/src/platform/utils/server/betterstack-logger.ts +210 -0
  540. package/src/platform/utils/server/hmac.ts +44 -0
  541. package/src/platform/utils/server/unsubscribe.ts +111 -0
  542. package/src/platform/utils/token-counter.ts +96 -0
  543. package/src/platform/utils/validation.ts +425 -0
  544. package/src/projects/api-schemas.ts +265 -0
  545. package/src/published.ts +1 -0
  546. package/src/server.ts +273 -0
  547. package/src/supabase/__tests__/helpers.test.ts +51 -0
  548. package/src/supabase/database.types.ts +2674 -0
  549. package/src/supabase/helpers.ts +20 -0
  550. package/src/supabase/index.ts +52 -0
  551. package/src/supabase/server/client.ts +58 -0
  552. package/src/test-utils/README.md +150 -0
  553. package/src/test-utils/browser-mocks.ts +54 -0
  554. package/src/test-utils/fixtures/api-keys.ts +52 -0
  555. package/src/test-utils/fixtures/index.ts +4 -0
  556. package/src/test-utils/fixtures/memberships.ts +80 -0
  557. package/src/test-utils/fixtures/organizations.ts +69 -0
  558. package/src/test-utils/fixtures/users.ts +79 -0
  559. package/src/test-utils/index.ts +11 -0
  560. package/src/test-utils/mocks/index.ts +2 -0
  561. package/src/test-utils/mocks/supabase.ts +142 -0
  562. package/src/test-utils/mocks/workos.ts +108 -0
  563. package/src/test-utils/rls/RLSTestContext.ts +586 -0
  564. package/src/test-utils/rls/index.ts +1 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Create Attribute - Attio API
3
+ *
4
+ * Creates a new custom attribute (field) on an Attio object.
5
+ * POST /v2/objects/{object}/attributes
6
+ */
7
+
8
+ import { ToolingError } from '../../../../../../types'
9
+ import type { ExecutionContext } from '../../../../../../../base/types'
10
+ import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
11
+ import type {
12
+ AttioCredentials,
13
+ CreateAttributeParams,
14
+ CreateAttributeResult,
15
+ AttioAttributeResponse,
16
+ AttributeConfig
17
+ } from '../utils/types'
18
+
19
+ /**
20
+ * Create a new attribute on an Attio object
21
+ *
22
+ * @param credentials - Attio API credentials (apiKey)
23
+ * @param params - Attribute creation parameters
24
+ * @param context - Execution context for logging
25
+ * @returns Created attribute ID, slug, and success status
26
+ * @throws ToolingError if attribute creation fails
27
+ *
28
+ * @example
29
+ * // Create a text attribute
30
+ * const attr = await createAttribute(
31
+ * { apiKey: 'xxx' },
32
+ * {
33
+ * objectSlug: 'people',
34
+ * title: 'Lead Source',
35
+ * apiSlug: 'lead_source',
36
+ * type: 'text'
37
+ * },
38
+ * context
39
+ * )
40
+ *
41
+ * @example
42
+ * // Create a select attribute with options
43
+ * const attr = await createAttribute(
44
+ * { apiKey: 'xxx' },
45
+ * {
46
+ * objectSlug: 'companies',
47
+ * title: 'Industry',
48
+ * apiSlug: 'industry',
49
+ * type: 'select',
50
+ * config: {
51
+ * options: [
52
+ * { title: 'Technology', isArchived: false },
53
+ * { title: 'Healthcare', isArchived: false },
54
+ * { title: 'Finance', isArchived: false }
55
+ * ]
56
+ * }
57
+ * },
58
+ * context
59
+ * )
60
+ */
61
+ export async function createAttribute(
62
+ credentials: AttioCredentials,
63
+ params: CreateAttributeParams,
64
+ context?: ExecutionContext
65
+ ): Promise<CreateAttributeResult> {
66
+ const { apiKey } = credentials
67
+ const { objectSlug, title, apiSlug, type, description, isRequired, isUnique, isMultiselect, config } = params
68
+
69
+ // Validate credentials
70
+ if (!apiKey) {
71
+ throw new ToolingError('credentials_invalid', 'Attio API credentials must include apiKey', {
72
+ integration: 'attio',
73
+ method: 'createAttribute'
74
+ })
75
+ }
76
+
77
+ // Validate required parameters
78
+ if (!objectSlug) {
79
+ throw new ToolingError('validation_error', 'objectSlug is required', {
80
+ integration: 'attio',
81
+ method: 'createAttribute',
82
+ params: { objectSlug }
83
+ })
84
+ }
85
+ if (!title) {
86
+ throw new ToolingError('validation_error', 'title is required', {
87
+ integration: 'attio',
88
+ method: 'createAttribute',
89
+ params: { title }
90
+ })
91
+ }
92
+ if (!apiSlug) {
93
+ throw new ToolingError('validation_error', 'apiSlug is required', {
94
+ integration: 'attio',
95
+ method: 'createAttribute',
96
+ params: { apiSlug }
97
+ })
98
+ }
99
+ if (!type) {
100
+ throw new ToolingError('validation_error', 'type is required', {
101
+ integration: 'attio',
102
+ method: 'createAttribute',
103
+ params: { type }
104
+ })
105
+ }
106
+
107
+ // Build URL
108
+ const url = `https://api.attio.com/v2/objects/${encodeURIComponent(objectSlug)}/attributes`
109
+
110
+ // Build request body with nested data structure
111
+ // Note: Attio API requires description (can be null) and config (empty object for simple types)
112
+ const requestBody = {
113
+ data: {
114
+ title,
115
+ description: description ?? null,
116
+ api_slug: apiSlug,
117
+ type,
118
+ is_required: isRequired ?? false,
119
+ is_unique: isUnique ?? false,
120
+ is_multiselect: isMultiselect ?? false,
121
+ config: config ? buildAttributeConfig(config) : {}
122
+ }
123
+ }
124
+
125
+ try {
126
+ // Execute with retry logic
127
+ const response = await withRetry(async () => {
128
+ const res = await fetch(url, {
129
+ method: 'POST',
130
+ headers: {
131
+ Authorization: `Bearer ${apiKey}`,
132
+ 'Content-Type': 'application/json',
133
+ Accept: 'application/json'
134
+ },
135
+ body: JSON.stringify(requestBody)
136
+ })
137
+
138
+ // Handle HTTP errors
139
+ if (!res.ok) {
140
+ throw await createHttpError(res, {
141
+ integration: 'attio',
142
+ method: 'createAttribute',
143
+ organizationId: context?.organizationId
144
+ })
145
+ }
146
+
147
+ return res
148
+ }, DEFAULT_RETRY_POLICY)
149
+
150
+ // Parse response
151
+ const result = (await response.json()) as AttioAttributeResponse
152
+
153
+ // Extract attribute ID from nested structure
154
+ const attributeId = result.data.id.attribute_id
155
+
156
+ // Log success
157
+ if (context?.logger) {
158
+ context.logger.info(
159
+ `[AttioAdapter] Attribute created: attributeId=${attributeId} objectSlug=${objectSlug} title=${title} type=${type} executionId=${context.executionId}`
160
+ )
161
+ }
162
+
163
+ // Return standardized result
164
+ return {
165
+ attributeId,
166
+ slug: result.data.api_slug,
167
+ success: true
168
+ }
169
+ } catch (error) {
170
+ // Re-throw ToolingError as-is
171
+ if (error instanceof ToolingError) {
172
+ throw error
173
+ }
174
+
175
+ // Wrap unknown errors
176
+ throw new ToolingError('api_error', `Failed to create Attio attribute: ${(error as Error).message}`, {
177
+ integration: 'attio',
178
+ method: 'createAttribute',
179
+ organizationId: context?.organizationId,
180
+ params: { objectSlug, title, type },
181
+ originalError: error
182
+ })
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Build attribute config for API request
188
+ * Transforms camelCase to snake_case for API compatibility
189
+ */
190
+ function buildAttributeConfig(config: AttributeConfig): Record<string, unknown> {
191
+ const result: Record<string, unknown> = {}
192
+
193
+ // Build select options
194
+ if (config.options) {
195
+ result.options = config.options.map((opt) => ({
196
+ ...(opt.id && { id: opt.id }),
197
+ title: opt.title,
198
+ is_archived: opt.isArchived ?? false
199
+ }))
200
+ }
201
+
202
+ // Build other config fields
203
+ if (config.targetObject) {
204
+ result.target_object = config.targetObject
205
+ }
206
+ if (config.currencyCode) {
207
+ result.currency_code = config.currencyCode
208
+ }
209
+ if (config.maxValue !== undefined) {
210
+ result.max_value = config.maxValue
211
+ }
212
+
213
+ return result
214
+ }
@@ -0,0 +1,152 @@
1
+ import { ToolingError } from '../../../../../../types'
2
+ import type { ExecutionContext } from '../../../../../../../base/types'
3
+ import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
4
+ import type { AttioCredentials, CreateNoteParams, CreateNoteResult, AttioNoteResponse } from '../utils/types'
5
+
6
+ /**
7
+ * Create a new note on an Attio record using native fetch API
8
+ *
9
+ * @param credentials - Attio API credentials (apiKey)
10
+ * @param params - Note creation parameters
11
+ * @param context - Execution context for logging
12
+ * @returns Created note ID and success status
13
+ * @throws ToolingError if note creation fails
14
+ *
15
+ * @example
16
+ * // Create a discovery call note on a person
17
+ * const note = await createNote(
18
+ * { apiKey: 'xxx' },
19
+ * {
20
+ * parentObject: 'people',
21
+ * parentRecordId: '891dcbfc-9141-415d-9b2a-2238a6cc012d',
22
+ * title: 'Discovery Call Notes - 2026-01-25',
23
+ * format: 'markdown',
24
+ * content: '## Summary\n\n- Key point 1\n- Key point 2'
25
+ * },
26
+ * context
27
+ * )
28
+ */
29
+ export async function createNote(
30
+ credentials: AttioCredentials,
31
+ params: CreateNoteParams,
32
+ context?: ExecutionContext
33
+ ): Promise<CreateNoteResult> {
34
+ const { apiKey } = credentials
35
+ const { parentObject, parentRecordId, title, format, content, createdAt } = params
36
+
37
+ // Validate required parameters
38
+ if (!apiKey) {
39
+ throw new ToolingError('credentials_invalid', 'Attio API credentials must include apiKey', {
40
+ integration: 'attio',
41
+ method: 'createNote'
42
+ })
43
+ }
44
+
45
+ if (!parentObject || !parentRecordId || !title || !format || !content) {
46
+ throw new ToolingError(
47
+ 'validation_error',
48
+ 'parentObject, parentRecordId, title, format, and content are required',
49
+ {
50
+ integration: 'attio',
51
+ method: 'createNote',
52
+ params: { parentObject, parentRecordId, title, format }
53
+ }
54
+ )
55
+ }
56
+
57
+ // Validate format
58
+ if (format !== 'plaintext' && format !== 'markdown') {
59
+ throw new ToolingError('validation_error', 'format must be "plaintext" or "markdown"', {
60
+ integration: 'attio',
61
+ method: 'createNote',
62
+ params: { format }
63
+ })
64
+ }
65
+
66
+ // Build URL
67
+ const url = 'https://api.attio.com/v2/notes'
68
+
69
+ // Build request body
70
+ const requestBody: {
71
+ data: {
72
+ parent_object: string
73
+ parent_record_id: string
74
+ title: string
75
+ format: string
76
+ content: string
77
+ created_at?: string
78
+ }
79
+ } = {
80
+ data: {
81
+ parent_object: parentObject,
82
+ parent_record_id: parentRecordId,
83
+ title,
84
+ format,
85
+ content
86
+ }
87
+ }
88
+
89
+ // Add optional createdAt
90
+ if (createdAt) {
91
+ requestBody.data.created_at = createdAt
92
+ }
93
+
94
+ try {
95
+ // Execute with retry logic
96
+ const response = await withRetry(async () => {
97
+ const res = await fetch(url, {
98
+ method: 'POST',
99
+ headers: {
100
+ Authorization: `Bearer ${apiKey}`,
101
+ 'Content-Type': 'application/json',
102
+ Accept: 'application/json'
103
+ },
104
+ body: JSON.stringify(requestBody)
105
+ })
106
+
107
+ // Handle HTTP errors
108
+ if (!res.ok) {
109
+ throw await createHttpError(res, {
110
+ integration: 'attio',
111
+ method: 'createNote',
112
+ organizationId: context?.organizationId
113
+ })
114
+ }
115
+
116
+ return res
117
+ }, DEFAULT_RETRY_POLICY)
118
+
119
+ // Parse response
120
+ const result = (await response.json()) as AttioNoteResponse
121
+
122
+ // Extract note ID from nested structure
123
+ const noteId = result.data.id.note_id
124
+
125
+ // Log success
126
+ if (context?.logger) {
127
+ context.logger.info(
128
+ `[AttioAdapter] Note created: noteId=${noteId} parentObject=${parentObject} parentRecordId=${parentRecordId} executionId=${context.executionId}`
129
+ )
130
+ }
131
+
132
+ // Return standardized result
133
+ return {
134
+ noteId,
135
+ success: true
136
+ }
137
+ } catch (error) {
138
+ // Re-throw ToolingError as-is
139
+ if (error instanceof ToolingError) {
140
+ throw error
141
+ }
142
+
143
+ // Wrap unknown errors
144
+ throw new ToolingError('api_error', `Failed to create Attio note: ${(error as Error).message}`, {
145
+ integration: 'attio',
146
+ method: 'createNote',
147
+ organizationId: context?.organizationId,
148
+ params: { parentObject, parentRecordId, title },
149
+ originalError: error
150
+ })
151
+ }
152
+ }
@@ -0,0 +1,141 @@
1
+ import { ToolingError } from '../../../../../../types'
2
+ import type { ExecutionContext } from '../../../../../../../base/types'
3
+ import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
4
+ import type { AttioCredentials, CreateRecordParams, CreateRecordResult, AttioRecordResponse } from '../utils/types'
5
+
6
+ /**
7
+ * Create a new record in an Attio object using native fetch API
8
+ *
9
+ * @param credentials - Attio API credentials (apiKey)
10
+ * @param params - Record creation parameters (object type and field values)
11
+ * @param context - Execution context for logging
12
+ * @returns Created record ID and success status
13
+ * @throws ToolingError if record creation fails
14
+ *
15
+ * @example
16
+ * // Create a person record
17
+ * const person = await createRecord(
18
+ * { apiKey: 'xxx' },
19
+ * {
20
+ * object: 'people',
21
+ * values: {
22
+ * name: {
23
+ * first_name: 'John',
24
+ * last_name: 'Doe',
25
+ * full_name: 'John Doe'
26
+ * },
27
+ * email_addresses: [
28
+ * { email_address: 'john@example.com' }
29
+ * ]
30
+ * }
31
+ * },
32
+ * context
33
+ * )
34
+ *
35
+ * @example
36
+ * // Create a company record
37
+ * const company = await createRecord(
38
+ * { apiKey: 'xxx' },
39
+ * {
40
+ * object: 'companies',
41
+ * values: {
42
+ * name: 'Acme Corp',
43
+ * domains: [{ domain: 'acme.com' }]
44
+ * }
45
+ * },
46
+ * context
47
+ * )
48
+ */
49
+ export async function createRecord(
50
+ credentials: AttioCredentials,
51
+ params: CreateRecordParams,
52
+ context?: ExecutionContext
53
+ ): Promise<CreateRecordResult> {
54
+ const { apiKey } = credentials
55
+ const { object, values } = params
56
+
57
+ // Validate required parameters
58
+ if (!apiKey) {
59
+ throw new ToolingError('credentials_invalid', 'Attio API credentials must include apiKey', {
60
+ integration: 'attio',
61
+ method: 'createRecord'
62
+ })
63
+ }
64
+
65
+ if (!object || !values) {
66
+ throw new ToolingError('validation_error', 'Object type and values are required', {
67
+ integration: 'attio',
68
+ method: 'createRecord',
69
+ params: { object, values }
70
+ })
71
+ }
72
+
73
+ // Build URL
74
+ const url = `https://api.attio.com/v2/objects/${encodeURIComponent(object)}/records`
75
+
76
+ // Build request body with nested data.values structure (CRITICAL!)
77
+ const requestBody = {
78
+ data: {
79
+ values
80
+ }
81
+ }
82
+
83
+ try {
84
+ // Execute with retry logic
85
+ const response = await withRetry(async () => {
86
+ const res = await fetch(url, {
87
+ method: 'POST',
88
+ headers: {
89
+ Authorization: `Bearer ${apiKey}`,
90
+ 'Content-Type': 'application/json',
91
+ Accept: 'application/json'
92
+ },
93
+ body: JSON.stringify(requestBody)
94
+ })
95
+
96
+ // Handle HTTP errors
97
+ if (!res.ok) {
98
+ throw await createHttpError(res, {
99
+ integration: 'attio',
100
+ method: 'createRecord',
101
+ organizationId: context?.organizationId
102
+ })
103
+ }
104
+
105
+ return res
106
+ }, DEFAULT_RETRY_POLICY)
107
+
108
+ // Parse response
109
+ const result = (await response.json()) as AttioRecordResponse
110
+
111
+ // Extract record ID from nested structure
112
+ const recordId = result.data.id.record_id
113
+
114
+ // Log success
115
+ if (context?.logger) {
116
+ context.logger.info(
117
+ `[AttioAdapter] Record created: recordId=${recordId} object=${object} executionId=${context.executionId}`
118
+ )
119
+ }
120
+
121
+ // Return standardized result
122
+ return {
123
+ recordId,
124
+ success: true
125
+ }
126
+ } catch (error) {
127
+ // Re-throw ToolingError as-is
128
+ if (error instanceof ToolingError) {
129
+ throw error
130
+ }
131
+
132
+ // Wrap unknown errors
133
+ throw new ToolingError('api_error', `Failed to create Attio record: ${(error as Error).message}`, {
134
+ integration: 'attio',
135
+ method: 'createRecord',
136
+ organizationId: context?.organizationId,
137
+ params: { object },
138
+ originalError: error
139
+ })
140
+ }
141
+ }
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Attio Delete Note - Native Fetch Implementation
3
+ *
4
+ * Deletes a single note by ID using native Node.js fetch API.
5
+ *
6
+ * API Endpoint: DELETE /v2/notes/{noteId}
7
+ * Documentation: https://docs.attio.com/rest-api/endpoint-reference/notes/delete-a-note
8
+ */
9
+
10
+ import { ToolingError } from '../../../../../../types'
11
+ import type { ExecutionContext } from '../../../../../../../base/types'
12
+ import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
13
+ import type { AttioCredentials, DeleteNoteParams, DeleteNoteResult } from '../utils/types'
14
+
15
+ /**
16
+ * Delete a note by ID from Attio
17
+ *
18
+ * @param credentials - Attio API credentials (apiKey)
19
+ * @param params - Note ID to delete
20
+ * @param context - Execution context for logging
21
+ * @returns Deleted note ID and success status
22
+ * @throws ToolingError if deletion fails
23
+ */
24
+ export async function deleteNote(
25
+ credentials: AttioCredentials,
26
+ params: DeleteNoteParams,
27
+ context?: ExecutionContext
28
+ ): Promise<DeleteNoteResult> {
29
+ const { apiKey } = credentials
30
+ const { noteId } = params
31
+
32
+ if (!apiKey) {
33
+ throw new ToolingError('credentials_invalid', 'Attio API credentials must include apiKey', {
34
+ integration: 'attio',
35
+ method: 'deleteNote'
36
+ })
37
+ }
38
+
39
+ if (!noteId) {
40
+ throw new ToolingError('validation_error', 'noteId is required', {
41
+ integration: 'attio',
42
+ method: 'deleteNote',
43
+ params: { noteId }
44
+ })
45
+ }
46
+
47
+ const url = `https://api.attio.com/v2/notes/${encodeURIComponent(noteId)}`
48
+
49
+ try {
50
+ await withRetry(async () => {
51
+ const response = await fetch(url, {
52
+ method: 'DELETE',
53
+ headers: {
54
+ Authorization: `Bearer ${apiKey}`,
55
+ Accept: 'application/json'
56
+ }
57
+ })
58
+
59
+ if (!response.ok) {
60
+ throw await createHttpError(response, {
61
+ integration: 'attio',
62
+ method: 'deleteNote',
63
+ organizationId: context?.organizationId
64
+ })
65
+ }
66
+
67
+ return await response.json()
68
+ }, DEFAULT_RETRY_POLICY)
69
+
70
+ if (context?.logger) {
71
+ context.logger.info(`[AttioAdapter] Note deleted: noteId=${noteId} executionId=${context.executionId}`)
72
+ }
73
+
74
+ return { noteId, success: true }
75
+ } catch (error) {
76
+ if (error instanceof ToolingError) throw error
77
+
78
+ throw new ToolingError('api_error', `Failed to delete Attio note: ${(error as Error).message}`, {
79
+ integration: 'attio',
80
+ method: 'deleteNote',
81
+ organizationId: context?.organizationId,
82
+ params: { noteId },
83
+ originalError: error
84
+ })
85
+ }
86
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Attio Delete Record - Native Fetch Implementation
3
+ *
4
+ * Deletes a single record by ID from an Attio object using native Node.js fetch API.
5
+ * Supports all object types: people, companies, deals, and custom objects.
6
+ *
7
+ * API Endpoint: DELETE /v2/objects/{object}/records/{recordId}
8
+ * Documentation: https://docs.attio.com/rest-api/endpoint-reference/records/delete-a-record
9
+ */
10
+
11
+ import { ToolingError } from '../../../../../../types'
12
+ import { withRetry, createHttpError, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
13
+ import type { ExecutionContext } from '../../../../../../../base/types'
14
+ import type { AttioCredentials, DeleteRecordParams, DeleteRecordResult } from '../utils/types'
15
+
16
+ /**
17
+ * Delete a single record by ID from an Attio object
18
+ *
19
+ * Uses native Node.js fetch API with retry logic for resilience.
20
+ *
21
+ * @param credentials - Attio API credentials (Bearer token)
22
+ * @param params - Object type and record ID
23
+ * @param context - Execution context for logging
24
+ * @returns Success status with deleted record ID
25
+ * @throws ToolingError on API errors
26
+ */
27
+ export async function deleteRecord(
28
+ credentials: AttioCredentials,
29
+ params: DeleteRecordParams,
30
+ context?: ExecutionContext
31
+ ): Promise<DeleteRecordResult> {
32
+ const { object, recordId } = params
33
+ const { apiKey } = credentials
34
+
35
+ // Validate credentials
36
+ if (!apiKey) {
37
+ throw new ToolingError('credentials_invalid', 'Missing Attio API key', {
38
+ integration: 'attio',
39
+ method: 'deleteRecord'
40
+ })
41
+ }
42
+
43
+ // Validate parameters
44
+ if (!object || !recordId) {
45
+ throw new ToolingError('validation_error', 'Missing required parameters: object and recordId', {
46
+ integration: 'attio',
47
+ method: 'deleteRecord',
48
+ params: { object, recordId }
49
+ })
50
+ }
51
+
52
+ // Build API URL
53
+ const url = `https://api.attio.com/v2/objects/${object}/records/${recordId}`
54
+
55
+ try {
56
+ // Execute with retry logic
57
+ await withRetry(async () => {
58
+ const response = await fetch(url, {
59
+ method: 'DELETE',
60
+ headers: {
61
+ Authorization: `Bearer ${apiKey}`,
62
+ Accept: 'application/json'
63
+ }
64
+ })
65
+
66
+ // Handle HTTP errors
67
+ if (!response.ok) {
68
+ throw await createHttpError(response, {
69
+ integration: 'attio',
70
+ method: 'deleteRecord',
71
+ organizationId: context?.organizationId
72
+ })
73
+ }
74
+
75
+ // Successful deletion returns empty object {}
76
+ return await response.json()
77
+ }, DEFAULT_RETRY_POLICY)
78
+
79
+ // Log success
80
+ if (context?.logger) {
81
+ context.logger.info(
82
+ `[AttioAdapter] Record deleted: object=${object} recordId=${recordId} executionId=${context.executionId}`
83
+ )
84
+ }
85
+
86
+ // Return success result
87
+ return {
88
+ recordId,
89
+ success: true
90
+ }
91
+ } catch (error) {
92
+ // Re-throw ToolingError as-is
93
+ if (error instanceof ToolingError) {
94
+ throw error
95
+ }
96
+
97
+ // Wrap unknown errors
98
+ throw new ToolingError('api_error', `Failed to delete Attio record: ${(error as Error).message}`, {
99
+ integration: 'attio',
100
+ method: 'deleteRecord',
101
+ organizationId: context?.organizationId,
102
+ params: { object, recordId }
103
+ })
104
+ }
105
+ }