@elevasis/core 0.7.1 → 0.8.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/package.json +1 -1
- package/src/README.md +41 -41
- package/src/__tests__/publish.test.ts +18 -18
- package/src/__tests__/{template-foundations-compatibility.test.ts → template-core-compatibility.test.ts} +99 -99
- package/src/_gen/__tests__/__snapshots__/contracts.md.snap +1135 -1131
- package/src/_gen/__tests__/scaffold-contracts.test.ts +53 -53
- package/src/_gen/scaffold-contracts.ts +45 -45
- package/src/auth/multi-tenancy/credentials/README.md +38 -38
- package/src/auth/multi-tenancy/credentials/index.ts +6 -6
- package/src/auth/multi-tenancy/credentials/server/encryption.ts +39 -39
- package/src/auth/multi-tenancy/credentials/server/service.ts +60 -60
- package/src/auth/multi-tenancy/index.ts +17 -17
- package/src/auth/multi-tenancy/invitations/api-schemas.ts +107 -107
- package/src/auth/multi-tenancy/invitations/index.ts +37 -37
- package/src/auth/multi-tenancy/invitations/invitation.ts +86 -86
- package/src/auth/multi-tenancy/invitations/server/index.ts +25 -25
- package/src/auth/multi-tenancy/invitations/server/transforms.ts +24 -24
- package/src/auth/multi-tenancy/invitations/server/workos.ts +24 -24
- package/src/auth/multi-tenancy/invitations/supabase.ts +50 -50
- package/src/auth/multi-tenancy/memberships/api-schemas.ts +126 -126
- package/src/auth/multi-tenancy/memberships/index.ts +21 -21
- package/src/auth/multi-tenancy/memberships/membership.ts +138 -138
- package/src/auth/multi-tenancy/memberships/server/index.ts +15 -15
- package/src/auth/multi-tenancy/memberships/server/transforms.ts +32 -32
- package/src/auth/multi-tenancy/memberships/server/workos.ts +21 -21
- package/src/auth/multi-tenancy/memberships/supabase.ts +46 -46
- package/src/auth/multi-tenancy/organizations/api-schemas.ts +128 -128
- package/src/auth/multi-tenancy/organizations/index.ts +23 -23
- package/src/auth/multi-tenancy/organizations/organization.ts +24 -24
- package/src/auth/multi-tenancy/organizations/server/index.ts +10 -10
- package/src/auth/multi-tenancy/organizations/server/transforms.ts +35 -35
- package/src/auth/multi-tenancy/organizations/server/workos.ts +20 -20
- package/src/auth/multi-tenancy/types.ts +83 -83
- package/src/auth/multi-tenancy/users/api-schemas.ts +194 -194
- package/src/auth/multi-tenancy/users/index.ts +27 -27
- package/src/auth/multi-tenancy/users/server/index.ts +19 -19
- package/src/auth/multi-tenancy/users/server/transforms.ts +21 -21
- package/src/auth/multi-tenancy/users/server/workos.ts +16 -16
- package/src/auth/multi-tenancy/users/user.ts +65 -65
- package/src/business/README.md +52 -52
- package/src/business/__tests__/entities-published.test.ts +33 -33
- package/src/business/acquisition/api-schemas.ts +759 -759
- package/src/business/acquisition/index.ts +109 -109
- package/src/business/acquisition/types.ts +402 -402
- package/src/business/base-entities.test.ts +481 -481
- package/src/business/base-entities.ts +241 -241
- package/src/business/entities-published.ts +24 -24
- package/src/business/index.ts +15 -15
- package/src/business/pdf/browser/pdfmake-browser.ts +229 -229
- package/src/business/pdf/index.ts +10 -10
- package/src/business/pdf/server/index.ts +21 -21
- package/src/business/pdf/server/themes/default.ts +8 -8
- package/src/business/pdf/server/themes/index.ts +9 -9
- package/src/business/pdf/server/themes/types.ts +8 -8
- package/src/business/pdf/types.ts +272 -272
- package/src/business/projects/index.ts +2 -2
- package/src/business/projects/sse-events.ts +21 -21
- package/src/business/projects/types.ts +89 -89
- package/src/business/sales/api-schemas.ts +75 -75
- package/src/business/seo/__tests__/linking.test.ts +549 -549
- package/src/business/seo/__tests__/types.test.ts +404 -404
- package/src/business/seo/index.ts +2 -2
- package/src/business/seo/linking.ts +281 -281
- package/src/business/seo/types.ts +199 -199
- package/src/commands/queue/index.ts +3 -3
- package/src/commands/queue/schemas.test.ts +593 -593
- package/src/commands/queue/schemas.ts +125 -125
- package/src/commands/queue/sse-events.ts +61 -61
- package/src/commands/queue/types/action.ts +52 -52
- package/src/commands/queue/types/checkpoint.ts +44 -44
- package/src/commands/queue/types/index.ts +7 -7
- package/src/commands/queue/types/task.ts +116 -116
- package/src/commands/queue/types.ts +14 -14
- package/src/content/distribution-metadata.ts +61 -61
- package/src/content/index.ts +10 -10
- package/src/deployments/index.ts +22 -22
- package/src/execution/core/__tests__/archived-logs.test.ts +72 -72
- package/src/execution/core/index.ts +11 -11
- package/src/execution/core/runner-types.ts +80 -80
- package/src/execution/core/server/environment.ts +31 -31
- package/src/execution/core/sse-executions.ts +119 -119
- package/src/execution/core/types.ts +29 -29
- package/src/execution/engine/__tests__/fixtures/test-agents.ts +4 -4
- package/src/execution/engine/__tests__/timeout.test.ts +565 -565
- package/src/execution/engine/agent/__tests__/errors.test.ts +508 -508
- package/src/execution/engine/agent/actions/__tests__/processor.test.ts +531 -531
- package/src/execution/engine/agent/actions/executor.ts +205 -205
- package/src/execution/engine/agent/actions/navigate-knowledge-executor.ts +230 -230
- package/src/execution/engine/agent/actions/processor.ts +116 -116
- package/src/execution/engine/agent/actions/types.ts +70 -70
- package/src/execution/engine/agent/core/agent.ts +810 -810
- package/src/execution/engine/agent/core/types.ts +155 -155
- package/src/execution/engine/agent/errors.ts +251 -251
- package/src/execution/engine/agent/index.ts +78 -78
- package/src/execution/engine/agent/knowledge-map/types.ts +106 -106
- package/src/execution/engine/agent/knowledge-map/utils.ts +101 -101
- package/src/execution/engine/agent/memory/__tests__/manager.test.ts +754 -754
- package/src/execution/engine/agent/memory/domains.ts +99 -99
- package/src/execution/engine/agent/memory/manager.ts +365 -365
- package/src/execution/engine/agent/memory/processor.ts +66 -66
- package/src/execution/engine/agent/memory/types.ts +90 -90
- package/src/execution/engine/agent/memory/utils.ts +134 -134
- package/src/execution/engine/agent/observability/logging.ts +467 -467
- package/src/execution/engine/agent/observability/types.ts +64 -64
- package/src/execution/engine/agent/reasoning/adapters/agent-adapter-helpers.ts +349 -349
- package/src/execution/engine/agent/reasoning/processor.ts +92 -92
- package/src/execution/engine/agent/reasoning/prompt-sections/base-actions.ts +134 -134
- package/src/execution/engine/agent/reasoning/prompt-sections/completion.ts +49 -49
- package/src/execution/engine/agent/reasoning/prompt-sections/knowledge-map.ts +93 -93
- package/src/execution/engine/agent/reasoning/prompt-sections/memory.ts +65 -65
- package/src/execution/engine/agent/reasoning/prompt-sections/tools.ts +44 -44
- package/src/execution/engine/agent/reasoning/request-builder.ts +169 -169
- package/src/execution/engine/agent/reasoning/types.ts +18 -18
- package/src/execution/engine/base/errors.ts +118 -118
- package/src/execution/engine/base/index.ts +2 -2
- package/src/execution/engine/base/logging.ts +31 -31
- package/src/execution/engine/base/serialization.ts +324 -324
- package/src/execution/engine/base/types.ts +126 -126
- package/src/execution/engine/base/utils.ts +41 -41
- package/src/execution/engine/index.ts +434 -434
- package/src/execution/engine/interface/index.ts +1 -1
- package/src/execution/engine/interface/types.ts +62 -62
- package/src/execution/engine/llm/__tests__/model-info.test.ts +50 -50
- package/src/execution/engine/llm/__tests__/model-validation.test.ts +321 -321
- package/src/execution/engine/llm/__tests__/response-schema-validator.test.ts +115 -115
- package/src/execution/engine/llm/adapters/__tests__/adapter-factory.test.ts +375 -375
- package/src/execution/engine/llm/adapters/__tests__/anthropic-adapter.test.ts +463 -463
- package/src/execution/engine/llm/adapters/__tests__/anthropic.integration.test.ts +177 -177
- package/src/execution/engine/llm/adapters/__tests__/google-adapter.test.ts +722 -722
- package/src/execution/engine/llm/adapters/__tests__/google.integration.test.ts +376 -376
- package/src/execution/engine/llm/adapters/__tests__/openai-adapter.test.ts +551 -551
- package/src/execution/engine/llm/adapters/__tests__/openrouter-adapter.test.ts +563 -563
- package/src/execution/engine/llm/adapters/__tests__/openrouter.integration.test.ts +105 -105
- package/src/execution/engine/llm/adapters/__tests__/universal-adapter.test.ts +537 -537
- package/src/execution/engine/llm/adapters/circuit-breaker.ts +147 -147
- package/src/execution/engine/llm/adapters/index.ts +17 -17
- package/src/execution/engine/llm/adapters/mock-adapter.ts +116 -116
- package/src/execution/engine/llm/adapters/server/adapter-factory.ts +130 -130
- package/src/execution/engine/llm/adapters/server/anthropic.ts +137 -137
- package/src/execution/engine/llm/adapters/server/google.ts +283 -283
- package/src/execution/engine/llm/adapters/server/index.ts +12 -12
- package/src/execution/engine/llm/adapters/server/openai.ts +206 -206
- package/src/execution/engine/llm/adapters/server/openrouter.ts +235 -235
- package/src/execution/engine/llm/adapters/universal-adapter.ts +230 -230
- package/src/execution/engine/llm/errors.ts +186 -186
- package/src/execution/engine/llm/model-info.ts +332 -332
- package/src/execution/engine/llm/response-schema-validator.ts +113 -113
- package/src/execution/engine/llm/types.ts +86 -86
- package/src/execution/engine/test-utils/index.ts +6 -6
- package/src/execution/engine/test-utils/mocks.ts +56 -56
- package/src/execution/engine/tools/integration/base-integration-adapter.ts +50 -50
- package/src/execution/engine/tools/integration/index.ts +53 -53
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-adapter.ts +73 -73
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/anymailfinder-tools.ts +209 -209
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-company-email/index.ts +82 -82
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-decision-maker-email/index.ts +122 -122
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/find-person-email/index.ts +89 -89
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/fetch/verify-email/index.ts +84 -84
- package/src/execution/engine/tools/integration/server/adapters/anymailfinder/index.ts +16 -16
- package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +293 -293
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +100 -100
- package/src/execution/engine/tools/integration/server/adapters/apify/apify-tools.ts +217 -217
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/get-dataset-items/index.ts +92 -92
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/run-actor/index.ts +218 -218
- package/src/execution/engine/tools/integration/server/adapters/apify/fetch/start-actor/index.ts +87 -87
- package/src/execution/engine/tools/integration/server/adapters/apify/index.ts +11 -11
- package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +361 -361
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-adapter.ts +162 -162
- package/src/execution/engine/tools/integration/server/adapters/attio/attio-tools.ts +594 -594
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-attribute/index.ts +214 -214
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-note/index.ts +152 -152
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/create-record/index.ts +141 -141
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-note/index.ts +86 -86
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/delete-record/index.ts +105 -105
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.ts +118 -118
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-attributes/index.ts +165 -165
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-notes/index.ts +96 -96
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-objects/index.ts +104 -104
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.ts +156 -156
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-attribute/index.ts +220 -220
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/update-record/index.ts +140 -140
- package/src/execution/engine/tools/integration/server/adapters/attio/fetch/utils/types.ts +146 -146
- package/src/execution/engine/tools/integration/server/adapters/attio/index.ts +31 -31
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +210 -210
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +104 -104
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-adapter.ts +1189 -1189
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/google-sheets-tools.ts +641 -641
- package/src/execution/engine/tools/integration/server/adapters/google-sheets/index.ts +18 -18
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/activate-campaign/index.ts +86 -86
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/__tests__/index.test.ts +289 -289
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/add-to-campaign/index.ts +154 -154
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/__tests__/index.test.ts +325 -325
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-add-leads/index.ts +153 -153
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/bulk-delete-leads/index.ts +84 -84
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-campaign/index.ts +125 -125
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/create-inbox-test/index.ts +107 -107
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/delete-campaign/index.ts +85 -85
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-account-health/index.ts +91 -91
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign/index.ts +92 -92
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/__tests__/index.test.ts +195 -195
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-campaign-analytics/index.ts +113 -113
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-daily-campaign-analytics/index.ts +104 -104
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-emails/index.ts +155 -155
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/__tests__/index.test.ts +196 -196
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/get-step-analytics/index.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/__tests__/index.test.ts +189 -189
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-campaigns/index.ts +87 -87
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/list-leads/index.ts +112 -112
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/patch-lead/index.ts +76 -76
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/pause-campaign/index.ts +86 -86
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/remove-from-subsequence/index.ts +98 -98
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/send-reply/index.ts +126 -126
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/__tests__/index.test.ts +193 -193
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-campaign/index.ts +99 -99
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/__tests__/index.test.ts +621 -621
- package/src/execution/engine/tools/integration/server/adapters/instantly/fetch/update-interest-status/index.ts +125 -125
- package/src/execution/engine/tools/integration/server/adapters/instantly/index.ts +29 -29
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-adapter.ts +178 -178
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1473 -1473
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/check-credits/index.ts +59 -59
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/fetch/verify-email/index.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/index.ts +17 -17
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-adapter.ts +80 -80
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/get-email/index.ts +102 -102
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +134 -134
- package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +75 -75
- package/src/execution/engine/tools/integration/server/adapters/resend/index.ts +27 -27
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-adapter.ts +108 -108
- package/src/execution/engine/tools/integration/server/adapters/resend/resend-tools.ts +132 -132
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/create-envelope/index.ts +274 -274
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/download-document/index.ts +230 -230
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/get-envelope/index.ts +133 -133
- package/src/execution/engine/tools/integration/server/adapters/signature-api/fetch/void-envelope/index.ts +90 -90
- package/src/execution/engine/tools/integration/server/adapters/stripe/fetch/utils/types.ts +210 -210
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-adapter.ts +517 -517
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +309 -309
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/domain-search/index.ts +133 -133
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-finder/index.ts +122 -122
- package/src/execution/engine/tools/integration/server/adapters/tomba/fetch/email-verifier/index.ts +111 -111
- package/src/execution/engine/tools/integration/server/adapters/tomba/index.ts +11 -11
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-adapter.ts +78 -78
- package/src/execution/engine/tools/integration/server/adapters/tomba/tomba-tools.ts +222 -222
- package/src/execution/engine/tools/integration/server/index.ts +61 -61
- package/src/execution/engine/tools/integration/service.ts +161 -161
- package/src/execution/engine/tools/integration/tool.ts +253 -253
- package/src/execution/engine/tools/integration/types/anymailfinder.ts +74 -74
- package/src/execution/engine/tools/integration/types/apify.ts +92 -92
- package/src/execution/engine/tools/integration/types/index.ts +19 -19
- package/src/execution/engine/tools/integration/types/instantly.ts +557 -557
- package/src/execution/engine/tools/integration/types/millionverifier.ts +56 -56
- package/src/execution/engine/tools/integration/types/stripe.ts +162 -162
- package/src/execution/engine/tools/integration/types/tomba.ts +94 -94
- package/src/execution/engine/tools/lead-service-types.ts +884 -884
- package/src/execution/engine/tools/llm/index.ts +11 -11
- package/src/execution/engine/tools/llm/server/index.ts +8 -8
- package/src/execution/engine/tools/llm/server/llm-call-tool.ts +118 -118
- package/src/execution/engine/tools/platform/__tests__/pdf.test.ts +441 -441
- package/src/execution/engine/tools/platform/acquisition/company-tools.ts +248 -248
- package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +319 -319
- package/src/execution/engine/tools/platform/acquisition/index.ts +43 -43
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +148 -148
- package/src/execution/engine/tools/platform/acquisition/types.ts +260 -260
- package/src/execution/engine/tools/platform/email/index.ts +122 -122
- package/src/execution/engine/tools/platform/email/types.ts +96 -96
- package/src/execution/engine/tools/platform/index.ts +157 -157
- package/src/execution/engine/tools/platform/notification.ts +81 -81
- package/src/execution/engine/tools/platform/pdf/index.ts +110 -110
- package/src/execution/engine/tools/platform/pdf/types.ts +77 -77
- package/src/execution/engine/tools/platform/scheduler.ts +87 -87
- package/src/execution/engine/tools/platform/storage/index.ts +370 -370
- package/src/execution/engine/tools/platform/types.ts +148 -148
- package/src/execution/engine/tools/registry.ts +700 -700
- package/src/execution/engine/tools/tool-maps.ts +786 -786
- package/src/execution/engine/tools/types.ts +233 -233
- package/src/execution/engine/workflow/__tests__/errors.test.ts +139 -139
- package/src/execution/engine/workflow/errors.ts +63 -63
- package/src/execution/engine/workflow/helpers/index.ts +11 -11
- package/src/execution/engine/workflow/helpers/server/index.ts +8 -8
- package/src/execution/engine/workflow/helpers/server/llm-call.ts +93 -93
- package/src/execution/engine/workflow/index.ts +19 -19
- package/src/execution/engine/workflow/log-truncate.ts +26 -26
- package/src/execution/engine/workflow/logging.ts +191 -191
- package/src/execution/engine/workflow/types.ts +182 -182
- package/src/execution/engine/workflow/utils.ts +280 -280
- package/src/execution/engine/workflow/workflow.ts +168 -168
- package/src/execution/index.ts +3 -3
- package/src/execution/scheduler/__tests__/api-schemas.test.ts +733 -733
- package/src/execution/scheduler/__tests__/utils.test.ts +1009 -1009
- package/src/execution/scheduler/api-schemas.ts +296 -296
- package/src/execution/scheduler/index.ts +50 -50
- package/src/execution/scheduler/schemas.ts +264 -264
- package/src/execution/scheduler/types.ts +111 -111
- package/src/execution/scheduler/utils.ts +364 -364
- package/src/forms/index.ts +7 -7
- package/src/forms/schemas.ts +69 -69
- package/src/forms/types.ts +70 -70
- package/src/index.ts +71 -60
- package/src/integrations/credentials/__tests__/schemas.test.ts +82 -82
- package/src/integrations/credentials/__tests__/utils.test.ts +144 -144
- package/src/integrations/credentials/api-schemas.ts +143 -143
- package/src/integrations/credentials/index.ts +32 -32
- package/src/integrations/credentials/schemas.ts +164 -164
- package/src/integrations/credentials/utils.ts +59 -59
- package/src/integrations/oauth/__tests__/provider-registry.test.ts +59 -59
- package/src/integrations/oauth/api-schemas.ts +92 -92
- package/src/integrations/oauth/index.ts +19 -19
- package/src/integrations/oauth/provider-registry.ts +61 -61
- package/src/integrations/oauth/server/__tests__/refresh-concurrent.test.ts +183 -183
- package/src/integrations/oauth/server/__tests__/refresh.test.ts +577 -577
- package/src/integrations/oauth/server/credentials.ts +39 -39
- package/src/integrations/oauth/server/refresh.ts +214 -214
- package/src/integrations/oauth/types.ts +34 -34
- package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +318 -318
- package/src/integrations/webhook-endpoints/api-schemas.ts +102 -102
- package/src/integrations/webhook-endpoints/index.ts +28 -28
- package/src/integrations/webhook-endpoints/types.ts +51 -51
- package/src/operations/activities/api-schemas.ts +79 -79
- package/src/operations/activities/index.ts +9 -9
- package/src/operations/activities/sse-events.ts +30 -30
- package/src/operations/activities/types.ts +63 -63
- package/src/operations/debug-logs/client.ts +60 -60
- package/src/operations/debug-logs/debug-logger.ts +83 -83
- package/src/operations/debug-logs/index.ts +8 -8
- package/src/operations/debug-logs/server.ts +19 -19
- package/src/operations/debug-logs/types.ts +33 -33
- package/src/operations/index.ts +50 -50
- package/src/operations/notifications/api-schemas.ts +91 -91
- package/src/operations/notifications/index.ts +3 -3
- package/src/operations/notifications/sse-events.ts +21 -21
- package/src/operations/notifications/types.ts +47 -47
- package/src/operations/observability/__tests__/openrouter-cost-flow.test.ts +297 -297
- package/src/operations/observability/__tests__/utils.test.ts +54 -54
- package/src/operations/observability/ai-usage-collector.ts +64 -64
- package/src/operations/observability/index.ts +13 -13
- package/src/operations/observability/metrics-collector.ts +49 -49
- package/src/operations/observability/schemas.ts +39 -39
- package/src/operations/observability/types.ts +463 -463
- package/src/operations/observability/utils.ts +77 -77
- package/src/operations/sessions/__tests__/manager.test.ts +821 -821
- package/src/operations/sessions/index.ts +26 -26
- package/src/operations/sessions/server/manager.ts +90 -90
- package/src/operations/sessions/server/session.ts +180 -180
- package/src/operations/sessions/types.ts +98 -98
- package/src/operations/triggers/index.ts +12 -12
- package/src/operations/triggers/webhook/definitions/instantly-account-error.ts +44 -44
- package/src/operations/triggers/webhook/definitions/instantly-auto-reply-received.ts +51 -51
- package/src/operations/triggers/webhook/definitions/instantly-campaign-completed.ts +45 -45
- package/src/operations/triggers/webhook/definitions/instantly-email-bounced.ts +49 -49
- package/src/operations/triggers/webhook/definitions/instantly-lead-unsubscribed.ts +45 -45
- package/src/operations/triggers/webhook/definitions/instantly-reply-received.ts +54 -54
- package/src/operations/triggers/webhook/index.ts +35 -35
- package/src/operations/triggers/webhook/types.ts +74 -74
- package/src/organization-model/README.md +97 -97
- package/src/organization-model/__tests__/defaults.test.ts +175 -175
- package/src/organization-model/__tests__/domains/customers.test.ts +295 -295
- package/src/organization-model/__tests__/domains/goals.test.ts +479 -479
- package/src/organization-model/__tests__/domains/identity.test.ts +279 -279
- package/src/organization-model/__tests__/domains/navigation.test.ts +212 -212
- package/src/organization-model/__tests__/domains/offerings.test.ts +419 -419
- package/src/organization-model/__tests__/domains/operations.test.ts +203 -203
- package/src/organization-model/__tests__/domains/resource-mappings.test.ts +362 -362
- package/src/organization-model/__tests__/domains/roles.test.ts +347 -347
- package/src/organization-model/__tests__/domains/statuses.test.ts +243 -243
- package/src/organization-model/__tests__/foundation.test.ts +105 -105
- package/src/organization-model/__tests__/graph.test.ts +894 -894
- package/src/organization-model/__tests__/resolve.test.ts +690 -690
- package/src/organization-model/__tests__/schema.test.ts +407 -407
- package/src/organization-model/contracts.ts +14 -14
- package/src/organization-model/defaults.ts +148 -148
- package/src/organization-model/domains/branding.ts +22 -22
- package/src/organization-model/domains/customers.ts +75 -75
- package/src/organization-model/domains/features.ts +22 -22
- package/src/organization-model/domains/goals.ts +80 -80
- package/src/organization-model/domains/identity.ts +94 -94
- package/src/organization-model/domains/navigation.ts +391 -391
- package/src/organization-model/domains/offerings.ts +66 -66
- package/src/organization-model/domains/operations.ts +85 -85
- package/src/organization-model/domains/projects.ts +48 -48
- package/src/organization-model/domains/prospecting.ts +33 -33
- package/src/organization-model/domains/roles.ts +55 -55
- package/src/organization-model/domains/sales.ts +94 -94
- package/src/organization-model/domains/shared.ts +62 -62
- package/src/organization-model/domains/statuses.ts +130 -130
- package/src/organization-model/foundation.ts +97 -97
- package/src/organization-model/graph/build.ts +399 -399
- package/src/organization-model/graph/index.ts +4 -4
- package/src/organization-model/graph/schema.ts +48 -48
- package/src/organization-model/graph/types.ts +40 -40
- package/src/organization-model/index.ts +13 -13
- package/src/organization-model/organization-graph.mdx +272 -272
- package/src/organization-model/organization-model.mdx +320 -320
- package/src/organization-model/published.ts +85 -85
- package/src/organization-model/resolve.ts +66 -66
- package/src/organization-model/schema.ts +287 -287
- package/src/organization-model/types.ts +46 -46
- package/src/platform/api/index.ts +1 -1
- package/src/platform/api/types.ts +35 -35
- package/src/platform/constants/http.ts +37 -37
- package/src/platform/constants/index.ts +5 -5
- package/src/platform/constants/limits.ts +32 -32
- package/src/platform/constants/resilience.ts +51 -51
- package/src/platform/constants/timeouts.ts +20 -20
- package/src/platform/constants/versions.ts +3 -3
- package/src/platform/registry/__tests__/resource-registry-static.test.ts +347 -347
- package/src/platform/registry/__tests__/resource-registry.integration.test.ts +1028 -1028
- package/src/platform/registry/__tests__/resource-registry.list-executable.test.ts +393 -393
- package/src/platform/registry/__tests__/resource-registry.test.ts +2005 -2005
- package/src/platform/registry/__tests__/serialization.test.ts +1127 -1127
- package/src/platform/registry/command-view.ts +180 -180
- package/src/platform/registry/domains.ts +165 -165
- package/src/platform/registry/index.ts +93 -93
- package/src/platform/registry/reserved.ts +24 -24
- package/src/platform/registry/resource-metadata.ts +59 -59
- package/src/platform/registry/resource-registry.command-queue-groups.test.ts +129 -129
- package/src/platform/registry/resource-registry.ts +876 -876
- package/src/platform/registry/serialization.ts +273 -273
- package/src/platform/registry/serialized-types.ts +231 -231
- package/src/platform/registry/stats-types.ts +66 -66
- package/src/platform/registry/types.ts +404 -404
- package/src/platform/registry/validation.ts +513 -513
- package/src/platform/resilience/__tests__/rate-limiter.test.ts +471 -471
- package/src/platform/resilience/circuit-breaker.ts +164 -164
- package/src/platform/resilience/errors.ts +68 -68
- package/src/platform/resilience/http-error-mapper.ts +129 -129
- package/src/platform/resilience/index.ts +93 -93
- package/src/platform/resilience/rate-limiter-types.ts +46 -46
- package/src/platform/resilience/rate-limiter.ts +140 -140
- package/src/platform/resilience/retry.ts +89 -89
- package/src/platform/resilience/timeout.ts +63 -63
- package/src/platform/sse/events.ts +37 -37
- package/src/platform/sse/index.ts +7 -7
- package/src/platform/utils/__tests__/validation.test.ts +1083 -1083
- package/src/platform/utils/currency.ts +96 -96
- package/src/platform/utils/debounce.ts +52 -52
- package/src/platform/utils/error.ts +41 -41
- package/src/platform/utils/hmac.test.ts +97 -97
- package/src/platform/utils/index.ts +32 -32
- package/src/platform/utils/server/betterstack-logger.ts +210 -210
- package/src/platform/utils/server/hmac.ts +44 -44
- package/src/platform/utils/server/unsubscribe.ts +111 -111
- package/src/platform/utils/token-counter.ts +96 -96
- package/src/platform/utils/validation.ts +425 -425
- package/src/projects/api-schemas.ts +268 -268
- package/src/published.ts +1 -1
- package/src/reference/_generated/contracts.md +607 -607
- package/src/reference/glossary.md +105 -105
- package/src/requests/__tests__/api-schemas.test.ts +277 -277
- package/src/requests/api-schemas.ts +83 -83
- package/src/requests/index.ts +1 -1
- package/src/scaffold-registry/__tests__/index.test.ts +17 -0
- package/src/scaffold-registry/__tests__/schema.test.ts +329 -230
- package/src/scaffold-registry/index.ts +205 -189
- package/src/scaffold-registry/schema.ts +196 -128
- package/src/server.ts +272 -272
- package/src/supabase/database.types.ts +2719 -2719
- package/src/supabase/helpers.ts +20 -20
- package/src/supabase/index.ts +52 -52
- package/src/supabase/server/client.ts +58 -58
- package/src/test-utils/README.md +38 -38
- package/src/test-utils/browser-mocks.ts +54 -54
- package/src/test-utils/fixtures/api-keys.ts +52 -52
- package/src/test-utils/fixtures/index.ts +4 -4
- package/src/test-utils/fixtures/memberships.ts +80 -80
- package/src/test-utils/fixtures/organizations.ts +69 -69
- package/src/test-utils/fixtures/users.ts +79 -79
- package/src/test-utils/index.ts +11 -11
- package/src/test-utils/mocks/index.ts +2 -2
- package/src/test-utils/mocks/supabase.ts +142 -142
- package/src/test-utils/mocks/workos.ts +108 -108
- package/src/test-utils/rls/RLSTestContext.ts +556 -556
- package/src/test-utils/rls/index.ts +1 -1
|
@@ -1,229 +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()
|
|
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()
|
|
@@ -1,10 +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'
|
|
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'
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PDF Server Module
|
|
3
|
-
*
|
|
4
|
-
* Server-side PDF generation using pdfmake.
|
|
5
|
-
*
|
|
6
|
-
* For browser PDF generation, use `@repo/core/pdf/browser` instead.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* // Server-side PDF generation (Node.js only)
|
|
10
|
-
* import { PdfMakeService } from '@repo/core/pdf/server/pdfmake-service'
|
|
11
|
-
*
|
|
12
|
-
* // Themes (browser-safe, also available from @repo/core/pdf)
|
|
13
|
-
* import { defaultTheme } from '@repo/core/pdf/server'
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
// Re-export themes (browser-safe, from shared location)
|
|
17
|
-
export * from './themes'
|
|
18
|
-
|
|
19
|
-
// NOTE: PdfMakeService is NOT re-exported here because it has Node.js-only imports
|
|
20
|
-
// (createRequire from 'module', stream) that cause build errors in browser environments.
|
|
21
|
-
// Import directly: import { PdfMakeService } from '@repo/core/pdf/server/pdfmake-service'
|
|
1
|
+
/**
|
|
2
|
+
* PDF Server Module
|
|
3
|
+
*
|
|
4
|
+
* Server-side PDF generation using pdfmake.
|
|
5
|
+
*
|
|
6
|
+
* For browser PDF generation, use `@repo/core/pdf/browser` instead.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Server-side PDF generation (Node.js only)
|
|
10
|
+
* import { PdfMakeService } from '@repo/core/pdf/server/pdfmake-service'
|
|
11
|
+
*
|
|
12
|
+
* // Themes (browser-safe, also available from @repo/core/pdf)
|
|
13
|
+
* import { defaultTheme } from '@repo/core/pdf/server'
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// Re-export themes (browser-safe, from shared location)
|
|
17
|
+
export * from './themes'
|
|
18
|
+
|
|
19
|
+
// NOTE: PdfMakeService is NOT re-exported here because it has Node.js-only imports
|
|
20
|
+
// (createRequire from 'module', stream) that cause build errors in browser environments.
|
|
21
|
+
// Import directly: import { PdfMakeService } from '@repo/core/pdf/server/pdfmake-service'
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Default PDF Theme
|
|
3
|
-
*
|
|
4
|
-
* Re-exports from shared themes for backwards compatibility.
|
|
5
|
-
* New code should import from '@repo/core/pdf' directly.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export { defaultTheme } from '../../themes'
|
|
1
|
+
/**
|
|
2
|
+
* Default PDF Theme
|
|
3
|
+
*
|
|
4
|
+
* Re-exports from shared themes for backwards compatibility.
|
|
5
|
+
* New code should import from '@repo/core/pdf' directly.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export { defaultTheme } from '../../themes'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PDF Themes
|
|
3
|
-
*
|
|
4
|
-
* Theme configuration for PDF document generation.
|
|
5
|
-
* Re-exports theme types and the default theme.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export * from './types'
|
|
9
|
-
export { defaultTheme } from './default'
|
|
1
|
+
/**
|
|
2
|
+
* PDF Themes
|
|
3
|
+
*
|
|
4
|
+
* Theme configuration for PDF document generation.
|
|
5
|
+
* Re-exports theme types and the default theme.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export * from './types'
|
|
9
|
+
export { defaultTheme } from './default'
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PDF Theme Types
|
|
3
|
-
*
|
|
4
|
-
* Re-exports from shared themes for backwards compatibility.
|
|
5
|
-
* New code should import from '@repo/core/pdf' directly.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export type { PDFTheme } from '../../themes'
|
|
1
|
+
/**
|
|
2
|
+
* PDF Theme Types
|
|
3
|
+
*
|
|
4
|
+
* Re-exports from shared themes for backwards compatibility.
|
|
5
|
+
* New code should import from '@repo/core/pdf' directly.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export type { PDFTheme } from '../../themes'
|