@elqnt/admin 2.2.1 → 2.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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../models/admin.ts","../models/billing.ts","../api/index.ts","../api/orgs.ts","../api/users.ts","../api/invites.ts","../api/analytics.ts","../api/provisioning.ts"],"sourcesContent":["// Code generated by tygo. DO NOT EDIT.\n// Code generated by tygo. DO NOT EDIT.\n// Migrated from @elqnt/types/models/admin-models.ts to @elqnt/admin\nimport { ResponseMetadata } from \"@elqnt/types\";\n\n//////////\n// source: admin-models.go\n\nexport interface Address {\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n zip: string;\n}\nexport interface Org {\n id?: string /* uuid */;\n title: string;\n logoUrl: string;\n mainDomain: string;\n address: Address;\n apps: SystemAppTS[];\n /**\n * Status & Control\n */\n status: OrgStatusTS;\n enabled: boolean;\n /**\n * Classification\n */\n product?: OrgProductTS;\n type: OrgTypeTS;\n size?: OrgSizeTS;\n industry?: string;\n tags?: string[];\n /**\n * Subscription (Stripe)\n */\n subscription?: OrgSubscription;\n userCount: number /* int64 */;\n /**\n * Onboarding & Provisioning\n */\n onboarding?: OrgOnboarding;\n provisioning?: OrgProvisioning;\n /**\n * Template & Roles\n */\n template?: OrgTemplate;\n roles: string[];\n /**\n * Flexible metadata\n */\n metadata?: { [key: string]: any};\n /**\n * Audit fields\n */\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n}\nexport type OrgStatus = string;\nexport const OrgStatusActive: OrgStatus = \"active\";\nexport const OrgStatusSuspended: OrgStatus = \"suspended\";\n\nexport const OrgStatuses = {\n active: { value: 'active', label: 'Active' },\n suspended: { value: 'suspended', label: 'Suspended' },\n} as const;\nexport type OrgStatusTS = keyof typeof OrgStatuses;\nexport type OrgStatusOptionTS = typeof OrgStatuses[OrgStatusTS];\n\n/**\n * OrgType represents whether the org is self-serve or enterprise\n */\nexport type OrgType = string;\nexport const OrgTypeSelfServe: OrgType = \"self-serve\";\nexport const OrgTypeEnterprise: OrgType = \"enterprise\";\n\nexport const OrgTypes = {\n \"self-serve\": { value: 'self-serve', label: 'Self-Serve' },\n enterprise: { value: 'enterprise', label: 'Enterprise' },\n} as const;\nexport type OrgTypeTS = keyof typeof OrgTypes;\nexport type OrgTypeOptionTS = typeof OrgTypes[OrgTypeTS];\n\n/**\n * OrgSize represents the size of the organization\n */\nexport type OrgSize = string;\nexport const OrgSizeSolo: OrgSize = \"solo\";\nexport const OrgSizeSmall: OrgSize = \"small\";\nexport const OrgSizeMedium: OrgSize = \"medium\";\nexport const OrgSizeLarge: OrgSize = \"large\";\nexport const OrgSizeEnterprise: OrgSize = \"enterprise\";\n\nexport const OrgSizes = {\n solo: { value: 'solo', label: 'Just me' },\n small: { value: 'small', label: '2-10' },\n medium: { value: 'medium', label: '11-50' },\n large: { value: 'large', label: '51-200' },\n enterprise: { value: 'enterprise', label: '200+' },\n} as const;\nexport type OrgSizeTS = keyof typeof OrgSizes;\nexport type OrgSizeOptionTS = typeof OrgSizes[OrgSizeTS];\n\n/**\n * OrgProduct represents the product type for an organization\n */\nexport type OrgProduct = string;\nexport const OrgProductEloquent: OrgProduct = \"eloquent\";\nexport const OrgProductShopAssist: OrgProduct = \"shop-assist\";\nexport const OrgProductConsumer: OrgProduct = \"consumer\";\nexport const OrgProductCustom: OrgProduct = \"custom\";\nexport const OrgProductAafya: OrgProduct = \"aafya\";\nexport const OrgProductFahim: OrgProduct = \"fahim\";\n\nexport const OrgProducts = {\n eloquent: { value: 'eloquent', label: 'Eloquent', description: 'Full-featured enterprise AI platform with all capabilities' },\n \"shop-assist\": { value: 'shop-assist', label: 'Shop Assist', description: 'E-commerce focused AI assistant for online stores' },\n consumer: { value: 'consumer', label: 'Consumer', description: 'Consumer-facing AI applications' },\n custom: { value: 'custom', label: 'Custom', description: 'Custom configuration for specific requirements' },\n aafya: { value: 'aafya', label: 'Aafya', description: 'AI-powered healthcare triage and medical assistance platform' },\n fahim: { value: 'fahim', label: 'Fahim فاهم', description: 'AI-powered tutor for personalized learning across subjects' },\n} as const;\nexport type OrgProductTS = keyof typeof OrgProducts;\nexport type OrgProductOptionTS = typeof OrgProducts[OrgProductTS];\n\n/**\n * OrgArtifactType represents the type of artifact to provision\n */\nexport type OrgArtifactType = string;\n/**\n * PostgreSQL schemas (3 databases)\n */\nexport const OrgArtifactPostgresEntities: OrgArtifactType = \"postgres_entities\";\nexport const OrgArtifactPostgresAgents: OrgArtifactType = \"postgres_agents\";\nexport const OrgArtifactPostgresOrgConfig: OrgArtifactType = \"postgres_org_config\";\n/**\n * ClickHouse\n */\nexport const OrgArtifactClickHouseOrg: OrgArtifactType = \"clickhouse_org\";\n/**\n * NATS\n */\nexport const OrgArtifactNATSChatBuckets: OrgArtifactType = \"nats_chat_buckets\";\n/**\n * Entity definitions\n */\nexport const OrgArtifactEntityDefsEloquent: OrgArtifactType = \"entity_defs_eloquent\";\nexport const OrgArtifactEntityDefsDocs: OrgArtifactType = \"entity_defs_docs\";\nexport const OrgArtifactEntityDefsBoards: OrgArtifactType = \"entity_defs_boards\";\n/**\n * Settings\n */\nexport const OrgArtifactOrgSettings: OrgArtifactType = \"org_settings\";\n/**\n * Knowledge Graph\n */\nexport const OrgArtifactKnowledgeGraph: OrgArtifactType = \"knowledge_graph\";\nexport const OrgArtifactKGSchema: OrgArtifactType = \"kg_schema\";\n/**\n * Agents\n */\nexport const OrgArtifactDefaultSkills: OrgArtifactType = \"default_skills\";\nexport const OrgArtifactDefaultAgent: OrgArtifactType = \"default_agent\";\nexport const OrgArtifactChatWidget: OrgArtifactType = \"chat_widget\";\n/**\n * Default Resources\n */\nexport const OrgArtifactDefaultOrgLibrary: OrgArtifactType = \"default_org_library\";\n\nexport const OrgArtifactTypes = {\n postgres_entities: { value: 'postgres_entities', label: 'PostgreSQL Entities' },\n postgres_agents: { value: 'postgres_agents', label: 'PostgreSQL Agents' },\n postgres_org_config: { value: 'postgres_org_config', label: 'PostgreSQL Org Config' },\n clickhouse_org: { value: 'clickhouse_org', label: 'ClickHouse Analytics' },\n nats_chat_buckets: { value: 'nats_chat_buckets', label: 'NATS Chat Buckets' },\n entity_defs_eloquent: { value: 'entity_defs_eloquent', label: 'Eloquent Entities' },\n entity_defs_docs: { value: 'entity_defs_docs', label: 'Documents Entities' },\n entity_defs_boards: { value: 'entity_defs_boards', label: 'Boards Entities' },\n org_settings: { value: 'org_settings', label: 'Organization Settings' },\n knowledge_graph: { value: 'knowledge_graph', label: 'Knowledge Graph' },\n kg_schema: { value: 'kg_schema', label: 'KG Default Schema' },\n default_skills: { value: 'default_skills', label: 'Default Skills' },\n default_agent: { value: 'default_agent', label: 'Default Agent' },\n chat_widget: { value: 'chat_widget', label: 'Chat Widget' },\n default_org_library: { value: 'default_org_library', label: 'Org Documents Library' },\n} as const;\nexport type OrgArtifactTypeTS = keyof typeof OrgArtifactTypes;\nexport type OrgArtifactTypeOptionTS = typeof OrgArtifactTypes[OrgArtifactTypeTS];\n\n/**\n * OrgArtifactStatus represents the status of an artifact\n */\nexport type OrgArtifactStatus = string;\nexport const OrgArtifactStatusPending: OrgArtifactStatus = \"pending\";\nexport const OrgArtifactStatusInProgress: OrgArtifactStatus = \"in_progress\";\nexport const OrgArtifactStatusCompleted: OrgArtifactStatus = \"completed\";\nexport const OrgArtifactStatusFailed: OrgArtifactStatus = \"failed\";\nexport const OrgArtifactStatusSkipped: OrgArtifactStatus = \"skipped\";\n\nexport const OrgArtifactStatuses = {\n pending: { value: 'pending', label: 'Pending' },\n in_progress: { value: 'in_progress', label: 'In Progress' },\n completed: { value: 'completed', label: 'Completed' },\n failed: { value: 'failed', label: 'Failed' },\n skipped: { value: 'skipped', label: 'Skipped' },\n} as const;\nexport type OrgArtifactStatusTS = keyof typeof OrgArtifactStatuses;\nexport type OrgArtifactStatusOptionTS = typeof OrgArtifactStatuses[OrgArtifactStatusTS];\n\n/**\n * OnboardingStatus represents the status of an onboarding flow\n */\nexport type OnboardingStatus = string;\nexport const OnboardingStatusPending: OnboardingStatus = \"pending\";\nexport const OnboardingStatusInProgress: OnboardingStatus = \"in_progress\";\nexport const OnboardingStatusCompleted: OnboardingStatus = \"completed\";\nexport const OnboardingStatusSkipped: OnboardingStatus = \"skipped\";\nexport const OnboardingStatusLegacy: OnboardingStatus = \"legacy\"; // For users created before onboarding\n\nexport const OnboardingStatuses = {\n pending: { value: 'pending', label: 'Pending' },\n in_progress: { value: 'in_progress', label: 'In Progress' },\n completed: { value: 'completed', label: 'Completed' },\n skipped: { value: 'skipped', label: 'Skipped' },\n legacy: { value: 'legacy', label: 'Legacy' },\n} as const;\nexport type OnboardingStatusTS = keyof typeof OnboardingStatuses;\nexport type OnboardingStatusOptionTS = typeof OnboardingStatuses[OnboardingStatusTS];\n\n/**\n * ProvisioningStatus represents the status of resource provisioning\n */\nexport type ProvisioningStatus = string;\nexport const ProvisioningStatusPending: ProvisioningStatus = \"pending\";\nexport const ProvisioningStatusInProgress: ProvisioningStatus = \"in_progress\";\nexport const ProvisioningStatusCompleted: ProvisioningStatus = \"completed\";\nexport const ProvisioningStatusPartial: ProvisioningStatus = \"partial\"; // Some artifacts failed\nexport const ProvisioningStatusFailed: ProvisioningStatus = \"failed\";\n\nexport const ProvisioningStatuses = {\n pending: { value: 'pending', label: 'Pending' },\n in_progress: { value: 'in_progress', label: 'In Progress' },\n completed: { value: 'completed', label: 'Completed' },\n partial: { value: 'partial', label: 'Partial' },\n failed: { value: 'failed', label: 'Failed' },\n} as const;\nexport type ProvisioningStatusTS = keyof typeof ProvisioningStatuses;\nexport type ProvisioningStatusOptionTS = typeof ProvisioningStatuses[ProvisioningStatusTS];\n\n/**\n * OrgOnboarding tracks the onboarding progress for an organization\n */\nexport interface OrgOnboarding {\n status: OnboardingStatus;\n currentStep: number /* int */;\n completedAt?: number /* int64 */;\n skippedSteps?: number /* int */[];\n}\n/**\n * OrgArtifact represents a single provisioned artifact\n */\nexport interface OrgArtifact {\n type: OrgArtifactTypeTS;\n status: OrgArtifactStatusTS;\n critical: boolean;\n error?: string;\n duration?: number /* int64 */; // Actual duration in ms\n estimatedDuration?: number /* int64 */; // Estimated duration in ms\n startedAt?: number /* int64 */;\n completedAt?: number /* int64 */;\n metadata?: { [key: string]: any};\n}\n/**\n * OrgProvisioning tracks the provisioning status of org resources\n */\nexport interface OrgProvisioning {\n status: ProvisioningStatusTS;\n totalArtifacts: number /* int */;\n completedArtifacts: number /* int */;\n failedArtifacts: number /* int */;\n artifacts?: OrgArtifact[];\n startedAt?: number /* int64 */;\n completedAt?: number /* int64 */;\n /**\n * Legacy fields for backwards compatibility\n */\n defaultAgentId?: string;\n defaultKnowledgeGraphId?: string;\n error?: string;\n /**\n * Metadata for passing data between provisioners (e.g., skill IDs)\n */\n metadata?: { [key: string]: any};\n}\n/**\n * OrgProvisioningProgress represents real-time progress for SSE\n */\nexport interface OrgProvisioningProgress {\n orgId: string;\n artifact?: OrgArtifactTypeTS;\n status: OrgArtifactStatusTS;\n error?: string;\n progress: number /* int */; // 0-100 overall\n totalArtifacts: number /* int */;\n completedCount: number /* int */;\n failedCount: number /* int */;\n currentStep?: string;\n elapsedMs: number /* int64 */;\n estimatedMs?: number /* int64 */;\n}\n/**\n * OrgProvisioningOptions allows customizing provisioning behavior\n */\nexport interface OrgProvisioningOptions {\n skipArtifacts?: OrgArtifactTypeTS[];\n onlyArtifacts?: OrgArtifactTypeTS[];\n customArtifacts?: OrgArtifactTypeTS[];\n skipKnowledgeGraph?: boolean;\n skipDefaultAgent?: boolean;\n}\nexport interface OrgSubscription {\n plan: string;\n platform: SubscriptionPlatform;\n status: OrgSubscriptionStatus;\n trialEndsAt?: number /* int64 */;\n currentPeriodEnd?: number /* int64 */;\n seats?: number /* int */;\n stripeCustomerId?: string;\n stripeSubscriptionId?: string;\n cancelledAt?: number /* int64 */;\n cancelReason?: string;\n gracePeriodEndsAt?: number /* int64 */;\n}\nexport type OrgSubscriptionStatus = string;\nexport const OrgSubscriptionStatusTrialing: OrgSubscriptionStatus = \"trialing\";\nexport const OrgSubscriptionStatusActive: OrgSubscriptionStatus = \"active\";\nexport const OrgSubscriptionStatusPastDue: OrgSubscriptionStatus = \"past_due\";\nexport const OrgSubscriptionStatusCancelled: OrgSubscriptionStatus = \"cancelled\";\nexport const OrgSubscriptionStatusUnpaid: OrgSubscriptionStatus = \"unpaid\";\n\nexport const OrgSubscriptionStatuses = {\n trialing: { value: 'trialing', label: 'Trialing' },\n active: { value: 'active', label: 'Active' },\n past_due: { value: 'past_due', label: 'Past Due' },\n cancelled: { value: 'cancelled', label: 'Cancelled' },\n unpaid: { value: 'unpaid', label: 'Unpaid' },\n} as const;\nexport type OrgSubscriptionStatusTS = keyof typeof OrgSubscriptionStatuses;\nexport type OrgSubscriptionStatusOptionTS = typeof OrgSubscriptionStatuses[OrgSubscriptionStatusTS];\n\nexport interface OrgResponse {\n org: Org;\n metadata: ResponseMetadata;\n}\nexport interface OrgInfoResponse {\n orgInfo: OrgInfo;\n metadata: ResponseMetadata;\n}\nexport interface OrgRoleResponse {\n role: OrgRole;\n metadata: ResponseMetadata;\n}\nexport interface ListOrgsResponse {\n orgs: Org[];\n metadata: ResponseMetadata;\n}\nexport interface ListOrgRolesResponse {\n roles: OrgRole[];\n metadata: ResponseMetadata;\n}\nexport interface OrgInfo {\n id?: string;\n title: string;\n logoUrl: string;\n mainDomain?: string;\n apps: SystemAppTS[];\n}\nexport interface AzureSettings {\n appClientId?: string;\n appClientSecret?: string;\n azureTenantId?: string;\n}\nexport interface OrgTemplate {\n id: string /* uuid */;\n slug: string;\n title: string;\n}\nexport interface UserOrgAccess {\n orgId?: string /* uuid */;\n orgTitle?: string;\n roles: string[];\n isSingleAccount: boolean;\n entityRecordFilter?: { entityName: string; recordId: string; displayValue?: string };\n}\n/**\n * UserSettings represents user preferences (elastic JSON structure)\n */\nexport interface UserSettings {\n theme?: string; // \"system\" | \"light\" | \"dark\"\n language?: string; // \"auto\" | \"en\" | \"ar\" | etc.\n timezone?: string; // \"auto\" | \"America/New_York\" | etc.\n occupation?: string; // User's occupation/role\n company?: string; // User's company/organization\n}\n\nexport const ThemeOptions = {\n system: { value: 'system', label: 'System' },\n light: { value: 'light', label: 'Light' },\n dark: { value: 'dark', label: 'Dark' },\n} as const;\nexport type ThemeOptionTS = keyof typeof ThemeOptions;\n\n/**\n * NotificationPreferences represents user notification settings\n */\nexport interface NotificationPreferences {\n pushEnabled: boolean;\n newChatAssignment: boolean;\n newMessages: boolean;\n escalations: boolean;\n urgentOnly: boolean;\n soundEnabled: boolean;\n doNotDisturb: boolean;\n dndStart?: string; // \"22:00\" format\n dndEnd?: string; // \"08:00\" format\n}\n/**\n * UserSource represents how a user was created\n */\nexport type UserSource = string;\nexport const UserSourceSignup: UserSource = \"signup\"; // Self-registered\nexport const UserSourceInvite: UserSource = \"invite\"; // Invited by team member\nexport const UserSourceSSO: UserSource = \"sso\"; // Auto-provisioned via SSO\nexport const UserSourceAPI: UserSource = \"api\"; // Created via API\n\nexport const UserSources = {\n signup: { value: 'signup', label: 'Signup' },\n invite: { value: 'invite', label: 'Invite' },\n sso: { value: 'sso', label: 'SSO' },\n api: { value: 'api', label: 'API' },\n} as const;\nexport type UserSourceTS = keyof typeof UserSources;\nexport type UserSourceOptionTS = typeof UserSources[UserSourceTS];\n\n/**\n * InviteStatus represents the status of an invitation\n */\nexport type InviteStatus = string;\nexport const InviteStatusPending: InviteStatus = \"pending\";\nexport const InviteStatusAccepted: InviteStatus = \"accepted\";\nexport const InviteStatusExpired: InviteStatus = \"expired\";\nexport const InviteStatusRevoked: InviteStatus = \"revoked\";\n\nexport const InviteStatuses = {\n pending: { value: 'pending', label: 'Pending' },\n accepted: { value: 'accepted', label: 'Accepted' },\n expired: { value: 'expired', label: 'Expired' },\n revoked: { value: 'revoked', label: 'Revoked' },\n} as const;\nexport type InviteStatusTS = keyof typeof InviteStatuses;\nexport type InviteStatusOptionTS = typeof InviteStatuses[InviteStatusTS];\n\n/**\n * Invite represents a team/org invitation\n */\nexport interface Invite {\n id?: string /* uuid */;\n orgId: string /* uuid */;\n email: string;\n role: string;\n invitedBy: string /* uuid */;\n status: InviteStatusTS;\n acceptedBy?: string /* uuid */;\n acceptedAt?: number /* int64 */;\n expiresAt?: number /* int64 */;\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n}\nexport interface InviteResponse {\n invite: Invite;\n metadata: ResponseMetadata;\n}\nexport interface ListInvitesResponse {\n invites: Invite[];\n metadata: ResponseMetadata;\n}\n/**\n * UserOnboarding tracks the onboarding progress for a user\n */\nexport interface UserOnboarding {\n status: OnboardingStatus;\n completedAt?: number /* int64 */;\n}\n/**\n * User represents a user in the system\n */\nexport interface User {\n id?: string /* uuid */;\n email: string;\n firstName: string;\n lastName: string;\n authProviderName: string;\n orgAccess?: UserOrgAccess[];\n /**\n * Status & Control\n */\n enabled?: boolean;\n /**\n * Source tracking\n */\n source?: UserSourceTS;\n invitedBy?: string /* uuid */;\n inviteStatus?: InviteStatusTS;\n /**\n * Team membership - LEGACY, DO NOT USE\n * These fields are deprecated and will be removed.\n * Use Org and OrgAccess patterns instead.\n */\n isTeamAdmin?: boolean;\n teamId?: string;\n teamName?: string;\n /**\n * System admin flag\n */\n isSysAdmin?: boolean;\n /**\n * Preferences\n */\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n /**\n * Onboarding tracking\n */\n onboarding?: UserOnboarding;\n /**\n * Flexible metadata\n */\n metadata?: { [key: string]: any};\n /**\n * Audit fields\n */\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n}\nexport interface UserResponse {\n user: User;\n metadata: ResponseMetadata;\n}\nexport interface ListUsersResponse {\n users: User[];\n metadata: ResponseMetadata;\n}\nexport interface Team {\n id?: string /* uuid */;\n name: string;\n isSubscribed: boolean;\n subscribedAt?: number /* int64 */;\n plan: string;\n ownerName?: string;\n ownerEmail?: string;\n subscriptionPlatform?: SubscriptionPlatform;\n subscriptionId?: string;\n onboardingDone?: boolean;\n onboardingData?: string;\n}\nexport type SubscriptionPlatform = string;\nexport const SubscriptionPlatformStripe: SubscriptionPlatform = \"stripe\";\nexport const SubscriptionPlatformCustom: SubscriptionPlatform = \"custom\";\nexport interface OrgRole {\n id?: string /* uuid */;\n orgId?: string /* uuid */;\n title: string;\n permissions: Permission[];\n isSystem: boolean;\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n}\n/**\n * org db - copied from sys db\n */\nexport interface Permission {\n /**\n * ID *primitive.ObjectID `bson:\"_id,omitempty\" json:\"id\"`\n */\n name: string;\n title: string;\n isSystem: boolean;\n}\nexport type SystemApp = string;\nexport const SystemAppAdmin: SystemApp = \"admin\";\nexport const SystemAppCRM: SystemApp = \"crm\";\nexport const SystemAppHelpdesk: SystemApp = \"helpdesk\";\nexport const SystemAppMarketing: SystemApp = \"marketing\";\nexport const SystemAppWorkflow: SystemApp = \"workflow\";\nexport const SystemAppAnalytics: SystemApp = \"analytics\";\nexport const SystemAppKnowledgeGraph: SystemApp = \"knowledge-graph\";\nexport const SystemAppDocumentProcessor: SystemApp = \"document-processor\";\n\nexport const SystemApps = {\n admin: { value: 'admin', label: 'Admin' },\n crm: { value: 'crm', label: 'CRM' },\n helpdesk: { value: 'helpdesk', label: 'Helpdesk' },\n marketing: { value: 'marketing', label: 'Marketing' },\n workflow: { value: 'workflow', label: 'Workflow' },\n analytics: { value: 'analytics', label: 'Analytics' },\n \"knowledge-graph\": { value: 'knowledge-graph', label: 'Knowledge Graph' },\n \"document-processor\": { value: 'document-processor', label: 'Document Processor' },\n} as const;\nexport type SystemAppTS = keyof typeof SystemApps;\nexport type SystemAppOptionTS = typeof SystemApps[SystemAppTS];\n\n/**\n * UpdateUserSettingsRequest is the request payload for updating user settings\n */\nexport interface UpdateUserSettingsRequest {\n id: string /* uuid */;\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n}\n/**\n * UserSettingsResponse is the response for settings operations\n */\nexport interface UserSettingsResponse {\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n metadata: ResponseMetadata;\n}\n/**\n * OnboardingStep represents a step in the onboarding flow\n */\nexport interface OnboardingStep {\n step: number /* int */;\n name: string;\n status: string; // pending, in_progress, completed, skipped\n required: boolean;\n}\n/**\n * OnboardingState represents the current state of a user's onboarding\n */\nexport interface OnboardingState {\n status: string; // pending, in_progress, completed\n currentStep: number /* int */;\n steps: OnboardingStep[];\n user?: User;\n org?: Org;\n}\n/**\n * OnboardingStateResponse is the response for onboarding status\n */\nexport interface OnboardingStateResponse {\n state: OnboardingState;\n metadata: ResponseMetadata;\n}\n/**\n * OrgInput contains the input for creating an organization\n */\nexport interface OrgInput {\n name: string;\n industry?: string;\n size: string;\n stripeSessionId?: string;\n}\n/**\n * OrgResult contains the result of organization creation\n */\nexport interface OrgResult {\n org?: Org;\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * WorkspaceInput is an alias for OrgInput (deprecated)\n */\nexport type WorkspaceInput = OrgInput;\n/**\n * WorkspaceResult is an alias for OrgResult (deprecated)\n */\nexport type WorkspaceResult = OrgResult;\n/**\n * InviteInput contains the input for sending invites\n */\nexport interface InviteInput {\n email: string;\n role: string;\n}\n/**\n * InvitesResult contains the result of sending invites\n */\nexport interface InvitesResult {\n sent: InviteSentStatus[];\n failed: string[];\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * InviteSentStatus represents status of a sent invite\n */\nexport interface InviteSentStatus {\n email: string;\n status: string;\n}\n/**\n * KnowledgeInput contains the input for creating knowledge graph\n */\nexport interface KnowledgeInput {\n name?: string;\n skipUpload: boolean;\n}\n/**\n * KnowledgeGraphInfo contains info about a knowledge graph\n */\nexport interface KnowledgeGraphInfo {\n id: string;\n name: string;\n status: string;\n documentCount: number /* int */;\n}\n/**\n * KnowledgeResult contains the result of knowledge graph creation\n */\nexport interface KnowledgeResult {\n knowledgeGraph: KnowledgeGraphInfo;\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * AgentInput contains the input for creating an agent\n */\nexport interface AgentInput {\n name: string;\n goal: string;\n personality: string; // professional, friendly, concise, custom\n skills?: string[]; // skill names to enable (e.g., \"web_search\", \"knowledge_graph\")\n}\n/**\n * AgentInfo contains info about an agent\n */\nexport interface AgentInfo {\n id: string;\n name: string;\n goal: string;\n personality: string;\n status: string;\n knowledgeGraphId?: string;\n}\n/**\n * AgentResult contains the result of agent creation\n */\nexport interface AgentResult {\n agent: AgentInfo;\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * OnboardingCompleteResult contains the result of completing onboarding\n */\nexport interface OnboardingCompleteResult {\n status: string;\n completedAt: number /* int64 */;\n org?: Org;\n redirectUrl: string;\n metadata: ResponseMetadata;\n}\n/**\n * PaymentSessionInput contains input for creating a payment session\n */\nexport interface PaymentSessionInput {\n plan: string; // pro, max\n billingCycle: string; // monthly, annual\n seats: number /* int */;\n successUrl: string;\n cancelUrl: string;\n affiliateCode?: string; // Referral code for affiliate tracking\n}\n/**\n * PaymentSessionResult contains the result of creating a payment session\n */\nexport interface PaymentSessionResult {\n url: string;\n sessionId: string;\n customerId: string;\n metadata: ResponseMetadata;\n}\n/**\n * OnboardingPlanInput contains subscription plan selection for provisioning\n */\nexport interface OnboardingPlanInput {\n plan: string; // \"pro\" | \"max\"\n billingCycle: string; // \"monthly\" | \"annual\"\n seats: number /* int */;\n stripeSessionId?: string; // From completed Stripe checkout\n}\n/**\n * OnboardingOrgInput contains organization data for provisioning\n * Aligned with SeedOrgRequest structure\n */\nexport interface OnboardingOrgInput {\n title: string; // Org display name (e.g., \"Acme Corp\")\n mainDomain: string; // Unique domain slug (e.g., \"acme-corp\")\n product?: OrgProduct; // Product identifier (eloquent, shop-assist, etc.)\n industry?: string;\n size?: string; // \"1-10\", \"11-50\", etc.\n}\n/**\n * OnboardingDocumentInput contains a document to be ingested during onboarding\n */\nexport interface OnboardingDocumentInput {\n title: string; // Document display name\n fileUrl: string; // Azure blob URL (uploaded during KB step)\n}\n/**\n * OnboardingKnowledgeInput contains knowledge base configuration with optional documents\n */\nexport interface OnboardingKnowledgeInput {\n name: string; // Knowledge base name\n documents?: OnboardingDocumentInput[]; // Documents to ingest\n}\n/**\n * OnboardingProvisionRequest contains all data collected during onboarding\n * to create org and provision all resources in one request\n */\nexport interface OnboardingProvisionRequest {\n plan: OnboardingPlanInput;\n org: OnboardingOrgInput;\n invites?: InviteInput[];\n knowledge: OnboardingKnowledgeInput;\n agent: AgentInput;\n}\n/**\n * OnboardingProvisionResponse is returned after starting provisioning\n */\nexport interface OnboardingProvisionResponse {\n orgId: string;\n userId: string;\n status: string; // \"provisioning\"\n metadata: ResponseMetadata;\n}\n/**\n * CreateOrgRequest is the request payload for creating an organization with provisioning\n */\nexport interface CreateOrgRequest {\n title: string;\n mainDomain: string;\n product: OrgProductTS;\n type?: OrgTypeTS;\n size?: OrgSizeTS;\n industry?: string;\n logoUrl?: string;\n address?: Address;\n subscription?: OrgSubscription;\n provisioningOptions?: OrgProvisioningOptions;\n metadata?: { [key: string]: any};\n}\n/**\n * CreateOrgResponse is the response for org creation with provisioning\n */\nexport interface CreateOrgResponse {\n org: Org;\n metadata: ResponseMetadata;\n}\n/**\n * RetryProvisioningRequest is the request for retrying failed artifacts\n */\nexport interface RetryProvisioningRequest {\n artifacts?: OrgArtifactTypeTS[];\n}\n/**\n * RetryProvisioningResponse is the response for retry operation\n */\nexport interface RetryProvisioningResponse {\n metadata: ResponseMetadata;\n}\n/**\n * OrgSchemaType represents a database schema type for bare schema provisioning.\n * Unlike OrgArtifactType, this only creates empty org_<uuid> schemas.\n */\nexport type OrgSchemaType = string;\nexport const SchemaTypeEntities: OrgSchemaType = \"entities\";\nexport const SchemaTypeAgents: OrgSchemaType = \"agents\";\nexport const SchemaTypeOrgConfig: OrgSchemaType = \"org-config\";\n\nexport const OrgSchemaTypes = {\n entities: { value: 'entities', label: 'Entities Database' },\n agents: { value: 'agents', label: 'Agents Database' },\n \"org-config\": { value: 'org-config', label: 'Org Config Database' },\n} as const;\nexport type OrgSchemaTypeTS = keyof typeof OrgSchemaTypes;\n\n/**\n * CreateOrgWithSchemasRequest creates an org with bare database schemas\n */\nexport interface CreateOrgWithSchemasRequest {\n org: Org;\n schemas: OrgSchemaTypeTS[];\n}\n/**\n * CreateOrgWithSchemasResponse contains the result of creating an org with schemas\n */\nexport interface CreateOrgWithSchemasResponse {\n success: boolean;\n org: Org;\n createdSchemas: OrgSchemaTypeTS[];\n failedSchemas?: OrgSchemaTypeTS[];\n errors?: { [key: string]: string};\n}\n\n//////////\n// source: admin-subjects.go\n\nexport const AdminOrgCreate = \"admin.orgs.create\";\nexport const AdminOrgList = \"admin.orgs.list\";\nexport const AdminOrgListByMetadata = \"admin.orgs.listByMetadata\";\nexport const AdminOrgGet = \"admin.orgs.get\";\nexport const AdminOrgGetInfo = \"admin.orgs.getInfo\";\nexport const AdminOrgGetByDomain = \"admin.orgs.getByDomain\";\nexport const AdminOrgUpdate = \"admin.orgs.update\";\nexport const AdminOrgDelete = \"admin.orgs.delete\";\nexport const AdminOrgCreated = \"system.admin.org.created\";\nexport const AdminOrgRolesGet = \"admin.orgRoles.get\";\nexport const AdminOrgRolesCreate = \"admin.orgRoles.create\";\nexport const AdminOrgRolesUpdate = \"admin.orgRoles.update\";\nexport const AdminOrgRolesDelete = \"admin.orgRoles.delete\";\nexport const AdminUsersGet = \"admin.users.get\";\nexport const AdminUsersGetForOrg = \"admin.users.getUsersForOrg\";\nexport const AdminUsersGetOne = \"admin.users.getOne\";\nexport const AdminUsersGetOneByEmail = \"admin.users.getOneByEmail\";\nexport const AdminUsersGetOneByPhone = \"admin.users.getOneByPhone\";\nexport const AdminUsersCreate = \"admin.users.create\";\nexport const AdminUsersUpdate = \"admin.users.update\";\nexport const AdminUsersDelete = \"admin.users.delete\";\nexport const AdminUsersUpdateSettings = \"admin.users.updateSettings\";\nexport const AdminUsersGetSettings = \"admin.users.getSettings\";\nexport const AdminTeamsCreate = \"admin.teams.create\";\nexport const AdminTeamsGetOne = \"admin.teams.getOne\";\nexport const AdminTeamsGetForOrg = \"admin.teams.getTeamsForOrg\";\nexport const AdminTeamsUpdateOnboarding = \"admin.teams.updateOnboardingData\";\n","// Billing types - MANUALLY MAINTAINED\n// Originally generated by tygo, but Go source files were removed.\n// These types are now manually maintained in TypeScript.\n// Migrated from @elqnt/types/models/billing-models.ts to @elqnt/admin\nimport { ResponseMetadata } from \"@elqnt/types\";\n\n//////////\n// source: billing-models.go\n\n/**\n * Billing event handlers\n */\nexport const BillingRecordEvent = \"billing.events.record\";\n/**\n * NATS Subject constants\n */\nexport const BillingGetUsageReport = \"billing.usage.report\";\n/**\n * NATS Subject constants\n */\nexport const BillingGetInvoice = \"billing.invoice.get\";\n/**\n * NATS Subject constants\n */\nexport const BillingProcessBillingPeriod = \"billing.period.process\";\n/**\n * Usage handlers\n */\nexport const UsageGetCurrentUsage = \"billing.usage.current\";\n/**\n * NATS Subject constants\n */\nexport const UsageGetUsageHistory = \"billing.usage.history\";\n/**\n * NATS Subject constants\n */\nexport const UsageGetCostBreakdown = \"billing.usage.breakdown\";\n/**\n * NATS Subject constants\n */\nexport const UsageGetTopCostCenters = \"billing.usage.top_centers\";\n/**\n * Rules handlers\n */\nexport const RulesGetBillingRules = \"billing.rules.get\";\n/**\n * NATS Subject constants\n */\nexport const RulesCreateBillingRule = \"billing.rules.create\";\n/**\n * NATS Subject constants\n */\nexport const RulesUpdateBillingRule = \"billing.rules.update\";\n/**\n * NATS Subject constants\n */\nexport const RulesDeleteBillingRule = \"billing.rules.delete\";\nexport interface BillingEvent {\n /**\n * Core identifiers\n */\n org_id: string;\n event_id: string;\n user_id: string;\n customer_id: string;\n /**\n * Event details\n */\n event_type: string;\n event_subtype: string;\n timestamp: string /* RFC3339 */;\n /**\n * Billing metrics\n */\n billable_units: number /* int */;\n unit_type: string;\n cost_per_unit: number /* float64 */;\n total_cost: number /* float64 */;\n /**\n * Context\n */\n service_name: string;\n session_id: string;\n parent_event_id: string;\n /**\n * Resource consumption\n */\n input_tokens: number /* int */;\n output_tokens: number /* int */;\n processing_time_ms: number /* int */;\n /**\n * Product context\n */\n product_tier: string;\n feature_name: string;\n plan_id: string;\n /**\n * Metadata\n */\n metadata: { [key: string]: any};\n created_by: string;\n}\nexport interface UsageReport {\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n total_cost: number /* float64 */;\n currency: string;\n service_breakdowns: ServiceUsage[];\n generated_at: string /* RFC3339 */;\n}\nexport interface ServiceUsage {\n service_name: string;\n event_type: string;\n unit_type: string;\n total_units: number /* int64 */;\n total_cost: number /* float64 */;\n total_events: number /* int32 */;\n unique_users: number /* int32 */;\n unique_sessions: number /* int32 */;\n total_input_tokens: number /* int64 */;\n total_output_tokens: number /* int64 */;\n total_processing_time: number /* int64 */;\n}\nexport interface BillingRule {\n rule_id: string;\n org_id: string;\n service_name: string;\n event_type: string;\n unit_type: string;\n /**\n * Tiered pricing\n */\n base_cost: number /* float64 */;\n tier_1_threshold: number /* int */;\n tier_1_cost: number /* float64 */;\n tier_2_threshold: number /* int */;\n tier_2_cost: number /* float64 */;\n tier_3_threshold: number /* int */;\n tier_3_cost: number /* float64 */;\n /**\n * Validity\n */\n effective_from: string /* RFC3339 */;\n effective_to: string /* RFC3339 */;\n is_active: boolean;\n created_at: string /* RFC3339 */;\n updated_at: string /* RFC3339 */;\n}\nexport interface BillingPeriod {\n period_id: string;\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n status: string; // 'active', 'closed', 'processing'\n billing_cycle: string; // 'monthly', 'annual', 'usage'\n created_at: string /* RFC3339 */;\n}\nexport interface Invoice {\n invoice_id: string;\n org_id: string;\n period_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n line_items: InvoiceLineItem[];\n subtotal_amount: number /* float64 */;\n tax_amount: number /* float64 */;\n total_amount: number /* float64 */;\n currency: string;\n status: string; // 'draft', 'sent', 'paid', 'failed'\n generated_at: string /* RFC3339 */;\n due_date: string /* RFC3339 */;\n payment_method_id: string;\n}\nexport interface InvoiceLineItem {\n line_item_id: string;\n service_name: string;\n event_type: string;\n unit_type: string;\n description: string;\n quantity: number /* int64 */;\n unit_price: number /* float64 */;\n total_price: number /* float64 */;\n}\nexport interface BillingEventRequest {\n BillingEvent: BillingEvent;\n}\nexport interface BillingEventResponse {\n success: boolean;\n error?: string;\n}\nexport interface UsageReportRequest {\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n}\nexport interface UsageReportResponse {\n success: boolean;\n data?: UsageReport;\n error?: string;\n}\nexport interface CurrentUsageRequest {\n org_id: string;\n service_name: string;\n event_type: string;\n}\nexport interface CurrentUsageResponse {\n success: boolean;\n data?: { [key: string]: any};\n error?: string;\n}\nexport interface CostBreakdownRequest {\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n group_by: string; // 'service', 'user', 'day', 'hour'\n}\nexport interface CostBreakdownResponse {\n success: boolean;\n data?: CostBreakdown[];\n error?: string;\n}\nexport interface CostBreakdown {\n group_value: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n}\nexport interface BillingRuleRequest {\n BillingRule: BillingRule;\n}\nexport interface BillingRuleResponse {\n success: boolean;\n data?: BillingRule;\n error?: string;\n}\nexport interface BillingRulesRequest {\n org_id: string;\n service_name: string;\n event_type: string;\n}\nexport interface BillingRulesResponse {\n success: boolean;\n data?: (BillingRule | undefined)[];\n error?: string;\n}\nexport interface InvoiceRequest {\n org_id: string;\n period_id: string;\n invoice_id: string;\n}\nexport interface InvoiceResponse {\n success: boolean;\n data?: Invoice;\n error?: string;\n}\nexport interface BillingPeriodProcessRequest {\n org_id: string;\n period_id: string;\n}\nexport interface BillingPeriodProcessResponse {\n success: boolean;\n invoice_id?: string;\n error?: string;\n}\nexport interface UsageAggregation {\n org_id: string;\n period_id: string;\n date: string;\n hour: number /* int */;\n service_name: string;\n event_type: string;\n unit_type: string;\n total_units: number /* int64 */;\n total_events: number /* int32 */;\n total_cost: number /* float64 */;\n unique_users: number /* int32 */;\n unique_sessions: number /* int32 */;\n total_input_tokens: number /* int64 */;\n total_output_tokens: number /* int64 */;\n total_processing_time: number /* int64 */;\n created_at: string /* RFC3339 */;\n}\nexport interface TopCostCenter {\n service_name: string;\n event_type: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n percentage: number /* float64 */;\n}\nexport interface UsageHistory {\n date: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n unique_users: number /* int32 */;\n}\nexport interface UserUsage {\n user_id: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n last_activity: string /* RFC3339 */;\n}\n/**\n * Usage trends and analytics models\n */\nexport interface UsageTrends {\n org_id: string;\n days: number /* int */;\n trend: string; // \"increasing\", \"decreasing\", \"stable\"\n direction: string; // \"up\", \"down\", \"flat\"\n change_percent: number /* float64 */;\n recent_week_cost: number /* float64 */;\n previous_week_cost: number /* float64 */;\n}\nexport interface UsageAlert {\n type: string; // \"cost_spike\", \"volume_spike\", etc.\n severity: string; // \"low\", \"medium\", \"high\"\n message: string;\n current_value: number /* float64 */;\n threshold_value: number /* float64 */;\n created_at: string /* RFC3339 */;\n}\n/**\n * Cost preview models\n */\nexport interface CostPreview {\n units: number /* int */;\n total_cost: number /* float64 */;\n cost_per_unit: number /* float64 */;\n tier_breakdown: TierCost[];\n rule?: BillingRule;\n}\nexport interface TierCost {\n tier: string;\n units: number /* int */;\n rate: number /* float64 */;\n cost: number /* float64 */;\n}\n/**\n * Rule coverage models\n */\nexport interface RuleCoverage {\n org_id: string;\n total_services: number /* int */;\n covered_services: { [key: string]: boolean};\n missing_rules: string[];\n rule_count: number /* int */;\n coverage_percentage: number /* float64 */;\n}\n/**\n * Generic Response\n */\nexport interface BillingResponse {\n success: boolean;\n data?: any;\n error?: string;\n}\n\n//////////\n// source: stripe-models.go\n\n/**\n * Subscription management\n */\nexport const SubscriptionCreate = \"billing.subscription.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionGet = \"billing.subscription.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionUpdate = \"billing.subscription.update\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionCancel = \"billing.subscription.cancel\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionList = \"billing.subscription.list\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionCheckout = \"billing.subscription.checkout\";\n/**\n * Payment links\n */\nexport const PaymentLinkCreate = \"billing.payment-link.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const PaymentLinkList = \"billing.payment-link.list\";\n/**\n * Customer portal\n */\nexport const PortalSessionCreate = \"billing.portal.create\";\n/**\n * Customer management\n */\nexport const CustomerCreate = \"billing.customer.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CustomerGet = \"billing.customer.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CustomerUpdate = \"billing.customer.update\";\n/**\n * Credits\n */\nexport const CreditsBalance = \"billing.credits.balance\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CreditsPurchase = \"billing.credits.purchase\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CreditsConsume = \"billing.credits.consume\";\n/**\n * Plans\n */\nexport const PlansGet = \"billing.plans.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const PlansGetAll = \"billing.plans.list\";\n/**\n * Usage alerts\n */\nexport const UsageAlertThreshold = \"billing.usage.alert\";\n/**\n * Webhooks (internal events)\n */\nexport const WebhookSubscriptionCreated = \"billing.webhook.subscription.created\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookSubscriptionUpdated = \"billing.webhook.subscription.updated\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookSubscriptionCanceled = \"billing.webhook.subscription.canceled\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookInvoicePaid = \"billing.webhook.invoice.paid\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookInvoiceFailed = \"billing.webhook.invoice.failed\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookPaymentSucceeded = \"billing.webhook.payment.succeeded\";\n/**\n * Affiliates\n */\nexport const AffiliateCreate = \"billing.affiliate.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateGet = \"billing.affiliate.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateList = \"billing.affiliate.list\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateUpdate = \"billing.affiliate.update\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateOnboard = \"billing.affiliate.onboard\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateCommissions = \"billing.affiliate.commissions\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateAnalytics = \"billing.affiliate.analytics\";\n/**\n * Analytics\n */\nexport const AnalyticsRevenue = \"billing.analytics.revenue\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AnalyticsUsage = \"billing.analytics.usage\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AnalyticsChurn = \"billing.analytics.churn\";\n/**\n * Plan represents a subscription plan\n */\nexport interface Plan {\n id: string;\n stripeProductId?: string;\n stripePriceId?: string;\n name: string;\n tier: string;\n priceCents: number /* int64 */;\n currency: string;\n billingInterval: string;\n chatSessionsLimit: number /* int */;\n tokenAllowance: number /* int64 */;\n agentsLimit: number /* int */;\n usersLimit: number /* int */;\n knowledgeGraphMb: number /* int */;\n tokenOverageRateCents: number /* int */;\n sessionOverageRateCents: number /* int */;\n features: { [key: string]: any};\n isActive: boolean;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * OrganizationBilling represents an organization's billing info\n */\nexport interface OrganizationBilling {\n orgId: string;\n stripeCustomerId?: string;\n stripeSubscriptionId?: string;\n planId?: string;\n plan?: Plan;\n status: string;\n currentPeriodStart?: string /* RFC3339 */;\n currentPeriodEnd?: string /* RFC3339 */;\n trialStart?: string /* RFC3339 */;\n trialEnd?: string /* RFC3339 */;\n billingEmail?: string;\n billingName?: string;\n affiliateCode?: string;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * CreditBalance represents a credit balance entry\n */\nexport interface CreditBalance {\n id: string;\n orgId: string;\n creditType: string;\n amount: number /* int64 */;\n remaining: number /* int64 */;\n description?: string;\n expiresAt?: string /* RFC3339 */;\n stripePaymentId?: string;\n createdAt: string /* RFC3339 */;\n}\n/**\n * CreditPackage represents a purchasable credit package\n */\nexport interface CreditPackage {\n id: string;\n stripeProductId?: string;\n stripePriceId?: string;\n name: string;\n tokens: number /* int64 */;\n priceCents: number /* int64 */;\n currency: string;\n bonusTokens: number /* int64 */;\n isActive: boolean;\n createdAt: string /* RFC3339 */;\n}\n/**\n * UsagePeriod represents usage within a billing period\n */\nexport interface UsagePeriod {\n id: string;\n orgId: string;\n periodStart: string /* RFC3339 */;\n periodEnd: string /* RFC3339 */;\n tokensUsed: number /* int64 */;\n sessionsUsed: number /* int */;\n tokensAllowance: number /* int64 */;\n sessionsAllowance: number /* int */;\n tokensOverage: number /* int64 */;\n sessionsOverage: number /* int */;\n overageChargedCents: number /* int64 */;\n status: string;\n stripeUsageRecordId?: string;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * UsageSummary provides a summary of current usage\n */\nexport interface UsageSummary {\n orgId: string;\n planTier: string;\n billingPeriodStart: string /* RFC3339 */;\n billingPeriodEnd: string /* RFC3339 */;\n daysRemaining: number /* int */;\n /**\n * Token usage\n */\n tokensUsed: number /* int64 */;\n tokensAllowance: number /* int64 */;\n tokensPercentage: number /* float64 */;\n tokensRemaining: number /* int64 */;\n /**\n * Session usage\n */\n sessionsUsed: number /* int */;\n sessionsAllowance: number /* int */;\n sessionsPercentage: number /* float64 */;\n sessionsRemaining: number /* int */;\n /**\n * Credits\n */\n creditsRemaining: number /* int64 */;\n /**\n * Projected overage\n */\n projectedTokenOverage: number /* int64 */;\n projectedSessionOverage: number /* int */;\n projectedOverageCents: number /* int64 */;\n}\n/**\n * Affiliate represents an affiliate partner\n */\nexport interface Affiliate {\n id: string;\n name: string;\n email: string;\n stripeAccountId?: string;\n status: string;\n commissionRate: number /* float64 */;\n commissionType: string;\n referralCode: string;\n referralLink: string;\n totalEarningsCents: number /* int64 */;\n pendingPayoutCents: number /* int64 */;\n onboardingCompleted: boolean;\n onboardingCompletedAt?: string /* RFC3339 */;\n country?: string;\n phone?: string;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * AffiliateReferral represents a customer referred by an affiliate\n */\nexport interface AffiliateReferral {\n id: string;\n affiliateId: string;\n customerOrgId: string;\n stripeCustomerId?: string;\n status: string;\n firstPurchaseAt?: string /* RFC3339 */;\n totalRevenueCents: number /* int64 */;\n totalCommissionCents: number /* int64 */;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * AffiliateCommission represents a commission payment to an affiliate\n */\nexport interface AffiliateCommission {\n id: string;\n affiliateId: string;\n referralId: string;\n stripePaymentId?: string;\n stripeTransferId?: string;\n stripeInvoiceId?: string;\n grossAmountCents: number /* int64 */;\n commissionAmountCents: number /* int64 */;\n commissionRate: number /* float64 */;\n currency: string;\n status: string;\n createdAt: string /* RFC3339 */;\n paidAt?: string /* RFC3339 */;\n}\n/**\n * Payment represents a payment record\n */\nexport interface Payment {\n id: string;\n orgId: string;\n stripePaymentIntentId?: string;\n stripeInvoiceId?: string;\n stripeSubscriptionId?: string;\n amountCents: number /* int64 */;\n currency: string;\n status: string;\n paymentType: string;\n customerEmail?: string;\n paymentMethod?: string;\n description?: string;\n metadata?: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * CreatePaymentLinkRequest is the request to create a payment link\n */\nexport interface CreatePaymentLinkRequest {\n orgId: string;\n priceId: string;\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n affiliateCode?: string;\n quantity?: number /* int64 */;\n metadata?: { [key: string]: string};\n}\n/**\n * CreatePaymentLinkResponse is the response from creating a payment link\n */\nexport interface CreatePaymentLinkResponse {\n success: boolean;\n url?: string;\n paymentLinkId?: string;\n error?: string;\n}\n/**\n * CreatePortalSessionRequest is the request to create a billing portal session\n */\nexport interface CreatePortalSessionRequest {\n orgId: string;\n returnUrl: string;\n}\n/**\n * CreatePortalSessionResponse is the response from creating a portal session\n */\nexport interface CreatePortalSessionResponse {\n success: boolean;\n url?: string;\n error?: string;\n}\n/**\n * CreateCheckoutSessionRequest is the request to create a checkout session\n */\nexport interface CreateCheckoutSessionRequest {\n orgId: string;\n priceId: string;\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n affiliateCode?: string;\n trialDays?: number /* int64 */;\n metadata?: { [key: string]: string};\n}\n/**\n * CreateCheckoutSessionResponse is the response from creating a checkout session\n */\nexport interface CreateCheckoutSessionResponse {\n success: boolean;\n sessionId?: string;\n url?: string;\n error?: string;\n}\n/**\n * GetSubscriptionRequest is the request to get subscription info\n */\nexport interface GetSubscriptionRequest {\n orgId: string;\n}\n/**\n * GetSubscriptionResponse is the response with subscription info\n */\nexport interface GetSubscriptionResponse {\n success: boolean;\n subscription?: OrganizationBilling;\n usage?: UsageSummary;\n error?: string;\n}\n/**\n * CancelSubscriptionRequest is the request to cancel a subscription\n */\nexport interface CancelSubscriptionRequest {\n orgId: string;\n cancelAtEnd: boolean;\n reason?: string;\n}\n/**\n * CancelSubscriptionResponse is the response from canceling a subscription\n */\nexport interface CancelSubscriptionResponse {\n success: boolean;\n cancelAt?: string /* RFC3339 */;\n error?: string;\n}\n/**\n * GetCreditsRequest is the request to get credit balance\n */\nexport interface GetCreditsRequest {\n orgId: string;\n}\n/**\n * GetCreditsResponse is the response with credit balance\n */\nexport interface GetCreditsResponse {\n success: boolean;\n totalRemaining: number /* int64 */;\n balances?: (CreditBalance | undefined)[];\n error?: string;\n}\n/**\n * PurchaseCreditsRequest is the request to purchase credits\n */\nexport interface PurchaseCreditsRequest {\n orgId: string;\n packageId: string;\n successUrl: string;\n cancelUrl: string;\n}\n/**\n * PurchaseCreditsResponse is the response from purchasing credits\n */\nexport interface PurchaseCreditsResponse {\n success: boolean;\n sessionId?: string;\n url?: string;\n error?: string;\n}\n/**\n * ConsumeCreditsRequest is the request to consume credits\n */\nexport interface ConsumeCreditsRequest {\n orgId: string;\n amount: number /* int64 */;\n reason?: string;\n}\n/**\n * ConsumeCreditsResponse is the response from consuming credits\n */\nexport interface ConsumeCreditsResponse {\n success: boolean;\n consumed: number /* int64 */;\n remaining: number /* int64 */;\n error?: string;\n}\n/**\n * GetPlansRequest is the request to get available plans\n */\nexport interface GetPlansRequest {\n activeOnly: boolean;\n}\n/**\n * GetPlansResponse is the response with available plans\n */\nexport interface GetPlansResponse {\n success: boolean;\n plans?: (Plan | undefined)[];\n error?: string;\n}\n/**\n * CreateAffiliateRequest is the request to create an affiliate\n */\nexport interface CreateAffiliateRequest {\n name: string;\n email: string;\n country: string;\n commissionRate?: number /* float64 */;\n phone?: string;\n}\n/**\n * CreateAffiliateResponse is the response from creating an affiliate\n */\nexport interface CreateAffiliateResponse {\n success: boolean;\n affiliate?: Affiliate;\n error?: string;\n}\n/**\n * GetAffiliateRequest is the request to get an affiliate\n */\nexport interface GetAffiliateRequest {\n affiliateId?: string;\n referralCode?: string;\n}\n/**\n * GetAffiliateResponse is the response with affiliate info\n */\nexport interface GetAffiliateResponse {\n success: boolean;\n affiliate?: Affiliate;\n error?: string;\n}\n/**\n * ListAffiliatesRequest is the request to list affiliates\n */\nexport interface ListAffiliatesRequest {\n status?: string;\n page?: number /* int */;\n pageSize?: number /* int */;\n}\n/**\n * ListAffiliatesResponse is the response with affiliate list\n */\nexport interface ListAffiliatesResponse {\n success: boolean;\n affiliates?: (Affiliate | undefined)[];\n total: number /* int */;\n page: number /* int */;\n pageSize: number /* int */;\n error?: string;\n}\n/**\n * CreateAffiliateOnboardingLinkRequest is the request to create an onboarding link\n */\nexport interface CreateAffiliateOnboardingLinkRequest {\n affiliateId: string;\n refreshUrl: string;\n returnUrl: string;\n}\n/**\n * CreateAffiliateOnboardingLinkResponse is the response with onboarding link\n */\nexport interface CreateAffiliateOnboardingLinkResponse {\n success: boolean;\n url?: string;\n error?: string;\n}\n/**\n * GetAffiliateCommissionsRequest is the request to get affiliate commissions\n */\nexport interface GetAffiliateCommissionsRequest {\n affiliateId: string;\n startDate?: string /* RFC3339 */;\n endDate?: string /* RFC3339 */;\n status?: string;\n page?: number /* int */;\n pageSize?: number /* int */;\n}\n/**\n * GetAffiliateCommissionsResponse is the response with affiliate commissions\n */\nexport interface GetAffiliateCommissionsResponse {\n success: boolean;\n commissions?: (AffiliateCommission | undefined)[];\n total: number /* int */;\n totalAmount: number /* int64 */;\n page: number /* int */;\n pageSize: number /* int */;\n error?: string;\n}\n/**\n * GetAffiliateAnalyticsRequest is the request to get affiliate analytics\n */\nexport interface GetAffiliateAnalyticsRequest {\n affiliateId: string;\n period?: string; // 'day', 'week', 'month', 'year'\n startDate?: string /* RFC3339 */;\n endDate?: string /* RFC3339 */;\n}\n/**\n * AffiliateAnalytics represents affiliate analytics data\n */\nexport interface AffiliateAnalytics {\n affiliateId: string;\n period: string;\n totalReferrals: number /* int */;\n activeReferrals: number /* int */;\n churnedReferrals: number /* int */;\n totalRevenueCents: number /* int64 */;\n totalCommissionsCents: number /* int64 */;\n conversionRate: number /* float64 */;\n avgCustomerLtvCents: number /* int64 */;\n}\n/**\n * GetAffiliateAnalyticsResponse is the response with affiliate analytics\n */\nexport interface GetAffiliateAnalyticsResponse {\n success: boolean;\n analytics?: AffiliateAnalytics;\n error?: string;\n}\n/**\n * RevenueAnalyticsRequest is the request to get revenue analytics\n */\nexport interface RevenueAnalyticsRequest {\n period?: string; // 'day', 'week', 'month', 'year'\n startDate?: string /* RFC3339 */;\n endDate?: string /* RFC3339 */;\n}\n/**\n * RevenueAnalytics represents revenue analytics data\n */\nexport interface RevenueAnalytics {\n period: string;\n mrrCents: number /* int64 */;\n arrCents: number /* int64 */;\n newMrrCents: number /* int64 */;\n churnedMrrCents: number /* int64 */;\n expansionMrrCents: number /* int64 */;\n contractionMrrCents: number /* int64 */;\n netMrrCents: number /* int64 */;\n totalCustomers: number /* int */;\n newCustomers: number /* int */;\n churnedCustomers: number /* int */;\n churnRate: number /* float64 */;\n}\n/**\n * RevenueAnalyticsResponse is the response with revenue analytics\n */\nexport interface RevenueAnalyticsResponse {\n success: boolean;\n analytics?: RevenueAnalytics;\n error?: string;\n}\n/**\n * Webhook event types\n */\nexport interface StripeWebhookEvent {\n type: string;\n data: { [key: string]: any};\n eventId: string;\n createdAt: string /* RFC3339 */;\n}\n\n//////////\n// source: subjects.go\n\n/**\n * Base subject prefix\n */\nexport const BillingSubjectPrefix = \"billing\";\n/**\n * Event recording subjects\n */\nexport const BillingEventsRecord = \"billing.events.record\";\n/**\n * Usage reporting subjects\n */\nexport const BillingUsageReport = \"billing.usage.report\";\nexport const BillingUsageCurrent = \"billing.usage.current\";\nexport const BillingUsageHistory = \"billing.usage.history\";\nexport const BillingUsageCostBreakdown = \"billing.usage.breakdown\";\nexport const BillingUsageTopCenters = \"billing.usage.top_centers\";\n/**\n * Invoice subjects\n */\nexport const BillingInvoiceGet = \"billing.invoice.get\";\nexport const BillingInvoiceCreate = \"billing.invoice.create\";\nexport const BillingInvoiceProcess = \"billing.invoice.process\";\n/**\n * Billing period subjects\n */\nexport const BillingPeriodCreate = \"billing.period.create\";\nexport const BillingPeriodClose = \"billing.period.close\";\nexport const BillingPeriodProcess = \"billing.period.process\";\n/**\n * Billing rules subjects\n */\nexport const BillingRulesGet = \"billing.rules.get\";\nexport const BillingRulesCreate = \"billing.rules.create\";\nexport const BillingRulesUpdate = \"billing.rules.update\";\nexport const BillingRulesDelete = \"billing.rules.delete\";\n/**\n * Organization provisioning\n */\nexport const BillingOrgProvision = \"billing.org.provision\";\n/**\n * Health check\n */\nexport const BillingHealthCheck = \"billing.health.check\";\n","/**\n * Admin API functions\n *\n * Browser-side API client for admin operations (onboarding, org-settings, billing).\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest, clearGatewayTokenCache } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\n\n// Re-export utility function\nexport { clearGatewayTokenCache };\nimport type { ResponseMetadata } from \"@elqnt/types\";\nimport type {\n OnboardingState,\n OnboardingResponse,\n CreateOrgResponse,\n SendInvitesResponse,\n CreateKnowledgeResponse,\n CreateAgentResponse,\n CompleteOnboardingResponse,\n PaymentSessionResponse,\n OrgSettings,\n OrgSettingsResponse,\n PlansResponse,\n SubscriptionResponse,\n CreditsResponse,\n CreateCheckoutResponse,\n PortalSessionResponse,\n ProvisionAgentsResponse,\n ProvisionEntitiesResponse,\n ProvisionWorkflowsResponse,\n} from \"../models\";\n\n// =============================================================================\n// ONBOARDING API OPTIONS\n// =============================================================================\n\n/**\n * Onboarding API options - orgId is optional since user may not have org yet\n */\nexport interface OnboardingApiOptions {\n baseUrl: string;\n orgId?: string;\n userId?: string;\n userEmail?: string;\n headers?: Record<string, string>;\n}\n\n// =============================================================================\n// ONBOARDING API\n// =============================================================================\n\nexport async function getOnboardingStatusApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<OnboardingResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/status\", {\n method: \"GET\",\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function startOnboardingApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<OnboardingResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/start\", {\n method: \"POST\",\n body: {},\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createPaymentSessionApi(\n params: { plan: string; billingCycle: string; seats: number; successUrl: string; cancelUrl: string },\n options: OnboardingApiOptions\n): Promise<ApiResponse<PaymentSessionResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/payment\", {\n method: \"POST\",\n body: params,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createOrganizationApi(\n org: { name: string; industry?: string; size?: string; stripeSessionId?: string },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateOrgResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/organization\", {\n method: \"POST\",\n body: org,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function sendOnboardingInvitesApi(\n invites: Array<{ email: string; role?: string }>,\n options: OnboardingApiOptions\n): Promise<ApiResponse<SendInvitesResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/invites\", {\n method: \"POST\",\n body: { invites },\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createOnboardingKnowledgeApi(\n knowledge: { name: string; description?: string; websites?: string[] },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateKnowledgeResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/knowledge\", {\n method: \"POST\",\n body: knowledge,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createOnboardingAgentApi(\n agent: { name: string; description?: string; goal?: string },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateAgentResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/agent\", {\n method: \"POST\",\n body: agent,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createAgentWithSkillsApi(\n payload: { agent: Record<string, unknown>; skills: Record<string, unknown>[]; enabledSkillNames: string[] },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateAgentResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/agent-with-skills\", {\n method: \"POST\",\n body: payload,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function completeOnboardingApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<CompleteOnboardingResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/complete\", {\n method: \"POST\",\n body: {},\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function skipOnboardingStepApi(\n step: string,\n options: OnboardingApiOptions\n): Promise<ApiResponse<{ nextStep: string; metadata: ResponseMetadata }>> {\n return browserApiRequest(\"/api/v1/onboarding/skip-step\", {\n method: \"POST\",\n body: { step },\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport interface StartProvisioningResponse {\n orgId: string;\n status: string;\n metadata?: ResponseMetadata;\n}\n\n/**\n * Start provisioning for an onboarding org.\n * Returns the org ID so the frontend can connect to the SSE stream for progress.\n */\nexport async function startOnboardingProvisioningApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<StartProvisioningResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/provisioning/start\", {\n method: \"POST\",\n body: {},\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\n/**\n * Request body for unified onboarding provisioning\n */\nexport interface ProvisionAllRequest {\n plan: {\n plan: string;\n billingCycle: string;\n seats: number;\n stripeSessionId?: string;\n inviteCode?: string; // If present, this is a free trial (skipped payment)\n };\n org: {\n title: string;\n mainDomain: string;\n product?: string; // Product identifier (eloquent, shop-assist, etc.) - defaults to \"eloquent\"\n industry?: string;\n size?: string;\n };\n invites?: Array<{\n email: string;\n role: string;\n }>;\n knowledge: {\n name: string;\n documents?: Array<{\n title: string;\n fileUrl: string;\n }>;\n };\n agent: {\n name: string;\n goal: string;\n personality: string;\n skills?: string[];\n };\n}\n\n/**\n * Response from unified onboarding provisioning\n */\nexport interface ProvisionAllResponse {\n orgId: string;\n userId: string;\n status: string;\n metadata: ResponseMetadata;\n}\n\n/**\n * Unified onboarding provisioning - collects all data then creates org and provisions everything.\n * This is the new flow where data is collected first, then provisioned via SSE.\n */\nexport async function provisionAllOnboardingApi(\n request: ProvisionAllRequest,\n options: OnboardingApiOptions\n): Promise<ApiResponse<ProvisionAllResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/provision-all\", {\n method: \"POST\",\n body: request,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\n// =============================================================================\n// ORG SETTINGS API\n// =============================================================================\n\nexport async function getOrgSettingsApi(\n options: ApiClientOptions\n): Promise<ApiResponse<OrgSettingsResponse>> {\n return browserApiRequest(\"/api/v1/org/settings\", {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function createOrgSettingsApi(\n settings: Partial<OrgSettings>,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgSettingsResponse & { id?: string }>> {\n return browserApiRequest(\"/api/v1/org/settings\", {\n method: \"POST\",\n body: settings,\n ...options,\n });\n}\n\nexport async function updateOrgSettingsApi(\n settings: Partial<OrgSettings>,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgSettingsResponse>> {\n return browserApiRequest(\"/api/v1/org/settings\", {\n method: \"PUT\",\n body: settings,\n ...options,\n });\n}\n\nexport async function updateOrgAgentsApi(\n agentIds: string[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionAgentsResponse>> {\n return browserApiRequest(\"/api/v1/org/agents\", {\n method: \"PUT\",\n body: { agentIds },\n ...options,\n });\n}\n\nexport async function updateEntityDefinitionsApi(\n entityNames: string[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionEntitiesResponse>> {\n return browserApiRequest(\"/api/v1/org/entities\", {\n method: \"PUT\",\n body: { entityNames },\n ...options,\n });\n}\n\nexport async function updateWorkflowDefinitionsApi(\n workflowIds: string[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionWorkflowsResponse>> {\n return browserApiRequest(\"/api/v1/org/workflows\", {\n method: \"PUT\",\n body: { workflowIds },\n ...options,\n });\n}\n\n// =============================================================================\n// BILLING API\n// =============================================================================\n\nexport async function getBillingPlansApi(\n options: ApiClientOptions\n): Promise<ApiResponse<PlansResponse>> {\n return browserApiRequest(\"/api/v1/billing/plans\", {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function getSubscriptionApi(\n options: ApiClientOptions\n): Promise<ApiResponse<SubscriptionResponse>> {\n return browserApiRequest(\"/api/v1/billing/subscription\", {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function getCreditsApi(\n options: ApiClientOptions\n): Promise<ApiResponse<CreditsResponse>> {\n return browserApiRequest(\"/api/v1/billing/credits\", {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function createCheckoutSessionApi(\n params: { priceId: string; seats?: number; successUrl?: string; cancelUrl?: string },\n options: ApiClientOptions\n): Promise<ApiResponse<CreateCheckoutResponse>> {\n return browserApiRequest(\"/api/v1/billing/checkout\", {\n method: \"POST\",\n body: params,\n ...options,\n });\n}\n\nexport async function createPortalSessionApi(\n params: { returnUrl: string },\n options: ApiClientOptions\n): Promise<ApiResponse<PortalSessionResponse>> {\n return browserApiRequest(\"/api/v1/billing/portal\", {\n method: \"POST\",\n body: params,\n ...options,\n });\n}\n\nexport async function cancelSubscriptionApi(\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean; metadata: ResponseMetadata }>> {\n return browserApiRequest(\"/api/v1/billing/subscription/cancel\", {\n method: \"POST\",\n body: {},\n ...options,\n });\n}\n\nexport async function purchaseCreditsApi(\n params: { packageId: string; successUrl?: string; cancelUrl?: string },\n options: ApiClientOptions\n): Promise<ApiResponse<CreateCheckoutResponse>> {\n return browserApiRequest(\"/api/v1/billing/credits/purchase\", {\n method: \"POST\",\n body: params,\n ...options,\n });\n}\n\n// =============================================================================\n// PROVISIONING API (DEPRECATED - use domain packages instead)\n// =============================================================================\n\n/**\n * @deprecated Use `provisionAgentsApi` from `@elqnt/agents/api` instead\n */\nexport async function provisionDefaultAgentsApi(\n definitions: unknown[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionAgentsResponse>> {\n return browserApiRequest(\"/api/v1/admin/provision/agents\", {\n method: \"POST\",\n body: { definitions },\n ...options,\n });\n}\n\n/**\n * @deprecated Use `provisionEntitiesApi` from `@elqnt/entity/api` instead\n */\nexport async function provisionEntitiesApi(\n definitions: unknown[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionEntitiesResponse>> {\n return browserApiRequest(\"/api/v1/admin/entities/update\", {\n method: \"POST\",\n body: { definitions },\n ...options,\n });\n}\n\n/**\n * @deprecated Use `provisionWorkflowsApi` from `@elqnt/workflow/api` instead (coming soon)\n */\nexport async function provisionWorkflowsApi(\n definitions: unknown[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionWorkflowsResponse>> {\n return browserApiRequest(\"/api/v1/admin/provision/workflows\", {\n method: \"POST\",\n body: { definitions },\n ...options,\n });\n}\n\n// =============================================================================\n// ADMIN CRUD APIs\n// =============================================================================\n\nexport * from \"./orgs\";\nexport * from \"./users\";\nexport * from \"./invites\";\nexport * from \"./analytics\";\nexport * from \"./provisioning\";\n\n// =============================================================================\n// RE-EXPORTS\n// =============================================================================\n\nexport type {\n OnboardingState,\n OnboardingResponse,\n OrgSettings,\n OrgSettingsResponse,\n Plan,\n OrganizationBilling,\n UsageSummary,\n CreditBalance,\n PlansResponse,\n SubscriptionResponse,\n CreditsResponse,\n ProvisionAgentsResponse,\n ProvisionEntitiesResponse,\n ProvisionWorkflowsResponse,\n // Org types\n Org,\n OrgResponse,\n OrgInfoResponse,\n ListOrgsResponse,\n OrgSchemaTypeTS,\n CreateOrgWithSchemasResponse,\n // User types\n User,\n UserResponse,\n ListUsersResponse,\n UserSettings,\n UserSettingsResponse,\n NotificationPreferences,\n // Invite types\n Invite,\n InviteResponse,\n ListInvitesResponse,\n InviteInput,\n InvitesResult,\n} from \"../models\";\n","/**\n * Organizations Admin API\n *\n * Browser-side API client for organization management.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n Org,\n OrgResponse,\n OrgInfoResponse,\n ListOrgsResponse,\n OrgProductTS,\n OrgStatusTS,\n OrgTypeTS,\n OrgSchemaTypeTS,\n CreateOrgWithSchemasResponse,\n} from \"../models\";\n\n// =============================================================================\n// FILTER TYPES\n// =============================================================================\n\n/**\n * Filter options for listing organizations\n */\nexport interface ListOrgsFilter {\n product?: OrgProductTS;\n status?: OrgStatusTS;\n type?: OrgTypeTS;\n}\n\n// =============================================================================\n// ORGANIZATIONS CRUD\n// =============================================================================\n\n/**\n * List all organizations (admin scope required)\n * @param filter - Optional filter criteria\n * @param options - API client options\n */\nexport async function listOrgsApi(\n filter: ListOrgsFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<ListOrgsResponse>> {\n const params = new URLSearchParams();\n if (filter?.product) params.set(\"product\", filter.product);\n if (filter?.status) params.set(\"status\", filter.status);\n if (filter?.type) params.set(\"type\", filter.type);\n\n const queryString = params.toString();\n const url = queryString ? `/api/v1/admin/orgs?${queryString}` : \"/api/v1/admin/orgs\";\n\n return browserApiRequest(url, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Create a new organization\n */\nexport async function createOrgApi(\n org: Partial<Org>,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgResponse>> {\n return browserApiRequest(\"/api/v1/admin/orgs\", {\n method: \"POST\",\n body: org,\n ...options,\n });\n}\n\n/**\n * Get an organization by ID\n */\nexport async function getOrgApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgResponse>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Update an organization\n */\nexport async function updateOrgApi(\n orgId: string,\n updates: Partial<Org>,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgResponse>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}`, {\n method: \"PUT\",\n body: updates,\n ...options,\n });\n}\n\n/**\n * Delete an organization\n */\nexport async function deleteOrgApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean }>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}`, {\n method: \"DELETE\",\n ...options,\n });\n}\n\n/**\n * Get organization info (lightweight response)\n */\nexport async function getOrgInfoApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgInfoResponse>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}/info`, {\n method: \"GET\",\n ...options,\n });\n}\n\n// =============================================================================\n// SCHEMA PROVISIONING\n// =============================================================================\n\n/**\n * Create an organization with specific database schemas.\n * Only creates bare org_<uuid> schemas, no tables or default data.\n * Use this when you want to create an org then bootstrap custom content\n * using @elqnt/* hooks.\n *\n * @param org - Partial org data (title is required)\n * @param schemas - Array of schema types to create: \"entities\", \"agents\", \"org-config\"\n * @param options - API client options\n */\nexport async function createOrgWithSchemasApi(\n org: Partial<Org>,\n schemas: OrgSchemaTypeTS[],\n options: ApiClientOptions\n): Promise<ApiResponse<CreateOrgWithSchemasResponse>> {\n return browserApiRequest(\"/api/v1/admin/orgs/with-schemas\", {\n method: \"POST\",\n body: { org, schemas },\n ...options,\n });\n}\n","/**\n * Users Admin API\n *\n * Browser-side API client for user management.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n User,\n UserResponse,\n ListUsersResponse,\n UserSettings,\n UserSettingsResponse,\n NotificationPreferences,\n} from \"../models\";\n\n// =============================================================================\n// USERS CRUD\n// =============================================================================\n\n/**\n * List all users in the organization\n */\nexport async function listUsersApi(\n options: ApiClientOptions\n): Promise<ApiResponse<ListUsersResponse>> {\n return browserApiRequest(\"/api/v1/admin/users\", {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Create a new user\n */\nexport async function createUserApi(\n user: Partial<User>,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(\"/api/v1/admin/users\", {\n method: \"POST\",\n body: user,\n ...options,\n });\n}\n\n/**\n * Get a user by ID\n */\nexport async function getUserApi(\n userId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get a user by email\n */\nexport async function getUserByEmailApi(\n email: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/by-email?email=${encodeURIComponent(email)}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get a user by phone number (stored in metadata.phoneNumber)\n */\nexport async function getUserByPhoneApi(\n phone: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/by-phone?phone=${encodeURIComponent(phone)}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Update a user\n */\nexport async function updateUserApi(\n userId: string,\n updates: Partial<User>,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}`, {\n method: \"PUT\",\n body: updates,\n ...options,\n });\n}\n\n/**\n * Delete a user\n */\nexport async function deleteUserApi(\n userId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean }>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}`, {\n method: \"DELETE\",\n ...options,\n });\n}\n\n// =============================================================================\n// USER SETTINGS\n// =============================================================================\n\n/**\n * Get user settings\n */\nexport async function getUserSettingsApi(\n userId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserSettingsResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}/settings`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Update user settings\n */\nexport async function updateUserSettingsApi(\n userId: string,\n settings: {\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n },\n options: ApiClientOptions\n): Promise<ApiResponse<UserSettingsResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}/settings`, {\n method: \"PUT\",\n body: settings,\n ...options,\n });\n}\n","/**\n * Invites Admin API\n *\n * Browser-side API client for invitation management.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n Invite,\n InviteResponse,\n ListInvitesResponse,\n InviteInput,\n InvitesResult,\n} from \"../models\";\n\n// =============================================================================\n// INVITES CRUD\n// =============================================================================\n\n/**\n * List all invites in the organization\n */\nexport async function listInvitesApi(\n options: ApiClientOptions\n): Promise<ApiResponse<ListInvitesResponse>> {\n return browserApiRequest(\"/api/v1/admin/invites\", {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Send invites to multiple users\n */\nexport async function sendInvitesApi(\n invites: InviteInput[],\n options: ApiClientOptions\n): Promise<ApiResponse<InvitesResult>> {\n return browserApiRequest(\"/api/v1/admin/invites\", {\n method: \"POST\",\n body: { invites },\n ...options,\n });\n}\n\n/**\n * Send a single invite\n */\nexport async function sendInviteApi(\n invite: InviteInput,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(\"/api/v1/admin/invites/single\", {\n method: \"POST\",\n body: invite,\n ...options,\n });\n}\n\n/**\n * Get an invite by ID\n */\nexport async function getInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Resend an invite\n */\nexport async function resendInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}/resend`, {\n method: \"POST\",\n ...options,\n });\n}\n\n/**\n * Revoke an invite\n */\nexport async function revokeInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean }>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}`, {\n method: \"DELETE\",\n ...options,\n });\n}\n\n/**\n * Accept an invite (used by invited users)\n */\nexport async function acceptInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}/accept`, {\n method: \"POST\",\n ...options,\n });\n}\n","/**\n * Product Analytics API\n *\n * Browser-side API client for product analytics.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n DateFilter,\n SummaryResponse,\n ChatsResponse,\n AgentsAnalyticsResponse,\n UsageResponse,\n DailyResponse,\n EventsResponse,\n AnalyticsEvent,\n GlobalSummaryResponse,\n OrgAnalyticsResponse,\n} from \"../models/analytics\";\n\n// =============================================================================\n// QUERY STRING HELPERS\n// =============================================================================\n\nfunction buildDateFilterParams(filter?: DateFilter): string {\n if (!filter) return \"\";\n const params = new URLSearchParams();\n if (filter.from) params.set(\"from\", filter.from);\n if (filter.to) params.set(\"to\", filter.to);\n const queryString = params.toString();\n return queryString ? `?${queryString}` : \"\";\n}\n\n// =============================================================================\n// ORG ANALYTICS (Per-Organization)\n// =============================================================================\n\n/**\n * Get analytics summary (total chats, messages, tokens, cost, users)\n */\nexport async function getAnalyticsSummaryApi(\n filter: DateFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<SummaryResponse>> {\n const queryString = buildDateFilterParams(filter);\n return browserApiRequest(`/api/v1/analytics/summary${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get chat analytics with filters\n */\nexport async function getChatsAnalyticsApi(\n filter: DateFilter | undefined,\n agentId: string | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<ChatsResponse>> {\n const params = new URLSearchParams();\n if (filter?.from) params.set(\"from\", filter.from);\n if (filter?.to) params.set(\"to\", filter.to);\n if (agentId) params.set(\"agent_id\", agentId);\n const queryString = params.toString();\n return browserApiRequest(`/api/v1/analytics/chats${queryString ? `?${queryString}` : \"\"}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get per-agent analytics\n */\nexport async function getAgentsAnalyticsApi(\n filter: DateFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<AgentsAnalyticsResponse>> {\n const queryString = buildDateFilterParams(filter);\n return browserApiRequest(`/api/v1/analytics/agents${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get token/cost usage analytics by service and model\n */\nexport async function getUsageAnalyticsApi(\n filter: DateFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<UsageResponse>> {\n const queryString = buildDateFilterParams(filter);\n return browserApiRequest(`/api/v1/analytics/usage${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get daily analytics for charts\n */\nexport async function getDailyAnalyticsApi(\n filter: DateFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<DailyResponse>> {\n const queryString = buildDateFilterParams(filter);\n return browserApiRequest(`/api/v1/analytics/daily${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get analytics events log\n */\nexport async function getAnalyticsEventsApi(\n filter: DateFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<EventsResponse>> {\n const queryString = buildDateFilterParams(filter);\n return browserApiRequest(`/api/v1/analytics/events${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Log an analytics event from frontend\n */\nexport async function logAnalyticsEventApi(\n event: AnalyticsEvent,\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean }>> {\n return browserApiRequest(\"/api/v1/analytics/events\", {\n method: \"POST\",\n body: event,\n ...options,\n });\n}\n\n// =============================================================================\n// GLOBAL ANALYTICS (Platform Admin)\n// =============================================================================\n\n/**\n * Get platform-wide analytics summary (admin only)\n */\nexport async function getGlobalSummaryApi(\n filter: DateFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<GlobalSummaryResponse>> {\n const queryString = buildDateFilterParams(filter);\n return browserApiRequest(`/api/v1/analytics/global/summary${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get per-org analytics comparison (admin only)\n */\nexport async function getGlobalOrgsAnalyticsApi(\n filter: DateFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgAnalyticsResponse>> {\n const queryString = buildDateFilterParams(filter);\n return browserApiRequest(`/api/v1/analytics/global/orgs${queryString}`, {\n method: \"GET\",\n ...options,\n });\n}\n","/**\n * Organization Provisioning Admin API\n *\n * Browser-side API client for organization provisioning management.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n Org,\n CreateOrgRequest,\n CreateOrgResponse,\n RetryProvisioningRequest,\n OrgProvisioningProgress,\n OrgArtifactTypeTS,\n} from \"../models\";\n\n// =============================================================================\n// PROVISIONING PROGRESS TYPE\n// =============================================================================\n\nexport interface ProvisioningProgress {\n orgId: string;\n status: string;\n totalArtifacts: number;\n completedArtifacts: number;\n failedArtifacts: number;\n currentArtifact?: {\n type: OrgArtifactTypeTS;\n status: string;\n critical: boolean;\n };\n artifacts: Array<{\n type: OrgArtifactTypeTS;\n status: string;\n critical: boolean;\n error?: string;\n duration?: number;\n estimatedDuration?: number;\n }>;\n startedAt: number;\n completedAt?: number;\n error?: string;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n artifacts: Array<{\n type: string;\n valid: boolean;\n }>;\n}\n\n// =============================================================================\n// ORGANIZATION PROVISIONING API\n// =============================================================================\n\n/**\n * Create a new organization with provisioning\n */\nexport async function createOrgWithProvisioningApi(\n request: CreateOrgRequest,\n options: ApiClientOptions\n): Promise<ApiResponse<CreateOrgResponse & { provisioningStatus: string }>> {\n return browserApiRequest(\"/api/v1/admin/provisioning/orgs\", {\n method: \"POST\",\n body: request,\n ...options,\n });\n}\n\n/**\n * Get provisioning status for an organization\n */\nexport async function getProvisioningStatusApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ progress: ProvisioningProgress }>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}/provisioning`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Retry failed provisioning artifacts\n */\nexport async function retryProvisioningApi(\n orgId: string,\n request: RetryProvisioningRequest | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<{ message: string; status: string }>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}/provisioning/retry`, {\n method: \"POST\",\n body: request || {},\n ...options,\n });\n}\n\n/**\n * Validate all provisioned artifacts\n */\nexport async function validateProvisioningApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<ValidationResult>> {\n return browserApiRequest(\n `/api/v1/admin/orgs/${orgId}/provisioning/validate`,\n {\n method: \"POST\",\n ...options,\n }\n );\n}\n\n/**\n * Cancel active provisioning\n */\nexport async function cancelProvisioningApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ message: string }>> {\n return browserApiRequest(\n `/api/v1/admin/orgs/${orgId}/provisioning/cancel`,\n {\n method: \"POST\",\n ...options,\n }\n );\n}\n\n/**\n * Cleanup provisioned resources for an organization\n */\nexport async function cleanupProvisioningApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ message: string }>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}/provisioning`, {\n method: \"DELETE\",\n ...options,\n });\n}\n\n// =============================================================================\n// SSE STREAMING\n// =============================================================================\n\nexport interface ProvisioningStreamCallbacks {\n onProgress?: (progress: ProvisioningProgress) => void;\n onConnected?: (orgId: string) => void;\n onDone?: () => void;\n onError?: (error: Error) => void;\n onTimeout?: () => void;\n}\n\n/**\n * Stream provisioning progress via Server-Sent Events\n *\n * Returns a function to close the connection\n */\nexport function streamProvisioningProgress(\n orgId: string,\n callbacks: ProvisioningStreamCallbacks,\n options: { baseUrl: string; token?: string }\n): () => void {\n const url = new URL(\n `/api/v1/admin/orgs/${orgId}/provisioning/stream`,\n options.baseUrl\n );\n\n // EventSource doesn't support custom headers, so pass token as query param\n if (options.token) {\n url.searchParams.set(\"token\", options.token);\n }\n\n const eventSource = new EventSource(url.toString());\n\n eventSource.addEventListener(\"connected\", (event) => {\n try {\n const data = JSON.parse(event.data);\n callbacks.onConnected?.(data.orgId);\n } catch (e) {\n console.error(\"Failed to parse connected event\", e);\n }\n });\n\n eventSource.addEventListener(\"progress\", (event) => {\n try {\n const progress = JSON.parse(event.data) as ProvisioningProgress;\n callbacks.onProgress?.(progress);\n } catch (e) {\n console.error(\"Failed to parse progress event\", e);\n }\n });\n\n eventSource.addEventListener(\"done\", () => {\n callbacks.onDone?.();\n eventSource.close();\n });\n\n eventSource.addEventListener(\"timeout\", () => {\n callbacks.onTimeout?.();\n eventSource.close();\n });\n\n eventSource.onerror = (error) => {\n callbacks.onError?.(new Error(\"SSE connection error\"));\n eventSource.close();\n };\n\n // Return cleanup function\n return () => {\n eventSource.close();\n };\n}\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Calculate provisioning progress percentage\n */\nexport function calculateProgressPercentage(\n progress: ProvisioningProgress\n): number {\n if (progress.totalArtifacts === 0) return 0;\n return Math.round(\n (progress.completedArtifacts / progress.totalArtifacts) * 100\n );\n}\n\n/**\n * Check if provisioning is complete (success or failure)\n */\nexport function isProvisioningComplete(progress: ProvisioningProgress): boolean {\n return (\n progress.status === \"completed\" ||\n progress.status === \"failed\" ||\n progress.status === \"partial\"\n );\n}\n\n/**\n * Check if provisioning was successful\n */\nexport function isProvisioningSuccessful(\n progress: ProvisioningProgress\n): boolean {\n return progress.status === \"completed\";\n}\n\n/**\n * Get failed artifacts from progress\n */\nexport function getFailedArtifacts(\n progress: ProvisioningProgress\n): ProvisioningProgress[\"artifacts\"] {\n return progress.artifacts.filter((a) => a.status === \"failed\");\n}\n\n/**\n * Check if any critical artifacts failed\n */\nexport function hasCriticalFailures(progress: ProvisioningProgress): boolean {\n return progress.artifacts.some(\n (a) => a.status === \"failed\" && a.critical\n );\n}\n"],"mappings":"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","names":["browserApiRequest","browserApiRequest","browserApiRequest","browserApiRequest","browserApiRequest","browserApiRequest"]}
1
+ {"version":3,"sources":["../models/admin.ts","../models/billing.ts","../api/index.ts","../api/orgs.ts","../api/users.ts","../api/invites.ts"],"sourcesContent":["// Code generated by tygo. DO NOT EDIT.\n// Code generated by tygo. DO NOT EDIT.\n// Migrated from @elqnt/types/models/admin-models.ts to @elqnt/admin\nimport { ResponseMetadata } from \"@elqnt/types\";\n\n//////////\n// source: admin-models.go\n\nexport interface Address {\n line1: string;\n line2: string;\n city: string;\n state: string;\n country: string;\n zip: string;\n}\n/**\n * Org is one organization. With per-product DB + row-level tenancy,\n * the DB the org lives in (admin_eloquent / admin_pumba / …) implies\n * the product — there is no longer a product column on the row. With\n * the system_*\\/org_* artifact split, there's also no per-org artifact\n * provisioning state to track. See docs/_db_v2/03_system_org_split.md.\n */\nexport interface Org {\n id?: string /* uuid */;\n title: string;\n description?: string;\n logoUrl: string;\n mainDomain: string;\n address: Address;\n /**\n * Localization & runtime preferences\n */\n defaultLang?: string;\n timezone?: string;\n settings?: { [key: string]: any};\n /**\n * Status & Control\n */\n status: OrgStatusTS;\n enabled: boolean;\n /**\n * Classification\n */\n type: OrgTypeTS;\n size?: OrgSizeTS;\n industry?: string;\n /**\n * Country is the org's jurisdiction code (e.g. \"UAE\", \"KSA\", \"QA\"). It\n * scopes which system compliance libraries the org sees in the library\n * section. Empty = unset (all system libraries visible). Validated against\n * SupportedCountries; see common/admin/countries.go and\n * docs/_db_v2/08_country_scoped_libraries.md.\n */\n country?: string;\n tags?: string[];\n /**\n * Subscription (Stripe)\n */\n subscription?: OrgSubscription;\n userCount: number /* int64 */;\n /**\n * Onboarding wizard state (per-user UX flow, not artifact provisioning)\n */\n onboarding?: OrgOnboarding;\n /**\n * Template & Roles\n */\n template?: OrgTemplate;\n roles: string[];\n /**\n * Flexible metadata\n */\n metadata?: { [key: string]: any};\n /**\n * Audit fields\n */\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n}\nexport type OrgStatus = string;\nexport const OrgStatusActive: OrgStatus = \"active\";\nexport const OrgStatusSuspended: OrgStatus = \"suspended\";\n\nexport const OrgStatuses = {\n active: { value: 'active', label: 'Active' },\n suspended: { value: 'suspended', label: 'Suspended' },\n} as const;\nexport type OrgStatusTS = keyof typeof OrgStatuses;\nexport type OrgStatusOptionTS = typeof OrgStatuses[OrgStatusTS];\n\n/**\n * OrgType represents whether the org is self-serve or enterprise\n */\nexport type OrgType = string;\nexport const OrgTypeSelfServe: OrgType = \"self-serve\";\nexport const OrgTypeEnterprise: OrgType = \"enterprise\";\n\nexport const OrgTypes = {\n \"self-serve\": { value: 'self-serve', label: 'Self-Serve' },\n enterprise: { value: 'enterprise', label: 'Enterprise' },\n} as const;\nexport type OrgTypeTS = keyof typeof OrgTypes;\nexport type OrgTypeOptionTS = typeof OrgTypes[OrgTypeTS];\n\n/**\n * OrgSize represents the size of the organization\n */\nexport type OrgSize = string;\nexport const OrgSizeSolo: OrgSize = \"solo\";\nexport const OrgSizeSmall: OrgSize = \"small\";\nexport const OrgSizeMedium: OrgSize = \"medium\";\nexport const OrgSizeLarge: OrgSize = \"large\";\nexport const OrgSizeEnterprise: OrgSize = \"enterprise\";\n\nexport const OrgSizes = {\n solo: { value: 'solo', label: 'Just me' },\n small: { value: 'small', label: '2-10' },\n medium: { value: 'medium', label: '11-50' },\n large: { value: 'large', label: '51-200' },\n enterprise: { value: 'enterprise', label: '200+' },\n} as const;\nexport type OrgSizeTS = keyof typeof OrgSizes;\nexport type OrgSizeOptionTS = typeof OrgSizes[OrgSizeTS];\n\n\n\n/**\n * OnboardingStatus represents the status of an onboarding flow\n */\nexport type OnboardingStatus = string;\nexport const OnboardingStatusPending: OnboardingStatus = \"pending\";\nexport const OnboardingStatusInProgress: OnboardingStatus = \"in_progress\";\nexport const OnboardingStatusCompleted: OnboardingStatus = \"completed\";\nexport const OnboardingStatusSkipped: OnboardingStatus = \"skipped\";\nexport const OnboardingStatusLegacy: OnboardingStatus = \"legacy\"; // For users created before onboarding\n\nexport const OnboardingStatuses = {\n pending: { value: 'pending', label: 'Pending' },\n in_progress: { value: 'in_progress', label: 'In Progress' },\n completed: { value: 'completed', label: 'Completed' },\n skipped: { value: 'skipped', label: 'Skipped' },\n legacy: { value: 'legacy', label: 'Legacy' },\n} as const;\nexport type OnboardingStatusTS = keyof typeof OnboardingStatuses;\nexport type OnboardingStatusOptionTS = typeof OnboardingStatuses[OnboardingStatusTS];\n\n/**\n * OrgOnboarding tracks the onboarding progress for an organization\n */\nexport interface OrgOnboarding {\n status: OnboardingStatus;\n currentStep: number /* int */;\n completedAt?: number /* int64 */;\n skippedSteps?: number /* int */[];\n}\nexport interface OrgSubscription {\n plan: string;\n platform: SubscriptionPlatform;\n status: OrgSubscriptionStatus;\n trialEndsAt?: number /* int64 */;\n currentPeriodEnd?: number /* int64 */;\n seats?: number /* int */;\n stripeCustomerId?: string;\n stripeSubscriptionId?: string;\n cancelledAt?: number /* int64 */;\n cancelReason?: string;\n gracePeriodEndsAt?: number /* int64 */;\n}\nexport type OrgSubscriptionStatus = string;\nexport const OrgSubscriptionStatusTrialing: OrgSubscriptionStatus = \"trialing\";\nexport const OrgSubscriptionStatusActive: OrgSubscriptionStatus = \"active\";\nexport const OrgSubscriptionStatusPastDue: OrgSubscriptionStatus = \"past_due\";\nexport const OrgSubscriptionStatusCancelled: OrgSubscriptionStatus = \"cancelled\";\nexport const OrgSubscriptionStatusUnpaid: OrgSubscriptionStatus = \"unpaid\";\n\nexport const OrgSubscriptionStatuses = {\n trialing: { value: 'trialing', label: 'Trialing' },\n active: { value: 'active', label: 'Active' },\n past_due: { value: 'past_due', label: 'Past Due' },\n cancelled: { value: 'cancelled', label: 'Cancelled' },\n unpaid: { value: 'unpaid', label: 'Unpaid' },\n} as const;\nexport type OrgSubscriptionStatusTS = keyof typeof OrgSubscriptionStatuses;\nexport type OrgSubscriptionStatusOptionTS = typeof OrgSubscriptionStatuses[OrgSubscriptionStatusTS];\n\nexport interface OrgResponse {\n org: Org;\n metadata: ResponseMetadata;\n}\nexport interface OrgInfoResponse {\n orgInfo: OrgInfo;\n metadata: ResponseMetadata;\n}\nexport interface OrgRoleResponse {\n role: OrgRole;\n metadata: ResponseMetadata;\n}\nexport interface ListOrgsResponse {\n orgs: Org[];\n metadata: ResponseMetadata;\n}\nexport interface ListOrgRolesResponse {\n roles: OrgRole[];\n metadata: ResponseMetadata;\n}\nexport interface OrgInfo {\n id?: string;\n title: string;\n logoUrl: string;\n mainDomain?: string;\n}\nexport interface AzureSettings {\n appClientId?: string;\n appClientSecret?: string;\n azureTenantId?: string;\n}\nexport interface OrgTemplate {\n id: string /* uuid */;\n slug: string;\n title: string;\n}\nexport interface UserOrgAccess {\n orgId?: string /* uuid */;\n orgTitle?: string;\n roles: string[];\n isSingleAccount: boolean;\n entityRecordFilter?: { entityName: string; recordId: string; displayValue?: string };\n}\n/**\n * UserSettings represents user preferences (elastic JSON structure)\n */\nexport interface UserSettings {\n theme?: string; // \"system\" | \"light\" | \"dark\"\n language?: string; // \"auto\" | \"en\" | \"ar\" | etc.\n timezone?: string; // \"auto\" | \"America/New_York\" | etc.\n occupation?: string; // User's occupation/role\n company?: string; // User's company/organization\n}\n\nexport const ThemeOptions = {\n system: { value: 'system', label: 'System' },\n light: { value: 'light', label: 'Light' },\n dark: { value: 'dark', label: 'Dark' },\n} as const;\nexport type ThemeOptionTS = keyof typeof ThemeOptions;\n\n/**\n * NotificationPreferences represents user notification settings\n */\nexport interface NotificationPreferences {\n pushEnabled: boolean;\n newChatAssignment: boolean;\n newMessages: boolean;\n escalations: boolean;\n urgentOnly: boolean;\n soundEnabled: boolean;\n doNotDisturb: boolean;\n dndStart?: string; // \"22:00\" format\n dndEnd?: string; // \"08:00\" format\n}\n/**\n * UserSource represents how a user was created\n */\nexport type UserSource = string;\nexport const UserSourceSignup: UserSource = \"signup\"; // Self-registered\nexport const UserSourceInvite: UserSource = \"invite\"; // Invited by team member\nexport const UserSourceSSO: UserSource = \"sso\"; // Auto-provisioned via SSO\nexport const UserSourceAPI: UserSource = \"api\"; // Created via API\n\nexport const UserSources = {\n signup: { value: 'signup', label: 'Signup' },\n invite: { value: 'invite', label: 'Invite' },\n sso: { value: 'sso', label: 'SSO' },\n api: { value: 'api', label: 'API' },\n} as const;\nexport type UserSourceTS = keyof typeof UserSources;\nexport type UserSourceOptionTS = typeof UserSources[UserSourceTS];\n\n/**\n * InviteStatus represents the status of an invitation\n */\nexport type InviteStatus = string;\nexport const InviteStatusPending: InviteStatus = \"pending\";\nexport const InviteStatusAccepted: InviteStatus = \"accepted\";\nexport const InviteStatusExpired: InviteStatus = \"expired\";\nexport const InviteStatusRevoked: InviteStatus = \"revoked\";\n\nexport const InviteStatuses = {\n pending: { value: 'pending', label: 'Pending' },\n accepted: { value: 'accepted', label: 'Accepted' },\n expired: { value: 'expired', label: 'Expired' },\n revoked: { value: 'revoked', label: 'Revoked' },\n} as const;\nexport type InviteStatusTS = keyof typeof InviteStatuses;\nexport type InviteStatusOptionTS = typeof InviteStatuses[InviteStatusTS];\n\n/**\n * Invite represents a team/org invitation\n */\nexport interface Invite {\n id?: string /* uuid */;\n orgId: string /* uuid */;\n email: string;\n role: string;\n invitedBy: string /* uuid */;\n status: InviteStatusTS;\n acceptedBy?: string /* uuid */;\n acceptedAt?: number /* int64 */;\n expiresAt?: number /* int64 */;\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n}\nexport interface InviteResponse {\n invite: Invite;\n metadata: ResponseMetadata;\n}\nexport interface ListInvitesResponse {\n invites: Invite[];\n metadata: ResponseMetadata;\n}\n/**\n * UserOnboarding tracks the onboarding progress for a user\n */\nexport interface UserOnboarding {\n status: OnboardingStatus;\n completedAt?: number /* int64 */;\n}\n/**\n * User represents a user in the system\n */\nexport interface User {\n id?: string /* uuid */;\n email: string;\n firstName: string;\n lastName: string;\n authProviderName: string;\n orgAccess?: UserOrgAccess[];\n /**\n * Status & Control\n */\n enabled?: boolean;\n /**\n * Source tracking\n */\n source?: UserSourceTS;\n invitedBy?: string /* uuid */;\n inviteStatus?: InviteStatusTS;\n /**\n * Team membership - LEGACY, DO NOT USE\n * These fields are deprecated and will be removed.\n * Use Org and OrgAccess patterns instead.\n */\n isTeamAdmin?: boolean;\n teamId?: string;\n teamName?: string;\n /**\n * System admin flag\n */\n isSysAdmin?: boolean;\n /**\n * Preferences\n */\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n /**\n * Onboarding tracking\n */\n onboarding?: UserOnboarding;\n /**\n * Flexible metadata\n */\n metadata?: { [key: string]: any};\n /**\n * Activity tracking (Unix ms). FirstActiveAt is the activation moment —\n * the first agent message sent after signup (web chat, or WhatsApp routed\n * to a real org rather than the onboarding funnel). LastActiveAt is\n * refreshed on every later message, throttled at the sender. Written ONLY\n * via the dedicated TouchActivity UPDATE, never by full-row user updates,\n * so concurrent profile edits can't clobber them.\n */\n firstActiveAt?: number /* int64 */;\n lastActiveAt?: number /* int64 */;\n /**\n * Audit fields\n */\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n}\nexport interface UserResponse {\n user: User;\n metadata: ResponseMetadata;\n}\nexport interface ListUsersResponse {\n users: User[];\n metadata: ResponseMetadata;\n}\nexport interface Team {\n id?: string /* uuid */;\n name: string;\n isSubscribed: boolean;\n subscribedAt?: number /* int64 */;\n plan: string;\n ownerName?: string;\n ownerEmail?: string;\n subscriptionPlatform?: SubscriptionPlatform;\n subscriptionId?: string;\n onboardingDone?: boolean;\n onboardingData?: string;\n}\nexport type SubscriptionPlatform = string;\nexport const SubscriptionPlatformStripe: SubscriptionPlatform = \"stripe\";\nexport const SubscriptionPlatformCustom: SubscriptionPlatform = \"custom\";\nexport interface OrgRole {\n id?: string /* uuid */;\n orgId?: string /* uuid */;\n title: string;\n permissions: Permission[];\n isSystem: boolean;\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n}\n/**\n * org db - copied from sys db\n */\nexport interface Permission {\n /**\n * ID *primitive.ObjectID `bson:\"_id,omitempty\" json:\"id\"`\n */\n name: string;\n title: string;\n isSystem: boolean;\n}\n/**\n * UpdateUserSettingsRequest is the request payload for updating user settings\n */\nexport interface UpdateUserSettingsRequest {\n id: string /* uuid */;\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n}\n/**\n * UserSettingsResponse is the response for settings operations\n */\nexport interface UserSettingsResponse {\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n metadata: ResponseMetadata;\n}\n/**\n * OnboardingStep represents a step in the onboarding flow\n */\nexport interface OnboardingStep {\n step: number /* int */;\n name: string;\n status: string; // pending, in_progress, completed, skipped\n required: boolean;\n}\n/**\n * OnboardingState represents the current state of a user's onboarding\n */\nexport interface OnboardingState {\n status: string; // pending, in_progress, completed\n currentStep: number /* int */;\n steps: OnboardingStep[];\n user?: User;\n org?: Org;\n}\n/**\n * OnboardingStateResponse is the response for onboarding status\n */\nexport interface OnboardingStateResponse {\n state: OnboardingState;\n metadata: ResponseMetadata;\n}\n/**\n * OrgInput contains the input for creating an organization\n */\nexport interface OrgInput {\n name: string;\n country?: string; // org jurisdiction; see common/admin/countries.go\n affiliateCode?: string; // referral attribution, validated then stamped on org metadata\n mainDomain?: string;\n industry?: string;\n size?: string;\n stripeSessionId?: string;\n}\n/**\n * OrgResult contains the result of organization creation\n */\nexport interface OrgResult {\n org?: Org;\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * WorkspaceInput is an alias for OrgInput (deprecated)\n */\nexport type WorkspaceInput = OrgInput;\n/**\n * WorkspaceResult is an alias for OrgResult (deprecated)\n */\nexport type WorkspaceResult = OrgResult;\n/**\n * InviteInput contains the input for sending invites\n */\nexport interface InviteInput {\n email: string;\n role: string;\n}\n/**\n * InvitesResult contains the result of sending invites\n */\nexport interface InvitesResult {\n sent: InviteSentStatus[];\n failed: string[];\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * InviteSentStatus represents status of a sent invite\n */\nexport interface InviteSentStatus {\n email: string;\n status: string;\n}\n/**\n * KnowledgeInput contains the input for creating knowledge graph\n */\nexport interface KnowledgeInput {\n name?: string;\n skipUpload: boolean;\n}\n/**\n * KnowledgeGraphInfo contains info about a knowledge graph\n */\nexport interface KnowledgeGraphInfo {\n id: string;\n name: string;\n status: string;\n documentCount: number /* int */;\n}\n/**\n * KnowledgeResult contains the result of knowledge graph creation\n */\nexport interface KnowledgeResult {\n knowledgeGraph: KnowledgeGraphInfo;\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * AgentInput contains the input for creating an agent\n */\nexport interface AgentInput {\n name: string;\n goal: string;\n personality: string; // professional, friendly, concise, custom\n skills?: string[]; // skill names to enable (e.g., \"web_search\", \"knowledge_graph\")\n}\n/**\n * AgentInfo contains info about an agent\n */\nexport interface AgentInfo {\n id: string;\n name: string;\n goal: string;\n personality: string;\n status: string;\n knowledgeGraphId?: string;\n}\n/**\n * AgentResult contains the result of agent creation\n */\nexport interface AgentResult {\n agent: AgentInfo;\n nextStep: string;\n metadata: ResponseMetadata;\n}\n/**\n * OnboardingCompleteResult contains the result of completing onboarding\n */\nexport interface OnboardingCompleteResult {\n status: string;\n completedAt: number /* int64 */;\n org?: Org;\n redirectUrl: string;\n metadata: ResponseMetadata;\n}\n/**\n * PaymentSessionInput contains input for creating a payment session\n */\nexport interface PaymentSessionInput {\n plan: string; // pro, max\n billingCycle: string; // monthly, annual\n seats: number /* int */;\n successUrl: string;\n cancelUrl: string;\n affiliateCode?: string; // Referral code for affiliate tracking\n}\n/**\n * PaymentSessionResult contains the result of creating a payment session\n */\nexport interface PaymentSessionResult {\n url: string;\n sessionId: string;\n customerId: string;\n metadata: ResponseMetadata;\n}\n/**\n * OnboardingPlanInput contains subscription plan selection for provisioning\n */\nexport interface OnboardingPlanInput {\n plan: string; // \"pro\" | \"max\"\n billingCycle: string; // \"monthly\" | \"annual\"\n seats: number /* int */;\n stripeSessionId?: string; // From completed Stripe checkout\n}\n/**\n * OnboardingOrgInput contains organization data for the onboarding wizard.\n * The product is implicit in the admin DB the request lands in\n * (admin_eloquent / admin_pumba / …) — no need to pass it on the body.\n */\nexport interface OnboardingOrgInput {\n title: string; // Org display name (e.g., \"Acme Corp\")\n mainDomain: string; // Unique domain slug (e.g., \"acme-corp\")\n industry?: string;\n size?: string; // \"1-10\", \"11-50\", etc.\n}\n/**\n * OnboardingDocumentInput contains a document to be ingested during onboarding\n */\nexport interface OnboardingDocumentInput {\n title: string; // Document display name\n fileUrl: string; // Azure blob URL (uploaded during KB step)\n}\n/**\n * OnboardingKnowledgeInput contains knowledge base configuration with optional documents\n */\nexport interface OnboardingKnowledgeInput {\n name: string; // Knowledge base name\n documents?: OnboardingDocumentInput[]; // Documents to ingest\n}\n/**\n * OnboardingProvisionRequest contains all data collected during onboarding\n * to create org and provision all resources in one request\n */\nexport interface OnboardingProvisionRequest {\n plan: OnboardingPlanInput;\n org: OnboardingOrgInput;\n invites?: InviteInput[];\n knowledge: OnboardingKnowledgeInput;\n agent: AgentInput;\n}\n/**\n * OnboardingProvisionResponse is returned after starting provisioning\n */\nexport interface OnboardingProvisionResponse {\n orgId: string;\n userId: string;\n status: string; // \"provisioning\"\n metadata: ResponseMetadata;\n}\n/**\n * CreateOrgRequest is the request payload for creating an organization.\n * Under per-product DB + row-level tenancy this is a pure row INSERT —\n * no per-org schema provisioning, no artifact install. The product is\n * implicit in the admin DB the request lands in.\n */\nexport interface CreateOrgRequest {\n title: string;\n mainDomain: string;\n type?: OrgTypeTS;\n size?: OrgSizeTS;\n industry?: string;\n logoUrl?: string;\n address?: Address;\n subscription?: OrgSubscription;\n metadata?: { [key: string]: any};\n}\n/**\n * CreateOrgResponse is the response for org creation\n */\nexport interface CreateOrgResponse {\n org: Org;\n metadata: ResponseMetadata;\n}\n\n//////////\n// source: admin-subjects.go\n\nexport const AdminOrgCreate = \"admin.orgs.create\";\nexport const AdminOrgList = \"admin.orgs.list\";\nexport const AdminOrgListByMetadata = \"admin.orgs.listByMetadata\";\nexport const AdminOrgGet = \"admin.orgs.get\";\nexport const AdminOrgGetInfo = \"admin.orgs.getInfo\";\nexport const AdminOrgGetByDomain = \"admin.orgs.getByDomain\";\nexport const AdminOrgUpdate = \"admin.orgs.update\";\nexport const AdminOrgDelete = \"admin.orgs.delete\";\nexport const AdminOrgCreated = \"system.admin.org.created\";\nexport const AdminOrgRolesGet = \"admin.orgRoles.get\";\nexport const AdminOrgRolesCreate = \"admin.orgRoles.create\";\nexport const AdminOrgRolesUpdate = \"admin.orgRoles.update\";\nexport const AdminOrgRolesDelete = \"admin.orgRoles.delete\";\nexport const AdminUsersGet = \"admin.users.get\";\nexport const AdminUsersGetForOrg = \"admin.users.getUsersForOrg\";\nexport const AdminUsersGetOne = \"admin.users.getOne\";\nexport const AdminUsersGetOneByEmail = \"admin.users.getOneByEmail\";\nexport const AdminUsersGetOneByPhone = \"admin.users.getOneByPhone\";\nexport const AdminUsersCreate = \"admin.users.create\";\nexport const AdminUsersUpdate = \"admin.users.update\";\nexport const AdminUsersDelete = \"admin.users.delete\";\nexport const AdminUsersUpdateSettings = \"admin.users.updateSettings\";\nexport const AdminUsersGetSettings = \"admin.users.getSettings\";\nexport const AdminUsersTouchActivity = \"admin.users.touchActivity\";\nexport const AdminTeamsCreate = \"admin.teams.create\";\nexport const AdminTeamsGetOne = \"admin.teams.getOne\";\nexport const AdminTeamsGetForOrg = \"admin.teams.getTeamsForOrg\";\nexport const AdminTeamsUpdateOnboarding = \"admin.teams.updateOnboardingData\";\n/**\n * AdminBillingSuperAgentCheckout mints a per-user Super Agent Stripe checkout\n * URL. Requested by the chat service for the WhatsApp free-limit wall.\n */\nexport const AdminBillingSuperAgentCheckout = \"admin.billing.superagent-checkout\";\n\n//////////\n// source: countries.go\n\n/**\n * Country is a supported jurisdiction for org-level scoping of system\n * document libraries. The Code is the canonical, machine value stored on\n * Org.Country and matched against system_doc_libraries.metadata->>'country'\n * (see backend/services/admin/artifacts/eloquent/system_libraries.go and\n * docs/_db_v2/08_country_scoped_libraries.md).\n * To onboard a new jurisdiction: append a row here, then add the matching\n * <code>_<dept>_library entries in the artifact registry. No enum, no\n * migration — Org.Country is a plain varchar.\n */\nexport interface Country {\n code: string; // canonical jurisdiction code, e.g. \"UAE\"\n name: string; // human label, e.g. \"United Arab Emirates\"\n}\n\n//////////\n// source: subscription.go\n\n/**\n * DefaultTrialDays is the self-serve trial length. Override with TRIAL_DAYS.\n */\nexport const DefaultTrialDays = 7;\n","// Billing types - MANUALLY MAINTAINED\n// Originally generated by tygo, but Go source files were removed.\n// These types are now manually maintained in TypeScript.\n// Migrated from @elqnt/types/models/billing-models.ts to @elqnt/admin\nimport { ResponseMetadata } from \"@elqnt/types\";\n\n//////////\n// source: billing-models.go\n\n/**\n * Billing event handlers\n */\nexport const BillingRecordEvent = \"billing.events.record\";\n/**\n * NATS Subject constants\n */\nexport const BillingGetUsageReport = \"billing.usage.report\";\n/**\n * NATS Subject constants\n */\nexport const BillingGetInvoice = \"billing.invoice.get\";\n/**\n * NATS Subject constants\n */\nexport const BillingProcessBillingPeriod = \"billing.period.process\";\n/**\n * Usage handlers\n */\nexport const UsageGetCurrentUsage = \"billing.usage.current\";\n/**\n * NATS Subject constants\n */\nexport const UsageGetUsageHistory = \"billing.usage.history\";\n/**\n * NATS Subject constants\n */\nexport const UsageGetCostBreakdown = \"billing.usage.breakdown\";\n/**\n * NATS Subject constants\n */\nexport const UsageGetTopCostCenters = \"billing.usage.top_centers\";\n/**\n * Rules handlers\n */\nexport const RulesGetBillingRules = \"billing.rules.get\";\n/**\n * NATS Subject constants\n */\nexport const RulesCreateBillingRule = \"billing.rules.create\";\n/**\n * NATS Subject constants\n */\nexport const RulesUpdateBillingRule = \"billing.rules.update\";\n/**\n * NATS Subject constants\n */\nexport const RulesDeleteBillingRule = \"billing.rules.delete\";\nexport interface BillingEvent {\n /**\n * Core identifiers\n */\n org_id: string;\n event_id: string;\n user_id: string;\n customer_id: string;\n /**\n * Event details\n */\n event_type: string;\n event_subtype: string;\n timestamp: string /* RFC3339 */;\n /**\n * Billing metrics\n */\n billable_units: number /* int */;\n unit_type: string;\n cost_per_unit: number /* float64 */;\n total_cost: number /* float64 */;\n /**\n * Context\n */\n service_name: string;\n session_id: string;\n parent_event_id: string;\n /**\n * Resource consumption\n */\n input_tokens: number /* int */;\n output_tokens: number /* int */;\n processing_time_ms: number /* int */;\n /**\n * Product context\n */\n product_tier: string;\n feature_name: string;\n plan_id: string;\n /**\n * Metadata\n */\n metadata: { [key: string]: any};\n created_by: string;\n}\nexport interface UsageReport {\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n total_cost: number /* float64 */;\n currency: string;\n service_breakdowns: ServiceUsage[];\n generated_at: string /* RFC3339 */;\n}\nexport interface ServiceUsage {\n service_name: string;\n event_type: string;\n unit_type: string;\n total_units: number /* int64 */;\n total_cost: number /* float64 */;\n total_events: number /* int32 */;\n unique_users: number /* int32 */;\n unique_sessions: number /* int32 */;\n total_input_tokens: number /* int64 */;\n total_output_tokens: number /* int64 */;\n total_processing_time: number /* int64 */;\n}\nexport interface BillingRule {\n rule_id: string;\n org_id: string;\n service_name: string;\n event_type: string;\n unit_type: string;\n /**\n * Tiered pricing\n */\n base_cost: number /* float64 */;\n tier_1_threshold: number /* int */;\n tier_1_cost: number /* float64 */;\n tier_2_threshold: number /* int */;\n tier_2_cost: number /* float64 */;\n tier_3_threshold: number /* int */;\n tier_3_cost: number /* float64 */;\n /**\n * Validity\n */\n effective_from: string /* RFC3339 */;\n effective_to: string /* RFC3339 */;\n is_active: boolean;\n created_at: string /* RFC3339 */;\n updated_at: string /* RFC3339 */;\n}\nexport interface BillingPeriod {\n period_id: string;\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n status: string; // 'active', 'closed', 'processing'\n billing_cycle: string; // 'monthly', 'annual', 'usage'\n created_at: string /* RFC3339 */;\n}\nexport interface Invoice {\n invoice_id: string;\n org_id: string;\n period_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n line_items: InvoiceLineItem[];\n subtotal_amount: number /* float64 */;\n tax_amount: number /* float64 */;\n total_amount: number /* float64 */;\n currency: string;\n status: string; // 'draft', 'sent', 'paid', 'failed'\n generated_at: string /* RFC3339 */;\n due_date: string /* RFC3339 */;\n payment_method_id: string;\n}\nexport interface InvoiceLineItem {\n line_item_id: string;\n service_name: string;\n event_type: string;\n unit_type: string;\n description: string;\n quantity: number /* int64 */;\n unit_price: number /* float64 */;\n total_price: number /* float64 */;\n}\nexport interface BillingEventRequest {\n BillingEvent: BillingEvent;\n}\nexport interface BillingEventResponse {\n success: boolean;\n error?: string;\n}\nexport interface UsageReportRequest {\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n}\nexport interface UsageReportResponse {\n success: boolean;\n data?: UsageReport;\n error?: string;\n}\nexport interface CurrentUsageRequest {\n org_id: string;\n service_name: string;\n event_type: string;\n}\nexport interface CurrentUsageResponse {\n success: boolean;\n data?: { [key: string]: any};\n error?: string;\n}\nexport interface CostBreakdownRequest {\n org_id: string;\n period_start: string /* RFC3339 */;\n period_end: string /* RFC3339 */;\n group_by: string; // 'service', 'user', 'day', 'hour'\n}\nexport interface CostBreakdownResponse {\n success: boolean;\n data?: CostBreakdown[];\n error?: string;\n}\nexport interface CostBreakdown {\n group_value: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n}\nexport interface BillingRuleRequest {\n BillingRule: BillingRule;\n}\nexport interface BillingRuleResponse {\n success: boolean;\n data?: BillingRule;\n error?: string;\n}\nexport interface BillingRulesRequest {\n org_id: string;\n service_name: string;\n event_type: string;\n}\nexport interface BillingRulesResponse {\n success: boolean;\n data?: (BillingRule | undefined)[];\n error?: string;\n}\nexport interface InvoiceRequest {\n org_id: string;\n period_id: string;\n invoice_id: string;\n}\nexport interface InvoiceResponse {\n success: boolean;\n data?: Invoice;\n error?: string;\n}\nexport interface BillingPeriodProcessRequest {\n org_id: string;\n period_id: string;\n}\nexport interface BillingPeriodProcessResponse {\n success: boolean;\n invoice_id?: string;\n error?: string;\n}\nexport interface UsageAggregation {\n org_id: string;\n period_id: string;\n date: string;\n hour: number /* int */;\n service_name: string;\n event_type: string;\n unit_type: string;\n total_units: number /* int64 */;\n total_events: number /* int32 */;\n total_cost: number /* float64 */;\n unique_users: number /* int32 */;\n unique_sessions: number /* int32 */;\n total_input_tokens: number /* int64 */;\n total_output_tokens: number /* int64 */;\n total_processing_time: number /* int64 */;\n created_at: string /* RFC3339 */;\n}\nexport interface TopCostCenter {\n service_name: string;\n event_type: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n percentage: number /* float64 */;\n}\nexport interface UsageHistory {\n date: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n unique_users: number /* int32 */;\n}\nexport interface UserUsage {\n user_id: string;\n total_cost: number /* float64 */;\n total_units: number /* int64 */;\n event_count: number /* int32 */;\n last_activity: string /* RFC3339 */;\n}\n/**\n * Usage trends and analytics models\n */\nexport interface UsageTrends {\n org_id: string;\n days: number /* int */;\n trend: string; // \"increasing\", \"decreasing\", \"stable\"\n direction: string; // \"up\", \"down\", \"flat\"\n change_percent: number /* float64 */;\n recent_week_cost: number /* float64 */;\n previous_week_cost: number /* float64 */;\n}\nexport interface UsageAlert {\n type: string; // \"cost_spike\", \"volume_spike\", etc.\n severity: string; // \"low\", \"medium\", \"high\"\n message: string;\n current_value: number /* float64 */;\n threshold_value: number /* float64 */;\n created_at: string /* RFC3339 */;\n}\n/**\n * Cost preview models\n */\nexport interface CostPreview {\n units: number /* int */;\n total_cost: number /* float64 */;\n cost_per_unit: number /* float64 */;\n tier_breakdown: TierCost[];\n rule?: BillingRule;\n}\nexport interface TierCost {\n tier: string;\n units: number /* int */;\n rate: number /* float64 */;\n cost: number /* float64 */;\n}\n/**\n * Rule coverage models\n */\nexport interface RuleCoverage {\n org_id: string;\n total_services: number /* int */;\n covered_services: { [key: string]: boolean};\n missing_rules: string[];\n rule_count: number /* int */;\n coverage_percentage: number /* float64 */;\n}\n/**\n * Generic Response\n */\nexport interface BillingResponse {\n success: boolean;\n data?: any;\n error?: string;\n}\n\n//////////\n// source: stripe-models.go\n\n/**\n * Subscription management\n */\nexport const SubscriptionCreate = \"billing.subscription.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionGet = \"billing.subscription.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionUpdate = \"billing.subscription.update\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionCancel = \"billing.subscription.cancel\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionList = \"billing.subscription.list\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const SubscriptionCheckout = \"billing.subscription.checkout\";\n/**\n * Payment links\n */\nexport const PaymentLinkCreate = \"billing.payment-link.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const PaymentLinkList = \"billing.payment-link.list\";\n/**\n * Customer portal\n */\nexport const PortalSessionCreate = \"billing.portal.create\";\n/**\n * Customer management\n */\nexport const CustomerCreate = \"billing.customer.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CustomerGet = \"billing.customer.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CustomerUpdate = \"billing.customer.update\";\n/**\n * Credits\n */\nexport const CreditsBalance = \"billing.credits.balance\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CreditsPurchase = \"billing.credits.purchase\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const CreditsConsume = \"billing.credits.consume\";\n/**\n * Plans\n */\nexport const PlansGet = \"billing.plans.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const PlansGetAll = \"billing.plans.list\";\n/**\n * Usage alerts\n */\nexport const UsageAlertThreshold = \"billing.usage.alert\";\n/**\n * Webhooks (internal events)\n */\nexport const WebhookSubscriptionCreated = \"billing.webhook.subscription.created\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookSubscriptionUpdated = \"billing.webhook.subscription.updated\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookSubscriptionCanceled = \"billing.webhook.subscription.canceled\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookInvoicePaid = \"billing.webhook.invoice.paid\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookInvoiceFailed = \"billing.webhook.invoice.failed\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const WebhookPaymentSucceeded = \"billing.webhook.payment.succeeded\";\n/**\n * Affiliates\n */\nexport const AffiliateCreate = \"billing.affiliate.create\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateGet = \"billing.affiliate.get\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateList = \"billing.affiliate.list\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateUpdate = \"billing.affiliate.update\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateOnboard = \"billing.affiliate.onboard\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateCommissions = \"billing.affiliate.commissions\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AffiliateAnalytics = \"billing.affiliate.analytics\";\n/**\n * Analytics\n */\nexport const AnalyticsRevenue = \"billing.analytics.revenue\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AnalyticsUsage = \"billing.analytics.usage\";\n/**\n * NATS Subjects for Stripe/Subscription operations\n */\nexport const AnalyticsChurn = \"billing.analytics.churn\";\n/**\n * Plan represents a subscription plan\n */\nexport interface Plan {\n id: string;\n stripeProductId?: string;\n stripePriceId?: string;\n name: string;\n tier: string;\n priceCents: number /* int64 */;\n currency: string;\n billingInterval: string;\n chatSessionsLimit: number /* int */;\n tokenAllowance: number /* int64 */;\n agentsLimit: number /* int */;\n usersLimit: number /* int */;\n knowledgeGraphMb: number /* int */;\n tokenOverageRateCents: number /* int */;\n sessionOverageRateCents: number /* int */;\n features: { [key: string]: any};\n isActive: boolean;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * OrganizationBilling represents an organization's billing info\n */\nexport interface OrganizationBilling {\n orgId: string;\n stripeCustomerId?: string;\n stripeSubscriptionId?: string;\n planId?: string;\n plan?: Plan;\n status: string;\n currentPeriodStart?: string /* RFC3339 */;\n currentPeriodEnd?: string /* RFC3339 */;\n trialStart?: string /* RFC3339 */;\n trialEnd?: string /* RFC3339 */;\n billingEmail?: string;\n billingName?: string;\n affiliateCode?: string;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * CreditBalance represents a credit balance entry\n */\nexport interface CreditBalance {\n id: string;\n orgId: string;\n creditType: string;\n amount: number /* int64 */;\n remaining: number /* int64 */;\n description?: string;\n expiresAt?: string /* RFC3339 */;\n stripePaymentId?: string;\n createdAt: string /* RFC3339 */;\n}\n/**\n * CreditPackage represents a purchasable credit package\n */\nexport interface CreditPackage {\n id: string;\n stripeProductId?: string;\n stripePriceId?: string;\n name: string;\n tokens: number /* int64 */;\n priceCents: number /* int64 */;\n currency: string;\n bonusTokens: number /* int64 */;\n isActive: boolean;\n createdAt: string /* RFC3339 */;\n}\n/**\n * UsagePeriod represents usage within a billing period\n */\nexport interface UsagePeriod {\n id: string;\n orgId: string;\n periodStart: string /* RFC3339 */;\n periodEnd: string /* RFC3339 */;\n tokensUsed: number /* int64 */;\n sessionsUsed: number /* int */;\n tokensAllowance: number /* int64 */;\n sessionsAllowance: number /* int */;\n tokensOverage: number /* int64 */;\n sessionsOverage: number /* int */;\n overageChargedCents: number /* int64 */;\n status: string;\n stripeUsageRecordId?: string;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * UsageSummary provides a summary of current usage\n */\nexport interface UsageSummary {\n orgId: string;\n planTier: string;\n billingPeriodStart: string /* RFC3339 */;\n billingPeriodEnd: string /* RFC3339 */;\n daysRemaining: number /* int */;\n /**\n * Token usage\n */\n tokensUsed: number /* int64 */;\n tokensAllowance: number /* int64 */;\n tokensPercentage: number /* float64 */;\n tokensRemaining: number /* int64 */;\n /**\n * Session usage\n */\n sessionsUsed: number /* int */;\n sessionsAllowance: number /* int */;\n sessionsPercentage: number /* float64 */;\n sessionsRemaining: number /* int */;\n /**\n * Credits\n */\n creditsRemaining: number /* int64 */;\n /**\n * Projected overage\n */\n projectedTokenOverage: number /* int64 */;\n projectedSessionOverage: number /* int */;\n projectedOverageCents: number /* int64 */;\n}\n/**\n * Affiliate represents an affiliate partner\n */\nexport interface Affiliate {\n id: string;\n name: string;\n email: string;\n stripeAccountId?: string;\n status: string;\n commissionRate: number /* float64 */;\n commissionType: string;\n referralCode: string;\n referralLink: string;\n totalEarningsCents: number /* int64 */;\n pendingPayoutCents: number /* int64 */;\n onboardingCompleted: boolean;\n onboardingCompletedAt?: string /* RFC3339 */;\n country?: string;\n phone?: string;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * AffiliateReferral represents a customer referred by an affiliate\n */\nexport interface AffiliateReferral {\n id: string;\n affiliateId: string;\n customerOrgId: string;\n stripeCustomerId?: string;\n status: string;\n firstPurchaseAt?: string /* RFC3339 */;\n totalRevenueCents: number /* int64 */;\n totalCommissionCents: number /* int64 */;\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * AffiliateCommission represents a commission payment to an affiliate\n */\nexport interface AffiliateCommission {\n id: string;\n affiliateId: string;\n referralId: string;\n stripePaymentId?: string;\n stripeTransferId?: string;\n stripeInvoiceId?: string;\n grossAmountCents: number /* int64 */;\n commissionAmountCents: number /* int64 */;\n commissionRate: number /* float64 */;\n currency: string;\n status: string;\n createdAt: string /* RFC3339 */;\n paidAt?: string /* RFC3339 */;\n}\n/**\n * Payment represents a payment record\n */\nexport interface Payment {\n id: string;\n orgId: string;\n stripePaymentIntentId?: string;\n stripeInvoiceId?: string;\n stripeSubscriptionId?: string;\n amountCents: number /* int64 */;\n currency: string;\n status: string;\n paymentType: string;\n customerEmail?: string;\n paymentMethod?: string;\n description?: string;\n metadata?: { [key: string]: any};\n createdAt: string /* RFC3339 */;\n updatedAt: string /* RFC3339 */;\n}\n/**\n * CreatePaymentLinkRequest is the request to create a payment link\n */\nexport interface CreatePaymentLinkRequest {\n orgId: string;\n priceId: string;\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n affiliateCode?: string;\n quantity?: number /* int64 */;\n metadata?: { [key: string]: string};\n}\n/**\n * CreatePaymentLinkResponse is the response from creating a payment link\n */\nexport interface CreatePaymentLinkResponse {\n success: boolean;\n url?: string;\n paymentLinkId?: string;\n error?: string;\n}\n/**\n * CreatePortalSessionRequest is the request to create a billing portal session\n */\nexport interface CreatePortalSessionRequest {\n orgId: string;\n returnUrl: string;\n}\n/**\n * CreatePortalSessionResponse is the response from creating a portal session\n */\nexport interface CreatePortalSessionResponse {\n success: boolean;\n url?: string;\n error?: string;\n}\n/**\n * CreateCheckoutSessionRequest is the request to create a checkout session\n */\nexport interface CreateCheckoutSessionRequest {\n orgId: string;\n priceId: string;\n successUrl: string;\n cancelUrl: string;\n customerEmail?: string;\n affiliateCode?: string;\n trialDays?: number /* int64 */;\n metadata?: { [key: string]: string};\n}\n/**\n * CreateCheckoutSessionResponse is the response from creating a checkout session\n */\nexport interface CreateCheckoutSessionResponse {\n success: boolean;\n sessionId?: string;\n url?: string;\n error?: string;\n}\n/**\n * GetSubscriptionRequest is the request to get subscription info\n */\nexport interface GetSubscriptionRequest {\n orgId: string;\n}\n/**\n * GetSubscriptionResponse is the response with subscription info\n */\nexport interface GetSubscriptionResponse {\n success: boolean;\n subscription?: OrganizationBilling;\n usage?: UsageSummary;\n error?: string;\n}\n/**\n * CancelSubscriptionRequest is the request to cancel a subscription\n */\nexport interface CancelSubscriptionRequest {\n orgId: string;\n cancelAtEnd: boolean;\n reason?: string;\n}\n/**\n * CancelSubscriptionResponse is the response from canceling a subscription\n */\nexport interface CancelSubscriptionResponse {\n success: boolean;\n cancelAt?: string /* RFC3339 */;\n error?: string;\n}\n/**\n * GetCreditsRequest is the request to get credit balance\n */\nexport interface GetCreditsRequest {\n orgId: string;\n}\n/**\n * GetCreditsResponse is the response with credit balance\n */\nexport interface GetCreditsResponse {\n success: boolean;\n totalRemaining: number /* int64 */;\n balances?: (CreditBalance | undefined)[];\n error?: string;\n}\n/**\n * PurchaseCreditsRequest is the request to purchase credits\n */\nexport interface PurchaseCreditsRequest {\n orgId: string;\n packageId: string;\n successUrl: string;\n cancelUrl: string;\n}\n/**\n * PurchaseCreditsResponse is the response from purchasing credits\n */\nexport interface PurchaseCreditsResponse {\n success: boolean;\n sessionId?: string;\n url?: string;\n error?: string;\n}\n/**\n * ConsumeCreditsRequest is the request to consume credits\n */\nexport interface ConsumeCreditsRequest {\n orgId: string;\n amount: number /* int64 */;\n reason?: string;\n}\n/**\n * ConsumeCreditsResponse is the response from consuming credits\n */\nexport interface ConsumeCreditsResponse {\n success: boolean;\n consumed: number /* int64 */;\n remaining: number /* int64 */;\n error?: string;\n}\n/**\n * GetPlansRequest is the request to get available plans\n */\nexport interface GetPlansRequest {\n activeOnly: boolean;\n}\n/**\n * GetPlansResponse is the response with available plans\n */\nexport interface GetPlansResponse {\n success: boolean;\n plans?: (Plan | undefined)[];\n error?: string;\n}\n/**\n * CreateAffiliateRequest is the request to create an affiliate\n */\nexport interface CreateAffiliateRequest {\n name: string;\n email: string;\n country: string;\n commissionRate?: number /* float64 */;\n phone?: string;\n}\n/**\n * CreateAffiliateResponse is the response from creating an affiliate\n */\nexport interface CreateAffiliateResponse {\n success: boolean;\n affiliate?: Affiliate;\n error?: string;\n}\n/**\n * GetAffiliateRequest is the request to get an affiliate\n */\nexport interface GetAffiliateRequest {\n affiliateId?: string;\n referralCode?: string;\n}\n/**\n * GetAffiliateResponse is the response with affiliate info\n */\nexport interface GetAffiliateResponse {\n success: boolean;\n affiliate?: Affiliate;\n error?: string;\n}\n/**\n * ListAffiliatesRequest is the request to list affiliates\n */\nexport interface ListAffiliatesRequest {\n status?: string;\n page?: number /* int */;\n pageSize?: number /* int */;\n}\n/**\n * ListAffiliatesResponse is the response with affiliate list\n */\nexport interface ListAffiliatesResponse {\n success: boolean;\n affiliates?: (Affiliate | undefined)[];\n total: number /* int */;\n page: number /* int */;\n pageSize: number /* int */;\n error?: string;\n}\n/**\n * CreateAffiliateOnboardingLinkRequest is the request to create an onboarding link\n */\nexport interface CreateAffiliateOnboardingLinkRequest {\n affiliateId: string;\n refreshUrl: string;\n returnUrl: string;\n}\n/**\n * CreateAffiliateOnboardingLinkResponse is the response with onboarding link\n */\nexport interface CreateAffiliateOnboardingLinkResponse {\n success: boolean;\n url?: string;\n error?: string;\n}\n/**\n * GetAffiliateCommissionsRequest is the request to get affiliate commissions\n */\nexport interface GetAffiliateCommissionsRequest {\n affiliateId: string;\n startDate?: string /* RFC3339 */;\n endDate?: string /* RFC3339 */;\n status?: string;\n page?: number /* int */;\n pageSize?: number /* int */;\n}\n/**\n * GetAffiliateCommissionsResponse is the response with affiliate commissions\n */\nexport interface GetAffiliateCommissionsResponse {\n success: boolean;\n commissions?: (AffiliateCommission | undefined)[];\n total: number /* int */;\n totalAmount: number /* int64 */;\n page: number /* int */;\n pageSize: number /* int */;\n error?: string;\n}\n/**\n * GetAffiliateAnalyticsRequest is the request to get affiliate analytics\n */\nexport interface GetAffiliateAnalyticsRequest {\n affiliateId: string;\n period?: string; // 'day', 'week', 'month', 'year'\n startDate?: string /* RFC3339 */;\n endDate?: string /* RFC3339 */;\n}\n/**\n * AffiliateAnalytics represents affiliate analytics data\n */\nexport interface AffiliateAnalytics {\n affiliateId: string;\n period: string;\n totalReferrals: number /* int */;\n activeReferrals: number /* int */;\n churnedReferrals: number /* int */;\n totalRevenueCents: number /* int64 */;\n totalCommissionsCents: number /* int64 */;\n conversionRate: number /* float64 */;\n avgCustomerLtvCents: number /* int64 */;\n}\n/**\n * GetAffiliateAnalyticsResponse is the response with affiliate analytics\n */\nexport interface GetAffiliateAnalyticsResponse {\n success: boolean;\n analytics?: AffiliateAnalytics;\n error?: string;\n}\n/**\n * RevenueAnalyticsRequest is the request to get revenue analytics\n */\nexport interface RevenueAnalyticsRequest {\n period?: string; // 'day', 'week', 'month', 'year'\n startDate?: string /* RFC3339 */;\n endDate?: string /* RFC3339 */;\n}\n/**\n * RevenueAnalytics represents revenue analytics data\n */\nexport interface RevenueAnalytics {\n period: string;\n mrrCents: number /* int64 */;\n arrCents: number /* int64 */;\n newMrrCents: number /* int64 */;\n churnedMrrCents: number /* int64 */;\n expansionMrrCents: number /* int64 */;\n contractionMrrCents: number /* int64 */;\n netMrrCents: number /* int64 */;\n totalCustomers: number /* int */;\n newCustomers: number /* int */;\n churnedCustomers: number /* int */;\n churnRate: number /* float64 */;\n}\n/**\n * RevenueAnalyticsResponse is the response with revenue analytics\n */\nexport interface RevenueAnalyticsResponse {\n success: boolean;\n analytics?: RevenueAnalytics;\n error?: string;\n}\n/**\n * Webhook event types\n */\nexport interface StripeWebhookEvent {\n type: string;\n data: { [key: string]: any};\n eventId: string;\n createdAt: string /* RFC3339 */;\n}\n\n//////////\n// source: subjects.go\n\n/**\n * Base subject prefix\n */\nexport const BillingSubjectPrefix = \"billing\";\n/**\n * Event recording subjects\n */\nexport const BillingEventsRecord = \"billing.events.record\";\n/**\n * Usage reporting subjects\n */\nexport const BillingUsageReport = \"billing.usage.report\";\nexport const BillingUsageCurrent = \"billing.usage.current\";\nexport const BillingUsageHistory = \"billing.usage.history\";\nexport const BillingUsageCostBreakdown = \"billing.usage.breakdown\";\nexport const BillingUsageTopCenters = \"billing.usage.top_centers\";\n/**\n * Invoice subjects\n */\nexport const BillingInvoiceGet = \"billing.invoice.get\";\nexport const BillingInvoiceCreate = \"billing.invoice.create\";\nexport const BillingInvoiceProcess = \"billing.invoice.process\";\n/**\n * Billing period subjects\n */\nexport const BillingPeriodCreate = \"billing.period.create\";\nexport const BillingPeriodClose = \"billing.period.close\";\nexport const BillingPeriodProcess = \"billing.period.process\";\n/**\n * Billing rules subjects\n */\nexport const BillingRulesGet = \"billing.rules.get\";\nexport const BillingRulesCreate = \"billing.rules.create\";\nexport const BillingRulesUpdate = \"billing.rules.update\";\nexport const BillingRulesDelete = \"billing.rules.delete\";\n/**\n * Organization provisioning\n */\nexport const BillingOrgProvision = \"billing.org.provision\";\n/**\n * Health check\n */\nexport const BillingHealthCheck = \"billing.health.check\";\n","/**\n * Admin API functions (internal)\n *\n * Low-level API functions that call browserApiRequest directly.\n * These are the building blocks for @elqnt/admin/hooks.\n *\n * **Apps should use hooks (`@elqnt/admin/hooks`) instead of these functions.**\n * Hooks provide loading/error state management on top of these API calls.\n * Only use these directly if you're building a new hook or need an operation\n * that no hook covers yet.\n */\n\nimport { browserApiRequest, clearGatewayTokenCache } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\n\n// Re-export utility function\nexport { clearGatewayTokenCache };\nimport type { ResponseMetadata } from \"@elqnt/types\";\nimport type {\n OnboardingState,\n OnboardingResponse,\n CreateOrgResponse,\n SendInvitesResponse,\n CreateKnowledgeResponse,\n CreateAgentResponse,\n CompleteOnboardingResponse,\n PaymentSessionResponse,\n OrgSettings,\n OrgSettingsResponse,\n PlansResponse,\n SubscriptionResponse,\n CreditsResponse,\n CreateCheckoutResponse,\n PortalSessionResponse,\n ProvisionAgentsResponse,\n ProvisionEntitiesResponse,\n ProvisionWorkflowsResponse,\n} from \"../models\";\n\n// =============================================================================\n// ONBOARDING API OPTIONS\n// =============================================================================\n\n/**\n * Onboarding API options - orgId is optional since user may not have org yet\n */\nexport interface OnboardingApiOptions {\n baseUrl: string;\n orgId?: string;\n userId?: string;\n userEmail?: string;\n headers?: Record<string, string>;\n}\n\n// =============================================================================\n// ONBOARDING API\n// =============================================================================\n\nexport async function getOnboardingStatusApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<OnboardingResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/status\", {\n method: \"GET\",\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function startOnboardingApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<OnboardingResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/start\", {\n method: \"POST\",\n body: {},\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createPaymentSessionApi(\n params: { plan: string; billingCycle: string; seats: number; successUrl: string; cancelUrl: string },\n options: OnboardingApiOptions\n): Promise<ApiResponse<PaymentSessionResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/payment\", {\n method: \"POST\",\n body: params,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createOrganizationApi(\n org: { name: string; industry?: string; size?: string; stripeSessionId?: string },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateOrgResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/organization\", {\n method: \"POST\",\n body: org,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function sendOnboardingInvitesApi(\n invites: Array<{ email: string; role?: string }>,\n options: OnboardingApiOptions\n): Promise<ApiResponse<SendInvitesResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/invites\", {\n method: \"POST\",\n body: { invites },\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createOnboardingKnowledgeApi(\n knowledge: { name: string; description?: string; websites?: string[] },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateKnowledgeResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/knowledge\", {\n method: \"POST\",\n body: knowledge,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createOnboardingAgentApi(\n agent: { name: string; description?: string; goal?: string },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateAgentResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/step/agent\", {\n method: \"POST\",\n body: agent,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function createAgentWithSkillsApi(\n payload: { agent: Record<string, unknown>; skills: Record<string, unknown>[]; enabledSkillNames: string[] },\n options: OnboardingApiOptions\n): Promise<ApiResponse<CreateAgentResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/agent-with-skills\", {\n method: \"POST\",\n body: payload,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function completeOnboardingApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<CompleteOnboardingResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/complete\", {\n method: \"POST\",\n body: {},\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport async function skipOnboardingStepApi(\n step: string,\n options: OnboardingApiOptions\n): Promise<ApiResponse<{ nextStep: string; metadata: ResponseMetadata }>> {\n return browserApiRequest(\"/api/v1/onboarding/skip-step\", {\n method: \"POST\",\n body: { step },\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\nexport interface StartProvisioningResponse {\n orgId: string;\n status: string;\n metadata?: ResponseMetadata;\n}\n\n/**\n * Start provisioning for an onboarding org.\n * Returns the org ID so the frontend can connect to the SSE stream for progress.\n */\nexport async function startOnboardingProvisioningApi(\n options: OnboardingApiOptions\n): Promise<ApiResponse<StartProvisioningResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/provisioning/start\", {\n method: \"POST\",\n body: {},\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\n/**\n * Request body for unified onboarding provisioning\n */\nexport interface ProvisionAllRequest {\n plan: {\n plan: string;\n billingCycle: string;\n seats: number;\n stripeSessionId?: string;\n inviteCode?: string; // If present, this is a free trial (skipped payment)\n };\n org: {\n title: string;\n mainDomain: string;\n // (product field removed — product is implicit in the admin DB)\n industry?: string;\n size?: string;\n };\n invites?: Array<{\n email: string;\n role: string;\n }>;\n knowledge: {\n name: string;\n documents?: Array<{\n title: string;\n fileUrl: string;\n }>;\n };\n agent: {\n name: string;\n goal: string;\n personality: string;\n skills?: string[];\n };\n}\n\n/**\n * Response from unified onboarding provisioning\n */\nexport interface ProvisionAllResponse {\n orgId: string;\n userId: string;\n status: string;\n metadata: ResponseMetadata;\n}\n\n/**\n * Unified onboarding provisioning - collects all data then creates org and provisions everything.\n * This is the new flow where data is collected first, then provisioned via SSE.\n */\nexport async function provisionAllOnboardingApi(\n request: ProvisionAllRequest,\n options: OnboardingApiOptions\n): Promise<ApiResponse<ProvisionAllResponse>> {\n return browserApiRequest(\"/api/v1/onboarding/provision-all\", {\n method: \"POST\",\n body: request,\n ...options,\n orgId: options.orgId || \"\",\n });\n}\n\n// =============================================================================\n// ORG SETTINGS API\n// =============================================================================\n\n/**\n * Org settings live on the canonical admin Org row (since v2.3) — the old\n * /api/v1/org/settings path against integrations is gone. These helpers keep\n * the legacy `OrgSettings` wire shape so consumers (org-settings form, the\n * OrganizationProvider hydration action, etc.) don't need to change. The\n * actual fetch/PUT happens against /admin/orgs/{orgId}.\n */\n\ninterface OrgRowSlice {\n id?: string;\n title?: string;\n description?: string;\n logoUrl?: string;\n defaultLang?: string;\n timezone?: string;\n settings?: { [key: string]: any };\n}\n\nfunction orgRowToSettings(\n orgId: string,\n row: OrgRowSlice | undefined,\n): OrgSettings {\n return {\n id: row?.id ?? \"\",\n org_id: orgId,\n title: row?.title ?? \"\",\n description: row?.description ?? \"\",\n logo_url: row?.logoUrl ?? \"\",\n default_lang: row?.defaultLang ?? \"en\",\n timezone: row?.timezone ?? \"UTC\",\n additional_settings: row?.settings ?? {},\n created_at: \"\",\n updated_at: \"\",\n created_by: \"\",\n updated_by: \"\",\n };\n}\n\nfunction settingsToOrgRow(settings: Partial<OrgSettings>): Partial<OrgRowSlice> {\n return {\n title: settings.title,\n description: settings.description,\n logoUrl: settings.logo_url,\n defaultLang: settings.default_lang,\n timezone: settings.timezone,\n settings: settings.additional_settings,\n };\n}\n\nexport async function getOrgSettingsApi(\n options: ApiClientOptions\n): Promise<ApiResponse<OrgSettingsResponse>> {\n const orgId = options.orgId ?? \"\";\n const response = await browserApiRequest<{ organization?: OrgRowSlice }>(\n `/api/v1/admin/orgs/${orgId}`,\n { method: \"GET\", ...options },\n );\n\n if (response.error) {\n return { error: response.error, status: response.status } as ApiResponse<OrgSettingsResponse>;\n }\n\n return {\n status: response.status,\n data: {\n success: true,\n settings: orgRowToSettings(orgId, response.data?.organization),\n } as OrgSettingsResponse,\n };\n}\n\n/**\n * @deprecated Org settings rows always exist on the admin Org. Kept as an\n * alias for backward compatibility — calls updateOrgSettingsApi.\n */\nexport async function createOrgSettingsApi(\n settings: Partial<OrgSettings>,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgSettingsResponse & { id?: string }>> {\n return updateOrgSettingsApi(settings, options);\n}\n\nexport async function updateOrgSettingsApi(\n settings: Partial<OrgSettings>,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgSettingsResponse>> {\n const orgId = options.orgId ?? \"\";\n const response = await browserApiRequest<{ message?: string }>(\n `/api/v1/admin/orgs/${orgId}`,\n {\n method: \"PUT\",\n body: settingsToOrgRow(settings),\n ...options,\n },\n );\n\n if (response.error) {\n return { error: response.error, status: response.status } as ApiResponse<OrgSettingsResponse>;\n }\n\n // Admin update returns { message: \"...\" }; round-trip a fresh GET so the\n // caller gets the full settings shape (with new updated_at, etc.).\n return getOrgSettingsApi(options);\n}\n\nexport async function updateOrgAgentsApi(\n agentIds: string[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionAgentsResponse>> {\n return browserApiRequest(\"/api/v1/org/agents\", {\n method: \"PUT\",\n body: { agentIds },\n ...options,\n });\n}\n\nexport async function updateEntityDefinitionsApi(\n entityNames: string[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionEntitiesResponse>> {\n return browserApiRequest(\"/api/v1/org/entities\", {\n method: \"PUT\",\n body: { entityNames },\n ...options,\n });\n}\n\nexport async function updateWorkflowDefinitionsApi(\n workflowIds: string[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionWorkflowsResponse>> {\n return browserApiRequest(\"/api/v1/org/workflows\", {\n method: \"PUT\",\n body: { workflowIds },\n ...options,\n });\n}\n\n// =============================================================================\n// BILLING API\n// =============================================================================\n\nexport async function getBillingPlansApi(\n options: ApiClientOptions\n): Promise<ApiResponse<PlansResponse>> {\n return browserApiRequest(\"/api/v1/billing/plans\", {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function getSubscriptionApi(\n options: ApiClientOptions\n): Promise<ApiResponse<SubscriptionResponse>> {\n return browserApiRequest(\"/api/v1/billing/subscription\", {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function getCreditsApi(\n options: ApiClientOptions\n): Promise<ApiResponse<CreditsResponse>> {\n return browserApiRequest(\"/api/v1/billing/credits\", {\n method: \"GET\",\n ...options,\n });\n}\n\nexport async function createCheckoutSessionApi(\n params: { priceId: string; seats?: number; successUrl?: string; cancelUrl?: string },\n options: ApiClientOptions\n): Promise<ApiResponse<CreateCheckoutResponse>> {\n return browserApiRequest(\"/api/v1/billing/checkout\", {\n method: \"POST\",\n body: params,\n ...options,\n });\n}\n\nexport async function createPortalSessionApi(\n params: { returnUrl: string },\n options: ApiClientOptions\n): Promise<ApiResponse<PortalSessionResponse>> {\n return browserApiRequest(\"/api/v1/billing/portal\", {\n method: \"POST\",\n body: params,\n ...options,\n });\n}\n\nexport async function cancelSubscriptionApi(\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean; metadata: ResponseMetadata }>> {\n return browserApiRequest(\"/api/v1/billing/subscription/cancel\", {\n method: \"POST\",\n body: {},\n ...options,\n });\n}\n\nexport async function purchaseCreditsApi(\n params: { packageId: string; successUrl?: string; cancelUrl?: string },\n options: ApiClientOptions\n): Promise<ApiResponse<CreateCheckoutResponse>> {\n return browserApiRequest(\"/api/v1/billing/credits/purchase\", {\n method: \"POST\",\n body: params,\n ...options,\n });\n}\n\n// =============================================================================\n// PROVISIONING API (DEPRECATED - use domain packages instead)\n// =============================================================================\n\n/**\n * @deprecated Use `provisionAgentsApi` from `@elqnt/agents/api` instead\n */\nexport async function provisionDefaultAgentsApi(\n definitions: unknown[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionAgentsResponse>> {\n return browserApiRequest(\"/api/v1/admin/provision/agents\", {\n method: \"POST\",\n body: { definitions },\n ...options,\n });\n}\n\n/**\n * @deprecated Use `provisionEntitiesApi` from `@elqnt/entity/api` instead\n */\nexport async function provisionEntitiesApi(\n definitions: unknown[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionEntitiesResponse>> {\n return browserApiRequest(\"/api/v1/admin/entities/update\", {\n method: \"POST\",\n body: { definitions },\n ...options,\n });\n}\n\n/**\n * @deprecated Use `provisionWorkflowsApi` from `@elqnt/workflow/api` instead (coming soon)\n */\nexport async function provisionWorkflowsApi(\n definitions: unknown[],\n options: ApiClientOptions\n): Promise<ApiResponse<ProvisionWorkflowsResponse>> {\n return browserApiRequest(\"/api/v1/admin/provision/workflows\", {\n method: \"POST\",\n body: { definitions },\n ...options,\n });\n}\n\n// =============================================================================\n// ADMIN CRUD APIs\n// =============================================================================\n\nexport * from \"./orgs\";\nexport * from \"./users\";\nexport * from \"./invites\";\n// (analytics API moved to @elqnt/analytics/api.\n// provisioning API removed — per-org artifact provisioning is gone.\n// See docs/_db_v2/03_system_org_split.md.)\n\n// =============================================================================\n// RE-EXPORTS\n// =============================================================================\n\nexport type {\n OnboardingState,\n OnboardingResponse,\n OrgSettings,\n OrgSettingsResponse,\n Plan,\n OrganizationBilling,\n UsageSummary,\n CreditBalance,\n PlansResponse,\n SubscriptionResponse,\n CreditsResponse,\n ProvisionAgentsResponse,\n ProvisionEntitiesResponse,\n ProvisionWorkflowsResponse,\n // Org types\n Org,\n OrgResponse,\n OrgInfoResponse,\n ListOrgsResponse,\n // User types\n User,\n UserResponse,\n ListUsersResponse,\n UserSettings,\n UserSettingsResponse,\n NotificationPreferences,\n // Invite types\n Invite,\n InviteResponse,\n ListInvitesResponse,\n InviteInput,\n InvitesResult,\n} from \"../models\";\n","/**\n * Organizations Admin API\n *\n * Browser-side API client for organization management.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n Org,\n OrgResponse,\n OrgInfoResponse,\n ListOrgsResponse,\n OrgStatusTS,\n OrgTypeTS,\n} from \"../models\";\n\n// =============================================================================\n// FILTER TYPES\n// =============================================================================\n\n/**\n * Filter options for listing organizations\n *\n * `product` is routing metadata: it selects which admin_<product> DB to read\n * from (empty → eloquent). It is not a stored column on the org.\n */\nexport interface ListOrgsFilter {\n status?: OrgStatusTS;\n type?: OrgTypeTS;\n product?: string;\n}\n\n// =============================================================================\n// ORGANIZATIONS CRUD\n// =============================================================================\n\n/**\n * List all organizations (admin scope required)\n * @param filter - Optional filter criteria\n * @param options - API client options\n */\nexport async function listOrgsApi(\n filter: ListOrgsFilter | undefined,\n options: ApiClientOptions\n): Promise<ApiResponse<ListOrgsResponse>> {\n const params = new URLSearchParams();\n if (filter?.status) params.set(\"status\", filter.status);\n if (filter?.type) params.set(\"type\", filter.type);\n if (filter?.product) params.set(\"product\", filter.product);\n\n const queryString = params.toString();\n const url = queryString ? `/api/v1/admin/orgs?${queryString}` : \"/api/v1/admin/orgs\";\n\n return browserApiRequest(url, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Create a new organization\n */\nexport async function createOrgApi(\n // `product` is transient routing metadata (which admin_<product> DB to write\n // to) sent alongside the org fields — it is not persisted on the org.\n org: Partial<Org> & { product?: string },\n options: ApiClientOptions\n): Promise<ApiResponse<OrgResponse>> {\n return browserApiRequest(\"/api/v1/admin/orgs\", {\n method: \"POST\",\n body: org,\n ...options,\n });\n}\n\n/**\n * Get an organization by ID\n */\nexport async function getOrgApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgResponse>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Update an organization\n */\nexport async function updateOrgApi(\n orgId: string,\n updates: Partial<Org>,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgResponse>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}`, {\n method: \"PUT\",\n body: updates,\n ...options,\n });\n}\n\n/**\n * Delete an organization\n */\nexport async function deleteOrgApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean }>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}`, {\n method: \"DELETE\",\n ...options,\n });\n}\n\n/**\n * Get organization info (lightweight response)\n */\nexport async function getOrgInfoApi(\n orgId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<OrgInfoResponse>> {\n return browserApiRequest(`/api/v1/admin/orgs/${orgId}/info`, {\n method: \"GET\",\n ...options,\n });\n}\n\n// (createOrgWithSchemasApi removed — per-org schema provisioning is gone.\n// See docs/_db_v2/03_system_org_split.md.)\n","/**\n * Users Admin API\n *\n * Browser-side API client for user management.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n User,\n UserResponse,\n ListUsersResponse,\n UserSettings,\n UserSettingsResponse,\n NotificationPreferences,\n} from \"../models\";\n\n// =============================================================================\n// USERS CRUD\n// =============================================================================\n\n/**\n * List all users in the organization\n */\nexport async function listUsersApi(\n options: ApiClientOptions\n): Promise<ApiResponse<ListUsersResponse>> {\n return browserApiRequest(\"/api/v1/admin/users\", {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Create a new user\n */\nexport async function createUserApi(\n user: Partial<User>,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(\"/api/v1/admin/users\", {\n method: \"POST\",\n body: user,\n ...options,\n });\n}\n\n/**\n * Get a user by ID\n */\nexport async function getUserApi(\n userId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get a user by email\n */\nexport async function getUserByEmailApi(\n email: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/by-email?email=${encodeURIComponent(email)}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Get a user by phone number (stored in metadata.phoneNumber)\n */\nexport async function getUserByPhoneApi(\n phone: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/by-phone?phone=${encodeURIComponent(phone)}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Update a user\n */\nexport async function updateUserApi(\n userId: string,\n updates: Partial<User>,\n options: ApiClientOptions\n): Promise<ApiResponse<UserResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}`, {\n method: \"PUT\",\n body: updates,\n ...options,\n });\n}\n\n/**\n * Delete a user\n */\nexport async function deleteUserApi(\n userId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean }>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}`, {\n method: \"DELETE\",\n ...options,\n });\n}\n\n// =============================================================================\n// USER SETTINGS\n// =============================================================================\n\n/**\n * Get user settings\n */\nexport async function getUserSettingsApi(\n userId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<UserSettingsResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}/settings`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Update user settings\n */\nexport async function updateUserSettingsApi(\n userId: string,\n settings: {\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n },\n options: ApiClientOptions\n): Promise<ApiResponse<UserSettingsResponse>> {\n return browserApiRequest(`/api/v1/admin/users/${userId}/settings`, {\n method: \"PUT\",\n body: settings,\n ...options,\n });\n}\n","/**\n * Invites Admin API\n *\n * Browser-side API client for invitation management.\n * Uses @elqnt/api-client for HTTP requests with automatic token management.\n */\n\nimport { browserApiRequest } from \"@elqnt/api-client/browser\";\nimport type { ApiResponse, ApiClientOptions } from \"@elqnt/api-client\";\nimport type {\n Invite,\n InviteResponse,\n ListInvitesResponse,\n InviteInput,\n InvitesResult,\n} from \"../models\";\n\n// =============================================================================\n// INVITES CRUD\n// =============================================================================\n\n/**\n * List all invites in the organization\n */\nexport async function listInvitesApi(\n options: ApiClientOptions\n): Promise<ApiResponse<ListInvitesResponse>> {\n return browserApiRequest(\"/api/v1/admin/invites\", {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Send invites to multiple users\n */\nexport async function sendInvitesApi(\n invites: InviteInput[],\n options: ApiClientOptions\n): Promise<ApiResponse<InvitesResult>> {\n return browserApiRequest(\"/api/v1/admin/invites\", {\n method: \"POST\",\n body: { invites },\n ...options,\n });\n}\n\n/**\n * Send a single invite\n */\nexport async function sendInviteApi(\n invite: InviteInput,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(\"/api/v1/admin/invites/single\", {\n method: \"POST\",\n body: invite,\n ...options,\n });\n}\n\n/**\n * Get an invite by ID\n */\nexport async function getInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}`, {\n method: \"GET\",\n ...options,\n });\n}\n\n/**\n * Resend an invite\n */\nexport async function resendInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}/resend`, {\n method: \"POST\",\n ...options,\n });\n}\n\n/**\n * Revoke an invite\n */\nexport async function revokeInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<{ success: boolean }>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}`, {\n method: \"DELETE\",\n ...options,\n });\n}\n\n/**\n * Accept an invite (used by invited users)\n */\nexport async function acceptInviteApi(\n inviteId: string,\n options: ApiClientOptions\n): Promise<ApiResponse<InviteResponse>> {\n return browserApiRequest(`/api/v1/admin/invites/${inviteId}/accept`, {\n method: \"POST\",\n ...options,\n });\n}\n"],"mappings":"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","names":["browserApiRequest","browserApiRequest","browserApiRequest","browserApiRequest"]}