@elevasis/core 0.7.1 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/test-utils/index.d.ts +3122 -0
- package/dist/test-utils/index.js +386 -0
- package/package.json +6 -1
- package/src/README.md +39 -36
- package/src/__tests__/publish.test.ts +18 -13
- 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 +47 -36
- 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 +30 -138
- 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 +7 -8
- 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/published.ts +4 -0
- package/src/test-utils/rls/RLSTestContext.ts +554 -554
- package/src/test-utils/rls/index.ts +1 -1
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
import { ToolingError } from '../../../../../../types'
|
|
2
|
-
import { withRetry, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
3
|
-
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
4
|
-
import type { MillionVerifierCheckCreditsResult } from '../../../../../types/millionverifier'
|
|
5
|
-
|
|
6
|
-
interface MillionVerifierCredentials {
|
|
7
|
-
apiKey: string
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const MV_CREDITS_URL = 'https://api.millionverifier.com/api/v3/credits'
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Check remaining MillionVerifier credits
|
|
14
|
-
*
|
|
15
|
-
* @param credentials - MillionVerifier API key
|
|
16
|
-
* @param context - Execution context for logging
|
|
17
|
-
* @returns Credit balance breakdown
|
|
18
|
-
*/
|
|
19
|
-
export async function checkCredits(
|
|
20
|
-
credentials: MillionVerifierCredentials,
|
|
21
|
-
context?: ExecutionContext
|
|
22
|
-
): Promise<MillionVerifierCheckCreditsResult> {
|
|
23
|
-
const { apiKey } = credentials
|
|
24
|
-
|
|
25
|
-
if (context?.logger) {
|
|
26
|
-
context.logger.info(
|
|
27
|
-
`[MillionVerifierAdapter] checkCredits: organizationId=${context.organizationId} executionId=${context.executionId}`
|
|
28
|
-
)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const url = new URL(MV_CREDITS_URL)
|
|
32
|
-
url.searchParams.set('api', apiKey)
|
|
33
|
-
|
|
34
|
-
const response = await withRetry(async () => {
|
|
35
|
-
const res = await fetch(url.toString(), {
|
|
36
|
-
method: 'GET',
|
|
37
|
-
signal: AbortSignal.timeout(30_000)
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
if (!res.ok) {
|
|
41
|
-
throw new ToolingError('api_error', `MillionVerifier credits API returned HTTP ${res.status}`, {
|
|
42
|
-
integration: 'millionverifier',
|
|
43
|
-
method: 'checkCredits',
|
|
44
|
-
organizationId: context?.organizationId
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return res.json() as Promise<Record<string, unknown>>
|
|
49
|
-
}, DEFAULT_RETRY_POLICY)
|
|
50
|
-
|
|
51
|
-
const data = response as Record<string, unknown>
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
credits: (data.credits as number) ?? 0,
|
|
55
|
-
bulkCredits: (data.bulk_credits as number) ?? 0,
|
|
56
|
-
renewingCredits: (data.renewing_credits as number) ?? 0,
|
|
57
|
-
plan: (data.plan as number) ?? 0
|
|
58
|
-
}
|
|
59
|
-
}
|
|
1
|
+
import { ToolingError } from '../../../../../../types'
|
|
2
|
+
import { withRetry, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
3
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
4
|
+
import type { MillionVerifierCheckCreditsResult } from '../../../../../types/millionverifier'
|
|
5
|
+
|
|
6
|
+
interface MillionVerifierCredentials {
|
|
7
|
+
apiKey: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const MV_CREDITS_URL = 'https://api.millionverifier.com/api/v3/credits'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Check remaining MillionVerifier credits
|
|
14
|
+
*
|
|
15
|
+
* @param credentials - MillionVerifier API key
|
|
16
|
+
* @param context - Execution context for logging
|
|
17
|
+
* @returns Credit balance breakdown
|
|
18
|
+
*/
|
|
19
|
+
export async function checkCredits(
|
|
20
|
+
credentials: MillionVerifierCredentials,
|
|
21
|
+
context?: ExecutionContext
|
|
22
|
+
): Promise<MillionVerifierCheckCreditsResult> {
|
|
23
|
+
const { apiKey } = credentials
|
|
24
|
+
|
|
25
|
+
if (context?.logger) {
|
|
26
|
+
context.logger.info(
|
|
27
|
+
`[MillionVerifierAdapter] checkCredits: organizationId=${context.organizationId} executionId=${context.executionId}`
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const url = new URL(MV_CREDITS_URL)
|
|
32
|
+
url.searchParams.set('api', apiKey)
|
|
33
|
+
|
|
34
|
+
const response = await withRetry(async () => {
|
|
35
|
+
const res = await fetch(url.toString(), {
|
|
36
|
+
method: 'GET',
|
|
37
|
+
signal: AbortSignal.timeout(30_000)
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
if (!res.ok) {
|
|
41
|
+
throw new ToolingError('api_error', `MillionVerifier credits API returned HTTP ${res.status}`, {
|
|
42
|
+
integration: 'millionverifier',
|
|
43
|
+
method: 'checkCredits',
|
|
44
|
+
organizationId: context?.organizationId
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return res.json() as Promise<Record<string, unknown>>
|
|
49
|
+
}, DEFAULT_RETRY_POLICY)
|
|
50
|
+
|
|
51
|
+
const data = response as Record<string, unknown>
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
credits: (data.credits as number) ?? 0,
|
|
55
|
+
bulkCredits: (data.bulk_credits as number) ?? 0,
|
|
56
|
+
renewingCredits: (data.renewing_credits as number) ?? 0,
|
|
57
|
+
plan: (data.plan as number) ?? 0
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import { ToolingError } from '../../../../../../types'
|
|
2
|
-
import { withRetry, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
3
|
-
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
4
|
-
import type { MillionVerifierVerifyEmailResult } from '../../../../../types/millionverifier'
|
|
5
|
-
|
|
6
|
-
interface MillionVerifierCredentials {
|
|
7
|
-
apiKey: string
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface VerifyEmailParams {
|
|
11
|
-
email: string
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const MV_API_BASE = 'https://api.millionverifier.com/api/v3/'
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Verify an email address via MillionVerifier
|
|
18
|
-
*
|
|
19
|
-
* Calls the MillionVerifier single-verification endpoint. The API always returns
|
|
20
|
-
* HTTP 200 -- errors are signalled by result === 'error' and a non-empty error field.
|
|
21
|
-
*
|
|
22
|
-
* Credits are deducted for ok/invalid/disposable results; catch_all and unknown are free.
|
|
23
|
-
*
|
|
24
|
-
* @param credentials - MillionVerifier API key
|
|
25
|
-
* @param params - Email address to verify
|
|
26
|
-
* @param context - Execution context for logging
|
|
27
|
-
* @returns Normalized verification result in camelCase
|
|
28
|
-
*/
|
|
29
|
-
export async function verifyEmail(
|
|
30
|
-
credentials: MillionVerifierCredentials,
|
|
31
|
-
params: VerifyEmailParams,
|
|
32
|
-
context?: ExecutionContext
|
|
33
|
-
): Promise<MillionVerifierVerifyEmailResult> {
|
|
34
|
-
const { apiKey } = credentials
|
|
35
|
-
const { email } = params
|
|
36
|
-
|
|
37
|
-
if (!email) {
|
|
38
|
-
throw new ToolingError('validation_error', 'Missing required parameter: email', {
|
|
39
|
-
integration: 'millionverifier',
|
|
40
|
-
method: 'verifyEmail'
|
|
41
|
-
})
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (context?.logger) {
|
|
45
|
-
context.logger.info(
|
|
46
|
-
`[MillionVerifierAdapter] verifyEmail: email=${email} organizationId=${context.organizationId} executionId=${context.executionId}`
|
|
47
|
-
)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const url = new URL(MV_API_BASE)
|
|
51
|
-
url.searchParams.set('api', apiKey)
|
|
52
|
-
url.searchParams.set('email', email)
|
|
53
|
-
|
|
54
|
-
const response = await withRetry(async () => {
|
|
55
|
-
const res = await fetch(url.toString(), {
|
|
56
|
-
method: 'GET',
|
|
57
|
-
signal: AbortSignal.timeout(60_000)
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
if (!res.ok) {
|
|
61
|
-
throw new ToolingError('api_error', `MillionVerifier API returned HTTP ${res.status}`, {
|
|
62
|
-
integration: 'millionverifier',
|
|
63
|
-
method: 'verifyEmail',
|
|
64
|
-
organizationId: context?.organizationId
|
|
65
|
-
})
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return res.json() as Promise<Record<string, unknown>>
|
|
69
|
-
}, DEFAULT_RETRY_POLICY)
|
|
70
|
-
|
|
71
|
-
const data = response as Record<string, unknown>
|
|
72
|
-
|
|
73
|
-
// The API signals errors via result === 'error' with a non-empty error field
|
|
74
|
-
if (data.result === 'error' && data.error) {
|
|
75
|
-
throw new ToolingError('api_error', `MillionVerifier error: ${data.error as string}`, {
|
|
76
|
-
integration: 'millionverifier',
|
|
77
|
-
method: 'verifyEmail',
|
|
78
|
-
organizationId: context?.organizationId
|
|
79
|
-
})
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (context?.logger) {
|
|
83
|
-
context.logger.info(
|
|
84
|
-
`[MillionVerifierAdapter] verifyEmail complete: email=${email} result=${data.result ?? ''} quality=${data.quality ?? ''} organizationId=${context.organizationId}`
|
|
85
|
-
)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return {
|
|
89
|
-
email: (data.email as string) ?? email,
|
|
90
|
-
quality: (data.quality as MillionVerifierVerifyEmailResult['quality']) ?? '',
|
|
91
|
-
result: (data.result as MillionVerifierVerifyEmailResult['result']) ?? 'unknown',
|
|
92
|
-
resultCode: (data.resultcode as MillionVerifierVerifyEmailResult['resultCode']) ?? 3,
|
|
93
|
-
subresult: (data.subresult as string) ?? '',
|
|
94
|
-
free: (data.free as boolean) ?? false,
|
|
95
|
-
role: (data.role as boolean) ?? false,
|
|
96
|
-
didYouMean: (data.didyoumean as string) ?? '',
|
|
97
|
-
credits: (data.credits as number) ?? 0,
|
|
98
|
-
executionTime: (data.executiontime as number) ?? 0,
|
|
99
|
-
error: (data.error as string) ?? '',
|
|
100
|
-
liveMode: (data.livemode as boolean) ?? false
|
|
101
|
-
}
|
|
102
|
-
}
|
|
1
|
+
import { ToolingError } from '../../../../../../types'
|
|
2
|
+
import { withRetry, DEFAULT_RETRY_POLICY } from '../../../../../../../../../platform/resilience'
|
|
3
|
+
import type { ExecutionContext } from '../../../../../../../base/types'
|
|
4
|
+
import type { MillionVerifierVerifyEmailResult } from '../../../../../types/millionverifier'
|
|
5
|
+
|
|
6
|
+
interface MillionVerifierCredentials {
|
|
7
|
+
apiKey: string
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface VerifyEmailParams {
|
|
11
|
+
email: string
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const MV_API_BASE = 'https://api.millionverifier.com/api/v3/'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Verify an email address via MillionVerifier
|
|
18
|
+
*
|
|
19
|
+
* Calls the MillionVerifier single-verification endpoint. The API always returns
|
|
20
|
+
* HTTP 200 -- errors are signalled by result === 'error' and a non-empty error field.
|
|
21
|
+
*
|
|
22
|
+
* Credits are deducted for ok/invalid/disposable results; catch_all and unknown are free.
|
|
23
|
+
*
|
|
24
|
+
* @param credentials - MillionVerifier API key
|
|
25
|
+
* @param params - Email address to verify
|
|
26
|
+
* @param context - Execution context for logging
|
|
27
|
+
* @returns Normalized verification result in camelCase
|
|
28
|
+
*/
|
|
29
|
+
export async function verifyEmail(
|
|
30
|
+
credentials: MillionVerifierCredentials,
|
|
31
|
+
params: VerifyEmailParams,
|
|
32
|
+
context?: ExecutionContext
|
|
33
|
+
): Promise<MillionVerifierVerifyEmailResult> {
|
|
34
|
+
const { apiKey } = credentials
|
|
35
|
+
const { email } = params
|
|
36
|
+
|
|
37
|
+
if (!email) {
|
|
38
|
+
throw new ToolingError('validation_error', 'Missing required parameter: email', {
|
|
39
|
+
integration: 'millionverifier',
|
|
40
|
+
method: 'verifyEmail'
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (context?.logger) {
|
|
45
|
+
context.logger.info(
|
|
46
|
+
`[MillionVerifierAdapter] verifyEmail: email=${email} organizationId=${context.organizationId} executionId=${context.executionId}`
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const url = new URL(MV_API_BASE)
|
|
51
|
+
url.searchParams.set('api', apiKey)
|
|
52
|
+
url.searchParams.set('email', email)
|
|
53
|
+
|
|
54
|
+
const response = await withRetry(async () => {
|
|
55
|
+
const res = await fetch(url.toString(), {
|
|
56
|
+
method: 'GET',
|
|
57
|
+
signal: AbortSignal.timeout(60_000)
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
if (!res.ok) {
|
|
61
|
+
throw new ToolingError('api_error', `MillionVerifier API returned HTTP ${res.status}`, {
|
|
62
|
+
integration: 'millionverifier',
|
|
63
|
+
method: 'verifyEmail',
|
|
64
|
+
organizationId: context?.organizationId
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return res.json() as Promise<Record<string, unknown>>
|
|
69
|
+
}, DEFAULT_RETRY_POLICY)
|
|
70
|
+
|
|
71
|
+
const data = response as Record<string, unknown>
|
|
72
|
+
|
|
73
|
+
// The API signals errors via result === 'error' with a non-empty error field
|
|
74
|
+
if (data.result === 'error' && data.error) {
|
|
75
|
+
throw new ToolingError('api_error', `MillionVerifier error: ${data.error as string}`, {
|
|
76
|
+
integration: 'millionverifier',
|
|
77
|
+
method: 'verifyEmail',
|
|
78
|
+
organizationId: context?.organizationId
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (context?.logger) {
|
|
83
|
+
context.logger.info(
|
|
84
|
+
`[MillionVerifierAdapter] verifyEmail complete: email=${email} result=${data.result ?? ''} quality=${data.quality ?? ''} organizationId=${context.organizationId}`
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
email: (data.email as string) ?? email,
|
|
90
|
+
quality: (data.quality as MillionVerifierVerifyEmailResult['quality']) ?? '',
|
|
91
|
+
result: (data.result as MillionVerifierVerifyEmailResult['result']) ?? 'unknown',
|
|
92
|
+
resultCode: (data.resultcode as MillionVerifierVerifyEmailResult['resultCode']) ?? 3,
|
|
93
|
+
subresult: (data.subresult as string) ?? '',
|
|
94
|
+
free: (data.free as boolean) ?? false,
|
|
95
|
+
role: (data.role as boolean) ?? false,
|
|
96
|
+
didYouMean: (data.didyoumean as string) ?? '',
|
|
97
|
+
credits: (data.credits as number) ?? 0,
|
|
98
|
+
executionTime: (data.executiontime as number) ?? 0,
|
|
99
|
+
error: (data.error as string) ?? '',
|
|
100
|
+
liveMode: (data.livemode as boolean) ?? false
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MillionVerifier Integration - Barrel Export
|
|
3
|
-
*
|
|
4
|
-
* Exports MillionVerifier adapter and tool factory functions.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// ============================================================================
|
|
8
|
-
// MILLIONVERIFIER ADAPTER
|
|
9
|
-
// ============================================================================
|
|
10
|
-
|
|
11
|
-
export { MillionVerifierAdapter } from './millionverifier-adapter'
|
|
12
|
-
|
|
13
|
-
// ============================================================================
|
|
14
|
-
// MILLIONVERIFIER TOOLS
|
|
15
|
-
// ============================================================================
|
|
16
|
-
|
|
17
|
-
export { createMillionVerifierVerifyEmailTool, createMillionVerifierCheckCreditsTool } from './millionverifier-tools'
|
|
1
|
+
/**
|
|
2
|
+
* MillionVerifier Integration - Barrel Export
|
|
3
|
+
*
|
|
4
|
+
* Exports MillionVerifier adapter and tool factory functions.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// MILLIONVERIFIER ADAPTER
|
|
9
|
+
// ============================================================================
|
|
10
|
+
|
|
11
|
+
export { MillionVerifierAdapter } from './millionverifier-adapter'
|
|
12
|
+
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// MILLIONVERIFIER TOOLS
|
|
15
|
+
// ============================================================================
|
|
16
|
+
|
|
17
|
+
export { createMillionVerifierVerifyEmailTool, createMillionVerifierCheckCreditsTool } from './millionverifier-tools'
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
import type { BaseIntegrationAdapter } from '../../../base-integration-adapter'
|
|
2
|
-
import { ToolingError } from '../../../../types'
|
|
3
|
-
import type { ExecutionContext } from '../../../../../base/types'
|
|
4
|
-
import { verifyEmail } from './fetch/verify-email/index'
|
|
5
|
-
import type { VerifyEmailParams } from './fetch/verify-email/index'
|
|
6
|
-
import { checkCredits } from './fetch/check-credits/index'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* MillionVerifier credentials format
|
|
10
|
-
* Stored in credentials table, encrypted
|
|
11
|
-
*/
|
|
12
|
-
interface MillionVerifierCredentials {
|
|
13
|
-
apiKey: string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* MillionVerifier integration adapter
|
|
18
|
-
*
|
|
19
|
-
* Provides access to the MillionVerifier email verification API for validating
|
|
20
|
-
* email deliverability before campaigns. Uses API key as a query parameter.
|
|
21
|
-
*
|
|
22
|
-
* Credits are deducted for ok/invalid/disposable results; catch_all and unknown are free.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```typescript
|
|
26
|
-
* const adapter = new MillionVerifierAdapter()
|
|
27
|
-
* const result = await adapter.call(
|
|
28
|
-
* 'verifyEmail',
|
|
29
|
-
* { email: 'john@example.com' },
|
|
30
|
-
* { apiKey: 'your-api-key' },
|
|
31
|
-
* context
|
|
32
|
-
* )
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export class MillionVerifierAdapter implements BaseIntegrationAdapter {
|
|
36
|
-
readonly name = 'millionverifier'
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Call MillionVerifier API method
|
|
40
|
-
*/
|
|
41
|
-
async call(
|
|
42
|
-
method: string,
|
|
43
|
-
params: unknown,
|
|
44
|
-
credentials: Record<string, unknown>,
|
|
45
|
-
context?: ExecutionContext
|
|
46
|
-
): Promise<unknown> {
|
|
47
|
-
// Validate credentials first
|
|
48
|
-
if (!this.validateCredentials(credentials)) {
|
|
49
|
-
throw new ToolingError('credentials_invalid', 'Invalid MillionVerifier credentials', {
|
|
50
|
-
integration: this.name,
|
|
51
|
-
organizationId: context?.organizationId
|
|
52
|
-
})
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Safe to cast after validation confirms apiKey exists and is valid
|
|
56
|
-
const creds = credentials as unknown as MillionVerifierCredentials
|
|
57
|
-
|
|
58
|
-
// Route to method handler - delegate to fetch functions
|
|
59
|
-
switch (method) {
|
|
60
|
-
case 'verifyEmail':
|
|
61
|
-
return verifyEmail(creds, params as VerifyEmailParams, context)
|
|
62
|
-
case 'checkCredits':
|
|
63
|
-
return checkCredits(creds, context)
|
|
64
|
-
default:
|
|
65
|
-
throw new ToolingError('method_not_found', `Unknown MillionVerifier method: ${method}`, {
|
|
66
|
-
integration: this.name,
|
|
67
|
-
method,
|
|
68
|
-
organizationId: context?.organizationId
|
|
69
|
-
})
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Validate MillionVerifier credentials
|
|
75
|
-
*/
|
|
76
|
-
validateCredentials(credentials: Record<string, unknown>): boolean {
|
|
77
|
-
const creds = credentials as unknown as MillionVerifierCredentials
|
|
78
|
-
return !!creds.apiKey && typeof creds.apiKey === 'string' && creds.apiKey.length > 0
|
|
79
|
-
}
|
|
80
|
-
}
|
|
1
|
+
import type { BaseIntegrationAdapter } from '../../../base-integration-adapter'
|
|
2
|
+
import { ToolingError } from '../../../../types'
|
|
3
|
+
import type { ExecutionContext } from '../../../../../base/types'
|
|
4
|
+
import { verifyEmail } from './fetch/verify-email/index'
|
|
5
|
+
import type { VerifyEmailParams } from './fetch/verify-email/index'
|
|
6
|
+
import { checkCredits } from './fetch/check-credits/index'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* MillionVerifier credentials format
|
|
10
|
+
* Stored in credentials table, encrypted
|
|
11
|
+
*/
|
|
12
|
+
interface MillionVerifierCredentials {
|
|
13
|
+
apiKey: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* MillionVerifier integration adapter
|
|
18
|
+
*
|
|
19
|
+
* Provides access to the MillionVerifier email verification API for validating
|
|
20
|
+
* email deliverability before campaigns. Uses API key as a query parameter.
|
|
21
|
+
*
|
|
22
|
+
* Credits are deducted for ok/invalid/disposable results; catch_all and unknown are free.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const adapter = new MillionVerifierAdapter()
|
|
27
|
+
* const result = await adapter.call(
|
|
28
|
+
* 'verifyEmail',
|
|
29
|
+
* { email: 'john@example.com' },
|
|
30
|
+
* { apiKey: 'your-api-key' },
|
|
31
|
+
* context
|
|
32
|
+
* )
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export class MillionVerifierAdapter implements BaseIntegrationAdapter {
|
|
36
|
+
readonly name = 'millionverifier'
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Call MillionVerifier API method
|
|
40
|
+
*/
|
|
41
|
+
async call(
|
|
42
|
+
method: string,
|
|
43
|
+
params: unknown,
|
|
44
|
+
credentials: Record<string, unknown>,
|
|
45
|
+
context?: ExecutionContext
|
|
46
|
+
): Promise<unknown> {
|
|
47
|
+
// Validate credentials first
|
|
48
|
+
if (!this.validateCredentials(credentials)) {
|
|
49
|
+
throw new ToolingError('credentials_invalid', 'Invalid MillionVerifier credentials', {
|
|
50
|
+
integration: this.name,
|
|
51
|
+
organizationId: context?.organizationId
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Safe to cast after validation confirms apiKey exists and is valid
|
|
56
|
+
const creds = credentials as unknown as MillionVerifierCredentials
|
|
57
|
+
|
|
58
|
+
// Route to method handler - delegate to fetch functions
|
|
59
|
+
switch (method) {
|
|
60
|
+
case 'verifyEmail':
|
|
61
|
+
return verifyEmail(creds, params as VerifyEmailParams, context)
|
|
62
|
+
case 'checkCredits':
|
|
63
|
+
return checkCredits(creds, context)
|
|
64
|
+
default:
|
|
65
|
+
throw new ToolingError('method_not_found', `Unknown MillionVerifier method: ${method}`, {
|
|
66
|
+
integration: this.name,
|
|
67
|
+
method,
|
|
68
|
+
organizationId: context?.organizationId
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Validate MillionVerifier credentials
|
|
75
|
+
*/
|
|
76
|
+
validateCredentials(credentials: Record<string, unknown>): boolean {
|
|
77
|
+
const creds = credentials as unknown as MillionVerifierCredentials
|
|
78
|
+
return !!creds.apiKey && typeof creds.apiKey === 'string' && creds.apiKey.length > 0
|
|
79
|
+
}
|
|
80
|
+
}
|