@elevasis/core 0.7.0 → 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 +3 -3
- 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 -1
- package/src/business/projects/sse-events.ts +21 -0
- 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 -699
- 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 -34
- 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 +611 -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,144 +1,144 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { buildCredentialValue, extractFormValues } from '../utils'
|
|
3
|
-
|
|
4
|
-
describe('Credential Utilities', () => {
|
|
5
|
-
describe('buildCredentialValue', () => {
|
|
6
|
-
it('should build single-field credential value', () => {
|
|
7
|
-
const result = buildCredentialValue('api-key', {
|
|
8
|
-
apiKey: 'test-key-123'
|
|
9
|
-
})
|
|
10
|
-
expect(result).toEqual({ apiKey: 'test-key-123' })
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
it('should trim whitespace from values', () => {
|
|
14
|
-
const result = buildCredentialValue('api-key', {
|
|
15
|
-
apiKey: ' test-key '
|
|
16
|
-
})
|
|
17
|
-
expect(result).toEqual({ apiKey: 'test-key' })
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
it('should throw error for OAuth types', () => {
|
|
21
|
-
expect(() => buildCredentialValue('dropbox', { apiKey: 'test' })).toThrow(
|
|
22
|
-
'buildCredentialValue should not be used for OAuth type: dropbox'
|
|
23
|
-
)
|
|
24
|
-
|
|
25
|
-
expect(() => buildCredentialValue('google-sheets', { apiKey: 'test' })).toThrow(
|
|
26
|
-
'buildCredentialValue should not be used for OAuth type: google-sheets'
|
|
27
|
-
)
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
it('should ignore undefined and null values', () => {
|
|
31
|
-
const result = buildCredentialValue('api-key', {
|
|
32
|
-
apiKey: 'valid-key',
|
|
33
|
-
extra: undefined as unknown,
|
|
34
|
-
another: null as unknown
|
|
35
|
-
})
|
|
36
|
-
// Only includes defined fields from schema
|
|
37
|
-
expect(result).toEqual({
|
|
38
|
-
apiKey: 'valid-key'
|
|
39
|
-
})
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('should only include fields defined in schema', () => {
|
|
43
|
-
const result = buildCredentialValue('api-key', {
|
|
44
|
-
apiKey: 'test-key',
|
|
45
|
-
extraField: 'should-not-be-included'
|
|
46
|
-
})
|
|
47
|
-
// Only apiKey is in api-key schema
|
|
48
|
-
expect(result).toEqual({ apiKey: 'test-key' })
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
it('should build webhook-secret credential with signingSecret field', () => {
|
|
52
|
-
const result = buildCredentialValue('webhook-secret', {
|
|
53
|
-
signingSecret: 'whsec_abc123'
|
|
54
|
-
})
|
|
55
|
-
// webhook-secret schema uses 'signingSecret' key (matches gateway.ts lookup)
|
|
56
|
-
expect(result).toEqual({ signingSecret: 'whsec_abc123' })
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
it('should trim whitespace from webhook-secret signingSecret', () => {
|
|
60
|
-
const result = buildCredentialValue('webhook-secret', {
|
|
61
|
-
signingSecret: ' whsec_abc123 '
|
|
62
|
-
})
|
|
63
|
-
expect(result).toEqual({ signingSecret: 'whsec_abc123' })
|
|
64
|
-
})
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
describe('extractFormValues', () => {
|
|
68
|
-
it('should extract string values from credential object', () => {
|
|
69
|
-
const credentialValue = {
|
|
70
|
-
apiKey: 'test-key',
|
|
71
|
-
token: 'test-token'
|
|
72
|
-
}
|
|
73
|
-
const result = extractFormValues(credentialValue)
|
|
74
|
-
expect(result).toEqual({
|
|
75
|
-
apiKey: 'test-key',
|
|
76
|
-
token: 'test-token'
|
|
77
|
-
})
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
it('should convert non-string values to strings', () => {
|
|
81
|
-
const credentialValue = {
|
|
82
|
-
apiKey: 'test-key',
|
|
83
|
-
count: 123,
|
|
84
|
-
enabled: true
|
|
85
|
-
}
|
|
86
|
-
const result = extractFormValues(credentialValue)
|
|
87
|
-
expect(result).toEqual({
|
|
88
|
-
apiKey: 'test-key',
|
|
89
|
-
count: '123',
|
|
90
|
-
enabled: 'true'
|
|
91
|
-
})
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
it('should skip null and undefined values', () => {
|
|
95
|
-
const credentialValue = {
|
|
96
|
-
apiKey: 'test-key',
|
|
97
|
-
nullField: null,
|
|
98
|
-
undefinedField: undefined
|
|
99
|
-
}
|
|
100
|
-
const result = extractFormValues(credentialValue)
|
|
101
|
-
expect(result).toEqual({
|
|
102
|
-
apiKey: 'test-key'
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
it('should handle empty objects', () => {
|
|
107
|
-
const result = extractFormValues({})
|
|
108
|
-
expect(result).toEqual({})
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
it('should handle nested objects by converting to string', () => {
|
|
112
|
-
const credentialValue = {
|
|
113
|
-
apiKey: 'test-key',
|
|
114
|
-
metadata: { nested: 'value' }
|
|
115
|
-
}
|
|
116
|
-
const result = extractFormValues(credentialValue)
|
|
117
|
-
expect(result.apiKey).toBe('test-key')
|
|
118
|
-
expect(result.metadata).toBe('[object Object]')
|
|
119
|
-
})
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
describe('Integration: Round-trip conversion', () => {
|
|
123
|
-
it('should preserve single-field credentials through round-trip', () => {
|
|
124
|
-
const original = { apiKey: 'test-key-123' }
|
|
125
|
-
const formValues = extractFormValues(original)
|
|
126
|
-
const rebuilt = buildCredentialValue('api-key', formValues)
|
|
127
|
-
expect(rebuilt).toEqual(original)
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
it('should handle whitespace during round-trip', () => {
|
|
131
|
-
const original = { apiKey: 'test-key' }
|
|
132
|
-
const formValuesWithSpace = { apiKey: ' test-key ' }
|
|
133
|
-
const rebuilt = buildCredentialValue('api-key', formValuesWithSpace)
|
|
134
|
-
expect(rebuilt).toEqual(original)
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
it('should preserve webhook-secret credentials through round-trip', () => {
|
|
138
|
-
const original = { signingSecret: 'whsec_abc123' }
|
|
139
|
-
const formValues = extractFormValues(original)
|
|
140
|
-
const rebuilt = buildCredentialValue('webhook-secret', formValues)
|
|
141
|
-
expect(rebuilt).toEqual(original)
|
|
142
|
-
})
|
|
143
|
-
})
|
|
144
|
-
})
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { buildCredentialValue, extractFormValues } from '../utils'
|
|
3
|
+
|
|
4
|
+
describe('Credential Utilities', () => {
|
|
5
|
+
describe('buildCredentialValue', () => {
|
|
6
|
+
it('should build single-field credential value', () => {
|
|
7
|
+
const result = buildCredentialValue('api-key', {
|
|
8
|
+
apiKey: 'test-key-123'
|
|
9
|
+
})
|
|
10
|
+
expect(result).toEqual({ apiKey: 'test-key-123' })
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('should trim whitespace from values', () => {
|
|
14
|
+
const result = buildCredentialValue('api-key', {
|
|
15
|
+
apiKey: ' test-key '
|
|
16
|
+
})
|
|
17
|
+
expect(result).toEqual({ apiKey: 'test-key' })
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('should throw error for OAuth types', () => {
|
|
21
|
+
expect(() => buildCredentialValue('dropbox', { apiKey: 'test' })).toThrow(
|
|
22
|
+
'buildCredentialValue should not be used for OAuth type: dropbox'
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
expect(() => buildCredentialValue('google-sheets', { apiKey: 'test' })).toThrow(
|
|
26
|
+
'buildCredentialValue should not be used for OAuth type: google-sheets'
|
|
27
|
+
)
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
it('should ignore undefined and null values', () => {
|
|
31
|
+
const result = buildCredentialValue('api-key', {
|
|
32
|
+
apiKey: 'valid-key',
|
|
33
|
+
extra: undefined as unknown,
|
|
34
|
+
another: null as unknown
|
|
35
|
+
})
|
|
36
|
+
// Only includes defined fields from schema
|
|
37
|
+
expect(result).toEqual({
|
|
38
|
+
apiKey: 'valid-key'
|
|
39
|
+
})
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
it('should only include fields defined in schema', () => {
|
|
43
|
+
const result = buildCredentialValue('api-key', {
|
|
44
|
+
apiKey: 'test-key',
|
|
45
|
+
extraField: 'should-not-be-included'
|
|
46
|
+
})
|
|
47
|
+
// Only apiKey is in api-key schema
|
|
48
|
+
expect(result).toEqual({ apiKey: 'test-key' })
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('should build webhook-secret credential with signingSecret field', () => {
|
|
52
|
+
const result = buildCredentialValue('webhook-secret', {
|
|
53
|
+
signingSecret: 'whsec_abc123'
|
|
54
|
+
})
|
|
55
|
+
// webhook-secret schema uses 'signingSecret' key (matches gateway.ts lookup)
|
|
56
|
+
expect(result).toEqual({ signingSecret: 'whsec_abc123' })
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('should trim whitespace from webhook-secret signingSecret', () => {
|
|
60
|
+
const result = buildCredentialValue('webhook-secret', {
|
|
61
|
+
signingSecret: ' whsec_abc123 '
|
|
62
|
+
})
|
|
63
|
+
expect(result).toEqual({ signingSecret: 'whsec_abc123' })
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
describe('extractFormValues', () => {
|
|
68
|
+
it('should extract string values from credential object', () => {
|
|
69
|
+
const credentialValue = {
|
|
70
|
+
apiKey: 'test-key',
|
|
71
|
+
token: 'test-token'
|
|
72
|
+
}
|
|
73
|
+
const result = extractFormValues(credentialValue)
|
|
74
|
+
expect(result).toEqual({
|
|
75
|
+
apiKey: 'test-key',
|
|
76
|
+
token: 'test-token'
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('should convert non-string values to strings', () => {
|
|
81
|
+
const credentialValue = {
|
|
82
|
+
apiKey: 'test-key',
|
|
83
|
+
count: 123,
|
|
84
|
+
enabled: true
|
|
85
|
+
}
|
|
86
|
+
const result = extractFormValues(credentialValue)
|
|
87
|
+
expect(result).toEqual({
|
|
88
|
+
apiKey: 'test-key',
|
|
89
|
+
count: '123',
|
|
90
|
+
enabled: 'true'
|
|
91
|
+
})
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
it('should skip null and undefined values', () => {
|
|
95
|
+
const credentialValue = {
|
|
96
|
+
apiKey: 'test-key',
|
|
97
|
+
nullField: null,
|
|
98
|
+
undefinedField: undefined
|
|
99
|
+
}
|
|
100
|
+
const result = extractFormValues(credentialValue)
|
|
101
|
+
expect(result).toEqual({
|
|
102
|
+
apiKey: 'test-key'
|
|
103
|
+
})
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('should handle empty objects', () => {
|
|
107
|
+
const result = extractFormValues({})
|
|
108
|
+
expect(result).toEqual({})
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it('should handle nested objects by converting to string', () => {
|
|
112
|
+
const credentialValue = {
|
|
113
|
+
apiKey: 'test-key',
|
|
114
|
+
metadata: { nested: 'value' }
|
|
115
|
+
}
|
|
116
|
+
const result = extractFormValues(credentialValue)
|
|
117
|
+
expect(result.apiKey).toBe('test-key')
|
|
118
|
+
expect(result.metadata).toBe('[object Object]')
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
describe('Integration: Round-trip conversion', () => {
|
|
123
|
+
it('should preserve single-field credentials through round-trip', () => {
|
|
124
|
+
const original = { apiKey: 'test-key-123' }
|
|
125
|
+
const formValues = extractFormValues(original)
|
|
126
|
+
const rebuilt = buildCredentialValue('api-key', formValues)
|
|
127
|
+
expect(rebuilt).toEqual(original)
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
it('should handle whitespace during round-trip', () => {
|
|
131
|
+
const original = { apiKey: 'test-key' }
|
|
132
|
+
const formValuesWithSpace = { apiKey: ' test-key ' }
|
|
133
|
+
const rebuilt = buildCredentialValue('api-key', formValuesWithSpace)
|
|
134
|
+
expect(rebuilt).toEqual(original)
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it('should preserve webhook-secret credentials through round-trip', () => {
|
|
138
|
+
const original = { signingSecret: 'whsec_abc123' }
|
|
139
|
+
const formValues = extractFormValues(original)
|
|
140
|
+
const rebuilt = buildCredentialValue('webhook-secret', formValues)
|
|
141
|
+
expect(rebuilt).toEqual(original)
|
|
142
|
+
})
|
|
143
|
+
})
|
|
144
|
+
})
|
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
import { z } from 'zod'
|
|
2
|
-
import { UuidSchema, CredentialNameSchema } from '../../platform/utils/validation'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Credential API Validation Schemas
|
|
6
|
-
*
|
|
7
|
-
* Separate from credential configuration schemas (schemas.ts).
|
|
8
|
-
* - schemas.ts: Credential field definitions and type registry
|
|
9
|
-
* - api-schemas.ts: HTTP request/response validation
|
|
10
|
-
*
|
|
11
|
-
* Design: Input Validation Standardization
|
|
12
|
-
* @see apps/docs/content/docs/in-progress/active-development/security/active/credentials-integrations-validation-implementation.mdx
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Credential type validation
|
|
17
|
-
* These are the actual `type` values stored in the database:
|
|
18
|
-
* - 'oauth': All OAuth providers (notion, google-sheets) store this type
|
|
19
|
-
* - 'api-key': Generic single-field API key credentials
|
|
20
|
-
* - 'webhook-secret': Webhook signing secrets for signature validation
|
|
21
|
-
*
|
|
22
|
-
* Note: Provider-specific identifiers (notion, google-sheets) are CREDENTIAL_SCHEMAS
|
|
23
|
-
* keys used for UI lookup, NOT stored type values. OAuth credentials store type='oauth'.
|
|
24
|
-
*/
|
|
25
|
-
export const CredentialTypeSchema = z.enum(['oauth', 'api-key', 'webhook-secret', 'api-key-secret'])
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Credential value validation
|
|
29
|
-
* - Must be a non-empty object
|
|
30
|
-
* - Keys are strings, values can be any JSON type
|
|
31
|
-
* - Max 50 keys (prevents DoS)
|
|
32
|
-
* - Individual string values max 10KB (prevents DoS)
|
|
33
|
-
*
|
|
34
|
-
* SECURITY:
|
|
35
|
-
* - Prevents DoS via massive credential payloads
|
|
36
|
-
* - Enforces reasonable limits for credential storage
|
|
37
|
-
*/
|
|
38
|
-
const CredentialValueSchema = z
|
|
39
|
-
.record(z.string(), z.unknown())
|
|
40
|
-
.refine((val) => Object.keys(val).length > 0, { message: 'Credential value must not be empty' })
|
|
41
|
-
.refine((val) => Object.keys(val).length <= 50, { message: 'Credential value has too many keys (max 50)' })
|
|
42
|
-
.refine(
|
|
43
|
-
(val) => {
|
|
44
|
-
// Check individual string values for size
|
|
45
|
-
for (const v of Object.values(val)) {
|
|
46
|
-
if (typeof v === 'string' && v.length > 10240) {
|
|
47
|
-
return false
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return true
|
|
51
|
-
},
|
|
52
|
-
{ message: 'Individual credential values too large (max 10KB per string)' }
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* POST /api/credentials - Create credential
|
|
57
|
-
*/
|
|
58
|
-
export const CreateCredentialRequestSchema = z
|
|
59
|
-
.object({
|
|
60
|
-
name: CredentialNameSchema,
|
|
61
|
-
type: CredentialTypeSchema,
|
|
62
|
-
value: CredentialValueSchema,
|
|
63
|
-
provider: z.string().optional() // OAuth provider ID ('dropbox', 'notion', 'google-sheets')
|
|
64
|
-
})
|
|
65
|
-
.strict() // Reject unknown fields (prevents mass assignment)
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Response for credential creation
|
|
69
|
-
*/
|
|
70
|
-
export const CreateCredentialResponseSchema = z.object({
|
|
71
|
-
id: UuidSchema,
|
|
72
|
-
name: z.string()
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* GET /api/credentials - List credentials
|
|
77
|
-
*/
|
|
78
|
-
export const ListCredentialsResponseSchema = z.object({
|
|
79
|
-
credentials: z.array(
|
|
80
|
-
z.object({
|
|
81
|
-
id: UuidSchema,
|
|
82
|
-
name: z.string(),
|
|
83
|
-
type: z.string(),
|
|
84
|
-
provider: z.string().nullable(), // OAuth provider or null for non-OAuth
|
|
85
|
-
createdAt: z.string().datetime()
|
|
86
|
-
})
|
|
87
|
-
)
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
/** API response type for a single credential list item */
|
|
91
|
-
export type CredentialListItem = z.infer<typeof ListCredentialsResponseSchema>['credentials'][number]
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* PATCH /api/credentials/:credentialId - Update credential
|
|
95
|
-
*/
|
|
96
|
-
export const UpdateCredentialParamsSchema = z.object({
|
|
97
|
-
credentialId: UuidSchema
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
export const UpdateCredentialRequestSchema = z
|
|
101
|
-
.object({
|
|
102
|
-
value: CredentialValueSchema.optional(),
|
|
103
|
-
name: CredentialNameSchema.optional()
|
|
104
|
-
})
|
|
105
|
-
.strict()
|
|
106
|
-
.refine((data) => data.value !== undefined || data.name !== undefined, {
|
|
107
|
-
message: 'At least one field (value or name) must be provided'
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* DELETE /api/credentials/:credentialId - Delete credential
|
|
112
|
-
*/
|
|
113
|
-
export const DeleteCredentialParamsSchema = z.object({
|
|
114
|
-
credentialId: UuidSchema
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* GET /api/credentials/:credentialName/decrypt - CRITICAL ENDPOINT
|
|
119
|
-
* Decrypt credential value for agent/tool use
|
|
120
|
-
*
|
|
121
|
-
* SECURITY: credentialName validated with strict regex to prevent path traversal
|
|
122
|
-
*/
|
|
123
|
-
export const DecryptCredentialParamsSchema = z.object({
|
|
124
|
-
credentialName: CredentialNameSchema
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
export const DecryptCredentialResponseSchema = z.object({
|
|
128
|
-
value: z.record(z.string(), z.unknown())
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Export all schemas for use in routes
|
|
133
|
-
*/
|
|
134
|
-
export const CredentialSchemas = {
|
|
135
|
-
CreateRequest: CreateCredentialRequestSchema,
|
|
136
|
-
CreateResponse: CreateCredentialResponseSchema,
|
|
137
|
-
ListResponse: ListCredentialsResponseSchema,
|
|
138
|
-
UpdateParams: UpdateCredentialParamsSchema,
|
|
139
|
-
UpdateRequest: UpdateCredentialRequestSchema,
|
|
140
|
-
DeleteParams: DeleteCredentialParamsSchema,
|
|
141
|
-
DecryptParams: DecryptCredentialParamsSchema,
|
|
142
|
-
DecryptResponse: DecryptCredentialResponseSchema
|
|
143
|
-
}
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { UuidSchema, CredentialNameSchema } from '../../platform/utils/validation'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Credential API Validation Schemas
|
|
6
|
+
*
|
|
7
|
+
* Separate from credential configuration schemas (schemas.ts).
|
|
8
|
+
* - schemas.ts: Credential field definitions and type registry
|
|
9
|
+
* - api-schemas.ts: HTTP request/response validation
|
|
10
|
+
*
|
|
11
|
+
* Design: Input Validation Standardization
|
|
12
|
+
* @see apps/docs/content/docs/in-progress/active-development/security/active/credentials-integrations-validation-implementation.mdx
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Credential type validation
|
|
17
|
+
* These are the actual `type` values stored in the database:
|
|
18
|
+
* - 'oauth': All OAuth providers (notion, google-sheets) store this type
|
|
19
|
+
* - 'api-key': Generic single-field API key credentials
|
|
20
|
+
* - 'webhook-secret': Webhook signing secrets for signature validation
|
|
21
|
+
*
|
|
22
|
+
* Note: Provider-specific identifiers (notion, google-sheets) are CREDENTIAL_SCHEMAS
|
|
23
|
+
* keys used for UI lookup, NOT stored type values. OAuth credentials store type='oauth'.
|
|
24
|
+
*/
|
|
25
|
+
export const CredentialTypeSchema = z.enum(['oauth', 'api-key', 'webhook-secret', 'api-key-secret'])
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Credential value validation
|
|
29
|
+
* - Must be a non-empty object
|
|
30
|
+
* - Keys are strings, values can be any JSON type
|
|
31
|
+
* - Max 50 keys (prevents DoS)
|
|
32
|
+
* - Individual string values max 10KB (prevents DoS)
|
|
33
|
+
*
|
|
34
|
+
* SECURITY:
|
|
35
|
+
* - Prevents DoS via massive credential payloads
|
|
36
|
+
* - Enforces reasonable limits for credential storage
|
|
37
|
+
*/
|
|
38
|
+
const CredentialValueSchema = z
|
|
39
|
+
.record(z.string(), z.unknown())
|
|
40
|
+
.refine((val) => Object.keys(val).length > 0, { message: 'Credential value must not be empty' })
|
|
41
|
+
.refine((val) => Object.keys(val).length <= 50, { message: 'Credential value has too many keys (max 50)' })
|
|
42
|
+
.refine(
|
|
43
|
+
(val) => {
|
|
44
|
+
// Check individual string values for size
|
|
45
|
+
for (const v of Object.values(val)) {
|
|
46
|
+
if (typeof v === 'string' && v.length > 10240) {
|
|
47
|
+
return false
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return true
|
|
51
|
+
},
|
|
52
|
+
{ message: 'Individual credential values too large (max 10KB per string)' }
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* POST /api/credentials - Create credential
|
|
57
|
+
*/
|
|
58
|
+
export const CreateCredentialRequestSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
name: CredentialNameSchema,
|
|
61
|
+
type: CredentialTypeSchema,
|
|
62
|
+
value: CredentialValueSchema,
|
|
63
|
+
provider: z.string().optional() // OAuth provider ID ('dropbox', 'notion', 'google-sheets')
|
|
64
|
+
})
|
|
65
|
+
.strict() // Reject unknown fields (prevents mass assignment)
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Response for credential creation
|
|
69
|
+
*/
|
|
70
|
+
export const CreateCredentialResponseSchema = z.object({
|
|
71
|
+
id: UuidSchema,
|
|
72
|
+
name: z.string()
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* GET /api/credentials - List credentials
|
|
77
|
+
*/
|
|
78
|
+
export const ListCredentialsResponseSchema = z.object({
|
|
79
|
+
credentials: z.array(
|
|
80
|
+
z.object({
|
|
81
|
+
id: UuidSchema,
|
|
82
|
+
name: z.string(),
|
|
83
|
+
type: z.string(),
|
|
84
|
+
provider: z.string().nullable(), // OAuth provider or null for non-OAuth
|
|
85
|
+
createdAt: z.string().datetime()
|
|
86
|
+
})
|
|
87
|
+
)
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
/** API response type for a single credential list item */
|
|
91
|
+
export type CredentialListItem = z.infer<typeof ListCredentialsResponseSchema>['credentials'][number]
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* PATCH /api/credentials/:credentialId - Update credential
|
|
95
|
+
*/
|
|
96
|
+
export const UpdateCredentialParamsSchema = z.object({
|
|
97
|
+
credentialId: UuidSchema
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
export const UpdateCredentialRequestSchema = z
|
|
101
|
+
.object({
|
|
102
|
+
value: CredentialValueSchema.optional(),
|
|
103
|
+
name: CredentialNameSchema.optional()
|
|
104
|
+
})
|
|
105
|
+
.strict()
|
|
106
|
+
.refine((data) => data.value !== undefined || data.name !== undefined, {
|
|
107
|
+
message: 'At least one field (value or name) must be provided'
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* DELETE /api/credentials/:credentialId - Delete credential
|
|
112
|
+
*/
|
|
113
|
+
export const DeleteCredentialParamsSchema = z.object({
|
|
114
|
+
credentialId: UuidSchema
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* GET /api/credentials/:credentialName/decrypt - CRITICAL ENDPOINT
|
|
119
|
+
* Decrypt credential value for agent/tool use
|
|
120
|
+
*
|
|
121
|
+
* SECURITY: credentialName validated with strict regex to prevent path traversal
|
|
122
|
+
*/
|
|
123
|
+
export const DecryptCredentialParamsSchema = z.object({
|
|
124
|
+
credentialName: CredentialNameSchema
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
export const DecryptCredentialResponseSchema = z.object({
|
|
128
|
+
value: z.record(z.string(), z.unknown())
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Export all schemas for use in routes
|
|
133
|
+
*/
|
|
134
|
+
export const CredentialSchemas = {
|
|
135
|
+
CreateRequest: CreateCredentialRequestSchema,
|
|
136
|
+
CreateResponse: CreateCredentialResponseSchema,
|
|
137
|
+
ListResponse: ListCredentialsResponseSchema,
|
|
138
|
+
UpdateParams: UpdateCredentialParamsSchema,
|
|
139
|
+
UpdateRequest: UpdateCredentialRequestSchema,
|
|
140
|
+
DeleteParams: DeleteCredentialParamsSchema,
|
|
141
|
+
DecryptParams: DecryptCredentialParamsSchema,
|
|
142
|
+
DecryptResponse: DecryptCredentialResponseSchema
|
|
143
|
+
}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Credential Type System
|
|
3
|
-
*
|
|
4
|
-
* Dynamic credential form system with type-based field rendering.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* - Add new integration → Update CREDENTIAL_SCHEMAS registry
|
|
8
|
-
* - No modal changes needed
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* import { getCredentialSchema, buildCredentialValue } from '@repo/core'
|
|
13
|
-
*
|
|
14
|
-
* const schema = getCredentialSchema('attio')
|
|
15
|
-
* const value = buildCredentialValue('api-key', { apiKey: '...' })
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
export {
|
|
20
|
-
CREDENTIAL_SCHEMAS,
|
|
21
|
-
getCredentialSchema,
|
|
22
|
-
listCredentialSchemas,
|
|
23
|
-
getCredentialTypes,
|
|
24
|
-
} from './schemas'
|
|
25
|
-
|
|
26
|
-
export type { CredentialSchema, CredentialField } from './schemas'
|
|
27
|
-
|
|
28
|
-
export { buildCredentialValue, extractFormValues } from './utils'
|
|
29
|
-
|
|
30
|
-
// API validation schemas
|
|
31
|
-
export * from './api-schemas'
|
|
32
|
-
export { CredentialSchemas } from './api-schemas'
|
|
1
|
+
/**
|
|
2
|
+
* Credential Type System
|
|
3
|
+
*
|
|
4
|
+
* Dynamic credential form system with type-based field rendering.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* - Add new integration → Update CREDENTIAL_SCHEMAS registry
|
|
8
|
+
* - No modal changes needed
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { getCredentialSchema, buildCredentialValue } from '@repo/core'
|
|
13
|
+
*
|
|
14
|
+
* const schema = getCredentialSchema('attio')
|
|
15
|
+
* const value = buildCredentialValue('api-key', { apiKey: '...' })
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
CREDENTIAL_SCHEMAS,
|
|
21
|
+
getCredentialSchema,
|
|
22
|
+
listCredentialSchemas,
|
|
23
|
+
getCredentialTypes,
|
|
24
|
+
} from './schemas'
|
|
25
|
+
|
|
26
|
+
export type { CredentialSchema, CredentialField } from './schemas'
|
|
27
|
+
|
|
28
|
+
export { buildCredentialValue, extractFormValues } from './utils'
|
|
29
|
+
|
|
30
|
+
// API validation schemas
|
|
31
|
+
export * from './api-schemas'
|
|
32
|
+
export { CredentialSchemas } from './api-schemas'
|