@joai/core 4.2.0 → 4.3.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
@@ -197,8 +197,50 @@ type WalletList = Partial<Record<WarpChainName, {
197
197
  address?: string;
198
198
  }>>;
199
199
  //#endregion
200
+ //#region src/user/permissions.d.ts
201
+ /** Permission string values — must match joai--api `UserPermission::value`. */
202
+ declare const UserPermissions: {
203
+ readonly BillingManage: "billing-manage";
204
+ readonly TeamManage: "team-manage";
205
+ readonly TeamView: "team-view";
206
+ readonly TeamMemberInvite: "team-member-invite";
207
+ readonly TeamMemberRemove: "team-member-remove";
208
+ readonly TeamSecretView: "team-secret-view";
209
+ readonly TeamSecretManage: "team-secret-manage";
210
+ readonly AgentExecute: "agent-execute";
211
+ readonly AgentWalletManage: "agent-wallet-manage";
212
+ readonly SwarmCreate: "swarm-create";
213
+ };
214
+ type UserPermission = (typeof UserPermissions)[keyof typeof UserPermissions];
215
+ declare const userPermissionValues: [UserPermission, ...UserPermission[]];
216
+ declare const hasPermission: (granted: readonly UserPermission[] | undefined, required: UserPermission) => boolean;
217
+ declare const hasAllPermissions: (granted: readonly UserPermission[] | undefined, required: readonly UserPermission[]) => boolean;
218
+ declare const hasAnyPermissions: (granted: readonly UserPermission[] | undefined, required: readonly UserPermission[]) => boolean;
219
+ declare const hasTeamPermission: (team: {
220
+ permissions?: UserPermission[];
221
+ } | null | undefined, permission: UserPermission) => boolean;
222
+ declare const hasAllTeamPermissions: (team: {
223
+ permissions?: UserPermission[];
224
+ } | null | undefined, permissions: UserPermission[]) => boolean;
225
+ //#endregion
226
+ //#region src/user/roles.d.ts
227
+ /** Team member roles — values must match joai--api `UserRole::toName()`. */
228
+ declare const UserRoles: {
229
+ readonly Owner: "owner";
230
+ readonly Admin: "admin";
231
+ readonly Member: "member";
232
+ readonly Developer: "developer";
233
+ };
234
+ type UserRole = (typeof UserRoles)[keyof typeof UserRoles];
235
+ declare const userRoleValues: [UserRole, ...UserRole[]];
236
+ declare const isUserRole: (value: string) => value is UserRole;
237
+ /** Roles assignable via team invite — owner is never inviteable. Must match API `RolePermissions::inviteable()`. */
238
+ declare const InviteableTeamRoles: readonly ["member", "developer", "admin"];
239
+ declare const DefaultInviteTeamRole: "member";
240
+ declare const inviteableTeamRoles: () => UserRole[];
241
+ declare const defaultInviteTeamRole: () => UserRole;
242
+ //#endregion
200
243
  //#region src/user/types.d.ts
201
- type UserRole = 'owner' | 'member';
202
244
  type UserMode = 'simple' | 'advanced';
203
245
  type UserInterest = 'payments' | 'health' | 'content' | 'business' | 'finance' | 'research' | 'shopping' | 'web3' | 'developer' | 'fitness' | 'ecommerce';
