@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,53 +1,53 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Snapshot test for the scaffold-contracts generator wrapper.
|
|
3
|
-
*
|
|
4
|
-
* Calls generate() (which runs the real script) and asserts:
|
|
5
|
-
* 1. The output file exists and has content.
|
|
6
|
-
* 2. The content matches the stored snapshot (drift detection).
|
|
7
|
-
*
|
|
8
|
-
* If the snapshot is missing it is created on first run. Subsequent runs fail
|
|
9
|
-
* if the output changes without an intentional snapshot update.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { readFileSync } from 'node:fs'
|
|
13
|
-
import { resolve } from 'node:path'
|
|
14
|
-
import { describe, it, expect } from 'vitest'
|
|
15
|
-
|
|
16
|
-
/** Monorepo root relative to packages/core/src/_gen/__tests__/ */
|
|
17
|
-
const ROOT = resolve(import.meta.dirname, '..', '..', '..', '..', '..')
|
|
18
|
-
|
|
19
|
-
const OUTPUT_PATH = resolve(ROOT, 'packages/core/src/reference/_generated/contracts.md')
|
|
20
|
-
|
|
21
|
-
describe('scaffold-contracts generator', () => {
|
|
22
|
-
it('output file exists and has content', () => {
|
|
23
|
-
// The generator must have been run (either manually or by CI gen step).
|
|
24
|
-
// This test validates the committed artifact — it does NOT re-run the generator
|
|
25
|
-
// so the test suite stays fast and deterministic.
|
|
26
|
-
let content: string
|
|
27
|
-
try {
|
|
28
|
-
content = readFileSync(OUTPUT_PATH, 'utf8')
|
|
29
|
-
} catch {
|
|
30
|
-
throw new Error(
|
|
31
|
-
`Generated file not found: ${OUTPUT_PATH}\n` +
|
|
32
|
-
`Run "pnpm scaffold:generate" or "node scripts/monorepo/generate-scaffold-contracts.js" first.`
|
|
33
|
-
)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
expect(content.length).toBeGreaterThan(0)
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('output file matches stored snapshot', async () => {
|
|
40
|
-
let content: string
|
|
41
|
-
try {
|
|
42
|
-
content = readFileSync(OUTPUT_PATH, 'utf8')
|
|
43
|
-
} catch {
|
|
44
|
-
throw new Error(
|
|
45
|
-
`Generated file not found: ${OUTPUT_PATH}\n` +
|
|
46
|
-
`Run "pnpm scaffold:generate" first to produce the artifact before snapshotting.`
|
|
47
|
-
)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Snapshot stored alongside test file in __snapshots__/
|
|
51
|
-
await expect(content).toMatchFileSnapshot(resolve(import.meta.dirname, '__snapshots__', 'contracts.md.snap'))
|
|
52
|
-
})
|
|
53
|
-
})
|
|
1
|
+
/**
|
|
2
|
+
* Snapshot test for the scaffold-contracts generator wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Calls generate() (which runs the real script) and asserts:
|
|
5
|
+
* 1. The output file exists and has content.
|
|
6
|
+
* 2. The content matches the stored snapshot (drift detection).
|
|
7
|
+
*
|
|
8
|
+
* If the snapshot is missing it is created on first run. Subsequent runs fail
|
|
9
|
+
* if the output changes without an intentional snapshot update.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { readFileSync } from 'node:fs'
|
|
13
|
+
import { resolve } from 'node:path'
|
|
14
|
+
import { describe, it, expect } from 'vitest'
|
|
15
|
+
|
|
16
|
+
/** Monorepo root relative to packages/core/src/_gen/__tests__/ */
|
|
17
|
+
const ROOT = resolve(import.meta.dirname, '..', '..', '..', '..', '..')
|
|
18
|
+
|
|
19
|
+
const OUTPUT_PATH = resolve(ROOT, 'packages/core/src/reference/_generated/contracts.md')
|
|
20
|
+
|
|
21
|
+
describe('scaffold-contracts generator', () => {
|
|
22
|
+
it('output file exists and has content', () => {
|
|
23
|
+
// The generator must have been run (either manually or by CI gen step).
|
|
24
|
+
// This test validates the committed artifact — it does NOT re-run the generator
|
|
25
|
+
// so the test suite stays fast and deterministic.
|
|
26
|
+
let content: string
|
|
27
|
+
try {
|
|
28
|
+
content = readFileSync(OUTPUT_PATH, 'utf8')
|
|
29
|
+
} catch {
|
|
30
|
+
throw new Error(
|
|
31
|
+
`Generated file not found: ${OUTPUT_PATH}\n` +
|
|
32
|
+
`Run "pnpm scaffold:generate" or "node scripts/monorepo/generate-scaffold-contracts.js" first.`
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
expect(content.length).toBeGreaterThan(0)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
it('output file matches stored snapshot', async () => {
|
|
40
|
+
let content: string
|
|
41
|
+
try {
|
|
42
|
+
content = readFileSync(OUTPUT_PATH, 'utf8')
|
|
43
|
+
} catch {
|
|
44
|
+
throw new Error(
|
|
45
|
+
`Generated file not found: ${OUTPUT_PATH}\n` +
|
|
46
|
+
`Run "pnpm scaffold:generate" first to produce the artifact before snapshotting.`
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Snapshot stored alongside test file in __snapshots__/
|
|
51
|
+
await expect(content).toMatchFileSnapshot(resolve(import.meta.dirname, '__snapshots__', 'contracts.md.snap'))
|
|
52
|
+
})
|
|
53
|
+
})
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Thin _gen/ wrapper for the scaffold-contracts generator.
|
|
3
|
-
*
|
|
4
|
-
* The actual generation logic lives in scripts/monorepo/generate-scaffold-contracts.js.
|
|
5
|
-
* This wrapper provides the canonical generate() entry point so the generator
|
|
6
|
-
* participates in the @repo/gen-utils pattern (snapshot tests, drift detection,
|
|
7
|
-
* Turbo gen task).
|
|
8
|
-
*
|
|
9
|
-
* DO NOT move logic here — edit the script instead, then re-run generate().
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { spawnSync } from 'node:child_process'
|
|
13
|
-
import { fileURLToPath } from 'node:url'
|
|
14
|
-
import { resolve, dirname } from 'node:path'
|
|
15
|
-
|
|
16
|
-
const __filename = fileURLToPath(import.meta.url)
|
|
17
|
-
const __dirname = dirname(__filename)
|
|
18
|
-
|
|
19
|
-
/** Monorepo root — four levels up from packages/core/src/_gen/ */
|
|
20
|
-
const ROOT = resolve(__dirname, '..', '..', '..', '..')
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Run the scaffold-contracts generator.
|
|
24
|
-
* Delegates to scripts/monorepo/generate-scaffold-contracts.js via child process
|
|
25
|
-
* so the existing script is the single source of implementation.
|
|
26
|
-
*/
|
|
27
|
-
export function generate(): void {
|
|
28
|
-
const result = spawnSync('node', ['scripts/monorepo/generate-scaffold-contracts.js'], {
|
|
29
|
-
stdio: 'inherit',
|
|
30
|
-
cwd: ROOT
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
if (result.error) {
|
|
34
|
-
throw new Error(`scaffold-contracts generator failed to spawn: ${result.error.message}`)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (result.status !== 0) {
|
|
38
|
-
throw new Error(`scaffold-contracts generator exited with status ${result.status}`)
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Allow direct invocation: node packages/core/src/_gen/scaffold-contracts.ts
|
|
43
|
-
if (process.argv[1] && resolve(process.argv[1]) === __filename) {
|
|
44
|
-
generate()
|
|
45
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Thin _gen/ wrapper for the scaffold-contracts generator.
|
|
3
|
+
*
|
|
4
|
+
* The actual generation logic lives in scripts/monorepo/generate-scaffold-contracts.js.
|
|
5
|
+
* This wrapper provides the canonical generate() entry point so the generator
|
|
6
|
+
* participates in the @repo/gen-utils pattern (snapshot tests, drift detection,
|
|
7
|
+
* Turbo gen task).
|
|
8
|
+
*
|
|
9
|
+
* DO NOT move logic here — edit the script instead, then re-run generate().
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { spawnSync } from 'node:child_process'
|
|
13
|
+
import { fileURLToPath } from 'node:url'
|
|
14
|
+
import { resolve, dirname } from 'node:path'
|
|
15
|
+
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
17
|
+
const __dirname = dirname(__filename)
|
|
18
|
+
|
|
19
|
+
/** Monorepo root — four levels up from packages/core/src/_gen/ */
|
|
20
|
+
const ROOT = resolve(__dirname, '..', '..', '..', '..')
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Run the scaffold-contracts generator.
|
|
24
|
+
* Delegates to scripts/monorepo/generate-scaffold-contracts.js via child process
|
|
25
|
+
* so the existing script is the single source of implementation.
|
|
26
|
+
*/
|
|
27
|
+
export function generate(): void {
|
|
28
|
+
const result = spawnSync('node', ['scripts/monorepo/generate-scaffold-contracts.js'], {
|
|
29
|
+
stdio: 'inherit',
|
|
30
|
+
cwd: ROOT
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
if (result.error) {
|
|
34
|
+
throw new Error(`scaffold-contracts generator failed to spawn: ${result.error.message}`)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (result.status !== 0) {
|
|
38
|
+
throw new Error(`scaffold-contracts generator exited with status ${result.status}`)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Allow direct invocation: node packages/core/src/_gen/scaffold-contracts.ts
|
|
43
|
+
if (process.argv[1] && resolve(process.argv[1]) === __filename) {
|
|
44
|
+
generate()
|
|
45
|
+
}
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
# Credentials Module
|
|
2
|
-
|
|
3
|
-
Organization credentials management with AES-256-GCM encryption.
|
|
4
|
-
|
|
5
|
-
## Import Patterns
|
|
6
|
-
|
|
7
|
-
### Server/Backend (API)
|
|
8
|
-
```typescript
|
|
9
|
-
// Import server-side functions (uses Node.js crypto and process.env)
|
|
10
|
-
import {
|
|
11
|
-
prepareCredentialForInsert,
|
|
12
|
-
decryptCredentialValue,
|
|
13
|
-
encryptCredential,
|
|
14
|
-
decryptCredential,
|
|
15
|
-
type CreateCredentialParams
|
|
16
|
-
} from '@elevasis/core/server'
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
### Browser/Frontend
|
|
20
|
-
|
|
21
|
-
Credential encryption helpers are server-only. Browser code should not import this module or its helper types directly.
|
|
22
|
-
|
|
23
|
-
## Architecture
|
|
24
|
-
|
|
25
|
-
- **`index.ts`**: Type-only re-exports for internal source usage
|
|
26
|
-
- **`server.ts`**: Server-only exports (encryption functions, service helpers)
|
|
27
|
-
- **`encryption.ts`**: AES-256-GCM encryption/decryption (Node.js only)
|
|
28
|
-
- **`service.ts`**: Helper functions for credential operations (Node.js only)
|
|
29
|
-
|
|
30
|
-
## Published Surface Note
|
|
31
|
-
|
|
32
|
-
This directory is source-adjacent. Published app code should import credential helpers from `@elevasis/core/server`, while browser-safe code should treat credentials as an internal server concern.
|
|
33
|
-
|
|
34
|
-
## Why the Split?
|
|
35
|
-
|
|
36
|
-
The encryption module uses Node.js `crypto` and `process.env`, which don't exist in the browser.
|
|
37
|
-
By separating server-only exports into `@elevasis/core/server`, we prevent these Node.js dependencies
|
|
38
|
-
from being bundled into the browser application.
|
|
1
|
+
# Credentials Module
|
|
2
|
+
|
|
3
|
+
Organization credentials management with AES-256-GCM encryption.
|
|
4
|
+
|
|
5
|
+
## Import Patterns
|
|
6
|
+
|
|
7
|
+
### Server/Backend (API)
|
|
8
|
+
```typescript
|
|
9
|
+
// Import server-side functions (uses Node.js crypto and process.env)
|
|
10
|
+
import {
|
|
11
|
+
prepareCredentialForInsert,
|
|
12
|
+
decryptCredentialValue,
|
|
13
|
+
encryptCredential,
|
|
14
|
+
decryptCredential,
|
|
15
|
+
type CreateCredentialParams
|
|
16
|
+
} from '@elevasis/core/server'
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Browser/Frontend
|
|
20
|
+
|
|
21
|
+
Credential encryption helpers are server-only. Browser code should not import this module or its helper types directly.
|
|
22
|
+
|
|
23
|
+
## Architecture
|
|
24
|
+
|
|
25
|
+
- **`index.ts`**: Type-only re-exports for internal source usage
|
|
26
|
+
- **`server.ts`**: Server-only exports (encryption functions, service helpers)
|
|
27
|
+
- **`encryption.ts`**: AES-256-GCM encryption/decryption (Node.js only)
|
|
28
|
+
- **`service.ts`**: Helper functions for credential operations (Node.js only)
|
|
29
|
+
|
|
30
|
+
## Published Surface Note
|
|
31
|
+
|
|
32
|
+
This directory is source-adjacent. Published app code should import credential helpers from `@elevasis/core/server`, while browser-safe code should treat credentials as an internal server concern.
|
|
33
|
+
|
|
34
|
+
## Why the Split?
|
|
35
|
+
|
|
36
|
+
The encryption module uses Node.js `crypto` and `process.env`, which don't exist in the browser.
|
|
37
|
+
By separating server-only exports into `@elevasis/core/server`, we prevent these Node.js dependencies
|
|
38
|
+
from being bundled into the browser application.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// NOTE: Server-side code in ./server/ is intentionally NOT exported here
|
|
2
|
-
// Encryption/decryption and server-side credential helpers should ONLY be used in API
|
|
3
|
-
// Browser imports of @repo/core should not pull in Node.js crypto
|
|
4
|
-
|
|
5
|
-
// Only export types that are safe for browser use
|
|
6
|
-
export type { CreateCredentialParams, CredentialMetadata } from './server/service'
|
|
1
|
+
// NOTE: Server-side code in ./server/ is intentionally NOT exported here
|
|
2
|
+
// Encryption/decryption and server-side credential helpers should ONLY be used in API
|
|
3
|
+
// Browser imports of @repo/core should not pull in Node.js crypto
|
|
4
|
+
|
|
5
|
+
// Only export types that are safe for browser use
|
|
6
|
+
export type { CreateCredentialParams, CredentialMetadata } from './server/service'
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import crypto from 'crypto'
|
|
2
|
-
|
|
3
|
-
const MASTER_KEY = process.env.SECRETS_ENCRYPTION_KEY
|
|
4
|
-
const ALGORITHM = 'aes-256-gcm'
|
|
5
|
-
|
|
6
|
-
interface EncryptedData {
|
|
7
|
-
iv: string
|
|
8
|
-
authTag: string
|
|
9
|
-
data: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function encryptCredential(plaintext: string): string {
|
|
13
|
-
if (!MASTER_KEY) {
|
|
14
|
-
throw new Error('SECRETS_ENCRYPTION_KEY not configured')
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const iv = crypto.randomBytes(16)
|
|
18
|
-
const cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(MASTER_KEY, 'hex'), iv)
|
|
19
|
-
const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()])
|
|
20
|
-
const authTag = cipher.getAuthTag()
|
|
21
|
-
|
|
22
|
-
return JSON.stringify({
|
|
23
|
-
iv: iv.toString('base64'),
|
|
24
|
-
authTag: authTag.toString('base64'),
|
|
25
|
-
data: encrypted.toString('base64')
|
|
26
|
-
})
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function decryptCredential(encrypted: string): string {
|
|
30
|
-
if (!MASTER_KEY) {
|
|
31
|
-
throw new Error('SECRETS_ENCRYPTION_KEY not configured')
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const { iv, authTag, data } = JSON.parse(encrypted) as EncryptedData
|
|
35
|
-
const decipher = crypto.createDecipheriv(ALGORITHM, Buffer.from(MASTER_KEY, 'hex'), Buffer.from(iv, 'base64'))
|
|
36
|
-
decipher.setAuthTag(Buffer.from(authTag, 'base64'))
|
|
37
|
-
|
|
38
|
-
return Buffer.concat([decipher.update(Buffer.from(data, 'base64')), decipher.final()]).toString('utf8')
|
|
39
|
-
}
|
|
1
|
+
import crypto from 'crypto'
|
|
2
|
+
|
|
3
|
+
const MASTER_KEY = process.env.SECRETS_ENCRYPTION_KEY
|
|
4
|
+
const ALGORITHM = 'aes-256-gcm'
|
|
5
|
+
|
|
6
|
+
interface EncryptedData {
|
|
7
|
+
iv: string
|
|
8
|
+
authTag: string
|
|
9
|
+
data: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function encryptCredential(plaintext: string): string {
|
|
13
|
+
if (!MASTER_KEY) {
|
|
14
|
+
throw new Error('SECRETS_ENCRYPTION_KEY not configured')
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const iv = crypto.randomBytes(16)
|
|
18
|
+
const cipher = crypto.createCipheriv(ALGORITHM, Buffer.from(MASTER_KEY, 'hex'), iv)
|
|
19
|
+
const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()])
|
|
20
|
+
const authTag = cipher.getAuthTag()
|
|
21
|
+
|
|
22
|
+
return JSON.stringify({
|
|
23
|
+
iv: iv.toString('base64'),
|
|
24
|
+
authTag: authTag.toString('base64'),
|
|
25
|
+
data: encrypted.toString('base64')
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function decryptCredential(encrypted: string): string {
|
|
30
|
+
if (!MASTER_KEY) {
|
|
31
|
+
throw new Error('SECRETS_ENCRYPTION_KEY not configured')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const { iv, authTag, data } = JSON.parse(encrypted) as EncryptedData
|
|
35
|
+
const decipher = crypto.createDecipheriv(ALGORITHM, Buffer.from(MASTER_KEY, 'hex'), Buffer.from(iv, 'base64'))
|
|
36
|
+
decipher.setAuthTag(Buffer.from(authTag, 'base64'))
|
|
37
|
+
|
|
38
|
+
return Buffer.concat([decipher.update(Buffer.from(data, 'base64')), decipher.final()]).toString('utf8')
|
|
39
|
+
}
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import type { Database } from '../../../../supabase/database.types'
|
|
2
|
-
import { encryptCredential, decryptCredential } from './encryption'
|
|
3
|
-
|
|
4
|
-
type CredentialInsert = Database['public']['Tables']['credentials']['Insert']
|
|
5
|
-
type CredentialRow = Database['public']['Tables']['credentials']['Row']
|
|
6
|
-
|
|
7
|
-
export interface CreateCredentialParams {
|
|
8
|
-
organizationId: string
|
|
9
|
-
name: string
|
|
10
|
-
type: string
|
|
11
|
-
value: Record<string, unknown>
|
|
12
|
-
createdBy: string | null
|
|
13
|
-
provider?: string // OAuth provider ID ('dropbox', 'notion', 'google-sheets')
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface CredentialMetadata {
|
|
17
|
-
id: string
|
|
18
|
-
name: string
|
|
19
|
-
type: string
|
|
20
|
-
provider?: string // OAuth provider ID or undefined for non-OAuth
|
|
21
|
-
createdAt: string
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Prepare credential data for insertion (encrypts the value)
|
|
26
|
-
*/
|
|
27
|
-
export function prepareCredentialForInsert(
|
|
28
|
-
params: CreateCredentialParams
|
|
29
|
-
): Omit<CredentialInsert, 'id' | 'created_at' | 'updated_at'> {
|
|
30
|
-
const encrypted = encryptCredential(JSON.stringify(params.value))
|
|
31
|
-
|
|
32
|
-
return {
|
|
33
|
-
organization_id: params.organizationId,
|
|
34
|
-
name: params.name,
|
|
35
|
-
type: params.type,
|
|
36
|
-
encrypted_value: encrypted,
|
|
37
|
-
created_by: params.createdBy,
|
|
38
|
-
provider: params.provider ?? null // Store provider or null for non-OAuth
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Decrypt credential value from database row
|
|
44
|
-
*/
|
|
45
|
-
export function decryptCredentialValue(encryptedValue: string): Record<string, unknown> {
|
|
46
|
-
return JSON.parse(decryptCredential(encryptedValue))
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Transform database row to metadata (without decrypted value)
|
|
51
|
-
*/
|
|
52
|
-
export function transformToMetadata(row: CredentialRow): CredentialMetadata {
|
|
53
|
-
return {
|
|
54
|
-
id: row.id,
|
|
55
|
-
name: row.name,
|
|
56
|
-
type: row.type,
|
|
57
|
-
provider: row.provider ?? undefined, // Convert null to undefined
|
|
58
|
-
createdAt: row.created_at
|
|
59
|
-
}
|
|
60
|
-
}
|
|
1
|
+
import type { Database } from '../../../../supabase/database.types'
|
|
2
|
+
import { encryptCredential, decryptCredential } from './encryption'
|
|
3
|
+
|
|
4
|
+
type CredentialInsert = Database['public']['Tables']['credentials']['Insert']
|
|
5
|
+
type CredentialRow = Database['public']['Tables']['credentials']['Row']
|
|
6
|
+
|
|
7
|
+
export interface CreateCredentialParams {
|
|
8
|
+
organizationId: string
|
|
9
|
+
name: string
|
|
10
|
+
type: string
|
|
11
|
+
value: Record<string, unknown>
|
|
12
|
+
createdBy: string | null
|
|
13
|
+
provider?: string // OAuth provider ID ('dropbox', 'notion', 'google-sheets')
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface CredentialMetadata {
|
|
17
|
+
id: string
|
|
18
|
+
name: string
|
|
19
|
+
type: string
|
|
20
|
+
provider?: string // OAuth provider ID or undefined for non-OAuth
|
|
21
|
+
createdAt: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Prepare credential data for insertion (encrypts the value)
|
|
26
|
+
*/
|
|
27
|
+
export function prepareCredentialForInsert(
|
|
28
|
+
params: CreateCredentialParams
|
|
29
|
+
): Omit<CredentialInsert, 'id' | 'created_at' | 'updated_at'> {
|
|
30
|
+
const encrypted = encryptCredential(JSON.stringify(params.value))
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
organization_id: params.organizationId,
|
|
34
|
+
name: params.name,
|
|
35
|
+
type: params.type,
|
|
36
|
+
encrypted_value: encrypted,
|
|
37
|
+
created_by: params.createdBy,
|
|
38
|
+
provider: params.provider ?? null // Store provider or null for non-OAuth
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Decrypt credential value from database row
|
|
44
|
+
*/
|
|
45
|
+
export function decryptCredentialValue(encryptedValue: string): Record<string, unknown> {
|
|
46
|
+
return JSON.parse(decryptCredential(encryptedValue))
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Transform database row to metadata (without decrypted value)
|
|
51
|
+
*/
|
|
52
|
+
export function transformToMetadata(row: CredentialRow): CredentialMetadata {
|
|
53
|
+
return {
|
|
54
|
+
id: row.id,
|
|
55
|
+
name: row.name,
|
|
56
|
+
type: row.type,
|
|
57
|
+
provider: row.provider ?? undefined, // Convert null to undefined
|
|
58
|
+
createdAt: row.created_at
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
// Config types
|
|
2
|
-
export * from './types'
|
|
3
|
-
|
|
4
|
-
// Organization types
|
|
5
|
-
export * from './organizations/index'
|
|
6
|
-
|
|
7
|
-
// User types
|
|
8
|
-
export * from './users/index'
|
|
9
|
-
|
|
10
|
-
// Membership types
|
|
11
|
-
export * from './memberships/index'
|
|
12
|
-
|
|
13
|
-
// Invitation types
|
|
14
|
-
export * from './invitations/index'
|
|
15
|
-
|
|
16
|
-
// Credentials types
|
|
17
|
-
export * from './credentials/index'
|
|
1
|
+
// Config types
|
|
2
|
+
export * from './types'
|
|
3
|
+
|
|
4
|
+
// Organization types
|
|
5
|
+
export * from './organizations/index'
|
|
6
|
+
|
|
7
|
+
// User types
|
|
8
|
+
export * from './users/index'
|
|
9
|
+
|
|
10
|
+
// Membership types
|
|
11
|
+
export * from './memberships/index'
|
|
12
|
+
|
|
13
|
+
// Invitation types
|
|
14
|
+
export * from './invitations/index'
|
|
15
|
+
|
|
16
|
+
// Credentials types
|
|
17
|
+
export * from './credentials/index'
|