@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,74 @@
1
+ /* eslint-disable no-undef */
2
+ /**
3
+ * Image Utilities for PDF Generation
4
+ *
5
+ * Converts image URLs to base64 data URLs for use with pdfmake.
6
+ * pdfmake requires images in base64 format for client-side PDF generation.
7
+ *
8
+ * @see https://pdfmake.github.io/docs/0.1/document-definition-object/images/
9
+ */
10
+
11
+ /**
12
+ * Convert an image URL to a base64 data URL
13
+ *
14
+ * Uses canvas to convert the image, which handles CORS properly
15
+ * for same-origin images.
16
+ *
17
+ * @param url - Image URL (relative or absolute)
18
+ * @returns Promise resolving to base64 data URL
19
+ */
20
+ export async function imageUrlToBase64(url: string): Promise<string> {
21
+ return new Promise((resolve, reject) => {
22
+ const img = new Image()
23
+ img.crossOrigin = 'anonymous'
24
+
25
+ img.onload = () => {
26
+ const canvas = document.createElement('canvas')
27
+ canvas.width = img.naturalWidth
28
+ canvas.height = img.naturalHeight
29
+
30
+ const ctx = canvas.getContext('2d')
31
+ if (!ctx) {
32
+ reject(new Error('Failed to get canvas context'))
33
+ return
34
+ }
35
+
36
+ ctx.drawImage(img, 0, 0)
37
+
38
+ // Get as PNG to preserve transparency
39
+ const dataUrl = canvas.toDataURL('image/png')
40
+ resolve(dataUrl)
41
+ }
42
+
43
+ img.onerror = () => {
44
+ reject(new Error(`Failed to load image: ${url}`))
45
+ }
46
+
47
+ img.src = url
48
+ })
49
+ }
50
+
51
+ /**
52
+ * Preload multiple images and return a map of URL to base64
53
+ *
54
+ * Useful for preloading all images before PDF generation.
55
+ *
56
+ * @param urls - Array of image URLs to preload
57
+ * @returns Promise resolving to map of URL -> base64 data URL
58
+ */
59
+ export async function preloadImages(urls: string[]): Promise<Map<string, string>> {
60
+ const results = new Map<string, string>()
61
+
62
+ await Promise.all(
63
+ urls.map(async (url) => {
64
+ try {
65
+ const base64 = await imageUrlToBase64(url)
66
+ results.set(url, base64)
67
+ } catch (error) {
68
+ console.warn(`Failed to preload image: ${url}`, error)
69
+ }
70
+ })
71
+ )
72
+
73
+ return results
74
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * PDF Browser Module
3
+ *
4
+ * Browser-compatible PDF generation using pdfmake.
5
+ * Use this module for client-side PDF rendering in web applications.
6
+ *
7
+ * @example
8
+ * import { PdfMakeBrowserService } from '@repo/core/pdf/browser'
9
+ *
10
+ * const service = new PdfMakeBrowserService()
11
+ * const dataUrl = await service.generateDataUrl(document)
12
+ * // Use dataUrl as iframe src
13
+ */
14
+
15
+ export { PdfMakeBrowserService, pdfMakeBrowserService } from './pdfmake-browser'
16
+ export { imageUrlToBase64, preloadImages } from './image-utils'
@@ -0,0 +1,229 @@
1
+ /**
2
+ * PDF Browser Service (pdfmake)
3
+ *
4
+ * Browser-compatible PDF rendering using pdfmake.
5
+ * Generates PDFs in the browser without server round-trips.
6
+ *
7
+ * Uses Roboto fonts from vfs_fonts for consistent rendering.
8
+ *
9
+ * @see https://pdfmake.github.io/docs/
10
+ */
11
+
12
+ import type { TFontDictionary, TCreatedPdf, TDocumentDefinitions } from 'pdfmake/interfaces'
13
+
14
+ import { defaultTheme } from '../themes'
15
+ import type { PDFTheme } from '../themes'
16
+ import type { PDFDocument } from '../types'
17
+ import { convertDocument } from '../shared/convert'
18
+
19
+ // ============================================================================
20
+ // Lazy pdfmake initialization
21
+ // ============================================================================
22
+
23
+ interface PdfMakeInstance {
24
+ createPdf: (docDefinition: TDocumentDefinitions) => TCreatedPdf
25
+ setFonts?: (fonts: TFontDictionary) => void
26
+ addVirtualFileSystem?: (vfs: Record<string, string>) => void
27
+ }
28
+
29
+ // pdfmake module reference (loaded on first use)
30
+ let pdfMakeModule: PdfMakeInstance | null = null
31
+ let fontsConfigured = false
32
+
33
+ /**
34
+ * Get pdfmake module with lazy initialization
35
+ * This avoids SSR issues and ensures proper browser-side loading
36
+ */
37
+ async function getPdfMake(): Promise<PdfMakeInstance> {
38
+ if (pdfMakeModule) {
39
+ return pdfMakeModule
40
+ }
41
+
42
+ // Dynamic import to ensure browser-side loading
43
+ const [pdfMakeImport, pdfFontsImport] = await Promise.all([
44
+ import('pdfmake/build/pdfmake'),
45
+ import('pdfmake/build/vfs_fonts')
46
+ ])
47
+
48
+ // Handle both default and named exports (CJS/ESM interop)
49
+ const mod = ((pdfMakeImport as { default?: PdfMakeInstance }).default ?? pdfMakeImport) as PdfMakeInstance
50
+ pdfMakeModule = mod
51
+
52
+ // Add virtual file system with font data
53
+ const vfsModule = pdfFontsImport as Record<string, unknown>
54
+ const vfsKeys = Object.keys(vfsModule).filter((k) => k !== 'default')
55
+
56
+ // vfs_fonts exports font files directly at top level (e.g., 'Roboto-Regular.ttf': base64data)
57
+ // Build VFS object from the import, excluding 'default' key
58
+ const vfsData: Record<string, string> = {}
59
+ for (const key of vfsKeys) {
60
+ if (typeof vfsModule[key] === 'string') {
61
+ vfsData[key] = vfsModule[key]
62
+ }
63
+ }
64
+
65
+ if (Object.keys(vfsData).length > 0 && mod.addVirtualFileSystem) {
66
+ mod.addVirtualFileSystem(vfsData)
67
+ }
68
+
69
+ // Set fonts on first load (use Roboto from vfs_fonts)
70
+ if (!fontsConfigured && pdfMakeModule.setFonts) {
71
+ pdfMakeModule.setFonts({
72
+ Roboto: {
73
+ normal: 'Roboto-Regular.ttf',
74
+ bold: 'Roboto-Medium.ttf',
75
+ italics: 'Roboto-Italic.ttf',
76
+ bolditalics: 'Roboto-MediumItalic.ttf'
77
+ }
78
+ })
79
+ fontsConfigured = true
80
+ }
81
+
82
+ return pdfMakeModule
83
+ }
84
+
85
+ // ============================================================================
86
+ // Browser Service Class
87
+ // ============================================================================
88
+
89
+ /**
90
+ * PdfMakeBrowserService
91
+ *
92
+ * Browser-compatible PDF generation service using pdfmake.
93
+ * Generates PDFs client-side and returns them as data URLs, blobs, or triggers downloads.
94
+ */
95
+ export class PdfMakeBrowserService {
96
+ /**
97
+ * Generate PDF and return as data URL for iframe src
98
+ *
99
+ * @param document - PDFDocument schema to render
100
+ * @param theme - Optional theme override (merged with defaults)
101
+ * @returns Data URL string (e.g., "data:application/pdf;base64,...")
102
+ */
103
+ async generateDataUrl(document: PDFDocument, theme?: Partial<PDFTheme>): Promise<string> {
104
+ const pdfMake = await getPdfMake()
105
+ if (!pdfMake) throw new Error('pdfmake failed to load')
106
+
107
+ const mergedTheme = this.mergeTheme(theme)
108
+ const docDefinition = convertDocument(document, mergedTheme)
109
+ const pdf = pdfMake.createPdf(docDefinition)
110
+
111
+ // pdfmake browser API uses callbacks, wrap in Promise
112
+ // Note: @types/pdfmake doesn't properly type callback overloads
113
+ return new Promise<string>((resolve, reject) => {
114
+ try {
115
+ ;(pdf.getDataUrl as (cb: (result: string) => void) => void)((result) => {
116
+ resolve(result)
117
+ })
118
+ } catch (err) {
119
+ reject(err)
120
+ }
121
+ })
122
+ }
123
+
124
+ /**
125
+ * Generate PDF and return as Blob for download or processing
126
+ *
127
+ * @param document - PDFDocument schema to render
128
+ * @param theme - Optional theme override (merged with defaults)
129
+ * @returns Blob containing the PDF
130
+ */
131
+ async generateBlob(document: PDFDocument, theme?: Partial<PDFTheme>): Promise<Blob> {
132
+ const pdfMake = await getPdfMake()
133
+ if (!pdfMake) throw new Error('pdfmake failed to load')
134
+
135
+ const mergedTheme = this.mergeTheme(theme)
136
+ const docDefinition = convertDocument(document, mergedTheme)
137
+ const pdf = pdfMake.createPdf(docDefinition)
138
+ // pdfmake browser API uses callbacks
139
+ // Note: @types/pdfmake doesn't properly type callback overloads
140
+ return new Promise<Blob>((resolve, reject) => {
141
+ try {
142
+ ;(pdf.getBlob as (cb: (result: Blob) => void) => void)((result) => {
143
+ resolve(result)
144
+ })
145
+ } catch (err) {
146
+ reject(err)
147
+ }
148
+ })
149
+ }
150
+
151
+ /**
152
+ * Trigger browser download of the PDF
153
+ *
154
+ * @param document - PDFDocument schema to render
155
+ * @param filename - Filename for the download (e.g., "proposal.pdf")
156
+ * @param theme - Optional theme override (merged with defaults)
157
+ */
158
+ async download(document: PDFDocument, filename: string, theme?: Partial<PDFTheme>): Promise<void> {
159
+ const pdfMake = await getPdfMake()
160
+ if (!pdfMake) throw new Error('pdfmake failed to load')
161
+
162
+ const mergedTheme = this.mergeTheme(theme)
163
+ const docDefinition = convertDocument(document, mergedTheme)
164
+ const pdf = pdfMake.createPdf(docDefinition)
165
+ await pdf.download(filename)
166
+ }
167
+
168
+ /**
169
+ * Open PDF in a new browser tab
170
+ *
171
+ * @param document - PDFDocument schema to render
172
+ * @param theme - Optional theme override (merged with defaults)
173
+ */
174
+ async openInNewTab(document: PDFDocument, theme?: Partial<PDFTheme>): Promise<void> {
175
+ const pdfMake = await getPdfMake()
176
+ if (!pdfMake) throw new Error('pdfmake failed to load')
177
+
178
+ const mergedTheme = this.mergeTheme(theme)
179
+ const docDefinition = convertDocument(document, mergedTheme)
180
+ const pdf = pdfMake.createPdf(docDefinition)
181
+ await pdf.open()
182
+ }
183
+
184
+ /**
185
+ * Print PDF using browser's print dialog
186
+ *
187
+ * @param document - PDFDocument schema to render
188
+ * @param theme - Optional theme override (merged with defaults)
189
+ */
190
+ async print(document: PDFDocument, theme?: Partial<PDFTheme>): Promise<void> {
191
+ const pdfMake = await getPdfMake()
192
+ if (!pdfMake) throw new Error('pdfmake failed to load')
193
+
194
+ const mergedTheme = this.mergeTheme(theme)
195
+ const docDefinition = convertDocument(document, mergedTheme)
196
+ const pdf = pdfMake.createPdf(docDefinition)
197
+ await pdf.print()
198
+ }
199
+
200
+ // ==========================================================================
201
+ // Private Helpers
202
+ // ==========================================================================
203
+
204
+ /**
205
+ * Merge theme override with defaults
206
+ */
207
+ private mergeTheme(themeOverride?: Partial<PDFTheme>): PDFTheme {
208
+ if (!themeOverride) {
209
+ return defaultTheme
210
+ }
211
+ return {
212
+ ...defaultTheme,
213
+ ...themeOverride,
214
+ colors: { ...defaultTheme.colors, ...themeOverride.colors },
215
+ typography: { ...defaultTheme.typography, ...themeOverride.typography },
216
+ spacing: { ...defaultTheme.spacing, ...themeOverride.spacing }
217
+ }
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Singleton instance for convenience
223
+ *
224
+ * Can be used directly without instantiation:
225
+ * @example
226
+ * import { pdfMakeBrowserService } from '@repo/core/pdf/browser'
227
+ * const dataUrl = await pdfMakeBrowserService.generateDataUrl(document)
228
+ */
229
+ export const pdfMakeBrowserService = new PdfMakeBrowserService()
@@ -0,0 +1,10 @@
1
+ /**
2
+ * PDF Module
3
+ *
4
+ * Browser-safe exports for PDF document types, schemas, and themes.
5
+ * Note: Do NOT export ./server here - it contains Node.js-only code.
6
+ */
7
+
8
+ export * from './types'
9
+ export * from './themes'
10
+ export * from './sections'
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Acceptance Section Builder
3
+ *
4
+ * Creates a dedicated signature/acceptance page for proposals.
5
+ * This page contains minimal terms and signature fields placement area.
6
+ *
7
+ * Pattern: Content-only configuration, styling handled by theme system.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { acceptanceSection } from '@repo/core/pdf/sections'
12
+ *
13
+ * const page = acceptanceSection({
14
+ * companyName: 'Acme Corp',
15
+ * contactName: 'John Smith',
16
+ * tier: 'tier2',
17
+ * initialFee: 5000,
18
+ * monthlyFee: 2500 // optional
19
+ * })
20
+ * ```
21
+ */
22
+
23
+ import type { Page } from '../types'
24
+
25
+ /**
26
+ * Configuration for acceptance section
27
+ */
28
+ export interface AcceptanceSectionConfig {
29
+ /** Company name for personalization */
30
+ companyName: string
31
+ /** Contact name for personalization */
32
+ contactName: string
33
+ /** Service tier being proposed */
34
+ tier: 'tier1' | 'tier2' | 'tier3' | 'custom'
35
+ /** Initial fee amount in dollars (one-time implementation fee) */
36
+ initialFee: number
37
+ /** Monthly fee amount in dollars (optional, for ongoing support) */
38
+ monthlyFee?: number
39
+ }
40
+
41
+ /**
42
+ * Build acceptance page with simplified terms and signature area
43
+ *
44
+ * Creates a dedicated page at the end of the proposal with:
45
+ * - Pricing summary
46
+ * - Key terms (audit timeline, training, support, guarantee)
47
+ * - Acceptance statement
48
+ * - Space for electronic signature fields (added by SignatureAPI)
49
+ *
50
+ * @param config - Acceptance section configuration
51
+ * @returns Page structure for terms and acceptance
52
+ */
53
+ export function acceptanceSection(config: AcceptanceSectionConfig): Page {
54
+ const { companyName, contactName, tier, initialFee, monthlyFee } = config
55
+
56
+ const tierDescriptions = {
57
+ tier1: 'Standard Implementation',
58
+ tier2: 'Professional Implementation',
59
+ tier3: 'Enterprise Implementation',
60
+ custom: 'Custom Implementation'
61
+ }
62
+
63
+ // Build simplified terms list
64
+ const terms: string[] = [
65
+ `Initial fee: $${initialFee.toLocaleString()} (${tierDescriptions[tier]})`,
66
+ ...(monthlyFee ? [`Monthly fee: $${monthlyFee.toLocaleString()}/month`] : []),
67
+ 'Detailed audit begins within 5 business days of payment',
68
+ 'Training materials provided',
69
+ ...(monthlyFee ? ['Ongoing maintenance, support, and optimization included'] : []),
70
+ 'Payment link provided via email after signing',
71
+ '60-day money-back guarantee'
72
+ ]
73
+
74
+ return {
75
+ header: { title: 'Agreement & Terms', variant: 'accent' },
76
+ footer: true,
77
+ sections: [
78
+ {
79
+ type: 'card',
80
+ content: [
81
+ {
82
+ type: 'list',
83
+ ordered: false,
84
+ items: terms
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ type: 'text',
90
+ content: `By signing below, ${contactName} of ${companyName} authorizes Elevasis to proceed.`,
91
+ variant: 'body'
92
+ },
93
+ {
94
+ type: 'card',
95
+ title: 'Signature',
96
+ variant: 'light',
97
+ content: [
98
+ {
99
+ type: 'text',
100
+ content: 'Electronic signature will be captured below via SignatureAPI',
101
+ variant: 'caption'
102
+ },
103
+ {
104
+ type: 'text',
105
+ content: '\n\n\n\n\n',
106
+ variant: 'body'
107
+ }
108
+ ]
109
+ }
110
+ ]
111
+ }
112
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Automation Section Builder
3
+ *
4
+ * Creates a detail page for a single automation.
5
+ * Consumer provides content only; styling is handled internally.
6
+ */
7
+
8
+ import type { Page, ListItem } from '../types'
9
+ import type { AutomationConfig } from './types'
10
+
11
+ /**
12
+ * Creates an automation detail page with metrics, workflow, and impact
13
+ *
14
+ * @param config - Content-only configuration
15
+ * @returns Page object ready for PDFDocument.pages array
16
+ */
17
+ export function automationSection(config: AutomationConfig): Page {
18
+ const { title, howItWorks, workflow, impact, hoursPerWeek, annualSavings } = config
19
+
20
+ // Convert workflow items to ListItem format
21
+ const workflowItems: ListItem[] = workflow.map(item => {
22
+ if (typeof item === 'string') {
23
+ return item
24
+ }
25
+ return { text: item.text, highlight: item.highlight }
26
+ })
27
+
28
+ return {
29
+ sections: [
30
+ // Inline metrics without card container for compactness
31
+ {
32
+ type: 'columns',
33
+ content: [
34
+ {
35
+ type: 'metric',
36
+ value: String(hoursPerWeek),
37
+ label: 'Projected Hours/Week Saved'
38
+ },
39
+ {
40
+ type: 'metric',
41
+ value: `$${annualSavings.toLocaleString()}`,
42
+ label: 'Projected Annual Savings'
43
+ }
44
+ ]
45
+ },
46
+ { type: 'text', content: 'How It Works', variant: 'subtitle' },
47
+ { type: 'text', content: howItWorks, variant: 'body' },
48
+ { type: 'text', content: 'Workflow', variant: 'subtitle' },
49
+ { type: 'list', ordered: true, items: workflowItems },
50
+ { type: 'text', content: 'Expected Impact', variant: 'subtitle' },
51
+ { type: 'list', items: impact }
52
+ ],
53
+ header: { subtitle: 'Automation', title, variant: 'accent' },
54
+ footer: true
55
+ }
56
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Cover Section Builder
3
+ *
4
+ * Creates a styled cover page for proposals.
5
+ * Consumer provides content only; styling is handled internally.
6
+ */
7
+
8
+ import type { Page } from '../types'
9
+ import type { CoverConfig } from './types'
10
+
11
+ /**
12
+ * Creates a cover page with company info, vertical, and solutions
13
+ *
14
+ * @param config - Content-only configuration
15
+ * @returns Page object ready for PDFDocument.pages array
16
+ */
17
+ export function coverSection(config: CoverConfig): Page {
18
+ const {
19
+ company,
20
+ contact,
21
+ vertical,
22
+ solutions,
23
+ date = new Date().toLocaleDateString('en-US', {
24
+ year: 'numeric',
25
+ month: 'long',
26
+ day: 'numeric'
27
+ }),
28
+ logoSrc
29
+ } = config
30
+
31
+ // Build bottom left text - handle empty contact gracefully
32
+ const preparedForText = contact && contact.trim()
33
+ ? `Prepared for ${contact}`
34
+ : 'Prepared for You'
35
+
36
+ return {
37
+ sections: [
38
+ { type: 'text', content: company, variant: 'coverCompany' },
39
+ { type: 'text', content: vertical, variant: 'coverVertical' },
40
+ { type: 'text', content: solutions, variant: 'coverSolutions' }
41
+ ],
42
+ cover: {
43
+ topLeft: logoSrc ? { src: logoSrc, width: 34 } : undefined,
44
+ topRight: [{ type: 'text', content: 'AUTOMATION PROPOSAL', variant: 'caption' }],
45
+ centerContent: true,
46
+ bottomLeft: [{ type: 'text', content: preparedForText, variant: 'caption' }],
47
+ bottomRight: [{ type: 'text', content: date, variant: 'caption' }]
48
+ },
49
+ footer: false
50
+ }
51
+ }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * PDF Section Builders
3
+ *
4
+ * Composable section builders for creating styled PDF pages.
5
+ * Each builder takes content-only configuration and returns a Page object.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import {
10
+ * coverSection,
11
+ * summarySection,
12
+ * automationSection,
13
+ * summaryInvestmentSection // Combined section (recommended)
14
+ * } from '@repo/core/pdf/sections'
15
+ *
16
+ * // Recommended: 5-page layout with combined summary + investment
17
+ * const document: PDFDocument = {
18
+ * pages: [
19
+ * coverSection({ company: 'Acme', contact: 'John', vertical: 'Tech', solutions: 'Automation' }),
20
+ * summarySection({ totalSavings: 50000, automationCount: 2, description: '...' }),
21
+ * ...automations.map(a => automationSection(a)),
22
+ * summaryInvestmentSection({ automations, tier: 'tier2' }) // Combined final page
23
+ * ],
24
+ * metadata: { title: 'Proposal', author: 'Elevasis' }
25
+ * }
26
+ *
27
+ * // Legacy: 6-page layout with separate summary table and investment pages
28
+ * // Use tableSummarySection + investmentSection if you need them separate
29
+ * ```
30
+ */
31
+
32
+ // Section builders
33
+ export { coverSection } from './cover'
34
+ export { summarySection } from './summary'
35
+ export { automationSection } from './automation'
36
+ export { tableSummarySection } from './table-summary'
37
+ export { investmentSection } from './investment'
38
+ export { summaryInvestmentSection } from './summary-investment'
39
+ export { acceptanceSection } from './acceptance'
40
+
41
+ // Shared proposal document builder (used by sandbox, diagnostic, and production)
42
+ export {
43
+ buildProposalDocument,
44
+ generateExecutiveSummary,
45
+ type ProposalDocumentConfig
46
+ } from './proposal-document'
47
+
48
+ // Config types
49
+ export type {
50
+ CoverConfig,
51
+ SummaryConfig,
52
+ AutomationConfig,
53
+ TableSummaryConfig,
54
+ InvestmentConfig,
55
+ SummaryInvestmentConfig,
56
+ AcceptanceConfig
57
+ } from './types'
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Investment Section Builder
3
+ *
4
+ * Creates an investment and next steps page.
5
+ * Consumer provides content only; styling is handled internally.
6
+ */
7
+
8
+ import type { Page } from '../types'
9
+ import type { InvestmentConfig } from './types'
10
+
11
+ /** Tier descriptions for standard packages */
12
+ const TIER_DESCRIPTIONS: Record<string, string> = {
13
+ tier1: 'Tier 1: Essential Automation - $1,500-3,000/month',
14
+ tier2: 'Tier 2: Growth Automation - $3,000-5,000/month',
15
+ tier3: 'Tier 3: Enterprise Automation - $5,000-10,000/month',
16
+ custom: 'Custom Package - Tailored to your needs'
17
+ }
18
+
19
+ /** Default next steps if not provided */
20
+ const DEFAULT_NEXT_STEPS = [
21
+ 'Review this proposal and note any questions',
22
+ 'Schedule a follow-up call to discuss details',
23
+ "We'll provide a detailed SOW with timeline",
24
+ 'Begin implementation within 2 weeks of approval'
25
+ ]
26
+
27
+ /**
28
+ * Creates an investment page with tier info and next steps
29
+ *
30
+ * @param config - Content-only configuration
31
+ * @returns Page object ready for PDFDocument.pages array
32
+ */
33
+ export function investmentSection(config: InvestmentConfig): Page {
34
+ const {
35
+ tier,
36
+ customTierDescription,
37
+ nextSteps = DEFAULT_NEXT_STEPS,
38
+ contactCta = 'Questions? Reply to this email or book a call at elevasis.io/call'
39
+ } = config
40
+
41
+ const tierDescription = tier === 'custom' && customTierDescription
42
+ ? customTierDescription
43
+ : TIER_DESCRIPTIONS[tier]
44
+
45
+ return {
46
+ sections: [
47
+ {
48
+ type: 'card',
49
+ title: 'Recommended Package',
50
+ content: [
51
+ { type: 'text', content: tierDescription, variant: 'subtitle' }
52
+ ]
53
+ },
54
+ { type: 'text', content: 'Next Steps', variant: 'subtitle' },
55
+ {
56
+ type: 'list',
57
+ ordered: true,
58
+ items: nextSteps
59
+ },
60
+ {
61
+ type: 'text',
62
+ content: contactCta,
63
+ variant: 'caption'
64
+ }
65
+ ],
66
+ header: { title: 'Investment', variant: 'accent' },
67
+ footer: true
68
+ }
69
+ }