@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,59 @@
1
+ import { ToolingError } from '../../../../../../types'
2
+ import { withRetry, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
3
+ import type { ExecutionContext } from '../../../../../../../base/types'
4
+ import type { MillionVerifierCheckCreditsResult } from '../../../../../types/millionverifier'
5
+
6
+ interface MillionVerifierCredentials {
7
+ apiKey: string
8
+ }
9
+
10
+ const MV_CREDITS_URL = 'https://api.millionverifier.com/api/v3/credits'
11
+
12
+ /**
13
+ * Check remaining MillionVerifier credits
14
+ *
15
+ * @param credentials - MillionVerifier API key
16
+ * @param context - Execution context for logging
17
+ * @returns Credit balance breakdown
18
+ */
19
+ export async function checkCredits(
20
+ credentials: MillionVerifierCredentials,
21
+ context?: ExecutionContext
22
+ ): Promise<MillionVerifierCheckCreditsResult> {
23
+ const { apiKey } = credentials
24
+
25
+ if (context?.logger) {
26
+ context.logger.info(
27
+ `[MillionVerifierAdapter] checkCredits: organizationId=${context.organizationId} executionId=${context.executionId}`
28
+ )
29
+ }
30
+
31
+ const url = new URL(MV_CREDITS_URL)
32
+ url.searchParams.set('api', apiKey)
33
+
34
+ const response = await withRetry(async () => {
35
+ const res = await fetch(url.toString(), {
36
+ method: 'GET',
37
+ signal: AbortSignal.timeout(30_000)
38
+ })
39
+
40
+ if (!res.ok) {
41
+ throw new ToolingError('api_error', `MillionVerifier credits API returned HTTP ${res.status}`, {
42
+ integration: 'millionverifier',
43
+ method: 'checkCredits',
44
+ organizationId: context?.organizationId
45
+ })
46
+ }
47
+
48
+ return res.json() as Promise<Record<string, unknown>>
49
+ }, DEFAULT_RETRY_POLICY)
50
+
51
+ const data = response as Record<string, unknown>
52
+
53
+ return {
54
+ credits: (data.credits as number) ?? 0,
55
+ bulkCredits: (data.bulk_credits as number) ?? 0,
56
+ renewingCredits: (data.renewing_credits as number) ?? 0,
57
+ plan: (data.plan as number) ?? 0
58
+ }
59
+ }
@@ -0,0 +1,102 @@
1
+ import { ToolingError } from '../../../../../../types'
2
+ import { withRetry, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
3
+ import type { ExecutionContext } from '../../../../../../../base/types'
4
+ import type { MillionVerifierVerifyEmailResult } from '../../../../../types/millionverifier'
5
+
6
+ interface MillionVerifierCredentials {
7
+ apiKey: string
8
+ }
9
+
10
+ export interface VerifyEmailParams {
11
+ email: string
12
+ }
13
+
14
+ const MV_API_BASE = 'https://api.millionverifier.com/api/v3/'
15
+
16
+ /**
17
+ * Verify an email address via MillionVerifier
18
+ *
19
+ * Calls the MillionVerifier single-verification endpoint. The API always returns
20
+ * HTTP 200 -- errors are signalled by result === 'error' and a non-empty error field.
21
+ *
22
+ * Credits are deducted for ok/invalid/disposable results; catch_all and unknown are free.
23
+ *
24
+ * @param credentials - MillionVerifier API key
25
+ * @param params - Email address to verify
26
+ * @param context - Execution context for logging
27
+ * @returns Normalized verification result in camelCase
28
+ */
29
+ export async function verifyEmail(
30
+ credentials: MillionVerifierCredentials,
31
+ params: VerifyEmailParams,
32
+ context?: ExecutionContext
33
+ ): Promise<MillionVerifierVerifyEmailResult> {
34
+ const { apiKey } = credentials
35
+ const { email } = params
36
+
37
+ if (!email) {
38
+ throw new ToolingError('validation_error', 'Missing required parameter: email', {
39
+ integration: 'millionverifier',
40
+ method: 'verifyEmail'
41
+ })
42
+ }
43
+
44
+ if (context?.logger) {
45
+ context.logger.info(
46
+ `[MillionVerifierAdapter] verifyEmail: email=${email} organizationId=${context.organizationId} executionId=${context.executionId}`
47
+ )
48
+ }
49
+
50
+ const url = new URL(MV_API_BASE)
51
+ url.searchParams.set('api', apiKey)
52
+ url.searchParams.set('email', email)
53
+
54
+ const response = await withRetry(async () => {
55
+ const res = await fetch(url.toString(), {
56
+ method: 'GET',
57
+ signal: AbortSignal.timeout(60_000)
58
+ })
59
+
60
+ if (!res.ok) {
61
+ throw new ToolingError('api_error', `MillionVerifier API returned HTTP ${res.status}`, {
62
+ integration: 'millionverifier',
63
+ method: 'verifyEmail',
64
+ organizationId: context?.organizationId
65
+ })
66
+ }
67
+
68
+ return res.json() as Promise<Record<string, unknown>>
69
+ }, DEFAULT_RETRY_POLICY)
70
+
71
+ const data = response as Record<string, unknown>
72
+
73
+ // The API signals errors via result === 'error' with a non-empty error field
74
+ if (data.result === 'error' && data.error) {
75
+ throw new ToolingError('api_error', `MillionVerifier error: ${data.error as string}`, {
76
+ integration: 'millionverifier',
77
+ method: 'verifyEmail',
78
+ organizationId: context?.organizationId
79
+ })
80
+ }
81
+
82
+ if (context?.logger) {
83
+ context.logger.info(
84
+ `[MillionVerifierAdapter] verifyEmail complete: email=${email} result=${data.result ?? ''} quality=${data.quality ?? ''} organizationId=${context.organizationId}`
85
+ )
86
+ }
87
+
88
+ return {
89
+ email: (data.email as string) ?? email,
90
+ quality: (data.quality as MillionVerifierVerifyEmailResult['quality']) ?? '',
91
+ result: (data.result as MillionVerifierVerifyEmailResult['result']) ?? 'unknown',
92
+ resultCode: (data.resultcode as MillionVerifierVerifyEmailResult['resultCode']) ?? 3,
93
+ subresult: (data.subresult as string) ?? '',
94
+ free: (data.free as boolean) ?? false,
95
+ role: (data.role as boolean) ?? false,
96
+ didYouMean: (data.didyoumean as string) ?? '',
97
+ credits: (data.credits as number) ?? 0,
98
+ executionTime: (data.executiontime as number) ?? 0,
99
+ error: (data.error as string) ?? '',
100
+ liveMode: (data.livemode as boolean) ?? false
101
+ }
102
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * MillionVerifier Integration - Barrel Export
3
+ *
4
+ * Exports MillionVerifier adapter and tool factory functions.
5
+ */
6
+
7
+ // ============================================================================
8
+ // MILLIONVERIFIER ADAPTER
9
+ // ============================================================================
10
+
11
+ export { MillionVerifierAdapter } from './millionverifier-adapter'
12
+
13
+ // ============================================================================
14
+ // MILLIONVERIFIER TOOLS
15
+ // ============================================================================
16
+
17
+ export { createMillionVerifierVerifyEmailTool, createMillionVerifierCheckCreditsTool } from './millionverifier-tools'
@@ -0,0 +1,80 @@
1
+ import type { BaseIntegrationAdapter } from '../../../base-integration-adapter'
2
+ import { ToolingError } from '../../../../types'
3
+ import type { ExecutionContext } from '../../../../../base/types'
4
+ import { verifyEmail } from './fetch/verify-email/index'
5
+ import type { VerifyEmailParams } from './fetch/verify-email/index'
6
+ import { checkCredits } from './fetch/check-credits/index'
7
+
8
+ /**
9
+ * MillionVerifier credentials format
10
+ * Stored in credentials table, encrypted
11
+ */
12
+ interface MillionVerifierCredentials {
13
+ apiKey: string
14
+ }
15
+
16
+ /**
17
+ * MillionVerifier integration adapter
18
+ *
19
+ * Provides access to the MillionVerifier email verification API for validating
20
+ * email deliverability before campaigns. Uses API key as a query parameter.
21
+ *
22
+ * Credits are deducted for ok/invalid/disposable results; catch_all and unknown are free.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const adapter = new MillionVerifierAdapter()
27
+ * const result = await adapter.call(
28
+ * 'verifyEmail',
29
+ * { email: 'john@example.com' },
30
+ * { apiKey: 'your-api-key' },
31
+ * context
32
+ * )
33
+ * ```
34
+ */
35
+ export class MillionVerifierAdapter implements BaseIntegrationAdapter {
36
+ readonly name = 'millionverifier'
37
+
38
+ /**
39
+ * Call MillionVerifier API method
40
+ */
41
+ async call(
42
+ method: string,
43
+ params: unknown,
44
+ credentials: Record<string, unknown>,
45
+ context?: ExecutionContext
46
+ ): Promise<unknown> {
47
+ // Validate credentials first
48
+ if (!this.validateCredentials(credentials)) {
49
+ throw new ToolingError('credentials_invalid', 'Invalid MillionVerifier credentials', {
50
+ integration: this.name,
51
+ organizationId: context?.organizationId
52
+ })
53
+ }
54
+
55
+ // Safe to cast after validation confirms apiKey exists and is valid
56
+ const creds = credentials as unknown as MillionVerifierCredentials
57
+
58
+ // Route to method handler - delegate to fetch functions
59
+ switch (method) {
60
+ case 'verifyEmail':
61
+ return verifyEmail(creds, params as VerifyEmailParams, context)
62
+ case 'checkCredits':
63
+ return checkCredits(creds, context)
64
+ default:
65
+ throw new ToolingError('method_not_found', `Unknown MillionVerifier method: ${method}`, {
66
+ integration: this.name,
67
+ method,
68
+ organizationId: context?.organizationId
69
+ })
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Validate MillionVerifier credentials
75
+ */
76
+ validateCredentials(credentials: Record<string, unknown>): boolean {
77
+ const creds = credentials as unknown as MillionVerifierCredentials
78
+ return !!creds.apiKey && typeof creds.apiKey === 'string' && creds.apiKey.length > 0
79
+ }
80
+ }
@@ -0,0 +1,102 @@
1
+ import { z } from 'zod'
2
+ import type { Tool } from '../../../../types'
3
+ import { createIntegrationTool } from '../../../tool'
4
+
5
+ /**
6
+ * Create a tool that verifies email addresses via MillionVerifier
7
+ *
8
+ * @param credentialName - Name of the MillionVerifier credential to use
9
+ * @returns Tool instance
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const tool = createMillionVerifierVerifyEmailTool('elevasis-millionverifier')
14
+ * const result = await tool.execute({
15
+ * email: 'john@example.com'
16
+ * }, context)
17
+ * // result.result: 'ok' | 'catch_all' | 'unknown' | 'error' | 'disposable' | 'invalid'
18
+ * // result.quality: 'good' | 'bad' | 'risky' | ''
19
+ * ```
20
+ */
21
+ export function createMillionVerifierVerifyEmailTool(credentialName: string): Tool {
22
+ return createIntegrationTool({
23
+ name: 'millionverifier_verify_email',
24
+ description: `Verify email address deliverability using MillionVerifier.
25
+
26
+ Use this tool to validate if an email address is real and can receive emails before
27
+ adding it to a campaign. MillionVerifier is highly accurate and fast (160 req/s).
28
+
29
+ Result codes:
30
+ - ok (1): Email is valid and deliverable
31
+ - catch_all (2): Domain accepts all email (cannot confirm individual mailbox) - FREE
32
+ - unknown (3): Result could not be determined - FREE
33
+ - error (4): Verification error
34
+ - disposable (5): Disposable/temporary email address
35
+ - invalid (6): Email address is invalid
36
+
37
+ Quality signals:
38
+ - good: Safe to send
39
+ - risky: May bounce or flag spam filter
40
+ - bad: Do not send
41
+
42
+ Credits are only deducted for ok, invalid, and disposable results.
43
+
44
+ Returns full verification details including free/role detection and suggested correction.`,
45
+ inputSchema: z.object({
46
+ email: z.string().email().describe('Email address to verify')
47
+ }),
48
+ outputSchema: z.object({
49
+ email: z.string().describe('Verified email address'),
50
+ quality: z.enum(['', 'good', 'bad', 'risky']).describe('Quality signal for sending decision'),
51
+ result: z.enum(['ok', 'catch_all', 'unknown', 'error', 'disposable', 'invalid']).describe('Verification result'),
52
+ resultCode: z
53
+ .number()
54
+ .describe('Numeric result code (1=ok, 2=catch_all, 3=unknown, 4=error, 5=disposable, 6=invalid)'),
55
+ subresult: z.string().describe('Detailed sub-result (e.g., ok, no_mailbox, dns_no_mx)'),
56
+ free: z.boolean().describe('Whether this is a free email provider (Gmail, Yahoo, etc.)'),
57
+ role: z.boolean().describe('Whether this is a role-based address (info@, support@, etc.)'),
58
+ didYouMean: z.string().describe('Suggested correction if email looks like a typo (empty if none)'),
59
+ credits: z.number().describe('Remaining credits after this verification'),
60
+ executionTime: z.number().describe('Time taken to verify in milliseconds'),
61
+ error: z.string().describe('Error message when result is error (empty otherwise)'),
62
+ liveMode: z.boolean().describe('Whether the verification was performed in live mode')
63
+ }),
64
+ integration: 'millionverifier' as const,
65
+ method: 'verifyEmail' as const,
66
+ credentialName
67
+ })
68
+ }
69
+
70
+ /**
71
+ * Create a tool that checks remaining MillionVerifier credits
72
+ *
73
+ * @param credentialName - Name of the MillionVerifier credential to use
74
+ * @returns Tool instance
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const tool = createMillionVerifierCheckCreditsTool('elevasis-millionverifier')
79
+ * const result = await tool.execute({}, context)
80
+ * // result.credits: 5000
81
+ * ```
82
+ */
83
+ export function createMillionVerifierCheckCreditsTool(credentialName: string): Tool {
84
+ return createIntegrationTool({
85
+ name: 'millionverifier_check_credits',
86
+ description: `Check remaining MillionVerifier verification credits.
87
+
88
+ Use this tool to monitor credit balance before running large verification batches.
89
+
90
+ Returns current credits, bulk credits, renewing credits, and plan tier.`,
91
+ inputSchema: z.object({}),
92
+ outputSchema: z.object({
93
+ credits: z.number().describe('Remaining single-verification credits'),
94
+ bulkCredits: z.number().describe('Remaining bulk verification credits'),
95
+ renewingCredits: z.number().describe('Credits that will renew on next billing cycle'),
96
+ plan: z.number().describe('Current plan tier')
97
+ }),
98
+ integration: 'millionverifier' as const,
99
+ method: 'checkCredits' as const,
100
+ credentialName
101
+ })
102
+ }
@@ -0,0 +1,102 @@
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 { ResendCredentials, GetEmailParams, GetEmailResult, ResendGetEmailResponse } from '../utils/types'
5
+
6
+ /**
7
+ * Get email status from Resend API
8
+ *
9
+ * @param credentials - Resend API credentials (apiKey)
10
+ * @param params - Email ID to retrieve
11
+ * @param context - Execution context for logging
12
+ * @returns Email details including delivery status
13
+ * @throws ToolingError if retrieval fails
14
+ *
15
+ * @example
16
+ * const result = await getEmail(
17
+ * { apiKey: 're_xxx' },
18
+ * { emailId: '49a3999c-0ce1-4ea6-ab68-afcd6dc2e794' },
19
+ * context
20
+ * )
21
+ * // result.lastEvent: 'sent', 'delivered', 'bounced', 'complained', 'failed'
22
+ */
23
+ export async function getEmail(
24
+ credentials: ResendCredentials,
25
+ params: GetEmailParams,
26
+ context?: ExecutionContext
27
+ ): Promise<GetEmailResult> {
28
+ const { apiKey } = credentials
29
+ const { emailId } = params
30
+
31
+ // Validate required parameters
32
+ if (!apiKey) {
33
+ throw new ToolingError('credentials_invalid', 'Resend API credentials must include apiKey', {
34
+ integration: 'resend',
35
+ method: 'getEmail'
36
+ })
37
+ }
38
+
39
+ if (!emailId) {
40
+ throw new ToolingError('validation_error', 'Email ID is required', { integration: 'resend', method: 'getEmail' })
41
+ }
42
+
43
+ // Build URL
44
+ const url = `https://api.resend.com/emails/${encodeURIComponent(emailId)}`
45
+
46
+ try {
47
+ // Execute with retry logic
48
+ const response = await withRetry(async () => {
49
+ const res = await fetch(url, {
50
+ method: 'GET',
51
+ headers: {
52
+ Authorization: `Bearer ${apiKey}`
53
+ }
54
+ })
55
+
56
+ // Handle HTTP errors
57
+ if (!res.ok) {
58
+ throw await createHttpError(res, {
59
+ integration: 'resend',
60
+ method: 'getEmail',
61
+ organizationId: context?.organizationId
62
+ })
63
+ }
64
+
65
+ return res
66
+ }, DEFAULT_RETRY_POLICY)
67
+
68
+ // Parse response
69
+ const result = (await response.json()) as ResendGetEmailResponse
70
+
71
+ // Log success
72
+ if (context?.logger) {
73
+ context.logger.info(
74
+ `[ResendAdapter] Email retrieved: organizationId=${context.organizationId} executionId=${context.executionId} emailId=${result.id} lastEvent=${result.last_event}`
75
+ )
76
+ }
77
+
78
+ // Return standardized result (camelCase)
79
+ return {
80
+ id: result.id,
81
+ to: result.to,
82
+ from: result.from,
83
+ subject: result.subject,
84
+ lastEvent: result.last_event,
85
+ createdAt: result.created_at
86
+ }
87
+ } catch (error) {
88
+ // Re-throw ToolingError as-is
89
+ if (error instanceof ToolingError) {
90
+ throw error
91
+ }
92
+
93
+ // Wrap unknown errors
94
+ throw new ToolingError('api_error', `Failed to get email from Resend: ${(error as Error).message}`, {
95
+ integration: 'resend',
96
+ method: 'getEmail',
97
+ organizationId: context?.organizationId,
98
+ emailId,
99
+ originalError: error
100
+ })
101
+ }
102
+ }
@@ -0,0 +1,134 @@
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 { ResendCredentials, SendEmailParams, SendEmailResult, ResendSendEmailResponse } from '../utils/types'
5
+
6
+ /**
7
+ * Send an email using Resend API
8
+ *
9
+ * @param credentials - Resend API credentials (apiKey)
10
+ * @param params - Email parameters (from, to, subject, html/text, etc.)
11
+ * @param context - Execution context for logging
12
+ * @returns Email ID and success status
13
+ * @throws ToolingError if email sending fails
14
+ *
15
+ * @example
16
+ * // Send a simple email
17
+ * const result = await sendEmail(
18
+ * { apiKey: 're_xxx' },
19
+ * {
20
+ * from: 'Alex <alexl@elevasis.io>',
21
+ * to: 'john@example.com',
22
+ * subject: 'Discovery Call Reminder',
23
+ * html: '<p>Your call is tomorrow...</p>',
24
+ * headers: {
25
+ * 'List-Unsubscribe': '<https://elevasis.io/api/unsubscribe?email=...>',
26
+ * 'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click'
27
+ * }
28
+ * },
29
+ * context
30
+ * )
31
+ */
32
+ export async function sendEmail(
33
+ credentials: ResendCredentials,
34
+ params: SendEmailParams,
35
+ context?: ExecutionContext
36
+ ): Promise<SendEmailResult> {
37
+ const { apiKey } = credentials
38
+ const { from, to, subject, html, text, replyTo, cc, bcc, headers, tags } = params
39
+
40
+ // Validate required parameters
41
+ if (!apiKey) {
42
+ throw new ToolingError('credentials_invalid', 'Resend API credentials must include apiKey', {
43
+ integration: 'resend',
44
+ method: 'sendEmail'
45
+ })
46
+ }
47
+
48
+ if (!from || !to || !subject) {
49
+ throw new ToolingError('validation_error', 'From, to, and subject are required', {
50
+ integration: 'resend',
51
+ method: 'sendEmail',
52
+ params: { from, to, subject }
53
+ })
54
+ }
55
+
56
+ if (!html && !text) {
57
+ throw new ToolingError('validation_error', 'Either html or text content is required', {
58
+ integration: 'resend',
59
+ method: 'sendEmail'
60
+ })
61
+ }
62
+
63
+ // Build URL
64
+ const url = 'https://api.resend.com/emails'
65
+
66
+ // Build request body
67
+ const requestBody: Record<string, unknown> = {
68
+ from,
69
+ to: Array.isArray(to) ? to : [to],
70
+ subject
71
+ }
72
+
73
+ if (html) requestBody.html = html
74
+ if (text) requestBody.text = text
75
+ if (replyTo) requestBody.reply_to = replyTo
76
+ if (cc) requestBody.cc = Array.isArray(cc) ? cc : [cc]
77
+ if (bcc) requestBody.bcc = Array.isArray(bcc) ? bcc : [bcc]
78
+ if (headers) requestBody.headers = headers
79
+ if (tags) requestBody.tags = tags
80
+
81
+ try {
82
+ // Execute with retry logic
83
+ const response = await withRetry(async () => {
84
+ const res = await fetch(url, {
85
+ method: 'POST',
86
+ headers: {
87
+ Authorization: `Bearer ${apiKey}`,
88
+ 'Content-Type': 'application/json'
89
+ },
90
+ body: JSON.stringify(requestBody)
91
+ })
92
+
93
+ // Handle HTTP errors
94
+ if (!res.ok) {
95
+ throw await createHttpError(res, {
96
+ integration: 'resend',
97
+ method: 'sendEmail',
98
+ organizationId: context?.organizationId
99
+ })
100
+ }
101
+
102
+ return res
103
+ }, DEFAULT_RETRY_POLICY)
104
+
105
+ // Parse response
106
+ const result = (await response.json()) as ResendSendEmailResponse
107
+
108
+ // Log success
109
+ if (context?.logger) {
110
+ context.logger.info(
111
+ `[ResendAdapter] Email sent: organizationId=${context.organizationId} executionId=${context.executionId} emailId=${result.id} to=${Array.isArray(to) ? to.join(',') : to}`
112
+ )
113
+ }
114
+
115
+ // Return standardized result
116
+ return {
117
+ id: result.id,
118
+ success: true
119
+ }
120
+ } catch (error) {
121
+ // Re-throw ToolingError as-is
122
+ if (error instanceof ToolingError) {
123
+ throw error
124
+ }
125
+
126
+ // Wrap unknown errors
127
+ throw new ToolingError('api_error', `Failed to send email via Resend: ${(error as Error).message}`, {
128
+ integration: 'resend',
129
+ method: 'sendEmail',
130
+ organizationId: context?.organizationId,
131
+ originalError: error
132
+ })
133
+ }
134
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Resend API Types
3
+ *
4
+ * Type definitions for Resend email API operations.
5
+ */
6
+
7
+ /**
8
+ * Resend credentials format
9
+ * Stored in credentials table, encrypted
10
+ */
11
+ export interface ResendCredentials {
12
+ apiKey: string // API key (re_xxxxxxxxx)
13
+ }
14
+
15
+ /**
16
+ * Send email parameters
17
+ */
18
+ export interface SendEmailParams {
19
+ from: string // "Name <sender@domain.com>"
20
+ to: string | string[] // Recipients (max 50)
21
+ subject: string // Email subject
22
+ html?: string // HTML content
23
+ text?: string // Plain text (auto-generated from HTML if omitted)
24
+ replyTo?: string | string[] // Reply-to address
25
+ cc?: string | string[] // CC recipients
26
+ bcc?: string | string[] // BCC recipients
27
+ headers?: Record<string, string> // Custom headers (for unsubscribe)
28
+ tags?: Array<{ name: string; value: string }> // Key-value metadata
29
+ }
30
+
31
+ /**
32
+ * Send email result
33
+ */
34
+ export interface SendEmailResult {
35
+ id: string // Email ID
36
+ success: boolean
37
+ }
38
+
39
+ /**
40
+ * Get email parameters
41
+ */
42
+ export interface GetEmailParams {
43
+ emailId: string // Email ID to retrieve
44
+ }
45
+
46
+ /**
47
+ * Get email result
48
+ */
49
+ export interface GetEmailResult {
50
+ id: string
51
+ to: string[]
52
+ from: string
53
+ subject: string
54
+ lastEvent: string // 'sent', 'delivered', 'bounced', 'complained', 'failed'
55
+ createdAt: string
56
+ }
57
+
58
+ /**
59
+ * Resend API response for send email
60
+ */
61
+ export interface ResendSendEmailResponse {
62
+ id: string
63
+ }
64
+
65
+ /**
66
+ * Resend API response for get email
67
+ */
68
+ export interface ResendGetEmailResponse {
69
+ id: string
70
+ to: string[]
71
+ from: string
72
+ subject: string
73
+ last_event: string
74
+ created_at: string
75
+ }