@gymspace/sdk 1.9.1 → 1.9.4

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":["../src/errors.ts","../src/client.ts","../src/utils/agent-fetch.ts","../src/resources/base.ts","../src/resources/auth.ts","../src/resources/organizations.ts","../src/resources/gyms.ts","../src/resources/collaborators.ts","../src/resources/roles.ts","../src/resources/clients.ts","../src/resources/membership-plans.ts","../src/resources/contracts.ts","../src/resources/dashboard.ts","../src/resources/check-ins.ts","../src/resources/invitations.ts","../src/resources/assets.ts","../src/resources/files.ts","../src/resources/public-catalog.ts","../src/resources/admin-catalog.ts","../src/resources/health.ts","../src/models/onboarding.ts","../src/resources/onboarding.ts","../src/resources/products.ts","../src/resources/sales.ts","../src/resources/suppliers.ts","../src/resources/users.ts","../src/resources/subscriptions.ts","../src/resources/subscription-plans.ts","../src/resources/admin-subscription-management.ts","../src/resources/payment-methods.ts","../src/resources/whatsapp.ts","../src/resources/whatsapp-templates.ts","../src/resources/bulk-messaging.ts","../src/resources/activities.ts","../src/resources/tags.ts","../src/resources/commission-config.ts","../src/resources/commission-rules.ts","../src/resources/commission-calculations.ts","../src/resources/commission-reports.ts","../src/resources/commission-promotions.ts","../src/resources/messages.ts","../src/resources/credits.ts","../src/resources/pricing-packages.ts","../src/resources/promo-codes.ts","../src/sdk.ts","../node_modules/@gymspace/shared/src/types/whatsapp-templates.types.ts","../node_modules/@gymspace/shared/src/constants/template-codes.constants.ts","../node_modules/@gymspace/shared/src/constants/bulk-message-variables.ts","../node_modules/@gymspace/shared/src/constants.ts","../node_modules/@gymspace/shared/src/enums.ts","../node_modules/@gymspace/shared/src/events/whatsapp.events.ts","../node_modules/@gymspace/shared/src/events/bulk-messaging.events.ts","../node_modules/@gymspace/shared/src/events/activity.events.ts","../node_modules/@gymspace/shared/src/schemas/ai-template.schema.ts","../node_modules/@gymspace/shared/src/schemas/bulk-message.schema.ts","../node_modules/@gymspace/shared/src/schemas/activity-notification.schema.ts","../node_modules/@gymspace/shared/src/utils/roleHelpers.ts","../node_modules/@gymspace/shared/src/utils/phone.utils.ts","../src/models/commissions.ts","../src/models/catalog.ts","../src/models/credits.ts","../src/models/promo-codes.ts"],"names":["axios","OnboardingCacheStatus","OnboardingStep","UserType","SubscriptionStatus","CollaboratorStatus","InvitationStatus","ClientStatus","PlanStatus","PlanType","ContractStatus","CancellationReason","SuspensionType","PaymentFrequency","AssetStatus","AssetCategory","ContractAssetType","MessageStatus","z","RoleNames","CommissionRuleType","CommissionStatus","CommissionChangeType","CommissionEntityType","LeadGender","FeatureType","DiscountType"],"mappings":"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","file":"index.js","sourcesContent":["export class GymSpaceError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public code?: string,\n public details?: any,\n ) {\n super(message);\n this.name = 'GymSpaceError';\n }\n}\n\nexport class AuthenticationError extends GymSpaceError {\n constructor(message = 'Authentication failed') {\n super(message, 401, 'AUTHENTICATION_ERROR');\n this.name = 'AuthenticationError';\n }\n}\n\nexport class AuthorizationError extends GymSpaceError {\n constructor(message = 'Access denied') {\n super(message, 403, 'AUTHORIZATION_ERROR');\n this.name = 'AuthorizationError';\n }\n}\n\nexport class NotFoundError extends GymSpaceError {\n constructor(resource: string, id?: string) {\n const message = id ? `${resource} with id ${id} not found` : `${resource} not found`;\n super(message, 404, 'NOT_FOUND');\n this.name = 'NotFoundError';\n }\n}\n\nexport class ValidationError extends GymSpaceError {\n constructor(message: string, errors?: any) {\n super(message, 400, 'VALIDATION_ERROR', errors);\n this.name = 'ValidationError';\n }\n}\n\nexport class NetworkError extends GymSpaceError {\n constructor(message = 'Network request failed') {\n super(message, 0, 'NETWORK_ERROR');\n this.name = 'NetworkError';\n }\n}\n","import axios, {\n AxiosError,\n AxiosInstance,\n AxiosRequestConfig,\n InternalAxiosRequestConfig,\n} from 'axios';\nimport {\n AuthenticationError,\n AuthorizationError,\n GymSpaceError,\n NetworkError,\n NotFoundError,\n ValidationError,\n} from './errors';\nimport { GymSpaceConfig, RequestOptions } from './types';\n\nexport class ApiClient {\n private axiosInstance: AxiosInstance;\n private config: GymSpaceConfig;\n private refreshToken: string | null = null;\n private onTokenRefreshed?: (accessToken: string, refreshToken?: string) => void;\n\n public getAccessToken(): string | null {\n return this.config.apiKey || null;\n }\n\n constructor(config: GymSpaceConfig) {\n this.config = config;\n\n this.axiosInstance = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n paramsSerializer: (params) => {\n const parts: string[] = [];\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n\n // Convert arrays to comma-separated strings\n if (Array.isArray(value)) {\n if (value.length > 0) {\n // Encode each array element individually, then join with comma\n const encodedValues = value.map((v) => encodeURIComponent(String(v))).join(',');\n parts.push(`${encodeURIComponent(key)}=${encodedValues}`);\n }\n } else {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n });\n\n return parts.join('&');\n },\n });\n\n this.setupInterceptors();\n }\n\n private setupInterceptors(): void {\n // Request interceptor\n this.axiosInstance.interceptors.request.use(\n (config: InternalAxiosRequestConfig) => {\n // Check if this request should skip auth\n const skipAuth = (config as any).skipAuth;\n\n // Add Authorization header if auth token is configured and not skipped\n if (this.config.apiKey && config.headers && !skipAuth) {\n config.headers['Authorization'] = `Bearer ${this.config.apiKey}`;\n }\n\n // Add refresh token header if available (not skipped)\n if (this.refreshToken && this.config.apiKey && config.headers && !skipAuth) {\n config.headers['X-Refresh-Token'] = this.refreshToken;\n }\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n },\n );\n\n // Response interceptor - handle token refresh from backend\n this.axiosInstance.interceptors.response.use(\n (response) => {\n // Check if backend refreshed tokens\n const newAccessToken = response.headers['x-new-access-token'];\n const newRefreshToken = response.headers['x-new-refresh-token'];\n\n if (newAccessToken) {\n console.log('Tokens refreshed by backend, updating SDK...');\n this.setAuthToken(newAccessToken);\n\n if (newRefreshToken) {\n this.setRefreshToken(newRefreshToken);\n }\n\n // Notify client about token refresh\n if (this.onTokenRefreshed) {\n this.onTokenRefreshed(newAccessToken, newRefreshToken);\n }\n }\n\n return response;\n },\n async (error: AxiosError) => {\n throw this.handleError(error);\n },\n );\n }\n\n private handleError(error: AxiosError): GymSpaceError {\n const requestPath = error.config?.url || 'unknown';\n const method = error.config?.method?.toUpperCase() || 'unknown';\n\n if (!error.response) {\n console.error('Network Error:', {\n method,\n path: requestPath,\n error: error.message,\n });\n return new NetworkError(error.message);\n }\n\n const { status, data } = error.response;\n const errorData = data as any;\n const resource = errorData?.resource || 'unknown';\n\n console.error('HTTP Error:', {\n method,\n path: requestPath,\n status,\n resource,\n message: errorData?.message || error.message,\n errorCode: errorData?.code,\n details: errorData,\n });\n\n switch (status) {\n case 401:\n return new AuthenticationError(errorData?.message || 'Authentication failed');\n case 403:\n return new AuthorizationError(errorData?.message || 'Access denied');\n case 404:\n return new NotFoundError(errorData?.resource || 'Resource', errorData?.id);\n case 400:\n return new ValidationError(errorData?.message || 'Validation failed', errorData?.errors);\n default:\n return new GymSpaceError(\n errorData?.message || error.message,\n status,\n errorData?.code,\n errorData,\n );\n }\n }\n\n private mergeOptions(options?: RequestOptions): AxiosRequestConfig {\n const headers: Record<string, string> = { ...options?.headers };\n\n if (options?.gymId) {\n headers['X-Gym-Id'] = options.gymId;\n }\n\n return { headers };\n }\n\n async request<T>(\n method: string,\n path: string,\n data?: any,\n options?: RequestOptions & AxiosRequestConfig,\n ): Promise<T> {\n const { headers, skipAuth, ...axiosConfig } = options || {};\n\n const config: AxiosRequestConfig & { skipAuth?: boolean } = {\n method,\n url: path,\n ...this.mergeOptions({ headers }),\n ...axiosConfig,\n skipAuth, // Pass skipAuth flag to interceptor\n };\n\n if (data && ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())) {\n config.data = data;\n } else if (data && method.toUpperCase() === 'GET') {\n config.params = data;\n }\n\n const response = await this.axiosInstance.request<T>(config);\n return response.data;\n }\n\n get<T>(path: string, params?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('GET', path, params, options);\n }\n\n post<T>(path: string, data?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, data, options);\n }\n\n put<T>(path: string, data?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, data, options);\n }\n\n patch<T>(path: string, data?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('PATCH', path, data, options);\n }\n\n delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, undefined, options);\n }\n\n setAuthToken(token: string): void {\n this.config.apiKey = token;\n }\n\n setRefreshToken(token: string | null): void {\n this.refreshToken = token;\n }\n\n getRefreshToken(): string | null {\n return this.refreshToken;\n }\n\n /**\n * Set callback for when tokens are refreshed by backend\n */\n setOnTokenRefreshed(callback: (accessToken: string, refreshToken?: string) => void): void {\n this.onTokenRefreshed = callback;\n }\n\n /**\n * Get the token refresh callback\n */\n getOnTokenRefreshed(): ((accessToken: string, refreshToken?: string) => void) | undefined {\n return this.onTokenRefreshed;\n }\n\n setGymId(gymId: string): void {\n this.axiosInstance.defaults.headers.common['X-Gym-Id'] = gymId;\n }\n\n clearAuth(): void {\n delete this.config.apiKey;\n this.refreshToken = null;\n delete this.axiosInstance.defaults.headers.common['Authorization'];\n delete this.axiosInstance.defaults.headers.common['X-Gym-Id'];\n }\n\n getBaseUrl(): string {\n return this.config.baseURL;\n }\n}\n","import { ApiClient } from '../client';\n\nexport function createAgentFetch(apiClient: ApiClient, customFetch?: typeof globalThis.fetch) {\n const fetchFn = customFetch || fetch;\n\n return async (path: string, options?: RequestInit) => {\n const fullUrl = `${apiClient.getBaseUrl()}/agent${path}`;\n\n // Get gymId from axios instance headers\n const axiosInstance = (apiClient as any).axiosInstance;\n const gymId = axiosInstance?.defaults?.headers?.common?.['X-Gym-Id'];\n\n const headers = {\n 'Content-Type': 'application/json',\n ...(apiClient.getAccessToken() && { Authorization: `Bearer ${apiClient.getAccessToken()}` }),\n ...(gymId && { 'X-Gym-Id': gymId }),\n ...(options?.headers || {}),\n };\n\n return fetchFn(fullUrl, {\n ...options,\n headers,\n });\n };\n}\n","import { ApiClient } from '../client';\nimport { RequestOptions, PaginatedResponseDto, PaginationQueryDto } from '../types';\n\nexport abstract class BaseResource {\n constructor(protected client: ApiClient) {}\n\n protected async request<T>(\n path: string,\n options: {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n body?: string;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n const data = options.body ? JSON.parse(options.body) : undefined;\n \n switch (options.method) {\n case 'GET':\n return this.client.get<T>(path, data, { headers: options.headers });\n case 'POST':\n return this.client.post<T>(path, data, { headers: options.headers });\n case 'PUT':\n return this.client.put<T>(path, data, { headers: options.headers });\n case 'PATCH':\n return this.client.patch<T>(path, data, { headers: options.headers });\n case 'DELETE':\n return this.client.delete<T>(path, { headers: options.headers });\n default:\n throw new Error(`Unsupported HTTP method: ${options.method}`);\n }\n }\n\n protected buildPath(base: string, ...segments: (string | undefined)[]): string {\n const parts = [base];\n for (const segment of segments) {\n if (segment !== undefined) {\n parts.push(segment);\n }\n }\n return parts.join('/');\n }\n\n protected async paginate<T>(\n path: string,\n params?: PaginationQueryDto & Record<string, any>,\n options?: RequestOptions\n ): Promise<PaginatedResponseDto<T>> {\n return this.client.get<PaginatedResponseDto<T>>(path, params, options);\n }\n}","import {\n CurrentSessionResponse,\n InvitationValidationResponse,\n LoginDto,\n LoginResponseDto,\n RegisterCollaboratorDto,\n RegisterOwnerDto,\n ResendVerificationDto,\n VerifyEmailDto,\n ChangePasswordDto,\n ChangePasswordResponseDto,\n RequestPasswordResetDto,\n RequestPasswordResetResponseDto,\n VerifyResetCodeDto,\n VerifyResetCodeResponseDto,\n ResetPasswordDto,\n ResetPasswordResponseDto,\n ResendResetCodeDto,\n ResendResetCodeResponseDto,\n} from '../models/auth';\nimport { SubscriptionPlan } from '../models/subscriptions';\nimport { RequestOptions } from '../types';\nimport { BaseResource } from './base';\n\nexport class AuthResource extends BaseResource {\n private basePath = 'auth';\n\n async registerOwner(data: RegisterOwnerDto, options?: RequestOptions): Promise<void> {\n return this.client.post(`${this.basePath}/register/owner`, data, options);\n }\n\n async login(data: LoginDto, options?: RequestOptions): Promise<LoginResponseDto> {\n return this.client.post<LoginResponseDto>(`${this.basePath}/login`, data, options);\n }\n\n async refreshToken(refreshToken: string, options?: RequestOptions): Promise<LoginResponseDto> {\n return this.client.post<LoginResponseDto>(\n `${this.basePath}/refresh`,\n { refresh_token: refreshToken },\n options,\n );\n }\n\n async verifyEmail(\n data: VerifyEmailDto,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post(`${this.basePath}/verify-email`, data, options);\n }\n\n async resendVerification(\n data: ResendVerificationDto,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n console.log('the path', `${this.basePath}/resend-verification`);\n\n return this.client.post(`${this.basePath}/resend-verification`, data, options);\n }\n\n async getSubscriptionPlans(options?: RequestOptions): Promise<{ data: SubscriptionPlan[] }> {\n return this.client.get(`${this.basePath}/subscription-plans`, options);\n }\n\n async validateInvitation(\n token: string,\n options?: RequestOptions,\n ): Promise<InvitationValidationResponse> {\n return this.client.get(`${this.basePath}/invitation/${token}`, options);\n }\n\n async registerCollaborator(\n data: RegisterCollaboratorDto,\n options?: RequestOptions,\n ): Promise<LoginResponseDto> {\n return this.client.post<LoginResponseDto>(\n `${this.basePath}/register/collaborator`,\n data,\n options,\n );\n }\n\n async getCurrentSession(options?: RequestOptions): Promise<CurrentSessionResponse> {\n return this.client.get<CurrentSessionResponse>(`${this.basePath}/current-session`, options);\n }\n\n async changePassword(\n data: ChangePasswordDto,\n options?: RequestOptions,\n ): Promise<ChangePasswordResponseDto> {\n return this.client.post<ChangePasswordResponseDto>(\n `${this.basePath}/change-password`,\n data,\n options,\n );\n }\n\n async requestPasswordReset(\n data: RequestPasswordResetDto,\n options?: RequestOptions,\n ): Promise<RequestPasswordResetResponseDto> {\n return this.client.post<RequestPasswordResetResponseDto>(\n `${this.basePath}/password-reset/request`,\n data,\n options,\n );\n }\n\n async verifyResetCode(\n data: VerifyResetCodeDto,\n options?: RequestOptions,\n ): Promise<VerifyResetCodeResponseDto> {\n return this.client.post<VerifyResetCodeResponseDto>(\n `${this.basePath}/password-reset/verify-code`,\n data,\n options,\n );\n }\n\n async resetPassword(\n data: ResetPasswordDto,\n options?: RequestOptions,\n ): Promise<ResetPasswordResponseDto> {\n return this.client.post<ResetPasswordResponseDto>(\n `${this.basePath}/password-reset/reset`,\n data,\n options,\n );\n }\n\n async resendResetCode(\n data: ResendResetCodeDto,\n options?: RequestOptions,\n ): Promise<ResendResetCodeResponseDto> {\n return this.client.post<ResendResetCodeResponseDto>(\n `${this.basePath}/password-reset/resend-code`,\n data,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n Organization,\n UpdateOrganizationDto,\n OrganizationStats,\n OrganizationWithDetails,\n OrganizationAdminDetails,\n MyOrganization,\n SwitchOrganizationDto,\n SwitchOrganizationResponse,\n} from '../models/organizations';\nimport { RequestOptions } from '../types';\n\nexport class OrganizationsResource extends BaseResource {\n private basePath = 'organizations';\n\n async getOrganization(id: string, options?: RequestOptions): Promise<Organization> {\n return this.client.get<Organization>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateOrganization(\n id: string,\n data: UpdateOrganizationDto,\n options?: RequestOptions,\n ): Promise<Organization> {\n return this.client.put<Organization>(`${this.basePath}/${id}`, data, options);\n }\n\n async getOrganizationStats(id: string, options?: RequestOptions): Promise<OrganizationStats> {\n return this.client.get<OrganizationStats>(`${this.basePath}/${id}/stats`, undefined, options);\n }\n\n async listOrganizations(options?: RequestOptions): Promise<OrganizationWithDetails[]> {\n return this.client.get<OrganizationWithDetails[]>(`${this.basePath}/list`, undefined, options);\n }\n\n async getOrganizationForAdmin(\n id: string,\n options?: RequestOptions,\n ): Promise<OrganizationAdminDetails> {\n return this.client.get<OrganizationAdminDetails>(\n `${this.basePath}/admin/${id}`,\n undefined,\n options,\n );\n }\n\n async getMyOrganizations(options?: RequestOptions): Promise<MyOrganization[]> {\n return this.client.get<MyOrganization[]>(\n `${this.basePath}/my-organizations`,\n undefined,\n options,\n );\n }\n\n async switchOrganization(\n data: SwitchOrganizationDto,\n options?: RequestOptions,\n ): Promise<SwitchOrganizationResponse> {\n return this.client.post<SwitchOrganizationResponse>(`${this.basePath}/switch`, data, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Gym,\n CreateGymDto,\n UpdateGymDto,\n GymStats,\n UpdateGymScheduleDto,\n UpdateGymSocialMediaDto,\n UpdateGymInventorySettingsDto,\n UpdateGymContractSettingsDto,\n} from '../models/gyms';\nimport { RequestOptions } from '../types';\n\nexport class GymsResource extends BaseResource {\n private basePath = 'gyms';\n\n async createGym(data: CreateGymDto, options?: RequestOptions): Promise<Gym> {\n return this.client.post<Gym>(this.basePath, data, options);\n }\n\n async getOrganizationGyms(options?: RequestOptions): Promise<Gym[]> {\n return this.client.get<Gym[]>(this.basePath, undefined, options);\n }\n\n async getGym(id: string, options?: RequestOptions): Promise<Gym> {\n return this.client.get<Gym>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateGym(id: string, data: UpdateGymDto, options?: RequestOptions): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}`, data, options);\n }\n\n async getGymStats(id: string, options?: RequestOptions): Promise<GymStats> {\n return this.client.get<GymStats>(`${this.basePath}/${id}/stats`, undefined, options);\n }\n\n async toggleGymStatus(id: string, options?: RequestOptions): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}/toggle-status`, undefined, options);\n }\n\n async updateCurrentGym(\n data: Partial<{\n name?: string;\n address?: string;\n phone?: string;\n email?: string;\n assetId?: string;\n }>,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/current`, data, options);\n }\n\n async updateGymSchedule(\n id: string,\n data: UpdateGymScheduleDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}/schedule`, data, options);\n }\n\n async updateGymSocialMedia(\n id: string,\n data: UpdateGymSocialMediaDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}/social-media`, data, options);\n }\n\n /**\n * Update current gym inventory settings (stock configuration)\n * Uses gym from context (x-gym-id header)\n * @param data Inventory settings data\n * @param options Request options\n * @returns Updated gym with new settings\n *\n * @example\n * ```typescript\n * const gym = await sdk.gyms.updateInventorySettings({\n * defaultMinStock: 15,\n * defaultMaxStock: 1000,\n * enableLowStockAlerts: true\n * });\n * ```\n */\n async updateInventorySettings(\n data: UpdateGymInventorySettingsDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.patch<Gym>(`${this.basePath}/current/inventory-settings`, data, options);\n }\n\n /**\n * Update current gym contract expiration settings\n * Uses gym from context (x-gym-id header)\n * @param data Contract settings data\n * @param options Request options\n * @returns Updated gym with new settings\n *\n * @example\n * ```typescript\n * const gym = await sdk.gyms.updateContractSettings({\n * expiringSoonDays: 7,\n * gracePeriodDays: 0,\n * enableExpirationNotifications: true\n * });\n * ```\n */\n async updateContractSettings(\n data: UpdateGymContractSettingsDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.patch<Gym>(`${this.basePath}/current/contract-settings`, data, options);\n }\n\n /**\n * Soft delete a gym\n * Cannot delete gym with active contracts or collaborators\n * @param id Gym ID\n * @param options Request options\n * @returns Success response\n *\n * @example\n * ```typescript\n * const result = await sdk.gyms.deleteGym('gym-id');\n * console.log(result.success); // true\n * ```\n */\n async deleteGym(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n}\n","import { BaseResource } from './base';\nimport type {\n Collaborator,\n ListCollaboratorsParams,\n UpdateCollaboratorDto,\n UpdateCollaboratorStatusDto,\n UpdateCollaboratorRoleDto,\n ActivityQueryParams,\n StatsQueryParams,\n CollaboratorStats,\n ActivityItem,\n} from '@gymspace/shared';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CollaboratorsResource extends BaseResource {\n private basePath = 'collaborators';\n\n async list(\n params?: ListCollaboratorsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Collaborator>> {\n return this.paginate<Collaborator>(this.basePath, params, options);\n }\n\n async get(id: string, options?: RequestOptions): Promise<Collaborator> {\n return this.client.get<Collaborator>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async update(\n id: string,\n data: UpdateCollaboratorDto,\n options?: RequestOptions,\n ): Promise<Collaborator> {\n return this.client.patch<Collaborator>(`${this.basePath}/${id}`, data, options);\n }\n\n async updateRole(\n id: string,\n data: UpdateCollaboratorRoleDto,\n options?: RequestOptions,\n ): Promise<Collaborator> {\n return this.client.patch<Collaborator>(`${this.basePath}/${id}/role`, data, options);\n }\n\n async updateStatus(\n id: string,\n data: UpdateCollaboratorStatusDto,\n options?: RequestOptions,\n ): Promise<Collaborator> {\n return this.client.patch<Collaborator>(`${this.basePath}/${id}/status`, data, options);\n }\n\n async getActivity(\n id: string,\n params?: ActivityQueryParams,\n options?: RequestOptions,\n ): Promise<ActivityItem[]> {\n return this.client.get<ActivityItem[]>(`${this.basePath}/${id}/activity`, params, options);\n }\n\n async getStats(\n id: string,\n params?: StatsQueryParams,\n options?: RequestOptions,\n ): Promise<CollaboratorStats> {\n return this.client.get<CollaboratorStats>(`${this.basePath}/${id}/stats`, params, options);\n }\n}\n","import { BaseResource } from './base';\nimport type { Role } from '@gymspace/shared';\nimport type { PermissionsGroup } from '../models/roles';\nimport { RequestOptions } from '../types';\n\nexport class RolesResource extends BaseResource {\n private basePath = 'roles';\n\n /**\n * Get all roles of the organization (without pagination)\n */\n async getRoles(options?: RequestOptions): Promise<Role[]> {\n return this.client.get<Role[]>(this.basePath, undefined, options);\n }\n\n /**\n * Get a specific role by ID\n */\n async getRole(id: string, options?: RequestOptions): Promise<Role> {\n return this.client.get<Role>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Get all available permissions organized by category\n */\n async getAvailablePermissions(options?: RequestOptions): Promise<PermissionsGroup> {\n return this.client.get<PermissionsGroup>(`${this.basePath}/permissions`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Client,\n CreateClientDto,\n UpdateClientDto,\n ClientStats,\n ClientStat,\n SearchClientsParams,\n} from '../models/clients';\nimport { RequestOptions } from '../types';\n\nexport class ClientsResource extends BaseResource {\n private basePath = 'clients';\n\n async createClient(data: CreateClientDto, options?: RequestOptions): Promise<Client> {\n return this.client.post<Client>(this.basePath, data, options);\n }\n\n async searchClients(params?: SearchClientsParams, options?: RequestOptions): Promise<Client[]> {\n return this.client.get<Client[]>(this.basePath, params, options);\n }\n\n async getClient(id: string, options?: RequestOptions): Promise<Client> {\n return this.client.get<Client>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateClient(id: string, data: UpdateClientDto, options?: RequestOptions): Promise<Client> {\n return this.client.put<Client>(`${this.basePath}/${id}`, data, options);\n }\n\n async toggleClientStatus(id: string, options?: RequestOptions): Promise<Client> {\n return this.client.put<Client>(`${this.basePath}/${id}/toggle-status`, undefined, options);\n }\n\n async getClientStats(id: string, options?: RequestOptions): Promise<ClientStats> {\n return this.client.get<ClientStats>(`${this.basePath}/${id}/stats`, undefined, options);\n }\n\n async getClientStat(id: string, statKey: string, options?: RequestOptions): Promise<ClientStat> {\n return this.client.get<ClientStat>(\n `${this.basePath}/${id}/stats/${statKey}`,\n undefined,\n options,\n );\n }\n\n async getClientStatsByCategory(\n id: string,\n category: string,\n options?: RequestOptions,\n ): Promise<ClientStat[]> {\n return this.client.get<ClientStat[]>(\n `${this.basePath}/${id}/stats/category/${category}`,\n undefined,\n options,\n );\n }\n\n async getAvailableStats(options?: RequestOptions): Promise<ClientStat[]> {\n return this.client.get<ClientStat[]>(`${this.basePath}/stats/available`, undefined, options);\n }\n\n async searchClientsForCheckIn(\n params?: SearchClientsParams,\n options?: RequestOptions,\n ): Promise<Client[]> {\n // This endpoint automatically includes contract status and only active clients\n return this.client.get<Client[]>(`${this.basePath}/search/check-in`, params, options);\n }\n}\n","import { BaseResource } from './base';\nimport { \n MembershipPlan, \n CreateMembershipPlanDto, \n UpdateMembershipPlanDto, \n MembershipPlanStats,\n GetMembershipPlansParams \n} from '../models/membership-plans';\nimport { RequestOptions } from '../types';\n\nexport class MembershipPlansResource extends BaseResource {\n private basePath = 'membership-plans';\n\n async createMembershipPlan(\n data: CreateMembershipPlanDto, \n options?: RequestOptions\n ): Promise<MembershipPlan> {\n return this.client.post<MembershipPlan>(this.basePath, data, options);\n }\n\n async getGymMembershipPlans(\n params?: GetMembershipPlansParams,\n options?: RequestOptions\n ): Promise<MembershipPlan[]> {\n return this.client.get<MembershipPlan[]>(this.basePath, params, options);\n }\n\n async getMembershipPlan(id: string, options?: RequestOptions): Promise<MembershipPlan> {\n return this.client.get<MembershipPlan>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateMembershipPlan(\n id: string,\n data: UpdateMembershipPlanDto,\n options?: RequestOptions\n ): Promise<MembershipPlan> {\n return this.client.put<MembershipPlan>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteMembershipPlan(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getMembershipPlanStats(\n id: string, \n options?: RequestOptions\n ): Promise<MembershipPlanStats> {\n return this.client.get<MembershipPlanStats>(\n `${this.basePath}/${id}/stats`, \n undefined, \n options\n );\n }\n}","import { BaseResource } from './base';\nimport {\n Contract,\n CreateContractDto,\n RenewContractDto,\n FreezeContractDto,\n CancelContractDto,\n SuspendContractDto,\n ResumeContractDto,\n ReactivateContractDto,\n GetContractsParams,\n ContractLifecycleEvent,\n CancellationAnalytics,\n} from '../models/contracts';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class ContractsResource extends BaseResource {\n private basePath = 'contracts';\n\n async createContract(data: CreateContractDto, options?: RequestOptions): Promise<Contract> {\n return this.client.post<Contract>(this.basePath, data, options);\n }\n\n async getGymContracts(\n params?: GetContractsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Contract>> {\n return this.paginate<Contract>(this.basePath, params, options);\n }\n\n async getContract(id: string, options?: RequestOptions): Promise<Contract> {\n return this.client.get<Contract>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async getClientContracts(clientId: string, options?: RequestOptions): Promise<Contract[]> {\n return this.client.get<Contract[]>(`${this.basePath}/client/${clientId}`, undefined, options);\n }\n\n async renewContract(\n id: string,\n data: RenewContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/renew`, data, options);\n }\n\n async freezeContract(\n id: string,\n data: FreezeContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/freeze`, data, options);\n }\n\n async cancelContract(\n id: string,\n data: CancelContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.put<Contract>(`${this.basePath}/${id}/cancel`, data, options);\n }\n\n async suspendContract(\n id: string,\n data: SuspendContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/suspend`, data, options);\n }\n\n async resumeContract(\n id: string,\n data: ResumeContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/resume`, data, options);\n }\n\n async reactivateContract(\n id: string,\n data: ReactivateContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/reactivate`, data, options);\n }\n\n async getLifecycleHistory(\n id: string,\n options?: RequestOptions,\n ): Promise<ContractLifecycleEvent[]> {\n return this.client.get<ContractLifecycleEvent[]>(\n `${this.basePath}/${id}/lifecycle-history`,\n undefined,\n options,\n );\n }\n\n async getCancellationAnalytics(\n params?: { startDate?: string; endDate?: string },\n options?: RequestOptions,\n ): Promise<CancellationAnalytics> {\n return this.client.get<CancellationAnalytics>(\n `${this.basePath}/analytics/cancellation-reasons`,\n params,\n options,\n );\n }\n\n async resendWhatsAppNotification(\n contractId: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post<{ success: boolean; message: string }>(\n `${this.basePath}/${contractId}/resend-whatsapp`,\n {},\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n DashboardStats,\n ExpiringContract,\n ContractsRevenue,\n SalesRevenue,\n Debts,\n CheckIns,\n NewClients,\n DateRangeParams,\n CheckInsList,\n} from '../models/dashboard';\n\nexport class DashboardResource extends BaseResource {\n /**\n * Get dashboard statistics (lightweight counts only)\n * @returns Dashboard statistics including client and contract counts\n */\n async getStats(): Promise<DashboardStats> {\n return this.client.get<DashboardStats>('/dashboard/stats');\n }\n\n /**\n * Get contracts revenue within date range\n * @param params Optional date range parameters\n * @returns Contracts revenue data for the specified period\n */\n async getContractsRevenue(params?: DateRangeParams): Promise<ContractsRevenue> {\n return this.client.get<ContractsRevenue>('/dashboard/contracts-revenue', params);\n }\n\n /**\n * Get sales revenue within date range\n * @param params Optional date range parameters\n * @returns Sales revenue data for the specified period\n */\n async getSalesRevenue(params?: DateRangeParams): Promise<SalesRevenue> {\n return this.client.get<SalesRevenue>('/dashboard/sales-revenue', params);\n }\n\n /**\n * Get total debts within date range\n * @param params Optional date range parameters\n * @returns Outstanding debts data for the specified period\n */\n async getDebts(params?: DateRangeParams): Promise<Debts> {\n return this.client.get<Debts>('/dashboard/debts', params);\n }\n\n /**\n * Get check-ins count within date range\n * @param params Optional date range parameters\n * @returns Check-ins data for the specified period\n */\n async getCheckIns(params?: DateRangeParams): Promise<CheckIns> {\n return this.client.get<CheckIns>('/dashboard/check-ins', params);\n }\n\n /**\n * Get new clients count within date range\n * @param params Optional date range parameters\n * @returns New clients data for the specified period\n */\n async getNewClients(params?: DateRangeParams): Promise<NewClients> {\n return this.client.get<NewClients>('/dashboard/new-clients', params);\n }\n\n /**\n * Get expiring contracts within date range\n * @param limit Maximum number of contracts to return (default: 10)\n * @param params Optional date range parameters\n * @returns List of contracts expiring in the specified period\n */\n async getExpiringContracts(\n limit: number = 10,\n params?: DateRangeParams,\n ): Promise<ExpiringContract[]> {\n return this.client.get<ExpiringContract[]>('/dashboard/expiring-contracts', {\n limit,\n ...params,\n });\n }\n\n /**\n * Get detailed list of check-ins within date range\n * @param params Optional date range parameters (defaults to current day)\n * @returns Detailed list of check-ins with client and registeredBy information\n */\n async getCheckInsList(params?: DateRangeParams): Promise<CheckInsList> {\n return this.client.get<CheckInsList>('/dashboard/check-ins/list', params);\n }\n}\n","import { BaseResource } from './base';\nimport {\n CheckIn,\n CreateCheckInDto,\n SearchCheckInsParams,\n GetCheckInStatsParams,\n CheckInStats,\n GetClientCheckInHistoryParams,\n CurrentlyInGymResponse,\n CheckInListResponse,\n ClientCheckInHistory,\n} from '../models/check-ins';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CheckInsResource extends BaseResource {\n private basePath = 'check-ins';\n\n /**\n * Creates a new check-in for a client.\n *\n * **Permissions Required:**\n * - Gym owners with full gym access\n * - Active collaborators with CHECKINS_CREATE permission\n *\n * @param data - The check-in data including client ID and optional notes\n * @param options - Optional request configuration\n * @returns The created check-in record with client and user details\n * @throws {ValidationError} When client is not found or already checked in\n * @throws {AuthorizationError} When user lacks required permissions\n */\n async createCheckIn(data: CreateCheckInDto, options?: RequestOptions): Promise<CheckIn> {\n return this.client.post<CheckIn>(this.basePath, data, options);\n }\n\n async searchCheckIns(\n params?: SearchCheckInsParams,\n options?: RequestOptions,\n ): Promise<CheckInListResponse> {\n return this.client.get<CheckInListResponse>(this.basePath, params, options);\n }\n\n async getCurrentlyInGym(options?: RequestOptions): Promise<CurrentlyInGymResponse> {\n return this.client.get<CurrentlyInGymResponse>(`${this.basePath}/current`, undefined, options);\n }\n\n async getCheckIn(id: string, options?: RequestOptions): Promise<CheckIn> {\n return this.client.get<CheckIn>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Deletes a check-in record.\n *\n * **Permissions Required:**\n * - Gym owners with full gym access\n * - Active collaborators with CHECKINS_CREATE permission\n *\n * **Business Rules:**\n * - Only check-ins from today can be deleted\n * - The same permission level required for creation is required for deletion\n * - Cannot delete check-ins from previous days\n *\n * @param id - The ID of the check-in to delete\n * @param options - Optional request configuration\n * @returns Promise that resolves when the check-in is successfully deleted\n * @throws {NotFoundError} When the check-in is not found\n * @throws {AuthorizationError} When user lacks required permissions\n * @throws {ValidationError} When trying to delete a check-in from a previous day\n */\n async deleteCheckIn(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getGymCheckInStats(\n params: GetCheckInStatsParams,\n options?: RequestOptions,\n ): Promise<CheckInStats> {\n return this.client.get<CheckInStats>(\n `${this.basePath}/stats/${params.period}`,\n undefined,\n options,\n );\n }\n\n async getClientCheckInHistory(\n clientId: string,\n params?: GetClientCheckInHistoryParams,\n options?: RequestOptions,\n ): Promise<ClientCheckInHistory> {\n return this.client.get<ClientCheckInHistory>(\n `${this.basePath}/client/${clientId}/history`,\n params,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport type {\n Invitation,\n CreateInvitationDto,\n AcceptInvitationDto,\n ValidateByCodeDto,\n ValidateByTokenDto,\n} from '@gymspace/shared';\nimport { RequestOptions } from '../types';\n\nexport interface GetGymInvitationsParams {\n gymId: string;\n}\n\nexport class InvitationsResource extends BaseResource {\n private basePath = 'invitations';\n\n async createInvitation(data: CreateInvitationDto, options?: RequestOptions): Promise<Invitation> {\n return this.client.post<Invitation>(this.basePath, data, options);\n }\n\n async getGymInvitations(\n params: GetGymInvitationsParams,\n options?: RequestOptions,\n ): Promise<Invitation[]> {\n return this.client.get<Invitation[]>(this.basePath, params, options);\n }\n\n async validateByCode(\n data: ValidateByCodeDto,\n options?: RequestOptions,\n ): Promise<{ email: string; gymName: string; roleName: string; token: string }> {\n return this.client.post(`${this.basePath}/validate-by-code`, data, options);\n }\n\n async validateByToken(\n data: ValidateByTokenDto,\n options?: RequestOptions,\n ): Promise<{ email: string; gymName: string; roleName: string; token: string }> {\n return this.client.post(`${this.basePath}/validate-by-token`, data, options);\n }\n\n async acceptInvitation(data: AcceptInvitationDto, options?: RequestOptions): Promise<void> {\n return this.client.post<void>(`${this.basePath}/accept`, data, options);\n }\n\n async cancelInvitation(id: string, options?: RequestOptions): Promise<void> {\n return this.client.put<void>(`${this.basePath}/${id}/cancel`, undefined, options);\n }\n\n async resendInvitation(id: string, options?: RequestOptions): Promise<void> {\n return this.client.post<void>(`${this.basePath}/${id}/resend`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport type { AssetResponseDto } from '../models/assets';\n\nexport class AssetsResource extends BaseResource {\n /**\n * Upload a new asset\n */\n async upload(data: {\n file: File;\n description?: string;\n metadata?: Record<string, any>;\n }): Promise<AssetResponseDto> {\n const formData = new FormData();\n formData.append('file', data.file);\n\n if (data.description) {\n formData.append('description', data.description);\n }\n\n if (data.metadata) {\n formData.append('metadata', JSON.stringify(data.metadata));\n }\n\n return await this.client.post<AssetResponseDto>('/assets/upload', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n }\n\n /**\n * Get a single asset by ID\n */\n async findOne(id: string): Promise<AssetResponseDto> {\n return await this.client.get<AssetResponseDto>(`/assets/${id}`);\n }\n\n /**\n * Get multiple assets by IDs\n */\n async findByIds(ids: string[]): Promise<AssetResponseDto[]> {\n if (!ids || ids.length === 0) {\n return [];\n }\n\n // El segundo parámetro del get son los params directamente\n return await this.client.get<AssetResponseDto[]>('/assets/by-ids', {\n ids: ids.join(',')\n });\n }\n\n /**\n * Get all assets for the current gym\n */\n async findAll(): Promise<AssetResponseDto[]> {\n return await this.client.get<AssetResponseDto[]>('/assets');\n }\n\n /**\n * Delete an asset\n */\n async delete(id: string): Promise<void> {\n await this.client.delete(`/assets/${id}`);\n }\n\n /**\n * Get a signed download URL for an asset\n */\n async getDownloadUrl(id: string): Promise<{ url: string; filename: string }> {\n return await this.client.get<{ url: string; filename: string }>(`/assets/${id}/download-url`);\n }\n\n /**\n * Download an asset as a blob\n */\n async download(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/assets/${id}/download`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n\n /**\n * Get the render URL for an asset (for inline display)\n * This returns the URL directly without making an API call\n */\n getRenderUrl(id: string): string {\n return `${this.client.getBaseUrl()}/assets/${id}/render`;\n }\n\n /**\n * Get asset blob for rendering/preview\n */\n async render(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/assets/${id}/render`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n}\n","import { BaseResource } from './base';\nimport type { FileResponseDto } from '../models/files';\n\nexport class FilesResource extends BaseResource {\n /**\n * Upload a new file\n */\n async upload(data: {\n file: File;\n description?: string;\n metadata?: Record<string, any>;\n }): Promise<FileResponseDto> {\n const formData = new FormData();\n formData.append('file', data.file);\n\n if (data.description) {\n formData.append('description', data.description);\n }\n\n if (data.metadata) {\n formData.append('metadata', JSON.stringify(data.metadata));\n }\n\n return await this.client.post<FileResponseDto>('/files/upload', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n }\n\n /**\n * Get all files for the current user\n */\n async findAll(): Promise<FileResponseDto[]> {\n return await this.client.get<FileResponseDto[]>('/files');\n }\n\n /**\n * Get a single file by ID\n */\n async findOne(id: string): Promise<FileResponseDto> {\n return await this.client.get<FileResponseDto>(`/files/${id}`);\n }\n\n /**\n * Get multiple files by IDs\n */\n async findByIds(ids: string[]): Promise<FileResponseDto[]> {\n if (!ids || ids.length === 0) {\n return [];\n }\n\n // The second parameter of get is the params directly\n return await this.client.get<FileResponseDto[]>('/files/by-ids', {\n ids: ids.join(',')\n });\n }\n\n /**\n * Delete a file\n */\n async delete(id: string): Promise<void> {\n await this.client.delete(`/files/${id}`);\n }\n\n /**\n * Download a file as a blob\n */\n async download(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/files/${id}/download`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n\n /**\n * Get the render URL for a file (for inline display)\n * This returns the URL directly without making an API call\n */\n getRenderUrl(id: string): string {\n return `${this.client.getBaseUrl()}/files/${id}/render`;\n }\n\n /**\n * Get file blob for rendering/preview\n */\n async render(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/files/${id}/render`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n}","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\nimport {\n CatalogResponse,\n CatalogGym,\n CityWithGyms,\n SearchCatalogParams,\n SearchCatalogResponse,\n CreateLeadDto,\n LeadSubmissionResponse,\n} from '../models/catalog';\n\n/**\n * Public Catalog Resource\n * Handles public-facing catalog operations (no authentication required)\n */\nexport class PublicCatalogResource extends BaseResource {\n private basePath = 'catalog';\n\n /**\n * Search gyms in the public catalog\n */\n async searchCatalog(\n params?: SearchCatalogParams,\n options?: RequestOptions\n ): Promise<SearchCatalogResponse> {\n return this.client.get<SearchCatalogResponse>(`${this.basePath}/search`, params, options);\n }\n\n /**\n * Get featured gyms\n */\n async getFeaturedGyms(limit?: number, options?: RequestOptions): Promise<CatalogGym[]> {\n const params = limit ? { limit: String(limit) } : undefined;\n return this.client.get<CatalogGym[]>(`${this.basePath}/featured`, params, options);\n }\n\n /**\n * Get list of cities with available gyms\n */\n async getCitiesWithGyms(options?: RequestOptions): Promise<CityWithGyms[]> {\n return this.client.get<CityWithGyms[]>(`${this.basePath}/cities`, undefined, options);\n }\n\n /**\n * Get complete catalog details by gym slug\n */\n async getCatalogBySlug(slug: string, options?: RequestOptions): Promise<CatalogResponse> {\n return this.client.get<CatalogResponse>(`${this.basePath}/${slug}`, undefined, options);\n }\n\n /**\n * Submit a lead form for a specific gym\n */\n async submitLead(\n slug: string,\n data: CreateLeadDto,\n options?: RequestOptions\n ): Promise<LeadSubmissionResponse> {\n return this.client.post<LeadSubmissionResponse>(`${this.basePath}/${slug}/lead`, data, options);\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\nimport { GymCatalog, UpdateCatalogConfigDto, CatalogLead, LeadFiltersDto } from '../models/catalog';\n\n/**\n * Admin Catalog Resource\n * Handles catalog administration operations (requires authentication and CATALOG permissions)\n */\nexport class AdminCatalogResource extends BaseResource {\n private basePath = 'admin/catalog';\n\n /**\n * Get catalog configuration for the current gym\n * Requires: CATALOG_READ permission\n */\n async getCatalogConfig(options?: RequestOptions): Promise<GymCatalog> {\n return this.client.get<GymCatalog>(this.basePath, undefined, options);\n }\n\n /**\n * Update catalog configuration\n * Requires: CATALOG_UPDATE permission\n */\n async updateCatalogConfig(\n data: UpdateCatalogConfigDto,\n options?: RequestOptions,\n ): Promise<GymCatalog> {\n return this.client.put<GymCatalog>(this.basePath, data, options);\n }\n\n /**\n * Get catalog leads with optional filtering\n * Requires: CATALOG_READ permission\n */\n async getLeads(\n filters?: LeadFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CatalogLead>> {\n return this.client.get<PaginatedResponseDto<CatalogLead>>(\n `${this.basePath}/leads`,\n filters,\n options,\n );\n }\n\n /**\n * Mark a lead as contacted\n * Requires: CATALOG_UPDATE permission\n */\n async markLeadAsContacted(\n leadId: string,\n options?: RequestOptions,\n ): Promise<{ id: string; isContacted: boolean; contactedAt: string }> {\n return this.client.patch<{ id: string; isContacted: boolean; contactedAt: string }>(\n `${this.basePath}/leads/${leadId}/mark-contacted`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\n\nexport interface HealthResponse {\n status: string;\n timestamp: string;\n}\n\nexport interface ReadyResponse {\n status: string;\n services: {\n database: boolean;\n cache: boolean;\n storage: boolean;\n };\n}\n\nexport class HealthResource extends BaseResource {\n private basePath = 'health';\n\n async health(options?: RequestOptions): Promise<HealthResponse> {\n return this.client.get<HealthResponse>(this.basePath, undefined, options);\n }\n\n async ready(options?: RequestOptions): Promise<ReadyResponse> {\n return this.client.get<ReadyResponse>(`${this.basePath}/ready`, undefined, options);\n }\n}","export interface StartOnboardingData {\n name: string;\n email: string;\n phone: string;\n password: string;\n organizationName: string;\n country: string;\n currency: string;\n timezone: string;\n}\n\nexport enum OnboardingCacheStatus {\n PROCESSING = 'PROCESSING',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n}\n\nexport interface StartOnboardingResponse {\n status: OnboardingCacheStatus;\n email: string;\n access_token: string;\n refresh_token: string;\n user: {\n id: string;\n email: string;\n name: string;\n userType: string;\n };\n}\n\nexport interface OnboardingStatusResponse {\n status: OnboardingCacheStatus;\n currentStep?: string; // 'setup-organization' | 'setup-gym' | 'setup-features' | 'finalizing'\n progress?: number; // 0-100\n message?: string; // Backend progress message\n user?: {\n id: string;\n email: string;\n name: string;\n userType: string;\n };\n organization?: {\n id: string;\n name: string;\n organizationCode: string;\n };\n gym?: {\n id: string;\n name: string;\n };\n access_token?: string;\n refresh_token?: string;\n lastActiveGymId?: string;\n lastActiveOrganizationId?: string;\n error?: string;\n onboardingStatus?: OnboardingStatus;\n}\n\nexport interface BusinessHours {\n open: string;\n close: string;\n closed: boolean;\n}\n\nexport interface WeeklySchedule {\n monday: BusinessHours;\n tuesday: BusinessHours;\n wednesday: BusinessHours;\n thursday: BusinessHours;\n friday: BusinessHours;\n saturday: BusinessHours;\n sunday: BusinessHours;\n}\n\nexport interface Amenities {\n hasParking: boolean;\n hasShowers: boolean;\n hasLockers: boolean;\n hasPool: boolean;\n hasSauna: boolean;\n hasWifi: boolean;\n hasChildcare: boolean;\n hasCafeteria: boolean;\n}\n\nexport interface SocialMedia {\n facebook?: string;\n instagram?: string;\n twitter?: string;\n website?: string;\n}\n\nexport interface UpdateGymSettingsData {\n gymId: string;\n name: string;\n address: string;\n city: string;\n state: string;\n postalCode: string;\n phone: string;\n email: string;\n businessHours: WeeklySchedule;\n capacity: number;\n description?: string;\n amenities: Amenities;\n socialMedia?: SocialMedia;\n logo?: string;\n coverPhoto?: string;\n primaryColor?: string;\n}\n\nexport interface ClientManagementFeatures {\n enabled: boolean;\n requireDocumentId: boolean;\n enablePhotos: boolean;\n trackEmergencyContacts: boolean;\n trackMedicalConditions: boolean;\n}\n\nexport interface MembershipManagementFeatures {\n enabled: boolean;\n allowCustomPricing: boolean;\n allowContractFreezing: boolean;\n expiryWarningDays: number;\n autoRenewalReminders: boolean;\n}\n\nexport interface CheckInSystemFeatures {\n enabled: boolean;\n requireActiveContract: boolean;\n trackCheckInTime: boolean;\n allowMultiplePerDay: boolean;\n}\n\nexport interface NotificationSettings {\n emailEnabled: boolean;\n smsEnabled: boolean;\n welcomeEmails: boolean;\n contractExpiryAlerts: boolean;\n}\n\nexport interface ConfigureFeaturesData {\n gymId: string;\n clientManagement: ClientManagementFeatures;\n membershipManagement: MembershipManagementFeatures;\n checkInSystem: CheckInSystemFeatures;\n notifications: NotificationSettings;\n}\n\nexport interface CompleteGuidedSetupData {\n gymId: string;\n}\n\nexport enum OnboardingStep {\n ACCOUNT_CREATED = 'account_created',\n GYM_SETTINGS = 'gym_settings',\n FEATURES_CONFIGURED = 'features_configured',\n COMPLETED = 'completed',\n}\n\nexport interface OnboardingStatus {\n organizationId: string;\n gymId: string;\n currentStep: OnboardingStep;\n accountCreated: boolean;\n gymSettingsCompleted: boolean;\n featuresConfigured: boolean;\n isCompleted: boolean;\n nextAction: string;\n completionPercentage: number;\n}\n\nexport interface OnboardingResponse {\n success: boolean;\n gym?: any;\n onboardingStatus: OnboardingStatus;\n message?: string;\n}\n","import { BaseResource } from './base';\nimport {\n StartOnboardingData,\n StartOnboardingResponse,\n UpdateGymSettingsData,\n ConfigureFeaturesData,\n CompleteGuidedSetupData,\n OnboardingStatus,\n OnboardingResponse,\n OnboardingStatusResponse,\n OnboardingCacheStatus,\n} from '../models/onboarding';\n\nexport class OnboardingResource extends BaseResource {\n /**\n * Start onboarding process (async)\n * Creates user account and triggers background setup\n * Returns immediately with PROCESSING status\n * Use getStatusByEmail() to poll for completion\n */\n async start(data: StartOnboardingData): Promise<StartOnboardingResponse> {\n const response = await this.client.post<StartOnboardingResponse>(\n '/onboarding/start',\n data,\n { skipAuth: true }, // Public endpoint - no auth required\n );\n\n // Store tokens after successful onboarding start\n if (response.access_token) {\n this.client.setAuthToken(response.access_token);\n }\n\n return response;\n }\n\n /**\n * Get onboarding status by email (polling endpoint)\n * Use this to check if async onboarding setup is complete\n *\n * @param email - User email to check status\n * @returns Status object with PROCESSING, COMPLETED, or FAILED\n */\n async getStatusByEmail(email: string): Promise<OnboardingStatusResponse> {\n return this.client.get<OnboardingStatusResponse>(\n '/onboarding/status',\n { email },\n { skipAuth: true },\n );\n }\n\n /**\n * Poll for onboarding completion\n * Automatically polls until status is COMPLETED or FAILED\n *\n * @param email - User email\n * @param options - Polling options\n * @returns Final status when completed or failed\n */\n async waitForCompletion(\n email: string,\n options: {\n maxAttempts?: number;\n intervalMs?: number;\n onProgress?: (attempt: number, status: OnboardingCacheStatus) => void;\n } = {},\n ): Promise<OnboardingStatusResponse> {\n const { maxAttempts = 60, intervalMs = 1000, onProgress } = options;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const status = await this.getStatusByEmail(email);\n\n if (onProgress) {\n onProgress(attempt, status.status);\n }\n\n if (status.status === OnboardingCacheStatus.COMPLETED) {\n return status;\n }\n\n if (status.status === OnboardingCacheStatus.FAILED) {\n throw new Error(`Onboarding failed: ${status.error || 'Unknown error'}`);\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n\n throw new Error('Onboarding timeout - process is still running in background');\n }\n\n /**\n * Updates basic gym settings (step 2 of onboarding)\n * Configure basic gym information like name, address, etc.\n */\n async updateGymSettings(data: UpdateGymSettingsData): Promise<OnboardingResponse> {\n return this.client.put<OnboardingResponse>('/onboarding/gym-settings', data);\n }\n\n /**\n * Configure gym features (step 3 of onboarding)\n * Enable/disable various management features\n */\n async configureFeatures(data: ConfigureFeaturesData): Promise<OnboardingResponse> {\n return this.client.put<OnboardingResponse>('/onboarding/configure-features', data);\n }\n\n /**\n * Mark onboarding as complete\n */\n async completeSetup(data: CompleteGuidedSetupData): Promise<OnboardingResponse> {\n return this.client.post<OnboardingResponse>('/onboarding/complete', data);\n }\n\n /**\n * Get current onboarding status by gym ID\n * Check progress and next steps\n */\n async getStatus(gymId: string): Promise<OnboardingStatus> {\n return this.client.get<OnboardingStatus>(`/onboarding/status/${gymId}`);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Product,\n ProductCategory,\n StockMovement,\n CreateProductDto,\n CreateServiceDto,\n UpdateProductDto,\n UpdateStockDto,\n CreateProductCategoryDto,\n UpdateProductCategoryDto,\n SearchProductsParams,\n} from '../models/products';\nimport { RequestOptions } from '../types';\n\nexport class ProductsResource extends BaseResource {\n private basePath = 'products';\n\n // Product Category Methods\n async createCategory(\n data: CreateProductCategoryDto,\n options?: RequestOptions,\n ): Promise<ProductCategory> {\n return this.client.post<ProductCategory>(`${this.basePath}/categories`, data, options);\n }\n\n async getCategories(options?: RequestOptions): Promise<ProductCategory[]> {\n return this.client.get<ProductCategory[]>(`${this.basePath}/categories`, undefined, options);\n }\n\n async updateCategory(\n id: string,\n data: UpdateProductCategoryDto,\n options?: RequestOptions,\n ): Promise<ProductCategory> {\n return this.client.put<ProductCategory>(`${this.basePath}/categories/${id}`, data, options);\n }\n\n async deleteCategory(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/categories/${id}`, options);\n }\n\n // Product Methods\n async createProduct(data: CreateProductDto, options?: RequestOptions): Promise<Product> {\n return this.client.post<Product>(this.basePath, data, options);\n }\n\n async createService(data: CreateServiceDto, options?: RequestOptions): Promise<Product> {\n return this.client.post<Product>(`${this.basePath}/services`, data, options);\n }\n\n async searchProducts(\n params?: SearchProductsParams,\n options?: RequestOptions,\n ): Promise<Product[]> {\n return this.client.get<Product[]>(this.basePath, params, options);\n }\n\n async getProduct(id: string, options?: RequestOptions): Promise<Product> {\n return this.client.get<Product>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateProduct(\n id: string,\n data: UpdateProductDto,\n options?: RequestOptions,\n ): Promise<Product> {\n return this.client.put<Product>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteProduct(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async toggleProductStatus(id: string, options?: RequestOptions): Promise<Product> {\n return this.client.patch<Product>(`${this.basePath}/${id}/toggle-status`, undefined, options);\n }\n\n async updateStock(id: string, data: UpdateStockDto, options?: RequestOptions): Promise<Product> {\n return this.client.patch<Product>(`${this.basePath}/${id}/stock`, data, options);\n }\n\n async getLowStockProducts(threshold: number = 10, options?: RequestOptions): Promise<Product[]> {\n return this.client.get<Product[]>(`${this.basePath}/low-stock`, { threshold }, options);\n }\n\n async getProductStockMovements(id: string, options?: RequestOptions): Promise<StockMovement[]> {\n return this.client.get<StockMovement[]>(\n `${this.basePath}/${id}/stock-movements`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n Sale,\n CreateSaleDto,\n UpdateSaleDto,\n UpdatePaymentStatusDto,\n PaySaleDto,\n SearchSalesParams,\n SalesStats,\n TopSellingProduct,\n CustomerSalesReport,\n} from '../models/sales';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class SalesResource extends BaseResource {\n private basePath = 'sales';\n\n async createSale(data: CreateSaleDto, options?: RequestOptions): Promise<Sale> {\n return this.client.post<Sale>(this.basePath, data, options);\n }\n\n async searchSales(\n params?: SearchSalesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Sale>> {\n return this.paginate<Sale>(this.basePath, params, options);\n }\n\n async getSale(id: string, options?: RequestOptions): Promise<Sale> {\n return this.client.get<Sale>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateSale(id: string, data: UpdateSaleDto, options?: RequestOptions): Promise<Sale> {\n return this.client.put<Sale>(`${this.basePath}/${id}`, data, options);\n }\n\n async updatePaymentStatus(\n id: string,\n paymentStatus: 'paid' | 'unpaid',\n options?: RequestOptions,\n ): Promise<Sale> {\n return this.client.put<Sale>(\n `${this.basePath}/${id}/payment-status`,\n { paymentStatus },\n options,\n );\n }\n\n async paySale(id: string, data: PaySaleDto, options?: RequestOptions): Promise<Sale> {\n return this.client.post<Sale>(`${this.basePath}/${id}/payment`, data, options);\n }\n\n async deleteSale(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getSalesStats(\n startDate?: string,\n endDate?: string,\n options?: RequestOptions,\n ): Promise<SalesStats> {\n const params: Record<string, string> = {};\n if (startDate) params.startDate = startDate;\n if (endDate) params.endDate = endDate;\n\n return this.client.get<SalesStats>(\n `${this.basePath}/stats`,\n Object.keys(params).length > 0 ? params : undefined,\n options,\n );\n }\n\n async getTopSellingProducts(\n limit: number = 10,\n startDate?: string,\n endDate?: string,\n options?: RequestOptions,\n ): Promise<TopSellingProduct[]> {\n const params: Record<string, string | number> = { limit };\n if (startDate) params.startDate = startDate;\n if (endDate) params.endDate = endDate;\n\n return this.client.get<TopSellingProduct[]>(`${this.basePath}/top-products`, params, options);\n }\n\n async getSalesByCustomer(\n startDate?: string,\n endDate?: string,\n options?: RequestOptions,\n ): Promise<CustomerSalesReport> {\n const params: Record<string, string> = {};\n if (startDate) params.startDate = startDate;\n if (endDate) params.endDate = endDate;\n\n return this.client.get<CustomerSalesReport>(\n `${this.basePath}/reports/by-customer`,\n Object.keys(params).length > 0 ? params : undefined,\n options,\n );\n }\n\n async resendWhatsAppNotification(\n saleId: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post<{ success: boolean; message: string }>(\n `${this.basePath}/${saleId}/resend-whatsapp`,\n {},\n options,\n );\n }\n\n /**\n * Send payment reminder for unpaid sale via WhatsApp\n * @param saleId - ID of the sale\n * @param options - Request options\n * @returns Promise with success status and message\n * @throws {ApiError} If sale is already paid, customer has no phone, or sale not found\n */\n async sendPaymentReminder(\n saleId: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post<{ success: boolean; message: string }>(\n `${this.basePath}/${saleId}/send-payment-reminder`,\n {},\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { \n Supplier,\n CreateSupplierDto, \n UpdateSupplierDto,\n SearchSuppliersParams,\n SuppliersStats\n} from '../models/suppliers';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class SuppliersResource extends BaseResource {\n private basePath = 'suppliers';\n\n async createSupplier(data: CreateSupplierDto, options?: RequestOptions): Promise<Supplier> {\n return this.client.post<Supplier>(this.basePath, data, options);\n }\n\n async searchSuppliers(\n params?: SearchSuppliersParams,\n options?: RequestOptions\n ): Promise<PaginatedResponseDto<Supplier>> {\n return this.paginate<Supplier>(this.basePath, params, options);\n }\n\n async getSupplier(id: string, options?: RequestOptions): Promise<Supplier> {\n return this.client.get<Supplier>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateSupplier(\n id: string,\n data: UpdateSupplierDto,\n options?: RequestOptions\n ): Promise<Supplier> {\n return this.client.put<Supplier>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteSupplier(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getSuppliersStats(options?: RequestOptions): Promise<SuppliersStats> {\n return this.client.get<SuppliersStats>(`${this.basePath}/stats`, undefined, options);\n }\n}","import { BaseResource } from './base';\nimport { UserProfileDto, UpdateProfileDto } from '../models/users';\nimport { RequestOptions } from '../types';\n\nexport class UsersResource extends BaseResource {\n /**\n * Get the current user's profile\n * @param options - Request options\n * @returns User profile data\n */\n async getProfile(options?: RequestOptions): Promise<UserProfileDto> {\n return this.client.get<UserProfileDto>('/users/profile', undefined, options);\n }\n\n /**\n * Update the current user's profile\n * @param data - Profile update data\n * @param options - Request options\n * @returns Updated user profile\n */\n async updateProfile(\n data: UpdateProfileDto,\n options?: RequestOptions\n ): Promise<UserProfileDto> {\n return this.client.put<UserProfileDto>('/users/profile', data, options);\n }\n}","import {\n AvailablePlanDto,\n SubscriptionStatusDto,\n AffiliateOrganizationDto,\n CheckLimitResponse,\n} from '../models/subscriptions';\nimport { RequestOptions } from '../types';\nimport { BaseResource } from './base';\n\nexport class SubscriptionsResource extends BaseResource {\n private basePath = 'subscriptions';\n\n /**\n * Get available subscription plans (currently only free plans)\n */\n async getAvailablePlans(options?: RequestOptions): Promise<AvailablePlanDto[]> {\n return this.client.get<AvailablePlanDto[]>(`${this.basePath}/plans`, undefined, options);\n }\n\n /**\n * Get subscription status for an organization\n */\n async getSubscriptionStatus(\n organizationId: string,\n options?: RequestOptions,\n ): Promise<SubscriptionStatusDto> {\n return this.client.get<SubscriptionStatusDto>(\n `${this.basePath}/organizations/${organizationId}/status`,\n undefined,\n options,\n );\n }\n\n /**\n * Affiliate organization to a subscription plan\n */\n async affiliateOrganization(\n organizationId: string,\n data: AffiliateOrganizationDto,\n options?: RequestOptions,\n ): Promise<SubscriptionStatusDto> {\n return this.client.post<SubscriptionStatusDto>(\n `${this.basePath}/organizations/${organizationId}/affiliate`,\n data,\n options,\n );\n }\n\n /**\n * Check subscription limits\n * @param organizationId Organization ID\n * @param limitType Type of limit to check: 'gyms', 'clients', or 'users'\n */\n async checkSubscriptionLimit(\n organizationId: string,\n limitType: 'gyms' | 'clients' | 'users',\n options?: RequestOptions,\n ): Promise<CheckLimitResponse> {\n return this.client.get<CheckLimitResponse>(\n `${this.basePath}/organizations/${organizationId}/limits/${limitType}`,\n undefined,\n options,\n );\n }\n}","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\n\n// Import the types we'll define\nexport interface SubscriptionPlanDto {\n id: string;\n name: string;\n planType?: string;\n price: {\n PEN?: { currency: 'PEN'; value: number };\n USD?: { currency: 'USD'; value: number };\n COP?: { currency: 'COP'; value: number };\n MXN?: { currency: 'MXN'; value: number };\n };\n billingFrequency: string;\n duration?: number;\n durationPeriod?: string;\n maxGyms: number;\n maxClientsPerGym: number;\n maxUsersPerGym: number;\n features: Record<string, any>;\n description?: string;\n isActive: boolean;\n isVisibleToPublic: boolean;\n createdAt: Date;\n updatedAt: Date;\n activeSubscriptions?: number;\n totalOrganizations?: number;\n}\n\nexport interface PriceDto {\n currency: string;\n value: number;\n}\n\nexport interface PricingDto {\n PEN: PriceDto;\n}\n\nexport interface CreateSubscriptionPlanDto {\n name: string;\n planType?: string;\n price: PricingDto;\n billingFrequency: string;\n duration?: number;\n durationPeriod?: 'DAY' | 'MONTH';\n maxGyms: number;\n maxClientsPerGym: number;\n maxUsersPerGym: number;\n features: Record<string, any>;\n description?: string;\n isActive?: boolean;\n isVisibleToPublic?: boolean;\n}\n\nexport interface UpdateSubscriptionPlanDto {\n name?: string;\n planType?: string;\n price?: PricingDto;\n billingFrequency?: string;\n duration?: number;\n durationPeriod?: 'DAY' | 'MONTH';\n maxGyms?: number;\n maxClientsPerGym?: number;\n maxUsersPerGym?: number;\n features?: Record<string, any>;\n description?: string;\n isActive?: boolean;\n isVisibleToPublic?: boolean;\n}\n\nexport class SubscriptionPlansResource extends BaseResource {\n private basePath = 'admin/subscription-plans';\n private publicBasePath = 'subscription-plans/public';\n\n /**\n * List all active subscription plans (Public - no authentication required)\n */\n async listPublicPlans(options?: RequestOptions): Promise<SubscriptionPlanDto[]> {\n return this.client.get<SubscriptionPlanDto[]>(`${this.publicBasePath}`, undefined, options);\n }\n\n /**\n * List all subscription plans (Super Admin only)\n */\n async listPlans(options?: RequestOptions): Promise<SubscriptionPlanDto[]> {\n return this.client.get<SubscriptionPlanDto[]>(`${this.basePath}`, undefined, options);\n }\n\n /**\n * Create new subscription plan (Super Admin only)\n */\n async createPlan(\n data: CreateSubscriptionPlanDto,\n options?: RequestOptions,\n ): Promise<SubscriptionPlanDto> {\n return this.client.post<SubscriptionPlanDto>(`${this.basePath}`, data, options);\n }\n\n /**\n * Get subscription plan details (Super Admin only)\n */\n async getPlan(id: string, options?: RequestOptions): Promise<SubscriptionPlanDto> {\n return this.client.get<SubscriptionPlanDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Update subscription plan (Super Admin only)\n */\n async updatePlan(\n id: string,\n data: UpdateSubscriptionPlanDto,\n options?: RequestOptions,\n ): Promise<SubscriptionPlanDto> {\n return this.client.put<SubscriptionPlanDto>(`${this.basePath}/${id}`, data, options);\n }\n\n /**\n * Soft delete subscription plan (Super Admin only)\n */\n async deletePlan(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\n\n// Import types from existing subscriptions model and add new ones\nexport interface AdminSubscriptionStatusDto {\n id: string;\n organizationId: string;\n subscriptionPlanId: string;\n planName: string;\n status: string; // Should match SubscriptionStatus enum\n startDate: Date;\n endDate: Date;\n isActive: boolean;\n isExpired: boolean;\n daysRemaining: number;\n metadata?: Record<string, any>;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface ActivateRenewalDto {\n subscriptionPlanId?: string;\n durationMonths?: number;\n notes?: string;\n}\n\nexport interface CancelSubscriptionDto {\n reason: string;\n immediateTermination?: boolean;\n notes?: string;\n}\n\nexport interface UpgradeSubscriptionDto {\n newSubscriptionPlanId: string;\n immediateUpgrade?: boolean;\n notes?: string;\n}\n\nexport interface SubscriptionHistoryDto {\n id: string;\n planName: string;\n status: string; // Should match SubscriptionStatus enum\n startDate: Date;\n endDate: Date;\n isActive: boolean;\n metadata?: Record<string, any>;\n createdBy: {\n id: string;\n name: string;\n email: string;\n };\n createdAt: Date;\n}\n\nexport class AdminSubscriptionManagementResource extends BaseResource {\n private basePath = 'admin/organizations';\n\n /**\n * Activate subscription renewal for an organization (Super Admin only)\n */\n async activateRenewal(\n organizationId: string,\n data: ActivateRenewalDto,\n options?: RequestOptions,\n ): Promise<AdminSubscriptionStatusDto> {\n return this.client.post<AdminSubscriptionStatusDto>(\n `${this.basePath}/${organizationId}/subscriptions/activate-renewal`,\n data,\n options,\n );\n }\n\n /**\n * Cancel subscription for an organization (Super Admin only)\n */\n async cancelSubscription(\n organizationId: string,\n data: CancelSubscriptionDto,\n options?: RequestOptions,\n ): Promise<AdminSubscriptionStatusDto> {\n return this.client.post<AdminSubscriptionStatusDto>(\n `${this.basePath}/${organizationId}/subscriptions/cancel`,\n data,\n options,\n );\n }\n\n /**\n * Upgrade subscription plan for an organization (Super Admin only)\n */\n async upgradeSubscription(\n organizationId: string,\n data: UpgradeSubscriptionDto,\n options?: RequestOptions,\n ): Promise<AdminSubscriptionStatusDto> {\n return this.client.post<AdminSubscriptionStatusDto>(\n `${this.basePath}/${organizationId}/subscriptions/upgrade`,\n data,\n options,\n );\n }\n\n /**\n * Get subscription history for an organization (Super Admin only)\n */\n async getSubscriptionHistory(\n organizationId: string,\n options?: RequestOptions,\n ): Promise<SubscriptionHistoryDto[]> {\n return this.client.get<SubscriptionHistoryDto[]>(\n `${this.basePath}/${organizationId}/subscriptions/history`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { \n PaymentMethod,\n CreatePaymentMethodDto, \n UpdatePaymentMethodDto,\n SearchPaymentMethodsParams,\n PaymentMethodStats\n} from '../models/payment-methods';\nimport { RequestOptions } from '../types';\n\nexport class PaymentMethodsResource extends BaseResource {\n private basePath = 'payment-methods';\n\n async createPaymentMethod(data: CreatePaymentMethodDto, options?: RequestOptions): Promise<PaymentMethod> {\n return this.client.post<PaymentMethod>(this.basePath, data, options);\n }\n\n async searchPaymentMethods(\n params?: SearchPaymentMethodsParams,\n options?: RequestOptions\n ): Promise<PaymentMethod[]> {\n return this.client.get<PaymentMethod[]>(this.basePath, params, options);\n }\n\n async getPaymentMethod(id: string, options?: RequestOptions): Promise<PaymentMethod> {\n return this.client.get<PaymentMethod>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updatePaymentMethod(\n id: string,\n data: UpdatePaymentMethodDto,\n options?: RequestOptions\n ): Promise<PaymentMethod> {\n return this.client.put<PaymentMethod>(`${this.basePath}/${id}`, data, options);\n }\n\n async deletePaymentMethod(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async togglePaymentMethod(id: string, options?: RequestOptions): Promise<PaymentMethod> {\n return this.client.put<PaymentMethod>(`${this.basePath}/${id}/toggle`, undefined, options);\n }\n\n async getPaymentMethodStats(options?: RequestOptions): Promise<PaymentMethodStats> {\n return this.client.get<PaymentMethodStats>(`${this.basePath}/stats`, undefined, options);\n }\n}","import { BaseResource } from './base';\nimport {\n WhatsAppConfig,\n WhatsAppMessage,\n CreateWhatsAppConfigDto,\n UpdateWhatsAppConfigDto,\n SendWhatsAppMessageDto,\n SearchWhatsAppMessagesDto,\n ConnectionStatusResponse,\n InitializeConnectionResponse,\n Contact,\n DisconnectResponse,\n SendCatalogMessageDto,\n SendCatalogMessageResponse,\n} from '../models/whatsapp';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class WhatsAppResource extends BaseResource {\n private basePath = 'whatsapp';\n\n /**\n * Get WhatsApp configuration for the current gym\n */\n async getConfig(options?: RequestOptions): Promise<WhatsAppConfig> {\n return this.client.get<WhatsAppConfig>(`${this.basePath}/config`, undefined, options);\n }\n\n /**\n * Initialize WhatsApp connection\n * Returns QR code if needed\n */\n async initializeConnection(options?: RequestOptions): Promise<InitializeConnectionResponse> {\n return this.client.post<InitializeConnectionResponse>(\n `${this.basePath}/initialize`,\n {},\n options,\n );\n }\n\n /**\n * Update WhatsApp configuration\n */\n async updateConfig(\n data: UpdateWhatsAppConfigDto,\n options?: RequestOptions,\n ): Promise<WhatsAppConfig> {\n return this.client.put<WhatsAppConfig>(`${this.basePath}/config`, data, options);\n }\n\n /**\n * Get WhatsApp connection status\n */\n async getConnectionStatus(options?: RequestOptions): Promise<ConnectionStatusResponse> {\n return this.client.get<ConnectionStatusResponse>(\n `${this.basePath}/connection-status`,\n undefined,\n options,\n );\n }\n\n /**\n * Send a WhatsApp message\n */\n async sendMessage(\n data: SendWhatsAppMessageDto,\n options?: RequestOptions,\n ): Promise<WhatsAppMessage> {\n return this.client.post<WhatsAppMessage>(`${this.basePath}/send-message`, data, options);\n }\n\n /**\n * Get WhatsApp messages with pagination and filters\n */\n async getMessages(\n params?: SearchWhatsAppMessagesDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<WhatsAppMessage>> {\n return this.paginate<WhatsAppMessage>(`${this.basePath}/messages`, params, options);\n }\n\n /**\n * Get a specific WhatsApp message by ID\n */\n async getMessage(id: string, options?: RequestOptions): Promise<WhatsAppMessage> {\n return this.client.get<WhatsAppMessage>(`${this.basePath}/messages/${id}`, undefined, options);\n }\n\n async listContacts(options?: RequestOptions): Promise<Contact[]> {\n return this.client.get<Contact[]>(`${this.basePath}/contacts`, undefined, options);\n }\n\n /**\n * Disconnect WhatsApp instance\n * Logs out from WhatsApp without deleting the instance\n */\n async disconnect(options?: RequestOptions): Promise<DisconnectResponse> {\n return this.client.post<DisconnectResponse>(`${this.basePath}/disconnect`, {}, options);\n }\n\n /**\n * Send catalog message to multiple clients\n */\n async sendCatalogMessage(\n data: SendCatalogMessageDto,\n options?: RequestOptions,\n ): Promise<SendCatalogMessageResponse> {\n return this.client.post<SendCatalogMessageResponse>(\n `${this.basePath}/send-catalog`,\n data,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n WhatsAppTemplate,\n CreateTemplateDto,\n UpdateTemplateDto,\n SearchTemplatesDto,\n PreviewTemplateResponse,\n} from '../models/whatsapp';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\n// Import TemplateCode type from shared (re-exported via types)\ntype TemplateCode = string;\n\nexport class WhatsAppTemplatesResource extends BaseResource {\n private basePath = 'whatsapp/templates';\n\n /**\n * Create a new WhatsApp template\n */\n async create(data: CreateTemplateDto, options?: RequestOptions): Promise<WhatsAppTemplate> {\n return this.client.post<WhatsAppTemplate>(this.basePath, data, options);\n }\n\n /**\n * Get all WhatsApp templates with pagination and filters\n */\n async findAll(\n params?: SearchTemplatesDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<WhatsAppTemplate>> {\n return this.paginate<WhatsAppTemplate>(this.basePath, params, options);\n }\n\n /**\n * Get a specific WhatsApp template by ID\n */\n async findOne(id: string, options?: RequestOptions): Promise<WhatsAppTemplate> {\n return this.client.get<WhatsAppTemplate>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Get a WhatsApp template by code\n */\n async findByCode(code: TemplateCode, options?: RequestOptions): Promise<WhatsAppTemplate> {\n return this.client.get<WhatsAppTemplate>(`${this.basePath}/code/${code}`, undefined, options);\n }\n\n /**\n * Update a WhatsApp template\n */\n async update(\n id: string,\n data: UpdateTemplateDto,\n options?: RequestOptions,\n ): Promise<WhatsAppTemplate> {\n return this.client.put<WhatsAppTemplate>(`${this.basePath}/${id}`, data, options);\n }\n\n /**\n * Delete a WhatsApp template\n */\n async remove(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n /**\n * Preview a template with variables\n */\n async preview(\n id: string,\n variables: Record<string, any>,\n options?: RequestOptions,\n ): Promise<PreviewTemplateResponse> {\n return this.client.post<PreviewTemplateResponse>(\n `${this.basePath}/${id}/preview`,\n variables,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\nimport {\n BulkTemplate,\n CreateBulkTemplateDto,\n UpdateBulkTemplateDto,\n BulkMessageVariable,\n SendBulkMessagesDto,\n BulkMessageResultDto,\n BulkLogsResponseDto,\n GenerateAIMessageDto,\n GenerateAIMessageResponseDto,\n} from '../models/bulk-messaging';\n\nexport class BulkMessagingResource extends BaseResource {\n private basePath = 'whatsapp/bulk-messaging';\n private templatesPath = 'whatsapp/bulk-templates';\n\n async createTemplate(\n data: CreateBulkTemplateDto,\n options?: RequestOptions,\n ): Promise<BulkTemplate> {\n return this.client.post<BulkTemplate>(this.templatesPath, data, options);\n }\n\n async getTemplates(options?: RequestOptions): Promise<BulkTemplate[]> {\n return this.client.get<BulkTemplate[]>(this.templatesPath, undefined, options);\n }\n\n async getTemplate(id: string, options?: RequestOptions): Promise<BulkTemplate> {\n return this.client.get<BulkTemplate>(`${this.templatesPath}/${id}`, undefined, options);\n }\n\n async updateTemplate(\n id: string,\n data: UpdateBulkTemplateDto,\n options?: RequestOptions,\n ): Promise<BulkTemplate> {\n return this.client.put<BulkTemplate>(`${this.templatesPath}/${id}`, data, options);\n }\n\n async deleteTemplate(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.templatesPath}/${id}`, options);\n }\n\n async getAvailableVariables(options?: RequestOptions): Promise<BulkMessageVariable[]> {\n return this.client.get<BulkMessageVariable[]>(\n `${this.basePath}/available-variables`,\n undefined,\n options,\n );\n }\n\n /**\n * Generate AI message with streaming support\n * Note: This proxies to the agent endpoint for streaming responses\n */\n async generateAIMessage(\n data: GenerateAIMessageDto,\n options?: RequestOptions,\n ): Promise<GenerateAIMessageResponseDto> {\n return this.client.post<GenerateAIMessageResponseDto>(\n `${this.basePath}/generate-ai`,\n data,\n options,\n );\n }\n\n /**\n * Send bulk messages to multiple clients\n * Note: SDK sends clientIds, API fetches full client and gym data before sending to agent\n */\n async send(data: SendBulkMessagesDto, options?: RequestOptions): Promise<BulkMessageResultDto> {\n return this.client.post<BulkMessageResultDto>(`${this.basePath}/send`, data, options);\n }\n\n /**\n * Get logs for a bulk message send operation\n */\n async getLogs(sendId: string, options?: RequestOptions): Promise<BulkLogsResponseDto> {\n return this.client.get<BulkLogsResponseDto>(`${this.basePath}/logs`, { sendId }, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Activity,\n CreateActivityDto,\n UpdateActivityDto,\n SearchActivitiesParams,\n CreateActivityNotificationDto,\n UpdateActivityNotificationDto,\n ActivityNotificationDto,\n ActivityStats,\n ActivityStatsParams,\n EligibleClientsResponse,\n DeleteActivityParams,\n} from '../models/activities';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class ActivitiesResource extends BaseResource {\n private basePath = 'activities';\n\n async createActivity(data: CreateActivityDto, options?: RequestOptions): Promise<Activity> {\n return this.client.post<Activity>(this.basePath, data, options);\n }\n\n async searchActivities(\n params?: SearchActivitiesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Activity>> {\n return this.paginate<Activity>(this.basePath, params as any, options);\n }\n\n async getActivity(id: string, options?: RequestOptions): Promise<Activity> {\n return this.client.get<Activity>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateActivity(\n id: string,\n data: UpdateActivityDto,\n options?: RequestOptions,\n ): Promise<Activity> {\n return this.client.patch<Activity>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteActivity(\n id: string,\n params?: DeleteActivityParams,\n options?: RequestOptions,\n ): Promise<void> {\n const queryString = params?.deleteRecurrence ? '?deleteRecurrence=true' : '';\n return this.client.delete<void>(`${this.basePath}/${id}${queryString}`, options);\n }\n\n async createNotification(\n activityId: string,\n data: CreateActivityNotificationDto,\n options?: RequestOptions,\n ): Promise<ActivityNotificationDto> {\n return this.client.post<ActivityNotificationDto>(\n `${this.basePath}/${activityId}/notifications`,\n data,\n options,\n );\n }\n\n async getNotifications(\n activityId: string,\n options?: RequestOptions,\n ): Promise<{ data: ActivityNotificationDto[] }> {\n return this.client.get<{ data: ActivityNotificationDto[] }>(\n `${this.basePath}/${activityId}/notifications`,\n undefined,\n options,\n );\n }\n\n async updateNotification(\n activityId: string,\n notificationId: string,\n data: UpdateActivityNotificationDto,\n options?: RequestOptions,\n ): Promise<ActivityNotificationDto> {\n return this.client.patch<ActivityNotificationDto>(\n `${this.basePath}/${activityId}/notifications/${notificationId}`,\n data,\n options,\n );\n }\n\n async deleteNotification(\n activityId: string,\n notificationId: string,\n options?: RequestOptions,\n ): Promise<void> {\n return this.client.delete<void>(\n `${this.basePath}/${activityId}/notifications/${notificationId}`,\n options,\n );\n }\n\n async getStats(params?: ActivityStatsParams, options?: RequestOptions): Promise<ActivityStats> {\n return this.client.get<ActivityStats>(`${this.basePath}/stats`, params, options);\n }\n\n async getEligibleClients(\n activityId: string,\n options?: RequestOptions,\n ): Promise<EligibleClientsResponse> {\n return this.client.get<EligibleClientsResponse>(\n `${this.basePath}/${activityId}/eligible-clients`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n Tag,\n CreateTagDto,\n UpdateTagDto,\n AssignTagsDto,\n SearchTagsParams,\n GetTagClientsParams,\n AssignTagsResponse,\n RemoveTagsResponse,\n DeleteTagResponse,\n ClientTagsResponse,\n TagClientsResponse,\n TagStatsResponse,\n} from '../models/tags';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class TagsResource extends BaseResource {\n private basePath = 'tags';\n\n // ==================== Tag Management ====================\n\n /**\n * Create a new tag\n * POST /api/v1/tags\n */\n async createTag(data: CreateTagDto, options?: RequestOptions): Promise<Tag> {\n return this.client.post<Tag>(this.basePath, data, options);\n }\n\n /**\n * List all tags with optional filters and pagination\n * GET /api/v1/tags\n */\n async searchTags(\n params?: SearchTagsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Tag>> {\n return this.client.get<PaginatedResponseDto<Tag>>(this.basePath, params, options);\n }\n\n /**\n * Get a specific tag by ID\n * GET /api/v1/tags/:id\n */\n async getTag(id: string, options?: RequestOptions): Promise<Tag> {\n return this.client.get<Tag>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Update an existing tag\n * PUT /api/v1/tags/:id\n */\n async updateTag(id: string, data: UpdateTagDto, options?: RequestOptions): Promise<Tag> {\n return this.client.put<Tag>(`${this.basePath}/${id}`, data, options);\n }\n\n /**\n * Delete a tag (soft delete)\n * DELETE /api/v1/tags/:id\n * @param id - Tag ID\n * @param force - Force deletion even if tag has assigned clients\n */\n async deleteTag(\n id: string,\n force?: boolean,\n options?: RequestOptions,\n ): Promise<DeleteTagResponse> {\n const path = force ? `${this.basePath}/${id}?force=true` : `${this.basePath}/${id}`;\n return this.client.delete<DeleteTagResponse>(path, options);\n }\n\n /**\n * Get clients with a specific tag\n * GET /api/v1/tags/:id/clients\n */\n async getTagClients(\n id: string,\n params?: GetTagClientsParams,\n options?: RequestOptions,\n ): Promise<TagClientsResponse> {\n return this.client.get<TagClientsResponse>(`${this.basePath}/${id}/clients`, params, options);\n }\n\n /**\n * Get tag statistics\n * GET /api/v1/tags/stats\n */\n async getTagStats(options?: RequestOptions): Promise<TagStatsResponse> {\n return this.client.get<TagStatsResponse>(`${this.basePath}/stats`, undefined, options);\n }\n\n // ==================== Client Tag Assignment ====================\n\n /**\n * Assign one or multiple tags to a client\n * POST /api/v1/clients/:clientId/tags\n */\n async assignTagsToClient(\n clientId: string,\n data: AssignTagsDto,\n options?: RequestOptions,\n ): Promise<AssignTagsResponse> {\n return this.client.post<AssignTagsResponse>(`clients/${clientId}/tags`, data, options);\n }\n\n /**\n * Remove a specific tag from a client\n * DELETE /api/v1/clients/:clientId/tags/:tagId\n */\n async removeTagFromClient(\n clientId: string,\n tagId: string,\n options?: RequestOptions,\n ): Promise<RemoveTagsResponse> {\n return this.client.delete<RemoveTagsResponse>(`clients/${clientId}/tags/${tagId}`, options);\n }\n\n /**\n * Remove multiple tags from a client\n * DELETE /api/v1/clients/:clientId/tags\n * Note: This endpoint requires sending tagIds in the request body\n */\n async removeTagsFromClient(\n clientId: string,\n tagIds: string[],\n options?: RequestOptions,\n ): Promise<RemoveTagsResponse> {\n // DELETE with body requires special handling\n return this.request<RemoveTagsResponse>(`clients/${clientId}/tags`, {\n method: 'DELETE',\n body: JSON.stringify({ tagIds }),\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n });\n }\n\n /**\n * Get all tags assigned to a client\n * GET /api/v1/clients/:clientId/tags\n */\n async getClientTags(clientId: string, options?: RequestOptions): Promise<ClientTagsResponse> {\n return this.client.get<ClientTagsResponse>(`clients/${clientId}/tags`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionConfigDto,\n CreateCommissionConfigDto,\n UpdateCommissionConfigDto,\n CommissionHistoryDto,\n CommissionHistoryFiltersDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionConfigResource extends BaseResource {\n private basePath = 'commissions/config';\n\n async createConfig(\n data: CreateCommissionConfigDto,\n options?: RequestOptions,\n ): Promise<CommissionConfigDto> {\n return this.client.post<CommissionConfigDto>(this.basePath, data, options);\n }\n\n async getActiveConfig(options?: RequestOptions): Promise<CommissionConfigDto> {\n return this.client.get<CommissionConfigDto>(`${this.basePath}/active`, undefined, options);\n }\n\n async getConfig(id: string, options?: RequestOptions): Promise<CommissionConfigDto> {\n return this.client.get<CommissionConfigDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async listConfigs(\n params?: { page: number; limit: number },\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionConfigDto>> {\n return this.paginate<CommissionConfigDto>(this.basePath, params, options);\n }\n\n async updateConfig(\n id: string,\n data: UpdateCommissionConfigDto,\n options?: RequestOptions,\n ): Promise<CommissionConfigDto> {\n return this.client.put<CommissionConfigDto>(`${this.basePath}/${id}`, data, options);\n }\n\n async deactivateConfig(id: string, options?: RequestOptions): Promise<CommissionConfigDto> {\n return this.client.put<CommissionConfigDto>(`${this.basePath}/${id}/deactivate`, {}, options);\n }\n\n async getConfigHistory(\n id: string,\n params?: CommissionHistoryFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionHistoryDto>> {\n return this.paginate<CommissionHistoryDto>(`${this.basePath}/${id}/history`, params, options);\n }\n\n async validateConfig(\n data: CreateCommissionConfigDto,\n options?: RequestOptions,\n ): Promise<{ valid: boolean; errors?: string[] }> {\n return this.client.post<{ valid: boolean; errors?: string[] }>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionRuleDto,\n CreateCommissionRuleDto,\n UpdateCommissionRuleDto,\n CommissionRuleFiltersDto,\n CommissionHistoryDto,\n CommissionHistoryFiltersDto,\n ReorderCommissionRulesDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionRulesResource extends BaseResource {\n private basePath = 'commissions/rules';\n\n async createRule(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.post<CommissionRuleDto>(this.basePath, data, options);\n }\n\n async getRule(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.get<CommissionRuleDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async listRules(\n params?: CommissionRuleFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionRuleDto>> {\n return this.paginate<CommissionRuleDto>(this.basePath, params, options);\n }\n\n async updateRule(\n id: string,\n data: UpdateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteRule(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n\n async activateRule(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/activate`, {}, options);\n }\n\n async deactivateRule(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/deactivate`, {}, options);\n }\n\n async getRuleHistory(\n id: string,\n params?: CommissionHistoryFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionHistoryDto>> {\n return this.paginate<CommissionHistoryDto>(`${this.basePath}/${id}/history`, params, options);\n }\n\n async validateRule(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }> {\n return this.client.post<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n\n async getMyRules(options?: RequestOptions): Promise<CommissionRuleDto[]> {\n return this.client.get<CommissionRuleDto[]>(`${this.basePath}/me`, undefined, options);\n }\n\n async getApplicableRule(\n params: {\n collaboratorId: string;\n planId?: string;\n amount?: number;\n promotionId?: string;\n },\n options?: RequestOptions,\n ): Promise<CommissionRuleDto | null> {\n return this.client.get<CommissionRuleDto | null>(\n `${this.basePath}/applicable`,\n params,\n options,\n );\n }\n\n async reorderRules(\n data: ReorderCommissionRulesDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto[]> {\n return this.client.patch<CommissionRuleDto[]>(`${this.basePath}/reorder`, data, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionCalculationDto,\n CommissionFiltersDto,\n CommissionSummaryDto,\n SimulateCommissionDto,\n CommissionSimulationDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionCalculationsResource extends BaseResource {\n private basePath = 'commissions/calculations';\n\n async createCalculation(\n data: { contractId: string; collaboratorId: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.post<CommissionCalculationDto>(this.basePath, data, options);\n }\n\n async getCalculation(id: string, options?: RequestOptions): Promise<CommissionCalculationDto> {\n return this.client.get<CommissionCalculationDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async getCalculations(\n params?: CommissionFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionCalculationDto>> {\n return this.paginate<CommissionCalculationDto>(this.basePath, params, options);\n }\n\n async getCollaboratorCalculations(\n collaboratorId: string,\n params?: CommissionFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionCalculationDto>> {\n return this.paginate<CommissionCalculationDto>(\n `${this.basePath}/collaborator/${collaboratorId}`,\n params,\n options,\n );\n }\n\n async confirmCalculation(\n id: string,\n data: { note?: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.put<CommissionCalculationDto>(\n `${this.basePath}/${id}/confirm`,\n data,\n options,\n );\n }\n\n async reverseCalculation(\n id: string,\n data: { reason: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.put<CommissionCalculationDto>(\n `${this.basePath}/${id}/reverse`,\n data,\n options,\n );\n }\n\n async markAsPaid(\n id: string,\n data: { paidDate: string; note?: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.put<CommissionCalculationDto>(`${this.basePath}/${id}/paid`, data, options);\n }\n\n async simulate(\n data: SimulateCommissionDto,\n options?: RequestOptions,\n ): Promise<CommissionSimulationDto> {\n return this.client.post<CommissionSimulationDto>('commissions/simulator', data, options);\n }\n\n async getMyCommissions(\n params?: CommissionFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionCalculationDto>> {\n return this.paginate<CommissionCalculationDto>('commissions/me', params, options);\n }\n\n async getMyCommissionsSummary(options?: RequestOptions): Promise<CommissionSummaryDto> {\n return this.client.get<CommissionSummaryDto>('commissions/me/summary', undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n ReportFiltersDto,\n CommissionSummaryReportDto,\n RuleReportDto,\n CollaboratorReportDto,\n PromotionReportDto,\n PromotionReportFiltersDto,\n} from '../models/commissions';\nimport { RequestOptions } from '../types';\n\nexport class CommissionReportsResource extends BaseResource {\n private basePath = 'commissions/reports';\n\n async getSummary(\n params?: ReportFiltersDto,\n options?: RequestOptions,\n ): Promise<CommissionSummaryReportDto> {\n return this.client.get<CommissionSummaryReportDto>(`${this.basePath}/summary`, params, options);\n }\n\n async getByRule(params?: ReportFiltersDto, options?: RequestOptions): Promise<RuleReportDto[]> {\n return this.client.get<RuleReportDto[]>(`${this.basePath}/by-rule`, params, options);\n }\n\n async getByCollaborator(\n params?: ReportFiltersDto,\n options?: RequestOptions,\n ): Promise<CollaboratorReportDto[]> {\n return this.client.get<CollaboratorReportDto[]>(\n `${this.basePath}/by-collaborator`,\n params,\n options,\n );\n }\n\n async getPromotionAnalytics(\n params?: PromotionReportFiltersDto,\n options?: RequestOptions,\n ): Promise<PromotionReportDto[]> {\n return this.client.get<PromotionReportDto[]>(`${this.basePath}/promotions`, params, options);\n }\n\n async exportToCSV(params?: ReportFiltersDto, options?: RequestOptions): Promise<Blob> {\n return this.client.get<Blob>(`${this.basePath}/export/csv`, params, options);\n }\n\n async getTrends(\n params?: ReportFiltersDto,\n options?: RequestOptions,\n ): Promise<{ date: string; commissions: number; contracts: number }[]> {\n return this.client.get<{ date: string; commissions: number; contracts: number }[]>(\n `${this.basePath}/trends`,\n params,\n options,\n );\n }\n\n async getTopPerformers(\n params?: ReportFiltersDto & { limit?: number },\n options?: RequestOptions,\n ): Promise<CollaboratorReportDto[]> {\n return this.client.get<CollaboratorReportDto[]>(\n `${this.basePath}/top-performers`,\n params,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionRuleDto,\n CreateCommissionRuleDto,\n UpdateCommissionRuleDto,\n CommissionRuleFiltersDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionPromotionsResource extends BaseResource {\n private basePath = 'commissions/promotions';\n\n async createPromotion(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.post<CommissionRuleDto>(this.basePath, data, options);\n }\n\n async getPromotion(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.get<CommissionRuleDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async listPromotions(\n params?: CommissionRuleFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionRuleDto>> {\n return this.paginate<CommissionRuleDto>(this.basePath, params, options);\n }\n\n async updatePromotion(\n id: string,\n data: UpdateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}`, data, options);\n }\n\n async deletePromotion(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n\n async activatePromotion(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/activate`, {}, options);\n }\n\n async deactivatePromotion(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/deactivate`, {}, options);\n }\n\n async validatePromotion(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }> {\n return this.client.post<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n\n async estimateImpact(\n id: string,\n options?: RequestOptions,\n ): Promise<{\n estimatedContracts: number;\n estimatedCommissions: number;\n estimatedCost: number;\n }> {\n return this.client.get<{\n estimatedContracts: number;\n estimatedCommissions: number;\n estimatedCost: number;\n }>(`${this.basePath}/${id}/impact`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport { Message, GetMessagesParams } from '../models/messages';\nimport { RequestOptions } from '../types';\n\ninterface MessagesResponse {\n data: Message[];\n}\n\nexport class MessagesResource extends BaseResource {\n private basePath = 'messages';\n\n async getMessages(params?: GetMessagesParams, options?: RequestOptions): Promise<Message[]> {\n const response = await this.client.get<MessagesResponse>(this.basePath, params, options);\n return response.data;\n }\n\n async getMessage(id: string, options?: RequestOptions): Promise<Message> {\n return this.client.get<Message>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async retryMessage(id: string, options?: RequestOptions): Promise<Message> {\n return this.client.post<Message>(`${this.basePath}/${id}/retry`, undefined, options);\n }\n\n async cancelMessage(id: string, options?: RequestOptions): Promise<Message> {\n return this.client.post<Message>(`${this.basePath}/${id}/cancel`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\nimport {\n CreditAccount,\n CreditAccountWithOrgName,\n CreditTransaction,\n CreditAdjustment,\n CreditAdjustmentResponse,\n CreditUsageReport,\n CreditUsageReportQuery,\n CreditStats,\n} from '../models/credits';\n\nexport class CreditsResource extends BaseResource {\n // Admin endpoints for specific organization\n private adminOrgCreditsPath = (organizationId: string) =>\n `admin/organizations/${organizationId}/credits`;\n\n // Organization endpoints (non-admin)\n private orgCreditsPath = (organizationId: string) => `organizations/${organizationId}/credits`;\n\n // Global admin endpoints\n private adminCreditsPath = 'admin/credits';\n\n /**\n * Get credit account for own organization (non-admin)\n */\n async getCreditAccount(organizationId: string, options?: RequestOptions): Promise<CreditAccount> {\n return this.client.get<CreditAccount>(this.orgCreditsPath(organizationId), undefined, options);\n }\n\n /**\n * Get credit account for a specific organization (admin only)\n */\n async getAdminCreditAccount(\n organizationId: string,\n options?: RequestOptions,\n ): Promise<CreditAccount> {\n return this.client.get<CreditAccount>(\n this.adminOrgCreditsPath(organizationId),\n undefined,\n options,\n );\n }\n\n /**\n * Get credit transaction history for own organization (non-admin)\n */\n async getCreditTransactions(\n organizationId: string,\n limit?: number,\n options?: RequestOptions,\n ): Promise<CreditTransaction[]> {\n const params = limit ? { limit } : undefined;\n return this.client.get<CreditTransaction[]>(\n `${this.orgCreditsPath(organizationId)}/transactions`,\n params,\n options,\n );\n }\n\n /**\n * Get credit transaction history for a specific organization (admin only)\n */\n async getAdminCreditTransactions(\n organizationId: string,\n limit?: number,\n options?: RequestOptions,\n ): Promise<CreditTransaction[]> {\n const params = limit ? { limit } : undefined;\n return this.client.get<CreditTransaction[]>(\n `${this.adminOrgCreditsPath(organizationId)}/transactions`,\n params,\n options,\n );\n }\n\n /**\n * Adjust credits for a specific organization (admin only)\n */\n async adjustCredits(\n organizationId: string,\n adjustment: CreditAdjustment,\n options?: RequestOptions,\n ): Promise<CreditAdjustmentResponse> {\n return this.client.post<CreditAdjustmentResponse>(\n `${this.adminOrgCreditsPath(organizationId)}/adjust`,\n adjustment,\n options,\n );\n }\n\n /**\n * Get credit usage report for own organization (non-admin)\n */\n async getUsageReport(\n organizationId: string,\n query?: CreditUsageReportQuery,\n options?: RequestOptions,\n ): Promise<CreditUsageReport> {\n return this.client.get<CreditUsageReport>(\n `${this.orgCreditsPath(organizationId)}/usage-report`,\n query,\n options,\n );\n }\n\n /**\n * Get credit usage report for a specific organization (admin only)\n */\n async getAdminUsageReport(\n organizationId: string,\n query?: CreditUsageReportQuery,\n options?: RequestOptions,\n ): Promise<CreditUsageReport> {\n return this.client.get<CreditUsageReport>(\n `${this.adminOrgCreditsPath(organizationId)}/usage-report`,\n query,\n options,\n );\n }\n\n /**\n * Get all organizations with credit accounts (Super Admin only)\n */\n async getAllCreditAccounts(\n limit?: number,\n offset?: number,\n options?: RequestOptions,\n ): Promise<CreditAccountWithOrgName[]> {\n const params = {\n limit: limit || 50,\n offset: offset || 0,\n };\n return this.client.get<CreditAccountWithOrgName[]>(\n `${this.adminCreditsPath}/organizations`,\n params,\n options,\n );\n }\n\n /**\n * Get credit stats for current organization (existing endpoint)\n */\n async getCreditStats(organizationId: string, options?: RequestOptions): Promise<CreditStats> {\n // This is the existing endpoint from bulk messaging controller\n return this.client.get<CreditStats>(\n `whatsapp/bulk-messaging/ai-usage-stats`,\n undefined,\n options,\n );\n }\n\n /**\n * Search credit transactions with filters\n */\n async searchTransactions(\n organizationId: string,\n filters: {\n featureType?: string;\n startDate?: string;\n endDate?: string;\n minAmount?: number;\n maxAmount?: number;\n },\n limit?: number,\n options?: RequestOptions,\n ): Promise<CreditTransaction[]> {\n const params = {\n ...filters,\n limit: limit || 50,\n };\n return this.client.get<CreditTransaction[]>(\n `${this.orgCreditsPath(organizationId)}/transactions/search`,\n params,\n options,\n );\n }\n\n /**\n * Get credit summary for multiple organizations\n */\n async getOrganizationsCreditSummary(\n organizationIds: string[],\n options?: RequestOptions,\n ): Promise<\n Array<{\n organizationId: string;\n balance: number;\n monthlyAllowance: number;\n usedThisMonth: number;\n }>\n > {\n return this.client.post<\n Array<{\n organizationId: string;\n balance: number;\n monthlyAllowance: number;\n usedThisMonth: number;\n }>\n >(`${this.adminCreditsPath}/summary`, { organizationIds }, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n PricingPackage,\n CreatePricingPackageDto,\n UpdatePricingPackageDto,\n SearchPricingPackagesParams,\n} from '../models/pricing-packages';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class PricingPackagesResource extends BaseResource {\n private basePath = 'pricing-packages';\n\n // CREATE - POST /pricing-packages/plans/:planId/packages\n async createPricingPackage(\n planId: string,\n data: CreatePricingPackageDto,\n options?: RequestOptions,\n ): Promise<PricingPackage> {\n return this.client.post<PricingPackage>(\n `${this.basePath}/plans/${planId}/packages`,\n data,\n options,\n );\n }\n\n // GET ONE - GET /pricing-packages/:id\n async getPricingPackage(id: string, options?: RequestOptions): Promise<PricingPackage> {\n return this.client.get<PricingPackage>(`${this.basePath}/${id}`, undefined, options);\n }\n\n // UPDATE - PUT /pricing-packages/:id\n async updatePricingPackage(\n id: string,\n data: UpdatePricingPackageDto,\n options?: RequestOptions,\n ): Promise<PricingPackage> {\n return this.client.put<PricingPackage>(`${this.basePath}/${id}`, data, options);\n }\n\n // SEARCH - GET /pricing-packages\n async searchPricingPackages(\n params?: SearchPricingPackagesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<PricingPackage>> {\n return this.paginate<PricingPackage>(\n this.basePath,\n {\n page: params?.page || 1,\n limit: params?.limit || 20,\n ...params,\n },\n options,\n );\n }\n\n // GET BY PLAN - GET /pricing-packages/plans/:planId/packages\n async getPricingPackagesByPlan(\n planId: string,\n options?: RequestOptions,\n ): Promise<PricingPackage[]> {\n return this.client.get<PricingPackage[]>(\n `${this.basePath}/plans/${planId}/packages`,\n undefined,\n options,\n );\n }\n\n // DELETE - DELETE /pricing-packages/:id\n async deletePricingPackage(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n PromoCode,\n CreatePromoCodeDto,\n UpdatePromoCodeDto,\n SearchPromoCodesParams,\n ValidatePromoCodeDto,\n ValidatePromoCodeResponseDto,\n PromoCodeAnalytics,\n} from '../models/promo-codes';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class PromoCodesResource extends BaseResource {\n private basePath = 'promo-codes';\n\n // CREATE - POST /promo-codes\n async createPromoCode(data: CreatePromoCodeDto, options?: RequestOptions): Promise<PromoCode> {\n return this.client.post<PromoCode>(this.basePath, data, options);\n }\n\n // VALIDATE - POST /promo-codes/validate\n async validatePromoCode(\n data: ValidatePromoCodeDto,\n options?: RequestOptions,\n ): Promise<ValidatePromoCodeResponseDto> {\n return this.client.post<ValidatePromoCodeResponseDto>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n\n // SEARCH - GET /promo-codes\n async searchPromoCodes(\n params?: SearchPromoCodesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<PromoCode>> {\n return this.paginate<PromoCode>(\n this.basePath,\n {\n page: params?.page || 1,\n limit: params?.limit || 20,\n ...params,\n },\n options,\n );\n }\n\n // GET ANALYTICS - GET /promo-codes/analytics/:id\n async getPromoCodeAnalytics(id: string, options?: RequestOptions): Promise<PromoCodeAnalytics> {\n return this.client.get<PromoCodeAnalytics>(\n `${this.basePath}/analytics/${id}`,\n undefined,\n options,\n );\n }\n\n // GET ONE - GET /promo-codes/:id\n async getPromoCode(id: string, options?: RequestOptions): Promise<PromoCode> {\n return this.client.get<PromoCode>(`${this.basePath}/${id}`, undefined, options);\n }\n\n // UPDATE - PUT /promo-codes/:id\n async updatePromoCode(\n id: string,\n data: UpdatePromoCodeDto,\n options?: RequestOptions,\n ): Promise<PromoCode> {\n return this.client.put<PromoCode>(`${this.basePath}/${id}`, data, options);\n }\n\n // DELETE - DELETE /promo-codes/:id\n async deletePromoCode(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n}\n","import { ApiClient } from './client';\nimport { GymSpaceConfig } from './types';\nimport { createAgentFetch } from './utils/agent-fetch';\nimport {\n AuthResource,\n OrganizationsResource,\n GymsResource,\n CollaboratorsResource,\n RolesResource,\n ClientsResource,\n MembershipPlansResource,\n ContractsResource,\n DashboardResource,\n CheckInsResource,\n InvitationsResource,\n AssetsResource,\n FilesResource,\n PublicCatalogResource,\n AdminCatalogResource,\n HealthResource,\n OnboardingResource,\n ProductsResource,\n SalesResource,\n SuppliersResource,\n UsersResource,\n SubscriptionsResource,\n SubscriptionPlansResource,\n AdminSubscriptionManagementResource,\n PaymentMethodsResource,\n WhatsAppResource,\n WhatsAppTemplatesResource,\n BulkMessagingResource,\n ActivitiesResource,\n TagsResource,\n CommissionConfigResource,\n CommissionRulesResource,\n CommissionCalculationsResource,\n CommissionReportsResource,\n CommissionPromotionsResource,\n MessagesResource,\n CreditsResource,\n PricingPackagesResource,\n PromoCodesResource,\n} from './resources';\n\nexport class GymSpaceSdk {\n public client: ApiClient;\n private expoFetch?: typeof globalThis.fetch;\n\n // Resources\n public auth: AuthResource;\n public organizations: OrganizationsResource;\n public gyms: GymsResource;\n public collaborators: CollaboratorsResource;\n public roles: RolesResource;\n public clients: ClientsResource;\n public membershipPlans: MembershipPlansResource;\n public contracts: ContractsResource;\n public dashboard: DashboardResource;\n public checkIns: CheckInsResource;\n public invitations: InvitationsResource;\n public assets: AssetsResource;\n public files: FilesResource;\n public publicCatalog: PublicCatalogResource;\n public adminCatalog: AdminCatalogResource;\n public health: HealthResource;\n public onboarding: OnboardingResource;\n public products: ProductsResource;\n public sales: SalesResource;\n public suppliers: SuppliersResource;\n public users: UsersResource;\n public subscriptions: SubscriptionsResource;\n public subscriptionPlans: SubscriptionPlansResource;\n public adminSubscriptionManagement: AdminSubscriptionManagementResource;\n public paymentMethods: PaymentMethodsResource;\n public whatsapp: WhatsAppResource;\n public whatsappTemplates: WhatsAppTemplatesResource;\n public bulkMessaging: BulkMessagingResource;\n public activities: ActivitiesResource;\n public tags: TagsResource;\n public commissionConfig: CommissionConfigResource;\n public commissionRules: CommissionRulesResource;\n public commissionCalculations: CommissionCalculationsResource;\n public commissionReports: CommissionReportsResource;\n public commissionPromotions: CommissionPromotionsResource;\n public messages: MessagesResource;\n public credits: CreditsResource;\n public pricingPackages: PricingPackagesResource;\n public promoCodes: PromoCodesResource;\n\n constructor(config: GymSpaceConfig) {\n this.client = new ApiClient(config);\n\n // Initialize resources\n this.auth = new AuthResource(this.client);\n this.organizations = new OrganizationsResource(this.client);\n this.gyms = new GymsResource(this.client);\n this.collaborators = new CollaboratorsResource(this.client);\n this.roles = new RolesResource(this.client);\n this.clients = new ClientsResource(this.client);\n this.membershipPlans = new MembershipPlansResource(this.client);\n this.contracts = new ContractsResource(this.client);\n this.dashboard = new DashboardResource(this.client);\n this.checkIns = new CheckInsResource(this.client);\n this.invitations = new InvitationsResource(this.client);\n this.assets = new AssetsResource(this.client);\n this.files = new FilesResource(this.client);\n this.publicCatalog = new PublicCatalogResource(this.client);\n this.adminCatalog = new AdminCatalogResource(this.client);\n this.health = new HealthResource(this.client);\n this.onboarding = new OnboardingResource(this.client);\n this.products = new ProductsResource(this.client);\n this.sales = new SalesResource(this.client);\n this.suppliers = new SuppliersResource(this.client);\n this.users = new UsersResource(this.client);\n this.subscriptions = new SubscriptionsResource(this.client);\n this.subscriptionPlans = new SubscriptionPlansResource(this.client);\n this.adminSubscriptionManagement = new AdminSubscriptionManagementResource(this.client);\n this.paymentMethods = new PaymentMethodsResource(this.client);\n this.whatsapp = new WhatsAppResource(this.client);\n this.whatsappTemplates = new WhatsAppTemplatesResource(this.client);\n this.bulkMessaging = new BulkMessagingResource(this.client);\n this.activities = new ActivitiesResource(this.client);\n this.tags = new TagsResource(this.client);\n this.commissionConfig = new CommissionConfigResource(this.client);\n this.commissionRules = new CommissionRulesResource(this.client);\n this.commissionCalculations = new CommissionCalculationsResource(this.client);\n this.commissionReports = new CommissionReportsResource(this.client);\n this.commissionPromotions = new CommissionPromotionsResource(this.client);\n this.messages = new MessagesResource(this.client);\n this.credits = new CreditsResource(this.client);\n this.pricingPackages = new PricingPackagesResource(this.client);\n this.promoCodes = new PromoCodesResource(this.client);\n }\n\n /**\n * Set the authentication token\n */\n setAuthToken(token: string): void {\n this.client.setAuthToken(token);\n }\n\n /**\n * Set the refresh token\n */\n setRefreshToken(token: string | null): void {\n this.client.setRefreshToken(token);\n }\n\n /**\n * Get the current refresh token\n */\n getRefreshToken(): string | null {\n return this.client.getRefreshToken();\n }\n\n /**\n * Set the current gym context\n */\n setGymId(gymId: string): void {\n this.client.setGymId(gymId);\n }\n\n /**\n * Clear authentication\n */\n clearAuth(): void {\n this.client.clearAuth();\n }\n\n /**\n * Set Expo fetch for React Native environments\n * Should be called once during app initialization\n */\n setExpoFetch(fetchFn: typeof globalThis.fetch): void {\n this.expoFetch = fetchFn;\n }\n\n /**\n * Create a fetch function for agent endpoints\n * Uses the /agent/* proxy that includes request context\n * Automatically uses Expo fetch if set\n */\n createAgentFetch() {\n return createAgentFetch(this.client, this.expoFetch);\n }\n\n /**\n * Set callback for when tokens are refreshed by backend\n */\n setOnTokenRefreshed(callback: (accessToken: string, refreshToken?: string) => void): void {\n this.client.setOnTokenRefreshed(callback);\n }\n\n /**\n * Get the underlying API client\n */\n getClient(): ApiClient {\n return this.client;\n }\n}\n","/**\n * Template codes for WhatsApp messages\n */\nexport const TemplateCode = {\n WELCOME: 'WELCOME',\n MEMBERSHIP_PURCHASE: 'MEMBERSHIP_PURCHASE',\n MEMBERSHIP_RENEWAL: 'MEMBERSHIP_RENEWAL',\n MEMBERSHIP_EXPIRING: 'MEMBERSHIP_EXPIRING',\n PAYMENT_REMINDER: 'PAYMENT_REMINDER',\n BIRTHDAY: 'BIRTHDAY',\n PAYMENT_RECEIPT: 'PAYMENT_RECEIPT',\n SHARE_CATALOG: 'SHARE_CATALOG',\n SALE_PAYMENT_REMINDER: 'SALE_PAYMENT_REMINDER',\n} as const;\n\nexport type TemplateCodeValue = (typeof TemplateCode)[keyof typeof TemplateCode];\nexport type TemplateCode = TemplateCodeValue;\n\n/**\n * Template types\n */\nexport const TemplateType = {\n STATIC: 'STATIC',\n PROMPT: 'PROMPT',\n} as const;\n\nexport type TemplateTypeValue = (typeof TemplateType)[keyof typeof TemplateType];\nexport type TemplateType = TemplateTypeValue;\n\n/**\n * Base interface for WhatsApp template data\n */\nexport interface WhatsAppTemplateData {\n gymId: string;\n clientId: string;\n phoneNumber: string;\n templateCode: TemplateCode;\n variables: Record<string, any>;\n metadata?: {\n contractId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Welcome message template data\n */\nexport interface WelcomeTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.WELCOME;\n variables: {\n clientName: string;\n gymName: string;\n registrationDate: string;\n };\n}\n\n/**\n * Membership purchase template data\n */\nexport interface MembershipPurchaseTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_PURCHASE;\n variables: {\n clientName: string;\n planName: string;\n startDate: string;\n endDate: string;\n amount: string;\n paymentFrequency: string;\n };\n}\n\n/**\n * Membership renewal template data\n */\nexport interface MembershipRenewalTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_RENEWAL;\n variables: {\n clientName: string;\n planName: string;\n newEndDate: string;\n amount: string;\n };\n}\n\n/**\n * Membership expiring template data\n */\nexport interface MembershipExpiringTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_EXPIRING;\n variables: {\n clientName: string;\n planName: string;\n expirationDate: string;\n daysRemaining: string;\n };\n}\n\n/**\n * Payment reminder template data\n */\nexport interface PaymentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_REMINDER;\n variables: {\n clientName: string;\n amount: string;\n dueDate: string;\n planName: string;\n };\n}\n\n/**\n * Birthday template data\n */\nexport interface BirthdayTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.BIRTHDAY;\n variables: {\n clientName: string;\n gymName: string;\n age: string;\n };\n}\n\n/**\n * Payment receipt template data\n */\nexport interface PaymentReceiptTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_RECEIPT;\n variables: {\n gymName: string;\n receiptNumber: string;\n date: string;\n clientName: string;\n items: string;\n amount: string;\n paymentMethod: string;\n };\n metadata?: {\n saleId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Share catalog template data\n */\nexport interface ShareCatalogTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.SHARE_CATALOG;\n variables: {\n clientName: string;\n gymName: string;\n urlCatalog: string;\n };\n}\n\n/**\n * Sale payment reminder template data\n */\nexport interface SalePaymentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.SALE_PAYMENT_REMINDER;\n variables: {\n clientName: string;\n saleNumber: string;\n total: string;\n saleDate: string;\n daysOverdue?: string;\n items?: string;\n };\n metadata?: {\n saleId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Union type for all template data types\n */\nexport type WhatsAppTemplateEventData =\n | WelcomeTemplateData\n | MembershipPurchaseTemplateData\n | MembershipRenewalTemplateData\n | MembershipExpiringTemplateData\n | PaymentReminderTemplateData\n | BirthdayTemplateData\n | PaymentReceiptTemplateData\n | ShareCatalogTemplateData\n | SalePaymentReminderTemplateData;\n\n/**\n * Template metadata interface\n */\nexport interface TemplateMetadata {\n code: TemplateCode;\n title: string;\n description: string;\n icon: string;\n variables: string[];\n exampleValues: Record<string, string>;\n}\n","import { TemplateCode } from '../types/whatsapp-templates.types';\n\n/**\n * Template code constants\n */\nexport const TEMPLATE_CODES = {\n WELCOME: TemplateCode.WELCOME,\n MEMBERSHIP_PURCHASE: TemplateCode.MEMBERSHIP_PURCHASE,\n MEMBERSHIP_RENEWAL: TemplateCode.MEMBERSHIP_RENEWAL,\n MEMBERSHIP_EXPIRING: TemplateCode.MEMBERSHIP_EXPIRING,\n PAYMENT_REMINDER: TemplateCode.PAYMENT_REMINDER,\n BIRTHDAY: TemplateCode.BIRTHDAY,\n PAYMENT_RECEIPT: TemplateCode.PAYMENT_RECEIPT,\n SHARE_CATALOG: TemplateCode.SHARE_CATALOG,\n SALE_PAYMENT_REMINDER: TemplateCode.SALE_PAYMENT_REMINDER,\n} as const;\n\n/**\n * Event names for WhatsApp template events\n */\nexport const WHATSAPP_TEMPLATE_EVENTS = {\n SEND_TEMPLATE: 'whatsapp/template.send',\n TEMPLATE_SENT: 'whatsapp/template.sent',\n TEMPLATE_FAILED: 'whatsapp/template.failed',\n} as const;\n\n/**\n * Template metadata mapping\n */\nexport const TEMPLATE_METADATA = {\n [TemplateCode.WELCOME]: {\n code: TemplateCode.WELCOME,\n title: 'Mensaje de Bienvenida',\n description: 'Mensaje para nuevos clientes',\n icon: 'UserPlus',\n variables: ['clientName', 'gymName', 'registrationDate'],\n exampleValues: {\n clientName: 'Juan Pérez',\n gymName: 'GymSpace',\n registrationDate: '15/01/2024',\n },\n },\n [TemplateCode.MEMBERSHIP_PURCHASE]: {\n code: TemplateCode.MEMBERSHIP_PURCHASE,\n title: 'Compra de Membresía',\n description: 'Confirmación de nueva membresía',\n icon: 'ShoppingCart',\n variables: ['clientName', 'planName', 'startDate', 'endDate', 'amount', 'paymentFrequency'],\n exampleValues: {\n clientName: 'María López',\n planName: 'Premium',\n startDate: '01/02/2024',\n endDate: '01/03/2024',\n amount: '$50.00',\n paymentFrequency: 'mensual',\n },\n },\n [TemplateCode.MEMBERSHIP_RENEWAL]: {\n code: TemplateCode.MEMBERSHIP_RENEWAL,\n title: 'Renovación de Membresía',\n description: 'Confirmación de renovación',\n icon: 'RefreshCw',\n variables: ['clientName', 'planName', 'newEndDate', 'amount'],\n exampleValues: {\n clientName: 'Carlos Ruiz',\n planName: 'Básico',\n newEndDate: '15/04/2024',\n amount: '$30.00',\n },\n },\n [TemplateCode.MEMBERSHIP_EXPIRING]: {\n code: TemplateCode.MEMBERSHIP_EXPIRING,\n title: 'Membresía Por Vencer',\n description: 'Recordatorio de expiración próxima',\n icon: 'AlertCircle',\n variables: ['clientName', 'planName', 'expirationDate', 'daysRemaining'],\n exampleValues: {\n clientName: 'Ana García',\n planName: 'Premium',\n expirationDate: '20/02/2024',\n daysRemaining: '3',\n },\n },\n [TemplateCode.PAYMENT_REMINDER]: {\n code: TemplateCode.PAYMENT_REMINDER,\n title: 'Recordatorio de Pago',\n description: 'Recordatorio de pago pendiente',\n icon: 'DollarSign',\n variables: ['clientName', 'amount', 'dueDate', 'planName'],\n exampleValues: {\n clientName: 'Pedro Sánchez',\n amount: '$40.00',\n dueDate: '25/02/2024',\n planName: 'Estándar',\n },\n },\n [TemplateCode.BIRTHDAY]: {\n code: TemplateCode.BIRTHDAY,\n title: 'Cumpleaños',\n description: 'Felicitación de cumpleaños',\n icon: 'Cake',\n variables: ['clientName', 'gymName', 'age'],\n exampleValues: {\n clientName: 'Laura Martínez',\n gymName: 'GymSpace',\n age: '28',\n },\n },\n [TemplateCode.PAYMENT_RECEIPT]: {\n code: TemplateCode.PAYMENT_RECEIPT,\n title: 'Comprobante de Pago',\n description: 'Comprobante de venta pagada',\n icon: 'Receipt',\n variables: [\n 'gymName',\n 'receiptNumber',\n 'date',\n 'clientName',\n 'items',\n 'amount',\n 'paymentMethod',\n 'saleItems',\n 'currency',\n ],\n exampleValues: {\n gymName: 'GymSpace',\n receiptNumber: 'V-001',\n date: '15/01/2024',\n clientName: 'Juan Pérez',\n items: '• Proteína x2 = Q100.00\\n• Creatina x1 = Q50.00',\n amount: 'Q150.00',\n paymentMethod: 'Efectivo',\n saleItems: [\n { product: { name: 'Proteína' }, quantity: 2, total: '100.00' },\n { product: { name: 'Creatina' }, quantity: 1, total: '50.00' },\n ],\n currency: 'Q',\n },\n },\n [TemplateCode.SHARE_CATALOG]: {\n code: TemplateCode.SHARE_CATALOG,\n title: 'Compartir Catálogo',\n description: 'Mensaje para compartir catálogo de membresías',\n icon: 'Share2',\n variables: ['clientName', 'gymName', 'urlCatalog'],\n exampleValues: {\n clientName: 'Roberto Gómez',\n gymName: 'GymSpace',\n urlCatalog: 'https://gymspace.app/catalog/gym-123',\n },\n },\n [TemplateCode.SALE_PAYMENT_REMINDER]: {\n code: TemplateCode.SALE_PAYMENT_REMINDER,\n title: 'Recordatorio de Pago de Venta',\n description: 'Recordatorio para ventas con pago pendiente',\n icon: 'AlertCircle',\n variables: [\n 'clientName',\n 'saleNumber',\n 'total',\n 'saleDate',\n 'daysOverdue',\n 'items',\n 'saleItems',\n 'currency',\n ],\n exampleValues: {\n clientName: 'Manuel Trainer',\n saleNumber: '#202511130003',\n total: 'S/ 205.00',\n saleDate: '13/11/2025',\n daysOverdue: '3',\n items: '• BCAA x2\\n• Pre-Entreno x1',\n saleItems: [\n { product: { name: 'BCAA' }, quantity: 2 },\n { product: { name: 'Pre-Entreno' }, quantity: 1 },\n ],\n currency: 'S/ ',\n },\n },\n} as const;\n","export interface BulkMessageVariable {\n name: string;\n placeholder: string;\n description: string;\n example: string;\n category: 'client' | 'gym' | 'membership' | 'activity' | 'datetime';\n required: boolean;\n formatter?: 'text' | 'currency' | 'date' | 'datetime' | 'number';\n}\n\nexport const BULK_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n // Variables de Cliente\n {\n name: 'clientName',\n placeholder: '{{clientName}}',\n description: 'Nombre completo del cliente',\n example: 'Juan Pérez',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientEmail',\n placeholder: '{{clientEmail}}',\n description: 'Email del cliente',\n example: 'juan@example.com',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientPhone',\n placeholder: '{{clientPhone}}',\n description: 'Teléfono del cliente',\n example: '+51 999 999 999',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n\n // Variables de Gimnasio\n {\n name: 'gymName',\n placeholder: '{{gymName}}',\n description: 'Nombre del gimnasio',\n example: 'Gym Fitness',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymPhone',\n placeholder: '{{gymPhone}}',\n description: 'Teléfono del gimnasio',\n example: '+51 999 888 777',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymAddress',\n placeholder: '{{gymAddress}}',\n description: 'Dirección del gimnasio',\n example: 'Av. Principal 123',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n\n // Variables de Membresía\n {\n name: 'planName',\n placeholder: '{{planName}}',\n description: 'Nombre del plan de membresía',\n example: 'Plan Premium',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'membershipStatus',\n placeholder: '{{membershipStatus}}',\n description: 'Estado de la membresía',\n example: 'Activa',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'daysUntilExpiration',\n placeholder: '{{daysUntilExpiration}}',\n description: 'Días restantes hasta vencimiento',\n example: '15',\n category: 'membership',\n required: false,\n formatter: 'number',\n },\n {\n name: 'expirationDate',\n placeholder: '{{expirationDate}}',\n description: 'Fecha de vencimiento',\n example: '31/12/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n {\n name: 'amount',\n placeholder: '{{amount}}',\n description: 'Monto con formato de moneda',\n example: 'S/ 150.00',\n category: 'membership',\n required: false,\n formatter: 'currency',\n },\n\n // Variables de Fecha/Hora\n {\n name: 'date',\n placeholder: '{{date}}',\n description: 'Fecha actual',\n example: '15/10/2024',\n category: 'datetime',\n required: false,\n formatter: 'date',\n },\n {\n name: 'time',\n placeholder: '{{time}}',\n description: 'Hora actual',\n example: '14:30',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n {\n name: 'dayOfWeek',\n placeholder: '{{dayOfWeek}}',\n description: 'Día de la semana',\n example: 'Lunes',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n];\n\n// Variables de Actividades\nexport const ACTIVITY_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n {\n name: 'activityName',\n placeholder: '{{activityName}}',\n description: 'Nombre de la actividad',\n example: 'Yoga Matutino',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityDescription',\n placeholder: '{{activityDescription}}',\n description: 'Descripción de la actividad',\n example: 'Sesión de yoga para principiantes',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDate',\n placeholder: '{{activityStartDate}}',\n description: 'Fecha de inicio de la actividad',\n example: '15/10/2024',\n category: 'activity',\n required: false,\n formatter: 'date',\n },\n {\n name: 'activityStartTime',\n placeholder: '{{activityStartTime}}',\n description: 'Hora de inicio de la actividad',\n example: '08:00',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDateTime',\n placeholder: '{{activityStartDateTime}}',\n description: 'Fecha y hora de inicio de la actividad',\n example: '15/10/2024 08:00',\n category: 'activity',\n required: false,\n formatter: 'datetime',\n },\n {\n name: 'activityDuration',\n placeholder: '{{activityDuration}}',\n description: 'Duración de la actividad en minutos',\n example: '60',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityMaxParticipants',\n placeholder: '{{activityMaxParticipants}}',\n description: 'Número máximo de participantes',\n example: '20',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityLocation',\n placeholder: '{{activityLocation}}',\n description: 'Ubicación de la actividad',\n example: 'Av. Principal 123',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'timeUntilActivity',\n placeholder: '{{timeUntilActivity}}',\n description: 'Tiempo restante hasta la actividad',\n example: '2 horas',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n];\n\n// Tipo de contexto de variables\nexport type VariableContextType = 'bulk' | 'activity' | 'event' | 'reminder';\n\n// Mapeo de contextos a variables disponibles\nexport const VARIABLE_CONTEXT_MAP: Record<VariableContextType, BulkMessageVariable[]> = {\n bulk: BULK_MESSAGE_VARIABLES,\n activity: [...BULK_MESSAGE_VARIABLES, ...ACTIVITY_MESSAGE_VARIABLES],\n event: BULK_MESSAGE_VARIABLES, // Para futuros eventos\n reminder: BULK_MESSAGE_VARIABLES, // Para futuros recordatorios\n};\n\n// Helper para obtener variables por contexto\nexport function getVariablesByContext(context: VariableContextType): BulkMessageVariable[] {\n return VARIABLE_CONTEXT_MAP[context] || BULK_MESSAGE_VARIABLES;\n}\n\n// Helper para validar variables en un contexto\n// Soporta tanto {{variable}} como {variable}\nexport function validateVariablesInContext(\n message: string,\n context: VariableContextType,\n): { valid: boolean; invalidVariables: string[] } {\n // Soportar tanto {{variable}} como {variable}\n const doubleBracePattern = /\\{\\{(\\w+)\\}\\}/g;\n const singleBracePattern = /\\{(\\w+)\\}/g;\n\n const doubleBraceMatches = message.matchAll(doubleBracePattern);\n const singleBraceMatches = message.matchAll(singleBracePattern);\n\n const invalidVariables: string[] = [];\n const validVariables = getVariablesByContext(context).map((v) => v.name);\n\n // Validar variables con doble llave\n for (const match of doubleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n // Validar variables con una sola llave\n for (const match of singleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName) && !invalidVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n return {\n valid: invalidVariables.length === 0,\n invalidVariables,\n };\n}\n\nexport const BULK_MESSAGE_VARIABLE_CATEGORIES = {\n client: 'Cliente',\n gym: 'Gimnasio',\n membership: 'Membresía',\n activity: 'Actividad',\n datetime: 'Fecha/Hora',\n} as const;\n","// Permission constants\nexport const PERMISSIONS = {\n // Organizations\n ORGANIZATIONS_CREATE: 'ORGANIZATIONS_CREATE',\n ORGANIZATIONS_READ: 'ORGANIZATIONS_READ',\n ORGANIZATIONS_UPDATE: 'ORGANIZATIONS_UPDATE',\n ORGANIZATIONS_DELETE: 'ORGANIZATIONS_DELETE',\n\n // Gyms\n GYMS_CREATE: 'GYMS_CREATE',\n GYMS_READ: 'GYMS_READ',\n GYMS_UPDATE: 'GYMS_UPDATE',\n GYMS_DELETE: 'GYMS_DELETE',\n\n // Collaborators\n COLLABORATORS_CREATE: 'COLLABORATORS_CREATE',\n COLLABORATORS_READ: 'COLLABORATORS_READ',\n COLLABORATORS_UPDATE: 'COLLABORATORS_UPDATE',\n COLLABORATORS_DELETE: 'COLLABORATORS_DELETE',\n\n // Clients\n CLIENTS_CREATE: 'CLIENTS_CREATE',\n CLIENTS_READ: 'CLIENTS_READ',\n CLIENTS_UPDATE: 'CLIENTS_UPDATE',\n CLIENTS_DELETE: 'CLIENTS_DELETE',\n\n // Contracts\n CONTRACTS_CREATE: 'CONTRACTS_CREATE',\n CONTRACTS_READ: 'CONTRACTS_READ',\n CONTRACTS_UPDATE: 'CONTRACTS_UPDATE',\n CONTRACTS_APPROVE: 'CONTRACTS_APPROVE',\n CONTRACTS_CANCEL: 'CONTRACTS_CANCEL',\n\n // Check-ins\n CHECKINS_CREATE: 'CHECKINS_CREATE',\n CHECKINS_READ: 'CHECKINS_READ',\n\n // Reports\n REPORTS_VIEW: 'REPORTS_VIEW',\n REPORTS_FINANCIAL: 'REPORTS_FINANCIAL',\n\n // Settings\n SETTINGS_UPDATE: 'SETTINGS_UPDATE',\n\n // Assets\n ASSETS_CREATE: 'ASSETS_CREATE',\n ASSETS_READ: 'ASSETS_READ',\n ASSETS_DELETE: 'ASSETS_DELETE',\n\n // Files\n FILES_CREATE: 'FILES_CREATE',\n FILES_READ: 'FILES_READ',\n FILES_DELETE: 'FILES_DELETE',\n\n // Products\n PRODUCTS_CREATE: 'PRODUCTS_CREATE',\n PRODUCTS_READ: 'PRODUCTS_READ',\n PRODUCTS_UPDATE: 'PRODUCTS_UPDATE',\n PRODUCTS_DELETE: 'PRODUCTS_DELETE',\n\n // Product Categories\n PRODUCT_CATEGORIES_CREATE: 'PRODUCT_CATEGORIES_CREATE',\n PRODUCT_CATEGORIES_READ: 'PRODUCT_CATEGORIES_READ',\n PRODUCT_CATEGORIES_UPDATE: 'PRODUCT_CATEGORIES_UPDATE',\n PRODUCT_CATEGORIES_DELETE: 'PRODUCT_CATEGORIES_DELETE',\n\n // Sales\n SALES_CREATE: 'SALES_CREATE',\n SALES_READ: 'SALES_READ',\n SALES_UPDATE: 'SALES_UPDATE',\n SALES_DELETE: 'SALES_DELETE',\n\n // Suppliers\n SUPPLIERS_CREATE: 'SUPPLIERS_CREATE',\n SUPPLIERS_READ: 'SUPPLIERS_READ',\n SUPPLIERS_UPDATE: 'SUPPLIERS_UPDATE',\n SUPPLIERS_DELETE: 'SUPPLIERS_DELETE',\n\n // Payment Methods\n PAYMENT_METHODS_CREATE: 'PAYMENT_METHODS_CREATE',\n PAYMENT_METHODS_READ: 'PAYMENT_METHODS_READ',\n PAYMENT_METHODS_UPDATE: 'PAYMENT_METHODS_UPDATE',\n PAYMENT_METHODS_DELETE: 'PAYMENT_METHODS_DELETE',\n\n // WhatsApp\n WHATSAPP_READ: 'WHATSAPP_READ',\n WHATSAPP_SEND: 'WHATSAPP_SEND',\n WHATSAPP_MANAGE: 'WHATSAPP_MANAGE',\n WHATSAPP_BULK_SEND: 'WHATSAPP_BULK_SEND',\n WHATSAPP_BULK_MANAGE: 'WHATSAPP_BULK_MANAGE',\n\n // Messages\n MESSAGES_READ: 'MESSAGES_READ',\n MESSAGES_CREATE: 'MESSAGES_CREATE',\n MESSAGES_RETRY: 'MESSAGES_RETRY',\n MESSAGES_CANCEL: 'MESSAGES_CANCEL',\n\n // Activities\n ACTIVITIES_CREATE: 'ACTIVITIES_CREATE',\n ACTIVITIES_READ: 'ACTIVITIES_READ',\n ACTIVITIES_UPDATE: 'ACTIVITIES_UPDATE',\n ACTIVITIES_DELETE: 'ACTIVITIES_DELETE',\n ACTIVITIES_MANAGE_NOTIFICATIONS: 'ACTIVITIES_MANAGE_NOTIFICATIONS',\n\n // Tags\n TAGS_CREATE: 'TAGS_CREATE',\n TAGS_READ: 'TAGS_READ',\n TAGS_UPDATE: 'TAGS_UPDATE',\n TAGS_DELETE: 'TAGS_DELETE',\n\n // Commissions\n COMMISSIONS_CONFIG_CREATE: 'COMMISSIONS_CONFIG_CREATE',\n COMMISSIONS_CONFIG_READ: 'COMMISSIONS_CONFIG_READ',\n COMMISSIONS_CONFIG_UPDATE: 'COMMISSIONS_CONFIG_UPDATE',\n COMMISSIONS_RULES_CREATE: 'COMMISSIONS_RULES_CREATE',\n COMMISSIONS_RULES_READ: 'COMMISSIONS_RULES_READ',\n COMMISSIONS_RULES_UPDATE: 'COMMISSIONS_RULES_UPDATE',\n COMMISSIONS_RULES_DELETE: 'COMMISSIONS_RULES_DELETE',\n COMMISSIONS_CALCULATIONS_READ: 'COMMISSIONS_CALCULATIONS_READ',\n COMMISSIONS_REPORTS_VIEW: 'COMMISSIONS_REPORTS_VIEW',\n\n // Catalog\n CATALOG_READ: 'CATALOG_READ',\n CATALOG_UPDATE: 'CATALOG_UPDATE',\n CATALOG_MANAGE: 'CATALOG_MANAGE',\n\n // Special permissions\n SUPER_ADMIN: 'SUPER_ADMIN',\n OWNER: 'OWNER',\n All: 'ALL',\n} as const;\n\n// Role definitions\nexport const ROLE_PERMISSIONS = {\n ADMIN: Object.values(PERMISSIONS),\n MANAGER: [\n PERMISSIONS.GYMS_READ,\n PERMISSIONS.COLLABORATORS_READ,\n PERMISSIONS.CLIENTS_CREATE,\n PERMISSIONS.CLIENTS_READ,\n PERMISSIONS.CLIENTS_UPDATE,\n PERMISSIONS.CONTRACTS_CREATE,\n PERMISSIONS.CONTRACTS_READ,\n PERMISSIONS.CHECKINS_CREATE,\n PERMISSIONS.CHECKINS_READ,\n PERMISSIONS.REPORTS_VIEW,\n PERMISSIONS.ASSETS_CREATE,\n PERMISSIONS.ASSETS_READ,\n PERMISSIONS.ASSETS_DELETE,\n PERMISSIONS.FILES_CREATE,\n PERMISSIONS.FILES_READ,\n PERMISSIONS.FILES_DELETE,\n PERMISSIONS.PRODUCTS_CREATE,\n PERMISSIONS.PRODUCTS_READ,\n PERMISSIONS.PRODUCTS_UPDATE,\n PERMISSIONS.PRODUCTS_DELETE,\n PERMISSIONS.PRODUCT_CATEGORIES_CREATE,\n PERMISSIONS.PRODUCT_CATEGORIES_READ,\n PERMISSIONS.PRODUCT_CATEGORIES_UPDATE,\n PERMISSIONS.PRODUCT_CATEGORIES_DELETE,\n PERMISSIONS.SALES_CREATE,\n PERMISSIONS.SALES_READ,\n PERMISSIONS.SALES_UPDATE,\n PERMISSIONS.SUPPLIERS_CREATE,\n PERMISSIONS.SUPPLIERS_READ,\n PERMISSIONS.SUPPLIERS_UPDATE,\n PERMISSIONS.SUPPLIERS_DELETE,\n PERMISSIONS.PAYMENT_METHODS_CREATE,\n PERMISSIONS.PAYMENT_METHODS_READ,\n PERMISSIONS.PAYMENT_METHODS_UPDATE,\n PERMISSIONS.PAYMENT_METHODS_DELETE,\n PERMISSIONS.COMMISSIONS_RULES_READ,\n PERMISSIONS.COMMISSIONS_CALCULATIONS_READ,\n ],\n} as const;\n\n// Cache TTL values (in milliseconds - cache-manager standard)\nexport const CACHE_TTL = {\n USER_PERMISSIONS: 900000, // 15 minutes\n GYM_DATA: 1800000, // 30 minutes\n STATIC_DATA: 3600000, // 60 minutes\n REPORTS: 300000, // 5 minutes\n DASHBOARD: 180000, // 3 minutes\n WHATSAPP_MESSAGE_STATUS: 300000, // 5 minutes\n ONBOARDING_STATUS: 3600000, // 1 hour\n ONBOARDING_LOCK: 300000, // 5 minutes\n} as const;\n\n// File size limits (in bytes)\nexport const FILE_LIMITS = {\n MAX_FILE_SIZE: 10 * 1024 * 1024, // 10MB\n MAX_IMAGE_SIZE: 5 * 1024 * 1024, // 5MB\n MAX_DOCUMENT_SIZE: 10 * 1024 * 1024, // 10MB\n} as const;\n\n// Pagination defaults\nexport const PAGINATION_DEFAULTS = {\n PAGE: 1,\n LIMIT: 20,\n MAX_LIMIT: 100,\n} as const;\n\n// Date formats\nexport const DATE_FORMATS = {\n DATE_ONLY: 'YYYY-MM-DD',\n DATETIME: 'YYYY-MM-DD HH:mm:ss',\n TIME_ONLY: 'HH:mm:ss',\n} as const;\n\n// Headers\nexport const HEADERS = {\n GYM_ID: 'X-Gym-Id',\n REQUEST_ID: 'X-Request-Id',\n} as const;\n\n// Re-export template constants\nexport * from './constants/template-codes.constants';\nexport * from './constants/bulk-message-variables';\n","export enum UserType {\n OWNER = 'owner',\n COLLABORATOR = 'collaborator',\n}\n\nexport enum SubscriptionStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n EXPIRED = 'expired',\n PAUSED = 'paused',\n PENDING_UPGRADE = 'pending_upgrade',\n}\n\nexport enum CollaboratorStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum InvitationStatus {\n PENDING = 'pending',\n ACCEPTED = 'accepted',\n CANCELLED = 'cancelled',\n EXPIRED = 'expired',\n}\n\nexport enum ClientStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum PlanStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n ARCHIVED = 'archived',\n}\n\nexport enum PlanType {\n BASIC = 'BASIC',\n PREMIUM = 'PREMIUM',\n ENTERPRISE = 'ENTERPRISE',\n}\n\nexport enum ContractStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n EXPIRING_SOON = 'expiring_soon',\n EXPIRED = 'expired',\n CANCELLED = 'cancelled',\n FOR_RENEW = 'for_renew',\n SUSPENDED = 'suspended',\n GRACE_PERIOD = 'grace_period',\n TERMINATED = 'terminated',\n}\n\nexport enum CancellationReason {\n PRICE_TOO_HIGH = 'PRICE_TOO_HIGH',\n NOT_USING_SERVICE = 'NOT_USING_SERVICE',\n MOVING_LOCATION = 'MOVING_LOCATION',\n FINANCIAL_ISSUES = 'FINANCIAL_ISSUES',\n SERVICE_DISSATISFACTION = 'SERVICE_DISSATISFACTION',\n TEMPORARY_BREAK = 'TEMPORARY_BREAK',\n OTHER = 'OTHER',\n}\n\nexport enum SuspensionType {\n VACATION = 'vacation',\n MEDICAL = 'medical',\n FINANCIAL = 'financial',\n OTHER = 'other',\n}\n\nexport enum PaymentFrequency {\n MONTHLY = 'monthly',\n QUARTERLY = 'quarterly',\n ANNUAL = 'annual',\n}\n\nexport enum AssetStatus {\n ACTIVE = 'active',\n DELETED = 'deleted',\n}\n\nexport enum AssetCategory {\n MEDICAL_DOCUMENT = 'medical_document',\n IDENTIFICATION = 'identification',\n INSURANCE = 'insurance',\n CONTRACT_COPY = 'contract_copy',\n OTHER = 'other',\n}\n\nexport enum ContractAssetType {\n PAYMENT_RECEIPT = 'payment_receipt',\n CONTRACT_DOCUMENT = 'contract_document',\n IDENTIFICATION = 'identification',\n OTHER = 'other',\n}\n\nexport enum MessageStatus {\n PENDING = 'pending',\n SCHEDULED = 'scheduled',\n QUEUED = 'queued',\n SENDING = 'sending',\n SENT = 'sent',\n FAILED = 'failed',\n CANCELLED = 'cancelled',\n}\n","/**\n * Evento para enviar un mensaje de WhatsApp\n */\nexport interface WhatsAppMessageSendEventData {\n // Identificadores\n gymId: string;\n instanceName: string; // Nombre de la instancia de Evolution API\n\n // Destinatario\n phoneNumber: string;\n\n // Contenido\n content: string;\n\n // Metadata opcional\n messageId?: string;\n clientId?: string;\n templateId?: string;\n variables?: Record<string, any>;\n\n // Usuario que generó el envío\n userId?: string;\n}\n\n/**\n * Evento para reintentar un mensaje de WhatsApp\n * El mensaje ya está construido, solo necesita ser reenviado\n */\nexport interface WhatsAppMessageRetryEventData {\n messageId: string; // ID del mensaje a reintentar\n gymId: string; // ID del gimnasio\n userId?: string; // Usuario que solicitó el reintento\n\n // Datos del mensaje necesarios para el reintento\n content: string; // Contenido del mensaje\n recipientPhone: string; // Teléfono del destinatario\n instanceName: string; // Nombre de la instancia de Evolution API\n}\n\n/**\n * Nombres de eventos de WhatsApp\n */\nexport const WHATSAPP_EVENTS = {\n MESSAGE_SEND: 'whatsapp/message.send',\n MESSAGE_RETRY: 'whatsapp/message.retry',\n MESSAGE_RECEIVED: 'whatsapp/message.received',\n CONNECTION_UPDATE: 'whatsapp/connection.update',\n} as const;\n","import { VariableContextType } from '../constants/bulk-message-variables';\n\nexport const BULK_MESSAGING_EVENTS = {\n SEND_BULK_MESSAGES: 'whatsapp/bulk-messages.send',\n} as const;\n\nexport interface BulkMessageEventData {\n sendId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n templateId?: string;\n message: string;\n variableContext?: VariableContextType; // Tipo de contexto\n clients: Array<{\n messageId?: string;\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: Record<string, any>; // Raw data sin procesar\n }>;\n gymData: Record<string, any>; // Raw data del gym\n contextData?: Record<string, any>; // Data adicional del contexto (activity, event, etc.)\n}\n\nexport interface SendBulkMessagesEvent {\n name: typeof BULK_MESSAGING_EVENTS.SEND_BULK_MESSAGES;\n data: BulkMessageEventData;\n}\n","export const ACTIVITY_EVENTS = {\n SEND_ACTIVITY_NOTIFICATION: 'activity/notification.send',\n} as const;\n\nexport interface SendActivityNotificationEvent {\n name: typeof ACTIVITY_EVENTS.SEND_ACTIVITY_NOTIFICATION;\n data: {\n activityId: string;\n notificationId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n message: string;\n clients: Array<{\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: {\n id: string;\n name: string;\n email?: string;\n phone: string;\n activePlan?: {\n name: string;\n expirationDate?: Date;\n amount?: number;\n };\n membershipStatus?: string;\n metadata?: Record<string, any>;\n };\n }>;\n gymData: {\n name: string;\n phone?: string;\n address?: string;\n countryConfig: {\n currency: string;\n locale: string;\n };\n };\n activityData: {\n name: string;\n startDateTime: Date;\n durationMinutes: number;\n location: string;\n };\n };\n}\n","import { z } from 'zod';\n\nexport const templateGenerationRequestSchema = z.object({\n templateCode: z.string(),\n templateMetadata: z.object({\n title: z.string(),\n description: z.string(),\n variables: z.array(z.string()),\n exampleValues: z.record(z.string()),\n }),\n userPrompt: z.string().optional(),\n language: z.string().default('es'),\n});\n\nexport const aiGeneratedTemplateSchema = z.object({\n message: z.string().describe('Mensaje generado con variables en formato {{variable}}'),\n tone: z.enum(['professional', 'friendly', 'casual', 'urgent']).describe('Tono del mensaje'),\n usedVariables: z.array(z.string()).describe('Variables utilizadas en el mensaje'),\n suggestions: z.array(z.string()).optional().describe('Sugerencias adicionales'),\n});\n\nexport type TemplateGenerationRequest = z.infer<typeof templateGenerationRequestSchema>;\nexport type AIGeneratedTemplate = z.infer<typeof aiGeneratedTemplateSchema>;\n","import { z } from 'zod';\n\nexport const bulkMessageGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for message generation'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .optional()\n .describe('Tone of the message'),\n includeVariables: z.array(z.string()).optional().describe('Variables to include in the message'),\n additionalRequirements: z.string().optional().describe('Additional requirements for the message'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const bulkMessageSchema = z.object({\n message: z.string().describe('Generated message with variables'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .describe('Tone of the message'),\n usedVariables: z.array(z.string()).describe('Variables used in the message'),\n suggestions: z.array(z.string()).optional().describe('Additional message suggestions'),\n});\n\nexport type BulkMessageGenerationRequest = z.infer<typeof bulkMessageGenerationRequestSchema>;\nexport type BulkMessage = z.infer<typeof bulkMessageSchema>;\n","import { z } from 'zod';\n\nexport const activityNotificationGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for notification generation'),\n tone: z\n .enum(['friendly', 'formal', 'urgent', 'motivational', 'reminder'])\n .optional()\n .describe('Tone of the notification'),\n currentMessage: z.string().optional().describe('Current message to improve or use as reference'),\n additionalRequirements: z\n .string()\n .optional()\n .describe('Additional requirements for the notification'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const activityNotificationSchema = z.object({\n message: z.string().describe('Generated notification message with activity variables'),\n});\n\nexport type ActivityNotificationGenerationRequest = z.infer<\n typeof activityNotificationGenerationRequestSchema\n>;\nexport type ActivityNotification = z.infer<typeof activityNotificationSchema>;\n","export enum RoleNames {\n ADMIN = 'Admin',\n ENCARGADO = 'Encargado',\n OWNER = 'OWNER', // Pseudo-role for gym owners\n}\n\nexport const ROLE_NAMES = RoleNames;\n\nexport type RoleName = RoleNames;\n\nexport function isAdminRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ADMIN;\n}\n\nexport function isEncargadoRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ENCARGADO;\n}\n\nexport function canAccessFeature(\n userRole: string | null | undefined,\n allowedRoles: string[] | RoleNames[]\n): boolean {\n if (!userRole) return false;\n // OWNER pseudo-role has access to everything\n if (userRole === RoleNames.OWNER) return true;\n return allowedRoles.includes(userRole as any);\n}\n\nexport function getRoleDisplayName(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Administrador';\n case RoleNames.ENCARGADO:\n return 'Encargado';\n case RoleNames.OWNER:\n return 'Propietario';\n default:\n return roleName;\n }\n}\n\nexport function getRoleDescription(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Acceso completo a todas las funcionalidades del gimnasio, gestión de colaboradores y configuración';\n case RoleNames.ENCARGADO:\n return 'Gestión diaria del gimnasio: clientes, contratos, check-ins y reportes';\n case RoleNames.OWNER:\n return 'Acceso completo a todas las funcionalidades, organización y suscripción';\n default:\n return '';\n }\n}\n\nexport function getRoleCapabilities(roleName: string | null | undefined): string[] {\n if (!roleName) return [];\n\n switch (roleName) {\n case RoleNames.OWNER:\n return [\n 'Acceso completo a todas las funcionalidades',\n 'Gestión de organización',\n 'Gestión de suscripción y facturación',\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ADMIN:\n return [\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ENCARGADO:\n return [\n 'Gestión de clientes (ver, crear, editar)',\n 'Creación y renovación de contratos',\n 'Check-ins',\n 'Ver reportes',\n 'Gestión de inventario',\n 'Ventas',\n ];\n default:\n return [];\n }\n}","/**\n * Simple phone number utilities for WhatsApp Evolution API\n */\n\n/**\n * Normalizes a phone number for Evolution API\n * Adds country code +51 for Peru if missing and ensures + prefix\n *\n * @param phoneNumber - Phone number in various formats\n * @returns Normalized phone number with + prefix\n *\n * Examples:\n * - \"987654321\" -> \"+51987654321\"\n * - \"51987654321\" -> \"+51987654321\"\n * - \"+51987654321\" -> \"+51987654321\"\n */\nexport function normalizePhoneForEvolution(phoneNumber: string): string {\n if (!phoneNumber) {\n throw new Error('Phone number is required');\n }\n\n // Remove all non-numeric characters except +\n let cleaned = phoneNumber.replace(/[^\\d+]/g, '');\n\n // Remove + if exists, we'll add it back\n if (cleaned.startsWith('+')) {\n cleaned = cleaned.substring(1);\n }\n\n // Handle Peru specific cases\n if (cleaned.length === 9) {\n // Local number, add Peru country code\n return `+51${cleaned}`;\n }\n\n if (cleaned.length === 11 && cleaned.startsWith('51')) {\n // Already has country code\n return `+${cleaned}`;\n }\n\n if (cleaned.length === 12 && cleaned.startsWith('051')) {\n // Remove leading 0\n return `+${cleaned.substring(1)}`;\n }\n\n // For other cases, assume it needs + prefix\n if (!cleaned.startsWith('+')) {\n return `+${cleaned}`;\n }\n\n return cleaned;\n}\n\n/**\n * Validates if a phone number is valid for Peru\n */\nexport function isValidPeruvianPhone(phoneNumber: string): boolean {\n try {\n const normalized = normalizePhoneForEvolution(phoneNumber);\n // Peru numbers should be +51 followed by 9 digits starting with 9\n return /^\\+51[9]\\d{8}$/.test(normalized);\n } catch {\n return false;\n }\n}\n","export enum CommissionRuleType {\n PLAN = 'PLAN',\n AMOUNT = 'AMOUNT',\n PROMOTION = 'PROMOTION',\n}\n\nexport enum CommissionStatus {\n PENDING = 'PENDING',\n CONFIRMED = 'CONFIRMED',\n PAID = 'PAID',\n REVERSED = 'REVERSED',\n}\n\nexport enum CommissionChangeType {\n CREATED = 'CREATED',\n UPDATED = 'UPDATED',\n DELETED = 'DELETED',\n}\n\nexport enum CommissionEntityType {\n CONFIG = 'CONFIG',\n RULE = 'RULE',\n}\n\nexport interface RuleCriteria {\n planId?: string;\n minAmount?: number;\n maxAmount?: number;\n planIds?: string[];\n}\n\nexport interface CommissionConfigDto {\n id: string;\n gymId: string;\n defaultPercentage: number;\n reversalPeriodDays: number;\n minimumContractDays: number;\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateCommissionConfigDto {\n defaultPercentage: number;\n reversalPeriodDays: number;\n minimumContractDays: number;\n isActive: boolean;\n}\n\nexport interface UpdateCommissionConfigDto {\n defaultPercentage?: number;\n reversalPeriodDays?: number;\n minimumContractDays?: number;\n isActive?: boolean;\n}\n\nexport interface CommissionRuleDto {\n id: string;\n gymId: string;\n name: string;\n type: CommissionRuleType;\n percentage: number;\n priority: number;\n criteria: RuleCriteria;\n startDate?: string;\n endDate?: string;\n description?: string;\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n usageCount: number;\n}\n\nexport interface CreateCommissionRuleDto {\n name: string;\n type: CommissionRuleType;\n percentage: number;\n criteria: RuleCriteria;\n startDate?: string;\n endDate?: string;\n description?: string;\n}\n\nexport interface UpdateCommissionRuleDto {\n name?: string;\n percentage?: number;\n criteria?: RuleCriteria;\n startDate?: string;\n endDate?: string;\n description?: string;\n isActive?: boolean;\n}\n\nexport interface ReorderCommissionRulesDto {\n ruleIds: string[];\n}\n\nexport interface CommissionRuleFiltersDto {\n type?: CommissionRuleType;\n isActive?: boolean;\n search?: string;\n page: number;\n limit: number;\n}\n\nexport interface CommissionCalculationDto {\n id: string;\n gymId: string;\n contractId: string;\n collaboratorId: string;\n ruleId: string | null;\n percentage: number;\n baseAmount: number;\n amount: number;\n status: CommissionStatus;\n saleDate: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CommissionFiltersDto {\n status?: CommissionStatus;\n collaboratorId?: string;\n startDate?: string;\n endDate?: string;\n page: number;\n limit: number;\n}\n\nexport interface CommissionSummaryDto {\n period: {\n start: string;\n end: string;\n };\n totals: {\n totalCommissions: number;\n totalContracts: number;\n averageCommission: number;\n totalPaid: number;\n totalPending: number;\n };\n byStatus: {\n status: CommissionStatus;\n count: number;\n total: number;\n }[];\n}\n\nexport interface SimulateCommissionDto {\n collaboratorId: string;\n planId: string;\n baseAmount: number;\n saleDate: string;\n}\n\nexport interface CommissionSimulationDto {\n percentage: number;\n baseAmount: number;\n amount: number;\n appliedRule: {\n id: string;\n name: string;\n type: CommissionRuleType;\n percentage: number;\n } | null;\n isDefault: boolean;\n}\n\nexport interface CommissionComparisonDto {\n scenarios: CommissionSimulationDto[];\n bestScenario: {\n index: number;\n amount: number;\n difference: number;\n };\n}\n\nexport interface ReportFiltersDto {\n startDate?: string;\n endDate?: string;\n period?: 'week' | 'month' | 'quarter' | 'year';\n ruleId?: string;\n collaboratorId?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface CommissionSummaryReportDto {\n period: {\n start: string;\n end: string;\n };\n totals: {\n totalCommissions: number;\n totalContracts: number;\n averageCommission: number;\n totalPaid: number;\n totalPending: number;\n };\n byStatus: {\n status: string;\n count: number;\n total: number;\n }[];\n byRule: {\n ruleId: string;\n ruleName: string;\n ruleType: string;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n }[];\n byCollaborator: {\n collaboratorId: string;\n collaboratorName: string;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n }[];\n trend: {\n date: string;\n commissions: number;\n contracts: number;\n }[];\n}\n\nexport interface RuleReportDto {\n ruleId: string;\n ruleName: string;\n ruleType: string;\n percentage: number;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n minCommission: number;\n maxCommission: number;\n effectiveness: {\n usageRate: number;\n conversionImpact: number;\n roi: number;\n };\n}\n\nexport interface CollaboratorReportDto {\n collaboratorId: string;\n collaboratorName: string;\n roleName: string;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n totalPaid: number;\n totalPending: number;\n performance: {\n rank: number;\n percentile: number;\n comparisonWithAverage: number;\n };\n rulesUsed: {\n ruleId: string;\n ruleName: string;\n count: number;\n total: number;\n }[];\n}\n\nexport interface PromotionReportFiltersDto {\n promotionId?: string;\n status?: 'active' | 'scheduled' | 'expired';\n startDate?: string;\n endDate?: string;\n}\n\nexport interface PromotionReportDto {\n promotionId: string;\n promotionName: string;\n percentage: number;\n startDate: string;\n endDate: string;\n status: string;\n impact: {\n contractsCreated: number;\n totalCommissions: number;\n averageCommission: number;\n comparisonWithNormal: {\n normalCommissions: number;\n promotionalCommissions: number;\n additionalCost: number;\n percentageIncrease: number;\n };\n salesIncrease: {\n contractsBeforePromotion: number;\n contractsDuringPromotion: number;\n percentageIncrease: number;\n };\n roi: {\n additionalRevenue: number;\n additionalCost: number;\n netBenefit: number;\n roiPercentage: number;\n };\n };\n}\n\nexport interface CommissionHistoryFiltersDto {\n entityType?: CommissionEntityType;\n changeType?: CommissionChangeType;\n startDate?: string;\n endDate?: string;\n page: number;\n limit: number;\n}\n\nexport interface CommissionHistoryDto {\n id: string;\n configId: string | null;\n ruleId: string | null;\n changeType: CommissionChangeType;\n entityType: CommissionEntityType;\n previousValue: any;\n newValue: any;\n changedBy: {\n id: string;\n name: string;\n email: string;\n };\n changedAt: string;\n reason: string | null;\n impact: string | null;\n}\n\nexport interface PaginatedCommissionResult<T> {\n items: T[];\n total: number;\n limit: number;\n offset: number;\n}\n","// ============================================================================\n// Public Catalog Types\n// ============================================================================\n\n/**\n * Hero section of the catalog\n */\nexport interface CatalogHeroSection {\n logo: string | null;\n banner: string | null;\n heroMessage: string | null;\n ctaButtonText: string;\n whatsappUrl: string | null;\n}\n\n/**\n * Activity/class offered by the gym\n */\nexport interface CatalogActivity {\n id: string;\n name: string;\n description: string | null;\n startTime: string;\n duration: number;\n days: string[];\n imageUrl: string | null;\n}\n\n/**\n * Membership plan offered by the gym\n */\nexport interface CatalogPlan {\n id: string;\n name: string;\n description: string | null;\n price: number;\n currency: string;\n duration: string;\n features: any;\n whatsappUrl: string | null;\n}\n\n/**\n * Social media links\n */\nexport interface CatalogSocialMedia {\n instagram: string | null;\n facebook: string | null;\n tiktok: string | null;\n whatsapp: string | null;\n}\n\n/**\n * Gym location information\n */\nexport interface CatalogLocation {\n address: string | null;\n city: string | null;\n state: string | null;\n latitude: number | null;\n longitude: number | null;\n}\n\n/**\n * Formatted schedule for a day\n */\nexport interface FormattedSchedule {\n day: string;\n hours: string;\n}\n\n/**\n * Complete catalog response\n */\nexport interface CatalogResponse {\n gym: {\n id: string;\n name: string;\n slug: string;\n description: string | null;\n phone: string | null;\n email: string | null;\n currency: string;\n };\n hero: CatalogHeroSection;\n plans: CatalogPlan[];\n activities: CatalogActivity[];\n schedule: FormattedSchedule[];\n socialMedia: CatalogSocialMedia;\n location: CatalogLocation;\n config: Record<string, any>;\n}\n\n/**\n * City with gym count\n */\nexport interface CityWithGyms {\n city: string;\n state: string;\n count: number;\n}\n\n/**\n * Search catalog parameters\n */\nexport interface SearchCatalogParams {\n search?: string;\n city?: string;\n state?: string;\n latitude?: string;\n longitude?: string;\n radius?: string;\n limit?: number;\n offset?: number;\n}\n\n/**\n * Catalog gym in search results\n */\nexport interface CatalogGym {\n id: string;\n name: string;\n slug: string;\n address?: string;\n city?: string;\n state?: string;\n phone?: string;\n email?: string;\n amenities?: any;\n settings?: any;\n}\n\n/**\n * Search catalog response\n */\nexport interface SearchCatalogResponse {\n gyms: CatalogGym[];\n pagination: {\n total: number;\n limit: number;\n offset: number;\n };\n}\n\n// ============================================================================\n// Lead Management Types\n// ============================================================================\n\n/**\n * Lead gender enum\n */\nexport enum LeadGender {\n MALE = 'male',\n FEMALE = 'female',\n OTHER = 'other',\n}\n\n/**\n * Create lead DTO\n */\nexport interface CreateLeadDto {\n fullName: string;\n age: number;\n phone: string;\n gender: LeadGender;\n objective: string;\n}\n\n/**\n * Catalog lead entity\n */\nexport interface CatalogLead {\n id: string;\n catalogId: string;\n fullName: string;\n age: number;\n phone: string;\n gender: string;\n objective: string;\n source: string;\n ipAddress: string | null;\n userAgent: string | null;\n isContacted: boolean;\n contactedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Lead filters for querying\n */\nexport interface LeadFiltersDto {\n startDate?: string;\n endDate?: string;\n isContacted?: boolean;\n limit?: number;\n offset?: number;\n}\n\n/**\n * Lead submission response\n */\nexport interface LeadSubmissionResponse {\n message: string;\n}\n\n// ============================================================================\n// Admin Catalog Configuration Types\n// ============================================================================\n\n/**\n * Gym catalog configuration\n */\nexport interface GymCatalog {\n id: string;\n gymId: string;\n slug: string;\n logo: string | null; // Deprecated: kept for backward compatibility\n banner: string | null; // Deprecated: kept for backward compatibility\n logoFileId: string | null;\n bannerFileId: string | null;\n heroMessage: string | null;\n ctaButtonText: string;\n config: Record<string, any> | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Update catalog configuration DTO\n */\nexport interface UpdateCatalogConfigDto {\n slug?: string;\n heroMessage?: string;\n ctaButtonText?: string;\n logoFileId?: string;\n bannerFileId?: string;\n config?: Record<string, any>;\n}\n","// Feature Types\nexport enum FeatureType {\n AI_GENERATION = 'ai_generation',\n BULK_WHATSAPP = 'bulk_whatsapp',\n}\n\n// Credit Account Models\nexport interface CreditAccount {\n id: string;\n organizationId: string;\n balance: number;\n monthlyAllowance: number;\n lastResetAt: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreditAccountWithOrgName {\n id: string;\n organizationId: string;\n organizationName: string;\n balance: number;\n monthlyAllowance: number;\n lastResetAt: string;\n createdAt: string;\n}\n\n// Credit Transaction Models\nexport interface CreditTransaction {\n id: string;\n accountId: string;\n featureType: FeatureType;\n quantity: number;\n description?: string;\n metadata?: Record<string, any>;\n createdAt: string;\n}\n\n// Credit Adjustment Models\nexport interface CreditAdjustment {\n adjustment: number;\n reason: string;\n notes?: string;\n}\n\nexport interface CreditAdjustmentResponse {\n previousBalance: number;\n newBalance: number;\n adjusted: number;\n transactionId: string;\n}\n\n// Credit Usage Report Models\nexport interface CreditUsageReport {\n balance: number;\n monthlyAllowance: number;\n usedThisMonth: number;\n remaining: number;\n lastReset: string;\n usagePercentage: number;\n transactionCount: number;\n}\n\nexport interface CreditUsageReportQuery {\n startDate?: string;\n endDate?: string;\n}\n\n// Credit Stats (for existing endpoint)\nexport interface CreditStats {\n balance: number;\n monthlyAllowance: number;\n usedThisMonth: number;\n lastReset: string;\n}\n\n// DTOs for existing endpoints (already exported in bulk-messaging)\n// export interface GenerateAIMessageDto { ... }\n// export interface SendBulkMessagesDto { ... }","export enum DiscountType {\n PERCENTAGE = 'PERCENTAGE',\n FIXED_AMOUNT = 'FIXED_AMOUNT',\n}\n\n// Request DTOs\nexport interface CreatePromoCodeDto {\n code: string;\n description?: string;\n discountType: DiscountType;\n discountValue: number;\n validFrom: string;\n validUntil: string;\n maxUses?: number;\n minPurchaseAmount?: number;\n applicableTo?: {\n planIds?: string[];\n packageIds?: string[];\n };\n}\n\nexport interface UpdatePromoCodeDto {\n description?: string;\n discountType?: DiscountType;\n discountValue?: number;\n validFrom?: string;\n validUntil?: string;\n maxUses?: number;\n minPurchaseAmount?: number;\n applicableTo?: {\n planIds?: string[];\n packageIds?: string[];\n };\n}\n\nexport interface SearchPromoCodesParams {\n isActive?: boolean;\n code?: string;\n status?: 'active' | 'expired' | 'exhausted';\n page?: number;\n limit?: number;\n}\n\nexport interface ValidatePromoCodeDto {\n code: string;\n pricingPackageId: string;\n packagePrice: number;\n}\n\nexport interface ValidatePromoCodeResponseDto {\n valid: boolean;\n id?: string;\n code?: string;\n discountType?: string;\n discountValue?: number;\n discountAmount?: number;\n finalAmount?: number;\n error?: string;\n}\n\n// Response types\nexport interface PromoCode {\n id: string;\n gymId: string;\n code: string;\n description?: string;\n discountType: DiscountType;\n discountValue: number;\n validFrom: string;\n validUntil: string;\n maxUses?: number;\n currentUses: number;\n minPurchaseAmount?: number;\n applicableTo?: {\n planIds?: string[];\n packageIds?: string[];\n };\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n deletedAt?: string;\n\n // Counters\n _count?: {\n contracts: number;\n };\n}\n\nexport interface PromoCodeAnalytics {\n totalUses: number;\n remainingUses?: number;\n totalDiscount: number;\n averageDiscount: number;\n contractCount: number;\n isActive: boolean;\n daysUntilExpiration?: number;\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/utils/agent-fetch.ts","../src/resources/base.ts","../src/resources/auth.ts","../src/resources/organizations.ts","../src/resources/gyms.ts","../src/resources/collaborators.ts","../src/resources/roles.ts","../src/resources/clients.ts","../src/resources/membership-plans.ts","../src/resources/contracts.ts","../src/resources/dashboard.ts","../src/resources/check-ins.ts","../src/resources/invitations.ts","../src/resources/assets.ts","../src/resources/files.ts","../src/resources/public-catalog.ts","../src/resources/admin-catalog.ts","../src/resources/health.ts","../src/models/onboarding.ts","../src/resources/onboarding.ts","../src/resources/products.ts","../src/resources/sales.ts","../src/resources/suppliers.ts","../src/resources/users.ts","../src/resources/subscriptions.ts","../src/resources/subscription-plans.ts","../src/resources/admin-subscription-management.ts","../src/resources/payment-methods.ts","../src/resources/whatsapp.ts","../src/resources/whatsapp-templates.ts","../src/resources/bulk-messaging.ts","../src/resources/activities.ts","../src/resources/tags.ts","../src/resources/commission-config.ts","../src/resources/commission-rules.ts","../src/resources/commission-calculations.ts","../src/resources/commission-reports.ts","../src/resources/commission-promotions.ts","../src/resources/messages.ts","../src/resources/credits.ts","../src/resources/pricing-packages.ts","../src/resources/promo-codes.ts","../src/resources/members.ts","../src/resources/receivables.ts","../src/sdk.ts","../../shared/src/types/whatsapp-templates.types.ts","../../shared/src/constants/template-codes.constants.ts","../../shared/src/constants/bulk-message-variables.ts","../../shared/src/constants.ts","../../shared/src/enums.ts","../../shared/src/events/whatsapp.events.ts","../../shared/src/events/bulk-messaging.events.ts","../../shared/src/events/activity.events.ts","../../shared/src/schemas/ai-template.schema.ts","../../shared/src/schemas/bulk-message.schema.ts","../../shared/src/schemas/activity-notification.schema.ts","../../shared/src/utils/roleHelpers.ts","../../shared/src/types/bulk-message.types.ts","../../shared/src/utils/phone.utils.ts","../src/models/commissions.ts","../src/models/catalog.ts","../src/models/promo-codes.ts"],"names":["axios","OnboardingCacheStatus","OnboardingStep","UserType","SubscriptionStatus","CollaboratorStatus","InvitationStatus","ClientStatus","PlanStatus","PlanType","ContractStatus","CancellationReason","SuspensionType","PaymentFrequency","ContractInstallmentStatus","AssetStatus","AssetCategory","ContractAssetType","MessageStatus","FeatureType","z","RoleNames","CommissionRuleType","CommissionStatus","CommissionChangeType","CommissionEntityType","LeadGender","DiscountType"],"mappings":"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","file":"index.js","sourcesContent":["export class GymSpaceError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public code?: string,\n public details?: any,\n ) {\n super(message);\n this.name = 'GymSpaceError';\n }\n}\n\nexport class AuthenticationError extends GymSpaceError {\n constructor(message = 'Authentication failed') {\n super(message, 401, 'AUTHENTICATION_ERROR');\n this.name = 'AuthenticationError';\n }\n}\n\nexport class AuthorizationError extends GymSpaceError {\n constructor(message = 'Access denied') {\n super(message, 403, 'AUTHORIZATION_ERROR');\n this.name = 'AuthorizationError';\n }\n}\n\nexport class NotFoundError extends GymSpaceError {\n constructor(resource: string, id?: string) {\n const message = id ? `${resource} with id ${id} not found` : `${resource} not found`;\n super(message, 404, 'NOT_FOUND');\n this.name = 'NotFoundError';\n }\n}\n\nexport class ValidationError extends GymSpaceError {\n constructor(message: string, errors?: any) {\n super(message, 400, 'VALIDATION_ERROR', errors);\n this.name = 'ValidationError';\n }\n}\n\nexport class NetworkError extends GymSpaceError {\n constructor(message = 'Network request failed') {\n super(message, 0, 'NETWORK_ERROR');\n this.name = 'NetworkError';\n }\n}\n","import axios, {\n AxiosError,\n AxiosInstance,\n AxiosRequestConfig,\n InternalAxiosRequestConfig,\n} from 'axios';\nimport {\n AuthenticationError,\n AuthorizationError,\n GymSpaceError,\n NetworkError,\n NotFoundError,\n ValidationError,\n} from './errors';\nimport { GymSpaceConfig, RequestOptions } from './types';\n\nexport class ApiClient {\n private axiosInstance: AxiosInstance;\n private config: GymSpaceConfig;\n private refreshToken: string | null = null;\n private rememberMe: boolean | null = null;\n private onTokenRefreshed?: (accessToken: string, refreshToken?: string) => void;\n private onAuthFailure?: (error: AuthenticationError) => void;\n private isRefreshing = false;\n private failedRequestsQueue: Array<{\n resolve: (token: string) => void;\n reject: (error: Error) => void;\n }> = [];\n\n public getAccessToken(): string | null {\n return this.config.apiKey || null;\n }\n\n constructor(config: GymSpaceConfig) {\n this.config = config;\n\n this.axiosInstance = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 30000,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n },\n paramsSerializer: (params) => {\n const parts: string[] = [];\n\n Object.entries(params).forEach(([key, value]) => {\n if (value === undefined || value === null) {\n return;\n }\n\n // Convert arrays to comma-separated strings\n if (Array.isArray(value)) {\n if (value.length > 0) {\n // Encode each array element individually, then join with comma\n const encodedValues = value.map((v) => encodeURIComponent(String(v))).join(',');\n parts.push(`${encodeURIComponent(key)}=${encodedValues}`);\n }\n } else {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n });\n\n return parts.join('&');\n },\n });\n\n this.setupInterceptors();\n }\n\n private setupInterceptors(): void {\n // Request interceptor\n this.axiosInstance.interceptors.request.use(\n (config: InternalAxiosRequestConfig) => {\n // Check if this request should skip auth\n const skipAuth = (config as any).skipAuth;\n\n // Add Authorization header if auth token is configured and not skipped\n if (this.config.apiKey && config.headers && !skipAuth) {\n config.headers['Authorization'] = `Bearer ${this.config.apiKey}`;\n }\n\n // Add refresh token header if available (not skipped)\n if (this.refreshToken && this.config.apiKey && config.headers && !skipAuth) {\n config.headers['X-Refresh-Token'] = this.refreshToken;\n }\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n },\n );\n\n // Response interceptor - handle token refresh from backend\n this.axiosInstance.interceptors.response.use(\n (response) => {\n // Check if backend refreshed tokens\n const newAccessToken = response.headers['x-new-access-token'];\n const newRefreshToken = response.headers['x-new-refresh-token'];\n\n if (newAccessToken) {\n console.log('Tokens refreshed by backend, updating SDK...');\n this.setAuthToken(newAccessToken);\n\n if (newRefreshToken) {\n this.setRefreshToken(newRefreshToken);\n }\n\n // Notify client about token refresh\n if (this.onTokenRefreshed) {\n this.onTokenRefreshed(newAccessToken, newRefreshToken);\n }\n }\n\n return response;\n },\n async (error: AxiosError) => {\n // Handle 401 with automatic token refresh\n if (error.response?.status === 401) {\n const originalRequest = error.config;\n\n // Skip auth requests (login, refresh endpoints)\n if ((originalRequest as any)?.skipAuth) {\n throw this.handleError(error);\n }\n\n // If already refreshing, queue this request\n if (this.isRefreshing && this.refreshToken) {\n return new Promise((resolve, reject) => {\n this.failedRequestsQueue.push({\n resolve: (token: string) => {\n // Retry with new token\n if (originalRequest) {\n originalRequest.headers['Authorization'] = `Bearer ${token}`;\n this.axiosInstance.request(originalRequest).then(resolve).catch(reject);\n } else {\n reject(error);\n }\n },\n reject: (err: Error) => {\n reject(err);\n },\n });\n });\n }\n\n // Start refresh process\n if (this.refreshToken) {\n this.isRefreshing = true;\n\n try {\n console.log('Access token expired, attempting refresh...');\n\n // Call the member refresh endpoint directly\n const response = await axios.post(\n `${this.config.baseURL}/auth/members/refresh`,\n { refresh_token: this.refreshToken },\n { headers: { 'Content-Type': 'application/json' } },\n );\n\n const { accessToken: newAccessToken, refreshToken: newRefreshToken } = response.data;\n\n console.log('Token refresh successful');\n\n // Update SDK state\n this.setAuthToken(newAccessToken);\n if (newRefreshToken) {\n this.setRefreshToken(newRefreshToken);\n }\n\n // Notify listeners\n if (this.onTokenRefreshed) {\n this.onTokenRefreshed(newAccessToken, newRefreshToken);\n }\n\n // Process queued requests\n this.failedRequestsQueue.forEach((request) => {\n request.resolve(newAccessToken);\n });\n this.failedRequestsQueue = [];\n\n // Retry original request\n if (originalRequest) {\n originalRequest.headers['Authorization'] = `Bearer ${newAccessToken}`;\n return this.axiosInstance.request(originalRequest);\n }\n\n throw error;\n } catch (refreshError: any) {\n console.error('Token refresh failed:', refreshError.message);\n\n // Reject queued requests\n this.failedRequestsQueue.forEach((request) => {\n request.reject(refreshError);\n });\n this.failedRequestsQueue = [];\n\n // Clear auth on refresh failure\n this.clearAuth();\n\n const authError = new AuthenticationError(\n refreshError.response?.data?.message || 'Token refresh failed',\n );\n\n if (this.onAuthFailure) {\n this.onAuthFailure(authError);\n }\n\n throw authError;\n } finally {\n this.isRefreshing = false;\n }\n }\n }\n\n throw this.handleError(error);\n },\n );\n }\n\n private handleError(error: AxiosError): GymSpaceError {\n const requestPath = error.config?.url || 'unknown';\n const method = error.config?.method?.toUpperCase() || 'unknown';\n\n if (!error.response) {\n console.error('Network Error:', {\n method,\n path: requestPath,\n error: error.message,\n });\n return new NetworkError(error.message);\n }\n\n const { status, data } = error.response;\n const errorData = data as any;\n const resource = errorData?.resource || 'unknown';\n\n console.error('HTTP Error:', {\n method,\n path: requestPath,\n status,\n resource,\n message: errorData?.message || error.message,\n errorCode: errorData?.code,\n details: errorData,\n });\n\n switch (status) {\n case 401:\n return new AuthenticationError(errorData?.message || 'Authentication failed');\n case 403:\n return new AuthorizationError(errorData?.message || 'Access denied');\n case 404:\n return new NotFoundError(errorData?.resource || 'Resource', errorData?.id);\n case 400:\n return new ValidationError(errorData?.message || 'Validation failed', errorData?.errors);\n default:\n return new GymSpaceError(\n errorData?.message || error.message,\n status,\n errorData?.code,\n errorData,\n );\n }\n }\n\n private mergeOptions(options?: RequestOptions): AxiosRequestConfig {\n const headers: Record<string, string> = { ...options?.headers };\n\n if (options?.gymId) {\n headers['X-Gym-Id'] = options.gymId;\n }\n\n if (options?.gymContextMode) {\n headers['X-Gym-Context-Mode'] = options.gymContextMode;\n }\n\n return { headers };\n }\n\n async request<T>(\n method: string,\n path: string,\n data?: any,\n options?: RequestOptions & AxiosRequestConfig,\n ): Promise<T> {\n const { headers, skipAuth, ...axiosConfig } = options || {};\n\n const config: AxiosRequestConfig & { skipAuth?: boolean } = {\n method,\n url: path,\n ...this.mergeOptions({ headers }),\n ...axiosConfig,\n skipAuth, // Pass skipAuth flag to interceptor\n };\n\n if (data && ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())) {\n config.data = data;\n } else if (data && method.toUpperCase() === 'GET') {\n config.params = data;\n }\n\n const response = await this.axiosInstance.request<T>(config);\n return response.data;\n }\n\n get<T>(path: string, params?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('GET', path, params, options);\n }\n\n post<T>(path: string, data?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('POST', path, data, options);\n }\n\n put<T>(path: string, data?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('PUT', path, data, options);\n }\n\n patch<T>(path: string, data?: any, options?: RequestOptions): Promise<T> {\n return this.request<T>('PATCH', path, data, options);\n }\n\n delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>('DELETE', path, undefined, options);\n }\n\n setAuthToken(token: string): void {\n this.config.apiKey = token;\n }\n\n setRefreshToken(token: string | null): void {\n this.refreshToken = token;\n }\n\n getRefreshToken(): string | null {\n return this.refreshToken;\n }\n\n /**\n * Set rememberMe preference from login response\n */\n setRememberMe(value: boolean): void {\n this.rememberMe = value;\n }\n\n /**\n * Get rememberMe preference\n */\n getRememberMe(): boolean | null {\n return this.rememberMe;\n }\n\n /**\n * Set callback for when tokens are refreshed by backend\n */\n setOnTokenRefreshed(callback: (accessToken: string, refreshToken?: string) => void): void {\n this.onTokenRefreshed = callback;\n }\n\n /**\n * Get the token refresh callback\n */\n getOnTokenRefreshed(): ((accessToken: string, refreshToken?: string) => void) | undefined {\n return this.onTokenRefreshed;\n }\n\n /**\n * Set callback for when authentication fails irrecoverably\n */\n setOnAuthFailure(callback: (error: AuthenticationError) => void): void {\n this.onAuthFailure = callback;\n }\n\n setGymId(gymId: string): void {\n this.axiosInstance.defaults.headers.common['X-Gym-Id'] = gymId;\n }\n\n clearAuth(): void {\n delete this.config.apiKey;\n this.refreshToken = null;\n this.rememberMe = null;\n delete this.axiosInstance.defaults.headers.common['Authorization'];\n delete this.axiosInstance.defaults.headers.common['X-Gym-Id'];\n }\n\n getBaseUrl(): string {\n return this.config.baseURL;\n }\n\n /**\n * Get config for creating scoped SDK instances\n * Exposes minimal config needed without exposing internal structure\n */\n getConfigForScoped(): {\n baseURL: string;\n apiKey?: string;\n refreshToken?: string;\n headers?: Record<string, string>;\n } {\n return {\n baseURL: this.config.baseURL,\n apiKey: this.config.apiKey,\n refreshToken: this.refreshToken,\n headers: this.config.headers,\n };\n }\n\n /**\n * Get axios instance defaults for scoped SDK\n */\n getAxiosDefaults(): Record<string, unknown> {\n return { ...this.axiosInstance.defaults.headers.common };\n }\n\n /**\n * Set common headers on axios instance (for scoped SDK setup)\n */\n setCommonHeaders(headers: Record<string, string>): void {\n Object.entries(headers).forEach(([key, value]) => {\n if (value !== undefined) {\n this.axiosInstance.defaults.headers.common[key] = value;\n }\n });\n }\n}\n","import { ApiClient } from '../client';\n\nexport function createAgentFetch(apiClient: ApiClient, customFetch?: typeof globalThis.fetch) {\n const fetchFn = customFetch || fetch;\n\n return async (path: string, options?: RequestInit) => {\n const fullUrl = `${apiClient.getBaseUrl()}/agent${path}`;\n\n // Get gymId from axios instance headers\n const axiosInstance = (apiClient as any).axiosInstance;\n const gymId = axiosInstance?.defaults?.headers?.common?.['X-Gym-Id'];\n\n const headers = {\n 'Content-Type': 'application/json',\n ...(apiClient.getAccessToken() && { Authorization: `Bearer ${apiClient.getAccessToken()}` }),\n ...(gymId && { 'X-Gym-Id': gymId }),\n ...(options?.headers || {}),\n };\n\n return fetchFn(fullUrl, {\n ...options,\n headers,\n });\n };\n}\n","import { ApiClient } from '../client';\nimport { RequestOptions, PaginatedResponseDto, PaginationQueryDto } from '../types';\n\nexport abstract class BaseResource {\n constructor(protected client: ApiClient) {}\n\n protected async request<T>(\n path: string,\n options: {\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n body?: string;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n const data = options.body ? JSON.parse(options.body) : undefined;\n \n switch (options.method) {\n case 'GET':\n return this.client.get<T>(path, data, { headers: options.headers });\n case 'POST':\n return this.client.post<T>(path, data, { headers: options.headers });\n case 'PUT':\n return this.client.put<T>(path, data, { headers: options.headers });\n case 'PATCH':\n return this.client.patch<T>(path, data, { headers: options.headers });\n case 'DELETE':\n return this.client.delete<T>(path, { headers: options.headers });\n default:\n throw new Error(`Unsupported HTTP method: ${options.method}`);\n }\n }\n\n protected buildPath(base: string, ...segments: (string | undefined)[]): string {\n const parts = [base];\n for (const segment of segments) {\n if (segment !== undefined) {\n parts.push(segment);\n }\n }\n return parts.join('/');\n }\n\n protected async paginate<T>(\n path: string,\n params?: PaginationQueryDto & Record<string, any>,\n options?: RequestOptions\n ): Promise<PaginatedResponseDto<T>> {\n return this.client.get<PaginatedResponseDto<T>>(path, params, options);\n }\n}","import {\n CurrentSessionResponse,\n InvitationValidationResponse,\n LoginDto,\n LoginResponseDto,\n RegisterCollaboratorDto,\n RegisterOwnerDto,\n ResendVerificationDto,\n VerifyEmailDto,\n ChangePasswordDto,\n ChangePasswordResponseDto,\n RequestPasswordResetDto,\n RequestPasswordResetResponseDto,\n VerifyResetCodeDto,\n VerifyResetCodeResponseDto,\n ResetPasswordDto,\n ResetPasswordResponseDto,\n ResendResetCodeDto,\n ResendResetCodeResponseDto,\n} from '../models/auth';\nimport { MemberPinLoginDto, SetPinDto, MemberLoginResponse } from '../models/members';\nimport { SubscriptionPlan } from '../models/subscriptions';\nimport { RequestOptions } from '../types';\nimport { BaseResource } from './base';\n\nexport class AuthResource extends BaseResource {\n private basePath = 'auth';\n\n async registerOwner(data: RegisterOwnerDto, options?: RequestOptions): Promise<void> {\n return this.client.post(`${this.basePath}/register/owner`, data, options);\n }\n\n async login(\n data: LoginDto,\n options?: RequestOptions,\n rememberMe?: boolean,\n ): Promise<LoginResponseDto> {\n return this.client.post<LoginResponseDto>(\n `${this.basePath}/login`,\n { ...data, rememberMe },\n options,\n );\n }\n\n async refreshToken(refreshToken: string, options?: RequestOptions): Promise<LoginResponseDto> {\n return this.client.post<LoginResponseDto>(\n `${this.basePath}/refresh`,\n { refresh_token: refreshToken },\n options,\n );\n }\n\n async verifyEmail(\n data: VerifyEmailDto,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post(`${this.basePath}/verify-email`, data, options);\n }\n\n async resendVerification(\n data: ResendVerificationDto,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n console.log('the path', `${this.basePath}/resend-verification`);\n\n return this.client.post(`${this.basePath}/resend-verification`, data, options);\n }\n\n async getSubscriptionPlans(options?: RequestOptions): Promise<{ data: SubscriptionPlan[] }> {\n return this.client.get(`${this.basePath}/subscription-plans`, options);\n }\n\n async validateInvitation(\n token: string,\n options?: RequestOptions,\n ): Promise<InvitationValidationResponse> {\n return this.client.get(`${this.basePath}/invitation/${token}`, options);\n }\n\n async registerCollaborator(\n data: RegisterCollaboratorDto,\n options?: RequestOptions,\n ): Promise<LoginResponseDto> {\n return this.client.post<LoginResponseDto>(\n `${this.basePath}/register/collaborator`,\n data,\n options,\n );\n }\n\n async getCurrentSession(options?: RequestOptions): Promise<CurrentSessionResponse> {\n return this.client.get<CurrentSessionResponse>(`${this.basePath}/current-session`, options);\n }\n\n async changePassword(\n data: ChangePasswordDto,\n options?: RequestOptions,\n ): Promise<ChangePasswordResponseDto> {\n return this.client.post<ChangePasswordResponseDto>(\n `${this.basePath}/change-password`,\n data,\n options,\n );\n }\n\n async requestPasswordReset(\n data: RequestPasswordResetDto,\n options?: RequestOptions,\n ): Promise<RequestPasswordResetResponseDto> {\n return this.client.post<RequestPasswordResetResponseDto>(\n `${this.basePath}/password-reset/request`,\n data,\n options,\n );\n }\n\n async verifyResetCode(\n data: VerifyResetCodeDto,\n options?: RequestOptions,\n ): Promise<VerifyResetCodeResponseDto> {\n return this.client.post<VerifyResetCodeResponseDto>(\n `${this.basePath}/password-reset/verify-code`,\n data,\n options,\n );\n }\n\n async resetPassword(\n data: ResetPasswordDto,\n options?: RequestOptions,\n ): Promise<ResetPasswordResponseDto> {\n return this.client.post<ResetPasswordResponseDto>(\n `${this.basePath}/password-reset/reset`,\n data,\n options,\n );\n }\n\n async resendResetCode(\n data: ResendResetCodeDto,\n options?: RequestOptions,\n ): Promise<ResendResetCodeResponseDto> {\n return this.client.post<ResendResetCodeResponseDto>(\n `${this.basePath}/password-reset/resend-code`,\n data,\n options,\n );\n }\n\n /**\n * Member login with PIN\n * POST /auth/members/pin/login\n */\n async memberPinLogin(\n data: MemberPinLoginDto,\n options?: RequestOptions,\n ): Promise<MemberLoginResponse> {\n return this.client.post<MemberLoginResponse>(\n `${this.basePath}/members/pin/login`,\n data,\n options,\n );\n }\n\n /**\n * Consume member invite and set initial PIN\n * POST /auth/members/invite/consume\n */\n async consumeMemberInvite(\n data: SetPinDto,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string; gymSlug?: string }> {\n return this.client.post<{ success: boolean; message: string; gymSlug?: string }>(\n `${this.basePath}/members/invite/consume`,\n data,\n options,\n );\n }\n\n /**\n * Refresh member access token\n * POST /auth/members/refresh\n */\n async refreshMemberToken(\n refreshToken: string,\n options?: RequestOptions,\n ): Promise<MemberLoginResponse> {\n return this.client.post<MemberLoginResponse>(\n `${this.basePath}/members/refresh`,\n { refresh_token: refreshToken },\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n Organization,\n UpdateOrganizationDto,\n OrganizationStats,\n OrganizationWithDetails,\n OrganizationAdminDetails,\n MyOrganization,\n SwitchOrganizationDto,\n SwitchOrganizationResponse,\n} from '../models/organizations';\nimport { RequestOptions } from '../types';\n\nexport class OrganizationsResource extends BaseResource {\n private basePath = 'organizations';\n\n async getOrganization(id: string, options?: RequestOptions): Promise<Organization> {\n return this.client.get<Organization>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateOrganization(\n id: string,\n data: UpdateOrganizationDto,\n options?: RequestOptions,\n ): Promise<Organization> {\n return this.client.put<Organization>(`${this.basePath}/${id}`, data, options);\n }\n\n async getOrganizationStats(id: string, options?: RequestOptions): Promise<OrganizationStats> {\n return this.client.get<OrganizationStats>(`${this.basePath}/${id}/stats`, undefined, options);\n }\n\n async listOrganizations(options?: RequestOptions): Promise<OrganizationWithDetails[]> {\n return this.client.get<OrganizationWithDetails[]>(`${this.basePath}/list`, undefined, options);\n }\n\n async getOrganizationForAdmin(\n id: string,\n options?: RequestOptions,\n ): Promise<OrganizationAdminDetails> {\n return this.client.get<OrganizationAdminDetails>(\n `${this.basePath}/admin/${id}`,\n undefined,\n options,\n );\n }\n\n async getMyOrganizations(options?: RequestOptions): Promise<MyOrganization[]> {\n return this.client.get<MyOrganization[]>(\n `${this.basePath}/my-organizations`,\n undefined,\n options,\n );\n }\n\n async switchOrganization(\n data: SwitchOrganizationDto,\n options?: RequestOptions,\n ): Promise<SwitchOrganizationResponse> {\n return this.client.post<SwitchOrganizationResponse>(`${this.basePath}/switch`, data, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Gym,\n CreateGymDto,\n UpdateGymDto,\n GymStats,\n UpdateGymScheduleDto,\n UpdateGymSocialMediaDto,\n UpdateGymInventorySettingsDto,\n UpdateGymContractSettingsDto,\n} from '../models/gyms';\nimport { RequestOptions } from '../types';\n\nexport class GymsResource extends BaseResource {\n private basePath = 'gyms';\n\n async createGym(data: CreateGymDto, options?: RequestOptions): Promise<Gym> {\n return this.client.post<Gym>(this.basePath, data, options);\n }\n\n async getOrganizationGyms(options?: RequestOptions): Promise<Gym[]> {\n return this.client.get<Gym[]>(this.basePath, undefined, options);\n }\n\n async getGym(id: string, options?: RequestOptions): Promise<Gym> {\n return this.client.get<Gym>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateGym(id: string, data: UpdateGymDto, options?: RequestOptions): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}`, data, options);\n }\n\n async getGymStats(id: string, options?: RequestOptions): Promise<GymStats> {\n return this.client.get<GymStats>(`${this.basePath}/${id}/stats`, undefined, options);\n }\n\n async toggleGymStatus(id: string, options?: RequestOptions): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}/toggle-status`, undefined, options);\n }\n\n async updateCurrentGym(\n data: Partial<{\n name?: string;\n address?: string;\n phone?: string;\n email?: string;\n assetId?: string;\n }>,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/current`, data, options);\n }\n\n async updateGymSchedule(\n id: string,\n data: UpdateGymScheduleDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}/schedule`, data, options);\n }\n\n async updateGymSocialMedia(\n id: string,\n data: UpdateGymSocialMediaDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.put<Gym>(`${this.basePath}/${id}/social-media`, data, options);\n }\n\n /**\n * Update current gym inventory settings (stock configuration)\n * Uses gym from context (x-gym-id header)\n * @param data Inventory settings data\n * @param options Request options\n * @returns Updated gym with new settings\n *\n * @example\n * ```typescript\n * const gym = await sdk.gyms.updateInventorySettings({\n * defaultMinStock: 15,\n * defaultMaxStock: 1000,\n * enableLowStockAlerts: true\n * });\n * ```\n */\n async updateInventorySettings(\n data: UpdateGymInventorySettingsDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.patch<Gym>(`${this.basePath}/current/inventory-settings`, data, options);\n }\n\n /**\n * Update current gym contract expiration settings\n * Uses gym from context (x-gym-id header)\n * @param data Contract settings data\n * @param options Request options\n * @returns Updated gym with new settings\n *\n * @example\n * ```typescript\n * const gym = await sdk.gyms.updateContractSettings({\n * expiringSoonDays: 7,\n * gracePeriodDays: 0,\n * enableExpirationNotifications: true\n * });\n * ```\n */\n async updateContractSettings(\n data: UpdateGymContractSettingsDto,\n options?: RequestOptions,\n ): Promise<Gym> {\n return this.client.patch<Gym>(`${this.basePath}/current/contract-settings`, data, options);\n }\n\n /**\n * Soft delete a gym\n * Cannot delete gym with active contracts or collaborators\n * @param id Gym ID\n * @param options Request options\n * @returns Success response\n *\n * @example\n * ```typescript\n * const result = await sdk.gyms.deleteGym('gym-id');\n * console.log(result.success); // true\n * ```\n */\n async deleteGym(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n}\n","import { BaseResource } from './base';\nimport type {\n Collaborator,\n ListCollaboratorsParams,\n UpdateCollaboratorDto,\n UpdateCollaboratorStatusDto,\n UpdateCollaboratorRoleDto,\n ActivityQueryParams,\n StatsQueryParams,\n CollaboratorStats,\n ActivityItem,\n} from '@gymspace/shared';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CollaboratorsResource extends BaseResource {\n private basePath = 'collaborators';\n\n async list(\n params?: ListCollaboratorsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Collaborator>> {\n return this.paginate<Collaborator>(this.basePath, params, options);\n }\n\n async get(id: string, options?: RequestOptions): Promise<Collaborator> {\n return this.client.get<Collaborator>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async update(\n id: string,\n data: UpdateCollaboratorDto,\n options?: RequestOptions,\n ): Promise<Collaborator> {\n return this.client.patch<Collaborator>(`${this.basePath}/${id}`, data, options);\n }\n\n async updateRole(\n id: string,\n data: UpdateCollaboratorRoleDto,\n options?: RequestOptions,\n ): Promise<Collaborator> {\n return this.client.patch<Collaborator>(`${this.basePath}/${id}/role`, data, options);\n }\n\n async updateStatus(\n id: string,\n data: UpdateCollaboratorStatusDto,\n options?: RequestOptions,\n ): Promise<Collaborator> {\n return this.client.patch<Collaborator>(`${this.basePath}/${id}/status`, data, options);\n }\n\n async getActivity(\n id: string,\n params?: ActivityQueryParams,\n options?: RequestOptions,\n ): Promise<ActivityItem[]> {\n return this.client.get<ActivityItem[]>(`${this.basePath}/${id}/activity`, params, options);\n }\n\n async getStats(\n id: string,\n params?: StatsQueryParams,\n options?: RequestOptions,\n ): Promise<CollaboratorStats> {\n return this.client.get<CollaboratorStats>(`${this.basePath}/${id}/stats`, params, options);\n }\n}\n","import { BaseResource } from './base';\nimport type { Role } from '@gymspace/shared';\nimport type { PermissionsGroup } from '../models/roles';\nimport { RequestOptions } from '../types';\n\nexport class RolesResource extends BaseResource {\n private basePath = 'roles';\n\n /**\n * Get all roles of the organization (without pagination)\n */\n async getRoles(options?: RequestOptions): Promise<Role[]> {\n return this.client.get<Role[]>(this.basePath, undefined, options);\n }\n\n /**\n * Get a specific role by ID\n */\n async getRole(id: string, options?: RequestOptions): Promise<Role> {\n return this.client.get<Role>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Get all available permissions organized by category\n */\n async getAvailablePermissions(options?: RequestOptions): Promise<PermissionsGroup> {\n return this.client.get<PermissionsGroup>(`${this.basePath}/permissions`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Client,\n CreateClientDto,\n UpdateClientDto,\n ClientStats,\n ClientStat,\n SearchClientsParams,\n} from '../models/clients';\nimport { RequestOptions } from '../types';\n\nexport interface SearchGlobalResult {\n found: boolean;\n clientData?: {\n id: string;\n name: string;\n photoUrl?: string;\n documentValue: string;\n phone?: string;\n email?: string;\n gymId: string;\n gymName: string;\n status: 'active' | 'inactive';\n };\n contractData?: {\n id: string;\n contractNumber: string;\n planName: string;\n status: 'active' | 'expired' | 'cancelled' | 'suspended';\n endDate: string;\n allowedGymIds: string[];\n };\n canAccessCurrentGym: boolean;\n currentGymAccessStatus?: string;\n}\n\nexport interface ImportFromGymResult {\n localClientId: string;\n imported: boolean;\n clientData: {\n id: string;\n name: string;\n photoUrl?: string;\n documentValue: string;\n phone?: string;\n email?: string;\n birthDate?: string;\n };\n message: string;\n}\n\nexport class ClientsResource extends BaseResource {\n private basePath = 'clients';\n\n async createClient(data: CreateClientDto, options?: RequestOptions): Promise<Client> {\n return this.client.post<Client>(this.basePath, data, options);\n }\n\n async searchClients(params?: SearchClientsParams, options?: RequestOptions): Promise<Client[]> {\n return this.client.get<Client[]>(this.basePath, params, options);\n }\n\n async getClient(id: string, options?: RequestOptions): Promise<Client> {\n return this.client.get<Client>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateClient(id: string, data: UpdateClientDto, options?: RequestOptions): Promise<Client> {\n return this.client.put<Client>(`${this.basePath}/${id}`, data, options);\n }\n\n async toggleClientStatus(id: string, options?: RequestOptions): Promise<Client> {\n return this.client.put<Client>(`${this.basePath}/${id}/toggle-status`, undefined, options);\n }\n\n async getClientStats(id: string, options?: RequestOptions): Promise<ClientStats> {\n return this.client.get<ClientStats>(`${this.basePath}/${id}/stats`, undefined, options);\n }\n\n async getClientStat(id: string, statKey: string, options?: RequestOptions): Promise<ClientStat> {\n return this.client.get<ClientStat>(\n `${this.basePath}/${id}/stats/${statKey}`,\n undefined,\n options,\n );\n }\n\n async getClientStatsByCategory(\n id: string,\n category: string,\n options?: RequestOptions,\n ): Promise<ClientStat[]> {\n return this.client.get<ClientStat[]>(\n `${this.basePath}/${id}/stats/category/${category}`,\n undefined,\n options,\n );\n }\n\n async getAvailableStats(options?: RequestOptions): Promise<ClientStat[]> {\n return this.client.get<ClientStat[]>(`${this.basePath}/stats/available`, undefined, options);\n }\n\n async searchClientsForCheckIn(\n params?: SearchClientsParams,\n options?: RequestOptions,\n ): Promise<Client[]> {\n return this.client.get<Client[]>(`${this.basePath}/search/check-in`, params, options);\n }\n\n async searchGlobal(\n params: { document: string },\n options?: RequestOptions,\n ): Promise<SearchGlobalResult> {\n return this.client.post<SearchGlobalResult>(`${this.basePath}/search-global`, params, options);\n }\n\n async importFromGym(\n params: { sourceGymClientId: string },\n options?: RequestOptions,\n ): Promise<ImportFromGymResult> {\n return this.client.post<ImportFromGymResult>(\n `${this.basePath}/import-from-gym`,\n params,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { \n MembershipPlan, \n CreateMembershipPlanDto, \n UpdateMembershipPlanDto, \n MembershipPlanStats,\n GetMembershipPlansParams \n} from '../models/membership-plans';\nimport { RequestOptions } from '../types';\n\nexport class MembershipPlansResource extends BaseResource {\n private basePath = 'membership-plans';\n\n async createMembershipPlan(\n data: CreateMembershipPlanDto, \n options?: RequestOptions\n ): Promise<MembershipPlan> {\n return this.client.post<MembershipPlan>(this.basePath, data, options);\n }\n\n async getGymMembershipPlans(\n params?: GetMembershipPlansParams,\n options?: RequestOptions\n ): Promise<MembershipPlan[]> {\n return this.client.get<MembershipPlan[]>(this.basePath, params, options);\n }\n\n async getMembershipPlan(id: string, options?: RequestOptions): Promise<MembershipPlan> {\n return this.client.get<MembershipPlan>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateMembershipPlan(\n id: string,\n data: UpdateMembershipPlanDto,\n options?: RequestOptions\n ): Promise<MembershipPlan> {\n return this.client.put<MembershipPlan>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteMembershipPlan(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getMembershipPlanStats(\n id: string, \n options?: RequestOptions\n ): Promise<MembershipPlanStats> {\n return this.client.get<MembershipPlanStats>(\n `${this.basePath}/${id}/stats`, \n undefined, \n options\n );\n }\n}","import { BaseResource } from './base';\nimport {\n Contract,\n CreateContractDto,\n RenewContractDto,\n FreezeContractDto,\n CancelContractDto,\n SuspendContractDto,\n ResumeContractDto,\n ReactivateContractDto,\n GetContractsParams,\n ContractLifecycleEvent,\n CancellationAnalytics,\n ContractInstallmentsResponse,\n ContractPaymentsResponse,\n RegisterContractPaymentDto,\n RegisterContractPaymentResponse,\n} from '../models/contracts';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class ContractsResource extends BaseResource {\n private basePath = 'contracts';\n\n async createContract(data: CreateContractDto, options?: RequestOptions): Promise<Contract> {\n return this.client.post<Contract>(this.basePath, data, options);\n }\n\n async getGymContracts(\n params?: GetContractsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Contract>> {\n return this.paginate<Contract>(this.basePath, params, options);\n }\n\n async getContract(id: string, options?: RequestOptions): Promise<Contract> {\n return this.client.get<Contract>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async getContractInstallments(\n id: string,\n options?: RequestOptions,\n ): Promise<ContractInstallmentsResponse> {\n return this.client.get<ContractInstallmentsResponse>(\n `${this.basePath}/${id}/installments`,\n undefined,\n options,\n );\n }\n\n async getContractPayments(\n id: string,\n options?: RequestOptions,\n ): Promise<ContractPaymentsResponse> {\n return this.client.get<ContractPaymentsResponse>(\n `${this.basePath}/${id}/payments`,\n undefined,\n options,\n );\n }\n\n async registerContractPayment(\n id: string,\n data: RegisterContractPaymentDto,\n options?: RequestOptions,\n ): Promise<RegisterContractPaymentResponse> {\n return this.client.post<RegisterContractPaymentResponse>(\n `${this.basePath}/${id}/payments`,\n data,\n options,\n );\n }\n\n async sendInstallmentReminder(\n id: string,\n installmentId: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post<{ success: boolean; message: string }>(\n `${this.basePath}/${id}/installments/${installmentId}/send-reminder`,\n {},\n options,\n );\n }\n\n async getClientContracts(clientId: string, options?: RequestOptions): Promise<Contract[]> {\n return this.client.get<Contract[]>(`${this.basePath}/client/${clientId}`, undefined, options);\n }\n\n async getMyContracts(options?: RequestOptions): Promise<Contract[]> {\n return this.client.get<Contract[]>('auth/members/me/contracts', undefined, options);\n }\n\n async renewContract(\n id: string,\n data: RenewContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/renew`, data, options);\n }\n\n async freezeContract(\n id: string,\n data: FreezeContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/freeze`, data, options);\n }\n\n async cancelContract(\n id: string,\n data: CancelContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.put<Contract>(`${this.basePath}/${id}/cancel`, data, options);\n }\n\n async suspendContract(\n id: string,\n data: SuspendContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/suspend`, data, options);\n }\n\n async resumeContract(\n id: string,\n data: ResumeContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/resume`, data, options);\n }\n\n async reactivateContract(\n id: string,\n data: ReactivateContractDto,\n options?: RequestOptions,\n ): Promise<Contract> {\n return this.client.post<Contract>(`${this.basePath}/${id}/reactivate`, data, options);\n }\n\n async getLifecycleHistory(\n id: string,\n options?: RequestOptions,\n ): Promise<ContractLifecycleEvent[]> {\n return this.client.get<ContractLifecycleEvent[]>(\n `${this.basePath}/${id}/lifecycle-history`,\n undefined,\n options,\n );\n }\n\n async getCancellationAnalytics(\n params?: { startDate?: string; endDate?: string },\n options?: RequestOptions,\n ): Promise<CancellationAnalytics> {\n return this.client.get<CancellationAnalytics>(\n `${this.basePath}/analytics/cancellation-reasons`,\n params,\n options,\n );\n }\n\n async resendWhatsAppNotification(\n contractId: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post<{ success: boolean; message: string }>(\n `${this.basePath}/${contractId}/resend-whatsapp`,\n {},\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n DashboardStats,\n ExpiringContract,\n ContractsRevenue,\n SalesRevenue,\n Debts,\n Collections,\n CheckIns,\n NewClients,\n DateRangeParams,\n CheckInsList,\n} from '../models/dashboard';\n\nexport class DashboardResource extends BaseResource {\n /**\n * Get dashboard statistics (lightweight counts only)\n * @returns Dashboard statistics including client and contract counts\n */\n async getStats(): Promise<DashboardStats> {\n return this.client.get<DashboardStats>('/dashboard/stats');\n }\n\n /**\n * Get contracts revenue within date range\n * @param params Optional date range parameters\n * @returns Contracts revenue data for the specified period\n */\n async getContractsRevenue(params?: DateRangeParams): Promise<ContractsRevenue> {\n return this.client.get<ContractsRevenue>('/dashboard/contracts-revenue', params);\n }\n\n /**\n * Get sales revenue within date range\n * @param params Optional date range parameters\n * @returns Sales revenue data for the specified period\n */\n async getSalesRevenue(params?: DateRangeParams): Promise<SalesRevenue> {\n return this.client.get<SalesRevenue>('/dashboard/sales-revenue', params);\n }\n\n /**\n * Get total debts within date range\n * @param params Optional date range parameters\n * @returns Outstanding debts data for the specified period\n */\n async getDebts(params?: DateRangeParams): Promise<Debts> {\n return this.client.get<Debts>('/dashboard/debts', params);\n }\n\n /**\n * Get total collections within date range\n * @param params Optional date range parameters\n * @returns Collections data for the specified period\n */\n async getCollections(params?: DateRangeParams): Promise<Collections> {\n return this.client.get<Collections>('/dashboard/collections', params);\n }\n\n /**\n * Get check-ins count within date range\n * @param params Optional date range parameters\n * @returns Check-ins data for the specified period\n */\n async getCheckIns(params?: DateRangeParams): Promise<CheckIns> {\n return this.client.get<CheckIns>('/dashboard/check-ins', params);\n }\n\n /**\n * Get new clients count within date range\n * @param params Optional date range parameters\n * @returns New clients data for the specified period\n */\n async getNewClients(params?: DateRangeParams): Promise<NewClients> {\n return this.client.get<NewClients>('/dashboard/new-clients', params);\n }\n\n /**\n * Get expiring contracts within date range\n * @param limit Maximum number of contracts to return (default: 10)\n * @param params Optional date range parameters\n * @returns List of contracts expiring in the specified period\n */\n async getExpiringContracts(\n limit: number = 10,\n params?: DateRangeParams,\n ): Promise<ExpiringContract[]> {\n return this.client.get<ExpiringContract[]>('/dashboard/expiring-contracts', {\n limit,\n ...params,\n });\n }\n\n /**\n * Get detailed list of check-ins within date range\n * @param params Optional date range parameters (defaults to current day)\n * @returns Detailed list of check-ins with client and registeredBy information\n */\n async getCheckInsList(params?: DateRangeParams): Promise<CheckInsList> {\n return this.client.get<CheckInsList>('/dashboard/check-ins/list', params);\n }\n}\n","import { BaseResource } from './base';\nimport {\n CheckIn,\n CreateCheckInDto,\n SearchCheckInsParams,\n GetCheckInStatsParams,\n CheckInStats,\n GetClientCheckInHistoryParams,\n CurrentlyInGymResponse,\n CheckInListResponse,\n ClientCheckInHistory,\n} from '../models/check-ins';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport interface ExternalCheckInResult {\n checkInId: string;\n clientName: string;\n gymName: string;\n timestamp: string;\n message: string;\n isExternal: boolean;\n contractNumber?: string;\n originGymName?: string;\n}\n\nexport interface CreateExternalCheckInDto {\n documentValue: string;\n sourceGymClientId?: string;\n}\n\nexport class CheckInsResource extends BaseResource {\n private basePath = 'check-ins';\n\n /**\n * Creates a new check-in for a client.\n *\n * **Permissions Required:**\n * - Gym owners with full gym access\n * - Active collaborators with CHECKINS_CREATE permission\n *\n * @param data - The check-in data including client ID and optional notes\n * @param options - Optional request configuration\n * @returns The created check-in record with client and user details\n * @throws {ValidationError} When client is not found or already checked in\n * @throws {AuthorizationError} When user lacks required permissions\n */\n async createCheckIn(data: CreateCheckInDto, options?: RequestOptions): Promise<CheckIn> {\n return this.client.post<CheckIn>(this.basePath, data, options);\n }\n\n async searchCheckIns(\n params?: SearchCheckInsParams,\n options?: RequestOptions,\n ): Promise<CheckInListResponse> {\n return this.client.get<CheckInListResponse>(this.basePath, params, options);\n }\n\n async getCurrentlyInGym(options?: RequestOptions): Promise<CurrentlyInGymResponse> {\n return this.client.get<CurrentlyInGymResponse>(`${this.basePath}/current`, undefined, options);\n }\n\n async getCheckIn(id: string, options?: RequestOptions): Promise<CheckIn> {\n return this.client.get<CheckIn>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Deletes a check-in record.\n *\n * **Permissions Required:**\n * - Gym owners with full gym access\n * - Active collaborators with CHECKINS_CREATE permission\n *\n * **Business Rules:**\n * - Only check-ins from today can be deleted\n * - The same permission level required for creation is required for deletion\n * - Cannot delete check-ins from previous days\n *\n * @param id - The ID of the check-in to delete\n * @param options - Optional request configuration\n * @returns Promise that resolves when the check-in is successfully deleted\n * @throws {NotFoundError} When the check-in is not found\n * @throws {AuthorizationError} When user lacks required permissions\n * @throws {ValidationError} When trying to delete a check-in from a previous day\n */\n async deleteCheckIn(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getGymCheckInStats(\n params: GetCheckInStatsParams,\n options?: RequestOptions,\n ): Promise<CheckInStats> {\n return this.client.get<CheckInStats>(\n `${this.basePath}/stats/${params.period}`,\n undefined,\n options,\n );\n }\n\n async getClientCheckInHistory(\n clientId: string,\n params?: GetClientCheckInHistoryParams,\n options?: RequestOptions,\n ): Promise<ClientCheckInHistory> {\n return this.client.get<ClientCheckInHistory>(\n `${this.basePath}/client/${clientId}/history`,\n params,\n options,\n );\n }\n\n /**\n * Creates a check-in for an external client (from another gym in the same organization).\n *\n * **Permissions Required:**\n * - Gym owners with full gym access\n * - Active collaborators with CHECKINS_CREATE permission\n *\n * @param data - The external check-in data including document value\n * @param options - Optional request configuration\n * @returns The created check-in record with external client details\n * @throws {ValidationError} When client is not found or contract doesn't allow access\n */\n async createExternal(\n data: CreateExternalCheckInDto,\n options?: RequestOptions,\n ): Promise<ExternalCheckInResult> {\n return this.client.post<ExternalCheckInResult>(`${this.basePath}/external`, data, options);\n }\n}\n","import { BaseResource } from './base';\nimport type {\n Invitation,\n CreateInvitationDto,\n AcceptInvitationDto,\n ValidateByCodeDto,\n ValidateByTokenDto,\n} from '@gymspace/shared';\nimport { RequestOptions } from '../types';\n\nexport interface GetGymInvitationsParams {\n gymId: string;\n}\n\nexport class InvitationsResource extends BaseResource {\n private basePath = 'invitations';\n\n async createInvitation(data: CreateInvitationDto, options?: RequestOptions): Promise<Invitation> {\n return this.client.post<Invitation>(this.basePath, data, options);\n }\n\n async getGymInvitations(\n params: GetGymInvitationsParams,\n options?: RequestOptions,\n ): Promise<Invitation[]> {\n return this.client.get<Invitation[]>(this.basePath, params, options);\n }\n\n async validateByCode(\n data: ValidateByCodeDto,\n options?: RequestOptions,\n ): Promise<{ email: string; gymName: string; roleName: string; token: string }> {\n return this.client.post(`${this.basePath}/validate-by-code`, data, options);\n }\n\n async validateByToken(\n data: ValidateByTokenDto,\n options?: RequestOptions,\n ): Promise<{ email: string; gymName: string; roleName: string; token: string }> {\n return this.client.post(`${this.basePath}/validate-by-token`, data, options);\n }\n\n async acceptInvitation(data: AcceptInvitationDto, options?: RequestOptions): Promise<void> {\n return this.client.post<void>(`${this.basePath}/accept`, data, options);\n }\n\n async cancelInvitation(id: string, options?: RequestOptions): Promise<void> {\n return this.client.put<void>(`${this.basePath}/${id}/cancel`, undefined, options);\n }\n\n async resendInvitation(id: string, options?: RequestOptions): Promise<void> {\n return this.client.post<void>(`${this.basePath}/${id}/resend`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport type { AssetResponseDto } from '../models/assets';\n\nexport class AssetsResource extends BaseResource {\n /**\n * Upload a new asset\n */\n async upload(data: {\n file: File;\n description?: string;\n metadata?: Record<string, any>;\n }): Promise<AssetResponseDto> {\n const formData = new FormData();\n formData.append('file', data.file);\n\n if (data.description) {\n formData.append('description', data.description);\n }\n\n if (data.metadata) {\n formData.append('metadata', JSON.stringify(data.metadata));\n }\n\n return await this.client.post<AssetResponseDto>('/assets/upload', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n }\n\n /**\n * Get a single asset by ID\n */\n async findOne(id: string): Promise<AssetResponseDto> {\n return await this.client.get<AssetResponseDto>(`/assets/${id}`);\n }\n\n /**\n * Get multiple assets by IDs\n */\n async findByIds(ids: string[]): Promise<AssetResponseDto[]> {\n if (!ids || ids.length === 0) {\n return [];\n }\n\n // El segundo parámetro del get son los params directamente\n return await this.client.get<AssetResponseDto[]>('/assets/by-ids', {\n ids: ids.join(',')\n });\n }\n\n /**\n * Get all assets for the current gym\n */\n async findAll(): Promise<AssetResponseDto[]> {\n return await this.client.get<AssetResponseDto[]>('/assets');\n }\n\n /**\n * Delete an asset\n */\n async delete(id: string): Promise<void> {\n await this.client.delete(`/assets/${id}`);\n }\n\n /**\n * Get a signed download URL for an asset\n */\n async getDownloadUrl(id: string): Promise<{ url: string; filename: string }> {\n return await this.client.get<{ url: string; filename: string }>(`/assets/${id}/download-url`);\n }\n\n /**\n * Download an asset as a blob\n */\n async download(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/assets/${id}/download`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n\n /**\n * Get the render URL for an asset (for inline display)\n * This returns the URL directly without making an API call\n */\n getRenderUrl(id: string): string {\n return `${this.client.getBaseUrl()}/assets/${id}/render`;\n }\n\n /**\n * Get asset blob for rendering/preview\n */\n async render(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/assets/${id}/render`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n}\n","import { BaseResource } from './base';\nimport type { FileResponseDto } from '../models/files';\n\nexport class FilesResource extends BaseResource {\n /**\n * Upload a new file\n */\n async upload(data: {\n file: File;\n description?: string;\n metadata?: Record<string, any>;\n }): Promise<FileResponseDto> {\n const formData = new FormData();\n formData.append('file', data.file);\n\n if (data.description) {\n formData.append('description', data.description);\n }\n\n if (data.metadata) {\n formData.append('metadata', JSON.stringify(data.metadata));\n }\n\n return await this.client.post<FileResponseDto>('/files/upload', formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n });\n }\n\n /**\n * Get all files for the current user\n */\n async findAll(): Promise<FileResponseDto[]> {\n return await this.client.get<FileResponseDto[]>('/files');\n }\n\n /**\n * Get a single file by ID\n */\n async findOne(id: string): Promise<FileResponseDto> {\n return await this.client.get<FileResponseDto>(`/files/${id}`);\n }\n\n /**\n * Get multiple files by IDs\n */\n async findByIds(ids: string[]): Promise<FileResponseDto[]> {\n if (!ids || ids.length === 0) {\n return [];\n }\n\n // The second parameter of get is the params directly\n return await this.client.get<FileResponseDto[]>('/files/by-ids', {\n ids: ids.join(',')\n });\n }\n\n /**\n * Delete a file\n */\n async delete(id: string): Promise<void> {\n await this.client.delete(`/files/${id}`);\n }\n\n /**\n * Download a file as a blob\n */\n async download(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/files/${id}/download`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n\n /**\n * Get the render URL for a file (for inline display)\n * This returns the URL directly without making an API call\n */\n getRenderUrl(id: string): string {\n return `${this.client.getBaseUrl()}/files/${id}/render`;\n }\n\n /**\n * Get file blob for rendering/preview\n */\n async render(id: string): Promise<Blob> {\n const response = await this.client.get<ArrayBuffer>(`/files/${id}/render`, {\n responseType: 'arraybuffer',\n });\n\n return new Blob([response]);\n }\n}","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\nimport {\n CatalogResponse,\n CatalogGym,\n CityWithGyms,\n SearchCatalogParams,\n SearchCatalogResponse,\n CreateLeadDto,\n LeadSubmissionResponse,\n} from '../models/catalog';\n\n/**\n * Public Catalog Resource\n * Handles public-facing catalog operations (no authentication required)\n */\nexport class PublicCatalogResource extends BaseResource {\n private basePath = 'catalog';\n\n /**\n * Search gyms in the public catalog\n */\n async searchCatalog(\n params?: SearchCatalogParams,\n options?: RequestOptions\n ): Promise<SearchCatalogResponse> {\n return this.client.get<SearchCatalogResponse>(`${this.basePath}/search`, params, options);\n }\n\n /**\n * Get featured gyms\n */\n async getFeaturedGyms(limit?: number, options?: RequestOptions): Promise<CatalogGym[]> {\n const params = limit ? { limit: String(limit) } : undefined;\n return this.client.get<CatalogGym[]>(`${this.basePath}/featured`, params, options);\n }\n\n /**\n * Get list of cities with available gyms\n */\n async getCitiesWithGyms(options?: RequestOptions): Promise<CityWithGyms[]> {\n return this.client.get<CityWithGyms[]>(`${this.basePath}/cities`, undefined, options);\n }\n\n /**\n * Get complete catalog details by gym slug\n */\n async getCatalogBySlug(slug: string, options?: RequestOptions): Promise<CatalogResponse> {\n return this.client.get<CatalogResponse>(`${this.basePath}/${slug}`, undefined, options);\n }\n\n /**\n * Submit a lead form for a specific gym\n */\n async submitLead(\n slug: string,\n data: CreateLeadDto,\n options?: RequestOptions\n ): Promise<LeadSubmissionResponse> {\n return this.client.post<LeadSubmissionResponse>(`${this.basePath}/${slug}/lead`, data, options);\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\nimport { GymCatalog, UpdateCatalogConfigDto, CatalogLead, LeadFiltersDto } from '../models/catalog';\n\n/**\n * Admin Catalog Resource\n * Handles catalog administration operations (requires authentication and CATALOG permissions)\n */\nexport class AdminCatalogResource extends BaseResource {\n private basePath = 'admin/catalog';\n\n /**\n * Get catalog configuration for the current gym\n * Requires: CATALOG_READ permission\n */\n async getCatalogConfig(options?: RequestOptions): Promise<GymCatalog> {\n return this.client.get<GymCatalog>(this.basePath, undefined, options);\n }\n\n /**\n * Update catalog configuration\n * Requires: CATALOG_UPDATE permission\n */\n async updateCatalogConfig(\n data: UpdateCatalogConfigDto,\n options?: RequestOptions,\n ): Promise<GymCatalog> {\n return this.client.put<GymCatalog>(this.basePath, data, options);\n }\n\n /**\n * Get catalog leads with optional filtering\n * Requires: CATALOG_READ permission\n */\n async getLeads(\n filters?: LeadFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CatalogLead>> {\n return this.client.get<PaginatedResponseDto<CatalogLead>>(\n `${this.basePath}/leads`,\n filters,\n options,\n );\n }\n\n /**\n * Mark a lead as contacted\n * Requires: CATALOG_UPDATE permission\n */\n async markLeadAsContacted(\n leadId: string,\n options?: RequestOptions,\n ): Promise<{ id: string; isContacted: boolean; contactedAt: string }> {\n return this.client.patch<{ id: string; isContacted: boolean; contactedAt: string }>(\n `${this.basePath}/leads/${leadId}/mark-contacted`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\n\nexport interface HealthResponse {\n status: string;\n timestamp: string;\n}\n\nexport interface ReadyResponse {\n status: string;\n services: {\n database: boolean;\n cache: boolean;\n storage: boolean;\n };\n}\n\nexport class HealthResource extends BaseResource {\n private basePath = 'health';\n\n async health(options?: RequestOptions): Promise<HealthResponse> {\n return this.client.get<HealthResponse>(this.basePath, undefined, options);\n }\n\n async ready(options?: RequestOptions): Promise<ReadyResponse> {\n return this.client.get<ReadyResponse>(`${this.basePath}/ready`, undefined, options);\n }\n}","export interface StartOnboardingData {\n name: string;\n email: string;\n phone: string;\n password: string;\n organizationName: string;\n country: string;\n currency: string;\n timezone: string;\n}\n\nexport enum OnboardingCacheStatus {\n PROCESSING = 'PROCESSING',\n COMPLETED = 'COMPLETED',\n FAILED = 'FAILED',\n}\n\nexport interface StartOnboardingResponse {\n status: OnboardingCacheStatus;\n email: string;\n access_token: string;\n refresh_token: string;\n user: {\n id: string;\n email: string;\n name: string;\n userType: string;\n };\n}\n\nexport interface OnboardingStatusResponse {\n status: OnboardingCacheStatus;\n currentStep?: string; // 'setup-organization' | 'setup-gym' | 'setup-features' | 'finalizing'\n progress?: number; // 0-100\n message?: string; // Backend progress message\n user?: {\n id: string;\n email: string;\n name: string;\n userType: string;\n };\n organization?: {\n id: string;\n name: string;\n organizationCode: string;\n };\n gym?: {\n id: string;\n name: string;\n };\n access_token?: string;\n refresh_token?: string;\n lastActiveGymId?: string;\n lastActiveOrganizationId?: string;\n error?: string;\n onboardingStatus?: OnboardingStatus;\n}\n\nexport interface BusinessHours {\n open: string;\n close: string;\n closed: boolean;\n}\n\nexport interface WeeklySchedule {\n monday: BusinessHours;\n tuesday: BusinessHours;\n wednesday: BusinessHours;\n thursday: BusinessHours;\n friday: BusinessHours;\n saturday: BusinessHours;\n sunday: BusinessHours;\n}\n\nexport interface Amenities {\n hasParking: boolean;\n hasShowers: boolean;\n hasLockers: boolean;\n hasPool: boolean;\n hasSauna: boolean;\n hasWifi: boolean;\n hasChildcare: boolean;\n hasCafeteria: boolean;\n}\n\nexport interface SocialMedia {\n facebook?: string;\n instagram?: string;\n twitter?: string;\n website?: string;\n}\n\nexport interface UpdateGymSettingsData {\n gymId: string;\n name: string;\n address: string;\n city: string;\n state: string;\n postalCode: string;\n phone: string;\n email: string;\n businessHours: WeeklySchedule;\n capacity: number;\n description?: string;\n amenities: Amenities;\n socialMedia?: SocialMedia;\n logo?: string;\n coverPhoto?: string;\n primaryColor?: string;\n}\n\nexport interface ClientManagementFeatures {\n enabled: boolean;\n requireDocumentId: boolean;\n enablePhotos: boolean;\n trackEmergencyContacts: boolean;\n trackMedicalConditions: boolean;\n}\n\nexport interface MembershipManagementFeatures {\n enabled: boolean;\n allowCustomPricing: boolean;\n allowContractFreezing: boolean;\n expiryWarningDays: number;\n autoRenewalReminders: boolean;\n}\n\nexport interface CheckInSystemFeatures {\n enabled: boolean;\n requireActiveContract: boolean;\n trackCheckInTime: boolean;\n allowMultiplePerDay: boolean;\n}\n\nexport interface NotificationSettings {\n emailEnabled: boolean;\n smsEnabled: boolean;\n welcomeEmails: boolean;\n contractExpiryAlerts: boolean;\n}\n\nexport interface ConfigureFeaturesData {\n gymId: string;\n clientManagement: ClientManagementFeatures;\n membershipManagement: MembershipManagementFeatures;\n checkInSystem: CheckInSystemFeatures;\n notifications: NotificationSettings;\n}\n\nexport interface CompleteGuidedSetupData {\n gymId: string;\n}\n\nexport enum OnboardingStep {\n ACCOUNT_CREATED = 'account_created',\n GYM_SETTINGS = 'gym_settings',\n FEATURES_CONFIGURED = 'features_configured',\n COMPLETED = 'completed',\n}\n\nexport interface OnboardingStatus {\n organizationId: string;\n gymId: string;\n currentStep: OnboardingStep;\n accountCreated: boolean;\n gymSettingsCompleted: boolean;\n featuresConfigured: boolean;\n isCompleted: boolean;\n nextAction: string;\n completionPercentage: number;\n}\n\nexport interface OnboardingResponse {\n success: boolean;\n gym?: any;\n onboardingStatus: OnboardingStatus;\n message?: string;\n}\n","import { BaseResource } from './base';\nimport {\n StartOnboardingData,\n StartOnboardingResponse,\n UpdateGymSettingsData,\n ConfigureFeaturesData,\n CompleteGuidedSetupData,\n OnboardingStatus,\n OnboardingResponse,\n OnboardingStatusResponse,\n OnboardingCacheStatus,\n} from '../models/onboarding';\n\nexport class OnboardingResource extends BaseResource {\n /**\n * Start onboarding process (async)\n * Creates user account and triggers background setup\n * Returns immediately with PROCESSING status\n * Use getStatusByEmail() to poll for completion\n */\n async start(data: StartOnboardingData): Promise<StartOnboardingResponse> {\n const response = await this.client.post<StartOnboardingResponse>(\n '/onboarding/start',\n data,\n { skipAuth: true }, // Public endpoint - no auth required\n );\n\n // Store tokens after successful onboarding start\n if (response.access_token) {\n this.client.setAuthToken(response.access_token);\n }\n\n return response;\n }\n\n /**\n * Get onboarding status by email (polling endpoint)\n * Use this to check if async onboarding setup is complete\n *\n * @param email - User email to check status\n * @returns Status object with PROCESSING, COMPLETED, or FAILED\n */\n async getStatusByEmail(email: string): Promise<OnboardingStatusResponse> {\n return this.client.get<OnboardingStatusResponse>(\n '/onboarding/status',\n { email },\n { skipAuth: true },\n );\n }\n\n /**\n * Poll for onboarding completion\n * Automatically polls until status is COMPLETED or FAILED\n *\n * @param email - User email\n * @param options - Polling options\n * @returns Final status when completed or failed\n */\n async waitForCompletion(\n email: string,\n options: {\n maxAttempts?: number;\n intervalMs?: number;\n onProgress?: (attempt: number, status: OnboardingCacheStatus) => void;\n } = {},\n ): Promise<OnboardingStatusResponse> {\n const { maxAttempts = 60, intervalMs = 1000, onProgress } = options;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const status = await this.getStatusByEmail(email);\n\n if (onProgress) {\n onProgress(attempt, status.status);\n }\n\n if (status.status === OnboardingCacheStatus.COMPLETED) {\n return status;\n }\n\n if (status.status === OnboardingCacheStatus.FAILED) {\n throw new Error(`Onboarding failed: ${status.error || 'Unknown error'}`);\n }\n\n // Wait before next poll\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n\n throw new Error('Onboarding timeout - process is still running in background');\n }\n\n /**\n * Updates basic gym settings (step 2 of onboarding)\n * Configure basic gym information like name, address, etc.\n */\n async updateGymSettings(data: UpdateGymSettingsData): Promise<OnboardingResponse> {\n return this.client.put<OnboardingResponse>('/onboarding/gym-settings', data);\n }\n\n /**\n * Configure gym features (step 3 of onboarding)\n * Enable/disable various management features\n */\n async configureFeatures(data: ConfigureFeaturesData): Promise<OnboardingResponse> {\n return this.client.put<OnboardingResponse>('/onboarding/configure-features', data);\n }\n\n /**\n * Mark onboarding as complete\n */\n async completeSetup(data: CompleteGuidedSetupData): Promise<OnboardingResponse> {\n return this.client.post<OnboardingResponse>('/onboarding/complete', data);\n }\n\n /**\n * Get current onboarding status by gym ID\n * Check progress and next steps\n */\n async getStatus(gymId: string): Promise<OnboardingStatus> {\n return this.client.get<OnboardingStatus>(`/onboarding/status/${gymId}`);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Product,\n ProductCategory,\n StockMovement,\n CreateProductDto,\n CreateServiceDto,\n UpdateProductDto,\n UpdateStockDto,\n CreateProductCategoryDto,\n UpdateProductCategoryDto,\n SearchProductsParams,\n} from '../models/products';\nimport { RequestOptions } from '../types';\n\nexport class ProductsResource extends BaseResource {\n private basePath = 'products';\n\n // Product Category Methods\n async createCategory(\n data: CreateProductCategoryDto,\n options?: RequestOptions,\n ): Promise<ProductCategory> {\n return this.client.post<ProductCategory>(`${this.basePath}/categories`, data, options);\n }\n\n async getCategories(options?: RequestOptions): Promise<ProductCategory[]> {\n return this.client.get<ProductCategory[]>(`${this.basePath}/categories`, undefined, options);\n }\n\n async updateCategory(\n id: string,\n data: UpdateProductCategoryDto,\n options?: RequestOptions,\n ): Promise<ProductCategory> {\n return this.client.put<ProductCategory>(`${this.basePath}/categories/${id}`, data, options);\n }\n\n async deleteCategory(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/categories/${id}`, options);\n }\n\n // Product Methods\n async createProduct(data: CreateProductDto, options?: RequestOptions): Promise<Product> {\n return this.client.post<Product>(this.basePath, data, options);\n }\n\n async createService(data: CreateServiceDto, options?: RequestOptions): Promise<Product> {\n return this.client.post<Product>(`${this.basePath}/services`, data, options);\n }\n\n async searchProducts(\n params?: SearchProductsParams,\n options?: RequestOptions,\n ): Promise<Product[]> {\n return this.client.get<Product[]>(this.basePath, params, options);\n }\n\n async getProduct(id: string, options?: RequestOptions): Promise<Product> {\n return this.client.get<Product>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateProduct(\n id: string,\n data: UpdateProductDto,\n options?: RequestOptions,\n ): Promise<Product> {\n return this.client.put<Product>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteProduct(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async toggleProductStatus(id: string, options?: RequestOptions): Promise<Product> {\n return this.client.patch<Product>(`${this.basePath}/${id}/toggle-status`, undefined, options);\n }\n\n async updateStock(id: string, data: UpdateStockDto, options?: RequestOptions): Promise<Product> {\n return this.client.patch<Product>(`${this.basePath}/${id}/stock`, data, options);\n }\n\n async getLowStockProducts(threshold: number = 10, options?: RequestOptions): Promise<Product[]> {\n return this.client.get<Product[]>(`${this.basePath}/low-stock`, { threshold }, options);\n }\n\n async getProductStockMovements(id: string, options?: RequestOptions): Promise<StockMovement[]> {\n return this.client.get<StockMovement[]>(\n `${this.basePath}/${id}/stock-movements`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n Sale,\n CreateSaleDto,\n UpdateSaleDto,\n UpdatePaymentStatusDto,\n PaySaleDto,\n SearchSalesParams,\n SalesStats,\n TopSellingProduct,\n CustomerSalesReport,\n} from '../models/sales';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class SalesResource extends BaseResource {\n private basePath = 'sales';\n\n async createSale(data: CreateSaleDto, options?: RequestOptions): Promise<Sale> {\n return this.client.post<Sale>(this.basePath, data, options);\n }\n\n async searchSales(\n params?: SearchSalesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Sale>> {\n return this.paginate<Sale>(this.basePath, params, options);\n }\n\n async getSale(id: string, options?: RequestOptions): Promise<Sale> {\n return this.client.get<Sale>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateSale(id: string, data: UpdateSaleDto, options?: RequestOptions): Promise<Sale> {\n return this.client.put<Sale>(`${this.basePath}/${id}`, data, options);\n }\n\n async updatePaymentStatus(\n id: string,\n paymentStatus: 'paid' | 'unpaid',\n options?: RequestOptions,\n ): Promise<Sale> {\n return this.client.put<Sale>(\n `${this.basePath}/${id}/payment-status`,\n { paymentStatus },\n options,\n );\n }\n\n async paySale(id: string, data: PaySaleDto, options?: RequestOptions): Promise<Sale> {\n return this.client.post<Sale>(`${this.basePath}/${id}/payment`, data, options);\n }\n\n async deleteSale(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getSalesStats(\n startDate?: string,\n endDate?: string,\n options?: RequestOptions,\n ): Promise<SalesStats> {\n const params: Record<string, string> = {};\n if (startDate) params.startDate = startDate;\n if (endDate) params.endDate = endDate;\n\n return this.client.get<SalesStats>(\n `${this.basePath}/stats`,\n Object.keys(params).length > 0 ? params : undefined,\n options,\n );\n }\n\n async getTopSellingProducts(\n limit: number = 10,\n startDate?: string,\n endDate?: string,\n options?: RequestOptions,\n ): Promise<TopSellingProduct[]> {\n const params: Record<string, string | number> = { limit };\n if (startDate) params.startDate = startDate;\n if (endDate) params.endDate = endDate;\n\n return this.client.get<TopSellingProduct[]>(`${this.basePath}/top-products`, params, options);\n }\n\n async getSalesByCustomer(\n startDate?: string,\n endDate?: string,\n options?: RequestOptions,\n ): Promise<CustomerSalesReport> {\n const params: Record<string, string> = {};\n if (startDate) params.startDate = startDate;\n if (endDate) params.endDate = endDate;\n\n return this.client.get<CustomerSalesReport>(\n `${this.basePath}/reports/by-customer`,\n Object.keys(params).length > 0 ? params : undefined,\n options,\n );\n }\n\n async resendWhatsAppNotification(\n saleId: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post<{ success: boolean; message: string }>(\n `${this.basePath}/${saleId}/resend-whatsapp`,\n {},\n options,\n );\n }\n\n /**\n * Send payment reminder for unpaid sale via WhatsApp\n * @param saleId - ID of the sale\n * @param options - Request options\n * @returns Promise with success status and message\n * @throws {ApiError} If sale is already paid, customer has no phone, or sale not found\n */\n async sendPaymentReminder(\n saleId: string,\n options?: RequestOptions,\n ): Promise<{ success: boolean; message: string }> {\n return this.client.post<{ success: boolean; message: string }>(\n `${this.basePath}/${saleId}/send-payment-reminder`,\n {},\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { \n Supplier,\n CreateSupplierDto, \n UpdateSupplierDto,\n SearchSuppliersParams,\n SuppliersStats\n} from '../models/suppliers';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class SuppliersResource extends BaseResource {\n private basePath = 'suppliers';\n\n async createSupplier(data: CreateSupplierDto, options?: RequestOptions): Promise<Supplier> {\n return this.client.post<Supplier>(this.basePath, data, options);\n }\n\n async searchSuppliers(\n params?: SearchSuppliersParams,\n options?: RequestOptions\n ): Promise<PaginatedResponseDto<Supplier>> {\n return this.paginate<Supplier>(this.basePath, params, options);\n }\n\n async getSupplier(id: string, options?: RequestOptions): Promise<Supplier> {\n return this.client.get<Supplier>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateSupplier(\n id: string,\n data: UpdateSupplierDto,\n options?: RequestOptions\n ): Promise<Supplier> {\n return this.client.put<Supplier>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteSupplier(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async getSuppliersStats(options?: RequestOptions): Promise<SuppliersStats> {\n return this.client.get<SuppliersStats>(`${this.basePath}/stats`, undefined, options);\n }\n}","import { BaseResource } from './base';\nimport { UserProfileDto, UpdateProfileDto } from '../models/users';\nimport { RequestOptions } from '../types';\n\nexport class UsersResource extends BaseResource {\n /**\n * Get the current user's profile\n * @param options - Request options\n * @returns User profile data\n */\n async getProfile(options?: RequestOptions): Promise<UserProfileDto> {\n return this.client.get<UserProfileDto>('/users/profile', undefined, options);\n }\n\n /**\n * Update the current user's profile\n * @param data - Profile update data\n * @param options - Request options\n * @returns Updated user profile\n */\n async updateProfile(\n data: UpdateProfileDto,\n options?: RequestOptions\n ): Promise<UserProfileDto> {\n return this.client.put<UserProfileDto>('/users/profile', data, options);\n }\n}","import {\n AvailablePlanDto,\n SubscriptionStatusDto,\n AffiliateOrganizationDto,\n CheckLimitResponse,\n} from '../models/subscriptions';\nimport { RequestOptions } from '../types';\nimport { BaseResource } from './base';\n\nexport class SubscriptionsResource extends BaseResource {\n private basePath = 'subscriptions';\n\n /**\n * Get available subscription plans (currently only free plans)\n */\n async getAvailablePlans(options?: RequestOptions): Promise<AvailablePlanDto[]> {\n return this.client.get<AvailablePlanDto[]>(`${this.basePath}/plans`, undefined, options);\n }\n\n /**\n * Get subscription status for an organization\n */\n async getSubscriptionStatus(\n organizationId: string,\n options?: RequestOptions,\n ): Promise<SubscriptionStatusDto> {\n return this.client.get<SubscriptionStatusDto>(\n `${this.basePath}/organizations/${organizationId}/status`,\n undefined,\n options,\n );\n }\n\n /**\n * Affiliate organization to a subscription plan\n */\n async affiliateOrganization(\n organizationId: string,\n data: AffiliateOrganizationDto,\n options?: RequestOptions,\n ): Promise<SubscriptionStatusDto> {\n return this.client.post<SubscriptionStatusDto>(\n `${this.basePath}/organizations/${organizationId}/affiliate`,\n data,\n options,\n );\n }\n\n /**\n * Check subscription limits\n * @param organizationId Organization ID\n * @param limitType Type of limit to check: 'gyms', 'clients', or 'users'\n */\n async checkSubscriptionLimit(\n organizationId: string,\n limitType: 'gyms' | 'clients' | 'users',\n options?: RequestOptions,\n ): Promise<CheckLimitResponse> {\n return this.client.get<CheckLimitResponse>(\n `${this.basePath}/organizations/${organizationId}/limits/${limitType}`,\n undefined,\n options,\n );\n }\n}","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\n\n// Import the types we'll define\nexport interface SubscriptionPlanDto {\n id: string;\n name: string;\n planType?: string;\n price: {\n PEN?: { currency: 'PEN'; value: number };\n USD?: { currency: 'USD'; value: number };\n COP?: { currency: 'COP'; value: number };\n MXN?: { currency: 'MXN'; value: number };\n };\n billingFrequency: string;\n duration?: number;\n durationPeriod?: string;\n maxGyms: number;\n maxClientsPerGym: number;\n maxUsersPerGym: number;\n features: Record<string, any>;\n description?: string;\n isActive: boolean;\n isVisibleToPublic: boolean;\n createdAt: Date;\n updatedAt: Date;\n activeSubscriptions?: number;\n totalOrganizations?: number;\n}\n\nexport interface PriceDto {\n currency: string;\n value: number;\n}\n\nexport interface PricingDto {\n PEN: PriceDto;\n}\n\nexport interface CreateSubscriptionPlanDto {\n name: string;\n planType?: string;\n price: PricingDto;\n billingFrequency: string;\n duration?: number;\n durationPeriod?: 'DAY' | 'MONTH';\n maxGyms: number;\n maxClientsPerGym: number;\n maxUsersPerGym: number;\n features: Record<string, any>;\n description?: string;\n isActive?: boolean;\n isVisibleToPublic?: boolean;\n}\n\nexport interface UpdateSubscriptionPlanDto {\n name?: string;\n planType?: string;\n price?: PricingDto;\n billingFrequency?: string;\n duration?: number;\n durationPeriod?: 'DAY' | 'MONTH';\n maxGyms?: number;\n maxClientsPerGym?: number;\n maxUsersPerGym?: number;\n features?: Record<string, any>;\n description?: string;\n isActive?: boolean;\n isVisibleToPublic?: boolean;\n}\n\nexport class SubscriptionPlansResource extends BaseResource {\n private basePath = 'admin/subscription-plans';\n private publicBasePath = 'subscription-plans/public';\n\n /**\n * List all active subscription plans (Public - no authentication required)\n */\n async listPublicPlans(options?: RequestOptions): Promise<SubscriptionPlanDto[]> {\n return this.client.get<SubscriptionPlanDto[]>(`${this.publicBasePath}`, undefined, options);\n }\n\n /**\n * List all subscription plans (Super Admin only)\n */\n async listPlans(options?: RequestOptions): Promise<SubscriptionPlanDto[]> {\n return this.client.get<SubscriptionPlanDto[]>(`${this.basePath}`, undefined, options);\n }\n\n /**\n * Create new subscription plan (Super Admin only)\n */\n async createPlan(\n data: CreateSubscriptionPlanDto,\n options?: RequestOptions,\n ): Promise<SubscriptionPlanDto> {\n return this.client.post<SubscriptionPlanDto>(`${this.basePath}`, data, options);\n }\n\n /**\n * Get subscription plan details (Super Admin only)\n */\n async getPlan(id: string, options?: RequestOptions): Promise<SubscriptionPlanDto> {\n return this.client.get<SubscriptionPlanDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Update subscription plan (Super Admin only)\n */\n async updatePlan(\n id: string,\n data: UpdateSubscriptionPlanDto,\n options?: RequestOptions,\n ): Promise<SubscriptionPlanDto> {\n return this.client.put<SubscriptionPlanDto>(`${this.basePath}/${id}`, data, options);\n }\n\n /**\n * Soft delete subscription plan (Super Admin only)\n */\n async deletePlan(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\n\n// Import types from existing subscriptions model and add new ones\nexport interface AdminSubscriptionStatusDto {\n id: string;\n organizationId: string;\n subscriptionPlanId: string;\n planName: string;\n status: string; // Should match SubscriptionStatus enum\n startDate: Date;\n endDate: Date;\n isActive: boolean;\n isExpired: boolean;\n daysRemaining: number;\n metadata?: Record<string, any>;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport interface ActivateRenewalDto {\n subscriptionPlanId?: string;\n durationMonths?: number;\n notes?: string;\n}\n\nexport interface CancelSubscriptionDto {\n reason: string;\n immediateTermination?: boolean;\n notes?: string;\n}\n\nexport interface UpgradeSubscriptionDto {\n newSubscriptionPlanId: string;\n immediateUpgrade?: boolean;\n notes?: string;\n}\n\nexport interface SubscriptionHistoryDto {\n id: string;\n planName: string;\n status: string; // Should match SubscriptionStatus enum\n startDate: Date;\n endDate: Date;\n isActive: boolean;\n metadata?: Record<string, any>;\n createdBy: {\n id: string;\n name: string;\n email: string;\n };\n createdAt: Date;\n}\n\nexport class AdminSubscriptionManagementResource extends BaseResource {\n private basePath = 'admin/organizations';\n\n /**\n * Activate subscription renewal for an organization (Super Admin only)\n */\n async activateRenewal(\n organizationId: string,\n data: ActivateRenewalDto,\n options?: RequestOptions,\n ): Promise<AdminSubscriptionStatusDto> {\n return this.client.post<AdminSubscriptionStatusDto>(\n `${this.basePath}/${organizationId}/subscriptions/activate-renewal`,\n data,\n options,\n );\n }\n\n /**\n * Cancel subscription for an organization (Super Admin only)\n */\n async cancelSubscription(\n organizationId: string,\n data: CancelSubscriptionDto,\n options?: RequestOptions,\n ): Promise<AdminSubscriptionStatusDto> {\n return this.client.post<AdminSubscriptionStatusDto>(\n `${this.basePath}/${organizationId}/subscriptions/cancel`,\n data,\n options,\n );\n }\n\n /**\n * Upgrade subscription plan for an organization (Super Admin only)\n */\n async upgradeSubscription(\n organizationId: string,\n data: UpgradeSubscriptionDto,\n options?: RequestOptions,\n ): Promise<AdminSubscriptionStatusDto> {\n return this.client.post<AdminSubscriptionStatusDto>(\n `${this.basePath}/${organizationId}/subscriptions/upgrade`,\n data,\n options,\n );\n }\n\n /**\n * Get subscription history for an organization (Super Admin only)\n */\n async getSubscriptionHistory(\n organizationId: string,\n options?: RequestOptions,\n ): Promise<SubscriptionHistoryDto[]> {\n return this.client.get<SubscriptionHistoryDto[]>(\n `${this.basePath}/${organizationId}/subscriptions/history`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { \n PaymentMethod,\n CreatePaymentMethodDto, \n UpdatePaymentMethodDto,\n SearchPaymentMethodsParams,\n PaymentMethodStats\n} from '../models/payment-methods';\nimport { RequestOptions } from '../types';\n\nexport class PaymentMethodsResource extends BaseResource {\n private basePath = 'payment-methods';\n\n async createPaymentMethod(data: CreatePaymentMethodDto, options?: RequestOptions): Promise<PaymentMethod> {\n return this.client.post<PaymentMethod>(this.basePath, data, options);\n }\n\n async searchPaymentMethods(\n params?: SearchPaymentMethodsParams,\n options?: RequestOptions\n ): Promise<PaymentMethod[]> {\n return this.client.get<PaymentMethod[]>(this.basePath, params, options);\n }\n\n async getPaymentMethod(id: string, options?: RequestOptions): Promise<PaymentMethod> {\n return this.client.get<PaymentMethod>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updatePaymentMethod(\n id: string,\n data: UpdatePaymentMethodDto,\n options?: RequestOptions\n ): Promise<PaymentMethod> {\n return this.client.put<PaymentMethod>(`${this.basePath}/${id}`, data, options);\n }\n\n async deletePaymentMethod(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n async togglePaymentMethod(id: string, options?: RequestOptions): Promise<PaymentMethod> {\n return this.client.put<PaymentMethod>(`${this.basePath}/${id}/toggle`, undefined, options);\n }\n\n async getPaymentMethodStats(options?: RequestOptions): Promise<PaymentMethodStats> {\n return this.client.get<PaymentMethodStats>(`${this.basePath}/stats`, undefined, options);\n }\n}","import { BaseResource } from './base';\nimport {\n WhatsAppConfig,\n WhatsAppMessage,\n CreateWhatsAppConfigDto,\n UpdateWhatsAppConfigDto,\n SendWhatsAppMessageDto,\n SearchWhatsAppMessagesDto,\n ConnectionStatusResponse,\n InitializeConnectionResponse,\n Contact,\n DisconnectResponse,\n SendCatalogMessageDto,\n SendCatalogMessageResponse,\n} from '../models/whatsapp';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class WhatsAppResource extends BaseResource {\n private basePath = 'whatsapp';\n\n /**\n * Get WhatsApp configuration for the current gym\n */\n async getConfig(options?: RequestOptions): Promise<WhatsAppConfig> {\n return this.client.get<WhatsAppConfig>(`${this.basePath}/config`, undefined, options);\n }\n\n /**\n * Initialize WhatsApp connection\n * Returns QR code if needed\n */\n async initializeConnection(options?: RequestOptions): Promise<InitializeConnectionResponse> {\n return this.client.post<InitializeConnectionResponse>(\n `${this.basePath}/initialize`,\n {},\n options,\n );\n }\n\n /**\n * Update WhatsApp configuration\n */\n async updateConfig(\n data: UpdateWhatsAppConfigDto,\n options?: RequestOptions,\n ): Promise<WhatsAppConfig> {\n return this.client.put<WhatsAppConfig>(`${this.basePath}/config`, data, options);\n }\n\n /**\n * Get WhatsApp connection status\n */\n async getConnectionStatus(options?: RequestOptions): Promise<ConnectionStatusResponse> {\n return this.client.get<ConnectionStatusResponse>(\n `${this.basePath}/connection-status`,\n undefined,\n options,\n );\n }\n\n /**\n * Send a WhatsApp message\n */\n async sendMessage(\n data: SendWhatsAppMessageDto,\n options?: RequestOptions,\n ): Promise<WhatsAppMessage> {\n return this.client.post<WhatsAppMessage>(`${this.basePath}/send-message`, data, options);\n }\n\n /**\n * Get WhatsApp messages with pagination and filters\n */\n async getMessages(\n params?: SearchWhatsAppMessagesDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<WhatsAppMessage>> {\n return this.paginate<WhatsAppMessage>(`${this.basePath}/messages`, params, options);\n }\n\n /**\n * Get a specific WhatsApp message by ID\n */\n async getMessage(id: string, options?: RequestOptions): Promise<WhatsAppMessage> {\n return this.client.get<WhatsAppMessage>(`${this.basePath}/messages/${id}`, undefined, options);\n }\n\n async listContacts(options?: RequestOptions): Promise<Contact[]> {\n return this.client.get<Contact[]>(`${this.basePath}/contacts`, undefined, options);\n }\n\n /**\n * Disconnect WhatsApp instance\n * Logs out from WhatsApp without deleting the instance\n */\n async disconnect(options?: RequestOptions): Promise<DisconnectResponse> {\n return this.client.post<DisconnectResponse>(`${this.basePath}/disconnect`, {}, options);\n }\n\n /**\n * Send catalog message to multiple clients\n */\n async sendCatalogMessage(\n data: SendCatalogMessageDto,\n options?: RequestOptions,\n ): Promise<SendCatalogMessageResponse> {\n return this.client.post<SendCatalogMessageResponse>(\n `${this.basePath}/send-catalog`,\n data,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n WhatsAppTemplate,\n CreateTemplateDto,\n UpdateTemplateDto,\n SearchTemplatesDto,\n PreviewTemplateResponse,\n} from '../models/whatsapp';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\n// Import TemplateCode type from shared (re-exported via types)\ntype TemplateCode = string;\n\nexport class WhatsAppTemplatesResource extends BaseResource {\n private basePath = 'whatsapp/templates';\n\n /**\n * Create a new WhatsApp template\n */\n async create(data: CreateTemplateDto, options?: RequestOptions): Promise<WhatsAppTemplate> {\n return this.client.post<WhatsAppTemplate>(this.basePath, data, options);\n }\n\n /**\n * Get all WhatsApp templates with pagination and filters\n */\n async findAll(\n params?: SearchTemplatesDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<WhatsAppTemplate>> {\n return this.paginate<WhatsAppTemplate>(this.basePath, params, options);\n }\n\n /**\n * Get a specific WhatsApp template by ID\n */\n async findOne(id: string, options?: RequestOptions): Promise<WhatsAppTemplate> {\n return this.client.get<WhatsAppTemplate>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Get a WhatsApp template by code\n */\n async findByCode(code: TemplateCode, options?: RequestOptions): Promise<WhatsAppTemplate> {\n return this.client.get<WhatsAppTemplate>(`${this.basePath}/code/${code}`, undefined, options);\n }\n\n /**\n * Update a WhatsApp template\n */\n async update(\n id: string,\n data: UpdateTemplateDto,\n options?: RequestOptions,\n ): Promise<WhatsAppTemplate> {\n return this.client.put<WhatsAppTemplate>(`${this.basePath}/${id}`, data, options);\n }\n\n /**\n * Delete a WhatsApp template\n */\n async remove(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n\n /**\n * Preview a template with variables\n */\n async preview(\n id: string,\n variables: Record<string, any>,\n options?: RequestOptions,\n ): Promise<PreviewTemplateResponse> {\n return this.client.post<PreviewTemplateResponse>(\n `${this.basePath}/${id}/preview`,\n variables,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\nimport {\n BulkTemplate,\n CreateBulkTemplateDto,\n UpdateBulkTemplateDto,\n BulkMessageVariable,\n SendBulkMessagesDto,\n BulkMessageResultDto,\n BulkLogsResponseDto,\n GenerateAIMessageDto,\n GenerateAIMessageResponseDto,\n} from '../models/bulk-messaging';\n\nexport class BulkMessagingResource extends BaseResource {\n private basePath = 'whatsapp/bulk-messaging';\n private templatesPath = 'whatsapp/bulk-templates';\n\n async createTemplate(\n data: CreateBulkTemplateDto,\n options?: RequestOptions,\n ): Promise<BulkTemplate> {\n return this.client.post<BulkTemplate>(this.templatesPath, data, options);\n }\n\n async getTemplates(options?: RequestOptions): Promise<BulkTemplate[]> {\n return this.client.get<BulkTemplate[]>(this.templatesPath, undefined, options);\n }\n\n async getTemplate(id: string, options?: RequestOptions): Promise<BulkTemplate> {\n return this.client.get<BulkTemplate>(`${this.templatesPath}/${id}`, undefined, options);\n }\n\n async updateTemplate(\n id: string,\n data: UpdateBulkTemplateDto,\n options?: RequestOptions,\n ): Promise<BulkTemplate> {\n return this.client.put<BulkTemplate>(`${this.templatesPath}/${id}`, data, options);\n }\n\n async deleteTemplate(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.templatesPath}/${id}`, options);\n }\n\n async getAvailableVariables(options?: RequestOptions): Promise<BulkMessageVariable[]> {\n return this.client.get<BulkMessageVariable[]>(\n `${this.basePath}/available-variables`,\n undefined,\n options,\n );\n }\n\n /**\n * Generate AI message with streaming support\n * Note: This proxies to the agent endpoint for streaming responses\n */\n async generateAIMessage(\n data: GenerateAIMessageDto,\n options?: RequestOptions,\n ): Promise<GenerateAIMessageResponseDto> {\n return this.client.post<GenerateAIMessageResponseDto>(\n `${this.basePath}/generate-ai`,\n data,\n options,\n );\n }\n\n /**\n * Send bulk messages to multiple clients\n * Note: SDK sends clientIds, API fetches full client and gym data before sending to agent\n */\n async send(data: SendBulkMessagesDto, options?: RequestOptions): Promise<BulkMessageResultDto> {\n return this.client.post<BulkMessageResultDto>(`${this.basePath}/send`, data, options);\n }\n\n /**\n * Get logs for a bulk message send operation\n */\n async getLogs(sendId: string, options?: RequestOptions): Promise<BulkLogsResponseDto> {\n return this.client.get<BulkLogsResponseDto>(`${this.basePath}/logs`, { sendId }, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n Activity,\n CreateActivityDto,\n UpdateActivityDto,\n SearchActivitiesParams,\n CreateActivityNotificationDto,\n UpdateActivityNotificationDto,\n ActivityNotificationDto,\n ActivityStats,\n ActivityStatsParams,\n EligibleClientsResponse,\n DeleteActivityParams,\n} from '../models/activities';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class ActivitiesResource extends BaseResource {\n private basePath = 'activities';\n\n async createActivity(data: CreateActivityDto, options?: RequestOptions): Promise<Activity> {\n return this.client.post<Activity>(this.basePath, data, options);\n }\n\n async searchActivities(\n params?: SearchActivitiesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Activity>> {\n return this.paginate<Activity>(this.basePath, params as any, options);\n }\n\n async getActivity(id: string, options?: RequestOptions): Promise<Activity> {\n return this.client.get<Activity>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async updateActivity(\n id: string,\n data: UpdateActivityDto,\n options?: RequestOptions,\n ): Promise<Activity> {\n return this.client.patch<Activity>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteActivity(\n id: string,\n params?: DeleteActivityParams,\n options?: RequestOptions,\n ): Promise<void> {\n const queryString = params?.deleteRecurrence ? '?deleteRecurrence=true' : '';\n return this.client.delete<void>(`${this.basePath}/${id}${queryString}`, options);\n }\n\n async createNotification(\n activityId: string,\n data: CreateActivityNotificationDto,\n options?: RequestOptions,\n ): Promise<ActivityNotificationDto> {\n return this.client.post<ActivityNotificationDto>(\n `${this.basePath}/${activityId}/notifications`,\n data,\n options,\n );\n }\n\n async getNotifications(\n activityId: string,\n options?: RequestOptions,\n ): Promise<{ data: ActivityNotificationDto[] }> {\n return this.client.get<{ data: ActivityNotificationDto[] }>(\n `${this.basePath}/${activityId}/notifications`,\n undefined,\n options,\n );\n }\n\n async updateNotification(\n activityId: string,\n notificationId: string,\n data: UpdateActivityNotificationDto,\n options?: RequestOptions,\n ): Promise<ActivityNotificationDto> {\n return this.client.patch<ActivityNotificationDto>(\n `${this.basePath}/${activityId}/notifications/${notificationId}`,\n data,\n options,\n );\n }\n\n async deleteNotification(\n activityId: string,\n notificationId: string,\n options?: RequestOptions,\n ): Promise<void> {\n return this.client.delete<void>(\n `${this.basePath}/${activityId}/notifications/${notificationId}`,\n options,\n );\n }\n\n async getStats(params?: ActivityStatsParams, options?: RequestOptions): Promise<ActivityStats> {\n return this.client.get<ActivityStats>(`${this.basePath}/stats`, params, options);\n }\n\n async getEligibleClients(\n activityId: string,\n options?: RequestOptions,\n ): Promise<EligibleClientsResponse> {\n return this.client.get<EligibleClientsResponse>(\n `${this.basePath}/${activityId}/eligible-clients`,\n undefined,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n Tag,\n CreateTagDto,\n UpdateTagDto,\n AssignTagsDto,\n SearchTagsParams,\n GetTagClientsParams,\n AssignTagsResponse,\n RemoveTagsResponse,\n DeleteTagResponse,\n ClientTagsResponse,\n TagClientsResponse,\n TagStatsResponse,\n} from '../models/tags';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class TagsResource extends BaseResource {\n private basePath = 'tags';\n\n // ==================== Tag Management ====================\n\n /**\n * Create a new tag\n * POST /api/v1/tags\n */\n async createTag(data: CreateTagDto, options?: RequestOptions): Promise<Tag> {\n return this.client.post<Tag>(this.basePath, data, options);\n }\n\n /**\n * List all tags with optional filters and pagination\n * GET /api/v1/tags\n */\n async searchTags(\n params?: SearchTagsParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<Tag>> {\n return this.client.get<PaginatedResponseDto<Tag>>(this.basePath, params, options);\n }\n\n /**\n * Get a specific tag by ID\n * GET /api/v1/tags/:id\n */\n async getTag(id: string, options?: RequestOptions): Promise<Tag> {\n return this.client.get<Tag>(`${this.basePath}/${id}`, undefined, options);\n }\n\n /**\n * Update an existing tag\n * PUT /api/v1/tags/:id\n */\n async updateTag(id: string, data: UpdateTagDto, options?: RequestOptions): Promise<Tag> {\n return this.client.put<Tag>(`${this.basePath}/${id}`, data, options);\n }\n\n /**\n * Delete a tag (soft delete)\n * DELETE /api/v1/tags/:id\n * @param id - Tag ID\n * @param force - Force deletion even if tag has assigned clients\n */\n async deleteTag(\n id: string,\n force?: boolean,\n options?: RequestOptions,\n ): Promise<DeleteTagResponse> {\n const path = force ? `${this.basePath}/${id}?force=true` : `${this.basePath}/${id}`;\n return this.client.delete<DeleteTagResponse>(path, options);\n }\n\n /**\n * Get clients with a specific tag\n * GET /api/v1/tags/:id/clients\n */\n async getTagClients(\n id: string,\n params?: GetTagClientsParams,\n options?: RequestOptions,\n ): Promise<TagClientsResponse> {\n return this.client.get<TagClientsResponse>(`${this.basePath}/${id}/clients`, params, options);\n }\n\n /**\n * Get tag statistics\n * GET /api/v1/tags/stats\n */\n async getTagStats(options?: RequestOptions): Promise<TagStatsResponse> {\n return this.client.get<TagStatsResponse>(`${this.basePath}/stats`, undefined, options);\n }\n\n // ==================== Client Tag Assignment ====================\n\n /**\n * Assign one or multiple tags to a client\n * POST /api/v1/clients/:clientId/tags\n */\n async assignTagsToClient(\n clientId: string,\n data: AssignTagsDto,\n options?: RequestOptions,\n ): Promise<AssignTagsResponse> {\n return this.client.post<AssignTagsResponse>(`clients/${clientId}/tags`, data, options);\n }\n\n /**\n * Remove a specific tag from a client\n * DELETE /api/v1/clients/:clientId/tags/:tagId\n */\n async removeTagFromClient(\n clientId: string,\n tagId: string,\n options?: RequestOptions,\n ): Promise<RemoveTagsResponse> {\n return this.client.delete<RemoveTagsResponse>(`clients/${clientId}/tags/${tagId}`, options);\n }\n\n /**\n * Remove multiple tags from a client\n * DELETE /api/v1/clients/:clientId/tags\n * Note: This endpoint requires sending tagIds in the request body\n */\n async removeTagsFromClient(\n clientId: string,\n tagIds: string[],\n options?: RequestOptions,\n ): Promise<RemoveTagsResponse> {\n // DELETE with body requires special handling\n return this.request<RemoveTagsResponse>(`clients/${clientId}/tags`, {\n method: 'DELETE',\n body: JSON.stringify({ tagIds }),\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n });\n }\n\n /**\n * Get all tags assigned to a client\n * GET /api/v1/clients/:clientId/tags\n */\n async getClientTags(clientId: string, options?: RequestOptions): Promise<ClientTagsResponse> {\n return this.client.get<ClientTagsResponse>(`clients/${clientId}/tags`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionConfigDto,\n CreateCommissionConfigDto,\n UpdateCommissionConfigDto,\n CommissionHistoryDto,\n CommissionHistoryFiltersDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionConfigResource extends BaseResource {\n private basePath = 'commissions/config';\n\n async createConfig(\n data: CreateCommissionConfigDto,\n options?: RequestOptions,\n ): Promise<CommissionConfigDto> {\n return this.client.post<CommissionConfigDto>(this.basePath, data, options);\n }\n\n async getActiveConfig(options?: RequestOptions): Promise<CommissionConfigDto> {\n return this.client.get<CommissionConfigDto>(`${this.basePath}/active`, undefined, options);\n }\n\n async getConfig(id: string, options?: RequestOptions): Promise<CommissionConfigDto> {\n return this.client.get<CommissionConfigDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async listConfigs(\n params?: { page: number; limit: number },\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionConfigDto>> {\n return this.paginate<CommissionConfigDto>(this.basePath, params, options);\n }\n\n async updateConfig(\n id: string,\n data: UpdateCommissionConfigDto,\n options?: RequestOptions,\n ): Promise<CommissionConfigDto> {\n return this.client.put<CommissionConfigDto>(`${this.basePath}/${id}`, data, options);\n }\n\n async deactivateConfig(id: string, options?: RequestOptions): Promise<CommissionConfigDto> {\n return this.client.put<CommissionConfigDto>(`${this.basePath}/${id}/deactivate`, {}, options);\n }\n\n async getConfigHistory(\n id: string,\n params?: CommissionHistoryFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionHistoryDto>> {\n return this.paginate<CommissionHistoryDto>(`${this.basePath}/${id}/history`, params, options);\n }\n\n async validateConfig(\n data: CreateCommissionConfigDto,\n options?: RequestOptions,\n ): Promise<{ valid: boolean; errors?: string[] }> {\n return this.client.post<{ valid: boolean; errors?: string[] }>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionRuleDto,\n CreateCommissionRuleDto,\n UpdateCommissionRuleDto,\n CommissionRuleFiltersDto,\n CommissionHistoryDto,\n CommissionHistoryFiltersDto,\n ReorderCommissionRulesDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionRulesResource extends BaseResource {\n private basePath = 'commissions/rules';\n\n async createRule(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.post<CommissionRuleDto>(this.basePath, data, options);\n }\n\n async getRule(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.get<CommissionRuleDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async listRules(\n params?: CommissionRuleFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionRuleDto>> {\n return this.paginate<CommissionRuleDto>(this.basePath, params, options);\n }\n\n async updateRule(\n id: string,\n data: UpdateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}`, data, options);\n }\n\n async deleteRule(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n\n async activateRule(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/activate`, {}, options);\n }\n\n async deactivateRule(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/deactivate`, {}, options);\n }\n\n async getRuleHistory(\n id: string,\n params?: CommissionHistoryFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionHistoryDto>> {\n return this.paginate<CommissionHistoryDto>(`${this.basePath}/${id}/history`, params, options);\n }\n\n async validateRule(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }> {\n return this.client.post<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n\n async getMyRules(options?: RequestOptions): Promise<CommissionRuleDto[]> {\n return this.client.get<CommissionRuleDto[]>(`${this.basePath}/me`, undefined, options);\n }\n\n async getApplicableRule(\n params: {\n collaboratorId: string;\n planId?: string;\n amount?: number;\n promotionId?: string;\n },\n options?: RequestOptions,\n ): Promise<CommissionRuleDto | null> {\n return this.client.get<CommissionRuleDto | null>(\n `${this.basePath}/applicable`,\n params,\n options,\n );\n }\n\n async reorderRules(\n data: ReorderCommissionRulesDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto[]> {\n return this.client.patch<CommissionRuleDto[]>(`${this.basePath}/reorder`, data, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionCalculationDto,\n CommissionFiltersDto,\n CommissionSummaryDto,\n SimulateCommissionDto,\n CommissionSimulationDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionCalculationsResource extends BaseResource {\n private basePath = 'commissions/calculations';\n\n async createCalculation(\n data: { contractId: string; collaboratorId: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.post<CommissionCalculationDto>(this.basePath, data, options);\n }\n\n async getCalculation(id: string, options?: RequestOptions): Promise<CommissionCalculationDto> {\n return this.client.get<CommissionCalculationDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async getCalculations(\n params?: CommissionFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionCalculationDto>> {\n return this.paginate<CommissionCalculationDto>(this.basePath, params, options);\n }\n\n async getCollaboratorCalculations(\n collaboratorId: string,\n params?: CommissionFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionCalculationDto>> {\n return this.paginate<CommissionCalculationDto>(\n `${this.basePath}/collaborator/${collaboratorId}`,\n params,\n options,\n );\n }\n\n async confirmCalculation(\n id: string,\n data: { note?: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.put<CommissionCalculationDto>(\n `${this.basePath}/${id}/confirm`,\n data,\n options,\n );\n }\n\n async reverseCalculation(\n id: string,\n data: { reason: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.put<CommissionCalculationDto>(\n `${this.basePath}/${id}/reverse`,\n data,\n options,\n );\n }\n\n async markAsPaid(\n id: string,\n data: { paidDate: string; note?: string },\n options?: RequestOptions,\n ): Promise<CommissionCalculationDto> {\n return this.client.put<CommissionCalculationDto>(`${this.basePath}/${id}/paid`, data, options);\n }\n\n async simulate(\n data: SimulateCommissionDto,\n options?: RequestOptions,\n ): Promise<CommissionSimulationDto> {\n return this.client.post<CommissionSimulationDto>('commissions/simulator', data, options);\n }\n\n async getMyCommissions(\n params?: CommissionFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionCalculationDto>> {\n return this.paginate<CommissionCalculationDto>('commissions/me', params, options);\n }\n\n async getMyCommissionsSummary(options?: RequestOptions): Promise<CommissionSummaryDto> {\n return this.client.get<CommissionSummaryDto>('commissions/me/summary', undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n ReportFiltersDto,\n CommissionSummaryReportDto,\n RuleReportDto,\n CollaboratorReportDto,\n PromotionReportDto,\n PromotionReportFiltersDto,\n} from '../models/commissions';\nimport { RequestOptions } from '../types';\n\nexport class CommissionReportsResource extends BaseResource {\n private basePath = 'commissions/reports';\n\n async getSummary(\n params?: ReportFiltersDto,\n options?: RequestOptions,\n ): Promise<CommissionSummaryReportDto> {\n return this.client.get<CommissionSummaryReportDto>(`${this.basePath}/summary`, params, options);\n }\n\n async getByRule(params?: ReportFiltersDto, options?: RequestOptions): Promise<RuleReportDto[]> {\n return this.client.get<RuleReportDto[]>(`${this.basePath}/by-rule`, params, options);\n }\n\n async getByCollaborator(\n params?: ReportFiltersDto,\n options?: RequestOptions,\n ): Promise<CollaboratorReportDto[]> {\n return this.client.get<CollaboratorReportDto[]>(\n `${this.basePath}/by-collaborator`,\n params,\n options,\n );\n }\n\n async getPromotionAnalytics(\n params?: PromotionReportFiltersDto,\n options?: RequestOptions,\n ): Promise<PromotionReportDto[]> {\n return this.client.get<PromotionReportDto[]>(`${this.basePath}/promotions`, params, options);\n }\n\n async exportToCSV(params?: ReportFiltersDto, options?: RequestOptions): Promise<Blob> {\n return this.client.get<Blob>(`${this.basePath}/export/csv`, params, options);\n }\n\n async getTrends(\n params?: ReportFiltersDto,\n options?: RequestOptions,\n ): Promise<{ date: string; commissions: number; contracts: number }[]> {\n return this.client.get<{ date: string; commissions: number; contracts: number }[]>(\n `${this.basePath}/trends`,\n params,\n options,\n );\n }\n\n async getTopPerformers(\n params?: ReportFiltersDto & { limit?: number },\n options?: RequestOptions,\n ): Promise<CollaboratorReportDto[]> {\n return this.client.get<CollaboratorReportDto[]>(\n `${this.basePath}/top-performers`,\n params,\n options,\n );\n }\n}\n","import { BaseResource } from './base';\nimport {\n CommissionRuleDto,\n CreateCommissionRuleDto,\n UpdateCommissionRuleDto,\n CommissionRuleFiltersDto,\n} from '../models/commissions';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class CommissionPromotionsResource extends BaseResource {\n private basePath = 'commissions/promotions';\n\n async createPromotion(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.post<CommissionRuleDto>(this.basePath, data, options);\n }\n\n async getPromotion(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.get<CommissionRuleDto>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async listPromotions(\n params?: CommissionRuleFiltersDto,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<CommissionRuleDto>> {\n return this.paginate<CommissionRuleDto>(this.basePath, params, options);\n }\n\n async updatePromotion(\n id: string,\n data: UpdateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}`, data, options);\n }\n\n async deletePromotion(id: string, options?: RequestOptions): Promise<{ success: boolean }> {\n return this.client.delete<{ success: boolean }>(`${this.basePath}/${id}`, options);\n }\n\n async activatePromotion(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/activate`, {}, options);\n }\n\n async deactivatePromotion(id: string, options?: RequestOptions): Promise<CommissionRuleDto> {\n return this.client.put<CommissionRuleDto>(`${this.basePath}/${id}/deactivate`, {}, options);\n }\n\n async validatePromotion(\n data: CreateCommissionRuleDto,\n options?: RequestOptions,\n ): Promise<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }> {\n return this.client.post<{ valid: boolean; errors?: string[]; conflicts?: CommissionRuleDto[] }>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n\n async estimateImpact(\n id: string,\n options?: RequestOptions,\n ): Promise<{\n estimatedContracts: number;\n estimatedCommissions: number;\n estimatedCost: number;\n }> {\n return this.client.get<{\n estimatedContracts: number;\n estimatedCommissions: number;\n estimatedCost: number;\n }>(`${this.basePath}/${id}/impact`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport { Message, GetMessagesParams } from '../models/messages';\nimport { RequestOptions } from '../types';\n\ninterface MessagesResponse {\n data: Message[];\n}\n\nexport class MessagesResource extends BaseResource {\n private basePath = 'messages';\n\n async getMessages(params?: GetMessagesParams, options?: RequestOptions): Promise<Message[]> {\n const response = await this.client.get<MessagesResponse>(this.basePath, params, options);\n return response.data;\n }\n\n async getMessage(id: string, options?: RequestOptions): Promise<Message> {\n return this.client.get<Message>(`${this.basePath}/${id}`, undefined, options);\n }\n\n async retryMessage(id: string, options?: RequestOptions): Promise<Message> {\n return this.client.post<Message>(`${this.basePath}/${id}/retry`, undefined, options);\n }\n\n async cancelMessage(id: string, options?: RequestOptions): Promise<Message> {\n return this.client.post<Message>(`${this.basePath}/${id}/cancel`, undefined, options);\n }\n}\n","import { BaseResource } from './base';\nimport { RequestOptions } from '../types';\nimport {\n CreditAccount,\n CreditAccountWithOrgName,\n CreditTransaction,\n CreditAdjustment,\n CreditAdjustmentResponse,\n CreditUsageReport,\n CreditUsageReportQuery,\n CreditStats,\n} from '../models/credits';\n\nexport class CreditsResource extends BaseResource {\n // Admin endpoints for specific organization\n private adminOrgCreditsPath = (organizationId: string) =>\n `admin/organizations/${organizationId}/credits`;\n\n // Organization endpoints (non-admin)\n private orgCreditsPath = (organizationId: string) => `organizations/${organizationId}/credits`;\n\n // Global admin endpoints\n private adminCreditsPath = 'admin/credits';\n\n /**\n * Get credit account for own organization (non-admin)\n */\n async getCreditAccount(organizationId: string, options?: RequestOptions): Promise<CreditAccount> {\n return this.client.get<CreditAccount>(this.orgCreditsPath(organizationId), undefined, options);\n }\n\n /**\n * Get credit account for a specific organization (admin only)\n */\n async getAdminCreditAccount(\n organizationId: string,\n options?: RequestOptions,\n ): Promise<CreditAccount> {\n return this.client.get<CreditAccount>(\n this.adminOrgCreditsPath(organizationId),\n undefined,\n options,\n );\n }\n\n /**\n * Get credit transaction history for own organization (non-admin)\n */\n async getCreditTransactions(\n organizationId: string,\n limit?: number,\n options?: RequestOptions,\n ): Promise<CreditTransaction[]> {\n const params = limit ? { limit } : undefined;\n return this.client.get<CreditTransaction[]>(\n `${this.orgCreditsPath(organizationId)}/transactions`,\n params,\n options,\n );\n }\n\n /**\n * Get credit transaction history for a specific organization (admin only)\n */\n async getAdminCreditTransactions(\n organizationId: string,\n limit?: number,\n options?: RequestOptions,\n ): Promise<CreditTransaction[]> {\n const params = limit ? { limit } : undefined;\n return this.client.get<CreditTransaction[]>(\n `${this.adminOrgCreditsPath(organizationId)}/transactions`,\n params,\n options,\n );\n }\n\n /**\n * Adjust credits for a specific organization (admin only)\n */\n async adjustCredits(\n organizationId: string,\n adjustment: CreditAdjustment,\n options?: RequestOptions,\n ): Promise<CreditAdjustmentResponse> {\n return this.client.post<CreditAdjustmentResponse>(\n `${this.adminOrgCreditsPath(organizationId)}/adjust`,\n adjustment,\n options,\n );\n }\n\n /**\n * Get credit usage report for own organization (non-admin)\n */\n async getUsageReport(\n organizationId: string,\n query?: CreditUsageReportQuery,\n options?: RequestOptions,\n ): Promise<CreditUsageReport> {\n return this.client.get<CreditUsageReport>(\n `${this.orgCreditsPath(organizationId)}/usage-report`,\n query,\n options,\n );\n }\n\n /**\n * Get credit usage report for a specific organization (admin only)\n */\n async getAdminUsageReport(\n organizationId: string,\n query?: CreditUsageReportQuery,\n options?: RequestOptions,\n ): Promise<CreditUsageReport> {\n return this.client.get<CreditUsageReport>(\n `${this.adminOrgCreditsPath(organizationId)}/usage-report`,\n query,\n options,\n );\n }\n\n /**\n * Get all organizations with credit accounts (Super Admin only)\n */\n async getAllCreditAccounts(\n limit?: number,\n offset?: number,\n options?: RequestOptions,\n ): Promise<CreditAccountWithOrgName[]> {\n const params = {\n limit: limit || 50,\n offset: offset || 0,\n };\n return this.client.get<CreditAccountWithOrgName[]>(\n `${this.adminCreditsPath}/organizations`,\n params,\n options,\n );\n }\n\n /**\n * Get credit stats for current organization (existing endpoint)\n */\n async getCreditStats(organizationId: string, options?: RequestOptions): Promise<CreditStats> {\n // This is the existing endpoint from bulk messaging controller\n return this.client.get<CreditStats>(\n `whatsapp/bulk-messaging/ai-usage-stats`,\n undefined,\n options,\n );\n }\n\n /**\n * Search credit transactions with filters\n */\n async searchTransactions(\n organizationId: string,\n filters: {\n featureType?: string;\n startDate?: string;\n endDate?: string;\n minAmount?: number;\n maxAmount?: number;\n },\n limit?: number,\n options?: RequestOptions,\n ): Promise<CreditTransaction[]> {\n const params = {\n ...filters,\n limit: limit || 50,\n };\n return this.client.get<CreditTransaction[]>(\n `${this.orgCreditsPath(organizationId)}/transactions/search`,\n params,\n options,\n );\n }\n\n /**\n * Get credit summary for multiple organizations\n */\n async getOrganizationsCreditSummary(\n organizationIds: string[],\n options?: RequestOptions,\n ): Promise<\n Array<{\n organizationId: string;\n balance: number;\n monthlyAllowance: number;\n usedThisMonth: number;\n }>\n > {\n return this.client.post<\n Array<{\n organizationId: string;\n balance: number;\n monthlyAllowance: number;\n usedThisMonth: number;\n }>\n >(`${this.adminCreditsPath}/summary`, { organizationIds }, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n PricingPackage,\n CreatePricingPackageDto,\n UpdatePricingPackageDto,\n SearchPricingPackagesParams,\n} from '../models/pricing-packages';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class PricingPackagesResource extends BaseResource {\n private basePath = 'pricing-packages';\n\n // CREATE - POST /pricing-packages/plans/:planId/packages\n async createPricingPackage(\n planId: string,\n data: CreatePricingPackageDto,\n options?: RequestOptions,\n ): Promise<PricingPackage> {\n return this.client.post<PricingPackage>(\n `${this.basePath}/plans/${planId}/packages`,\n data,\n options,\n );\n }\n\n // GET ONE - GET /pricing-packages/:id\n async getPricingPackage(id: string, options?: RequestOptions): Promise<PricingPackage> {\n return this.client.get<PricingPackage>(`${this.basePath}/${id}`, undefined, options);\n }\n\n // UPDATE - PUT /pricing-packages/:id\n async updatePricingPackage(\n id: string,\n data: UpdatePricingPackageDto,\n options?: RequestOptions,\n ): Promise<PricingPackage> {\n return this.client.put<PricingPackage>(`${this.basePath}/${id}`, data, options);\n }\n\n // SEARCH - GET /pricing-packages\n async searchPricingPackages(\n params?: SearchPricingPackagesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<PricingPackage>> {\n return this.paginate<PricingPackage>(\n this.basePath,\n {\n page: params?.page || 1,\n limit: params?.limit || 20,\n ...params,\n },\n options,\n );\n }\n\n // GET BY PLAN - GET /pricing-packages/plans/:planId/packages\n async getPricingPackagesByPlan(\n planId: string,\n options?: RequestOptions,\n ): Promise<PricingPackage[]> {\n return this.client.get<PricingPackage[]>(\n `${this.basePath}/plans/${planId}/packages`,\n undefined,\n options,\n );\n }\n\n // DELETE - DELETE /pricing-packages/:id\n async deletePricingPackage(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n}\n","import { BaseResource } from './base';\nimport {\n PromoCode,\n CreatePromoCodeDto,\n UpdatePromoCodeDto,\n SearchPromoCodesParams,\n ValidatePromoCodeDto,\n ValidatePromoCodeResponseDto,\n PromoCodeAnalytics,\n} from '../models/promo-codes';\nimport { RequestOptions, PaginatedResponseDto } from '../types';\n\nexport class PromoCodesResource extends BaseResource {\n private basePath = 'promo-codes';\n\n // CREATE - POST /promo-codes\n async createPromoCode(data: CreatePromoCodeDto, options?: RequestOptions): Promise<PromoCode> {\n return this.client.post<PromoCode>(this.basePath, data, options);\n }\n\n // VALIDATE - POST /promo-codes/validate\n async validatePromoCode(\n data: ValidatePromoCodeDto,\n options?: RequestOptions,\n ): Promise<ValidatePromoCodeResponseDto> {\n return this.client.post<ValidatePromoCodeResponseDto>(\n `${this.basePath}/validate`,\n data,\n options,\n );\n }\n\n // SEARCH - GET /promo-codes\n async searchPromoCodes(\n params?: SearchPromoCodesParams,\n options?: RequestOptions,\n ): Promise<PaginatedResponseDto<PromoCode>> {\n return this.paginate<PromoCode>(\n this.basePath,\n {\n page: params?.page || 1,\n limit: params?.limit || 20,\n ...params,\n },\n options,\n );\n }\n\n // GET ANALYTICS - GET /promo-codes/analytics/:id\n async getPromoCodeAnalytics(id: string, options?: RequestOptions): Promise<PromoCodeAnalytics> {\n return this.client.get<PromoCodeAnalytics>(\n `${this.basePath}/analytics/${id}`,\n undefined,\n options,\n );\n }\n\n // GET ONE - GET /promo-codes/:id\n async getPromoCode(id: string, options?: RequestOptions): Promise<PromoCode> {\n return this.client.get<PromoCode>(`${this.basePath}/${id}`, undefined, options);\n }\n\n // UPDATE - PUT /promo-codes/:id\n async updatePromoCode(\n id: string,\n data: UpdatePromoCodeDto,\n options?: RequestOptions,\n ): Promise<PromoCode> {\n return this.client.put<PromoCode>(`${this.basePath}/${id}`, data, options);\n }\n\n // DELETE - DELETE /promo-codes/:id\n async deletePromoCode(id: string, options?: RequestOptions): Promise<void> {\n return this.client.delete<void>(`${this.basePath}/${id}`, options);\n }\n}\n","import {\n CheckInDto,\n CheckInResponse,\n CreateMemberInviteDto,\n MemberInviteResponse,\n MemberInviteValidationResponse,\n QrTokenResponse,\n} from '../models/members';\nimport { RequestOptions } from '../types';\nimport { BaseResource } from './base';\n\nexport class MembersResource extends BaseResource {\n /**\n * Create and send member invite\n * POST /admin/members/clients/:id/invites\n */\n async createInvite(\n clientId: string,\n data: CreateMemberInviteDto,\n options?: RequestOptions,\n ): Promise<MemberInviteResponse> {\n return this.client.post<MemberInviteResponse>(\n `admin/members/clients/${clientId}/invites`,\n data,\n options,\n );\n }\n\n /**\n * Validate member invite token\n * GET /members/invites/validate/:token\n */\n async validateInvite(\n token: string,\n options?: RequestOptions,\n ): Promise<MemberInviteValidationResponse> {\n return this.client.get<MemberInviteValidationResponse>(\n `members/invites/validate/${token}`,\n undefined,\n options,\n );\n }\n\n /**\n * Generate QR token for member check-ins\n * GET /admin/members/check-in-qr\n */\n async generateQrToken(options?: RequestOptions): Promise<QrTokenResponse> {\n return this.client.get<QrTokenResponse>('admin/members/check-in-qr', undefined, options);\n }\n\n /**\n * Self check-in with QR token\n * POST /members/checkins\n */\n async checkIn(data: CheckInDto, options?: RequestOptions): Promise<CheckInResponse> {\n return this.client.post<CheckInResponse>('members/checkins', data, options);\n }\n}\n","import { BaseResource } from './base';\n\n// Receivable Installment Types\nexport interface ReceivableInstallmentDto {\n id: string;\n contractId: string;\n contractNumber: string;\n clientId: string;\n clientName: string;\n clientDocument?: string;\n gymId: string;\n gymName: string;\n amount: number;\n paidAmount: number;\n remainingAmount: number;\n dueDate: string;\n status: 'pending' | 'partially_paid' | 'overdue';\n planName: string;\n contractStartDate: string;\n contractEndDate: string;\n}\n\nexport interface ReceivableInstallmentsResponseDto {\n data: ReceivableInstallmentDto[];\n meta: ReceivablesMetaDto;\n summary: ReceivablesSummaryDto;\n}\n\n// Receivable Sale Types\nexport interface ReceivableSaleDto {\n id: string;\n saleNumber: string;\n clientId: string;\n clientName: string;\n clientDocument?: string;\n gymId: string;\n gymName: string;\n total: number;\n paidAmount: number;\n remainingAmount: number;\n saleDate: string;\n paymentStatus: 'unpaid' | 'partially_paid';\n products: string[];\n}\n\nexport interface ReceivableSalesResponseDto {\n data: ReceivableSaleDto[];\n meta: ReceivablesMetaDto;\n summary: ReceivablesSummaryDto;\n}\n\n// Common Types\nexport interface ReceivablesMetaDto {\n total: number;\n page: number;\n limit: number;\n totalPages: number;\n hasNext: boolean;\n hasPrevious: boolean;\n}\n\nexport interface ReceivablesSummaryDto {\n totalAmount: number;\n totalPending: number;\n}\n\n// Query Parameters\nexport interface ReceivableInstallmentsQueryParams {\n scope?: 'gym' | 'organization';\n startDate?: string;\n endDate?: string;\n page?: number;\n limit?: number;\n status?: 'pending' | 'partially_paid' | 'overdue' | 'all_unpaid';\n sortBy?: 'dueDate' | 'amount' | 'clientName';\n sortOrder?: 'asc' | 'desc';\n}\n\nexport interface ReceivableSalesQueryParams {\n scope?: 'gym' | 'organization';\n startDate?: string;\n endDate?: string;\n page?: number;\n limit?: number;\n sortBy?: 'saleDate' | 'amount' | 'clientName';\n sortOrder?: 'asc' | 'desc';\n}\n\nexport class ReceivablesResource extends BaseResource {\n /**\n * Get paginated list of pending contract installments with filtering, sorting, and organization scope support.\n * @param params Optional query parameters for filtering, pagination, and sorting\n * @returns Paginated list of installment receivables with summary\n */\n async getInstallmentReceivables(\n params?: ReceivableInstallmentsQueryParams,\n ): Promise<ReceivableInstallmentsResponseDto> {\n return this.client.get<ReceivableInstallmentsResponseDto>('/receivables/installments', params);\n }\n\n /**\n * Get paginated list of unpaid sales with filtering, sorting, and organization scope support.\n * @param params Optional query parameters for filtering, pagination, and sorting\n * @returns Paginated list of sale receivables with summary\n */\n async getSaleReceivables(\n params?: ReceivableSalesQueryParams,\n ): Promise<ReceivableSalesResponseDto> {\n return this.client.get<ReceivableSalesResponseDto>('/receivables/sales', params);\n }\n}\n","import { ApiClient } from './client';\nimport { GymSpaceConfig } from './types';\nimport { createAgentFetch } from './utils/agent-fetch';\nimport {\n AuthResource,\n OrganizationsResource,\n GymsResource,\n CollaboratorsResource,\n RolesResource,\n ClientsResource,\n MembershipPlansResource,\n ContractsResource,\n DashboardResource,\n CheckInsResource,\n InvitationsResource,\n AssetsResource,\n FilesResource,\n PublicCatalogResource,\n AdminCatalogResource,\n HealthResource,\n OnboardingResource,\n ProductsResource,\n SalesResource,\n SuppliersResource,\n UsersResource,\n SubscriptionsResource,\n SubscriptionPlansResource,\n AdminSubscriptionManagementResource,\n PaymentMethodsResource,\n WhatsAppResource,\n WhatsAppTemplatesResource,\n BulkMessagingResource,\n ActivitiesResource,\n TagsResource,\n CommissionConfigResource,\n CommissionRulesResource,\n CommissionCalculationsResource,\n CommissionReportsResource,\n CommissionPromotionsResource,\n MessagesResource,\n CreditsResource,\n PricingPackagesResource,\n PromoCodesResource,\n MembersResource,\n ReceivablesResource,\n} from './resources';\n\nexport class GymSpaceSdk {\n public client: ApiClient;\n private expoFetch?: typeof globalThis.fetch;\n\n // Resources\n public auth: AuthResource;\n public organizations: OrganizationsResource;\n public gyms: GymsResource;\n public collaborators: CollaboratorsResource;\n public roles: RolesResource;\n public clients: ClientsResource;\n public membershipPlans: MembershipPlansResource;\n public contracts: ContractsResource;\n public dashboard: DashboardResource;\n public checkIns: CheckInsResource;\n public invitations: InvitationsResource;\n public assets: AssetsResource;\n public files: FilesResource;\n public publicCatalog: PublicCatalogResource;\n public adminCatalog: AdminCatalogResource;\n public health: HealthResource;\n public onboarding: OnboardingResource;\n public products: ProductsResource;\n public sales: SalesResource;\n public suppliers: SuppliersResource;\n public users: UsersResource;\n public subscriptions: SubscriptionsResource;\n public subscriptionPlans: SubscriptionPlansResource;\n public adminSubscriptionManagement: AdminSubscriptionManagementResource;\n public paymentMethods: PaymentMethodsResource;\n public whatsapp: WhatsAppResource;\n public whatsappTemplates: WhatsAppTemplatesResource;\n public bulkMessaging: BulkMessagingResource;\n public activities: ActivitiesResource;\n public tags: TagsResource;\n public commissionConfig: CommissionConfigResource;\n public commissionRules: CommissionRulesResource;\n public commissionCalculations: CommissionCalculationsResource;\n public commissionReports: CommissionReportsResource;\n public commissionPromotions: CommissionPromotionsResource;\n public messages: MessagesResource;\n public credits: CreditsResource;\n public pricingPackages: PricingPackagesResource;\n public promoCodes: PromoCodesResource;\n public members: MembersResource;\n public receivables: ReceivablesResource;\n\n constructor(config: GymSpaceConfig) {\n this.client = new ApiClient(config);\n\n // Initialize resources\n this.auth = new AuthResource(this.client);\n this.organizations = new OrganizationsResource(this.client);\n this.gyms = new GymsResource(this.client);\n this.collaborators = new CollaboratorsResource(this.client);\n this.roles = new RolesResource(this.client);\n this.clients = new ClientsResource(this.client);\n this.membershipPlans = new MembershipPlansResource(this.client);\n this.contracts = new ContractsResource(this.client);\n this.dashboard = new DashboardResource(this.client);\n this.checkIns = new CheckInsResource(this.client);\n this.invitations = new InvitationsResource(this.client);\n this.assets = new AssetsResource(this.client);\n this.files = new FilesResource(this.client);\n this.publicCatalog = new PublicCatalogResource(this.client);\n this.adminCatalog = new AdminCatalogResource(this.client);\n this.health = new HealthResource(this.client);\n this.onboarding = new OnboardingResource(this.client);\n this.products = new ProductsResource(this.client);\n this.sales = new SalesResource(this.client);\n this.suppliers = new SuppliersResource(this.client);\n this.users = new UsersResource(this.client);\n this.subscriptions = new SubscriptionsResource(this.client);\n this.subscriptionPlans = new SubscriptionPlansResource(this.client);\n this.adminSubscriptionManagement = new AdminSubscriptionManagementResource(this.client);\n this.paymentMethods = new PaymentMethodsResource(this.client);\n this.whatsapp = new WhatsAppResource(this.client);\n this.whatsappTemplates = new WhatsAppTemplatesResource(this.client);\n this.bulkMessaging = new BulkMessagingResource(this.client);\n this.activities = new ActivitiesResource(this.client);\n this.tags = new TagsResource(this.client);\n this.commissionConfig = new CommissionConfigResource(this.client);\n this.commissionRules = new CommissionRulesResource(this.client);\n this.commissionCalculations = new CommissionCalculationsResource(this.client);\n this.commissionReports = new CommissionReportsResource(this.client);\n this.commissionPromotions = new CommissionPromotionsResource(this.client);\n this.messages = new MessagesResource(this.client);\n this.credits = new CreditsResource(this.client);\n this.pricingPackages = new PricingPackagesResource(this.client);\n this.promoCodes = new PromoCodesResource(this.client);\n this.members = new MembersResource(this.client);\n this.receivables = new ReceivablesResource(this.client);\n }\n\n /**\n * Set the authentication token\n */\n setAuthToken(token: string): void {\n this.client.setAuthToken(token);\n }\n\n /**\n * Set the refresh token\n */\n setRefreshToken(token: string | null): void {\n this.client.setRefreshToken(token);\n }\n\n /**\n * Get the current refresh token\n */\n getRefreshToken(): string | null {\n return this.client.getRefreshToken();\n }\n\n /**\n * Set the current gym context\n */\n setGymId(gymId: string): void {\n this.client.setGymId(gymId);\n }\n\n /**\n * Clear authentication\n */\n clearAuth(): void {\n this.client.clearAuth();\n }\n\n /**\n * Set Expo fetch for React Native environments\n * Should be called once during app initialization\n */\n setExpoFetch(fetchFn: typeof globalThis.fetch): void {\n this.expoFetch = fetchFn;\n }\n\n /**\n * Create a fetch function for agent endpoints\n * Uses the /agent/* proxy that includes request context\n * Automatically uses Expo fetch if set\n */\n createAgentFetch() {\n return createAgentFetch(this.client, this.expoFetch);\n }\n\n /**\n * Set callback for when tokens are refreshed by backend\n */\n setOnTokenRefreshed(callback: (accessToken: string, refreshToken?: string) => void): void {\n this.client.setOnTokenRefreshed(callback);\n }\n\n /**\n * Get the underlying API client\n */\n getClient(): ApiClient {\n return this.client;\n }\n\n /**\n * Create a scoped SDK instance that sends X-Gym-Id and X-Gym-Context-Mode: scoped\n * for all requests WITHOUT modifying the global gym context.\n *\n * Usage:\n * const scopedSdk = sdk.withGymId('gym-123');\n * const sales = await scopedSdk.sales.searchSales({ ... });\n */\n withGymId(gymId: string): GymSpaceSdk {\n const config = this.client.getConfigForScoped();\n const defaults = this.client.getAxiosDefaults();\n\n const scopedSdk = new GymSpaceSdk({\n baseURL: config.baseURL,\n apiKey: config.apiKey,\n refreshToken: config.refreshToken,\n });\n\n // Transfer custom headers from original config\n if (defaults && typeof defaults === 'object') {\n const headers: Record<string, string> = {};\n Object.entries(defaults).forEach(([key, value]) => {\n if (typeof value === 'string') {\n headers[key] = value;\n }\n });\n scopedSdk.client.setCommonHeaders(headers);\n }\n\n // Override request method to inject scoped gym context\n const originalRequest = scopedSdk.client.request.bind(scopedSdk.client);\n scopedSdk.client.request = (method, path, data, options) => {\n return originalRequest(method, path, data, {\n ...options,\n gymId,\n gymContextMode: 'scoped',\n });\n };\n\n return scopedSdk;\n }\n}\n","/**\n * Template codes for WhatsApp messages\n */\nexport const TemplateCode = {\n WELCOME: 'WELCOME',\n MEMBERSHIP_PURCHASE: 'MEMBERSHIP_PURCHASE',\n MEMBERSHIP_RENEWAL: 'MEMBERSHIP_RENEWAL',\n MEMBERSHIP_EXPIRING: 'MEMBERSHIP_EXPIRING',\n PAYMENT_REMINDER: 'PAYMENT_REMINDER',\n BIRTHDAY: 'BIRTHDAY',\n PAYMENT_RECEIPT: 'PAYMENT_RECEIPT',\n SHARE_CATALOG: 'SHARE_CATALOG',\n SALE_PAYMENT_REMINDER: 'SALE_PAYMENT_REMINDER',\n MEMBER_INVITE: 'MEMBER_INVITE',\n CONTRACT_INSTALLMENT_REMINDER: 'CONTRACT_INSTALLMENT_REMINDER',\n} as const;\n\nexport type TemplateCodeValue = (typeof TemplateCode)[keyof typeof TemplateCode];\nexport type TemplateCode = TemplateCodeValue;\n\n/**\n * Template types\n */\nexport const TemplateType = {\n STATIC: 'STATIC',\n PROMPT: 'PROMPT',\n} as const;\n\nexport type TemplateTypeValue = (typeof TemplateType)[keyof typeof TemplateType];\nexport type TemplateType = TemplateTypeValue;\n\n/**\n * Base interface for WhatsApp template data\n */\nexport interface WhatsAppTemplateData {\n gymId: string;\n clientId: string;\n phoneNumber: string;\n templateCode: TemplateCode;\n variables: Record<string, unknown>;\n metadata?: {\n contractId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Welcome message template data\n */\nexport interface WelcomeTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.WELCOME;\n variables: {\n clientName: string;\n gymName: string;\n registrationDate: string;\n };\n}\n\n/**\n * Membership purchase template data\n */\nexport interface MembershipPurchaseTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_PURCHASE;\n variables: {\n clientName: string;\n planName: string;\n startDate: string;\n endDate: string;\n amount: string;\n paymentFrequency: string;\n };\n}\n\n/**\n * Membership renewal template data\n */\nexport interface MembershipRenewalTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_RENEWAL;\n variables: {\n clientName: string;\n planName: string;\n newEndDate: string;\n amount: string;\n };\n}\n\n/**\n * Membership expiring template data\n */\nexport interface MembershipExpiringTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.MEMBERSHIP_EXPIRING;\n variables: {\n clientName: string;\n planName: string;\n expirationDate: string;\n daysRemaining: string;\n };\n}\n\n/**\n * Payment reminder template data\n */\nexport interface PaymentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_REMINDER;\n variables: {\n clientName: string;\n amount: string;\n dueDate: string;\n planName: string;\n };\n}\n\n/**\n * Birthday template data\n */\nexport interface BirthdayTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.BIRTHDAY;\n variables: {\n clientName: string;\n gymName: string;\n age: string;\n };\n}\n\n/**\n * Payment receipt template data\n */\nexport interface PaymentReceiptTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.PAYMENT_RECEIPT;\n variables: {\n gymName: string;\n receiptNumber: string;\n date: string;\n clientName: string;\n items: string;\n amount: string;\n paymentMethod: string;\n };\n metadata?: {\n saleId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Share catalog template data\n */\nexport interface ShareCatalogTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.SHARE_CATALOG;\n variables: {\n clientName: string;\n gymName: string;\n urlCatalog: string;\n };\n}\n\n/**\n * Sale payment reminder template data\n */\nexport interface SalePaymentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.SALE_PAYMENT_REMINDER;\n variables: {\n clientName: string;\n saleNumber: string;\n total: string;\n saleDate: string;\n daysOverdue?: string;\n items?: string;\n };\n metadata?: {\n saleId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Contract installment reminder template data\n */\nexport interface ContractInstallmentReminderTemplateData\n extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables'> {\n templateCode: typeof TemplateCode.CONTRACT_INSTALLMENT_REMINDER;\n variables: {\n clientName: string;\n planName: string;\n contractNumber: string;\n installmentNumber: string;\n dueDate: string;\n amount: string;\n outstandingAmount?: string;\n };\n metadata?: {\n contractId?: string;\n installmentId?: string;\n userId?: string;\n source?: string;\n instanceName?: string;\n };\n}\n\n/**\n * Union type for all template data types\n */\nexport type WhatsAppTemplateEventData =\n | WelcomeTemplateData\n | MembershipPurchaseTemplateData\n | MembershipRenewalTemplateData\n | MembershipExpiringTemplateData\n | PaymentReminderTemplateData\n | BirthdayTemplateData\n | PaymentReceiptTemplateData\n | ShareCatalogTemplateData\n | SalePaymentReminderTemplateData\n | ContractInstallmentReminderTemplateData\n | MemberInviteTemplateData;\n\n/**\n * Template metadata interface\n */\nexport interface TemplateMetadata {\n code: TemplateCode;\n title: string;\n description: string;\n icon: string;\n variables: string[];\n exampleValues: Record<string, string>;\n}\n\n/**\n * Member invite template data\n */\nexport interface MemberInviteTemplateData extends Omit<WhatsAppTemplateData, 'templateCode' | 'variables' | 'metadata'> {\n templateCode: typeof TemplateCode.MEMBER_INVITE;\n variables: {\n clientName: string;\n gymName: string;\n inviteCode: string;\n inviteUrl?: string;\n expiryDate?: string;\n };\n metadata?: {\n gymClientId: string;\n inviteId: string;\n };\n}\n","import { TemplateCode } from '../types/whatsapp-templates.types';\n\n/**\n * Template code constants\n */\nexport const TEMPLATE_CODES = {\n WELCOME: TemplateCode.WELCOME,\n MEMBERSHIP_PURCHASE: TemplateCode.MEMBERSHIP_PURCHASE,\n MEMBERSHIP_RENEWAL: TemplateCode.MEMBERSHIP_RENEWAL,\n MEMBERSHIP_EXPIRING: TemplateCode.MEMBERSHIP_EXPIRING,\n PAYMENT_REMINDER: TemplateCode.PAYMENT_REMINDER,\n BIRTHDAY: TemplateCode.BIRTHDAY,\n PAYMENT_RECEIPT: TemplateCode.PAYMENT_RECEIPT,\n SHARE_CATALOG: TemplateCode.SHARE_CATALOG,\n SALE_PAYMENT_REMINDER: TemplateCode.SALE_PAYMENT_REMINDER,\n MEMBER_INVITE: TemplateCode.MEMBER_INVITE,\n CONTRACT_INSTALLMENT_REMINDER: TemplateCode.CONTRACT_INSTALLMENT_REMINDER,\n} as const;\n\n/**\n * Event names for WhatsApp template events\n */\nexport const WHATSAPP_TEMPLATE_EVENTS = {\n SEND_TEMPLATE: 'whatsapp/template.send',\n TEMPLATE_SENT: 'whatsapp/template.sent',\n TEMPLATE_FAILED: 'whatsapp/template.failed',\n} as const;\n\n/**\n * Template metadata mapping\n */\nexport const TEMPLATE_METADATA = {\n [TemplateCode.WELCOME]: {\n code: TemplateCode.WELCOME,\n title: 'Mensaje de Bienvenida',\n description: 'Mensaje para nuevos clientes',\n icon: 'UserPlus',\n variables: ['clientName', 'gymName', 'registrationDate'],\n exampleValues: {\n clientName: 'Juan Pérez',\n gymName: 'GymSpace',\n registrationDate: '15/01/2024',\n },\n },\n [TemplateCode.MEMBERSHIP_PURCHASE]: {\n code: TemplateCode.MEMBERSHIP_PURCHASE,\n title: 'Compra de Membresía',\n description: 'Confirmación de nueva membresía',\n icon: 'ShoppingCart',\n variables: ['clientName', 'planName', 'startDate', 'endDate', 'amount', 'paymentFrequency'],\n exampleValues: {\n clientName: 'María López',\n planName: 'Premium',\n startDate: '01/02/2024',\n endDate: '01/03/2024',\n amount: '$50.00',\n paymentFrequency: 'mensual',\n },\n },\n [TemplateCode.MEMBERSHIP_RENEWAL]: {\n code: TemplateCode.MEMBERSHIP_RENEWAL,\n title: 'Renovación de Membresía',\n description: 'Confirmación de renovación',\n icon: 'RefreshCw',\n variables: ['clientName', 'planName', 'newEndDate', 'amount'],\n exampleValues: {\n clientName: 'Carlos Ruiz',\n planName: 'Básico',\n newEndDate: '15/04/2024',\n amount: '$30.00',\n },\n },\n [TemplateCode.MEMBERSHIP_EXPIRING]: {\n code: TemplateCode.MEMBERSHIP_EXPIRING,\n title: 'Membresía Por Vencer',\n description: 'Recordatorio de expiración próxima',\n icon: 'AlertCircle',\n variables: ['clientName', 'planName', 'expirationDate', 'daysRemaining'],\n exampleValues: {\n clientName: 'Ana García',\n planName: 'Premium',\n expirationDate: '20/02/2024',\n daysRemaining: '3',\n },\n },\n [TemplateCode.PAYMENT_REMINDER]: {\n code: TemplateCode.PAYMENT_REMINDER,\n title: 'Recordatorio de Pago',\n description: 'Recordatorio de pago pendiente',\n icon: 'DollarSign',\n variables: ['clientName', 'amount', 'dueDate', 'planName'],\n exampleValues: {\n clientName: 'Pedro Sánchez',\n amount: '$40.00',\n dueDate: '25/02/2024',\n planName: 'Estándar',\n },\n },\n [TemplateCode.BIRTHDAY]: {\n code: TemplateCode.BIRTHDAY,\n title: 'Cumpleaños',\n description: 'Felicitación de cumpleaños',\n icon: 'Cake',\n variables: ['clientName', 'gymName', 'age'],\n exampleValues: {\n clientName: 'Laura Martínez',\n gymName: 'GymSpace',\n age: '28',\n },\n },\n [TemplateCode.PAYMENT_RECEIPT]: {\n code: TemplateCode.PAYMENT_RECEIPT,\n title: 'Comprobante de Pago',\n description: 'Comprobante de venta pagada',\n icon: 'Receipt',\n variables: [\n 'gymName',\n 'receiptNumber',\n 'date',\n 'clientName',\n 'items',\n 'amount',\n 'paymentMethod',\n 'saleItems',\n 'currency',\n ],\n exampleValues: {\n gymName: 'GymSpace',\n receiptNumber: 'V-001',\n date: '15/01/2024',\n clientName: 'Juan Pérez',\n items: '• Proteína x2 = Q100.00\\n• Creatina x1 = Q50.00',\n amount: 'Q150.00',\n paymentMethod: 'Efectivo',\n saleItems: [\n { product: { name: 'Proteína' }, quantity: 2, total: '100.00' },\n { product: { name: 'Creatina' }, quantity: 1, total: '50.00' },\n ],\n currency: 'Q',\n },\n },\n [TemplateCode.SHARE_CATALOG]: {\n code: TemplateCode.SHARE_CATALOG,\n title: 'Compartir Catálogo',\n description: 'Mensaje para compartir catálogo de membresías',\n icon: 'Share2',\n variables: ['clientName', 'gymName', 'urlCatalog'],\n exampleValues: {\n clientName: 'Roberto Gómez',\n gymName: 'GymSpace',\n urlCatalog: 'https://gymspace.app/catalog/gym-123',\n },\n },\n [TemplateCode.SALE_PAYMENT_REMINDER]: {\n code: TemplateCode.SALE_PAYMENT_REMINDER,\n title: 'Recordatorio de Pago de Venta',\n description: 'Recordatorio para ventas con pago pendiente',\n icon: 'AlertCircle',\n variables: [\n 'clientName',\n 'saleNumber',\n 'total',\n 'saleDate',\n 'daysOverdue',\n 'items',\n 'saleItems',\n 'currency',\n ],\n exampleValues: {\n clientName: 'Manuel Trainer',\n saleNumber: '#202511130003',\n total: 'S/ 205.00',\n saleDate: '13/11/2025',\n daysOverdue: '3',\n items: '• BCAA x2\\n• Pre-Entreno x1',\n saleItems: [\n { product: { name: 'BCAA' }, quantity: 2 },\n { product: { name: 'Pre-Entreno' }, quantity: 1 },\n ],\n currency: 'S/ ',\n },\n },\n [TemplateCode.MEMBER_INVITE]: {\n code: TemplateCode.MEMBER_INVITE,\n title: 'Invitación Portal de Miembros',\n description: 'Invitación para que el socio se registre en el portal',\n icon: 'UserPlus',\n variables: ['clientName', 'gymName', 'inviteCode', 'inviteUrl', 'expiryDate'],\n exampleValues: {\n clientName: 'Juan Pérez',\n gymName: 'GymSpace',\n inviteCode: '123456',\n inviteUrl: 'https://gymspace.app/members/invite/abc-123',\n expiryDate: '20/02/2024',\n },\n },\n [TemplateCode.CONTRACT_INSTALLMENT_REMINDER]: {\n code: TemplateCode.CONTRACT_INSTALLMENT_REMINDER,\n title: 'Recordatorio de Cuota de Contrato',\n description: 'Recordatorio de pago para cuotas de membresía',\n icon: 'DollarSign',\n variables: [\n 'clientName',\n 'planName',\n 'contractNumber',\n 'installmentNumber',\n 'dueDate',\n 'amount',\n 'outstandingAmount',\n ],\n exampleValues: {\n clientName: 'María López',\n planName: 'Premium',\n contractNumber: '#202512340001',\n installmentNumber: '2',\n dueDate: '25/02/2024',\n amount: 'S/ 150.00',\n outstandingAmount: 'S/ 300.00',\n },\n },\n} as const;\n","export interface BulkMessageVariable {\n name: string;\n placeholder: string;\n description: string;\n example: string;\n category: 'client' | 'gym' | 'membership' | 'activity' | 'datetime';\n required: boolean;\n formatter?: 'text' | 'currency' | 'date' | 'datetime' | 'number';\n}\n\nexport const BULK_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n // Variables de Cliente\n {\n name: 'clientName',\n placeholder: '{{clientName}}',\n description: 'Nombre completo del cliente',\n example: 'Juan Pérez',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientEmail',\n placeholder: '{{clientEmail}}',\n description: 'Email del cliente',\n example: 'juan@example.com',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'clientPhone',\n placeholder: '{{clientPhone}}',\n description: 'Teléfono del cliente',\n example: '+51 999 999 999',\n category: 'client',\n required: false,\n formatter: 'text',\n },\n {\n name: 'registrationDate',\n placeholder: '{{registrationDate}}',\n description: 'Fecha de registro del cliente',\n example: '15/10/2024',\n category: 'client',\n required: false,\n formatter: 'date',\n },\n {\n name: 'birthDate',\n placeholder: '{{birthDate}}',\n description: 'Fecha de nacimiento del cliente',\n example: '15/10/1990',\n category: 'client',\n required: false,\n formatter: 'date',\n },\n {\n name: 'age',\n placeholder: '{{age}}',\n description: 'Edad del cliente',\n example: '34',\n category: 'client',\n required: false,\n formatter: 'number',\n },\n\n // Variables de Gimnasio\n {\n name: 'gymName',\n placeholder: '{{gymName}}',\n description: 'Nombre del gimnasio',\n example: 'Gym Fitness',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymPhone',\n placeholder: '{{gymPhone}}',\n description: 'Teléfono del gimnasio',\n example: '+51 999 888 777',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n {\n name: 'gymAddress',\n placeholder: '{{gymAddress}}',\n description: 'Dirección del gimnasio',\n example: 'Av. Principal 123',\n category: 'gym',\n required: false,\n formatter: 'text',\n },\n\n // Variables de Membresía\n {\n name: 'planName',\n placeholder: '{{planName}}',\n description: 'Nombre del plan de membresía',\n example: 'Plan Premium',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'membershipStatus',\n placeholder: '{{membershipStatus}}',\n description: 'Estado de la membresía',\n example: 'Activa',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'daysUntilExpiration',\n placeholder: '{{daysUntilExpiration}}',\n description: 'Días restantes hasta vencimiento',\n example: '15',\n category: 'membership',\n required: false,\n formatter: 'number',\n },\n {\n name: 'expirationDate',\n placeholder: '{{expirationDate}}',\n description: 'Fecha de vencimiento',\n example: '31/12/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n {\n name: 'amount',\n placeholder: '{{amount}}',\n description: 'Monto con formato de moneda',\n example: 'S/ 150.00',\n category: 'membership',\n required: false,\n formatter: 'currency',\n },\n {\n name: 'startDate',\n placeholder: '{{startDate}}',\n description: 'Fecha de inicio de membresía',\n example: '15/10/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n {\n name: 'endDate',\n placeholder: '{{endDate}}',\n description: 'Fecha de fin de membresía',\n example: '15/11/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n {\n name: 'newEndDate',\n placeholder: '{{newEndDate}}',\n description: 'Nueva fecha de vencimiento por renovación',\n example: '15/12/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n {\n name: 'paymentFrequency',\n placeholder: '{{paymentFrequency}}',\n description: 'Frecuencia de pago',\n example: 'Mensual',\n category: 'membership',\n required: false,\n formatter: 'text',\n },\n {\n name: 'daysRemaining',\n placeholder: '{{daysRemaining}}',\n description: 'Días restantes',\n example: '15',\n category: 'membership',\n required: false,\n formatter: 'number',\n },\n {\n name: 'dueDate',\n placeholder: '{{dueDate}}',\n description: 'Fecha de vencimiento de pago',\n example: '15/10/2024',\n category: 'membership',\n required: false,\n formatter: 'date',\n },\n\n // Variables de Fecha/Hora\n {\n name: 'date',\n placeholder: '{{date}}',\n description: 'Fecha actual',\n example: '15/10/2024',\n category: 'datetime',\n required: false,\n formatter: 'date',\n },\n {\n name: 'time',\n placeholder: '{{time}}',\n description: 'Hora actual',\n example: '14:30',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n {\n name: 'dayOfWeek',\n placeholder: '{{dayOfWeek}}',\n description: 'Día de la semana',\n example: 'Lunes',\n category: 'datetime',\n required: false,\n formatter: 'text',\n },\n];\n\n// Variables de Actividades\nexport const ACTIVITY_MESSAGE_VARIABLES: BulkMessageVariable[] = [\n {\n name: 'activityName',\n placeholder: '{{activityName}}',\n description: 'Nombre de la actividad',\n example: 'Yoga Matutino',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityDescription',\n placeholder: '{{activityDescription}}',\n description: 'Descripción de la actividad',\n example: 'Sesión de yoga para principiantes',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDate',\n placeholder: '{{activityStartDate}}',\n description: 'Fecha de inicio de la actividad',\n example: '15/10/2024',\n category: 'activity',\n required: false,\n formatter: 'date',\n },\n {\n name: 'activityStartTime',\n placeholder: '{{activityStartTime}}',\n description: 'Hora de inicio de la actividad',\n example: '08:00',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'activityStartDateTime',\n placeholder: '{{activityStartDateTime}}',\n description: 'Fecha y hora de inicio de la actividad',\n example: '15/10/2024 08:00',\n category: 'activity',\n required: false,\n formatter: 'datetime',\n },\n {\n name: 'activityDuration',\n placeholder: '{{activityDuration}}',\n description: 'Duración de la actividad en minutos',\n example: '60',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityMaxParticipants',\n placeholder: '{{activityMaxParticipants}}',\n description: 'Número máximo de participantes',\n example: '20',\n category: 'activity',\n required: false,\n formatter: 'number',\n },\n {\n name: 'activityLocation',\n placeholder: '{{activityLocation}}',\n description: 'Ubicación de la actividad',\n example: 'Av. Principal 123',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n {\n name: 'timeUntilActivity',\n placeholder: '{{timeUntilActivity}}',\n description: 'Tiempo restante hasta la actividad',\n example: '2 horas',\n category: 'activity',\n required: false,\n formatter: 'text',\n },\n];\n\n// Tipo de contexto de variables\nexport type VariableContextType = 'bulk' | 'activity' | 'event' | 'reminder';\n\n// Mapeo de contextos a variables disponibles\nexport const VARIABLE_CONTEXT_MAP: Record<VariableContextType, BulkMessageVariable[]> = {\n bulk: BULK_MESSAGE_VARIABLES,\n activity: [...BULK_MESSAGE_VARIABLES, ...ACTIVITY_MESSAGE_VARIABLES],\n event: BULK_MESSAGE_VARIABLES, // Para futuros eventos\n reminder: BULK_MESSAGE_VARIABLES, // Para futuros recordatorios\n};\n\n// Helper para obtener variables por contexto\nexport function getVariablesByContext(context: VariableContextType): BulkMessageVariable[] {\n return VARIABLE_CONTEXT_MAP[context] || BULK_MESSAGE_VARIABLES;\n}\n\n// Helper para validar variables en un contexto\n// Soporta tanto {{variable}} como {variable}\nexport function validateVariablesInContext(\n message: string,\n context: VariableContextType,\n): { valid: boolean; invalidVariables: string[] } {\n // Soportar tanto {{variable}} como {variable}\n const doubleBracePattern = /\\{\\{(\\w+)\\}\\}/g;\n const singleBracePattern = /\\{(\\w+)\\}/g;\n\n const doubleBraceMatches = message.matchAll(doubleBracePattern);\n const singleBraceMatches = message.matchAll(singleBracePattern);\n\n const invalidVariables: string[] = [];\n const validVariables = getVariablesByContext(context).map((v) => v.name);\n\n // Validar variables con doble llave\n for (const match of doubleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n // Validar variables con una sola llave\n for (const match of singleBraceMatches) {\n const variableName = match[1];\n if (!validVariables.includes(variableName) && !invalidVariables.includes(variableName)) {\n invalidVariables.push(variableName);\n }\n }\n\n return {\n valid: invalidVariables.length === 0,\n invalidVariables,\n };\n}\n\nexport const BULK_MESSAGE_VARIABLE_CATEGORIES = {\n client: 'Cliente',\n gym: 'Gimnasio',\n membership: 'Membresía',\n activity: 'Actividad',\n datetime: 'Fecha/Hora',\n} as const;\n","// Permission constants\nexport const PERMISSIONS = {\n // Organizations\n ORGANIZATIONS_CREATE: 'ORGANIZATIONS_CREATE',\n ORGANIZATIONS_READ: 'ORGANIZATIONS_READ',\n ORGANIZATIONS_UPDATE: 'ORGANIZATIONS_UPDATE',\n ORGANIZATIONS_DELETE: 'ORGANIZATIONS_DELETE',\n\n // Gyms\n GYMS_CREATE: 'GYMS_CREATE',\n GYMS_READ: 'GYMS_READ',\n GYMS_UPDATE: 'GYMS_UPDATE',\n GYMS_DELETE: 'GYMS_DELETE',\n\n // Collaborators\n COLLABORATORS_CREATE: 'COLLABORATORS_CREATE',\n COLLABORATORS_READ: 'COLLABORATORS_READ',\n COLLABORATORS_UPDATE: 'COLLABORATORS_UPDATE',\n COLLABORATORS_DELETE: 'COLLABORATORS_DELETE',\n\n // Clients\n CLIENTS_CREATE: 'CLIENTS_CREATE',\n CLIENTS_READ: 'CLIENTS_READ',\n CLIENTS_UPDATE: 'CLIENTS_UPDATE',\n CLIENTS_DELETE: 'CLIENTS_DELETE',\n\n // Contracts\n CONTRACTS_CREATE: 'CONTRACTS_CREATE',\n CONTRACTS_READ: 'CONTRACTS_READ',\n CONTRACTS_UPDATE: 'CONTRACTS_UPDATE',\n CONTRACTS_DELETE: 'CONTRACTS_DELETE',\n CONTRACTS_APPROVE: 'CONTRACTS_APPROVE',\n CONTRACTS_CANCEL: 'CONTRACTS_CANCEL',\n\n // Membership Plans\n MEMBERSHIP_PLANS_CREATE: 'MEMBERSHIP_PLANS_CREATE',\n MEMBERSHIP_PLANS_READ: 'MEMBERSHIP_PLANS_READ',\n MEMBERSHIP_PLANS_UPDATE: 'MEMBERSHIP_PLANS_UPDATE',\n MEMBERSHIP_PLANS_DELETE: 'MEMBERSHIP_PLANS_DELETE',\n\n // Check-ins\n CHECKINS_CREATE: 'CHECKINS_CREATE',\n CHECKINS_READ: 'CHECKINS_READ',\n\n // Reports\n REPORTS_VIEW: 'REPORTS_VIEW',\n REPORTS_FINANCIAL: 'REPORTS_FINANCIAL',\n\n // Settings\n SETTINGS_UPDATE: 'SETTINGS_UPDATE',\n\n // Assets\n ASSETS_CREATE: 'ASSETS_CREATE',\n ASSETS_READ: 'ASSETS_READ',\n ASSETS_DELETE: 'ASSETS_DELETE',\n\n // Files\n FILES_CREATE: 'FILES_CREATE',\n FILES_READ: 'FILES_READ',\n FILES_DELETE: 'FILES_DELETE',\n\n // Products\n PRODUCTS_CREATE: 'PRODUCTS_CREATE',\n PRODUCTS_READ: 'PRODUCTS_READ',\n PRODUCTS_UPDATE: 'PRODUCTS_UPDATE',\n PRODUCTS_DELETE: 'PRODUCTS_DELETE',\n\n // Product Categories\n PRODUCT_CATEGORIES_CREATE: 'PRODUCT_CATEGORIES_CREATE',\n PRODUCT_CATEGORIES_READ: 'PRODUCT_CATEGORIES_READ',\n PRODUCT_CATEGORIES_UPDATE: 'PRODUCT_CATEGORIES_UPDATE',\n PRODUCT_CATEGORIES_DELETE: 'PRODUCT_CATEGORIES_DELETE',\n\n // Sales\n SALES_CREATE: 'SALES_CREATE',\n SALES_READ: 'SALES_READ',\n SALES_UPDATE: 'SALES_UPDATE',\n SALES_DELETE: 'SALES_DELETE',\n\n // Suppliers\n SUPPLIERS_CREATE: 'SUPPLIERS_CREATE',\n SUPPLIERS_READ: 'SUPPLIERS_READ',\n SUPPLIERS_UPDATE: 'SUPPLIERS_UPDATE',\n SUPPLIERS_DELETE: 'SUPPLIERS_DELETE',\n\n // Payment Methods\n PAYMENT_METHODS_CREATE: 'PAYMENT_METHODS_CREATE',\n PAYMENT_METHODS_READ: 'PAYMENT_METHODS_READ',\n PAYMENT_METHODS_UPDATE: 'PAYMENT_METHODS_UPDATE',\n PAYMENT_METHODS_DELETE: 'PAYMENT_METHODS_DELETE',\n\n // WhatsApp\n WHATSAPP_READ: 'WHATSAPP_READ',\n WHATSAPP_SEND: 'WHATSAPP_SEND',\n WHATSAPP_MANAGE: 'WHATSAPP_MANAGE',\n WHATSAPP_BULK_SEND: 'WHATSAPP_BULK_SEND',\n WHATSAPP_BULK_MANAGE: 'WHATSAPP_BULK_MANAGE',\n\n // Messages\n MESSAGES_READ: 'MESSAGES_READ',\n MESSAGES_CREATE: 'MESSAGES_CREATE',\n MESSAGES_RETRY: 'MESSAGES_RETRY',\n MESSAGES_CANCEL: 'MESSAGES_CANCEL',\n\n // Activities\n ACTIVITIES_CREATE: 'ACTIVITIES_CREATE',\n ACTIVITIES_READ: 'ACTIVITIES_READ',\n ACTIVITIES_UPDATE: 'ACTIVITIES_UPDATE',\n ACTIVITIES_DELETE: 'ACTIVITIES_DELETE',\n ACTIVITIES_MANAGE_NOTIFICATIONS: 'ACTIVITIES_MANAGE_NOTIFICATIONS',\n\n // Tags\n TAGS_CREATE: 'TAGS_CREATE',\n TAGS_READ: 'TAGS_READ',\n TAGS_UPDATE: 'TAGS_UPDATE',\n TAGS_DELETE: 'TAGS_DELETE',\n\n // Commissions\n COMMISSIONS_CONFIG_CREATE: 'COMMISSIONS_CONFIG_CREATE',\n COMMISSIONS_CONFIG_READ: 'COMMISSIONS_CONFIG_READ',\n COMMISSIONS_CONFIG_UPDATE: 'COMMISSIONS_CONFIG_UPDATE',\n COMMISSIONS_RULES_CREATE: 'COMMISSIONS_RULES_CREATE',\n COMMISSIONS_RULES_READ: 'COMMISSIONS_RULES_READ',\n COMMISSIONS_RULES_UPDATE: 'COMMISSIONS_RULES_UPDATE',\n COMMISSIONS_RULES_DELETE: 'COMMISSIONS_RULES_DELETE',\n COMMISSIONS_CALCULATIONS_READ: 'COMMISSIONS_CALCULATIONS_READ',\n COMMISSIONS_REPORTS_VIEW: 'COMMISSIONS_REPORTS_VIEW',\n\n // Catalog\n CATALOG_READ: 'CATALOG_READ',\n CATALOG_UPDATE: 'CATALOG_UPDATE',\n CATALOG_MANAGE: 'CATALOG_MANAGE',\n\n // Credits\n CREDITS_READ: 'CREDITS_READ',\n CREDITS_MANAGE: 'CREDITS_MANAGE',\n CREDITS_ADJUST: 'CREDITS_ADJUST',\n\n // Members\n MEMBERS_PORTAL_ACCESS: 'MEMBERS_PORTAL_ACCESS',\n\n // Special permissions\n SUPER_ADMIN: 'SUPER_ADMIN',\n OWNER: 'OWNER',\n All: 'ALL',\n} as const;\n\n// Role definitions\nexport const ROLE_PERMISSIONS = {\n ADMIN: Object.values(PERMISSIONS),\n MANAGER: [\n PERMISSIONS.GYMS_READ,\n PERMISSIONS.COLLABORATORS_READ,\n PERMISSIONS.CLIENTS_CREATE,\n PERMISSIONS.CLIENTS_READ,\n PERMISSIONS.CLIENTS_UPDATE,\n PERMISSIONS.CONTRACTS_CREATE,\n PERMISSIONS.CONTRACTS_READ,\n PERMISSIONS.CHECKINS_CREATE,\n PERMISSIONS.CHECKINS_READ,\n PERMISSIONS.REPORTS_VIEW,\n PERMISSIONS.ASSETS_CREATE,\n PERMISSIONS.ASSETS_READ,\n PERMISSIONS.ASSETS_DELETE,\n PERMISSIONS.FILES_CREATE,\n PERMISSIONS.FILES_READ,\n PERMISSIONS.FILES_DELETE,\n PERMISSIONS.PRODUCTS_CREATE,\n PERMISSIONS.PRODUCTS_READ,\n PERMISSIONS.PRODUCTS_UPDATE,\n PERMISSIONS.PRODUCTS_DELETE,\n PERMISSIONS.PRODUCT_CATEGORIES_CREATE,\n PERMISSIONS.PRODUCT_CATEGORIES_READ,\n PERMISSIONS.PRODUCT_CATEGORIES_UPDATE,\n PERMISSIONS.PRODUCT_CATEGORIES_DELETE,\n PERMISSIONS.SALES_CREATE,\n PERMISSIONS.SALES_READ,\n PERMISSIONS.SALES_UPDATE,\n PERMISSIONS.SUPPLIERS_CREATE,\n PERMISSIONS.SUPPLIERS_READ,\n PERMISSIONS.SUPPLIERS_UPDATE,\n PERMISSIONS.SUPPLIERS_DELETE,\n PERMISSIONS.PAYMENT_METHODS_CREATE,\n PERMISSIONS.PAYMENT_METHODS_READ,\n PERMISSIONS.PAYMENT_METHODS_UPDATE,\n PERMISSIONS.PAYMENT_METHODS_DELETE,\n PERMISSIONS.COMMISSIONS_RULES_READ,\n PERMISSIONS.COMMISSIONS_CALCULATIONS_READ,\n ],\n} as const;\n\n// Cache TTL values (in milliseconds - cache-manager standard)\nexport const CACHE_TTL = {\n USER_PERMISSIONS: 900000, // 15 minutes\n GYM_DATA: 1800000, // 30 minutes\n STATIC_DATA: 3600000, // 60 minutes\n REPORTS: 300000, // 5 minutes\n DASHBOARD: 180000, // 3 minutes\n WHATSAPP_MESSAGE_STATUS: 300000, // 5 minutes\n ONBOARDING_STATUS: 3600000, // 1 hour\n ONBOARDING_LOCK: 300000, // 5 minutes\n} as const;\n\n// File size limits (in bytes)\nexport const FILE_LIMITS = {\n MAX_FILE_SIZE: 10 * 1024 * 1024, // 10MB\n MAX_IMAGE_SIZE: 5 * 1024 * 1024, // 5MB\n MAX_DOCUMENT_SIZE: 10 * 1024 * 1024, // 10MB\n} as const;\n\n// Pagination defaults\nexport const PAGINATION_DEFAULTS = {\n PAGE: 1,\n LIMIT: 20,\n MAX_LIMIT: 100,\n} as const;\n\n// Date formats\nexport const DATE_FORMATS = {\n DATE_ONLY: 'YYYY-MM-DD',\n DATETIME: 'YYYY-MM-DD HH:mm:ss',\n TIME_ONLY: 'HH:mm:ss',\n} as const;\n\n// Headers\nexport const HEADERS = {\n GYM_ID: 'X-Gym-Id',\n REQUEST_ID: 'X-Request-Id',\n} as const;\n\n// Re-export template constants\nexport * from './constants/template-codes.constants';\nexport * from './constants/bulk-message-variables';\n","export enum UserType {\n OWNER = 'owner',\n COLLABORATOR = 'collaborator',\n}\n\nexport enum SubscriptionStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n EXPIRED = 'expired',\n PAUSED = 'paused',\n PENDING_UPGRADE = 'pending_upgrade',\n}\n\nexport enum CollaboratorStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum InvitationStatus {\n PENDING = 'pending',\n ACCEPTED = 'accepted',\n CANCELLED = 'cancelled',\n EXPIRED = 'expired',\n}\n\nexport enum ClientStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n}\n\nexport enum PlanStatus {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n ARCHIVED = 'archived',\n}\n\nexport enum PlanType {\n BASIC = 'BASIC',\n PREMIUM = 'PREMIUM',\n ENTERPRISE = 'ENTERPRISE',\n}\n\nexport enum ContractStatus {\n PENDING = 'pending',\n ACTIVE = 'active',\n EXPIRING_SOON = 'expiring_soon',\n EXPIRED = 'expired',\n CANCELLED = 'cancelled',\n FOR_RENEW = 'for_renew',\n SUSPENDED = 'suspended',\n GRACE_PERIOD = 'grace_period',\n TERMINATED = 'terminated',\n}\n\nexport enum CancellationReason {\n PRICE_TOO_HIGH = 'PRICE_TOO_HIGH',\n NOT_USING_SERVICE = 'NOT_USING_SERVICE',\n MOVING_LOCATION = 'MOVING_LOCATION',\n FINANCIAL_ISSUES = 'FINANCIAL_ISSUES',\n SERVICE_DISSATISFACTION = 'SERVICE_DISSATISFACTION',\n TEMPORARY_BREAK = 'TEMPORARY_BREAK',\n OTHER = 'OTHER',\n}\n\nexport enum SuspensionType {\n VACATION = 'vacation',\n MEDICAL = 'medical',\n FINANCIAL = 'financial',\n OTHER = 'other',\n}\n\nexport enum PaymentFrequency {\n MONTHLY = 'monthly',\n QUARTERLY = 'quarterly',\n ANNUAL = 'annual',\n}\n\nexport enum ContractInstallmentStatus {\n PENDING = 'pending',\n PARTIALLY_PAID = 'partially_paid',\n PAID = 'paid',\n OVERDUE = 'overdue',\n CANCELLED = 'cancelled',\n}\n\nexport enum AssetStatus {\n ACTIVE = 'active',\n DELETED = 'deleted',\n}\n\nexport enum AssetCategory {\n MEDICAL_DOCUMENT = 'medical_document',\n IDENTIFICATION = 'identification',\n INSURANCE = 'insurance',\n CONTRACT_COPY = 'contract_copy',\n OTHER = 'other',\n}\n\nexport enum ContractAssetType {\n PAYMENT_RECEIPT = 'payment_receipt',\n CONTRACT_DOCUMENT = 'contract_document',\n IDENTIFICATION = 'identification',\n OTHER = 'other',\n}\n\nexport enum MessageStatus {\n PENDING = 'pending',\n SCHEDULED = 'scheduled',\n QUEUED = 'queued',\n SENDING = 'sending',\n SENT = 'sent',\n FAILED = 'failed',\n CANCELLED = 'cancelled',\n}\n\nexport enum FeatureType {\n AI_GENERATION = 'ai_generation',\n BULK_WHATSAPP = 'bulk_whatsapp',\n}\n","/**\n * Evento para enviar un mensaje de WhatsApp\n */\nexport interface WhatsAppMessageSendEventData {\n // Identificadores\n gymId: string;\n instanceName: string; // Nombre de la instancia de Evolution API\n\n // Destinatario\n phoneNumber: string;\n\n // Contenido\n content: string;\n\n // Metadata opcional\n messageId?: string;\n clientId?: string;\n templateId?: string;\n variables?: Record<string, any>;\n\n // Usuario que generó el envío\n userId?: string;\n}\n\n/**\n * Evento para reintentar un mensaje de WhatsApp\n * El mensaje ya está construido, solo necesita ser reenviado\n */\nexport interface WhatsAppMessageRetryEventData {\n messageId: string; // ID del mensaje a reintentar\n gymId: string; // ID del gimnasio\n userId?: string; // Usuario que solicitó el reintento\n\n // Datos del mensaje necesarios para el reintento\n content: string; // Contenido del mensaje\n recipientPhone: string; // Teléfono del destinatario\n instanceName: string; // Nombre de la instancia de Evolution API\n}\n\n/**\n * Nombres de eventos de WhatsApp\n */\nexport const WHATSAPP_EVENTS = {\n MESSAGE_SEND: 'whatsapp/message.send',\n MESSAGE_RETRY: 'whatsapp/message.retry',\n MESSAGE_RECEIVED: 'whatsapp/message.received',\n CONNECTION_UPDATE: 'whatsapp/connection.update',\n} as const;\n","import { VariableContextType } from '../constants/bulk-message-variables';\nimport { BulkMessage, BulkMessageType } from '../types/bulk-message.types';\n\nexport const BULK_MESSAGING_EVENTS = {\n SEND_BULK_MESSAGES: 'whatsapp/bulk-messages.send',\n} as const;\n\nexport interface BulkMessageEventData {\n sendId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n templateId?: string;\n messages: BulkMessage[];\n variableContext?: VariableContextType; // Tipo de contexto\n clients: Array<{\n messageId?: string;\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: Record<string, any>; // Raw data sin procesar\n }>;\n gymData: Record<string, any>; // Raw data del gym\n contextData?: Record<string, any>; // Data adicional del contexto (activity, event, etc.)\n}\n\nexport interface SendBulkMessagesEvent {\n name: typeof BULK_MESSAGING_EVENTS.SEND_BULK_MESSAGES;\n data: BulkMessageEventData;\n}\n\nexport interface BulkMessageStatusUpdate {\n gymId: string;\n sendId: string;\n clientId: string;\n overallStatus: 'pending' | 'sending' | 'sent' | 'partial' | 'failed';\n messages: Array<{\n order: number;\n type: BulkMessageType;\n status: 'pending' | 'sending' | 'sent' | 'failed';\n externalMessageId?: string;\n error?: string;\n sentAt?: string;\n }>;\n timestamp: string;\n}\n","export const ACTIVITY_EVENTS = {\n SEND_ACTIVITY_NOTIFICATION: 'activity/notification.send',\n} as const;\n\nexport interface SendActivityNotificationEvent {\n name: typeof ACTIVITY_EVENTS.SEND_ACTIVITY_NOTIFICATION;\n data: {\n activityId: string;\n notificationId: string;\n gymId: string;\n userId: string;\n instanceName: string;\n message: string;\n clients: Array<{\n clientId: string;\n clientName: string;\n phoneNumber: string;\n data: {\n id: string;\n name: string;\n email?: string;\n phone: string;\n activePlan?: {\n name: string;\n expirationDate?: Date;\n amount?: number;\n };\n membershipStatus?: string;\n metadata?: Record<string, any>;\n };\n }>;\n gymData: {\n name: string;\n phone?: string;\n address?: string;\n countryConfig: {\n currency: string;\n locale: string;\n };\n };\n activityData: {\n name: string;\n startDateTime: Date;\n durationMinutes: number;\n location: string;\n };\n };\n}\n","import { z } from 'zod';\n\nexport const templateGenerationRequestSchema = z.object({\n templateCode: z.string(),\n templateMetadata: z.object({\n title: z.string(),\n description: z.string(),\n variables: z.array(z.string()),\n exampleValues: z.record(z.string()),\n }),\n userPrompt: z.string().optional(),\n language: z.string().default('es'),\n});\n\nexport const aiGeneratedTemplateSchema = z.object({\n message: z.string().describe('Mensaje generado con variables en formato {{variable}}'),\n tone: z.enum(['professional', 'friendly', 'casual', 'urgent']).describe('Tono del mensaje'),\n usedVariables: z.array(z.string()).describe('Variables utilizadas en el mensaje'),\n suggestions: z.array(z.string()).optional().describe('Sugerencias adicionales'),\n});\n\nexport type TemplateGenerationRequest = z.infer<typeof templateGenerationRequestSchema>;\nexport type AIGeneratedTemplate = z.infer<typeof aiGeneratedTemplateSchema>;\n","import { z } from 'zod';\n\nexport const bulkMessageGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for message generation'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .optional()\n .describe('Tone of the message'),\n includeVariables: z.array(z.string()).optional().describe('Variables to include in the message'),\n additionalRequirements: z.string().optional().describe('Additional requirements for the message'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const bulkMessageSchema = z.object({\n message: z.string().describe('Generated message with variables'),\n tone: z\n .enum(['promotional', 'informational', 'reminder', 'greeting', 'friendly'])\n .describe('Tone of the message'),\n usedVariables: z.array(z.string()).describe('Variables used in the message'),\n suggestions: z.array(z.string()).optional().describe('Additional message suggestions'),\n});\n\nexport type BulkMessageGenerationRequest = z.infer<typeof bulkMessageGenerationRequestSchema>;\nexport type BulkMessage = z.infer<typeof bulkMessageSchema>;\n","import { z } from 'zod';\n\nexport const activityNotificationGenerationRequestSchema = z.object({\n prompt: z.string().describe('Prompt or context for notification generation'),\n tone: z\n .enum(['friendly', 'formal', 'urgent', 'motivational', 'reminder'])\n .optional()\n .describe('Tone of the notification'),\n currentMessage: z.string().optional().describe('Current message to improve or use as reference'),\n additionalRequirements: z\n .string()\n .optional()\n .describe('Additional requirements for the notification'),\n language: z.string().default('es').describe('Language for generation'),\n});\n\nexport const activityNotificationSchema = z.object({\n message: z.string().describe('Generated notification message with activity variables'),\n});\n\nexport type ActivityNotificationGenerationRequest = z.infer<\n typeof activityNotificationGenerationRequestSchema\n>;\nexport type ActivityNotification = z.infer<typeof activityNotificationSchema>;\n","export enum RoleNames {\n ADMIN = 'Admin',\n ENCARGADO = 'Encargado',\n OWNER = 'OWNER', // Pseudo-role for gym owners\n}\n\nexport const ROLE_NAMES = RoleNames;\n\nexport type RoleName = RoleNames;\n\nexport function isAdminRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ADMIN;\n}\n\nexport function isEncargadoRole(roleName: string | null | undefined): boolean {\n return roleName === RoleNames.ENCARGADO;\n}\n\nexport function canAccessFeature(\n userRole: string | null | undefined,\n allowedRoles: string[] | RoleNames[]\n): boolean {\n if (!userRole) return false;\n // OWNER pseudo-role has access to everything\n if (userRole === RoleNames.OWNER) return true;\n return allowedRoles.includes(userRole as any);\n}\n\nexport function getRoleDisplayName(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Administrador';\n case RoleNames.ENCARGADO:\n return 'Encargado';\n case RoleNames.OWNER:\n return 'Propietario';\n default:\n return roleName;\n }\n}\n\nexport function getRoleDescription(roleName: string | null | undefined): string {\n if (!roleName) return '';\n\n switch (roleName) {\n case RoleNames.ADMIN:\n return 'Acceso completo a todas las funcionalidades del gimnasio, gestión de colaboradores y configuración';\n case RoleNames.ENCARGADO:\n return 'Gestión diaria del gimnasio: clientes, contratos, check-ins y reportes';\n case RoleNames.OWNER:\n return 'Acceso completo a todas las funcionalidades, organización y suscripción';\n default:\n return '';\n }\n}\n\nexport function getRoleCapabilities(roleName: string | null | undefined): string[] {\n if (!roleName) return [];\n\n switch (roleName) {\n case RoleNames.OWNER:\n return [\n 'Acceso completo a todas las funcionalidades',\n 'Gestión de organización',\n 'Gestión de suscripción y facturación',\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ADMIN:\n return [\n 'Gestión completa de clientes',\n 'Gestión completa de contratos',\n 'Gestión de colaboradores',\n 'Configuración del gimnasio',\n 'Gestión de planes',\n 'Gestión de proveedores',\n 'Gestión de métodos de pago',\n 'Reportes y estadísticas',\n 'Gestión de inventario',\n 'Check-ins',\n ];\n case RoleNames.ENCARGADO:\n return [\n 'Gestión de clientes (ver, crear, editar)',\n 'Creación y renovación de contratos',\n 'Check-ins',\n 'Ver reportes',\n 'Gestión de inventario',\n 'Ventas',\n ];\n default:\n return [];\n }\n}","/**\n * Tipos de mensajes soportados en bulk messaging\n * Extensible para futuros tipos: video, audio, document, etc.\n */\nexport type BulkMessageType = 'text' | 'image';\n\n/**\n * Interfaz base para mensajes en bulk messaging\n */\nexport interface BulkMessage {\n /** Tipo de mensaje */\n type: BulkMessageType;\n\n /**\n * Contenido del mensaje:\n * - Para 'text': El texto del mensaje (soporta variables {{var}})\n * - Para 'image': fileId o assetId (se resuelve a URL en el servicio)\n */\n content: string;\n\n /**\n * Tipo de referencia para imágenes:\n * - 'file': fileId del usuario\n * - 'asset': assetId de la galería del gym\n */\n mediaRef?: 'file' | 'asset';\n\n /** Caption para imágenes (soporta variables) */\n caption?: string;\n\n /** Orden de envío (0-based, secuencial) */\n order: number;\n}\n\nexport type BulkMessageArray = BulkMessage[];\n\n/**\n * Constantes de validación\n */\nexport const MAX_MESSAGES_PER_CAMPAIGN = 10;\nexport const MAX_IMAGES_PER_CAMPAIGN = 5;\nexport const MAX_CAPTION_LENGTH = 1024;\nexport const INTER_MESSAGE_DELAY_MS = 500; // Delay entre mensajes del mismo cliente\n\n/**\n * Tipos de mensajes soportados (extensible)\n */\nexport const SUPPORTED_MESSAGE_TYPES: BulkMessageType[] = ['text', 'image'];\n\n/**\n * Tipos MIME permitidos para imágenes\n */\nexport const ALLOWED_IMAGE_MIMES = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp'];\n","/**\n * Simple phone number utilities for WhatsApp Evolution API\n */\n\n/**\n * Normalizes a phone number for Evolution API\n * Adds country code +51 for Peru if missing and ensures + prefix\n *\n * @param phoneNumber - Phone number in various formats\n * @returns Normalized phone number with + prefix\n *\n * Examples:\n * - \"987654321\" -> \"+51987654321\"\n * - \"51987654321\" -> \"+51987654321\"\n * - \"+51987654321\" -> \"+51987654321\"\n */\nexport function normalizePhoneForEvolution(phoneNumber: string): string {\n if (!phoneNumber) {\n throw new Error('Phone number is required');\n }\n\n // Remove all non-numeric characters except +\n let cleaned = phoneNumber.replace(/[^\\d+]/g, '');\n\n // Remove + if exists, we'll add it back\n if (cleaned.startsWith('+')) {\n cleaned = cleaned.substring(1);\n }\n\n // Handle Peru specific cases\n if (cleaned.length === 9) {\n // Local number, add Peru country code\n return `+51${cleaned}`;\n }\n\n if (cleaned.length === 11 && cleaned.startsWith('51')) {\n // Already has country code\n return `+${cleaned}`;\n }\n\n if (cleaned.length === 12 && cleaned.startsWith('051')) {\n // Remove leading 0\n return `+${cleaned.substring(1)}`;\n }\n\n // For other cases, assume it needs + prefix\n if (!cleaned.startsWith('+')) {\n return `+${cleaned}`;\n }\n\n return cleaned;\n}\n\n/**\n * Validates if a phone number is valid for Peru\n */\nexport function isValidPeruvianPhone(phoneNumber: string): boolean {\n try {\n const normalized = normalizePhoneForEvolution(phoneNumber);\n // Peru numbers should be +51 followed by 9 digits starting with 9\n return /^\\+51[9]\\d{8}$/.test(normalized);\n } catch {\n return false;\n }\n}\n","export enum CommissionRuleType {\n PLAN = 'PLAN',\n AMOUNT = 'AMOUNT',\n PROMOTION = 'PROMOTION',\n}\n\nexport enum CommissionStatus {\n PENDING = 'PENDING',\n CONFIRMED = 'CONFIRMED',\n PAID = 'PAID',\n REVERSED = 'REVERSED',\n}\n\nexport enum CommissionChangeType {\n CREATED = 'CREATED',\n UPDATED = 'UPDATED',\n DELETED = 'DELETED',\n}\n\nexport enum CommissionEntityType {\n CONFIG = 'CONFIG',\n RULE = 'RULE',\n}\n\nexport interface RuleCriteria {\n planId?: string;\n minAmount?: number;\n maxAmount?: number;\n planIds?: string[];\n}\n\nexport interface CommissionConfigDto {\n id: string;\n gymId: string;\n defaultPercentage: number;\n reversalPeriodDays: number;\n minimumContractDays: number;\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CreateCommissionConfigDto {\n defaultPercentage: number;\n reversalPeriodDays: number;\n minimumContractDays: number;\n isActive: boolean;\n}\n\nexport interface UpdateCommissionConfigDto {\n defaultPercentage?: number;\n reversalPeriodDays?: number;\n minimumContractDays?: number;\n isActive?: boolean;\n}\n\nexport interface CommissionRuleDto {\n id: string;\n gymId: string;\n name: string;\n type: CommissionRuleType;\n percentage: number;\n priority: number;\n criteria: RuleCriteria;\n startDate?: string;\n endDate?: string;\n description?: string;\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n usageCount: number;\n}\n\nexport interface CreateCommissionRuleDto {\n name: string;\n type: CommissionRuleType;\n percentage: number;\n criteria: RuleCriteria;\n startDate?: string;\n endDate?: string;\n description?: string;\n}\n\nexport interface UpdateCommissionRuleDto {\n name?: string;\n percentage?: number;\n criteria?: RuleCriteria;\n startDate?: string;\n endDate?: string;\n description?: string;\n isActive?: boolean;\n}\n\nexport interface ReorderCommissionRulesDto {\n ruleIds: string[];\n}\n\nexport interface CommissionRuleFiltersDto {\n type?: CommissionRuleType;\n isActive?: boolean;\n search?: string;\n page: number;\n limit: number;\n}\n\nexport interface CommissionCalculationDto {\n id: string;\n gymId: string;\n contractId: string;\n collaboratorId: string;\n ruleId: string | null;\n percentage: number;\n baseAmount: number;\n amount: number;\n status: CommissionStatus;\n saleDate: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface CommissionFiltersDto {\n status?: CommissionStatus;\n collaboratorId?: string;\n startDate?: string;\n endDate?: string;\n page: number;\n limit: number;\n}\n\nexport interface CommissionSummaryDto {\n period: {\n start: string;\n end: string;\n };\n totals: {\n totalCommissions: number;\n totalContracts: number;\n averageCommission: number;\n totalPaid: number;\n totalPending: number;\n };\n byStatus: {\n status: CommissionStatus;\n count: number;\n total: number;\n }[];\n}\n\nexport interface SimulateCommissionDto {\n collaboratorId: string;\n planId: string;\n baseAmount: number;\n saleDate: string;\n}\n\nexport interface CommissionSimulationDto {\n percentage: number;\n baseAmount: number;\n amount: number;\n appliedRule: {\n id: string;\n name: string;\n type: CommissionRuleType;\n percentage: number;\n } | null;\n isDefault: boolean;\n}\n\nexport interface CommissionComparisonDto {\n scenarios: CommissionSimulationDto[];\n bestScenario: {\n index: number;\n amount: number;\n difference: number;\n };\n}\n\nexport interface ReportFiltersDto {\n startDate?: string;\n endDate?: string;\n period?: 'week' | 'month' | 'quarter' | 'year';\n ruleId?: string;\n collaboratorId?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface CommissionSummaryReportDto {\n period: {\n start: string;\n end: string;\n };\n totals: {\n totalCommissions: number;\n totalContracts: number;\n averageCommission: number;\n totalPaid: number;\n totalPending: number;\n };\n byStatus: {\n status: string;\n count: number;\n total: number;\n }[];\n byRule: {\n ruleId: string;\n ruleName: string;\n ruleType: string;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n }[];\n byCollaborator: {\n collaboratorId: string;\n collaboratorName: string;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n }[];\n trend: {\n date: string;\n commissions: number;\n contracts: number;\n }[];\n}\n\nexport interface RuleReportDto {\n ruleId: string;\n ruleName: string;\n ruleType: string;\n percentage: number;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n minCommission: number;\n maxCommission: number;\n effectiveness: {\n usageRate: number;\n conversionImpact: number;\n roi: number;\n };\n}\n\nexport interface CollaboratorReportDto {\n collaboratorId: string;\n collaboratorName: string;\n roleName: string;\n contractsCount: number;\n totalCommissions: number;\n averageCommission: number;\n totalPaid: number;\n totalPending: number;\n performance: {\n rank: number;\n percentile: number;\n comparisonWithAverage: number;\n };\n rulesUsed: {\n ruleId: string;\n ruleName: string;\n count: number;\n total: number;\n }[];\n}\n\nexport interface PromotionReportFiltersDto {\n promotionId?: string;\n status?: 'active' | 'scheduled' | 'expired';\n startDate?: string;\n endDate?: string;\n}\n\nexport interface PromotionReportDto {\n promotionId: string;\n promotionName: string;\n percentage: number;\n startDate: string;\n endDate: string;\n status: string;\n impact: {\n contractsCreated: number;\n totalCommissions: number;\n averageCommission: number;\n comparisonWithNormal: {\n normalCommissions: number;\n promotionalCommissions: number;\n additionalCost: number;\n percentageIncrease: number;\n };\n salesIncrease: {\n contractsBeforePromotion: number;\n contractsDuringPromotion: number;\n percentageIncrease: number;\n };\n roi: {\n additionalRevenue: number;\n additionalCost: number;\n netBenefit: number;\n roiPercentage: number;\n };\n };\n}\n\nexport interface CommissionHistoryFiltersDto {\n entityType?: CommissionEntityType;\n changeType?: CommissionChangeType;\n startDate?: string;\n endDate?: string;\n page: number;\n limit: number;\n}\n\nexport interface CommissionHistoryDto {\n id: string;\n configId: string | null;\n ruleId: string | null;\n changeType: CommissionChangeType;\n entityType: CommissionEntityType;\n previousValue: any;\n newValue: any;\n changedBy: {\n id: string;\n name: string;\n email: string;\n };\n changedAt: string;\n reason: string | null;\n impact: string | null;\n}\n\nexport interface PaginatedCommissionResult<T> {\n items: T[];\n total: number;\n limit: number;\n offset: number;\n}\n","// ============================================================================\n// Public Catalog Types\n// ============================================================================\n\n/**\n * Hero section of the catalog\n */\nexport interface CatalogHeroSection {\n logo: string | null;\n banner: string | null;\n heroMessage: string | null;\n ctaButtonText: string;\n whatsappUrl: string | null;\n}\n\n/**\n * Activity/class offered by the gym\n */\nexport interface CatalogActivity {\n id: string;\n name: string;\n description: string | null;\n startTime: string;\n duration: number;\n days: string[];\n imageUrl: string | null;\n}\n\n/**\n * Membership plan offered by the gym\n */\nexport interface CatalogPlan {\n id: string;\n name: string;\n description: string | null;\n price: number;\n currency: string;\n duration: string;\n features: any;\n whatsappUrl: string | null;\n}\n\n/**\n * Social media links\n */\nexport interface CatalogSocialMedia {\n instagram: string | null;\n facebook: string | null;\n tiktok: string | null;\n whatsapp: string | null;\n}\n\n/**\n * Gym location information\n */\nexport interface CatalogLocation {\n address: string | null;\n city: string | null;\n state: string | null;\n latitude: number | null;\n longitude: number | null;\n}\n\n/**\n * Formatted schedule for a day\n */\nexport interface FormattedSchedule {\n day: string;\n hours: string;\n}\n\n/**\n * Complete catalog response\n */\nexport interface CatalogResponse {\n gym: {\n id: string;\n name: string;\n slug: string;\n description: string | null;\n phone: string | null;\n email: string | null;\n currency: string;\n };\n hero: CatalogHeroSection;\n plans: CatalogPlan[];\n activities: CatalogActivity[];\n schedule: FormattedSchedule[];\n socialMedia: CatalogSocialMedia;\n location: CatalogLocation;\n config: Record<string, any>;\n}\n\n/**\n * City with gym count\n */\nexport interface CityWithGyms {\n city: string;\n state: string;\n count: number;\n}\n\n/**\n * Search catalog parameters\n */\nexport interface SearchCatalogParams {\n search?: string;\n city?: string;\n state?: string;\n latitude?: string;\n longitude?: string;\n radius?: string;\n limit?: number;\n offset?: number;\n}\n\n/**\n * Catalog gym in search results\n */\nexport interface CatalogGym {\n id: string;\n name: string;\n slug: string;\n address?: string;\n city?: string;\n state?: string;\n phone?: string;\n email?: string;\n amenities?: any;\n settings?: any;\n}\n\n/**\n * Search catalog response\n */\nexport interface SearchCatalogResponse {\n gyms: CatalogGym[];\n pagination: {\n total: number;\n limit: number;\n offset: number;\n };\n}\n\n// ============================================================================\n// Lead Management Types\n// ============================================================================\n\n/**\n * Lead gender enum\n */\nexport enum LeadGender {\n MALE = 'male',\n FEMALE = 'female',\n OTHER = 'other',\n}\n\n/**\n * Create lead DTO\n */\nexport interface CreateLeadDto {\n fullName: string;\n age: number;\n phone: string;\n gender: LeadGender;\n objective: string;\n}\n\n/**\n * Catalog lead entity\n */\nexport interface CatalogLead {\n id: string;\n catalogId: string;\n fullName: string;\n age: number;\n phone: string;\n gender: string;\n objective: string;\n source: string;\n ipAddress: string | null;\n userAgent: string | null;\n isContacted: boolean;\n contactedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Lead filters for querying\n */\nexport interface LeadFiltersDto {\n startDate?: string;\n endDate?: string;\n isContacted?: boolean;\n limit?: number;\n offset?: number;\n}\n\n/**\n * Lead submission response\n */\nexport interface LeadSubmissionResponse {\n message: string;\n}\n\n// ============================================================================\n// Admin Catalog Configuration Types\n// ============================================================================\n\n/**\n * Gym catalog configuration\n */\nexport interface GymCatalog {\n id: string;\n gymId: string;\n slug: string;\n logo: string | null; // Deprecated: kept for backward compatibility\n banner: string | null; // Deprecated: kept for backward compatibility\n logoFileId: string | null;\n bannerFileId: string | null;\n heroMessage: string | null;\n ctaButtonText: string;\n config: Record<string, any> | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Update catalog configuration DTO\n */\nexport interface UpdateCatalogConfigDto {\n slug?: string;\n heroMessage?: string;\n ctaButtonText?: string;\n logoFileId?: string;\n bannerFileId?: string;\n config?: Record<string, any>;\n}\n","export enum DiscountType {\n PERCENTAGE = 'PERCENTAGE',\n FIXED_AMOUNT = 'FIXED_AMOUNT',\n}\n\n// Request DTOs\nexport interface CreatePromoCodeDto {\n code: string;\n description?: string;\n discountType: DiscountType;\n discountValue: number;\n validFrom: string;\n validUntil: string;\n maxUses?: number;\n minPurchaseAmount?: number;\n applicableTo?: {\n planIds?: string[];\n packageIds?: string[];\n };\n}\n\nexport interface UpdatePromoCodeDto {\n description?: string;\n discountType?: DiscountType;\n discountValue?: number;\n validFrom?: string;\n validUntil?: string;\n maxUses?: number;\n minPurchaseAmount?: number;\n applicableTo?: {\n planIds?: string[];\n packageIds?: string[];\n };\n}\n\nexport interface SearchPromoCodesParams {\n isActive?: boolean;\n code?: string;\n status?: 'active' | 'expired' | 'exhausted';\n page?: number;\n limit?: number;\n}\n\nexport interface ValidatePromoCodeDto {\n code: string;\n pricingPackageId: string;\n packagePrice: number;\n}\n\nexport interface ValidatePromoCodeResponseDto {\n valid: boolean;\n id?: string;\n code?: string;\n discountType?: string;\n discountValue?: number;\n discountAmount?: number;\n finalAmount?: number;\n error?: string;\n}\n\n// Response types\nexport interface PromoCode {\n id: string;\n gymId: string;\n code: string;\n description?: string;\n discountType: DiscountType;\n discountValue: number;\n validFrom: string;\n validUntil: string;\n maxUses?: number;\n currentUses: number;\n minPurchaseAmount?: number;\n applicableTo?: {\n planIds?: string[];\n packageIds?: string[];\n };\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n deletedAt?: string;\n\n // Counters\n _count?: {\n contracts: number;\n };\n}\n\nexport interface PromoCodeAnalytics {\n totalUses: number;\n remainingUses?: number;\n totalDiscount: number;\n averageDiscount: number;\n contractCount: number;\n isActive: boolean;\n daysUntilExpiration?: number;\n}\n"]}