@joai/core 4.11.0 → 4.12.1

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/index.d.mts CHANGED
@@ -744,6 +744,7 @@ declare const NativeApps: {
744
744
  readonly Heartbeats: "heartbeats";
745
745
  readonly Wallets: "wallets";
746
746
  readonly Campaigns: "campaigns";
747
+ readonly Automations: "automations";
747
748
  readonly News: "news";
748
749
  readonly Sites: "sites";
749
750
  readonly Contracts: "contracts";
@@ -2268,6 +2269,160 @@ type AppointmentRequest = {
2268
2269
  createdAt: string;
2269
2270
  };
2270
2271
  //#endregion
2272
+ //#region src/automation/types.d.ts
2273
+ type AutomationTriggerType = 'prop' | 'segment' | 'manual' | 'webhook';
2274
+ type AutomationActionType = 'wait' | 'halt' | 'warp' | 'branch';
2275
+ type AutomationEnrollmentStatus = 'active' | 'completed' | 'skipped';
2276
+ type AutomationEnrollmentChange = 'created' | 'advanced' | 'sent' | 'completed' | 'skipped' | 'errored';
2277
+ type AutomationSkipReason = 'pending_consent' | 'opted_out' | 'missing_channel' | 'automation_disabled' | 'already_completed';
2278
+ declare const CONTACT_MESSAGE_SEND_WARP = "joai-contact-message-send";
2279
+ type AutomationTriggerConfig = {
2280
+ propKey?: string;
2281
+ propValue?: string | number | boolean;
2282
+ segmentId?: string;
2283
+ source?: string;
2284
+ trigger?: {
2285
+ event?: string;
2286
+ when?: Array<{
2287
+ path: string;
2288
+ operator: string;
2289
+ value?: unknown;
2290
+ }>;
2291
+ inputs?: Record<string, unknown>;
2292
+ };
2293
+ hookId?: string;
2294
+ };
2295
+ type AutomationActionConfig = {
2296
+ delayMinutes?: number;
2297
+ warpId?: string;
2298
+ inputs?: Record<string, unknown>;
2299
+ when?: Array<{
2300
+ path: string;
2301
+ operator: string;
2302
+ value?: unknown;
2303
+ }>;
2304
+ thenPosition?: number;
2305
+ elsePosition?: number;
2306
+ [key: string]: unknown;
2307
+ };
2308
+ type AutomationAction = {
2309
+ id: string;
2310
+ position: number;
2311
+ type: AutomationActionType;
2312
+ config: AutomationActionConfig;
2313
+ };
2314
+ type Automation = {
2315
+ id: string;
2316
+ name: string;
2317
+ triggerType: AutomationTriggerType;
2318
+ triggerConfig: AutomationTriggerConfig;
2319
+ enabled: boolean;
2320
+ agent: AgentSimple | null;
2321
+ actions?: AutomationAction[];
2322
+ activeEnrollmentsCount?: number;
2323
+ completedEnrollmentsCount?: number;
2324
+ skippedEnrollmentsCount?: number;
2325
+ erroredEnrollmentsCount?: number;
2326
+ createdAt: string;
2327
+ updatedAt: string;
2328
+ };
2329
+ type AutomationEnrollment = {
2330
+ id: string;
2331
+ automationId: string;
2332
+ contactId: string | null;
2333
+ contact?: {
2334
+ id: string;
2335
+ name: string | null;
2336
+ email: string | null;
2337
+ };
2338
+ status: AutomationEnrollmentStatus;
2339
+ currentPosition: number;
2340
+ enteredAt: string | null;
2341
+ eligibleAt: string | null;
2342
+ sentAt: string | null;
2343
+ completedAt: string | null;
2344
+ skippedAt: string | null;
2345
+ skipReason: AutomationSkipReason | null;
2346
+ error: string | null;
2347
+ createdAt: string;
2348
+ updatedAt: string;
2349
+ };
2350
+ type AutomationEnrollmentUpdatedPayload = {
2351
+ team?: string;
2352
+ change: AutomationEnrollmentChange;
2353
+ automationId?: string;
2354
+ automationName?: string;
2355
+ enrollment: AutomationEnrollment;
2356
+ };
2357
+ type AutomationActionInput = {
2358
+ type: AutomationActionType;
2359
+ config?: AutomationActionConfig;
2360
+ };
2361
+ type AutomationCreatePayload = {
2362
+ name: string;
2363
+ triggerType: AutomationTriggerType;
2364
+ triggerConfig?: AutomationTriggerConfig;
2365
+ actions?: AutomationActionInput[];
2366
+ enabled?: boolean;
2367
+ agentId?: string;
2368
+ };
2369
+ type AutomationUpdatePayload = {
2370
+ name?: string;
2371
+ triggerType?: AutomationTriggerType;
2372
+ triggerConfig?: AutomationTriggerConfig;
2373
+ enabled?: boolean;
2374
+ agentId?: string | null;
2375
+ };
2376
+ type AutomationAudiencePreview = {
2377
+ count: number;
2378
+ total: number;
2379
+ sendable: number;
2380
+ willSkip: number;
2381
+ reasons: Record<'pending_consent' | 'opted_out' | 'missing_channel', number>;
2382
+ sampleContactIds: string[];
2383
+ channel: string | null;
2384
+ };
2385
+ type AutomationStats = {
2386
+ totalAutomations: number;
2387
+ enabledAutomations: number;
2388
+ activeEnrollments: number;
2389
+ emailsSent: number;
2390
+ completedEnrollments: number;
2391
+ erroredEnrollments: number;
2392
+ };
2393
+ declare function isContactMessageWarpId(warpId?: string | null): boolean;
2394
+ declare function isContactMessageAction(action: {
2395
+ type: string;
2396
+ config?: {
2397
+ warpId?: string;
2398
+ };
2399
+ }): boolean;
2400
+ declare function normalizeAutomationActionType(type: string): AutomationActionType;
2401
+ //#endregion
2402
+ //#region src/outbound/channels.d.ts
2403
+ /** Outbound channels used across campaigns and automations. */
2404
+ type OutboundChannelId = 'email' | 'whatsapp' | 'whatsapp-personal' | 'sms' | 'push';
2405
+ type OutboundChannel = {
2406
+ id: OutboundChannelId;
2407
+ supportsHtml: boolean;
2408
+ requiresSubject: boolean;
2409
+ settingsKey?: keyof AgentSettings;
2410
+ };
2411
+ declare const OUTBOUND_CHANNELS: OutboundChannel[];
2412
+ type AutomationSendChannelId = 'email' | 'whatsapp-personal';
2413
+ type CampaignChannelId = 'email' | 'whatsapp' | 'sms' | 'push';
2414
+ type AutomationSendChannel = OutboundChannel & {
2415
+ id: AutomationSendChannelId;
2416
+ };
2417
+ declare const AUTOMATION_SEND_CHANNELS: AutomationSendChannel[];
2418
+ declare const CAMPAIGN_CHANNELS: CampaignChannelId[];
2419
+ declare function automationSendChannel(id: unknown): AutomationSendChannel;
2420
+ declare function isAutomationSendChannelId(id: unknown): id is AutomationSendChannelId;
2421
+ declare function isCampaignChannelId(id: unknown): id is CampaignChannelId;
2422
+ declare function outboundChannel(id: unknown): OutboundChannel;
2423
+ /** Integration settings slug for a channel (sms → twilio). */
2424
+ declare function integrationSlugForChannel(channel: string): string;
2425
+ //#endregion
2271
2426
  //#region src/content/types.d.ts
2272
2427
  type ContentStatus = 'draft' | 'published' | 'archived';
2273
2428
  type ContentFieldType = 'text' | 'richText' | 'number' | 'boolean' | 'url' | 'image' | 'media' | 'list' | 'object' | 'reference';
@@ -2791,11 +2946,17 @@ type AppSetupTarget = {
2791
2946
  appSlug: string;
2792
2947
  mcpUrl: string;
2793
2948
  };
2949
+ type FeatureSetupTarget = {
2950
+ featureName?: string;
2951
+ taskHint?: string;
2952
+ };
2794
2953
  declare const UNIFIED_MCP_SERVER_NAME = "joai";
2795
2954
  declare const isUnifiedMcpUrl: (mcpUrl: string) => boolean;
2796
2955
  declare const getAgentSetupPromptUrl: (env: AppEnv) => string;
2797
2956
  declare const buildAgentSetupClipboardText: (env: AppEnv, target: AgentSetupTarget) => string;
2798
2957
  declare const buildAppSetupClipboardText: (env: AppEnv, target: AppSetupTarget) => string;
2958
+ /** Marketing / public pages: no known agent yet — unified MCP + OAuth agent pick. */
2959
+ declare const buildFeatureSetupClipboardText: (env: AppEnv, target?: FeatureSetupTarget) => string;
2799
2960
  declare const createCursorMcpInstallLink: (mcpServerUrl: string, serverName: string) => string;
2800
2961
  /** Default owner/connect MCP URL. Optional agent UUID soft-prefills OAuth via `?agent=`. */
2801
2962
  declare const resolveConnectMcpUrl: (env: AppEnv, mcpEndpoint?: string | null, preferredAgentUuid?: string | null) => string;
@@ -4001,7 +4162,7 @@ type SegmentCountResult = {
4001
4162
  };
4002
4163
  //#endregion
4003
4164
  //#region src/campaign/types.d.ts
4004
- type CampaignChannel = 'email' | 'whatsapp' | 'sms' | 'push';
4165
+ type CampaignChannel = CampaignChannelId;
4005
4166
  type CampaignStatus = 'draft' | 'pending' | 'approved' | 'rejected' | 'scheduled' | 'sending' | 'completed' | 'failed';
4006
4167
  type CampaignCategory = 'MARKETING' | 'UTILITY' | 'AUTHENTICATION';
4007
4168
  type CampaignSkipReason = 'pending_consent' | 'opted_out' | 'missing_channel' | 'approval_skipped';
@@ -4267,10 +4428,10 @@ type HookTriggerCondition = {
4267
4428
  value?: unknown;
4268
4429
  };
4269
4430
  type HookTriggerInput = string | {
4270
- source: 'payload';
4431
+ source: 'payload' | 'contact' | 'enrollment';
4271
4432
  path: string;
4272
4433
  } | {
4273
- source: 'literal';
4434
+ source: 'literal' | 'static';
4274
4435
  value: unknown;
4275
4436
  };
4276
4437
  type HookTrigger = {
@@ -4421,4 +4582,4 @@ type CliSessionStatus = {
4421
4582
  meta: CliSessionMeta | null;
4422
4583
  };
4423
4584
  //#endregion
4424
- export { Achievement, Address, AddressCreatePayload, AddressInput, AddressSnapshot, type AddressType, AddressTypes, AddressUpdatePayload, Affiliate, AffiliateStatus, AffiliateTier, AffiliateTierName, Agent, AgentActionHistoryEntry, AgentCharacter, AgentDelegatable, AgentEngine, AgentExecuteHandler, AgentExecuteOptions, AgentGender, AgentMessageMeta, AgentMessageOptions, AgentPrivate, AgentSettings, AgentSetupTarget, AgentSimple, AgentToolingAccess, AgentWalletMode, AggregatedRoute, AiCostEntry, AiCostsResponse, AiCostsSummary, Alert, ApiToken, AppAccessRule, AppEnv, AppFile, AppFileType, AppIngestion, AppSetupTarget, AppendKvEntryResult, AppointmentAvailability, AppointmentAvailabilityService, AppointmentAvailabilitySlot, AppointmentBooking, AppointmentBookingContext, AppointmentPolicy, AppointmentPolicySync, AppointmentRequest, AppointmentSlot, Artifact, ArtifactBlock, ArtifactBlockType, ArtifactContactSummary, ArtifactCreatePayload, ArtifactDeliverIntegration, ArtifactDeliverPayload, ArtifactDelivery, ArtifactLink, ArtifactStatus, ArtifactType, ArtifactUpdatePayload, AuthUser, BillingManageAccess, Blueprint, BlueprintOnboardingStep, BlueprintRedirect, BlueprintSettings, BlueprintShortcut, BlueprintTask, BlueprintTeam, BoardSummaryViewable, BookmarkEntry, BrandBackend, BrandIntegration, BrandIntegrationAction, BrandIntegrationProvider, BrandSearchHit, BrandSiteConfig, BrandSourceConfig, Budget, ByokProviderConfig, ByokProviderName, ByokProviders, CalendarProvider, CalendarStatus, Campaign, CampaignApproval, CampaignAudiencePreview, CampaignAudiencePreviewPayload, CampaignCategory, CampaignChannel, CampaignCreatePayload, CampaignRecipient, CampaignRecipientStatus, CampaignSkipReason, CampaignSkipReasons, CampaignStats, CampaignStatus, CampaignUpdatePayload, Card, Cart, CartItem, CartLine, Challenge, Challenges, ChangelogEntry, Character, ChatClientAction, ChatClientThought, ChatStreamData, ChatStreamEventType, CheckoutSnapshot, CheckoutSnapshotRequest, CliSessionMeta, CliSessionStatus, CommissionAgreement, Configuration, Contact, ContactActivity, ContactActivityAuthor, ContactActivityType, ContactConsent, ContactConsentStatus, ContactCreatePayload, ContactFormData, ContactHealth, ContactRelation, ContactRelationCategory, ContactRelationContact, ContactRelationDirection, ContactRelationPayload, ContactRelationType, ContactRelationUpdatePayload, ContactViewable, Content, ContentDefinition, ContentEntry, ContentField, ContentFieldType, ContentPatch, ContentStatus, ContentValue, ContentVersion, Contract, ContractCategoryDisplayNames, ContractCategoryName, ContractCodeMetadata, ContractEntity, ContractOnNetwork, ContractVersion, ContractsAddressConfig, CortexExecuteOptions, Coupon, CouponCondition, CouponRestrictedItem, CouponRestrictedItemType, CreateContentInput, CreateHookPayload, CreateInboundHookPayload, CreateInternalHookPayload, CreateKvFieldPayload, CreateWarpLinkedHookPayload, CreateWebHookPayload, DefaultCodeMetadata, DefaultInviteTeamRole, DemoFlow, DemoMessage, Desk, DeskItem, DeskItemRole, Document, EarnResponse, Earning, Element, ElementSpec, ElementType, ElementVariation, EmailProvider, EmbedStatus, EncryptionStatus, Entity, EntityDirectExecuteRequest, EntityProposable, EntitySignable, EntityTemplate, Experience, FileInfo, FileMetadata, Flow, FlowCategory, FlowInputMapping, FlowStatus, FlowStep, Fulfillment, FulfillmentLocation, type FulfillmentMethod, FulfillmentMethods, type FulfillmentStatus, FulfillmentStatuses, GamificationData, GamificationEventType, Goal, GoalCreatePayload, GoalPriority, GoalProgressViewable, GoalStatus, GuestBuyer, HintOptions, HintPosition, Hook, HookSample, HookTrigger, HookTriggerCondition, HookTriggerInput, HttpService, IAppResponse, IHttpService, IRequestOptions, IngestionSourceType, IngestionStatus, Inquiry, InquiryStatus, InquiryType, Integration, IntegrationConnectionDetails, IntegrationDetails, IntegrationMeta, IntegrationType, Intent, InviteableTeamRoles, Item, ItemCreatePayload, ItemExecutionStatus, ItemPriority, ItemStatus, ItemUpdatePayload, ItemViewable, JoaiUrls, JsonValue, KvEntry, KvEntryPayload, KvField, KvFieldWithEntries, KvValue, Kyc, KycStatus, Link, LinkCreatePayload, LinkScanHistory, LinkStats, LinkUpdatePayload, LinkVariation, LinkVariationBatchCreatePayload, LinkVariationCreatePayload, LocalAgentWallet, LoyaltyAccount, LoyaltyMember, LoyaltyNextTier, LoyaltyProgram, LoyaltyPromotion, LoyaltyReward, LoyaltyStatus, LoyaltyTier, LoyaltyTierInfo, LoyaltyTransaction, McpToolCall, McpToolCallBroadcast, McpToolCallStatus, Media, MediaAspectRatio, MediaAttributes, MediaItems, MediaLibraryAttributes, MediaMime, Meeting, MeetingConferenceProvider, MeetingFeature, MeetingJoinInfo, MeetingJoinTeam, MeetingParticipant, MeetingSessionState, MeetingSpeakerAssignment, MeetingStatus, MeetingSummary, MeetingTranscriptEntry, MeetingUsage, Memory, Message, MessageId, MessageRole, Metric, MetricSource, MetricsResult, Milestone, MilestoneType, Mission, MissionBudget, MissionCreatePayload, MissionPlan, MissionPriority, MissionSchedule, MissionStatus, MissionViewable, MollieTerminalPaymentResult, MultimodalContent, MultimodalFile, NATIVE_AUTH_TOKEN_PARAM, NativeApp, NativeApps, Notification, NotificationAction, NotificationAgent, NotificationChannel, NotificationSetting, OG_IMAGE_CONFIG, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, OfficeAgent, OfficeEntity, OfficeEntityKind, OfficeLiveOverrides, OfficeMember, OfficeSnapshot, OfficeStatus, OfficeStatusFilter, OfficeTypeFilter, OgImageColors, OgImageParams, OgImageType, Order, OrderConfigurationItem, OrderContext, OrderItem, OrderSource, OrderStatus, OrderType, PaginatedResponse, Pass, PatchContentInput, PaymentAccount, PaymentAccountOnboarding, PaymentProvider, PayoutEntry, PeriodTypeLabels, PeriodTypeOptions, PermissionConfigType, PermissionPresetName, PermissionPresetNames, PersonaQuestionable, Plan, PlanBenefit, PlanExtra, PlanFeature, PlanInterval, PolicyMethod, PolicySetting, PricingModel, Product, ProductDiscount, ProductMeta, ProductPieces, ProductRating, ProductRelation, ProductRelationType, ProductVariation, ProductVariationMeta, ProductVariationType, ProgramSettings, Project, ProjectAspectRatio, ProjectAssembly, ProjectCaptionStyle, ProjectClipCandidate, ProjectClips, ProjectExport, ProjectExportAsset, ProjectExportResponse, ProjectImages, ProjectInputAssistIntent, ProjectInputAssistResponse, ProjectMutation, ProjectOutputPreset, ProjectOutputType, ProjectPlan, ProjectRender, ProjectRenderMode, ProjectSelectedClip, ProjectShot, ProjectSoundtrack, ProjectSourceMedia, ProjectStatus, ProjectStudioHistoryEntry, ProjectStudioQuestion, ProjectStudioResponse, ProjectStudioStage, ProjectStudioState, ProjectStudioSummary, ProjectStyleDirection, ProjectTranscript, ProjectTranscriptSegment, Proposal, ProposalAction, ProposalActionPayment, ProposalActionPaymentSerializable, ProposalActionSerializable, ProposalPollOption, ProposalStatus, PublicFormResults, PurchaseOptions, PurchaseResult, RampProvider, RampProviderInfo, Reactions, RecentExperience, RedeemResponse, Reminder, Return, type ReturnStatus, ReturnStatuses, ReturnUpdateStatus, ReturnUpdateStatuses, Room, RoomId, RoomKind, ScInfo, SchedulePreset, SecretAuthorizable, SecretSettable, Segment, SegmentCondition, SegmentConditionType, SegmentCountPayload, SegmentCountResult, SegmentCreatePayload, SegmentGroup, SendableActivityUpdate, SendableAgentAction, SendableAgentMessage, SendableAgentThought, SendableMedia, SendableUserMessage, Service, SetKvEntryResult, ShippingRate, ShippingZone, Shortcut, Site, SiteAgent, SiteBrand, SiteRoute, SiteTeam, Skill, SkillMediaBindingRole, SkillMediaBindingRoleValue, SkillScope, SkillScopeValue, SkillType, SkillTypeValue, SocialAuthProvider, SocialBot, SocialPlatform, StampResponse, StoreAgent, StoreCheckoutItem, StoreData, StoreEntityType, StoreInfo, StoreItem, StoreListing, StorePriceTier, StorePricing, StorePurchasable, StorePurchaseResult, Streak, Subscription, SubscriptionDelivery, SubscriptionInterval, SubscriptionPlan, SubscriptionStatus, Swarm, Tag, TagType, Task, Team, TeamAccessCatalog, TeamAccessConfig, TeamBrand, TeamCategory, TeamEarning, TeamEarningsBalance, TeamFeature, TeamFeatureAccess, TeamFeatureArea, TeamFeatureUsage, TeamManageAccess, TeamMember, TeamMeta, TeamPayout, TeamPayoutAddress, TeamPlace, TeamPrivate, TeamSettings, TeamUsage, TeamViewAccess, TerminalConnectionToken, TerminalPaymentIntent, Tier, TierFeature, TierName, ToggleKvFieldResult, TranscriptEntry, TranscriptionCorrection, TranscriptionResponse, TranslatableValue, UNIFIED_MCP_SERVER_NAME, Update, UpdateCreatePayload, UpdateRelation, UpdateStats, UpdateStatus, UpdateType, UpdateUpdatePayload, Upgrade, UpgradeSourceType, UpgradeStatus, User, UserInterest, UserMode, type UserPermission, UserPermissions, UserPrivate, type UserRole, UserRoles, UserSettings, UserSocialAccount, UserStats, VolumePrice, Wallet, WalletList, WarpApprovable, WarpBackend, WarpBackendStatus, WarpBatchItem, WarpBatchable, WarpCloudExecutable, WarpCreateable, WarpExecutable, WarpExecutionBackend, WarpExtras, WarpExtrasFaq, WarpInputable, WarpScreenshotVariant, WarpSearchHit, WarpSelectable, WarpSelectableDetails, WarpSuggestion, WarpTestable, WarpViewable, WebHookTriggerEvent, WorkspaceCloudFile, WorkspaceContext, WorkspaceInfo, WorkspaceSettings, XIntegrationStatus, abbreviateNumber, addressTypeValues, buildAgentMcpServerName, buildAgentSetupClipboardText, buildAppSetupClipboardText, buildMcpServerName, cartLineTotal, createCursorMcpInstallLink, defaultInviteTeamRole, fulfillmentMethodValues, fulfillmentStatusValues, getAgentSetupPromptUrl, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getMcpServerUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, hasAllPermissions, hasAllTeamPermissions, hasAnyPermissions, hasPermission, hasTeamPermission, inviteableTeamRoles, isCompleteAddressInput, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, isNativeAppAccessible, isNativeAppGated, isNativeAppLocked, isTeamFeatureAccessible, isTeamFeatureGated, isTeamFeatureLocked, isUnifiedMcpUrl, isUserRole, localize, nativeAppSlugs, ogImageUrl, permissionPresetRules, resolveAccessCatalog, resolveAgentMcpUrl, resolveConnectMcpUrl, resolveWarpText, returnStatusValues, returnUpdateStatusValues, sanitizeAlphanumeric, sanitizeNumeric, slugifyMcpSegment, teamCategories, toCurrencyDisplay, toHexEncodedNonce, toNameInitials, toNftId, toPreviewText, userPermissionValues, userRoleValues, withRetry };
4585
+ export { AUTOMATION_SEND_CHANNELS, Achievement, Address, AddressCreatePayload, AddressInput, AddressSnapshot, type AddressType, AddressTypes, AddressUpdatePayload, Affiliate, AffiliateStatus, AffiliateTier, AffiliateTierName, Agent, AgentActionHistoryEntry, AgentCharacter, AgentDelegatable, AgentEngine, AgentExecuteHandler, AgentExecuteOptions, AgentGender, AgentMessageMeta, AgentMessageOptions, AgentPrivate, AgentSettings, AgentSetupTarget, AgentSimple, AgentToolingAccess, AgentWalletMode, AggregatedRoute, AiCostEntry, AiCostsResponse, AiCostsSummary, Alert, ApiToken, AppAccessRule, AppEnv, AppFile, AppFileType, AppIngestion, AppSetupTarget, AppendKvEntryResult, AppointmentAvailability, AppointmentAvailabilityService, AppointmentAvailabilitySlot, AppointmentBooking, AppointmentBookingContext, AppointmentPolicy, AppointmentPolicySync, AppointmentRequest, AppointmentSlot, Artifact, ArtifactBlock, ArtifactBlockType, ArtifactContactSummary, ArtifactCreatePayload, ArtifactDeliverIntegration, ArtifactDeliverPayload, ArtifactDelivery, ArtifactLink, ArtifactStatus, ArtifactType, ArtifactUpdatePayload, AuthUser, Automation, AutomationAction, AutomationActionConfig, AutomationActionInput, AutomationActionType, AutomationAudiencePreview, AutomationCreatePayload, AutomationEnrollment, AutomationEnrollmentChange, AutomationEnrollmentStatus, AutomationEnrollmentUpdatedPayload, AutomationSendChannel, AutomationSendChannelId, AutomationSkipReason, AutomationStats, AutomationTriggerConfig, AutomationTriggerType, AutomationUpdatePayload, BillingManageAccess, Blueprint, BlueprintOnboardingStep, BlueprintRedirect, BlueprintSettings, BlueprintShortcut, BlueprintTask, BlueprintTeam, BoardSummaryViewable, BookmarkEntry, BrandBackend, BrandIntegration, BrandIntegrationAction, BrandIntegrationProvider, BrandSearchHit, BrandSiteConfig, BrandSourceConfig, Budget, ByokProviderConfig, ByokProviderName, ByokProviders, CAMPAIGN_CHANNELS, CONTACT_MESSAGE_SEND_WARP, CalendarProvider, CalendarStatus, Campaign, CampaignApproval, CampaignAudiencePreview, CampaignAudiencePreviewPayload, CampaignCategory, CampaignChannel, CampaignChannelId, CampaignCreatePayload, CampaignRecipient, CampaignRecipientStatus, CampaignSkipReason, CampaignSkipReasons, CampaignStats, CampaignStatus, CampaignUpdatePayload, Card, Cart, CartItem, CartLine, Challenge, Challenges, ChangelogEntry, Character, ChatClientAction, ChatClientThought, ChatStreamData, ChatStreamEventType, CheckoutSnapshot, CheckoutSnapshotRequest, CliSessionMeta, CliSessionStatus, CommissionAgreement, Configuration, Contact, ContactActivity, ContactActivityAuthor, ContactActivityType, ContactConsent, ContactConsentStatus, ContactCreatePayload, ContactFormData, ContactHealth, ContactRelation, ContactRelationCategory, ContactRelationContact, ContactRelationDirection, ContactRelationPayload, ContactRelationType, ContactRelationUpdatePayload, ContactViewable, Content, ContentDefinition, ContentEntry, ContentField, ContentFieldType, ContentPatch, ContentStatus, ContentValue, ContentVersion, Contract, ContractCategoryDisplayNames, ContractCategoryName, ContractCodeMetadata, ContractEntity, ContractOnNetwork, ContractVersion, ContractsAddressConfig, CortexExecuteOptions, Coupon, CouponCondition, CouponRestrictedItem, CouponRestrictedItemType, CreateContentInput, CreateHookPayload, CreateInboundHookPayload, CreateInternalHookPayload, CreateKvFieldPayload, CreateWarpLinkedHookPayload, CreateWebHookPayload, DefaultCodeMetadata, DefaultInviteTeamRole, DemoFlow, DemoMessage, Desk, DeskItem, DeskItemRole, Document, EarnResponse, Earning, Element, ElementSpec, ElementType, ElementVariation, EmailProvider, EmbedStatus, EncryptionStatus, Entity, EntityDirectExecuteRequest, EntityProposable, EntitySignable, EntityTemplate, Experience, FeatureSetupTarget, FileInfo, FileMetadata, Flow, FlowCategory, FlowInputMapping, FlowStatus, FlowStep, Fulfillment, FulfillmentLocation, type FulfillmentMethod, FulfillmentMethods, type FulfillmentStatus, FulfillmentStatuses, GamificationData, GamificationEventType, Goal, GoalCreatePayload, GoalPriority, GoalProgressViewable, GoalStatus, GuestBuyer, HintOptions, HintPosition, Hook, HookSample, HookTrigger, HookTriggerCondition, HookTriggerInput, HttpService, IAppResponse, IHttpService, IRequestOptions, IngestionSourceType, IngestionStatus, Inquiry, InquiryStatus, InquiryType, Integration, IntegrationConnectionDetails, IntegrationDetails, IntegrationMeta, IntegrationType, Intent, InviteableTeamRoles, Item, ItemCreatePayload, ItemExecutionStatus, ItemPriority, ItemStatus, ItemUpdatePayload, ItemViewable, JoaiUrls, JsonValue, KvEntry, KvEntryPayload, KvField, KvFieldWithEntries, KvValue, Kyc, KycStatus, Link, LinkCreatePayload, LinkScanHistory, LinkStats, LinkUpdatePayload, LinkVariation, LinkVariationBatchCreatePayload, LinkVariationCreatePayload, LocalAgentWallet, LoyaltyAccount, LoyaltyMember, LoyaltyNextTier, LoyaltyProgram, LoyaltyPromotion, LoyaltyReward, LoyaltyStatus, LoyaltyTier, LoyaltyTierInfo, LoyaltyTransaction, McpToolCall, McpToolCallBroadcast, McpToolCallStatus, Media, MediaAspectRatio, MediaAttributes, MediaItems, MediaLibraryAttributes, MediaMime, Meeting, MeetingConferenceProvider, MeetingFeature, MeetingJoinInfo, MeetingJoinTeam, MeetingParticipant, MeetingSessionState, MeetingSpeakerAssignment, MeetingStatus, MeetingSummary, MeetingTranscriptEntry, MeetingUsage, Memory, Message, MessageId, MessageRole, Metric, MetricSource, MetricsResult, Milestone, MilestoneType, Mission, MissionBudget, MissionCreatePayload, MissionPlan, MissionPriority, MissionSchedule, MissionStatus, MissionViewable, MollieTerminalPaymentResult, MultimodalContent, MultimodalFile, NATIVE_AUTH_TOKEN_PARAM, NativeApp, NativeApps, Notification, NotificationAction, NotificationAgent, NotificationChannel, NotificationSetting, OG_IMAGE_CONFIG, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, OUTBOUND_CHANNELS, OfficeAgent, OfficeEntity, OfficeEntityKind, OfficeLiveOverrides, OfficeMember, OfficeSnapshot, OfficeStatus, OfficeStatusFilter, OfficeTypeFilter, OgImageColors, OgImageParams, OgImageType, Order, OrderConfigurationItem, OrderContext, OrderItem, OrderSource, OrderStatus, OrderType, OutboundChannel, OutboundChannelId, PaginatedResponse, Pass, PatchContentInput, PaymentAccount, PaymentAccountOnboarding, PaymentProvider, PayoutEntry, PeriodTypeLabels, PeriodTypeOptions, PermissionConfigType, PermissionPresetName, PermissionPresetNames, PersonaQuestionable, Plan, PlanBenefit, PlanExtra, PlanFeature, PlanInterval, PolicyMethod, PolicySetting, PricingModel, Product, ProductDiscount, ProductMeta, ProductPieces, ProductRating, ProductRelation, ProductRelationType, ProductVariation, ProductVariationMeta, ProductVariationType, ProgramSettings, Project, ProjectAspectRatio, ProjectAssembly, ProjectCaptionStyle, ProjectClipCandidate, ProjectClips, ProjectExport, ProjectExportAsset, ProjectExportResponse, ProjectImages, ProjectInputAssistIntent, ProjectInputAssistResponse, ProjectMutation, ProjectOutputPreset, ProjectOutputType, ProjectPlan, ProjectRender, ProjectRenderMode, ProjectSelectedClip, ProjectShot, ProjectSoundtrack, ProjectSourceMedia, ProjectStatus, ProjectStudioHistoryEntry, ProjectStudioQuestion, ProjectStudioResponse, ProjectStudioStage, ProjectStudioState, ProjectStudioSummary, ProjectStyleDirection, ProjectTranscript, ProjectTranscriptSegment, Proposal, ProposalAction, ProposalActionPayment, ProposalActionPaymentSerializable, ProposalActionSerializable, ProposalPollOption, ProposalStatus, PublicFormResults, PurchaseOptions, PurchaseResult, RampProvider, RampProviderInfo, Reactions, RecentExperience, RedeemResponse, Reminder, Return, type ReturnStatus, ReturnStatuses, ReturnUpdateStatus, ReturnUpdateStatuses, Room, RoomId, RoomKind, ScInfo, SchedulePreset, SecretAuthorizable, SecretSettable, Segment, SegmentCondition, SegmentConditionType, SegmentCountPayload, SegmentCountResult, SegmentCreatePayload, SegmentGroup, SendableActivityUpdate, SendableAgentAction, SendableAgentMessage, SendableAgentThought, SendableMedia, SendableUserMessage, Service, SetKvEntryResult, ShippingRate, ShippingZone, Shortcut, Site, SiteAgent, SiteBrand, SiteRoute, SiteTeam, Skill, SkillMediaBindingRole, SkillMediaBindingRoleValue, SkillScope, SkillScopeValue, SkillType, SkillTypeValue, SocialAuthProvider, SocialBot, SocialPlatform, StampResponse, StoreAgent, StoreCheckoutItem, StoreData, StoreEntityType, StoreInfo, StoreItem, StoreListing, StorePriceTier, StorePricing, StorePurchasable, StorePurchaseResult, Streak, Subscription, SubscriptionDelivery, SubscriptionInterval, SubscriptionPlan, SubscriptionStatus, Swarm, Tag, TagType, Task, Team, TeamAccessCatalog, TeamAccessConfig, TeamBrand, TeamCategory, TeamEarning, TeamEarningsBalance, TeamFeature, TeamFeatureAccess, TeamFeatureArea, TeamFeatureUsage, TeamManageAccess, TeamMember, TeamMeta, TeamPayout, TeamPayoutAddress, TeamPlace, TeamPrivate, TeamSettings, TeamUsage, TeamViewAccess, TerminalConnectionToken, TerminalPaymentIntent, Tier, TierFeature, TierName, ToggleKvFieldResult, TranscriptEntry, TranscriptionCorrection, TranscriptionResponse, TranslatableValue, UNIFIED_MCP_SERVER_NAME, Update, UpdateCreatePayload, UpdateRelation, UpdateStats, UpdateStatus, UpdateType, UpdateUpdatePayload, Upgrade, UpgradeSourceType, UpgradeStatus, User, UserInterest, UserMode, type UserPermission, UserPermissions, UserPrivate, type UserRole, UserRoles, UserSettings, UserSocialAccount, UserStats, VolumePrice, Wallet, WalletList, WarpApprovable, WarpBackend, WarpBackendStatus, WarpBatchItem, WarpBatchable, WarpCloudExecutable, WarpCreateable, WarpExecutable, WarpExecutionBackend, WarpExtras, WarpExtrasFaq, WarpInputable, WarpScreenshotVariant, WarpSearchHit, WarpSelectable, WarpSelectableDetails, WarpSuggestion, WarpTestable, WarpViewable, WebHookTriggerEvent, WorkspaceCloudFile, WorkspaceContext, WorkspaceInfo, WorkspaceSettings, XIntegrationStatus, abbreviateNumber, addressTypeValues, automationSendChannel, buildAgentMcpServerName, buildAgentSetupClipboardText, buildAppSetupClipboardText, buildFeatureSetupClipboardText, buildMcpServerName, cartLineTotal, createCursorMcpInstallLink, defaultInviteTeamRole, fulfillmentMethodValues, fulfillmentStatusValues, getAgentSetupPromptUrl, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getMcpServerUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, hasAllPermissions, hasAllTeamPermissions, hasAnyPermissions, hasPermission, hasTeamPermission, integrationSlugForChannel, inviteableTeamRoles, isAutomationSendChannelId, isCampaignChannelId, isCompleteAddressInput, isContactMessageAction, isContactMessageWarpId, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, isNativeAppAccessible, isNativeAppGated, isNativeAppLocked, isTeamFeatureAccessible, isTeamFeatureGated, isTeamFeatureLocked, isUnifiedMcpUrl, isUserRole, localize, nativeAppSlugs, normalizeAutomationActionType, ogImageUrl, outboundChannel, permissionPresetRules, resolveAccessCatalog, resolveAgentMcpUrl, resolveConnectMcpUrl, resolveWarpText, returnStatusValues, returnUpdateStatusValues, sanitizeAlphanumeric, sanitizeNumeric, slugifyMcpSegment, teamCategories, toCurrencyDisplay, toHexEncodedNonce, toNameInitials, toNftId, toPreviewText, userPermissionValues, userRoleValues, withRetry };
package/dist/index.mjs CHANGED
@@ -283,6 +283,69 @@ function resolveWarpText(text, locale = "en") {
283
283
  return text[locale] ?? text.en ?? Object.values(text)[0] ?? "";
284
284
  }
285
285
  //#endregion
286
+ //#region src/automation/types.ts
287
+ const CONTACT_MESSAGE_SEND_WARP = "joai-contact-message-send";
288
+ function isContactMessageWarpId(warpId) {
289
+ if (!warpId) return false;
290
+ return warpId.replace(/^@/, "").split("?")[0] === CONTACT_MESSAGE_SEND_WARP;
291
+ }
292
+ function isContactMessageAction(action) {
293
+ return action.type === "warp" && isContactMessageWarpId(action.config?.warpId);
294
+ }
295
+ function normalizeAutomationActionType(type) {
296
+ if (type === "wait" || type === "halt" || type === "warp" || type === "branch") return type;
297
+ return "halt";
298
+ }
299
+ //#endregion
300
+ //#region src/outbound/channels.ts
301
+ const OUTBOUND_CHANNELS = [
302
+ {
303
+ id: "email",
304
+ supportsHtml: true,
305
+ requiresSubject: true,
306
+ settingsKey: "email_provider"
307
+ },
308
+ {
309
+ id: "whatsapp",
310
+ supportsHtml: false,
311
+ requiresSubject: false
312
+ },
313
+ {
314
+ id: "whatsapp-personal",
315
+ supportsHtml: false,
316
+ requiresSubject: false
317
+ },
318
+ {
319
+ id: "sms",
320
+ supportsHtml: false,
321
+ requiresSubject: false
322
+ },
323
+ {
324
+ id: "push",
325
+ supportsHtml: false,
326
+ requiresSubject: true
327
+ }
328
+ ];
329
+ const AUTOMATION_SEND_CHANNELS = OUTBOUND_CHANNELS.filter((channel) => channel.id === "email" || channel.id === "whatsapp-personal");
330
+ const CAMPAIGN_CHANNELS = OUTBOUND_CHANNELS.map((channel) => channel.id).filter((id) => id !== "whatsapp-personal");
331
+ const defaultAutomationSendChannel = AUTOMATION_SEND_CHANNELS[0];
332
+ function automationSendChannel(id) {
333
+ return AUTOMATION_SEND_CHANNELS.find((channel) => channel.id === id) ?? defaultAutomationSendChannel;
334
+ }
335
+ function isAutomationSendChannelId(id) {
336
+ return typeof id === "string" && AUTOMATION_SEND_CHANNELS.some((channel) => channel.id === id);
337
+ }
338
+ function isCampaignChannelId(id) {
339
+ return typeof id === "string" && CAMPAIGN_CHANNELS.includes(id);
340
+ }
341
+ function outboundChannel(id) {
342
+ return OUTBOUND_CHANNELS.find((channel) => channel.id === id) ?? OUTBOUND_CHANNELS[0];
343
+ }
344
+ /** Integration settings slug for a channel (sms → twilio). */
345
+ function integrationSlugForChannel(channel) {
346
+ return channel === "sms" ? "twilio" : channel;
347
+ }
348
+ //#endregion
286
349
  //#region src/address/enums.ts
287
350
  const AddressTypes = {
288
351
  Billing: "billing",
@@ -411,6 +474,25 @@ const buildAppSetupClipboardText = (env, target) => {
411
474
  `- MCP: ${target.mcpUrl}`
412
475
  ].join("\n");
413
476
  };
477
+ /** Marketing / public pages: no known agent yet — unified MCP + OAuth agent pick. */
478
+ const buildFeatureSetupClipboardText = (env, target = {}) => {
479
+ const promptUrl = getAgentSetupPromptUrl(env);
480
+ const mcpUrl = resolveConnectMcpUrl(env);
481
+ const featureName = target.featureName?.trim();
482
+ const lines = [
483
+ `Fetch and execute the appropriate instructions to set me up for JoAi from ${promptUrl}`,
484
+ "",
485
+ "Connect me to JoAi MCP:",
486
+ `- MCP: ${mcpUrl}`,
487
+ "",
488
+ "Authenticate with OAuth when asked. If you don’t have an agent yet, create and name one there. Pick my team and agent during login.",
489
+ "",
490
+ featureName ? `Once connected, help me with JoAi ${featureName}.` : "Once connected, help me run JoAi."
491
+ ];
492
+ if (target.taskHint?.trim()) lines.push(target.taskHint.trim());
493
+ lines.push(featureName ? "Install the app if its tools are missing." : "Install apps if their tools are missing.");
494
+ return lines.join("\n");
495
+ };
414
496
  const createCursorMcpInstallLink = (mcpServerUrl, serverName) => {
415
497
  const configJson = JSON.stringify({ url: mcpServerUrl });
416
498
  const encodedConfig = encodeURIComponent(btoa(configJson));
@@ -517,6 +599,7 @@ const NativeApps = {
517
599
  Heartbeats: "heartbeats",
518
600
  Wallets: "wallets",
519
601
  Campaigns: "campaigns",
602
+ Automations: "automations",
520
603
  News: "news",
521
604
  Sites: "sites",
522
605
  Contracts: "contracts",
@@ -618,4 +701,4 @@ const DefaultInviteTeamRole = UserRoles.Member;
618
701
  const inviteableTeamRoles = () => [...InviteableTeamRoles];
619
702
  const defaultInviteTeamRole = () => DefaultInviteTeamRole;
620
703
  //#endregion
621
- export { AddressTypes, AgentToolingAccess, BillingManageAccess, ContractCategoryDisplayNames, DefaultCodeMetadata, DefaultInviteTeamRole, FulfillmentMethods, FulfillmentStatuses, HttpService, InviteableTeamRoles, JoaiUrls, NATIVE_AUTH_TOKEN_PARAM, NativeApps, OG_IMAGE_CONFIG, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, OgImageColors, PeriodTypeLabels, PeriodTypeOptions, PermissionPresetNames, ReturnStatuses, ReturnUpdateStatuses, SkillMediaBindingRole, SkillScope, SkillType, TeamManageAccess, TeamViewAccess, UNIFIED_MCP_SERVER_NAME, UserPermissions, UserRoles, abbreviateNumber, addressTypeValues, buildAgentMcpServerName, buildAgentSetupClipboardText, buildAppSetupClipboardText, buildMcpServerName, cartLineTotal, createCursorMcpInstallLink, defaultInviteTeamRole, fulfillmentMethodValues, fulfillmentStatusValues, getAgentSetupPromptUrl, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getMcpServerUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, hasAllPermissions, hasAllTeamPermissions, hasAnyPermissions, hasPermission, hasTeamPermission, inviteableTeamRoles, isCompleteAddressInput, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, isNativeAppAccessible, isNativeAppGated, isNativeAppLocked, isTeamFeatureAccessible, isTeamFeatureGated, isTeamFeatureLocked, isUnifiedMcpUrl, isUserRole, localize, nativeAppSlugs, ogImageUrl, permissionPresetRules, resolveAccessCatalog, resolveAgentMcpUrl, resolveConnectMcpUrl, resolveWarpText, returnStatusValues, returnUpdateStatusValues, sanitizeAlphanumeric, sanitizeNumeric, slugifyMcpSegment, teamCategories, toCurrencyDisplay, toHexEncodedNonce, toNameInitials, toNftId, toPreviewText, userPermissionValues, userRoleValues, withRetry };
704
+ export { AUTOMATION_SEND_CHANNELS, AddressTypes, AgentToolingAccess, BillingManageAccess, CAMPAIGN_CHANNELS, CONTACT_MESSAGE_SEND_WARP, ContractCategoryDisplayNames, DefaultCodeMetadata, DefaultInviteTeamRole, FulfillmentMethods, FulfillmentStatuses, HttpService, InviteableTeamRoles, JoaiUrls, NATIVE_AUTH_TOKEN_PARAM, NativeApps, OG_IMAGE_CONFIG, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, OUTBOUND_CHANNELS, OgImageColors, PeriodTypeLabels, PeriodTypeOptions, PermissionPresetNames, ReturnStatuses, ReturnUpdateStatuses, SkillMediaBindingRole, SkillScope, SkillType, TeamManageAccess, TeamViewAccess, UNIFIED_MCP_SERVER_NAME, UserPermissions, UserRoles, abbreviateNumber, addressTypeValues, automationSendChannel, buildAgentMcpServerName, buildAgentSetupClipboardText, buildAppSetupClipboardText, buildFeatureSetupClipboardText, buildMcpServerName, cartLineTotal, createCursorMcpInstallLink, defaultInviteTeamRole, fulfillmentMethodValues, fulfillmentStatusValues, getAgentSetupPromptUrl, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getMcpServerUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, hasAllPermissions, hasAllTeamPermissions, hasAnyPermissions, hasPermission, hasTeamPermission, integrationSlugForChannel, inviteableTeamRoles, isAutomationSendChannelId, isCampaignChannelId, isCompleteAddressInput, isContactMessageAction, isContactMessageWarpId, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, isNativeAppAccessible, isNativeAppGated, isNativeAppLocked, isTeamFeatureAccessible, isTeamFeatureGated, isTeamFeatureLocked, isUnifiedMcpUrl, isUserRole, localize, nativeAppSlugs, normalizeAutomationActionType, ogImageUrl, outboundChannel, permissionPresetRules, resolveAccessCatalog, resolveAgentMcpUrl, resolveConnectMcpUrl, resolveWarpText, returnStatusValues, returnUpdateStatusValues, sanitizeAlphanumeric, sanitizeNumeric, slugifyMcpSegment, teamCategories, toCurrencyDisplay, toHexEncodedNonce, toNameInitials, toNftId, toPreviewText, userPermissionValues, userRoleValues, withRetry };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joai/core",
3
- "version": "4.11.0",
3
+ "version": "4.12.1",
4
4
  "description": "JoAi shared types, HTTP service, and config",
5
5
  "license": "MIT",
6
6
  "type": "module",