204
246
  type UserSettings = {
@@ -234,7 +276,6 @@ type UserPrivate = {
234
276
  socials: UserSocialAccount[];
235
277
  justCreated: boolean;
236
278
  affiliate: Affiliate | null;
237
- betaRestricted: boolean;
238
279
  kyc?: Kyc | null;
239
280
  settings: UserSettings;
240
281
  };
@@ -302,9 +343,6 @@ type AffiliateTier = {
302
343
  };
303
344
  type AffiliateStatus = 'pending' | 'approved' | 'rejected' | 'suspended' | 'demoted';
304
345
  //#endregion
305
- //#region src/team/constants.d.ts
306
- declare const teamCategories: readonly ["general", "food-drink", "retail", "beauty-wellness", "health", "sports-fitness", "trades-services", "professional-services", "education-culture", "clubs-organizations", "leisure-tourism"];
307
- //#endregion
308
346
  //#region src/team/apps.d.ts
309
347
  declare const NativeApps: {
310
348
  readonly Board: "board";
@@ -327,6 +365,38 @@ type NativeApp = (typeof NativeApps)[keyof typeof NativeApps];
327
365
  declare const nativeAppSlugs: NativeApp[];
328
366
  declare const isNativeApp: (value: unknown) => value is NativeApp;
329
367
  //#endregion
368
+ //#region src/access/team-access.d.ts
369
+ type TeamFeatureArea = 'nativeApps' | 'agentSettings' | 'teamSettings' | 'developerHub' | 'areas' | 'commerce';
370
+ type GatedFeatureArea = Exclude<TeamFeatureArea, 'nativeApps'>;
371
+ /** Keys per area that the API evaluates in `team.access`. */
372
+ type TeamAccessCatalog = Partial<Record<TeamFeatureArea, string[]>>;
373
+ type TeamAccessConfig = {
374
+ accessCatalog: TeamAccessCatalog;
375
+ };
376
+ /** Resolved feature access from API `TeamPrivate.access` — do not evaluate rules on the client. */
377
+ type TeamFeatureAccess = {
378
+ nativeApps?: Partial<Record<NativeApp, boolean>>;
379
+ agentSettings?: Partial<Record<string, boolean>>;
380
+ teamSettings?: Partial<Record<string, boolean>>;
381
+ developerHub?: Partial<Record<string, boolean>>;
382
+ areas?: Partial<Record<string, boolean>>;
383
+ commerce?: Partial<Record<string, boolean>>;
384
+ };
385
+ type TeamWithAccess = {
386
+ access?: TeamFeatureAccess | null;
387
+ accessCatalog?: TeamAccessCatalog | null;
388
+ };
389
+ declare const resolveAccessCatalog: (team: TeamWithAccess | null | undefined, accessConfig: TeamAccessConfig | null | undefined) => TeamAccessCatalog | null | undefined;
390
+ declare const isTeamFeatureGated: (catalog: TeamAccessCatalog | null | undefined, area: GatedFeatureArea, key: string) => boolean;
391
+ declare const isNativeAppGated: (catalog: TeamAccessCatalog | null | undefined, app: NativeApp) => boolean;
392
+ declare const isTeamFeatureAccessible: (team: TeamWithAccess | null | undefined, area: GatedFeatureArea, key: string) => boolean;
393
+ declare const isTeamFeatureLocked: (team: TeamWithAccess | null | undefined, catalog: TeamAccessCatalog | null | undefined, area: GatedFeatureArea, key: string) => boolean;
394
+ declare const isNativeAppAccessible: (team: TeamWithAccess | null | undefined, app: NativeApp) => boolean;
395
+ declare const isNativeAppLocked: (team: TeamWithAccess | null | undefined, catalog: TeamAccessCatalog | null | undefined, app: NativeApp) => boolean;
396
+ //#endregion
397
+ //#region src/team/constants.d.ts
398
+ declare const teamCategories: readonly ["general", "food-drink", "retail", "beauty-wellness", "health", "sports-fitness", "trades-services", "professional-services", "education-culture", "clubs-organizations", "leisure-tourism"];
399
+ //#endregion
330
400
  //#region src/team/types.d.ts
331
401
  type TeamCategory = (typeof teamCategories)[number];
332
402
  type TeamFeature = 'shop' | 'appointments';
@@ -438,6 +508,10 @@ type TeamPrivate = {
438
508
  category: TeamCategory;
439
509
  createdAt: string;
440
510
  justCreated: boolean;
511
+ role?: UserRole | null;
512
+ permissions?: UserPermission[];
513
+ access?: TeamFeatureAccess;
514
+ accessCatalog?: TeamAccessCatalog;
441
515
  };
442
516
  type ByokProviderConfig = {
443
517
  apiKey?: string;
@@ -524,8 +598,15 @@ type AiCostsResponse = {
524
598
  };
525
599
  };
526
600
  //#endregion
601
+ //#region src/address/enums.d.ts
602
+ declare const AddressTypes: {
603
+ readonly Billing: "billing";
604
+ readonly Shipping: "shipping";
605
+ };
606
+ type AddressType = (typeof AddressTypes)[keyof typeof AddressTypes];
607
+ declare const addressTypeValues: [AddressType, ...AddressType[]];
608
+ //#endregion
527
609
  //#region src/address/types.d.ts
528
- type AddressType = 'shipping' | 'billing';
529
610
  type Address = {
530
611
  id: string;
531
612
  type: AddressType;
@@ -578,8 +659,41 @@ type AddressCreatePayload = {
578
659
  };
579
660
  type AddressUpdatePayload = Partial<Omit<AddressCreatePayload, 'contact' | 'team'>>;
580
661
  //#endregion
662
+ //#region src/commerce/enums.d.ts
663
+ declare const FulfillmentStatuses: {
664
+ readonly Pending: "pending";
665
+ readonly ReadyForPickup: "ready_for_pickup";
666
+ readonly Shipped: "shipped";
667
+ readonly Delivered: "delivered";
668
+ readonly Cancelled: "cancelled";
669
+ };
670
+ type FulfillmentStatus = (typeof FulfillmentStatuses)[keyof typeof FulfillmentStatuses];
671
+ declare const fulfillmentStatusValues: [FulfillmentStatus, ...FulfillmentStatus[]];
672
+ declare const FulfillmentMethods: {
673
+ readonly Shipping: "shipping";
674
+ readonly Pickup: "pickup";
675
+ };
676
+ type FulfillmentMethod = (typeof FulfillmentMethods)[keyof typeof FulfillmentMethods];
677
+ declare const fulfillmentMethodValues: [FulfillmentMethod, ...FulfillmentMethod[]];
678
+ declare const ReturnStatuses: {
679
+ readonly Requested: "requested";
680
+ readonly Approved: "approved";
681
+ readonly Rejected: "rejected";
682
+ readonly Received: "received";
683
+ readonly Closed: "closed";
684
+ };
685
+ type ReturnStatus = (typeof ReturnStatuses)[keyof typeof ReturnStatuses];
686
+ declare const returnStatusValues: [ReturnStatus, ...ReturnStatus[]];
687
+ declare const ReturnUpdateStatuses: {
688
+ readonly Approved: "approved";
689
+ readonly Rejected: "rejected";
690
+ readonly Received: "received";
691
+ readonly Closed: "closed";
692
+ };
693
+ type ReturnUpdateStatus = (typeof ReturnUpdateStatuses)[keyof typeof ReturnUpdateStatuses];
694
+ declare const returnUpdateStatusValues: [ReturnUpdateStatus, ...ReturnUpdateStatus[]];
695
+ //#endregion
581
696
  //#region src/commerce/types.d.ts
582
- type FulfillmentMethod = 'shipping' | 'pickup';
583
697
  type ShippingRate = {
584
698
  id: number;
585
699
  name: string;
@@ -637,7 +751,6 @@ type FulfillmentLocation = {
637
751
  instructions: string | null;
638
752
  active: boolean;
639
753
  };
640
- type FulfillmentStatus = 'pending' | 'ready_for_pickup' | 'shipped' | 'delivered' | 'cancelled';
641
754
  type Fulfillment = {
642
755
  id: string;
643
756
  orderId: number;
@@ -654,7 +767,6 @@ type Fulfillment = {
654
767
  readyForPickupAt: string | null;
655
768
  deliveredAt: string | null;
656
769
  };
657
- type ReturnStatus = 'requested' | 'approved' | 'rejected' | 'received' | 'closed';
658
770
  type Return = {
659
771
  id: string;
660
772
  orderId: number;
@@ -1044,7 +1156,7 @@ type Order = {
1044
1156
  linkVariationId: string | null;
1045
1157
  notes: string | null;
1046
1158
  fulfillmentMethod?: FulfillmentMethod | null;
1047
- address?: AddressSnapshot | null;
1159
+ billingAddress?: AddressSnapshot | null;
1048
1160
  shippingAddress?: AddressSnapshot | null;
1049
1161
  shippingRate?: Pick<ShippingRate, 'name' | 'price' | 'estimatedMinDays' | 'estimatedMaxDays'> | null;
1050
1162
  fulfillmentLocation?: {
@@ -3798,6 +3910,32 @@ type SchedulePreset = {
3798
3910
  description: string;
3799
3911
  };
3800
3912
  //#endregion
3913
+ //#region src/access/mcp-access.d.ts
3914
+ /** Preset names — must match joai--api `PermissionPreset::value`. */
3915
+ declare const PermissionPresetNames: {
3916
+ readonly TeamManage: "teamManage";
3917
+ readonly TeamView: "teamView";
3918
+ readonly BillingManage: "billingManage";
3919
+ readonly AgentTooling: "agentTooling";
3920
+ readonly SecretView: "secretView";
3921
+ readonly SecretManage: "secretManage";
3922
+ readonly TeamMemberInvite: "teamMemberInvite";
3923
+ readonly TeamMemberRemove: "teamMemberRemove";
3924
+ readonly AgentWalletManage: "agentWalletManage";
3925
+ readonly SwarmCreate: "swarmCreate";
3926
+ };
3927
+ type PermissionPresetName = (typeof PermissionPresetNames)[keyof typeof PermissionPresetNames];
3928
+ /** Permission presets for MCP tool gating — not used by the PWA (UI reads `team.access` from API). */
3929
+ type AppAccessRule = {
3930
+ permissions?: UserPermission[];
3931
+ permissionsAny?: UserPermission[];
3932
+ };
3933
+ declare const permissionPresetRules: Record<PermissionPresetName, AppAccessRule>;
3934
+ declare const TeamManageAccess: AppAccessRule;
3935
+ declare const TeamViewAccess: AppAccessRule;
3936
+ declare const AgentToolingAccess: AppAccessRule;
3937
+ declare const BillingManageAccess: AppAccessRule;
3938
+ //#endregion
3801
3939
  //#region src/wallet-chains/types.d.ts
3802
3940
  type RampProvider = 'coinbase' | 'xmoney' | 'moonpay';
3803
3941
  type RampProviderInfo = {
@@ -3971,4 +4109,4 @@ type CliSessionStatus = {
3971
4109
  meta: CliSessionMeta | null;
3972
4110
  };
3973
4111
  //#endregion
3974
- export { Achievement, Address, AddressCreatePayload, AddressInput, AddressSnapshot, AddressType, AddressUpdatePayload, Affiliate, AffiliateStatus, AffiliateTier, AffiliateTierName, Agent, AgentActionHistoryEntry, AgentCharacter, AgentDelegatable, AgentEngine, AgentExecuteHandler, AgentExecuteOptions, AgentGender, AgentMessageMeta, AgentMessageOptions, AgentPrivate, AgentSettings, AgentSimple, AgentWalletMode, AggregatedRoute, AiCostEntry, AiCostsResponse, AiCostsSummary, Alert, ApiToken, AppEnv, AppFile, AppFileType, AppIngestion, AppendKvEntryResult, AppointmentAvailability, AppointmentAvailabilityService, AppointmentAvailabilitySlot, AppointmentBooking, AppointmentBookingContext, AppointmentPolicy, AppointmentPolicySync, AppointmentRequest, AppointmentSlot, AuthUser, Blueprint, BlueprintOnboardingStep, BlueprintRedirect, BlueprintSettings, BlueprintShortcut, BlueprintTask, BlueprintTeam, BoardSummaryViewable, BookmarkEntry, BrandBackend, BrandIntegration, BrandIntegrationAction, BrandIntegrationProvider, BrandSearchHit, BrandSiteConfig, BrandSourceConfig, Budget, ByokProviderConfig, ByokProviderName, ByokProviders, CalendarProvider, CalendarStatus, Campaign, CampaignApproval, CampaignCategory, CampaignChannel, CampaignCreatePayload, 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, ContactViewable, Contract, ContractCategoryDisplayNames, ContractCategoryName, ContractCodeMetadata, ContractEntity, ContractOnNetwork, ContractVersion, ContractsAddressConfig, CortexExecuteOptions, Coupon, CouponCondition, CouponRestrictedItem, CouponRestrictedItemType, CreateHookPayload, CreateInboundHookPayload, CreateInternalHookPayload, CreateKvFieldPayload, CreateWarpLinkedHookPayload, CreateWebHookPayload, DefaultCodeMetadata, 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, FulfillmentMethod, FulfillmentStatus, GamificationData, GamificationEventType, Goal, GoalCreatePayload, GoalPriority, GoalProgressViewable, GoalStatus, HintOptions, HintPosition, Hook, HookSample, HookTrigger, HookTriggerCondition, HookTriggerInput, HttpService, IAppResponse, IHttpService, IRequestOptions, IngestionSourceType, IngestionStatus, Inquiry, InquiryStatus, InquiryType, Integration, IntegrationConnectionDetails, IntegrationDetails, IntegrationMeta, IntegrationType, Intent, 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, 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, PaymentAccount, PaymentAccountOnboarding, PaymentProvider, PayoutEntry, PeriodTypeLabels, PeriodTypeOptions, PermissionConfigType, 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, ReturnStatus, 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, TeamBrand, TeamCategory, TeamEarning, TeamEarningsBalance, TeamFeature, TeamFeatureUsage, TeamMember, TeamMeta, TeamPayout, TeamPayoutAddress, TeamPlace, TeamPrivate, TeamSettings, TeamUsage, TerminalConnectionToken, TerminalPaymentIntent, Tier, TierFeature, TierName, ToggleKvFieldResult, TranscriptEntry, TranscriptionCorrection, TranscriptionResponse, TranslatableValue, Update, UpdateCreatePayload, UpdateRelation, UpdateStats, UpdateStatus, UpdateType, UpdateUpdatePayload, Upgrade, UpgradeSourceType, UpgradeStatus, User, UserInterest, UserMode, UserPrivate, UserRole, 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, cartLineTotal, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, isCompleteAddressInput, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, localize, nativeAppSlugs, ogImageUrl, resolveWarpText, sanitizeAlphanumeric, sanitizeNumeric, teamCategories, toCurrencyDisplay, toHexEncodedNonce, toNameInitials, toNftId, toPreviewText, withRetry };
4112
+ 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, AgentSimple, AgentToolingAccess, AgentWalletMode, AggregatedRoute, AiCostEntry, AiCostsResponse, AiCostsSummary, Alert, ApiToken, AppAccessRule, AppEnv, AppFile, AppFileType, AppIngestion, AppendKvEntryResult, AppointmentAvailability, AppointmentAvailabilityService, AppointmentAvailabilitySlot, AppointmentBooking, AppointmentBookingContext, AppointmentPolicy, AppointmentPolicySync, AppointmentRequest, AppointmentSlot, 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, CampaignCategory, CampaignChannel, CampaignCreatePayload, 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, ContactViewable, Contract, ContractCategoryDisplayNames, ContractCategoryName, ContractCodeMetadata, ContractEntity, ContractOnNetwork, ContractVersion, ContractsAddressConfig, CortexExecuteOptions, Coupon, CouponCondition, CouponRestrictedItem, CouponRestrictedItemType, 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, 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, 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, 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, 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, cartLineTotal, defaultInviteTeamRole, fulfillmentMethodValues, fulfillmentStatusValues, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, hasAllPermissions, hasAllTeamPermissions, hasAnyPermissions, hasPermission, hasTeamPermission, inviteableTeamRoles, isCompleteAddressInput, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, isNativeAppAccessible, isNativeAppGated, isNativeAppLocked, isTeamFeatureAccessible, isTeamFeatureGated, isTeamFeatureLocked, isUserRole, localize, nativeAppSlugs, ogImageUrl, permissionPresetRules, resolveAccessCatalog, resolveWarpText, returnStatusValues, returnUpdateStatusValues, sanitizeAlphanumeric, sanitizeNumeric, teamCategories, toCurrencyDisplay, toHexEncodedNonce, toNameInitials, toNftId, toPreviewText, userPermissionValues, userRoleValues, withRetry };
package/dist/index.mjs CHANGED
@@ -282,6 +282,43 @@ function resolveWarpText(text, locale = "en") {
282
282
  return text[locale] ?? text.en ?? Object.values(text)[0] ?? "";
283
283
  }
284
284
  //#endregion
285
+ //#region src/address/enums.ts
286
+ const AddressTypes = {
287
+ Billing: "billing",
288
+ Shipping: "shipping"
289
+ };
290
+ const addressTypeValues = Object.values(AddressTypes);
291
+ //#endregion
292
+ //#region src/commerce/enums.ts
293
+ const FulfillmentStatuses = {
294
+ Pending: "pending",
295
+ ReadyForPickup: "ready_for_pickup",
296
+ Shipped: "shipped",
297
+ Delivered: "delivered",
298
+ Cancelled: "cancelled"
299
+ };
300
+ const fulfillmentStatusValues = Object.values(FulfillmentStatuses);
301
+ const FulfillmentMethods = {
302
+ Shipping: "shipping",
303
+ Pickup: "pickup"
304
+ };
305
+ const fulfillmentMethodValues = Object.values(FulfillmentMethods);
306
+ const ReturnStatuses = {
307
+ Requested: "requested",
308
+ Approved: "approved",
309
+ Rejected: "rejected",
310
+ Received: "received",
311
+ Closed: "closed"
312
+ };
313
+ const returnStatusValues = Object.values(ReturnStatuses);
314
+ const ReturnUpdateStatuses = {
315
+ Approved: "approved",
316
+ Rejected: "rejected",
317
+ Received: "received",
318
+ Closed: "closed"
319
+ };
320
+ const returnUpdateStatusValues = Object.values(ReturnUpdateStatuses);
321
+ //#endregion
285
322
  //#region src/commerce/helpers.ts
286
323
  const cartLineTotal = (items) => items.reduce((total, item) => total + item.price * item.quantity, 0);
287
324
  const isCompleteAddressInput = (address) => Boolean(address.name.trim() && address.addressOne.trim() && address.city.trim() && address.zipCode.trim() && address.country.trim());
@@ -421,4 +458,95 @@ const NativeApps = {
421
458
  const nativeAppSlugs = Object.values(NativeApps);
422
459
  const isNativeApp = (value) => typeof value === "string" && nativeAppSlugs.includes(value);
423
460
  //#endregion
424
- export { ContractCategoryDisplayNames, DefaultCodeMetadata, HttpService, JoaiUrls, NATIVE_AUTH_TOKEN_PARAM, NativeApps, OG_IMAGE_CONFIG, OG_IMAGE_HEIGHT, OG_IMAGE_WIDTH, OgImageColors, PeriodTypeLabels, PeriodTypeOptions, SkillMediaBindingRole, SkillScope, SkillType, abbreviateNumber, cartLineTotal, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, isCompleteAddressInput, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, localize, nativeAppSlugs, ogImageUrl, resolveWarpText, sanitizeAlphanumeric, sanitizeNumeric, teamCategories, toCurrencyDisplay, toHexEncodedNonce, toNameInitials, toNftId, toPreviewText, withRetry };
461
+ //#region src/user/permissions.ts
462
+ /** Permission string values — must match joai--api `UserPermission::value`. */
463
+ const UserPermissions = {
464
+ BillingManage: "billing-manage",
465
+ TeamManage: "team-manage",
466
+ TeamView: "team-view",
467
+ TeamMemberInvite: "team-member-invite",
468
+ TeamMemberRemove: "team-member-remove",
469
+ TeamSecretView: "team-secret-view",
470
+ TeamSecretManage: "team-secret-manage",
471
+ AgentExecute: "agent-execute",
472
+ AgentWalletManage: "agent-wallet-manage",
473
+ SwarmCreate: "swarm-create"
474
+ };
475
+ const userPermissionValues = Object.values(UserPermissions);
476
+ const hasPermission = (granted, required) => Boolean(granted?.includes(required));
477
+ const hasAllPermissions = (granted, required) => required.every((permission) => hasPermission(granted, permission));
478
+ const hasAnyPermissions = (granted, required) => required.some((permission) => hasPermission(granted, permission));
479
+ const hasTeamPermission = (team, permission) => hasPermission(team?.permissions, permission);
480
+ const hasAllTeamPermissions = (team, permissions) => hasAllPermissions(team?.permissions, permissions);
481
+ //#endregion
482
+ //#region src/access/mcp-access.ts
483
+ /** Preset names — must match joai--api `PermissionPreset::value`. */
484
+ const PermissionPresetNames = {
485
+ TeamManage: "teamManage",
486
+ TeamView: "teamView",
487
+ BillingManage: "billingManage",
488
+ AgentTooling: "agentTooling",
489
+ SecretView: "secretView",
490
+ SecretManage: "secretManage",
491
+ TeamMemberInvite: "teamMemberInvite",
492
+ TeamMemberRemove: "teamMemberRemove",
493
+ AgentWalletManage: "agentWalletManage",
494
+ SwarmCreate: "swarmCreate"
495
+ };
496
+ const teamManageOr = (...permissions) => ({ permissionsAny: [UserPermissions.TeamManage, ...permissions] });
497
+ const permissionPresetRules = {
498
+ teamManage: { permissions: [UserPermissions.TeamManage] },
499
+ teamView: teamManageOr(UserPermissions.TeamView),
500
+ billingManage: teamManageOr(UserPermissions.BillingManage),
501
+ agentTooling: teamManageOr(UserPermissions.AgentExecute),
502
+ secretView: teamManageOr(UserPermissions.TeamSecretView),
503
+ secretManage: teamManageOr(UserPermissions.TeamSecretManage),
504
+ teamMemberInvite: teamManageOr(UserPermissions.TeamMemberInvite),
505
+ teamMemberRemove: teamManageOr(UserPermissions.TeamMemberRemove),
506
+ agentWalletManage: teamManageOr(UserPermissions.AgentWalletManage),
507
+ swarmCreate: teamManageOr(UserPermissions.SwarmCreate)
508
+ };
509
+ const TeamManageAccess = permissionPresetRules.teamManage;
510
+ const TeamViewAccess = permissionPresetRules.teamView;
511
+ const AgentToolingAccess = permissionPresetRules.agentTooling;
512
+ const BillingManageAccess = permissionPresetRules.billingManage;
513
+ //#endregion
514
+ //#region src/access/team-access.ts
515
+ const resolveAccessCatalog = (team, accessConfig) => team?.accessCatalog ?? accessConfig?.accessCatalog;
516
+ const featureSection = (team, area) => team?.access?.[area];
517
+ const isTeamFeatureGated = (catalog, area, key) => Boolean(catalog?.[area]?.includes(key));
518
+ const isNativeAppGated = (catalog, app) => Boolean(catalog?.nativeApps?.includes(app));
519
+ const isTeamFeatureAccessible = (team, area, key) => {
520
+ const section = featureSection(team, area);
521
+ if (!section || !(key in section)) return true;
522
+ return section[key] === true;
523
+ };
524
+ const isTeamFeatureLocked = (team, catalog, area, key) => isTeamFeatureGated(catalog, area, key) && !isTeamFeatureAccessible(team, area, key);
525
+ const isNativeAppAccessible = (team, app) => {
526
+ const section = team?.access?.nativeApps;
527
+ if (!section || !(app in section)) return true;
528
+ return section[app] === true;
529
+ };
530
+ const isNativeAppLocked = (team, catalog, app) => isNativeAppGated(catalog, app) && !isNativeAppAccessible(team, app);
531
+ //#endregion
532
+ //#region src/user/roles.ts
533
+ /** Team member roles — values must match joai--api `UserRole::toName()`. */
534
+ const UserRoles = {
535
+ Owner: "owner",
536
+ Admin: "admin",
537
+ Member: "member",
538
+ Developer: "developer"
539
+ };
540
+ const userRoleValues = Object.values(UserRoles);
541
+ const isUserRole = (value) => userRoleValues.includes(value);
542
+ /** Roles assignable via team invite — owner is never inviteable. Must match API `RolePermissions::inviteable()`. */
543
+ const InviteableTeamRoles = [
544
+ UserRoles.Member,
545
+ UserRoles.Developer,
546
+ UserRoles.Admin
547
+ ];
548
+ const DefaultInviteTeamRole = UserRoles.Member;
549
+ const inviteableTeamRoles = () => [...InviteableTeamRoles];
550
+ const defaultInviteTeamRole = () => DefaultInviteTeamRole;
551
+ //#endregion
552
+ 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, UserPermissions, UserRoles, abbreviateNumber, addressTypeValues, cartLineTotal, defaultInviteTeamRole, fulfillmentMethodValues, fulfillmentStatusValues, getAgentsBaseUrl, getApiBaseUrl, getAppBaseUrl, getAssetAppLogoUrl, getAssetChainLogoUrl, getAssetPartnerLogoUrl, getAssetTokenLogoUrl, getAssetWalletLogoUrl, getCortexBaseUrl, getDigestBaseUrl, getFormsBaseUrl, getLoginUrl, getMcpServerAgentUrl, getSiteUrl, getSitesBaseUrl, getSitesRootDomain, getStoreBaseUrl, getWarpScreenshotUrl, hasAllPermissions, hasAllTeamPermissions, hasAnyPermissions, hasPermission, hasTeamPermission, inviteableTeamRoles, isCompleteAddressInput, isFileFormatAudio, isFileFormatImage, isFileFormatVideo, isNativeApp, isNativeAppAccessible, isNativeAppGated, isNativeAppLocked, isTeamFeatureAccessible, isTeamFeatureGated, isTeamFeatureLocked, isUserRole, localize, nativeAppSlugs, ogImageUrl, permissionPresetRules, resolveAccessCatalog, resolveWarpText, returnStatusValues, returnUpdateStatusValues, sanitizeAlphanumeric, sanitizeNumeric, 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.2.0",
3
+ "version": "4.3.1",
4
4
  "description": "JoAi shared types, HTTP service, and config",
5
5
  "license": "MIT",
6
6
  "type": "module",