@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,50 +1,50 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Supabase Invitation Types
|
|
3
|
-
* Generated from database schema with type aliases for consistent naming
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { Database } from '../../../supabase/database.types'
|
|
7
|
-
|
|
8
|
-
// Type aliases for org_invitations table
|
|
9
|
-
export type SupabaseOrgInvitation = Database['public']['Tables']['org_invitations']['Row']
|
|
10
|
-
export type SupabaseOrgInvitationInsert = Database['public']['Tables']['org_invitations']['Insert']
|
|
11
|
-
export type SupabaseOrgInvitationUpdate = Database['public']['Tables']['org_invitations']['Update']
|
|
12
|
-
|
|
13
|
-
// Extended type with computed fields for UI
|
|
14
|
-
export interface AdminOrgInvitation extends SupabaseOrgInvitation {
|
|
15
|
-
organizations?: {
|
|
16
|
-
id: string
|
|
17
|
-
name: string
|
|
18
|
-
status?: string
|
|
19
|
-
}
|
|
20
|
-
users?: {
|
|
21
|
-
id: string
|
|
22
|
-
email: string
|
|
23
|
-
first_name?: string | null
|
|
24
|
-
last_name?: string | null
|
|
25
|
-
profile_picture_url?: string | null
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// Invitation states from database constraint
|
|
30
|
-
export type InvitationState = 'pending' | 'accepted' | 'revoked' | 'expired'
|
|
31
|
-
|
|
32
|
-
// Helper function to transform Supabase data to internal format
|
|
33
|
-
export function transformSupabaseToInvitation(supabaseInvitation: SupabaseOrgInvitation) {
|
|
34
|
-
return {
|
|
35
|
-
id: supabaseInvitation.id,
|
|
36
|
-
workosInvitationId: supabaseInvitation.workos_invitation_id,
|
|
37
|
-
email: supabaseInvitation.email,
|
|
38
|
-
organizationId: supabaseInvitation.organization_id,
|
|
39
|
-
inviterUserId: supabaseInvitation.inviter_user_id,
|
|
40
|
-
invitationState: supabaseInvitation.invitation_state as InvitationState | null,
|
|
41
|
-
roleSlug: supabaseInvitation.role_slug,
|
|
42
|
-
invitationToken: supabaseInvitation.invitation_token,
|
|
43
|
-
acceptInvitationUrl: supabaseInvitation.accept_invitation_url,
|
|
44
|
-
acceptedAt: supabaseInvitation.accepted_at,
|
|
45
|
-
revokedAt: supabaseInvitation.revoked_at,
|
|
46
|
-
expiresAt: supabaseInvitation.expires_at,
|
|
47
|
-
createdAt: supabaseInvitation.created_at,
|
|
48
|
-
updatedAt: supabaseInvitation.updated_at
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Supabase Invitation Types
|
|
3
|
+
* Generated from database schema with type aliases for consistent naming
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Database } from '../../../supabase/database.types'
|
|
7
|
+
|
|
8
|
+
// Type aliases for org_invitations table
|
|
9
|
+
export type SupabaseOrgInvitation = Database['public']['Tables']['org_invitations']['Row']
|
|
10
|
+
export type SupabaseOrgInvitationInsert = Database['public']['Tables']['org_invitations']['Insert']
|
|
11
|
+
export type SupabaseOrgInvitationUpdate = Database['public']['Tables']['org_invitations']['Update']
|
|
12
|
+
|
|
13
|
+
// Extended type with computed fields for UI
|
|
14
|
+
export interface AdminOrgInvitation extends SupabaseOrgInvitation {
|
|
15
|
+
organizations?: {
|
|
16
|
+
id: string
|
|
17
|
+
name: string
|
|
18
|
+
status?: string
|
|
19
|
+
}
|
|
20
|
+
users?: {
|
|
21
|
+
id: string
|
|
22
|
+
email: string
|
|
23
|
+
first_name?: string | null
|
|
24
|
+
last_name?: string | null
|
|
25
|
+
profile_picture_url?: string | null
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Invitation states from database constraint
|
|
30
|
+
export type InvitationState = 'pending' | 'accepted' | 'revoked' | 'expired'
|
|
31
|
+
|
|
32
|
+
// Helper function to transform Supabase data to internal format
|
|
33
|
+
export function transformSupabaseToInvitation(supabaseInvitation: SupabaseOrgInvitation) {
|
|
34
|
+
return {
|
|
35
|
+
id: supabaseInvitation.id,
|
|
36
|
+
workosInvitationId: supabaseInvitation.workos_invitation_id,
|
|
37
|
+
email: supabaseInvitation.email,
|
|
38
|
+
organizationId: supabaseInvitation.organization_id,
|
|
39
|
+
inviterUserId: supabaseInvitation.inviter_user_id,
|
|
40
|
+
invitationState: supabaseInvitation.invitation_state as InvitationState | null,
|
|
41
|
+
roleSlug: supabaseInvitation.role_slug,
|
|
42
|
+
invitationToken: supabaseInvitation.invitation_token,
|
|
43
|
+
acceptInvitationUrl: supabaseInvitation.accept_invitation_url,
|
|
44
|
+
acceptedAt: supabaseInvitation.accepted_at,
|
|
45
|
+
revokedAt: supabaseInvitation.revoked_at,
|
|
46
|
+
expiresAt: supabaseInvitation.expires_at,
|
|
47
|
+
createdAt: supabaseInvitation.created_at,
|
|
48
|
+
updatedAt: supabaseInvitation.updated_at
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memberships Domain - Zod Validation Schemas
|
|
3
|
-
*
|
|
4
|
-
* Validation schemas for membership management endpoints.
|
|
5
|
-
* Includes request bodies, query params, and path params.
|
|
6
|
-
*
|
|
7
|
-
* Security:
|
|
8
|
-
* - All schemas use .strict() to prevent mass assignment attacks
|
|
9
|
-
* - UUID validation prevents invalid references
|
|
10
|
-
* - Role enum validation prevents privilege escalation
|
|
11
|
-
* - organizationId never accepted in body (from JWT when needed)
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { z } from 'zod'
|
|
15
|
-
|
|
16
|
-
// ============================================================================
|
|
17
|
-
// Shared Schemas
|
|
18
|
-
// ============================================================================
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Membership role validation
|
|
22
|
-
* Restricts to valid role slugs only
|
|
23
|
-
*
|
|
24
|
-
* Security: Prevents privilege escalation by limiting role values
|
|
25
|
-
*/
|
|
26
|
-
export const MembershipRoleSchema = z.enum(['admin', 'member'])
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Membership status validation
|
|
30
|
-
* Note: Database constraint only allows 'active' | 'inactive'
|
|
31
|
-
*/
|
|
32
|
-
export const MembershipStatusSchema = z.enum(['active', 'inactive'])
|
|
33
|
-
|
|
34
|
-
// ============================================================================
|
|
35
|
-
// Path Parameters
|
|
36
|
-
// ============================================================================
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Validate membership ID in URL path
|
|
40
|
-
* Used by: GET/PUT/DELETE /memberships/:id
|
|
41
|
-
*/
|
|
42
|
-
export const MembershipIdParamSchema = z
|
|
43
|
-
.object({
|
|
44
|
-
id: z.string().min(1) // WorkOS membership IDs can be various formats
|
|
45
|
-
})
|
|
46
|
-
.strict()
|
|
47
|
-
|
|
48
|
-
// ============================================================================
|
|
49
|
-
// Request Bodies
|
|
50
|
-
// ============================================================================
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Create new membership
|
|
54
|
-
* POST /memberships
|
|
55
|
-
*
|
|
56
|
-
* Security:
|
|
57
|
-
* - userId must be valid (string format for WorkOS)
|
|
58
|
-
* - organizationId must be valid (string format for WorkOS)
|
|
59
|
-
* - roleSlug enum prevents privilege escalation
|
|
60
|
-
* - Strict mode prevents injection
|
|
61
|
-
*/
|
|
62
|
-
export const CreateMembershipSchema = z
|
|
63
|
-
.object({
|
|
64
|
-
userId: z.string().min(1),
|
|
65
|
-
organizationId: z.string().min(1),
|
|
66
|
-
roleSlug: MembershipRoleSchema.default('member')
|
|
67
|
-
})
|
|
68
|
-
.strict()
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Update membership role
|
|
72
|
-
* PUT /memberships/:id
|
|
73
|
-
*
|
|
74
|
-
* Security:
|
|
75
|
-
* - Only roleSlug can be updated
|
|
76
|
-
* - Enum validation prevents privilege escalation
|
|
77
|
-
*/
|
|
78
|
-
export const UpdateMembershipSchema = z
|
|
79
|
-
.object({
|
|
80
|
-
roleSlug: MembershipRoleSchema
|
|
81
|
-
})
|
|
82
|
-
.strict()
|
|
83
|
-
|
|
84
|
-
// ============================================================================
|
|
85
|
-
// Query Parameters
|
|
86
|
-
// ============================================================================
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* List memberships with filters
|
|
90
|
-
* GET /memberships
|
|
91
|
-
*
|
|
92
|
-
* Filters:
|
|
93
|
-
* - userId: Filter by user
|
|
94
|
-
* - organizationId: Filter by organization
|
|
95
|
-
*
|
|
96
|
-
* Security:
|
|
97
|
-
* - Requires at least one filter parameter
|
|
98
|
-
* - String IDs validated for WorkOS format
|
|
99
|
-
*/
|
|
100
|
-
export const ListMembershipsQuerySchema = z
|
|
101
|
-
.object({
|
|
102
|
-
userId: z.string().optional(),
|
|
103
|
-
organizationId: z.string().optional(),
|
|
104
|
-
limit: z.coerce.number().int().min(1).max(100).optional(),
|
|
105
|
-
before: z.string().optional(), // WorkOS pagination cursor
|
|
106
|
-
after: z.string().optional() // WorkOS pagination cursor
|
|
107
|
-
})
|
|
108
|
-
.strict()
|
|
109
|
-
.refine(
|
|
110
|
-
(data) => data.userId || data.organizationId,
|
|
111
|
-
{
|
|
112
|
-
message: 'Either userId or organizationId must be provided'
|
|
113
|
-
}
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
// ============================================================================
|
|
117
|
-
// TypeScript Type Exports
|
|
118
|
-
// ============================================================================
|
|
119
|
-
|
|
120
|
-
// Export inferred types for use in route handlers
|
|
121
|
-
export type CreateMembershipInput = z.infer<typeof CreateMembershipSchema>
|
|
122
|
-
export type UpdateMembershipInput = z.infer<typeof UpdateMembershipSchema>
|
|
123
|
-
export type ListMembershipsQuery = z.infer<typeof ListMembershipsQuerySchema>
|
|
124
|
-
export type MembershipIdParam = z.infer<typeof MembershipIdParamSchema>
|
|
125
|
-
export type MembershipRole = z.infer<typeof MembershipRoleSchema>
|
|
126
|
-
export type MembershipStatus = z.infer<typeof MembershipStatusSchema>
|
|
1
|
+
/**
|
|
2
|
+
* Memberships Domain - Zod Validation Schemas
|
|
3
|
+
*
|
|
4
|
+
* Validation schemas for membership management endpoints.
|
|
5
|
+
* Includes request bodies, query params, and path params.
|
|
6
|
+
*
|
|
7
|
+
* Security:
|
|
8
|
+
* - All schemas use .strict() to prevent mass assignment attacks
|
|
9
|
+
* - UUID validation prevents invalid references
|
|
10
|
+
* - Role enum validation prevents privilege escalation
|
|
11
|
+
* - organizationId never accepted in body (from JWT when needed)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { z } from 'zod'
|
|
15
|
+
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Shared Schemas
|
|
18
|
+
// ============================================================================
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Membership role validation
|
|
22
|
+
* Restricts to valid role slugs only
|
|
23
|
+
*
|
|
24
|
+
* Security: Prevents privilege escalation by limiting role values
|
|
25
|
+
*/
|
|
26
|
+
export const MembershipRoleSchema = z.enum(['admin', 'member'])
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Membership status validation
|
|
30
|
+
* Note: Database constraint only allows 'active' | 'inactive'
|
|
31
|
+
*/
|
|
32
|
+
export const MembershipStatusSchema = z.enum(['active', 'inactive'])
|
|
33
|
+
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// Path Parameters
|
|
36
|
+
// ============================================================================
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Validate membership ID in URL path
|
|
40
|
+
* Used by: GET/PUT/DELETE /memberships/:id
|
|
41
|
+
*/
|
|
42
|
+
export const MembershipIdParamSchema = z
|
|
43
|
+
.object({
|
|
44
|
+
id: z.string().min(1) // WorkOS membership IDs can be various formats
|
|
45
|
+
})
|
|
46
|
+
.strict()
|
|
47
|
+
|
|
48
|
+
// ============================================================================
|
|
49
|
+
// Request Bodies
|
|
50
|
+
// ============================================================================
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Create new membership
|
|
54
|
+
* POST /memberships
|
|
55
|
+
*
|
|
56
|
+
* Security:
|
|
57
|
+
* - userId must be valid (string format for WorkOS)
|
|
58
|
+
* - organizationId must be valid (string format for WorkOS)
|
|
59
|
+
* - roleSlug enum prevents privilege escalation
|
|
60
|
+
* - Strict mode prevents injection
|
|
61
|
+
*/
|
|
62
|
+
export const CreateMembershipSchema = z
|
|
63
|
+
.object({
|
|
64
|
+
userId: z.string().min(1),
|
|
65
|
+
organizationId: z.string().min(1),
|
|
66
|
+
roleSlug: MembershipRoleSchema.default('member')
|
|
67
|
+
})
|
|
68
|
+
.strict()
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Update membership role
|
|
72
|
+
* PUT /memberships/:id
|
|
73
|
+
*
|
|
74
|
+
* Security:
|
|
75
|
+
* - Only roleSlug can be updated
|
|
76
|
+
* - Enum validation prevents privilege escalation
|
|
77
|
+
*/
|
|
78
|
+
export const UpdateMembershipSchema = z
|
|
79
|
+
.object({
|
|
80
|
+
roleSlug: MembershipRoleSchema
|
|
81
|
+
})
|
|
82
|
+
.strict()
|
|
83
|
+
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Query Parameters
|
|
86
|
+
// ============================================================================
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* List memberships with filters
|
|
90
|
+
* GET /memberships
|
|
91
|
+
*
|
|
92
|
+
* Filters:
|
|
93
|
+
* - userId: Filter by user
|
|
94
|
+
* - organizationId: Filter by organization
|
|
95
|
+
*
|
|
96
|
+
* Security:
|
|
97
|
+
* - Requires at least one filter parameter
|
|
98
|
+
* - String IDs validated for WorkOS format
|
|
99
|
+
*/
|
|
100
|
+
export const ListMembershipsQuerySchema = z
|
|
101
|
+
.object({
|
|
102
|
+
userId: z.string().optional(),
|
|
103
|
+
organizationId: z.string().optional(),
|
|
104
|
+
limit: z.coerce.number().int().min(1).max(100).optional(),
|
|
105
|
+
before: z.string().optional(), // WorkOS pagination cursor
|
|
106
|
+
after: z.string().optional() // WorkOS pagination cursor
|
|
107
|
+
})
|
|
108
|
+
.strict()
|
|
109
|
+
.refine(
|
|
110
|
+
(data) => data.userId || data.organizationId,
|
|
111
|
+
{
|
|
112
|
+
message: 'Either userId or organizationId must be provided'
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// TypeScript Type Exports
|
|
118
|
+
// ============================================================================
|
|
119
|
+
|
|
120
|
+
// Export inferred types for use in route handlers
|
|
121
|
+
export type CreateMembershipInput = z.infer<typeof CreateMembershipSchema>
|
|
122
|
+
export type UpdateMembershipInput = z.infer<typeof UpdateMembershipSchema>
|
|
123
|
+
export type ListMembershipsQuery = z.infer<typeof ListMembershipsQuerySchema>
|
|
124
|
+
export type MembershipIdParam = z.infer<typeof MembershipIdParamSchema>
|
|
125
|
+
export type MembershipRole = z.infer<typeof MembershipRoleSchema>
|
|
126
|
+
export type MembershipStatus = z.infer<typeof MembershipStatusSchema>
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Membership types - browser-safe exports only
|
|
3
|
-
* For WorkOS types and transforms, use @repo/core/server
|
|
4
|
-
*/
|
|
5
|
-
export * from './membership'
|
|
6
|
-
export * from './supabase'
|
|
7
|
-
|
|
8
|
-
// Validation schemas
|
|
9
|
-
export {
|
|
10
|
-
CreateMembershipSchema,
|
|
11
|
-
UpdateMembershipSchema,
|
|
12
|
-
ListMembershipsQuerySchema,
|
|
13
|
-
MembershipIdParamSchema,
|
|
14
|
-
MembershipRoleSchema,
|
|
15
|
-
MembershipStatusSchema,
|
|
16
|
-
type CreateMembershipInput,
|
|
17
|
-
type UpdateMembershipInput,
|
|
18
|
-
type ListMembershipsQuery,
|
|
19
|
-
type MembershipIdParam,
|
|
20
|
-
type MembershipRole,
|
|
21
|
-
type MembershipStatus
|
|
1
|
+
/**
|
|
2
|
+
* Membership types - browser-safe exports only
|
|
3
|
+
* For WorkOS types and transforms, use @repo/core/server
|
|
4
|
+
*/
|
|
5
|
+
export * from './membership'
|
|
6
|
+
export * from './supabase'
|
|
7
|
+
|
|
8
|
+
// Validation schemas
|
|
9
|
+
export {
|
|
10
|
+
CreateMembershipSchema,
|
|
11
|
+
UpdateMembershipSchema,
|
|
12
|
+
ListMembershipsQuerySchema,
|
|
13
|
+
MembershipIdParamSchema,
|
|
14
|
+
MembershipRoleSchema,
|
|
15
|
+
MembershipStatusSchema,
|
|
16
|
+
type CreateMembershipInput,
|
|
17
|
+
type UpdateMembershipInput,
|
|
18
|
+
type ListMembershipsQuery,
|
|
19
|
+
type MembershipIdParam,
|
|
20
|
+
type MembershipRole,
|
|
21
|
+
type MembershipStatus
|
|
22
22
|
} from './api-schemas'
|
|
@@ -1,138 +1,138 @@
|
|
|
1
|
-
import type { MembershipFeatureConfig } from '../types'
|
|
2
|
-
import { type MembershipStatus } from './api-schemas.js'
|
|
3
|
-
|
|
4
|
-
export type { MembershipStatus }
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Organization Membership types based on WorkOS API
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
export interface OrganizationMembership {
|
|
11
|
-
object: 'organization_membership'
|
|
12
|
-
id: string
|
|
13
|
-
userId: string
|
|
14
|
-
organizationId: string
|
|
15
|
-
role: {
|
|
16
|
-
slug: string
|
|
17
|
-
}
|
|
18
|
-
status: 'active' | 'inactive'
|
|
19
|
-
createdAt: string
|
|
20
|
-
updatedAt: string
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Request interfaces for membership operations
|
|
25
|
-
*/
|
|
26
|
-
export interface CreateMembershipRequest {
|
|
27
|
-
userId: string
|
|
28
|
-
organizationId: string
|
|
29
|
-
roleSlug?: string
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface UpdateMembershipRequest {
|
|
33
|
-
roleSlug: string
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface ListMembershipsParams {
|
|
37
|
-
userId?: string
|
|
38
|
-
organizationId?: string
|
|
39
|
-
statuses?: MembershipStatus[]
|
|
40
|
-
limit?: number
|
|
41
|
-
before?: string
|
|
42
|
-
after?: string
|
|
43
|
-
order?: 'asc' | 'desc'
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Response interfaces
|
|
48
|
-
*/
|
|
49
|
-
export interface ListMembershipsResponse {
|
|
50
|
-
data: OrganizationMembership[]
|
|
51
|
-
listMetadata?: {
|
|
52
|
-
before?: string | null
|
|
53
|
-
after?: string | null
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Extended membership with user and organization details for UI
|
|
59
|
-
*/
|
|
60
|
-
export interface MembershipWithDetails extends OrganizationMembership {
|
|
61
|
-
user?: {
|
|
62
|
-
id: string
|
|
63
|
-
email: string
|
|
64
|
-
firstName?: string
|
|
65
|
-
lastName?: string
|
|
66
|
-
profilePictureUrl?: string
|
|
67
|
-
}
|
|
68
|
-
organization?: {
|
|
69
|
-
id: string
|
|
70
|
-
name: string
|
|
71
|
-
workos_org_id: string
|
|
72
|
-
primaryDomain?: string
|
|
73
|
-
is_test?: boolean
|
|
74
|
-
status?: string
|
|
75
|
-
metadata?: Record<string, unknown>
|
|
76
|
-
config?: Record<string, unknown>
|
|
77
|
-
}
|
|
78
|
-
config?: MembershipFeatureConfig
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* UI-specific membership table row data
|
|
83
|
-
*/
|
|
84
|
-
export interface MembershipTableRow {
|
|
85
|
-
id: string
|
|
86
|
-
userId: string
|
|
87
|
-
organizationId: string
|
|
88
|
-
userEmail: string
|
|
89
|
-
userFullName: string
|
|
90
|
-
organizationName: string
|
|
91
|
-
role: string
|
|
92
|
-
status: MembershipStatus
|
|
93
|
-
statusBadge: 'active' | 'inactive'
|
|
94
|
-
joinedAt: Date
|
|
95
|
-
updatedAt: Date
|
|
96
|
-
canEdit: boolean
|
|
97
|
-
canRemove: boolean
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Transform membership to table row format
|
|
102
|
-
*/
|
|
103
|
-
export function transformMembershipToTableRow(membership: MembershipWithDetails): MembershipTableRow {
|
|
104
|
-
return {
|
|
105
|
-
id: membership.id,
|
|
106
|
-
userId: membership.userId,
|
|
107
|
-
organizationId: membership.organizationId,
|
|
108
|
-
userEmail: membership.user?.email || 'Unknown',
|
|
109
|
-
userFullName:
|
|
110
|
-
membership.user?.firstName && membership.user?.lastName
|
|
111
|
-
? `${membership.user.firstName} ${membership.user.lastName}`
|
|
112
|
-
: membership.user?.email || 'Unknown User',
|
|
113
|
-
organizationName: membership.organization?.name || 'Unknown Organization',
|
|
114
|
-
role: membership.role.slug,
|
|
115
|
-
status: membership.status,
|
|
116
|
-
statusBadge: membership.status,
|
|
117
|
-
joinedAt: new Date(membership.createdAt),
|
|
118
|
-
updatedAt: new Date(membership.updatedAt),
|
|
119
|
-
canEdit: membership.status === 'active',
|
|
120
|
-
canRemove: true
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Membership status color mapping for UI
|
|
126
|
-
*/
|
|
127
|
-
export const MEMBERSHIP_STATUS_COLORS = {
|
|
128
|
-
active: 'green',
|
|
129
|
-
inactive: 'gray'
|
|
130
|
-
} as const
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Membership role options (can be extended)
|
|
134
|
-
*/
|
|
135
|
-
export const DEFAULT_MEMBERSHIP_ROLES = [
|
|
136
|
-
{ value: 'admin', label: 'Admin' },
|
|
137
|
-
{ value: 'member', label: 'Member' }
|
|
138
|
-
] as const
|
|
1
|
+
import type { MembershipFeatureConfig } from '../types'
|
|
2
|
+
import { type MembershipStatus } from './api-schemas.js'
|
|
3
|
+
|
|
4
|
+
export type { MembershipStatus }
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Organization Membership types based on WorkOS API
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export interface OrganizationMembership {
|
|
11
|
+
object: 'organization_membership'
|
|
12
|
+
id: string
|
|
13
|
+
userId: string
|
|
14
|
+
organizationId: string
|
|
15
|
+
role: {
|
|
16
|
+
slug: string
|
|
17
|
+
}
|
|
18
|
+
status: 'active' | 'inactive'
|
|
19
|
+
createdAt: string
|
|
20
|
+
updatedAt: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Request interfaces for membership operations
|
|
25
|
+
*/
|
|
26
|
+
export interface CreateMembershipRequest {
|
|
27
|
+
userId: string
|
|
28
|
+
organizationId: string
|
|
29
|
+
roleSlug?: string
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface UpdateMembershipRequest {
|
|
33
|
+
roleSlug: string
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface ListMembershipsParams {
|
|
37
|
+
userId?: string
|
|
38
|
+
organizationId?: string
|
|
39
|
+
statuses?: MembershipStatus[]
|
|
40
|
+
limit?: number
|
|
41
|
+
before?: string
|
|
42
|
+
after?: string
|
|
43
|
+
order?: 'asc' | 'desc'
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Response interfaces
|
|
48
|
+
*/
|
|
49
|
+
export interface ListMembershipsResponse {
|
|
50
|
+
data: OrganizationMembership[]
|
|
51
|
+
listMetadata?: {
|
|
52
|
+
before?: string | null
|
|
53
|
+
after?: string | null
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Extended membership with user and organization details for UI
|
|
59
|
+
*/
|
|
60
|
+
export interface MembershipWithDetails extends OrganizationMembership {
|
|
61
|
+
user?: {
|
|
62
|
+
id: string
|
|
63
|
+
email: string
|
|
64
|
+
firstName?: string
|
|
65
|
+
lastName?: string
|
|
66
|
+
profilePictureUrl?: string
|
|
67
|
+
}
|
|
68
|
+
organization?: {
|
|
69
|
+
id: string
|
|
70
|
+
name: string
|
|
71
|
+
workos_org_id: string
|
|
72
|
+
primaryDomain?: string
|
|
73
|
+
is_test?: boolean
|
|
74
|
+
status?: string
|
|
75
|
+
metadata?: Record<string, unknown>
|
|
76
|
+
config?: Record<string, unknown>
|
|
77
|
+
}
|
|
78
|
+
config?: MembershipFeatureConfig
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* UI-specific membership table row data
|
|
83
|
+
*/
|
|
84
|
+
export interface MembershipTableRow {
|
|
85
|
+
id: string
|
|
86
|
+
userId: string
|
|
87
|
+
organizationId: string
|
|
88
|
+
userEmail: string
|
|
89
|
+
userFullName: string
|
|
90
|
+
organizationName: string
|
|
91
|
+
role: string
|
|
92
|
+
status: MembershipStatus
|
|
93
|
+
statusBadge: 'active' | 'inactive'
|
|
94
|
+
joinedAt: Date
|
|
95
|
+
updatedAt: Date
|
|
96
|
+
canEdit: boolean
|
|
97
|
+
canRemove: boolean
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Transform membership to table row format
|
|
102
|
+
*/
|
|
103
|
+
export function transformMembershipToTableRow(membership: MembershipWithDetails): MembershipTableRow {
|
|
104
|
+
return {
|
|
105
|
+
id: membership.id,
|
|
106
|
+
userId: membership.userId,
|
|
107
|
+
organizationId: membership.organizationId,
|
|
108
|
+
userEmail: membership.user?.email || 'Unknown',
|
|
109
|
+
userFullName:
|
|
110
|
+
membership.user?.firstName && membership.user?.lastName
|
|
111
|
+
? `${membership.user.firstName} ${membership.user.lastName}`
|
|
112
|
+
: membership.user?.email || 'Unknown User',
|
|
113
|
+
organizationName: membership.organization?.name || 'Unknown Organization',
|
|
114
|
+
role: membership.role.slug,
|
|
115
|
+
status: membership.status,
|
|
116
|
+
statusBadge: membership.status,
|
|
117
|
+
joinedAt: new Date(membership.createdAt),
|
|
118
|
+
updatedAt: new Date(membership.updatedAt),
|
|
119
|
+
canEdit: membership.status === 'active',
|
|
120
|
+
canRemove: true
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Membership status color mapping for UI
|
|
126
|
+
*/
|
|
127
|
+
export const MEMBERSHIP_STATUS_COLORS = {
|
|
128
|
+
active: 'green',
|
|
129
|
+
inactive: 'gray'
|
|
130
|
+
} as const
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Membership role options (can be extended)
|
|
134
|
+
*/
|
|
135
|
+
export const DEFAULT_MEMBERSHIP_ROLES = [
|
|
136
|
+
{ value: 'admin', label: 'Admin' },
|
|
137
|
+
{ value: 'member', label: 'Member' }
|
|
138
|
+
] as const
|