@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,230 @@
1
+ import { ToolingError } from '../../../../../../types'
2
+ import type { ExecutionContext } from '../../../../../../../base/types'
3
+ import type {
4
+ SignatureApiCredentials,
5
+ DownloadDocumentParams,
6
+ DownloadDocumentResult,
7
+ Deliverable,
8
+ ListDeliverablesResponse
9
+ } from '../utils/types'
10
+
11
+ const DEFAULT_API_URL = 'https://api.signatureapi.com/v1'
12
+
13
+ /**
14
+ * Retry configuration for waiting on deliverable generation
15
+ */
16
+ const DELIVERABLE_RETRY_CONFIG = {
17
+ maxAttempts: 8,
18
+ initialDelayMs: 500,
19
+ maxDelayMs: 8000,
20
+ backoffMultiplier: 2
21
+ }
22
+
23
+ /**
24
+ * Sleep for specified milliseconds
25
+ */
26
+ function sleep(ms: number): Promise<void> {
27
+ return new Promise((resolve) => setTimeout(resolve, ms))
28
+ }
29
+
30
+ /**
31
+ * Download signed document from a completed envelope using the deliverable system
32
+ *
33
+ * SignatureAPI uses a deliverable system for signed documents:
34
+ * 1. List deliverables for the envelope
35
+ * 2. If none exist or none are generated, create one
36
+ * 3. Poll until status is 'generated'
37
+ * 4. Download via the pre-signed URL
38
+ *
39
+ * @param credentials - SignatureAPI credentials (apiKey, optional apiUrl)
40
+ * @param params - Download parameters (envelopeId, documentType)
41
+ * @param context - Execution context for logging
42
+ * @returns Buffer containing PDF content, content type, and filename
43
+ * @throws ToolingError if download fails
44
+ */
45
+ export async function downloadDocument(
46
+ credentials: SignatureApiCredentials,
47
+ params: DownloadDocumentParams,
48
+ context?: ExecutionContext
49
+ ): Promise<DownloadDocumentResult> {
50
+ const { apiKey, apiUrl = DEFAULT_API_URL } = credentials
51
+ const { envelopeId } = params
52
+ // Map documentType to deliverable type: 'combined'/'audit' -> 'standard', 'original' -> 'simple'
53
+ const deliverableType = params.documentType === 'original' ? 'simple' : 'standard'
54
+
55
+ // Validate credentials
56
+ if (!apiKey) {
57
+ throw new ToolingError('credentials_invalid', 'SignatureAPI credentials must include apiKey', {
58
+ integration: 'signature-api',
59
+ method: 'downloadDocument'
60
+ })
61
+ }
62
+
63
+ // Validate required parameters
64
+ if (!envelopeId) {
65
+ throw new ToolingError('validation_error', 'Envelope ID is required', {
66
+ integration: 'signature-api',
67
+ method: 'downloadDocument'
68
+ })
69
+ }
70
+
71
+ const log = (message: string, data?: Record<string, unknown>) => {
72
+ if (context?.logger) {
73
+ const dataStr = data
74
+ ? ` ${Object.entries(data)
75
+ .map(([k, v]) => `${k}=${v}`)
76
+ .join(' ')}`
77
+ : ''
78
+ context.logger.info(
79
+ `[SignatureAPI:downloadDocument] ${message} organizationId=${context.organizationId} executionId=${context.executionId} envelopeId=${envelopeId}${dataStr}`
80
+ )
81
+ }
82
+ }
83
+
84
+ try {
85
+ // Step 1: List existing deliverables
86
+ log('Listing deliverables')
87
+ const listRes = await fetch(`${apiUrl}/envelopes/${envelopeId}/deliverables`, {
88
+ headers: { 'X-API-Key': apiKey }
89
+ })
90
+
91
+ if (!listRes.ok) {
92
+ const errorText = await listRes.text()
93
+ throw new ToolingError('api_error', `Failed to list deliverables: ${listRes.status} ${errorText}`, {
94
+ integration: 'signature-api',
95
+ method: 'downloadDocument',
96
+ envelopeId
97
+ })
98
+ }
99
+
100
+ const listData: ListDeliverablesResponse = await listRes.json()
101
+ log('Found deliverables', { count: listData.data.length })
102
+
103
+ // Step 2: Find existing generated deliverable or create one
104
+ let deliverable: Deliverable | undefined = listData.data.find(
105
+ (d) => d.type === deliverableType && d.status === 'generated'
106
+ )
107
+
108
+ if (!deliverable) {
109
+ // Check for pending/processing deliverable of matching type
110
+ deliverable = listData.data.find(
111
+ (d) => d.type === deliverableType && (d.status === 'pending' || d.status === 'processing')
112
+ )
113
+
114
+ if (!deliverable) {
115
+ // Create new deliverable
116
+ log('Creating new deliverable', { type: deliverableType })
117
+ const createRes = await fetch(`${apiUrl}/envelopes/${envelopeId}/deliverables`, {
118
+ method: 'POST',
119
+ headers: {
120
+ 'X-API-Key': apiKey,
121
+ 'Content-Type': 'application/json'
122
+ },
123
+ body: JSON.stringify({ type: deliverableType })
124
+ })
125
+
126
+ if (!createRes.ok) {
127
+ const errorText = await createRes.text()
128
+ throw new ToolingError('api_error', `Failed to create deliverable: ${createRes.status} ${errorText}`, {
129
+ integration: 'signature-api',
130
+ method: 'downloadDocument',
131
+ envelopeId
132
+ })
133
+ }
134
+
135
+ deliverable = await createRes.json()
136
+ log('Created deliverable', { id: deliverable!.id, status: deliverable!.status })
137
+ }
138
+ }
139
+
140
+ // Step 3: Poll until generated (exponential backoff)
141
+ let attempts = 0
142
+ let delay = DELIVERABLE_RETRY_CONFIG.initialDelayMs
143
+
144
+ while (deliverable!.status !== 'generated' && attempts < DELIVERABLE_RETRY_CONFIG.maxAttempts) {
145
+ if (deliverable!.status === 'failed') {
146
+ throw new ToolingError('api_error', 'Deliverable generation failed', {
147
+ integration: 'signature-api',
148
+ method: 'downloadDocument',
149
+ envelopeId,
150
+ deliverableId: deliverable!.id
151
+ })
152
+ }
153
+
154
+ log('Deliverable not ready, waiting', { status: deliverable!.status, attempt: attempts + 1, delayMs: delay })
155
+ await sleep(delay)
156
+
157
+ // Fetch updated status
158
+ const getRes = await fetch(`${apiUrl}/deliverables/${deliverable!.id}`, {
159
+ headers: { 'X-API-Key': apiKey }
160
+ })
161
+
162
+ if (!getRes.ok) {
163
+ const errorText = await getRes.text()
164
+ throw new ToolingError('api_error', `Failed to get deliverable: ${getRes.status} ${errorText}`, {
165
+ integration: 'signature-api',
166
+ method: 'downloadDocument',
167
+ deliverableId: deliverable!.id
168
+ })
169
+ }
170
+
171
+ deliverable = await getRes.json()
172
+ log('Deliverable status', { id: deliverable!.id, status: deliverable!.status })
173
+
174
+ attempts++
175
+ delay = Math.min(delay * DELIVERABLE_RETRY_CONFIG.backoffMultiplier, DELIVERABLE_RETRY_CONFIG.maxDelayMs)
176
+ }
177
+
178
+ if (deliverable!.status !== 'generated') {
179
+ throw new ToolingError(
180
+ 'timeout_error',
181
+ `Deliverable not ready after ${DELIVERABLE_RETRY_CONFIG.maxAttempts} attempts (status: ${deliverable!.status})`,
182
+ { integration: 'signature-api', method: 'downloadDocument', envelopeId, deliverableId: deliverable!.id }
183
+ )
184
+ }
185
+
186
+ // Step 4: Download PDF from pre-signed URL
187
+ if (!deliverable!.url) {
188
+ throw new ToolingError('api_error', 'Deliverable generated but URL is null', {
189
+ integration: 'signature-api',
190
+ method: 'downloadDocument',
191
+ deliverableId: deliverable!.id
192
+ })
193
+ }
194
+
195
+ log('Downloading PDF from pre-signed URL', { deliverableId: deliverable!.id })
196
+ const downloadRes = await fetch(deliverable!.url)
197
+
198
+ if (!downloadRes.ok) {
199
+ throw new ToolingError('api_error', `Failed to download PDF: ${downloadRes.status}`, {
200
+ integration: 'signature-api',
201
+ method: 'downloadDocument',
202
+ deliverableId: deliverable!.id
203
+ })
204
+ }
205
+
206
+ const buffer = Buffer.from(await downloadRes.arrayBuffer())
207
+ const filename = `${envelopeId}-signed.pdf`
208
+
209
+ log('Download complete', { size: buffer.length, filename })
210
+
211
+ return {
212
+ content: buffer,
213
+ contentType: 'application/pdf',
214
+ filename
215
+ }
216
+ } catch (error) {
217
+ // Re-throw ToolingError as-is
218
+ if (error instanceof ToolingError) {
219
+ throw error
220
+ }
221
+
222
+ // Wrap unknown errors
223
+ throw new ToolingError('api_error', `Failed to download document: ${(error as Error).message}`, {
224
+ integration: 'signature-api',
225
+ method: 'downloadDocument',
226
+ organizationId: context?.organizationId,
227
+ originalError: error
228
+ })
229
+ }
230
+ }
@@ -0,0 +1,133 @@
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 { SignatureApiCredentials, GetEnvelopeParams, GetEnvelopeResult } from '../utils/types'
5
+
6
+ const DEFAULT_API_URL = 'https://api.signatureapi.com/v1'
7
+
8
+ /**
9
+ * SignatureAPI raw response format (snake_case)
10
+ */
11
+ interface SignatureApiGetEnvelopeResponse {
12
+ id: string
13
+ title: string
14
+ status: 'processing' | 'pending' | 'completed' | 'declined' | 'voided'
15
+ created_at: string
16
+ completed_at?: string
17
+ metadata: Record<string, string>
18
+ recipients: Array<{
19
+ key: string
20
+ name: string
21
+ email: string
22
+ status: 'pending' | 'signed' | 'declined'
23
+ signed_at?: string
24
+ }>
25
+ }
26
+
27
+ /**
28
+ * Get envelope details from SignatureAPI
29
+ *
30
+ * @param credentials - SignatureAPI credentials (apiKey, optional apiUrl)
31
+ * @param params - Envelope ID to retrieve
32
+ * @param context - Execution context for logging
33
+ * @returns Envelope details including status and recipients
34
+ * @throws ToolingError if retrieval fails
35
+ *
36
+ * @example
37
+ * const result = await getEnvelope(
38
+ * { apiKey: 'key_test_xxx' },
39
+ * { envelopeId: 'env_xxx' },
40
+ * context
41
+ * )
42
+ * // result.status: 'processing', 'pending', 'completed', 'declined', 'voided'
43
+ */
44
+ export async function getEnvelope(
45
+ credentials: SignatureApiCredentials,
46
+ params: GetEnvelopeParams,
47
+ context?: ExecutionContext
48
+ ): Promise<GetEnvelopeResult> {
49
+ const { apiKey, apiUrl = DEFAULT_API_URL } = credentials
50
+ const { envelopeId } = params
51
+
52
+ // Validate required parameters
53
+ if (!apiKey) {
54
+ throw new ToolingError('credentials_invalid', 'SignatureAPI credentials must include apiKey', {
55
+ integration: 'signature-api',
56
+ method: 'getEnvelope'
57
+ })
58
+ }
59
+
60
+ if (!envelopeId) {
61
+ throw new ToolingError('validation_error', 'Envelope ID is required', {
62
+ integration: 'signature-api',
63
+ method: 'getEnvelope'
64
+ })
65
+ }
66
+
67
+ // Build URL
68
+ const url = `${apiUrl}/envelopes/${encodeURIComponent(envelopeId)}`
69
+
70
+ try {
71
+ // Execute with retry logic
72
+ const response = await withRetry(async () => {
73
+ const res = await fetch(url, {
74
+ method: 'GET',
75
+ headers: {
76
+ 'X-API-Key': apiKey
77
+ }
78
+ })
79
+
80
+ // Handle HTTP errors
81
+ if (!res.ok) {
82
+ throw await createHttpError(res, {
83
+ integration: 'signature-api',
84
+ method: 'getEnvelope',
85
+ organizationId: context?.organizationId
86
+ })
87
+ }
88
+
89
+ return res
90
+ }, DEFAULT_RETRY_POLICY)
91
+
92
+ // Parse response
93
+ const result = (await response.json()) as SignatureApiGetEnvelopeResponse
94
+
95
+ // Log success
96
+ if (context?.logger) {
97
+ context.logger.info(
98
+ `[SignatureApiAdapter] Envelope retrieved: organizationId=${context.organizationId} executionId=${context.executionId} envelopeId=${result.id} status=${result.status}`
99
+ )
100
+ }
101
+
102
+ // Return standardized result (snake_case -> camelCase)
103
+ return {
104
+ id: result.id,
105
+ title: result.title,
106
+ status: result.status,
107
+ createdAt: result.created_at,
108
+ completedAt: result.completed_at,
109
+ metadata: result.metadata || {},
110
+ recipients: result.recipients.map((recipient) => ({
111
+ key: recipient.key,
112
+ name: recipient.name,
113
+ email: recipient.email,
114
+ status: recipient.status,
115
+ signedAt: recipient.signed_at
116
+ }))
117
+ }
118
+ } catch (error) {
119
+ // Re-throw ToolingError as-is
120
+ if (error instanceof ToolingError) {
121
+ throw error
122
+ }
123
+
124
+ // Wrap unknown errors
125
+ throw new ToolingError('api_error', `Failed to get envelope from SignatureAPI: ${(error as Error).message}`, {
126
+ integration: 'signature-api',
127
+ method: 'getEnvelope',
128
+ organizationId: context?.organizationId,
129
+ envelopeId,
130
+ originalError: error
131
+ })
132
+ }
133
+ }
@@ -0,0 +1,246 @@
1
+ /**
2
+ * SignatureAPI Types
3
+ *
4
+ * Type definitions for SignatureAPI eSignature operations.
5
+ * SignatureAPI uses raw fetch (no official SDK).
6
+ */
7
+
8
+ /**
9
+ * SignatureAPI credentials format
10
+ * Stored in credentials table, encrypted
11
+ */
12
+ export interface SignatureApiCredentials {
13
+ apiKey: string // key_live_xxx or key_test_xxx
14
+ apiUrl?: string // Optional override, defaults to https://api.signatureapi.com/v1
15
+ }
16
+
17
+ /**
18
+ * Signature field configuration
19
+ *
20
+ * Note: The 'date' type is supported here for convenience but gets mapped
21
+ * to 'recipient_completed_date' when sent to the SignatureAPI.
22
+ */
23
+ export interface SignatureField {
24
+ type: 'signature' | 'date' | 'text' | 'initials' // 'date' maps to 'recipient_completed_date'
25
+ page: number // 1-indexed, or -1 for last page
26
+ x: number // X position in points
27
+ y: number // Y position in points
28
+ width?: number // Field width
29
+ height?: number // Field height
30
+ }
31
+
32
+ /**
33
+ * Valid SignatureAPI field types
34
+ *
35
+ * Note: SignatureAPI does NOT support 'date' - use 'recipient_completed_date' instead.
36
+ * Our workflow utility maps 'date' -> 'recipient_completed_date' for convenience.
37
+ */
38
+ export type SignatureApiFieldType =
39
+ | 'signature'
40
+ | 'initials'
41
+ | 'recipient_completed_date'
42
+ | 'envelope_completed_date'
43
+ | 'recipient_name'
44
+ | 'recipient_email'
45
+ | 'text'
46
+ | 'text_input'
47
+ | 'boxed_text_input'
48
+ | 'multi_line_text_input'
49
+ | 'checkbox'
50
+ | 'dropdown'
51
+
52
+ /**
53
+ * Signing place configuration
54
+ */
55
+ export interface SigningPlace {
56
+ recipientKey: string // Links to recipient
57
+ type: SignatureApiFieldType
58
+ page: number
59
+ x: number
60
+ y: number
61
+ width?: number
62
+ height?: number
63
+ fontColor?: string // Hex color (e.g., '#FFFFFF' for white)
64
+ }
65
+
66
+ /**
67
+ * Document for signing
68
+ *
69
+ * Note: SignatureAPI requires documents to be provided via URL (not base64).
70
+ * Use a publicly accessible URL (e.g., Supabase signed URL).
71
+ */
72
+ export interface EnvelopeDocument {
73
+ name: string // Display name (e.g., 'proposal.pdf')
74
+ url: string // Publicly accessible URL to PDF (NOT base64)
75
+ places?: SigningPlace[] // Where to place signature fields
76
+ }
77
+
78
+ /**
79
+ * Recipient/signer configuration
80
+ */
81
+ export interface Recipient {
82
+ key: string // Unique identifier (e.g., 'signer1')
83
+ type: 'signer' | 'viewer' | 'approver'
84
+ name: string
85
+ email: string
86
+ language?: string // 'en', 'es', 'fr', etc.
87
+ }
88
+
89
+ /**
90
+ * Create envelope parameters
91
+ */
92
+ export interface CreateEnvelopeParams {
93
+ title: string // Envelope name
94
+ message?: string // Custom message in emails
95
+ documents: EnvelopeDocument[] // Documents to sign
96
+ recipients: Recipient[] // Signers
97
+ metadata?: Record<string, string> // Custom metadata
98
+ webhookUrl?: string // Override default webhook
99
+ routing?: 'parallel' | 'sequential' // Default: parallel
100
+ }
101
+
102
+ /**
103
+ * Create envelope result
104
+ */
105
+ export interface CreateEnvelopeResult {
106
+ id: string // env_xxx
107
+ status: string // 'processing', 'pending', etc.
108
+ signingUrl?: string // URL for first signer
109
+ }
110
+
111
+ /**
112
+ * Void envelope parameters
113
+ */
114
+ export interface VoidEnvelopeParams {
115
+ envelopeId: string
116
+ reason?: string
117
+ }
118
+
119
+ /**
120
+ * Void envelope result
121
+ */
122
+ export interface VoidEnvelopeResult {
123
+ id: string
124
+ status: 'voided'
125
+ }
126
+
127
+ /**
128
+ * Download document parameters
129
+ */
130
+ export interface DownloadDocumentParams {
131
+ envelopeId: string
132
+ documentType?: 'combined' | 'original' | 'audit' // Default: combined
133
+ }
134
+
135
+ /**
136
+ * Download document result
137
+ */
138
+ export interface DownloadDocumentResult {
139
+ content: Buffer // PDF content
140
+ contentType: string // 'application/pdf'
141
+ filename: string // Suggested filename
142
+ }
143
+
144
+ /**
145
+ * Get envelope parameters
146
+ */
147
+ export interface GetEnvelopeParams {
148
+ envelopeId: string
149
+ }
150
+
151
+ /**
152
+ * Get envelope result
153
+ */
154
+ export interface GetEnvelopeResult {
155
+ id: string
156
+ title: string
157
+ status: 'processing' | 'pending' | 'completed' | 'declined' | 'voided'
158
+ createdAt: string
159
+ completedAt?: string
160
+ metadata: Record<string, string>
161
+ recipients: Array<{
162
+ key: string
163
+ name: string
164
+ email: string
165
+ status: 'pending' | 'signed' | 'declined'
166
+ signedAt?: string
167
+ }>
168
+ }
169
+
170
+ /**
171
+ * SignatureAPI error response
172
+ */
173
+ export interface SignatureApiErrorResponse {
174
+ error: {
175
+ code: string
176
+ message: string
177
+ details?: unknown
178
+ }
179
+ }
180
+
181
+ // ============================================================================
182
+ // Deliverable Types (for downloading signed documents)
183
+ // ============================================================================
184
+
185
+ /**
186
+ * Deliverable type - what's included in the PDF
187
+ */
188
+ export type DeliverableType = 'standard' | 'simple'
189
+
190
+ /**
191
+ * Deliverable status - processing lifecycle
192
+ */
193
+ export type DeliverableStatus = 'pending' | 'processing' | 'generated' | 'failed'
194
+
195
+ /**
196
+ * Deliverable object returned by SignatureAPI
197
+ */
198
+ export interface Deliverable {
199
+ id: string // del_xxx
200
+ envelope_id: string
201
+ type: DeliverableType
202
+ status: DeliverableStatus
203
+ url: string | null // Pre-signed download URL (null until generated)
204
+ password?: string
205
+ created_at: string
206
+ generated_at: string | null
207
+ language?: string
208
+ timezone?: string
209
+ timestamp_format?: string
210
+ }
211
+
212
+ /**
213
+ * List deliverables response
214
+ */
215
+ export interface ListDeliverablesResponse {
216
+ data: Deliverable[]
217
+ links: {
218
+ next?: string
219
+ previous?: string
220
+ }
221
+ }
222
+
223
+ /**
224
+ * Create deliverable parameters
225
+ */
226
+ export interface CreateDeliverableParams {
227
+ envelopeId: string
228
+ type?: DeliverableType // Default: standard
229
+ }
230
+
231
+ /**
232
+ * Create deliverable result
233
+ */
234
+ export type CreateDeliverableResult = Deliverable
235
+
236
+ /**
237
+ * Get deliverable parameters
238
+ */
239
+ export interface GetDeliverableParams {
240
+ deliverableId: string
241
+ }
242
+
243
+ /**
244
+ * Get deliverable result
245
+ */
246
+ export type GetDeliverableResult = Deliverable
@@ -0,0 +1,90 @@
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 { SignatureApiCredentials, VoidEnvelopeParams, VoidEnvelopeResult } from '../utils/types'
5
+
6
+ const DEFAULT_API_URL = 'https://api.signatureapi.com/v1'
7
+
8
+ /**
9
+ * Void/cancel a pending envelope
10
+ *
11
+ * @param credentials - SignatureAPI credentials (apiKey, optional apiUrl)
12
+ * @param params - Void parameters (envelopeId, optional reason)
13
+ * @param context - Execution context for logging
14
+ * @returns Envelope ID and voided status
15
+ * @throws ToolingError if voiding fails
16
+ */
17
+ export async function voidEnvelope(
18
+ credentials: SignatureApiCredentials,
19
+ params: VoidEnvelopeParams,
20
+ context?: ExecutionContext
21
+ ): Promise<VoidEnvelopeResult> {
22
+ const { apiKey, apiUrl = DEFAULT_API_URL } = credentials
23
+ const { envelopeId, reason } = params
24
+
25
+ // Validate credentials
26
+ if (!apiKey) {
27
+ throw new ToolingError('credentials_invalid', 'SignatureAPI credentials must include apiKey', {
28
+ integration: 'signature-api',
29
+ method: 'voidEnvelope'
30
+ })
31
+ }
32
+
33
+ // Validate required params
34
+ if (!envelopeId) {
35
+ throw new ToolingError('validation_error', 'Envelope ID is required', {
36
+ integration: 'signature-api',
37
+ method: 'voidEnvelope'
38
+ })
39
+ }
40
+
41
+ try {
42
+ const response = await withRetry(async () => {
43
+ const res = await fetch(`${apiUrl}/envelopes/${envelopeId}/void`, {
44
+ method: 'POST',
45
+ headers: {
46
+ 'Content-Type': 'application/json',
47
+ 'X-API-Key': apiKey
48
+ },
49
+ body: JSON.stringify({ reason: reason || 'Voided by system' })
50
+ })
51
+
52
+ if (!res.ok) {
53
+ throw await createHttpError(res, {
54
+ integration: 'signature-api',
55
+ method: 'voidEnvelope',
56
+ organizationId: context?.organizationId
57
+ })
58
+ }
59
+
60
+ return res
61
+ }, DEFAULT_RETRY_POLICY)
62
+
63
+ const result = await response.json()
64
+
65
+ // Log success
66
+ if (context?.logger) {
67
+ context.logger.info(
68
+ `[SignatureApiAdapter] Envelope voided: organizationId=${context.organizationId} envelopeId=${envelopeId}`
69
+ )
70
+ }
71
+
72
+ return {
73
+ id: result.id,
74
+ status: 'voided'
75
+ }
76
+ } catch (error) {
77
+ // Re-throw ToolingError as-is
78
+ if (error instanceof ToolingError) {
79
+ throw error
80
+ }
81
+
82
+ // Wrap unknown errors
83
+ throw new ToolingError('api_error', `Failed to void envelope: ${(error as Error).message}`, {
84
+ integration: 'signature-api',
85
+ method: 'voidEnvelope',
86
+ organizationId: context?.organizationId,
87
+ originalError: error
88
+ })
89
+ }
90
+ }