@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.
- package/dist/index.d.ts +435 -0
- package/dist/index.js +403 -0
- package/dist/organization-model/index.d.ts +435 -0
- package/dist/organization-model/index.js +403 -0
- package/package.json +62 -0
- package/src/README.md +34 -0
- package/src/__tests__/observability-exports.test.ts +36 -0
- package/src/__tests__/publish.test.ts +18 -0
- package/src/__tests__/template-foundations-compatibility.test.ts +34 -0
- package/src/auth/index.ts +8 -0
- package/src/auth/multi-tenancy/credentials/README.md +38 -0
- package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +216 -0
- package/src/auth/multi-tenancy/credentials/__tests__/service.test.ts +174 -0
- package/src/auth/multi-tenancy/credentials/index.ts +6 -0
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +39 -0
- package/src/auth/multi-tenancy/credentials/server/service.ts +60 -0
- package/src/auth/multi-tenancy/index.ts +17 -0
- package/src/auth/multi-tenancy/invitations/__tests__/invitation.test.ts +237 -0
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +107 -0
- package/src/auth/multi-tenancy/invitations/index.ts +38 -0
- package/src/auth/multi-tenancy/invitations/invitation.ts +86 -0
- package/src/auth/multi-tenancy/invitations/server/index.ts +25 -0
- package/src/auth/multi-tenancy/invitations/server/transforms.ts +24 -0
- package/src/auth/multi-tenancy/invitations/server/workos.ts +24 -0
- package/src/auth/multi-tenancy/invitations/supabase.ts +50 -0
- package/src/auth/multi-tenancy/memberships/__tests__/membership.test.ts +227 -0
- package/src/auth/multi-tenancy/memberships/__tests__/supabase-transforms.test.ts +88 -0
- package/src/auth/multi-tenancy/memberships/__tests__/workos-transforms.test.ts +139 -0
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +126 -0
- package/src/auth/multi-tenancy/memberships/index.ts +22 -0
- package/src/auth/multi-tenancy/memberships/membership.ts +138 -0
- package/src/auth/multi-tenancy/memberships/server/index.ts +15 -0
- package/src/auth/multi-tenancy/memberships/server/transforms.ts +32 -0
- package/src/auth/multi-tenancy/memberships/server/workos.ts +21 -0
- package/src/auth/multi-tenancy/memberships/supabase.ts +46 -0
- package/src/auth/multi-tenancy/organizations/__tests__/organization.test.ts +249 -0
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +128 -0
- package/src/auth/multi-tenancy/organizations/index.ts +23 -0
- package/src/auth/multi-tenancy/organizations/organization.ts +25 -0
- package/src/auth/multi-tenancy/organizations/server/index.ts +10 -0
- package/src/auth/multi-tenancy/organizations/server/transforms.ts +35 -0
- package/src/auth/multi-tenancy/organizations/server/workos.ts +20 -0
- package/src/auth/multi-tenancy/types.ts +89 -0
- package/src/auth/multi-tenancy/users/__tests__/user.test.ts +208 -0
- package/src/auth/multi-tenancy/users/api-schemas.ts +194 -0
- package/src/auth/multi-tenancy/users/index.ts +28 -0
- package/src/auth/multi-tenancy/users/server/index.ts +19 -0
- package/src/auth/multi-tenancy/users/server/transforms.ts +21 -0
- package/src/auth/multi-tenancy/users/server/workos.ts +16 -0
- package/src/auth/multi-tenancy/users/user.ts +65 -0
- package/src/business/acquisition/api-schemas.ts +759 -0
- package/src/business/acquisition/index.ts +109 -0
- package/src/business/acquisition/types.ts +400 -0
- package/src/business/crm/api-schemas.ts +75 -0
- package/src/business/delivery/index.ts +1 -0
- package/src/business/delivery/types.ts +89 -0
- package/src/business/index.ts +12 -0
- package/src/business/pdf/assets/ElevasisLogo.png +0 -0
- package/src/business/pdf/browser/image-utils.ts +74 -0
- package/src/business/pdf/browser/index.ts +16 -0
- package/src/business/pdf/browser/pdfmake-browser.ts +229 -0
- package/src/business/pdf/index.ts +10 -0
- package/src/business/pdf/sections/acceptance.ts +112 -0
- package/src/business/pdf/sections/automation.ts +56 -0
- package/src/business/pdf/sections/cover.ts +51 -0
- package/src/business/pdf/sections/index.ts +57 -0
- package/src/business/pdf/sections/investment.ts +69 -0
- package/src/business/pdf/sections/proposal-document.ts +200 -0
- package/src/business/pdf/sections/summary-investment.ts +124 -0
- package/src/business/pdf/sections/summary.ts +55 -0
- package/src/business/pdf/sections/table-summary.ts +59 -0
- package/src/business/pdf/sections/types.ts +124 -0
- package/src/business/pdf/server/__tests__/pdfmake-test.ts +219 -0
- package/src/business/pdf/server/index.ts +21 -0
- package/src/business/pdf/server/pdfmake-service.ts +237 -0
- package/src/business/pdf/server/themes/default.ts +8 -0
- package/src/business/pdf/server/themes/index.ts +9 -0
- package/src/business/pdf/server/themes/types.ts +8 -0
- package/src/business/pdf/shared/convert.ts +514 -0
- package/src/business/pdf/shared/index.ts +12 -0
- package/src/business/pdf/themes.ts +78 -0
- package/src/business/pdf/types.ts +272 -0
- package/src/business/seo/__tests__/linking.test.ts +549 -0
- package/src/business/seo/__tests__/types.test.ts +404 -0
- package/src/business/seo/index.ts +2 -0
- package/src/business/seo/linking.ts +281 -0
- package/src/business/seo/types.ts +199 -0
- package/src/commands/index.ts +8 -0
- package/src/commands/queue/index.ts +3 -0
- package/src/commands/queue/schemas.test.ts +593 -0
- package/src/commands/queue/schemas.ts +125 -0
- package/src/commands/queue/sse-events.ts +61 -0
- package/src/commands/queue/types/action.ts +52 -0
- package/src/commands/queue/types/checkpoint.ts +44 -0
- package/src/commands/queue/types/index.ts +7 -0
- package/src/commands/queue/types/task.ts +116 -0
- package/src/commands/queue/types.ts +14 -0
- package/src/content/distribution-metadata.ts +61 -0
- package/src/content/index.ts +10 -0
- package/src/deployments/index.ts +22 -0
- package/src/execution/calibration/__tests__/schemas.test.ts +320 -0
- package/src/execution/calibration/index.ts +3 -0
- package/src/execution/calibration/schemas.ts +121 -0
- package/src/execution/calibration/sse-events.ts +125 -0
- package/src/execution/calibration/types.ts +190 -0
- package/src/execution/core/__tests__/api-schemas.test.ts +667 -0
- package/src/execution/core/__tests__/archived-logs.test.ts +72 -0
- package/src/execution/core/api-schemas.ts +312 -0
- package/src/execution/core/index.ts +11 -0
- package/src/execution/core/resource-validator.test.ts +63 -0
- package/src/execution/core/runner-types.ts +80 -0
- package/src/execution/core/server/environment.ts +31 -0
- package/src/execution/core/sse-executions.ts +119 -0
- package/src/execution/core/types.ts +29 -0
- package/src/execution/engine/__tests__/fixtures/index.ts +2 -0
- package/src/execution/engine/__tests__/fixtures/mock-scenarios.ts +60 -0
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +85 -0
- package/src/execution/engine/__tests__/integration/agent-framework.integration.test.ts +1031 -0
- package/src/execution/engine/__tests__/timeout.test.ts +565 -0
- package/src/execution/engine/agent/__tests__/errors.test.ts +508 -0
- package/src/execution/engine/agent/actions/__tests__/processor.test.ts +531 -0
- package/src/execution/engine/agent/actions/executor.ts +205 -0
- package/src/execution/engine/agent/actions/navigate-knowledge-executor.ts +230 -0
- package/src/execution/engine/agent/actions/processor.ts +116 -0
- package/src/execution/engine/agent/actions/types.ts +70 -0
- package/src/execution/engine/agent/core/__tests__/agent.test.ts +614 -0
- package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +134 -0
- package/src/execution/engine/agent/core/agent.ts +810 -0
- package/src/execution/engine/agent/core/types.ts +155 -0
- package/src/execution/engine/agent/errors.ts +251 -0
- package/src/execution/engine/agent/index.ts +78 -0
- package/src/execution/engine/agent/knowledge-map/__tests__/navigate-knowledge-executor.test.ts +580 -0
- package/src/execution/engine/agent/knowledge-map/__tests__/utils.test.ts +622 -0
- package/src/execution/engine/agent/knowledge-map/types.ts +106 -0
- package/src/execution/engine/agent/knowledge-map/utils.ts +101 -0
- package/src/execution/engine/agent/memory/__tests__/domains.test.ts +72 -0
- package/src/execution/engine/agent/memory/__tests__/manager.test.ts +754 -0
- package/src/execution/engine/agent/memory/__tests__/utils.test.ts +285 -0
- package/src/execution/engine/agent/memory/domains.ts +99 -0
- package/src/execution/engine/agent/memory/manager.ts +365 -0
- package/src/execution/engine/agent/memory/processor.ts +66 -0
- package/src/execution/engine/agent/memory/types.ts +90 -0
- package/src/execution/engine/agent/memory/utils.ts +134 -0
- package/src/execution/engine/agent/observability/logging.ts +467 -0
- package/src/execution/engine/agent/observability/types.ts +64 -0
- package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +209 -0
- package/src/execution/engine/agent/reasoning/adapters/agent-adapter-helpers.ts +349 -0
- package/src/execution/engine/agent/reasoning/processor.ts +92 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/base-actions.ts +134 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/completion.ts +49 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/knowledge-map.ts +93 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/memory.ts +65 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/security.ts +32 -0
- package/src/execution/engine/agent/reasoning/prompt-sections/tools.ts +44 -0
- package/src/execution/engine/agent/reasoning/request-builder.ts +169 -0
- package/src/execution/engine/agent/reasoning/types.ts +18 -0
- package/src/execution/engine/base/__tests__/errors.test.ts +246 -0
- package/src/execution/engine/base/__tests__/serialization.test.ts +670 -0
- package/src/execution/engine/base/__tests__/utils.test.ts +45 -0
- package/src/execution/engine/base/errors.ts +118 -0
- package/src/execution/engine/base/index.ts +2 -0
- package/src/execution/engine/base/logging.ts +31 -0
- package/src/execution/engine/base/serialization.ts +324 -0
- package/src/execution/engine/base/types.ts +126 -0
- package/src/execution/engine/base/utils.ts +41 -0
- package/src/execution/engine/index.ts +440 -0
- package/src/execution/engine/interface/index.ts +1 -0
- package/src/execution/engine/interface/types.ts +62 -0
- package/src/execution/engine/llm/__tests__/errors.test.ts +318 -0
- package/src/execution/engine/llm/__tests__/input-sanitizer.test.ts +286 -0
- package/src/execution/engine/llm/__tests__/model-info.test.ts +50 -0
- package/src/execution/engine/llm/__tests__/model-validation.test.ts +321 -0
- package/src/execution/engine/llm/__tests__/response-schema-validator.test.ts +115 -0
- package/src/execution/engine/llm/adapters/__tests__/adapter-factory.test.ts +375 -0
- package/src/execution/engine/llm/adapters/__tests__/anthropic-adapter.test.ts +463 -0
- package/src/execution/engine/llm/adapters/__tests__/anthropic.integration.test.ts +177 -0
- package/src/execution/engine/llm/adapters/__tests__/circuit-breaker-error.test.ts +94 -0
- package/src/execution/engine/llm/adapters/__tests__/google-adapter.test.ts +722 -0
- package/src/execution/engine/llm/adapters/__tests__/google.integration.test.ts +376 -0
- package/src/execution/engine/llm/adapters/__tests__/mock-adapter.test.ts +432 -0
- package/src/execution/engine/llm/adapters/__tests__/openai-adapter.test.ts +551 -0
- package/src/execution/engine/llm/adapters/__tests__/openrouter-adapter.test.ts +563 -0
- package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +105 -0
- package/src/execution/engine/llm/adapters/__tests__/universal-adapter.test.ts +537 -0
- package/src/execution/engine/llm/adapters/circuit-breaker.ts +147 -0
- package/src/execution/engine/llm/adapters/index.ts +17 -0
- package/src/execution/engine/llm/adapters/mock-adapter.ts +116 -0
- package/src/execution/engine/llm/adapters/server/adapter-factory.ts +130 -0
- package/src/execution/engine/llm/adapters/server/anthropic.ts +137 -0
- package/src/execution/engine/llm/adapters/server/compose-signal.ts +18 -0
- package/src/execution/engine/llm/adapters/server/google.ts +283 -0
- package/src/execution/engine/llm/adapters/server/index.ts +12 -0
- package/src/execution/engine/llm/adapters/server/openai.ts +206 -0
- package/src/execution/engine/llm/adapters/server/openrouter.ts +235 -0
- package/src/execution/engine/llm/adapters/universal-adapter.ts +230 -0
- package/src/execution/engine/llm/errors.ts +186 -0
- package/src/execution/engine/llm/input-sanitizer.ts +129 -0
- package/src/execution/engine/llm/model-info.ts +332 -0
- package/src/execution/engine/llm/response-schema-validator.ts +113 -0
- package/src/execution/engine/llm/types.ts +86 -0
- package/src/execution/engine/test-utils/index.ts +6 -0
- package/src/execution/engine/test-utils/mocks.ts +56 -0
- package/src/execution/engine/tools/__tests__/tooling-error.test.ts +265 -0
- package/src/execution/engine/tools/__tests__/types.test.ts +47 -0
- package/src/execution/engine/tools/integration/base-integration-adapter.ts +50 -0
- package/src/execution/engine/tools/integration/index.ts +53 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-adapter.ts +73 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts +209 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-company-email/index.ts +82 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-decision-maker-email/index.ts +122 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-person-email/index.ts +89 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/verify-email/index.ts +84 -0
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/index.ts +16 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +293 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +100 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-tools.ts +217 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/get-dataset-items/index.ts +92 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/run-actor/index.ts +218 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/start-actor/index.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/apify/index.ts +11 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +362 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-adapter.ts +162 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-tools.ts +594 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/README.md +632 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-attribute/index.ts +214 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-note/index.ts +152 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-record/index.ts +141 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-note/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-record/index.ts +105 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +186 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.ts +118 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-attributes/index.ts +165 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-notes/index.ts +96 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-objects/index.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +338 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.ts +156 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-attribute/index.ts +220 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-record/index.ts +140 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/utils/types.ts +147 -0
- package/src/execution/engine/tools/integration/server/adapters/attio/index.ts +31 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/__tests__/dropbox-adapter.test.ts +409 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-adapter.ts +281 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/dropbox-tools.ts +106 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/__tests__/index.test.ts +451 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/create-folder/index.ts +114 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/__tests__/index.test.ts +415 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/fetch/upload-file/index.ts +111 -0
- package/src/execution/engine/tools/integration/server/adapters/dropbox/index.ts +25 -0
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +210 -0
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-adapter.ts +1189 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-tools.ts +641 -0
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/index.ts +18 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/activate-campaign/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/__tests__/index.test.ts +289 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/index.ts +154 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/__tests__/index.test.ts +325 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/index.ts +153 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-delete-leads/index.ts +84 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-campaign/index.ts +125 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-inbox-test/index.ts +107 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/delete-campaign/index.ts +85 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-account-health/index.ts +91 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign/index.ts +92 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/__tests__/index.test.ts +195 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/index.ts +113 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-daily-campaign-analytics/index.ts +104 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-emails/index.ts +155 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/__tests__/index.test.ts +196 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/__tests__/index.test.ts +189 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/index.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-leads/index.ts +112 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/patch-lead/index.ts +76 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/pause-campaign/index.ts +86 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/remove-from-subsequence/index.ts +98 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/send-reply/index.ts +126 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/__tests__/index.test.ts +193 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/index.ts +99 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/__tests__/index.test.ts +621 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/index.ts +125 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/index.ts +29 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-adapter.ts +178 -0
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1473 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/check-credits/index.ts +59 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/verify-email/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/index.ts +17 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-adapter.ts +80 -0
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/get-email/index.ts +102 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +134 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +75 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/index.ts +27 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-adapter.ts +108 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-tools.ts +132 -0
- package/src/execution/engine/tools/integration/server/adapters/resend/types.ts +44 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/create-envelope/index.ts +274 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/download-document/index.ts +230 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/get-envelope/index.ts +133 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/utils/types.ts +246 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/void-envelope/index.ts +90 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/index.ts +38 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-adapter.ts +87 -0
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +179 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/fetch/utils/types.ts +210 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/index.ts +44 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-adapter.ts +517 -0
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +309 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts +133 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts +122 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts +111 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/index.ts +11 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-adapter.ts +78 -0
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-tools.ts +222 -0
- package/src/execution/engine/tools/integration/server/index.ts +61 -0
- package/src/execution/engine/tools/integration/service.ts +161 -0
- package/src/execution/engine/tools/integration/tool.ts +253 -0
- package/src/execution/engine/tools/integration/types/anymailfinder.ts +74 -0
- package/src/execution/engine/tools/integration/types/apify.ts +92 -0
- package/src/execution/engine/tools/integration/types/attio.ts +354 -0
- package/src/execution/engine/tools/integration/types/dropbox.ts +64 -0
- package/src/execution/engine/tools/integration/types/gmail.ts +35 -0
- package/src/execution/engine/tools/integration/types/google-sheets.ts +303 -0
- package/src/execution/engine/tools/integration/types/index.ts +19 -0
- package/src/execution/engine/tools/integration/types/instantly.ts +557 -0
- package/src/execution/engine/tools/integration/types/millionverifier.ts +56 -0
- package/src/execution/engine/tools/integration/types/resend.ts +63 -0
- package/src/execution/engine/tools/integration/types/signature-api.ts +164 -0
- package/src/execution/engine/tools/integration/types/stripe.ts +162 -0
- package/src/execution/engine/tools/integration/types/tomba.ts +94 -0
- package/src/execution/engine/tools/lead-service-types.ts +884 -0
- package/src/execution/engine/tools/llm/index.ts +11 -0
- package/src/execution/engine/tools/llm/server/index.ts +8 -0
- package/src/execution/engine/tools/llm/server/llm-call-tool.ts +118 -0
- package/src/execution/engine/tools/platform/__tests__/approval.test.ts +242 -0
- package/src/execution/engine/tools/platform/__tests__/email.test.ts +482 -0
- package/src/execution/engine/tools/platform/__tests__/hitl-cancel.test.ts +97 -0
- package/src/execution/engine/tools/platform/__tests__/notification.test.ts +208 -0
- package/src/execution/engine/tools/platform/__tests__/pdf.test.ts +441 -0
- package/src/execution/engine/tools/platform/__tests__/scheduler.test.ts +189 -0
- package/src/execution/engine/tools/platform/__tests__/schedules.test.ts +336 -0
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +248 -0
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +319 -0
- package/src/execution/engine/tools/platform/acquisition/index.ts +43 -0
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +148 -0
- package/src/execution/engine/tools/platform/acquisition/types.ts +260 -0
- package/src/execution/engine/tools/platform/approval/cancel-by-metadata.ts +65 -0
- package/src/execution/engine/tools/platform/approval/index.ts +4 -0
- package/src/execution/engine/tools/platform/approval/tool.ts +99 -0
- package/src/execution/engine/tools/platform/email/index.ts +122 -0
- package/src/execution/engine/tools/platform/email/types.ts +96 -0
- package/src/execution/engine/tools/platform/index.ts +181 -0
- package/src/execution/engine/tools/platform/notification.ts +81 -0
- package/src/execution/engine/tools/platform/pdf/index.ts +110 -0
- package/src/execution/engine/tools/platform/pdf/types.ts +77 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/edge-cases.test.ts +507 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/resource-invocation-service.test.ts +500 -0
- package/src/execution/engine/tools/platform/resource-invocation/__tests__/tool.test.ts +555 -0
- package/src/execution/engine/tools/platform/resource-invocation/dynamic-tool.ts +94 -0
- package/src/execution/engine/tools/platform/resource-invocation/index.ts +14 -0
- package/src/execution/engine/tools/platform/resource-invocation/resource-invocation-service.ts +147 -0
- package/src/execution/engine/tools/platform/resource-invocation/tool.ts +115 -0
- package/src/execution/engine/tools/platform/resource-invocation/types.ts +31 -0
- package/src/execution/engine/tools/platform/scheduler.ts +87 -0
- package/src/execution/engine/tools/platform/schedules/cancel-by-key-tool.ts +48 -0
- package/src/execution/engine/tools/platform/schedules/cancel-by-metadata-tool.ts +42 -0
- package/src/execution/engine/tools/platform/schedules/delete-by-key-tool.ts +43 -0
- package/src/execution/engine/tools/platform/schedules/index.ts +13 -0
- package/src/execution/engine/tools/platform/schedules/list-tool.ts +56 -0
- package/src/execution/engine/tools/platform/schedules/types.ts +88 -0
- package/src/execution/engine/tools/platform/storage/__tests__/storage.test.ts +998 -0
- package/src/execution/engine/tools/platform/storage/index.ts +370 -0
- package/src/execution/engine/tools/platform/storage/types.ts +128 -0
- package/src/execution/engine/tools/platform/types.ts +148 -0
- package/src/execution/engine/tools/registry.ts +590 -0
- package/src/execution/engine/tools/tool-maps.ts +694 -0
- package/src/execution/engine/tools/types.ts +233 -0
- package/src/execution/engine/workflow/__tests__/errors.test.ts +139 -0
- package/src/execution/engine/workflow/__tests__/utils.test.ts +645 -0
- package/src/execution/engine/workflow/__tests__/workflow.test.ts +818 -0
- package/src/execution/engine/workflow/errors.ts +63 -0
- package/src/execution/engine/workflow/helpers/index.ts +11 -0
- package/src/execution/engine/workflow/helpers/server/index.ts +8 -0
- package/src/execution/engine/workflow/helpers/server/llm-call.ts +93 -0
- package/src/execution/engine/workflow/index.ts +19 -0
- package/src/execution/engine/workflow/log-truncate.ts +26 -0
- package/src/execution/engine/workflow/logging.ts +191 -0
- package/src/execution/engine/workflow/types.ts +183 -0
- package/src/execution/engine/workflow/utils.ts +280 -0
- package/src/execution/engine/workflow/workflow.ts +168 -0
- package/src/execution/index.ts +20 -0
- package/src/execution/scheduler/__tests__/api-schemas.test.ts +733 -0
- package/src/execution/scheduler/__tests__/retry.test.ts +37 -0
- package/src/execution/scheduler/__tests__/utils.test.ts +1009 -0
- package/src/execution/scheduler/api-schemas.ts +296 -0
- package/src/execution/scheduler/index.ts +50 -0
- package/src/execution/scheduler/schemas.ts +264 -0
- package/src/execution/scheduler/types.ts +111 -0
- package/src/execution/scheduler/utils.ts +364 -0
- package/src/forms/index.ts +7 -0
- package/src/forms/schemas.test.ts +113 -0
- package/src/forms/schemas.ts +69 -0
- package/src/forms/types.ts +70 -0
- package/src/index.ts +54 -0
- package/src/integrations/credentials/__tests__/api-schemas.test.ts +496 -0
- package/src/integrations/credentials/__tests__/schemas.test.ts +82 -0
- package/src/integrations/credentials/__tests__/utils.test.ts +144 -0
- package/src/integrations/credentials/api-schemas.ts +143 -0
- package/src/integrations/credentials/index.ts +32 -0
- package/src/integrations/credentials/schemas.ts +164 -0
- package/src/integrations/credentials/utils.ts +59 -0
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +59 -0
- package/src/integrations/oauth/api-schemas.ts +92 -0
- package/src/integrations/oauth/index.ts +19 -0
- package/src/integrations/oauth/provider-registry.ts +61 -0
- package/src/integrations/oauth/server/__tests__/refresh-concurrent.test.ts +183 -0
- package/src/integrations/oauth/server/__tests__/refresh.integration.test.ts +257 -0
- package/src/integrations/oauth/server/__tests__/refresh.test.ts +577 -0
- package/src/integrations/oauth/server/credentials.ts +39 -0
- package/src/integrations/oauth/server/refresh.ts +214 -0
- package/src/integrations/oauth/types.ts +34 -0
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +318 -0
- package/src/integrations/webhook-endpoints/api-schemas.ts +102 -0
- package/src/integrations/webhook-endpoints/index.ts +28 -0
- package/src/integrations/webhook-endpoints/types.ts +51 -0
- package/src/operations/activities/api-schemas.ts +79 -0
- package/src/operations/activities/index.ts +9 -0
- package/src/operations/activities/sse-events.ts +30 -0
- package/src/operations/activities/types.ts +63 -0
- package/src/operations/debug-logs/client.ts +60 -0
- package/src/operations/debug-logs/debug-logger.ts +83 -0
- package/src/operations/debug-logs/index.ts +8 -0
- package/src/operations/debug-logs/server.ts +19 -0
- package/src/operations/debug-logs/types.ts +33 -0
- package/src/operations/index.ts +50 -0
- package/src/operations/notifications/__tests__/api-schemas.test.ts +216 -0
- package/src/operations/notifications/api-schemas.ts +91 -0
- package/src/operations/notifications/index.ts +3 -0
- package/src/operations/notifications/sse-events.ts +21 -0
- package/src/operations/notifications/types.ts +47 -0
- package/src/operations/observability/__tests__/openrouter-cost-flow.test.ts +297 -0
- package/src/operations/observability/__tests__/schemas.test.ts +151 -0
- package/src/operations/observability/__tests__/types.test.ts +109 -0
- package/src/operations/observability/__tests__/utils.test.ts +54 -0
- package/src/operations/observability/ai-usage-collector.ts +64 -0
- package/src/operations/observability/index.ts +13 -0
- package/src/operations/observability/metrics-collector.ts +49 -0
- package/src/operations/observability/schemas.ts +39 -0
- package/src/operations/observability/types.ts +463 -0
- package/src/operations/observability/utils.ts +77 -0
- package/src/operations/sessions/__tests__/api-schemas.test.ts +361 -0
- package/src/operations/sessions/__tests__/manager.test.ts +821 -0
- package/src/operations/sessions/api-schemas.ts +166 -0
- package/src/operations/sessions/index.ts +26 -0
- package/src/operations/sessions/server/manager.ts +90 -0
- package/src/operations/sessions/server/session.ts +180 -0
- package/src/operations/sessions/types.ts +98 -0
- package/src/operations/triggers/index.ts +12 -0
- package/src/operations/triggers/webhook/definitions/__tests__/instantly-reply-received.test.ts +72 -0
- package/src/operations/triggers/webhook/definitions/instantly-account-error.ts +44 -0
- package/src/operations/triggers/webhook/definitions/instantly-auto-reply-received.ts +51 -0
- package/src/operations/triggers/webhook/definitions/instantly-campaign-completed.ts +45 -0
- package/src/operations/triggers/webhook/definitions/instantly-email-bounced.ts +49 -0
- package/src/operations/triggers/webhook/definitions/instantly-lead-unsubscribed.ts +45 -0
- package/src/operations/triggers/webhook/definitions/instantly-reply-received.ts +54 -0
- package/src/operations/triggers/webhook/index.ts +35 -0
- package/src/operations/triggers/webhook/types.ts +74 -0
- package/src/organization-model/README.md +79 -0
- package/src/organization-model/__tests__/graph.test.ts +250 -0
- package/src/organization-model/__tests__/resolve.test.ts +47 -0
- package/src/organization-model/defaults.ts +60 -0
- package/src/organization-model/domains/branding.ts +22 -0
- package/src/organization-model/domains/crm.ts +46 -0
- package/src/organization-model/domains/delivery.ts +48 -0
- package/src/organization-model/domains/features.ts +57 -0
- package/src/organization-model/domains/lead-gen.ts +33 -0
- package/src/organization-model/domains/navigation.ts +103 -0
- package/src/organization-model/domains/shared.ts +42 -0
- package/src/organization-model/graph/build.ts +432 -0
- package/src/organization-model/graph/index.ts +4 -0
- package/src/organization-model/graph/schema.ts +50 -0
- package/src/organization-model/graph/types.ts +52 -0
- package/src/organization-model/index.ts +11 -0
- package/src/organization-model/published.ts +18 -0
- package/src/organization-model/resolve.ts +42 -0
- package/src/organization-model/schema.ts +21 -0
- package/src/organization-model/types.ts +27 -0
- package/src/platform/api/index.ts +1 -0
- package/src/platform/api/types.ts +35 -0
- package/src/platform/constants/http.ts +37 -0
- package/src/platform/constants/index.ts +5 -0
- package/src/platform/constants/limits.ts +32 -0
- package/src/platform/constants/resilience.ts +51 -0
- package/src/platform/constants/timeouts.ts +20 -0
- package/src/platform/constants/versions.ts +3 -0
- package/src/platform/index.ts +27 -0
- package/src/platform/registry/__tests__/command-view.test.ts +410 -0
- package/src/platform/registry/__tests__/resource-registry-static.test.ts +347 -0
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +1004 -0
- package/src/platform/registry/__tests__/resource-registry.list-executable.test.ts +393 -0
- package/src/platform/registry/__tests__/resource-registry.test.ts +1942 -0
- package/src/platform/registry/__tests__/serialization.test.ts +1127 -0
- package/src/platform/registry/__tests__/validation.test.ts +1086 -0
- package/src/platform/registry/command-view.ts +180 -0
- package/src/platform/registry/domains.ts +165 -0
- package/src/platform/registry/index.ts +93 -0
- package/src/platform/registry/reserved.ts +24 -0
- package/src/platform/registry/resource-metadata.ts +59 -0
- package/src/platform/registry/resource-registry.command-queue-groups.test.ts +129 -0
- package/src/platform/registry/resource-registry.ts +788 -0
- package/src/platform/registry/serialization.ts +273 -0
- package/src/platform/registry/serialized-types.ts +231 -0
- package/src/platform/registry/stats-types.ts +66 -0
- package/src/platform/registry/types.ts +404 -0
- package/src/platform/registry/validation.ts +513 -0
- package/src/platform/resilience/__tests__/circuit-breaker.test.ts +291 -0
- package/src/platform/resilience/__tests__/http-error-mapper.test.ts +173 -0
- package/src/platform/resilience/__tests__/rate-limiter.test.ts +471 -0
- package/src/platform/resilience/__tests__/retry.test.ts +380 -0
- package/src/platform/resilience/__tests__/timeout.test.ts +219 -0
- package/src/platform/resilience/circuit-breaker.ts +164 -0
- package/src/platform/resilience/errors.ts +68 -0
- package/src/platform/resilience/http-error-mapper.ts +129 -0
- package/src/platform/resilience/index.ts +93 -0
- package/src/platform/resilience/rate-limiter-types.ts +46 -0
- package/src/platform/resilience/rate-limiter.ts +140 -0
- package/src/platform/resilience/retry.ts +89 -0
- package/src/platform/resilience/timeout.ts +63 -0
- package/src/platform/sse/events.ts +67 -0
- package/src/platform/sse/index.ts +7 -0
- package/src/platform/utils/__tests__/currency.test.ts +77 -0
- package/src/platform/utils/__tests__/validation.test.ts +1083 -0
- package/src/platform/utils/currency.ts +96 -0
- package/src/platform/utils/debounce.ts +52 -0
- package/src/platform/utils/error.ts +42 -0
- package/src/platform/utils/hmac.test.ts +97 -0
- package/src/platform/utils/index.ts +32 -0
- package/src/platform/utils/server/betterstack-logger.ts +210 -0
- package/src/platform/utils/server/hmac.ts +44 -0
- package/src/platform/utils/server/unsubscribe.ts +111 -0
- package/src/platform/utils/token-counter.ts +96 -0
- package/src/platform/utils/validation.ts +425 -0
- package/src/projects/api-schemas.ts +265 -0
- package/src/published.ts +1 -0
- package/src/server.ts +273 -0
- package/src/supabase/__tests__/helpers.test.ts +51 -0
- package/src/supabase/database.types.ts +2674 -0
- package/src/supabase/helpers.ts +20 -0
- package/src/supabase/index.ts +52 -0
- package/src/supabase/server/client.ts +58 -0
- package/src/test-utils/README.md +150 -0
- package/src/test-utils/browser-mocks.ts +54 -0
- package/src/test-utils/fixtures/api-keys.ts +52 -0
- package/src/test-utils/fixtures/index.ts +4 -0
- package/src/test-utils/fixtures/memberships.ts +80 -0
- package/src/test-utils/fixtures/organizations.ts +69 -0
- package/src/test-utils/fixtures/users.ts +79 -0
- package/src/test-utils/index.ts +11 -0
- package/src/test-utils/mocks/index.ts +2 -0
- package/src/test-utils/mocks/supabase.ts +142 -0
- package/src/test-utils/mocks/workos.ts +108 -0
- package/src/test-utils/rls/RLSTestContext.ts +586 -0
- package/src/test-utils/rls/index.ts +1 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Proposal Document Builder
|
|
3
|
+
*
|
|
4
|
+
* Standardized document builder used across:
|
|
5
|
+
* - Production proposal agent (document.ts)
|
|
6
|
+
* - Render PDF diagnostic (render-pdf.ts)
|
|
7
|
+
* - PDF Sandbox (page.tsx)
|
|
8
|
+
*
|
|
9
|
+
* Changes to the page structure here propagate to all consumers automatically.
|
|
10
|
+
*
|
|
11
|
+
* Page Structure:
|
|
12
|
+
* 1. Cover page
|
|
13
|
+
* 2. Executive Summary (with paragraph support)
|
|
14
|
+
* 3. Automation pages (one per automation)
|
|
15
|
+
* 4. Summary + Investment (combined)
|
|
16
|
+
* 5. Acceptance (signature page)
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { PDFDocument, Page } from '../types'
|
|
20
|
+
import { coverSection } from './cover'
|
|
21
|
+
import { summarySection } from './summary'
|
|
22
|
+
import { automationSection } from './automation'
|
|
23
|
+
import { summaryInvestmentSection } from './summary-investment'
|
|
24
|
+
import { acceptanceSection } from './acceptance'
|
|
25
|
+
import type { AutomationConfig } from './types'
|
|
26
|
+
|
|
27
|
+
// =============================================================================
|
|
28
|
+
// Types
|
|
29
|
+
// =============================================================================
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Standardized proposal document configuration
|
|
33
|
+
*
|
|
34
|
+
* All fields required for building a complete proposal PDF.
|
|
35
|
+
* Used by production, diagnostic, and sandbox.
|
|
36
|
+
*/
|
|
37
|
+
export interface ProposalDocumentConfig {
|
|
38
|
+
// Cover page fields
|
|
39
|
+
/** Company name (appears on cover and acceptance) */
|
|
40
|
+
company: string
|
|
41
|
+
/** Contact name (appears on cover and acceptance) */
|
|
42
|
+
contact: string
|
|
43
|
+
/** Business vertical (e.g., "Marketing & Creative Agency") */
|
|
44
|
+
vertical: string
|
|
45
|
+
/** Solutions summary (e.g., "Client reporting - Content workflows") */
|
|
46
|
+
solutions: string
|
|
47
|
+
/** Logo as base64 data URL (optional) */
|
|
48
|
+
logoSrc?: string
|
|
49
|
+
|
|
50
|
+
// Executive summary
|
|
51
|
+
/** Executive summary text - supports paragraph breaks via \n\n */
|
|
52
|
+
executiveSummary: string
|
|
53
|
+
|
|
54
|
+
// Automations (each becomes a detail page)
|
|
55
|
+
/** Automation configurations - each generates one page */
|
|
56
|
+
automations: AutomationConfig[]
|
|
57
|
+
|
|
58
|
+
// Acceptance page
|
|
59
|
+
/** Service tier for acceptance page */
|
|
60
|
+
tier: 'tier1' | 'tier2' | 'tier3' | 'custom'
|
|
61
|
+
/** Initial fee amount in dollars (one-time implementation fee) */
|
|
62
|
+
initialFee: number
|
|
63
|
+
/** Monthly fee amount in dollars (optional, for ongoing support) */
|
|
64
|
+
monthlyFee?: number
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// =============================================================================
|
|
68
|
+
// Builder
|
|
69
|
+
// =============================================================================
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Build a standardized proposal PDF document
|
|
73
|
+
*
|
|
74
|
+
* Creates the standard 6+ page proposal structure:
|
|
75
|
+
* 1. Cover page with company branding
|
|
76
|
+
* 2. Executive Summary with key metrics
|
|
77
|
+
* 3-N. Automation detail pages (one per automation)
|
|
78
|
+
* N+1. Summary table + Investment (combined)
|
|
79
|
+
* N+2. Acceptance page with signature fields
|
|
80
|
+
*
|
|
81
|
+
* @param config - Proposal document configuration
|
|
82
|
+
* @returns PDFDocument ready for rendering
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* import { buildProposalDocument } from '@repo/core/pdf/sections'
|
|
87
|
+
*
|
|
88
|
+
* const document = buildProposalDocument({
|
|
89
|
+
* company: 'Acme Corp',
|
|
90
|
+
* contact: 'John Smith',
|
|
91
|
+
* vertical: 'Marketing Agency',
|
|
92
|
+
* solutions: 'Reporting - Invoicing',
|
|
93
|
+
* executiveSummary: 'Based on our discovery call...',
|
|
94
|
+
* automations: [
|
|
95
|
+
* { title: 'Client Reporting', hoursPerWeek: 12, annualSavings: 31200, ... }
|
|
96
|
+
* ],
|
|
97
|
+
* tier: 'tier2',
|
|
98
|
+
* initialFee: 5000,
|
|
99
|
+
* monthlyFee: 2500 // optional
|
|
100
|
+
* })
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export function buildProposalDocument(config: ProposalDocumentConfig): PDFDocument {
|
|
104
|
+
const {
|
|
105
|
+
company,
|
|
106
|
+
contact,
|
|
107
|
+
vertical,
|
|
108
|
+
solutions,
|
|
109
|
+
logoSrc,
|
|
110
|
+
executiveSummary,
|
|
111
|
+
automations,
|
|
112
|
+
tier,
|
|
113
|
+
initialFee,
|
|
114
|
+
monthlyFee
|
|
115
|
+
} = config
|
|
116
|
+
|
|
117
|
+
// Calculate totals for metrics
|
|
118
|
+
const totalSavings = automations.reduce((sum, a) => sum + a.annualSavings, 0)
|
|
119
|
+
|
|
120
|
+
// Build page array
|
|
121
|
+
const pages: Page[] = [
|
|
122
|
+
// Page 1: Cover
|
|
123
|
+
coverSection({
|
|
124
|
+
company,
|
|
125
|
+
contact,
|
|
126
|
+
vertical,
|
|
127
|
+
solutions,
|
|
128
|
+
logoSrc
|
|
129
|
+
}),
|
|
130
|
+
|
|
131
|
+
// Page 2: Executive Summary
|
|
132
|
+
summarySection({
|
|
133
|
+
totalSavings,
|
|
134
|
+
automationCount: automations.length,
|
|
135
|
+
description: executiveSummary
|
|
136
|
+
}),
|
|
137
|
+
|
|
138
|
+
// Pages 3-N: Automation details (one per automation)
|
|
139
|
+
...automations.map(automation => automationSection(automation)),
|
|
140
|
+
|
|
141
|
+
// Page N+1: Combined Summary Table + Investment
|
|
142
|
+
summaryInvestmentSection({
|
|
143
|
+
automations: automations.map(a => ({
|
|
144
|
+
title: a.title,
|
|
145
|
+
hoursPerWeek: a.hoursPerWeek,
|
|
146
|
+
annualSavings: a.annualSavings
|
|
147
|
+
})),
|
|
148
|
+
initialFee,
|
|
149
|
+
monthlyFee
|
|
150
|
+
}),
|
|
151
|
+
|
|
152
|
+
// Page N+2: Acceptance (signature fields)
|
|
153
|
+
acceptanceSection({
|
|
154
|
+
companyName: company,
|
|
155
|
+
contactName: contact,
|
|
156
|
+
tier,
|
|
157
|
+
initialFee,
|
|
158
|
+
monthlyFee
|
|
159
|
+
})
|
|
160
|
+
]
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
pages,
|
|
164
|
+
metadata: {
|
|
165
|
+
title: `Proposal for ${company}`,
|
|
166
|
+
author: 'Elevasis'
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// =============================================================================
|
|
172
|
+
// Helper for generating executive summary text
|
|
173
|
+
// =============================================================================
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Generate standard 3-paragraph executive summary
|
|
177
|
+
*
|
|
178
|
+
* Creates consistent narrative structure:
|
|
179
|
+
* - Paragraph 1: Problem statement with cost impact
|
|
180
|
+
* - Paragraph 2: Solution overview with human oversight emphasis
|
|
181
|
+
* - Paragraph 3: Projected ROI and implementation timeline
|
|
182
|
+
*
|
|
183
|
+
* @param config - Summary generation parameters
|
|
184
|
+
* @returns Executive summary with paragraph breaks (\n\n)
|
|
185
|
+
*/
|
|
186
|
+
export function generateExecutiveSummary(config: {
|
|
187
|
+
contact: string
|
|
188
|
+
company: string
|
|
189
|
+
totalSavings: number
|
|
190
|
+
totalHoursPerWeek: number
|
|
191
|
+
automationCount: number
|
|
192
|
+
}): string {
|
|
193
|
+
const { contact, company, totalSavings, totalHoursPerWeek, automationCount } = config
|
|
194
|
+
|
|
195
|
+
return `${contact}, your team at ${company} is caught in a cycle of inefficiency that's quietly draining $${totalSavings.toLocaleString()} annually from your bottom line. These aren't just administrative headaches - they're opportunities slipping through the cracks, relationships strained by delays, and time wasted on tasks that could run themselves.
|
|
196
|
+
|
|
197
|
+
This proposal outlines ${automationCount} targeted automations designed specifically for ${company}'s workflow. Each solution maintains human oversight at critical decision points while eliminating the repetitive tasks consuming your team's time. We're not replacing your people - we're freeing them to focus on what they do best.
|
|
198
|
+
|
|
199
|
+
The projected annual savings of $${totalSavings.toLocaleString()} represents 70% of the cost you're currently losing to manual processes. More importantly, reclaiming ${totalHoursPerWeek} hours per week means your team can take on more work without burning out. The automations outlined here can be implemented within 2-3 weeks of approval.`
|
|
200
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summary + Investment Combined Section Builder
|
|
3
|
+
*
|
|
4
|
+
* Creates a single page combining the summary table with investment details.
|
|
5
|
+
* Consolidates two sparse pages into one efficient layout.
|
|
6
|
+
*
|
|
7
|
+
* Layout:
|
|
8
|
+
* - Summary table (automations with hours/savings)
|
|
9
|
+
* - Totals metrics card
|
|
10
|
+
* - Projection disclaimer
|
|
11
|
+
* - Next steps
|
|
12
|
+
* - Contact CTA
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { Page } from '../types'
|
|
16
|
+
import type { SummaryInvestmentConfig } from './types'
|
|
17
|
+
|
|
18
|
+
/** Savings rate used for projections (matches ROI calculator) */
|
|
19
|
+
const SAVINGS_RATE_PERCENT = 70
|
|
20
|
+
|
|
21
|
+
/** Default next steps if not provided */
|
|
22
|
+
const DEFAULT_NEXT_STEPS = [
|
|
23
|
+
'Review this proposal and note any questions',
|
|
24
|
+
'Schedule a follow-up call to discuss details',
|
|
25
|
+
"We'll provide a detailed SOW with timeline",
|
|
26
|
+
'Begin implementation within 2 weeks of approval'
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Creates a combined summary and investment page
|
|
31
|
+
*
|
|
32
|
+
* This consolidates what was previously two separate pages:
|
|
33
|
+
* - Table summary (automation list with metrics)
|
|
34
|
+
* - Investment (tier + next steps)
|
|
35
|
+
*
|
|
36
|
+
* @param config - Content-only configuration
|
|
37
|
+
* @returns Page object ready for PDFDocument.pages array
|
|
38
|
+
*/
|
|
39
|
+
export function summaryInvestmentSection(config: SummaryInvestmentConfig): Page {
|
|
40
|
+
const {
|
|
41
|
+
automations,
|
|
42
|
+
initialFee,
|
|
43
|
+
monthlyFee,
|
|
44
|
+
nextSteps = DEFAULT_NEXT_STEPS,
|
|
45
|
+
contactCta = 'Questions? Reply to this email or book a call at elevasis.io/call'
|
|
46
|
+
} = config
|
|
47
|
+
|
|
48
|
+
// Calculate totals
|
|
49
|
+
const totalHoursPerWeek = automations.reduce((sum, a) => sum + a.hoursPerWeek, 0)
|
|
50
|
+
const totalAnnualSavings = automations.reduce((sum, a) => sum + a.annualSavings, 0)
|
|
51
|
+
|
|
52
|
+
// Format table rows
|
|
53
|
+
const tableRows = automations.map(a => [
|
|
54
|
+
a.title,
|
|
55
|
+
String(a.hoursPerWeek),
|
|
56
|
+
`$${a.annualSavings.toLocaleString()}`
|
|
57
|
+
])
|
|
58
|
+
|
|
59
|
+
// Footer row with totals
|
|
60
|
+
const footerRow = [
|
|
61
|
+
'Projected Savings',
|
|
62
|
+
String(totalHoursPerWeek),
|
|
63
|
+
`$${totalAnnualSavings.toLocaleString()}`
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
// Build pricing metrics (always show initial fee, conditionally show monthly fee)
|
|
67
|
+
const pricingMetrics: Array<{ type: 'metric'; value: string; label: string }> = [
|
|
68
|
+
{
|
|
69
|
+
type: 'metric',
|
|
70
|
+
value: `$${initialFee.toLocaleString()}`,
|
|
71
|
+
label: 'Initial Fee'
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
if (monthlyFee) {
|
|
76
|
+
pricingMetrics.push({
|
|
77
|
+
type: 'metric',
|
|
78
|
+
value: `$${monthlyFee.toLocaleString()}/mo`,
|
|
79
|
+
label: 'Monthly Fee'
|
|
80
|
+
})
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
sections: [
|
|
85
|
+
// Summary table with totals row
|
|
86
|
+
{
|
|
87
|
+
type: 'table',
|
|
88
|
+
headers: ['Automation', 'Hrs/Week Saved', 'Proj. Annual Savings'],
|
|
89
|
+
rows: tableRows,
|
|
90
|
+
footerRow,
|
|
91
|
+
columnWidths: ['*', 100, 120]
|
|
92
|
+
},
|
|
93
|
+
// Projection disclaimer
|
|
94
|
+
{
|
|
95
|
+
type: 'text',
|
|
96
|
+
content: `*Projections based on ${SAVINGS_RATE_PERCENT}% efficiency improvement, a conservative estimate for automation ROI. Actual results may vary based on implementation specifics.`,
|
|
97
|
+
variant: 'caption'
|
|
98
|
+
},
|
|
99
|
+
// Price label
|
|
100
|
+
{ type: 'text', content: 'Price', variant: 'subtitle' },
|
|
101
|
+
// Pricing metrics
|
|
102
|
+
{
|
|
103
|
+
type: 'card',
|
|
104
|
+
layout: 'horizontal',
|
|
105
|
+
content: pricingMetrics
|
|
106
|
+
},
|
|
107
|
+
// Next steps
|
|
108
|
+
{ type: 'text', content: 'Next Steps', variant: 'subtitle' },
|
|
109
|
+
{
|
|
110
|
+
type: 'list',
|
|
111
|
+
ordered: true,
|
|
112
|
+
items: nextSteps
|
|
113
|
+
},
|
|
114
|
+
// CTA
|
|
115
|
+
{
|
|
116
|
+
type: 'text',
|
|
117
|
+
content: contactCta,
|
|
118
|
+
variant: 'caption'
|
|
119
|
+
}
|
|
120
|
+
],
|
|
121
|
+
header: { title: 'Summary & Investment', variant: 'accent' },
|
|
122
|
+
footer: true
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summary Section Builder
|
|
3
|
+
*
|
|
4
|
+
* Creates an executive summary page with key metrics and description.
|
|
5
|
+
* Consumer provides content only; styling is handled internally.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { Page } from '../types'
|
|
9
|
+
import type { SummaryConfig } from './types'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates an executive summary page with metrics card and description
|
|
13
|
+
*
|
|
14
|
+
* Supports paragraph breaks: description can contain \n\n for paragraph separation.
|
|
15
|
+
*
|
|
16
|
+
* @param config - Content-only configuration
|
|
17
|
+
* @returns Page object ready for PDFDocument.pages array
|
|
18
|
+
*/
|
|
19
|
+
export function summarySection(config: SummaryConfig): Page {
|
|
20
|
+
const { totalSavings, automationCount, description } = config
|
|
21
|
+
|
|
22
|
+
// Split description into paragraphs (double newline = paragraph break)
|
|
23
|
+
const paragraphs = description.split(/\n\n+/).filter(p => p.trim())
|
|
24
|
+
|
|
25
|
+
// Build description sections - each paragraph as separate text block
|
|
26
|
+
const descriptionSections = paragraphs.map(paragraph => ({
|
|
27
|
+
type: 'text' as const,
|
|
28
|
+
content: paragraph.trim(),
|
|
29
|
+
variant: 'body' as const
|
|
30
|
+
}))
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
sections: [
|
|
34
|
+
{
|
|
35
|
+
type: 'card',
|
|
36
|
+
layout: 'horizontal',
|
|
37
|
+
content: [
|
|
38
|
+
{
|
|
39
|
+
type: 'metric',
|
|
40
|
+
value: `$${totalSavings.toLocaleString()}`,
|
|
41
|
+
label: 'Projected Annual Savings'
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'metric',
|
|
45
|
+
value: String(automationCount),
|
|
46
|
+
label: 'Automations Proposed'
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
...descriptionSections
|
|
51
|
+
],
|
|
52
|
+
header: { title: 'Executive Summary', variant: 'accent' },
|
|
53
|
+
footer: true
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table Summary Section Builder
|
|
3
|
+
*
|
|
4
|
+
* Creates a summary table page with all automations and totals.
|
|
5
|
+
* Consumer provides content only; styling is handled internally.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { Page } from '../types'
|
|
9
|
+
import type { TableSummaryConfig } from './types'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates a summary table page with automation overview and totals
|
|
13
|
+
*
|
|
14
|
+
* @param config - Content-only configuration
|
|
15
|
+
* @returns Page object ready for PDFDocument.pages array
|
|
16
|
+
*/
|
|
17
|
+
export function tableSummarySection(config: TableSummaryConfig): Page {
|
|
18
|
+
const { automations } = config
|
|
19
|
+
|
|
20
|
+
// Calculate totals
|
|
21
|
+
const totalHoursPerWeek = automations.reduce((sum, a) => sum + a.hoursPerWeek, 0)
|
|
22
|
+
const totalAnnualSavings = automations.reduce((sum, a) => sum + a.annualSavings, 0)
|
|
23
|
+
|
|
24
|
+
// Format table rows - show full titles
|
|
25
|
+
const tableRows = automations.map(a => [
|
|
26
|
+
a.title,
|
|
27
|
+
String(a.hoursPerWeek),
|
|
28
|
+
`$${a.annualSavings.toLocaleString()}`
|
|
29
|
+
])
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
sections: [
|
|
33
|
+
{
|
|
34
|
+
type: 'table',
|
|
35
|
+
headers: ['Automation', 'Hours/Week', 'Annual Savings'],
|
|
36
|
+
rows: tableRows,
|
|
37
|
+
columnWidths: ['*', 80, 100]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'card',
|
|
41
|
+
layout: 'horizontal',
|
|
42
|
+
content: [
|
|
43
|
+
{
|
|
44
|
+
type: 'metric',
|
|
45
|
+
value: String(totalHoursPerWeek),
|
|
46
|
+
label: 'Total Hours/Week Saved'
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'metric',
|
|
50
|
+
value: `$${totalAnnualSavings.toLocaleString()}`,
|
|
51
|
+
label: 'Total Annual Savings'
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
header: { title: 'Summary', variant: 'accent' },
|
|
57
|
+
footer: true
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF Section Builder Types
|
|
3
|
+
*
|
|
4
|
+
* Content-only configuration schemas for composable PDF sections.
|
|
5
|
+
* These types define WHAT content to display, not HOW to style it.
|
|
6
|
+
* Styling is handled internally by the section builders.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Cover section configuration
|
|
11
|
+
* Content for the proposal cover page
|
|
12
|
+
*/
|
|
13
|
+
export interface CoverConfig {
|
|
14
|
+
/** Company name (main title) */
|
|
15
|
+
company: string
|
|
16
|
+
/** Contact person name */
|
|
17
|
+
contact: string
|
|
18
|
+
/** Business vertical (e.g., "Marketing & Creative Agency") */
|
|
19
|
+
vertical: string
|
|
20
|
+
/** Solutions summary (e.g., "Client reporting - Content workflows - Lead qualification") */
|
|
21
|
+
solutions: string
|
|
22
|
+
/** Date string (optional, defaults to current date) */
|
|
23
|
+
date?: string
|
|
24
|
+
/** Logo source URL or base64 (optional) */
|
|
25
|
+
logoSrc?: string
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Summary section configuration
|
|
30
|
+
* Content for the executive summary page
|
|
31
|
+
*/
|
|
32
|
+
export interface SummaryConfig {
|
|
33
|
+
/** Total annual savings amount */
|
|
34
|
+
totalSavings: number
|
|
35
|
+
/** Number of automations proposed */
|
|
36
|
+
automationCount: number
|
|
37
|
+
/** Summary description text */
|
|
38
|
+
description: string
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Automation section configuration
|
|
43
|
+
* Content for a single automation detail page
|
|
44
|
+
*/
|
|
45
|
+
export interface AutomationConfig {
|
|
46
|
+
/** Automation title (e.g., "Automated Client Reporting") */
|
|
47
|
+
title: string
|
|
48
|
+
/** How the automation works (2-3 sentences) */
|
|
49
|
+
howItWorks: string
|
|
50
|
+
/** Step-by-step workflow with optional human checkpoints */
|
|
51
|
+
workflow: Array<string | { text: string; highlight: boolean }>
|
|
52
|
+
/** Expected impact/benefits (bullet points) */
|
|
53
|
+
impact: string[]
|
|
54
|
+
/** Hours saved per week */
|
|
55
|
+
hoursPerWeek: number
|
|
56
|
+
/** Annual savings in dollars */
|
|
57
|
+
annualSavings: number
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Table summary section configuration
|
|
62
|
+
* Content for the automations summary table page
|
|
63
|
+
*/
|
|
64
|
+
export interface TableSummaryConfig {
|
|
65
|
+
/** Automation summaries for table rows */
|
|
66
|
+
automations: Array<{
|
|
67
|
+
title: string
|
|
68
|
+
hoursPerWeek: number
|
|
69
|
+
annualSavings: number
|
|
70
|
+
}>
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Investment section configuration
|
|
75
|
+
* Content for the investment and next steps page
|
|
76
|
+
*/
|
|
77
|
+
export interface InvestmentConfig {
|
|
78
|
+
/** Pricing tier */
|
|
79
|
+
tier: 'tier1' | 'tier2' | 'tier3' | 'custom'
|
|
80
|
+
/** Custom tier description (optional, used when tier is 'custom') */
|
|
81
|
+
customTierDescription?: string
|
|
82
|
+
/** Next steps list (optional, uses defaults if not provided) */
|
|
83
|
+
nextSteps?: string[]
|
|
84
|
+
/** Contact CTA text (optional) */
|
|
85
|
+
contactCta?: string
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Combined summary + investment section configuration
|
|
90
|
+
* Consolidates table summary and investment into a single page
|
|
91
|
+
*/
|
|
92
|
+
export interface SummaryInvestmentConfig {
|
|
93
|
+
/** Automation summaries for table rows */
|
|
94
|
+
automations: Array<{
|
|
95
|
+
title: string
|
|
96
|
+
hoursPerWeek: number
|
|
97
|
+
annualSavings: number
|
|
98
|
+
}>
|
|
99
|
+
/** Initial fee amount in dollars (one-time implementation fee) */
|
|
100
|
+
initialFee: number
|
|
101
|
+
/** Monthly fee amount in dollars (optional, for ongoing support) */
|
|
102
|
+
monthlyFee?: number
|
|
103
|
+
/** Next steps list (optional, uses defaults if not provided) */
|
|
104
|
+
nextSteps?: string[]
|
|
105
|
+
/** Contact CTA text (optional) */
|
|
106
|
+
contactCta?: string
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Acceptance section configuration
|
|
111
|
+
* Content for the agreement acceptance and signature page
|
|
112
|
+
*/
|
|
113
|
+
export interface AcceptanceConfig {
|
|
114
|
+
/** Company name for personalization */
|
|
115
|
+
companyName: string
|
|
116
|
+
/** Contact name for personalization */
|
|
117
|
+
contactName: string
|
|
118
|
+
/** Service tier being proposed */
|
|
119
|
+
tier: 'tier1' | 'tier2' | 'tier3' | 'custom'
|
|
120
|
+
/** Initial fee amount in dollars (one-time implementation fee) */
|
|
121
|
+
initialFee: number
|
|
122
|
+
/** Monthly fee amount in dollars (optional, for ongoing support) */
|
|
123
|
+
monthlyFee?: number
|
|
124
|
+
}
|