@bluecopa/core 0.1.55 → 0.1.56

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/config.ts","../src/api/client.ts","../src/api/user/getLoggedInUserDetails.ts","../src/api/user/getAllUsers.ts","../src/api/workflow/triggerHttpWorkflowById.ts","../src/api/workflow/triggerWorkflowById.ts","../src/api/workflow/getWorkflowInstanceStatusById.ts","../src/api/workflow/getAllHttpTriggers.ts","../src/api/file/getFileUrlByFileId.ts","../src/api/file/fileUpload.ts","../src/api/file/fileDownload.ts","../src/api/definition/runPublishedDefinition.ts","../src/api/definition/runSampleDefinition.ts","../src/api/definition/runDefinition.ts","../src/api/worksheet/getWorksheets.ts","../src/api/worksheet/getWorksheetsByType.ts","../src/utils/date.ts","../../models/src/lib/ui-models/workbookModel.ts","../src/utils/metric/filterUtils.ts","../../models/src/lib/ui-models/definitionModel.ts","../src/utils/metric/analysisMethods.ts","../src/utils/metric/mergeFilterService.ts","../src/utils/metric/getMetricDefinition.ts","../src/utils/inputTable/inputTableDefinition.ts","../../../node_modules/.pnpm/centrifuge@5.2.2/node_modules/centrifuge/build/index.mjs","../src/utils/websockets/centrifugoWebsocket.ts","../../../node_modules/.pnpm/pusher-js@8.5.0/node_modules/pusher-js/dist/web/pusher.js","../src/utils/websockets/pusherWebsocket.ts","../src/utils/websockets/websocketProviderFactory.ts","../src/api/definition/getDescription.ts","../src/utils/statement/filterConverters.ts","../src/utils/statement/filterUtils.ts","../src/utils/file/downloadFile.ts","../src/utils/statement/hydrateStatement.ts","../src/utils/common/generatePushId.ts","../src/utils/common/generateRandomName.ts","../src/utils/metric/hydrateWorksheet.ts","../src/api/metric/getData.ts","../src/api/chat/createThread.ts","../src/api/chat/getCommentsByThreadId.ts","../src/api/chat/postComment.ts","../src/api/chat/updateComment.ts","../src/api/chat/deleteComment.ts","../src/api/chat/subscribeUser.ts","../src/api/chat/unsubscribeUser.ts","../src/api/chat/checkSubscriptionStatus.ts","../../models/src/lib/builders/definitionBuilder.ts","../src/api/dataset/getData.ts","../src/api/dataset/getSampleData.ts","../src/api/dataset/getDatasets.ts","../src/api/workbook/getPublishedWorkbookById.ts","../src/types/workbook.ts","../src/api/inputTable/getTableById.ts","../src/api/inputTable/getData.ts","../src/api/inputTable/getInputTables.ts","../src/api/inputTable/getRows.ts","../src/api/inputTable/insertRow.ts","../src/api/inputTable/updateRow.ts","../src/api/inputTable/deleteRow.ts","../src/api/workbook/getWorkbooksByType.ts","../src/api/workbook/getWorkbookDetails.ts","../src/api/workbook/saveWorkbook.ts","../src/api/workbook/publishWorkbook.ts","../src/api/statement/getViewsBySheetId.ts","../src/api/statement/getRunsByViewId.ts","../src/api/statement/getData.ts","../src/api/statement/getViewById.ts","../src/api/statement/createNewRun.ts","../src/api/statement/getRunResultById.ts","../src/api/task/getTaskDetails.ts","../src/api/recon/runRecon.ts","../src/api/recon/getAllReconWorkflows.ts","../src/api/form/getFormSchema.ts","../src/api/form/getFormData.ts","../src/api/form/getFormById.ts","../src/api/form/createOrUpdateForm.ts","../src/api/audit/getAuditLogs.ts","../src/api/audit/createAuditLog.ts","../src/api/templatedPipeline/getAllTemplatedPipelines.ts","../src/api/process/markTaskDone.ts","../src/api/process/reassignTask.ts","../src/api/inboxItems/getAllInboxItems.ts","../src/api/inboxItems/markItemAsRead.ts","../src/api/inboxItems/markItemAsUnread.ts","../src/api/permissions/getPermissions.ts","../src/api/clientIp/getClientIp.ts","../src/api/emailEngine/getAllConversations.ts","../src/api/emailEngine/getConversation.ts","../src/api/emailEngine/createConversation.ts","../src/api/emailEngine/replyToConversation.ts","../src/api/emailEngine/getMessageBySenderId.ts","../src/api/tcn/getAuthUrl.ts","../src/api/tcn/exchangeCode.ts","../src/api/tcn/refreshToken.ts","../src/api/tcn/getCurrentAgent.ts","../src/api/tcn/getAgentSkills.ts","../src/api/tcn/createSession.ts","../src/api/tcn/keepAlive.ts","../src/api/tcn/agentGetStatus.ts","../src/api/tcn/getHuntGroupAgentSettings.ts","../src/api/tcn/dialManualPrepare.ts","../src/api/tcn/processManualDial.ts","../src/api/tcn/manualDialStart.ts","../src/api/tcn/agentDisconnect.ts","../src/api/tcn/agentPause.ts","../src/api/tcn/agentSetReady.ts","../src/api/tcn/agentGetConnectedParty.ts","../src/api/tcn/getCallData.ts","../src/tailwind/bluecopa.config.ts"],"sourcesContent":["export interface Config {\n apiBaseUrl: string;\n accessToken: string;\n workspaceId: string;\n userId: string;\n}\n\nclass ConfigSingleton {\n private static instance: ConfigSingleton;\n private config: Config;\n\n private constructor() {\n this.config = {\n apiBaseUrl: \"\",\n accessToken: \"\",\n workspaceId: \"\",\n userId: \"\",\n };\n }\n\n public static getInstance(): ConfigSingleton {\n if (!ConfigSingleton.instance) {\n ConfigSingleton.instance = new ConfigSingleton();\n }\n return ConfigSingleton.instance;\n }\n\n public setConfig(newConfig: Partial<Config>): void {\n this.config = { ...this.config, ...newConfig };\n }\n\n public getConfig(): Config {\n return { ...this.config }; // Return a copy to prevent external mutations\n }\n\n public resetConfig(): void {\n this.config = {\n apiBaseUrl: \"\",\n accessToken: \"\",\n workspaceId: \"\",\n userId: \"\",\n };\n }\n}\n\n// Export convenience functions that use the singleton instance\nconst configInstance = ConfigSingleton.getInstance();\n\nexport function setConfig(newConfig: Partial<Config>): void {\n configInstance.setConfig(newConfig);\n}\n\nexport function getConfig(): Config {\n return configInstance.getConfig();\n}\n\nexport function resetConfig(): void {\n configInstance.resetConfig();\n}\n\n// Export the singleton class for advanced usage if needed\nexport { ConfigSingleton };\n","import axios, {\n AxiosInstance,\n AxiosResponse,\n InternalAxiosRequestConfig,\n} from \"axios\";\nimport { getConfig, setConfig } from \"../config\";\n\n// Create axios instance with default configuration\nconst createApiClient = (): AxiosInstance => {\n const client = axios.create({\n timeout: 120000, // Increased to 120 seconds for audit log queries\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n // Request interceptor to add auth token and dynamic baseURL\n client.interceptors.request.use(\n (config: InternalAxiosRequestConfig) => {\n const copaConfig = getConfig();\n\n // Always update baseURL from current config\n if (copaConfig.apiBaseUrl) {\n config.baseURL = copaConfig.apiBaseUrl;\n }\n\n // Add auth headers if available\n if (copaConfig.accessToken && config.headers) {\n config.headers[\"X-COPA-TOKEN\"] = `${copaConfig.accessToken}`;\n }\n\n if (copaConfig.workspaceId && config.headers) {\n config.headers[\"X-COPA-WORKSPACE-ID\"] = copaConfig.workspaceId;\n }\n\n console.log(\"API Request Config:\", {\n baseURL: config.baseURL,\n hasToken: !!copaConfig.accessToken,\n hasWorkspaceId: !!copaConfig.workspaceId,\n });\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n },\n );\n\n // Response interceptor for error handling\n client.interceptors.response.use(\n (response: AxiosResponse) => {\n return response;\n },\n (error) => {\n // Handle common errors\n if (error.response?.status === 401) {\n setConfig({ accessToken: \"\", workspaceId: \"\" });\n // You might want to redirect to login page here\n }\n return Promise.reject(error);\n },\n );\n\n return client;\n};\n\n// Export the configured client instance\nexport const apiClient = createApiClient();\n","import { apiClient } from \"../client\";\n\nexport interface UserDetails {\n id: string;\n email: string;\n name: string;\n role: string;\n workspaceId: string;\n avatar?: string;\n preferences?: Record<string, any>;\n lastLoginAt?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ApiResponse<T> {\n success: boolean;\n data: T;\n message?: string;\n}\n\n/**\n * Fetches the logged-in user's details from the API\n * @returns Promise<{ user: UserDetails }> The user's details\n * @throws Error if the request fails or user is not authenticated\n */\nexport async function getLoggedInUserDetails(): Promise<{ user: UserDetails }> {\n try {\n const response = await apiClient.get(\"/user/current\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch user details\", status: 500 };\n }\n return response.data as { user: UserDetails };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching user details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface User {\n id?: string;\n email?: string;\n firstName?: string;\n lastName?: string;\n externalId?: string;\n active?: boolean;\n organizationId?: string;\n metadata?: Record<string, any>;\n organizationExternalId?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n entityVersion?: number;\n _links?: Record<string, any>;\n}\n\n/**\n * Gets all users in the current workspace\n * @returns Promise<User[]> The list of users\n * @throws Error if the request fails\n */\nexport async function getAllUsers(): Promise<User[]> {\n try {\n const response = await apiClient.get(\"/user/get-all\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch users\", status: 500 };\n }\n\n return response.data as User[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching users\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TriggerHttpWorkflowRequest {\n data: Record<string, any>;\n triggerId: string;\n}\n\nexport interface TriggeredWorkflow {\n workflowId: string;\n triggerId: string;\n}\n\nexport interface TriggerHttpWorkflowResponse {\n triggeredWorkflows: TriggeredWorkflow[];\n}\n\n/**\n * Triggers an HTTP workflow with the provided data\n * @param params - The trigger parameters\n * @param params.triggerId - The ID of the HTTP trigger\n * @param params.data - The data payload to send to the workflow\n * @returns Promise<TriggerHttpWorkflowResponse> The triggered workflow details\n * @throws Error if the request fails\n */\nexport async function triggerHttpWorkflowById({\n data,\n triggerId,\n}: TriggerHttpWorkflowRequest): Promise<TriggerHttpWorkflowResponse> {\n try {\n const response = await apiClient.post(`/http-trigger/${triggerId}`, data);\n if (!response.data) {\n throw { message: \"Failed to trigger HTTP workflow\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while triggering the HTTP workflow\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TriggerWorkflowRequest {\n parentId: string;\n triggerBy: string;\n}\n\nexport interface TriggerWorkflowResponse {\n workbookId: string;\n triggerBy: string;\n instanceId: string;\n triggerId: string;\n workflowId: string;\n status: string;\n triggeredAt: string;\n message: string;\n}\n\n/**\n * Triggers workflow\n * @param params - The trigger parameters\n * @param params.parentId - The ID of the workflow to be triggered\n * @param params.triggerBy - The user who triggered the workflow\n * @returns Promise<TriggerWorkflowResponse> The triggered workflow details\n * @throws Error if the request fails\n */\nexport async function triggerWorkflowById({\n parentId,\n triggerBy,\n}: TriggerWorkflowRequest): Promise<TriggerWorkflowResponse> {\n try {\n const response = await apiClient.post(\"/workflow/trigger\", {\n parentId,\n triggerBy,\n });\n if (!response.data) {\n throw { message: \"Failed to trigger workflow\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while triggering the workflow\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport type WorkflowStatusRequest = ReadonlyArray<{\n instanceId: string;\n parentId: string;\n}>;\n\nexport enum WorkflowStatus {\n Succeeded = \"Succeeded\",\n Failed = \"Failed\",\n Running = \"Running\",\n NotFound = \"NotFound\",\n}\n\nexport type StepInfo = {\n stepId: string;\n name: string;\n stepOutput: Record<string, any>;\n};\n\nexport type WorkflowStatusResponse = {\n instanceId: string;\n processName: string;\n parentId: string;\n status: WorkflowStatus;\n message: string;\n data: {\n completed: StepInfo[];\n running: StepInfo[];\n failed?: StepInfo[];\n };\n completedAt: string;\n error?: string;\n};\n\nexport type WorkflowStatusResponses = ReadonlyArray<WorkflowStatusResponse>;\n\nexport const getWorkflowInstanceStatusById = async (\n request: WorkflowStatusRequest,\n): Promise<WorkflowStatusResponses> => {\n try {\n const response = await apiClient.post(\n \"/workflow/instances/status\",\n request,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch workflow statuses\", status: 500 };\n }\n return response.data as WorkflowStatusResponses;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workflow statuses\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\nexport interface HttpTrigger {\n id?: string;\n name?: string;\n description?: string;\n url?: string;\n active?: boolean;\n metadata?: Record<string, any>;\n schema?: Record<string, any>;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n entityVersion?: number;\n _links?: Record<string, any>;\n}\n\n/**\n * Gets all HTTP triggers (webhooks) in the current workspace\n * @returns Promise<HttpTrigger[]> The list of HTTP triggers\n * @throws Error if the request fails\n */\nexport async function getAllHttpTriggers(): Promise<HttpTrigger[]> {\n try {\n const response = await apiClient.get(\"/http-trigger/get-all\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch HTTP triggers\", status: 500 };\n }\n\n return response.data as HttpTrigger[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching HTTP triggers\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFileUrlRequest {\n key: string;\n contentType: string;\n method: \"GET\" | \"PUT\" | \"POST\";\n}\n\nexport interface GetFileUrlResponse {\n url: string;\n}\n\n/**\n * Gets a signed URL for a file by its key\n * @param params - The file request parameters\n * @param params.key - The file key/path in storage\n * @param params.contentType - The content type of the file\n * @param params.method - The HTTP method (GET, PUT, POST)\n * @returns Promise<GetFileUrlResponse> The signed URL for the file\n * @throws Error if the request fails\n */\nexport async function getFileUrlByFileId({\n key,\n contentType,\n method,\n}: GetFileUrlRequest): Promise<GetFileUrlResponse> {\n try {\n const response = await apiClient.post(\"/file/url\", {\n key,\n contentType,\n method,\n });\n if (!response.data) {\n throw { message: \"Failed to get file URL\", status: 500 };\n }\n\n return { url: response.data };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while getting file URL\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import axios, { AxiosRequestConfig } from \"axios\";\nimport { apiClient } from \"../client\";\n\nexport interface FileUploadRequest {\n path?: string;\n contentType?: string;\n method?: string;\n data: any;\n}\n\nexport interface FileUploadResponse {\n fileId: string;\n}\n\n/**\n * Uploads a file to S3 using presigned URL\n * @param params - The file upload parameters\n * @param params.path - Optional: The S3 path/key (defaults to auto-generated)\n * @param params.contentType - Optional: Content type (defaults to 'application/json')\n * @param params.method - Optional: HTTP method (defaults to 'PUT')\n * @param params.data - Required: The data to upload\n * @returns Promise<FileUploadResponse> The file ID/path\n * @throws Error if the request fails\n */\nexport async function fileUpload({\n path,\n contentType,\n method,\n data,\n}: FileUploadRequest): Promise<FileUploadResponse> {\n try {\n if (!data || !path) {\n throw { message: \"Data is required\", status: 400 };\n }\n const response = await apiClient.post(\"/file/url\", {\n key: path,\n contentType,\n method,\n });\n\n if (!response.data) {\n throw { message: \"Failed to upload file\", status: 500 };\n }\n const fileUploadUrl = response.data;\n const config: AxiosRequestConfig = {\n method: method,\n url: fileUploadUrl,\n headers: {\n \"Content-Type\": contentType,\n },\n data: data,\n };\n await axios(config);\n return { fileId: path } as FileUploadResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while uploading file\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface FileDownloadRequest {\n fileId: string;\n contentType?: string;\n method?: \"GET\" | \"PUT\";\n}\n\n/**\n * Downloads a file from S3 using presigned URL\n * @param params - The file download parameters\n * @param params.fileId - Required: The S3 path/key of the file to download\n * @returns Promise<any> The file data\n * @throws Error if the request fails\n */\nexport async function fileDownload({\n fileId,\n contentType,\n method,\n}: FileDownloadRequest): Promise<any> {\n try {\n if (!fileId) {\n throw { message: \"File ID is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/file/url\", {\n key: fileId,\n contentType: contentType || \"application/json\",\n method: method || \"GET\",\n });\n\n if (!response.data) {\n throw { message: \"Failed to download file\", status: 500 };\n }\n const fileUrl = response.data;\n let fileName = fileId;\n try {\n fileName = fileId.split(\"/\").pop().split(\".\")?.[0];\n } catch (error: any) {}\n\n if (fileUrl) {\n const link = document.createElement(\"a\");\n link.href = fileUrl;\n link.download = fileId;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n return fileUrl;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while downloading file\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { CancelTokenSource } from \"axios\";\nimport { apiClient } from \"../client\";\n\nexport const runPublishedDefinition = async (props: {\n describe: string;\n sheet: { id: string; lastModifiedDate: string };\n variable: string;\n inputs: object;\n source?: CancelTokenSource;\n}) => {\n const { sheet, variable, inputs, describe, source } = props;\n\n if (!sheet) {\n throw new Error(`Definition is null`);\n }\n if (!variable) {\n throw new Error(`Variable is null`);\n }\n\n return apiClient.post(\n \"/definition/run-published\",\n {\n sheet: sheet,\n variable: variable,\n inputs: inputs,\n describe,\n },\n { cancelToken: source?.token },\n );\n};\n","import { apiClient } from \"../client\";\n\nexport const runSampleDefinition = async (props: {\n datasetId: string;\n dataFilter: \"valid_data\" | \"invalid_data\" | \"all_data\";\n duplicateColGroups?: string[];\n datasetType?: string;\n}) => {\n const { datasetId, dataFilter, duplicateColGroups, datasetType } = props;\n\n if (!datasetId) {\n throw new Error(`Dataset ID is null`);\n }\n if (!dataFilter) {\n throw new Error(`Data filter is null`);\n }\n\n return apiClient.post(\"/definition/run-sample\", {\n datasetId,\n dataFilter,\n duplicateColGroups,\n datasetType,\n });\n};\n","import { CancelTokenSource } from \"axios\";\nimport { Definition, Inputs } from \"$models/ui-models/definitionModel\";\nimport { apiClient } from \"../client\";\n\nexport const runDefinition = async (props: {\n inputs: Inputs;\n definition: Definition;\n variable: string;\n source?: CancelTokenSource;\n limit?: number;\n}) => {\n const { definition, variable, inputs, limit, source } = props;\n\n if (!definition) {\n throw {\n message: \"Definition is required for definition run\",\n status: 400,\n };\n }\n if (!variable) {\n throw {\n message: \"Variable name is required for definition run\",\n status: 400,\n };\n }\n if (!inputs) {\n throw {\n message: \"Inputs are required for definition run\",\n status: 400,\n };\n }\n\n try {\n const response = await apiClient.post(\n \"/definition/run\",\n { inputs, definition, variable, limit },\n { cancelToken: source?.token },\n );\n return response.data;\n } catch (error: any) {\n throw {\n message: error.response?.data?.message || \"Failed to run definition\",\n status: error.response?.status || 500,\n data: error.response?.data,\n };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getWorksheets = async (worksheetIds: string[]) => {\n try {\n const response = await apiClient.post(\"/worksheet/get-worksheets\", {\n ids: worksheetIds,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch worksheets details\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching worksheets details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getWorksheetsByType = async (type: Worksheet[\"type\"]) => {\n try {\n const response = await apiClient.post(\"/worksheet/get-worksheets-by-type\", {\n type,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch worksheets\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching worksheets\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","export function formatDate(date: Date): string {\n return date.toISOString().split(\"T\")[0];\n}\n","import type { CompactNotation, Currency } from '$models/common/localeUtils';\nimport type { HierarchyProperties, Workbook, Worksheet } from '$models/gen/Api';\nimport type { SelectOptionType } from '$models/types/selectType';\nimport type { DateRange } from '$models/ui-models/dateRangeModel';\nimport type {\n\tDefinition,\n\tFormatRule,\n\tGroupByHierarchyType,\n\tInputs,\n\tTimeBin\n} from '$models/ui-models/definitionModel';\nimport type { FilterRule } from '$models/ui-models/filterModel';\nimport { type YAxisCountEnum } from './chartModels';\nimport type { CrossFiltersModalDataType, DashboardBlockProperties } from './dashboardModel';\nimport { type InputTableDefinitionModel } from './inputTableModel';\nimport type { MapFxModel } from './mapFxModel';\nimport { type PortalDefinition } from './portalWidgetDefinition';\nimport { type ProcessDefinition } from './processDefinitionTypes';\nimport type { Report, StatementPlan } from './reportModel';\nimport { type DocumentTypeEnum } from './workspaceTreeModel';\n\nexport const DASHBOARD_TYPE = 'DASHBOARD';\nexport const STATEMENT_TYPE = 'STATEMENT';\nexport const PLAN_TYPE = 'PLAN';\n\nexport type BoardTypes = 'DASHBOARD' | 'STATEMENT' | 'PLAN';\nexport type WorkbookSheetTypes = 'WORKSHEET' | 'PIVOT' | 'METRIC' | 'STATEMENT';\n\nexport type ModelUpdateType = 'DEFINITION' | 'MODEL' | 'THUMBNAIL' | 'FAVORITE';\n\nexport type PivotProperties = {\n\trowGroup: any;\n\tcolGroup: any;\n};\n\nexport type TableMaps = Record<string, any[]>;\n\nexport type SheetCreationOptions = 'newSheet' | 'existingSheet';\nexport type LineType = 'PIVOT' | 'FORMULA';\n\nexport type MetricSeriesAdditional = {\n\tchartSettings: {\n\t\tdisplayMode: 'chart' | 'table';\n\t};\n\n\tconfiguration: {\n\t\tbinValue: string;\n\t\tdataField: string;\n\t\trowgroup: string[];\n\t\tvalues: string[];\n\t\tfilters: unknown;\n\t};\n};\n\nexport type ColumnSetting = {\n\tcurrency?: Currency;\n\tdateFormat?: string;\n\tfield: string; // data is reflected in the grid based on fields\n\theaderName: string; // header name is reflected in the grid\n\tprecision?: number; // set precision value\n\ttype?:\n\t\t| 'str'\n\t\t| 'f64'\n\t\t| 'i64'\n\t\t| 'date'\n\t\t| \"datetime(time_unit='us', time_zone=None)\"\n\t\t| 'datetime'\n\t\t| 'bool'\n\t\t| 'boolean'\n\t\t| 'Boolean'; // ex -> ['dateColumn', 'nonEditableColumn'], 'nonEditableColumn'\n\tclearFormatting?: boolean; // clear all formatting, including defaults\n\tvalueFormatter?: (params: any) => any; // formate the value\n\tvalueGetter?: (params: any) => any; // will have access to other params and can do calculations\n\theaderTooltip?: string; // tooltip for the header\n\theaderClass?: string | string[] | ((params: any) => string | string[] | undefined);\n\theaderComponent?: any; // custom header component\n\tcolId?: string; // unique id for the column - optional\n\tcheckboxSelection?: boolean; // if true, will have a checkbox in the column\n\tshowDisabledCheckboxes?: boolean; // if true, will show disabled checkbox, default -> false\n\ticons?: { [key: string]: Function | string };\n\tsuppressNavigable?: boolean; // et to true if this column is not navigable (i.e. cannot be tabbed into), otherwise false. Can also be a callback function to have different rows navigable.\n\tsuppressKeyboardEvent?: Function; //Allows the user to suppress certain keyboard events in the grid cell. See Suppress Keyboard Events.\n\thide?: boolean; // show hide the columns\n\tlockVisible?: boolean; //Set to true to block making column visible / hidden via the UI (API will still work).\n\tlockPosition?: boolean | 'left' | 'right'; //Lock a column to position to 'left' or'right' to always have this column displayed in that position. true is treated as 'left'\n\tsuppressMovable?: boolean; //Set to true to block moving this column via dragging\n\tmenuTabs?: string[]; // Set to an array containing zero, one or many of the following options: 'filterMenuTab' | 'generalMenuTab' | 'columnsMenuTab'. This is used to figure out which menu tabs are present and in which order the tabs are shown.\n\tsuppressMenu?: boolean; //Set to true to not show the column menu when the column header is right clicked.\n\tpinned?: boolean | 'left' | 'right' | null;\n\teditable?: boolean;\n\tcellClassRule?: {\n\t\t[key: string]: (params: any) => boolean;\n\t};\n\tenableRowGroup?: boolean;\n\tenablePivot?: boolean;\n\tenableValue?: boolean;\n\tunique_count?: number;\n\tcellRendererParams?: any;\n\tcellRenderer?: string | Function;\n\twidth?: number;\n\taggFunc?: string;\n\tisCurrency?: boolean;\n\tisPercentage?: boolean;\n\tisNumber?: boolean;\n\tshowAs?: ShowAsType | CustomCalculationsShowAsType;\n\tminWidth?: number;\n\tcellClass?: string | string[] | ((params: any) => string | string[] | undefined);\n\tcellDataType?: boolean;\n\tsheetName?: string;\n\tisFormulaColumn?: boolean;\n\tisLookupColumn?: boolean;\n\tisJoinColumn?: boolean;\n\tcompactNotation?: CompactNotation;\n\tdatasetId?: string;\n\tdatasetName?: string;\n\tcolumnGroup?: string;\n\tcolumnGroupShow?: 'open' | 'closed';\n\tmarryChildren?: boolean;\n\tchildren?: ColumnSetting[];\n\tgroupId?: string;\n\tmetaData?: {\n\t\tdateColGroup?: string;\n\t};\n};\n\nexport enum ShowAsEnum {\n\tDEFAULT = 'default',\n\tROW = 'row',\n\tCOLUMN = 'column',\n\tGRAND_TOTAL = 'grandTotal'\n}\n\nexport enum CustomCalculationShowAsEnum {\n\tNONE = 'none',\n\tFORMULA = 'formula',\n\tAGGREGATE = 'aggregate'\n}\n\nexport type UiSettings = {\n\tfontSize?: number;\n\tdecimalPlaces?: {\n\t\t[colId: string]: number;\n\t};\n\tcolumnSettings?: ColumnSetting[];\n};\n\nexport type CustomModel = {};\nexport type LookupSetting = {\n\tleftCol: string;\n\trightCol: string;\n\trightSheetId: string;\n\tselectedColumns: { col: string; alias: string }[];\n};\n\nexport type XLookupSetting = {\n\tlookup_sheet_id: string;\n\tlookup_col: string;\n\tlookup_sheet: string;\n\twith_col: string;\n\treturn_col: string; // this is the id of the column in the lookup sheet\n\tsort_col?: string;\n\tsort_order?: string;\n\tselection_mode?: boolean;\n\treturn_col_id?: string; // this is the id of the column in the current sheet\n};\n\nexport type WorkbookCustomModel = {\n\tinputs?: Inputs;\n\tvariable?: string;\n\tfilterColumnsBy?: FilterColumnsBy;\n\tdateRange?: DateRange;\n\tuiSettings?: UiSettings;\n\tworksheetType?: 'TableSheet';\n\tdatasetId?: string;\n\tdatasetName?: string;\n\tparentTableColumnSettings?: ColumnSetting[];\n\tcurrency?: string;\n\tlookupSettings?: LookupSetting[];\n\tformatSettings?: FormatRule[];\n\txLookupSettings?: XLookupSetting[];\n\tsortOptions?: SortOptionsForWorkbook;\n};\n\nexport type ReconWorkbookCustomModel = WorkbookCustomModel & {\n\tdateColumn?: string;\n};\n\nexport type RowGroupsType = Array<string | string[]>;\n\nexport type GridColumnState = {\n\tvalueCols: ValueColsType[];\n\tfilterModel: any;\n\trowGroupCols: RowGroupsType;\n\tpivotCols: string[];\n};\n\nexport type SortOptions = {\n\tsortByField: SelectOptionType | undefined;\n\tsortByOrder: 'asc' | 'desc';\n\t/** Intervals to sort data based on (for trends) */\n\tpivotFilters?: string[];\n};\nexport type SortOptionsForWorkbook = {\n\tsortByField: SelectOptionType | undefined | SelectOptionType[];\n\tsortByOrder: 'asc' | 'desc' | undefined | ('asc' | 'desc')[];\n};\n\nexport type LimitOptions = {\n\tlimit: number;\n\tlimitFrom: 'top' | 'bottom';\n};\n\nexport type PivotCustomModel = WorkbookCustomModel & {\n\tchartType?: string;\n\tparentTableId: string;\n\tgridColumnState?: GridColumnState;\n\tparentTableVariable: string;\n\ttimeBin?: TimeBin | '';\n\tcompareTrends?: Array<{ id: string; name: string; dateRange: DateRange }>;\n\tdateColumn?: string;\n\tdatasetId: string;\n\tdatasetName: string;\n\thierarchy?: HierarchyProperties;\n\tcurrency?: string;\n\tsortOptions?: SortOptions;\n\tlimitOptions?: LimitOptions;\n\tcolorPalette?: string;\n\tsettings?: any;\n\tcolumnWidth?: any;\n\tshowDimensionMappingValues?: boolean;\n\tshowBinSortOrderValues?: boolean;\n\tplotAsTrendsOrder?: 'asc' | 'desc' | 'none';\n\tpivotColumnFormatMap?: Record<string, ColumnSetting>;\n\t/** Used in workbook context. Portal/dashboard contexts use metadata.hideValueSubHeader instead. */\n\thideValueSubHeader?: boolean;\n\t/** When true, parent worksheet's sort and filters are applied to the metric */\n\tapplyFiltersFromSheet?: boolean;\n};\n\nexport type MetricViewMode = 'grid' | 'chart' | 'geomap';\n\nexport type TableCustomModel = WorkbookCustomModel & {\n\tcolumns?: string[];\n};\n\nexport type LineCustomModel = WorkbookCustomModel & {\n\tparentTableVariable?: string;\n\tparentTableId?: string;\n\tvalueCols?: ValueColsType[];\n\tallValueCols?: ValueColsType[];\n\tfilterModel?: any;\n\ttimeBin?: TimeBin;\n\tdateColumn?: string;\n\tgroupBy?: string[];\n\tpivotCols?: string[];\n};\n\nexport type Line = {\n\tid: string;\n\ttype: LineType;\n\tsheetId?: string;\n\tvariable?: string;\n\tinputs?: any;\n\tcustomModel?: LineCustomModel;\n\tdefinitionModel?: Definition;\n\tdisplayName?: string;\n\tformula?: string;\n\tlastModifiedDate?: string;\n\tpublishedVersion?: number;\n\tcurrency?: Currency;\n\tprecision?: number;\n\tdateFormat?: string;\n\tclearFormatting?: boolean;\n};\nexport type ShowAsType = 'default' | 'row' | 'column' | 'grandTotal';\nexport type CustomCalculationsShowAsType = 'none' | 'formula' | 'aggregate';\nexport type PivotGridDisplayType = { gridData: any[]; gridColumns: any[] };\nexport type ValueColsType = {\n\tlabel?: string;\n\tcol: string;\n\taggFun?: string;\n\tformula?: string;\n\tcurrency?: Currency;\n\tprecision?: number;\n\tnumberFormat?: string;\n\tdateFormat?: string;\n\tclearFormatting?: boolean;\n\timpact?: 'positive' | 'negative';\n\tchartColorBasedOnImpact?: boolean;\n\ttype?: 'value' | 'formula' | 'column';\n\tisCurrency?: boolean;\n\tisPercentage?: boolean;\n\tisNumber?: boolean;\n\tshowAs?: ShowAsType | CustomCalculationsShowAsType;\n\tisAmortize?: boolean;\n\thide?: boolean;\n\tcompactNotation?: CompactNotation;\n\thideGrandTotal?: boolean;\n\tsourceLabel?: string; // Label of the valueCol this is based/derived from\n\tcompareTrendId?: string;\n\tshowRowTotal?: boolean;\n};\nexport type Section = {\n\tid: string;\n\theader: string;\n\tlines: Line[];\n};\n\nexport type Statement = {\n\tsections: Section[];\n\tformulaColumns?: string[];\n\ttimeBinOption: { label: string; value: TimeBin };\n\tinputs?: Inputs;\n};\n\nexport type DashboardDateRangeModel = {\n\tdateRange: DateRange;\n\tappliedOnBlocks: { blockId: string; blockName: string; applied: boolean }[];\n};\n\nexport type BoardCurrencyModel = {\n\tcurrency: string;\n\tappliedOnBlocks: { blockId: string; blockName: string; applied: boolean }[];\n};\n\nexport type Sheet<\n\tT extends CustomModel = any,\n\tD extends\n\t\t| Definition\n\t\t| MapFxModel\n\t\t| Report\n\t\t| ProcessDefinition\n\t\t| PortalDefinition\n\t\t| StatementPlan\n\t\t| InputTableDefinitionModel = Definition\n> = Worksheet & {\n\tcustomModel?: T;\n\tdefinitionModel?: D;\n};\n\n//Same model for Board and Workbook\nexport type WorkbookModel<T extends CustomModel = any, Y = any> = Omit<Workbook, 'sheets'> & {\n\tsheets: Sheet<T, Y>[];\n};\n\nexport type FilterBy = 'value' | 'condition';\n\nexport type FilterColumnsBy = { [column: string]: FilterBy };\n\nexport type WeakLinkType = {\n\tdocumentId: string;\n\tsheetId: string;\n\ttype: DocumentTypeEnum.WORKBOOK | DocumentTypeEnum.STATEMENT;\n};\n\nexport type MetricMetadataType = {\n\tparentTableVariable?: string;\n\tvariable: string;\n\tdatasetId?: string;\n\tdatasetName?: string;\n\tcolumnSettings: ColumnSetting[];\n\tdateColumn?: string;\n\tdateRange?: DateRange;\n\tfilterColumnsBy?: FilterColumnsBy;\n\tinputs: Inputs;\n\taliases?: { [key: string]: string };\n\tvalueCols?: ValueColsType[];\n\tfilterModel?: FilterRule | [];\n\trowGroupCols?: RowGroupsType;\n\tpivotCols?: string[];\n\ttimeBin?: TimeBin | '';\n\thierarchy?: HierarchyProperties;\n\tcurrency?: string;\n\tsortOptions?: SortOptions;\n\tlimitOptions?: LimitOptions;\n\tlastModifiedDate?: string;\n\tdescription?: string;\n\tscore?: string;\n\tisKPI?: boolean;\n\tcrossFilterModel?: CrossFiltersModalDataType;\n\tviewFilterModel?: any;\n\thierarchyCol?: GroupByHierarchyType;\n\tweakLink?: WeakLinkType;\n\tstringValue?: boolean;\n\tcompareTrends?: Array<{ id: string; name: string; dateRange: DateRange }>;\n\tshowDimensionMappingValues?: boolean;\n\tshowBinSortOrderValues?: boolean;\n\tplotAsTrendsOrder?: 'asc' | 'desc' | 'none';\n\tpivotColumnFormatMap?: Record<string, ColumnSetting>;\n\tcolumnWidth?: Record<string, number>;\n\t/** Used in portal/dashboard context. Workbook context uses customModel.hideValueSubHeader directly. */\n\thideValueSubHeader?: boolean;\n};\n\n/**\n * Settings for configuring geographical map visualizations.\n * @property {string} country - The country for which the map is displayed (currently supports 'India').\n * @property {string} cityColumn - The column containing city names.\n * @property {string} aggregateByCol - The column to aggregate data by.\n * @property {string[]} showInTooltip - Fields to display in the tooltip.\n * @property {string[]} fieldToIndicateZeroValues - Fields that should be highlighted when zero.\n * @property {string} fillColor - The color used to fill the markers.\n * @property {string} borderColor - The color used for marker borders.\n */\nexport type GeomapSettings = {\n\tcountry: string;\n\tcityColumn: string;\n\taggregateByCol: string;\n\tshowInTooltip: string[];\n\tfieldToIndicateZeroValues: string[];\n\tfillColor: string;\n\tborderColor: string;\n};\n\ntype FunnelChartSortOrder = 'descending' | 'ascending' | 'none';\n\nexport type FunnelChartSettings = {\n\thideLabels: boolean;\n\tselectedValueColumn: string;\n\tsortOrder: FunnelChartSortOrder;\n\tmin: number;\n\tmax: number;\n};\n\nexport type MetricSettingsType = {\n\tchartType?: string;\n\thideTooltipHeader?: boolean;\n\tchartTypeBeforeDrilldown?: string;\n\tviewMode: MetricViewMode;\n\tcolorPalette?: string;\n\taxisDistributionType?: 'value' | 'log';\n\tyAxisCount?: YAxisCountEnum;\n\tlabelPosition?: string;\n\tlabelRotation?: string;\n\twaterfallParentMapping?: Record<string, string>;\n\tgeomapSettings?: GeomapSettings;\n\tfunnelChartSettings?: FunnelChartSettings;\n\tchartSettings?: Record<string, any>;\n};\n\nexport type DashboardProperties = { [cols in number]?: DashboardBlockProperties };\n\nexport type MetricCustomModel = DashboardProperties & {\n\tmetadata: MetricMetadataType;\n\tsettings: MetricSettingsType;\n\taddedMode?: 'imported' | 'created';\n};\n","import type { SelectOptionType } from \"$models/types/selectType\";\nimport {\n operatorsWithIsNotTrue,\n type FilterRule,\n type FilterSelectOptionsType,\n type FilterUniqueValueSelectOptionsType,\n type RuleType,\n} from \"$models/ui-models/filterModel\";\nimport {\n FilterColumnsBy,\n ValueColsType,\n} from \"$models/ui-models/workbookModel\";\nimport { Operator } from \"$models/ui-models/filterModel\";\nimport _ from \"lodash\";\n\nexport type FilterPanelStoreType = {\n defaultType: Omit<RuleType, \"cond\">;\n rules: FilterSelectOptionsType[];\n};\n\nconst defaultFilterPanel: FilterRule = {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n};\n\nexport const filterToSelectOptionType = (\n filter: FilterRule,\n columns: SelectOptionType[],\n): FilterPanelStoreType => {\n const rules: FilterRule[] = (filter?.rules as FilterRule[]) || [];\n\n if (!rules || rules.length === 0) {\n return {\n defaultType: \"and_cond\",\n rules: [],\n };\n }\n\n const selectOptionsForRules: FilterSelectOptionsType[] = rules.map((rule) =>\n getSelectionOptionsFromFilter(rule, columns),\n );\n return {\n defaultType: (filter?.rule_type as Omit<RuleType, \"cond\">) || \"and_cond\",\n rules: selectOptionsForRules,\n };\n};\n\nexport const getSelectionOptionsFromFilter = (\n rule: FilterRule,\n columns: SelectOptionType[],\n): FilterSelectOptionsType => {\n if (_.isEmpty(rule?.rules)) {\n const col = columns.find(\n (column) => column.label === rule.col || column.value === rule.col,\n );\n\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValues: [\n {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n uniqueValue: rule?.value as string | number | boolean,\n operator: rule?.operator,\n ruleType: rule?.rule_type || \"cond\",\n isNot: rule?.is_not || false,\n caseSensitive: rule?.is_case_sensitive ?? true,\n },\n },\n ],\n uniqueValueCount: col?.option?.uniqueCount,\n type: col?.option?.type,\n ruleType: rule?.rule_type || \"cond\",\n },\n };\n }\n const col = columns?.find(\n (column) =>\n column.label === rule?.rules?.[0]?.col ||\n column.value === rule?.rules?.[0]?.col,\n );\n const isValueFilter =\n _.get(rule, \"rules.0.operator\", null) === \"in_op\" &&\n _.get(rule, \"rules.0.value\", null);\n if (isValueFilter) {\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValues:\n rule?.rules?.[0]?.value?.map((r: string) => {\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValue: r,\n operator: \"equal\",\n ruleType: \"cond\",\n isNot: false,\n caseSensitive: true,\n },\n };\n }) || [],\n uniqueValueCount: col?.option?.uniqueCount,\n type: col?.option?.type,\n ruleType: rule?.rule_type || \"cond\",\n },\n };\n }\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValues:\n rule?.rules?.map((r: FilterRule) => {\n const childCol = columns?.find((column) => column.value === r.col);\n return {\n label: childCol?.label || \"\",\n value: childCol?.value || \"\",\n option: {\n aggFun: childCol?.option?.aggFun,\n uniqueValue: r?.value as string | number | boolean,\n operator: r?.operator,\n ruleType: r?.rule_type || \"cond\",\n isNot: r?.is_not || false,\n caseSensitive: r?.is_case_sensitive ?? true,\n },\n };\n }) || [],\n uniqueValueCount: col?.option?.uniqueCount,\n type: col?.option?.type,\n ruleType: rule?.rule_type || \"cond\",\n },\n };\n};\n\nexport const getSelectOptionTypeToFilter = (\n filter: FilterPanelStoreType,\n filterColumnsBy?: FilterColumnsBy,\n): FilterRule => {\n const rules: FilterSelectOptionsType[] = filter?.rules;\n const defaultRuleType = filter?.defaultType;\n\n if (!rules || rules.length === 0) {\n return defaultFilterPanel;\n }\n\n let filterRules: FilterRule[] = rules?.map((rule) =>\n getFilterRuleFromSelectionOptions(rule, filterColumnsBy),\n );\n\n if (\n filterRules.length === 1 &&\n filterRules[0].rules &&\n filterRules[0].rules.length < 1\n ) {\n filterRules = [];\n }\n\n return {\n is_not: false,\n rule_type: defaultRuleType as RuleType,\n rules: filterRules,\n };\n};\n\nexport const getFilterRuleFromSelectionOptions = (\n rule: FilterSelectOptionsType,\n filterColumnsBy?: FilterColumnsBy,\n): FilterRule => {\n if (\n filterColumnsBy?.[rule.value] === \"value\" ||\n rule?.option?.uniqueValues?.length > 2\n ) {\n return {\n rule_type: \"or_cond\",\n rules: [\n {\n col: rule.value,\n value: _.map(\n rule?.option?.uniqueValues || [],\n (r) => r.option.uniqueValue,\n ),\n operator: \"in_op\",\n rule_type: \"cond\",\n is_not: false,\n is_case_sensitive: true,\n },\n ],\n is_not: false,\n };\n }\n if (rule?.option?.uniqueValues?.length === 1) {\n const uniqueValue = rule?.option?.uniqueValues?.[0];\n return {\n col: rule.value,\n value: uniqueValue?.option?.uniqueValue,\n operator: uniqueValue?.option?.operator,\n rule_type: uniqueValue?.option?.ruleType ?? \"cond\",\n is_not: uniqueValue?.option?.isNot ?? false,\n is_case_sensitive: uniqueValue?.option?.caseSensitive ?? true,\n };\n }\n return {\n rule_type: rule?.option?.ruleType,\n rules: (rule?.option?.uniqueValues || []).map(\n (r: FilterUniqueValueSelectOptionsType) => {\n return {\n col: r.value,\n value: r.option?.uniqueValue,\n operator: r.option?.operator,\n rule_type: r.option?.ruleType ?? \"cond\",\n is_not: r.option?.isNot ?? false,\n is_case_sensitive: r.option?.caseSensitive ?? true,\n };\n },\n ),\n is_not: false,\n };\n};\n\nexport const getFilterRulesFromFilterSelectOptionsMap = (\n filterSelectOptionsMap: {\n [filterId: string]: FilterSelectOptionsType;\n },\n filterColumnsBy: FilterColumnsBy,\n): {\n combinedFilterRule: FilterRule;\n columnFilterRule: FilterRule;\n aggFilterRule: FilterRule;\n} => {\n const filterSelectOptionsMapForAgg = _.pickBy(\n filterSelectOptionsMap,\n (o) => !_.isEmpty(o.option.aggFun),\n );\n const filterSelectOptionsMapForFilters = _.pickBy(\n filterSelectOptionsMap,\n (o) => _.isEmpty(o.option.aggFun),\n );\n\n const filterSelectOption: FilterPanelStoreType = {\n defaultType: \"and_cond\" as RuleType,\n rules: Object.values(filterSelectOptionsMap),\n };\n\n const filterSelectOptionWithoutAgg: FilterPanelStoreType = {\n defaultType: \"and_cond\" as RuleType,\n rules: Object.values(filterSelectOptionsMapForFilters),\n };\n const filterSelectOptionForAgg: FilterPanelStoreType = {\n defaultType: \"and_cond\" as RuleType,\n rules: Object.values(filterSelectOptionsMapForAgg),\n };\n\n const columnFilterRule = getSelectOptionTypeToFilter(\n filterSelectOptionWithoutAgg,\n filterColumnsBy,\n );\n const combinedFilterRule = getSelectOptionTypeToFilter(\n filterSelectOption,\n filterColumnsBy,\n );\n const aggFilterRule = getSelectOptionTypeToFilter(\n filterSelectOptionForAgg,\n filterColumnsBy,\n );\n\n return {\n combinedFilterRule,\n columnFilterRule,\n aggFilterRule,\n };\n};\n\nexport const getColumnFilterRuleFromCombinedFilterRule = (\n combinedFilterRule: FilterRule,\n valueCols: ValueColsType[],\n): FilterRule => {\n const filterRules: FilterRule[] = combinedFilterRule?.rules ?? [];\n const columnFilterRules: FilterRule[] = [];\n\n _.forEach(filterRules, (rule) => {\n const valueCol = valueCols?.find(\n (valueCol) => rule?.col === valueCol?.label,\n );\n if (!valueCol) {\n columnFilterRules.push(rule);\n }\n });\n\n return {\n ...combinedFilterRule,\n rules: columnFilterRules,\n };\n};\n\nexport const getAggregateFilterRuleFromCombinedFilterRule = (\n combinedFilterRule: FilterRule,\n valueCols: ValueColsType[],\n): FilterRule => {\n const filterRules: FilterRule[] = combinedFilterRule?.rules ?? [];\n const aggFilterRules: FilterRule[] = [];\n\n _.forEach(filterRules, (rule) => {\n const valueCol = valueCols?.find(\n (valueCol) => rule?.col === valueCol?.label,\n );\n if (valueCol) {\n aggFilterRules.push(rule);\n }\n });\n\n return {\n ...combinedFilterRule,\n rules: aggFilterRules,\n };\n};\n\nexport const getIsNotValueForPredicateType = (predicateType: Operator) => {\n return _.includes(operatorsWithIsNotTrue, predicateType);\n};\n","import { type Section } from './reportModel';\nimport { type ColumnFilterRule } from '$models/gen/Api';\n\nexport type BaseTransform = {\n\ttype: string;\n};\n\nexport type Pivot = BaseTransform & {\n\ttable: string;\n\tvalues: string | string[];\n\tcol_groups: string | string[];\n\trow_groups: string | string[];\n\taggregate_fn: string;\n};\n\nexport type TimeBin = 'per_day' | 'per_week' | 'per_month' | 'per_quarter' | 'per_year';\n\nexport type DateRange =\n\t| 'current_week'\n\t| 'current_month'\n\t| 'current_quarter'\n\t| 'current_year'\n\t| 'previous_week'\n\t| 'previous_month'\n\t| 'previous_quarter'\n\t| 'previous_year'\n\t| 'past_week'\n\t| 'past_month'\n\t| 'past_quarter'\n\t| 'past_year'\n\t| 'custom_period'\n\t| 'all';\n\nexport type MetricAggregateType =\n\t| [alias: string, formula: string]\n\t| [alias: string, col: string, func: string];\n\nexport type InputTableMetricAggregateType = Record<string, [string, string]>;\n\nexport type ProjectFractionType =\n\t| 'FRACTION_OF_COL_TOTAL'\n\t| 'FRACTION_OF_ROW_TOTAL'\n\t| 'FRACTION_OF_GRAND_TOTAL';\n\nexport enum ProjectFractionEnum {\n\tFRACTION_OF_COL_TOTAL = 'FRACTION_OF_COL_TOTAL',\n\tFRACTION_OF_ROW_TOTAL = 'FRACTION_OF_ROW_TOTAL',\n\tFRACTION_OF_GRAND_TOTAL = 'FRACTION_OF_GRAND_TOTAL',\n\tNONE = 'null',\n\tTOTAL_OF_FORMULA = 'TOTAL_OF_FORMULA',\n\tTOTAL_OF_AGGREGATE = 'TOTAL_OF_AGGREGATE'\n}\n\nexport type ProjectAsType = {\n\t[valueColName: string]: ProjectFractionType;\n};\n\nexport type MetricSeries = BaseTransform & {\n\ttable: string;\n\tdate_column: string;\n\taggregates: MetricAggregateType[];\n\tformula_on_aggregates: [alias: string, formula: string][];\n\tfilter_on_aggregates?: FilterRule;\n\tbin_by: string; // because we are passing it as variable now\n\tgroup_by: string[] | string;\n\trow_group_by?: string[] | string;\n\tcol_group_by?: string[] | string;\n\trequire_totals?: boolean;\n\tproject_as?: string | ProjectAsType; // because we are passing it as variable now\n\tshow_dimension_mapping_values?: boolean;\n\tbin_order_by_desc?: boolean; // because we are passing it as variable now\n\tgroups_sort_order?: [string, 'asc' | 'desc'][];\n};\n\nexport type Load = {\n\tloc: string;\n\tto: string;\n\tfs_options: any;\n};\n\nexport type Import = {\n\tloc: string;\n\tto: string;\n\timport_type: 'dataset' | 'definition';\n\tfrom_var?: string;\n\tdate_column_filter?:\n\t\t| {\n\t\t\t\ttime_period: DateRange;\n\t\t\t\tstart_date?: string;\n\t\t\t\tend_date?: string;\n\t\t }\n\t\t| string;\n\tto_currency?: string;\n\trate_type?: string;\n};\n\nexport type AddColumn = BaseTransform & {\n\ttype: 'AddColumn';\n\ttable: string;\n\n\tcol: string;\n\n\texpr: string;\n};\nexport type ManageColumns = BaseTransform & {\n\ttype: 'ManageColumns';\n\ttable: string;\n\tcols: string[];\n};\n\nexport type RenameColumn = BaseTransform & {\n\ttype: 'RenameColumn';\n\ttable: string;\n\n\t//TODO : Check fxRuntime Types\n\tcol: string;\n\n\tbefore: string;\n\n\tafter: string;\n};\n\nexport type SourceDataset = BaseTransform & {\n\ttype: 'SourceDataset';\n\ttable: string;\n\tcols: string[];\n};\n\nexport type View = BaseTransform & {\n\ttype: 'View';\n\ttable: string;\n\tcols: string[] | string;\n};\n\ntype RuleType = 'or_cond' | 'and_cond' | 'cond';\n\nexport type RuleOp =\n\t| 'starts_with'\n\t| 'ends_with'\n\t| 'like'\n\t| 'contains'\n\t| 'equal'\n\t| 'greater'\n\t| 'greater_equal'\n\t| 'less'\n\t| 'less_equal'\n\t| 'in_op';\n\nexport type FilterRule = {\n\trule_type: RuleType;\n\tcol?: string;\n\toperator?: RuleOp;\n\tvalue?: string | number | boolean | string[];\n\trules?: FilterRule[];\n\tis_not: boolean;\n\tis_empty?: boolean;\n\tis_null?: boolean;\n\tis_case_sensitive: boolean;\n\tignore_if_col_not_exists?: boolean;\n\tfilter_mode?: 'condition' | 'values';\n};\n\nexport type Filter = BaseTransform & {\n\ttable: string;\n\texpr: string;\n};\n\nexport type RuleFilter = BaseTransform & {\n\ttable: string;\n\trule: ColumnFilterRule | string;\n};\n\nexport type Sort = BaseTransform & {\n\ttable: string;\n\n\tcol: string[];\n\n\tasc: boolean[];\n\n\tpivot_inputs: {\n\t\tpivot_filters: FilterRule[];\n\t\tpivot_columns: string[];\n\t\tpivot_groups: { [key: string]: 'ASC' | 'DESC' };\n\t};\n};\n\nexport type Metric = BaseTransform & {\n\ttable: string;\n\n\taggregates: Aggregates;\n\n\tgroup_by: string | string[];\n};\n\nexport type Merge = BaseTransform & {\n\ttables: string[];\n};\n\nexport type JoinTransformHow = 'left' | 'right';\n\nexport type Join = BaseTransform & {\n\tleft: string;\n\n\tright: string;\n\n\tleft_on: string;\n\n\tright_on: string;\n\n\thow: JoinTransformHow;\n\n\tallow_duplication: boolean;\n\n\tright_cols?: string[];\n\n\tright_aliases?: string[];\n};\n\nexport type Transform<T extends BaseTransform> = T;\nexport type TransformStrings =\n\t| 'addColumn'\n\t| 'renameColumn'\n\t| 'view'\n\t| 'join'\n\t| 'metric'\n\t| 'filter'\n\t| 'sort'\n\t| 'merge'\n\t| 'pivot'\n\t| 'metric'\n\t| 'metricseries';\nexport type AvailableTransform =\n\t| AddColumn\n\t| RenameColumn\n\t| View\n\t| Filter\n\t| Sort\n\t| Metric\n\t| Merge\n\t| Join\n\t| Pivot\n\t| MetricSeries\n\t| RuleFilter;\n\nexport type Variable = {\n\tname: string;\n\ttransforms: AvailableTransform[];\n};\n\nexport type Aggregates = Record<string, string[]>;\n\nexport type Permission = any;\n\ntype Principal = {\n\tname: string;\n\n\tptype: string;\n};\n\nexport type Export = {\n\ttable: string;\n\n\tassignments?: (Principal | Permission[])[];\n\n\tentry_key: string;\n\n\ttags?: string[];\n};\n\nexport type TableColMap = {\n\ttables: any[];\n\tcolumns: Record<string, string[]>;\n};\n\ntype ColId = string;\nexport type Inputs = {\n\t[key: string]: any;\n};\n\nexport type Table = { data: any[]; to: string };\nexport type Definition = {\n\tinputs?: {\n\t\t[key: string]: any;\n\t};\n\taliases?: {\n\t\t[tableName: string]: { [alias: string]: ColId };\n\t};\n\timports?: Import[];\n\n\tloads?: Load[];\n\n\tvariables?: Variable[];\n\n\tpermissions?: Permission[];\n\n\texports?: Export[];\n\n\ttables?: Table[];\n\n\tsections?: Section[];\n};\n\nexport type DescriptionResultWithUniqueCount = {\n\tname: string;\n\tdata_type:\n\t\t| 'str'\n\t\t| 'f64'\n\t\t| 'i64'\n\t\t| 'date'\n\t\t| \"datetime(time_unit='us', time_zone=None)\"\n\t\t| 'datetime'\n\t\t| 'bool'\n\t\t| 'boolean'\n\t\t| 'Boolean';\n\tcount: number;\n\tunique_count: number;\n\tis_currency_column: boolean;\n\tdatasetId: string;\n\tdatasetName: string;\n};\n\nexport type DescriptionResultWithoutUniqueCount = {\n\tname: string;\n\tdata_type: string;\n\tis_currency_column: boolean;\n\tdatasetId: string;\n\tdatasetName: string;\n};\n\nexport type DescriptionResult =\n\t| DescriptionResultWithoutUniqueCount\n\t| DescriptionResultWithUniqueCount;\n\nconst CURRENT_WEEK = 'current_week';\nconst CURRENT_MONTH = 'current_month';\nconst CURRENT_QUARTER = 'current_quarter';\nconst CURRENT_YEAR = 'current_year';\nconst PREV_WEEK = 'previous_week';\nconst PREV_MONTH = 'previous_month';\nconst PREV_QUARTER = 'previous_quarter';\nconst PREV_YEAR = 'previous_year';\nconst PAST_WEEK = 'past_week';\nconst PAST_MONTH = 'past_month';\nconst PAST_QUARTER = 'past_quarter';\nconst PAST_YEAR = 'past_year';\nconst CUSTOM = 'custom_period';\n\nexport type FormatRule = {\n\tid: string;\n\trule_type: RuleType;\n\tcol: string;\n\toperator: RuleOp;\n\tvalue: string | number | Date;\n\t// rules?: FilterRule[];\n\tis_not: boolean;\n\tcolor_hex: [string, string];\n\tcase_sensitive: boolean;\n};\n\nexport type GroupByHierarchyType = {\n\talias: string;\n\ttype: string;\n\tlookup_col: string;\n\ttable: string;\n\tlevel?: number;\n\tparent?: string;\n\tfilter: FilterRule;\n\tinclude_parents: boolean;\n\tuse_as: string;\n};\n","import { generatePushID } from \"$models/common/pushId\";\nimport {\n getFxUdescribeApi,\n getFxUniqueColumnValuesApi,\n runDefinitionApi,\n runPublishedDefinitionApi,\n} from \"$models/fx/fxApi\";\nimport type { DatasetImportMetadata } from \"$models/gen/Api\";\nimport type { SelectOptionType } from \"$models/types/selectType\";\nimport type { BlockSheetCustomModel } from \"$models/ui-models/dashboardModel\";\nimport type { DateRange } from \"$models/ui-models/dateRangeModel\";\nimport {\n ProjectFractionEnum,\n Transform,\n Sort,\n type Definition,\n type DescriptionResult,\n type DescriptionResultWithUniqueCount,\n type Import,\n type Inputs,\n type RuleFilter,\n type TimeBin,\n type Variable,\n type View,\n MetricSeries,\n} from \"$models/ui-models/definitionModel\";\nimport type {\n CommonFilter,\n FilterPanelStoreType,\n FilterRule,\n FilterSelectOptionsType,\n FilterUniqueValueSelectOptionsType,\n RuleType,\n} from \"$models/ui-models/filterModel\";\nimport {\n CustomCalculationShowAsEnum,\n ShowAsEnum,\n WorkbookCustomModel,\n type ColumnSetting,\n type FilterColumnsBy,\n type GridColumnState,\n type MetricCustomModel,\n type MetricMetadataType,\n type PivotCustomModel,\n type Sheet,\n type SortOptions,\n type ValueColsType,\n} from \"$models/ui-models/workbookModel\";\n\nimport _ from \"lodash\";\nimport { findVariable } from \"./variableUtils\";\nimport { buildVariable } from \"./buildVariable\";\nimport {\n filterToSelectOptionType,\n getAggregateFilterRuleFromCombinedFilterRule,\n getColumnFilterRuleFromCombinedFilterRule,\n getSelectOptionTypeToFilter,\n} from \"./filterUtils\";\nimport { getInputName } from \"./inputNameUtil\";\nimport { getDisplayName } from \"./displayNamesUtil\";\nimport type {\n LimitOptions,\n RowGroupsType,\n} from \"$models/ui-models/workbookModel\";\n\nexport type MetricToolPanelType = {\n pivotCols: string[];\n rowGroupCols: RowGroupsType;\n valueCols: ValueColsType[];\n sortOptions: SortOptions;\n limitOptions: LimitOptions;\n filterModel: FilterRule | [];\n dateRange?: DateRange;\n timeBin: TimeBin | \"\";\n currency?: string;\n compareTrends?: Array<{\n id: string;\n name: string;\n dateRange: DateRange;\n }>;\n showDimensionMappingValues?: boolean;\n plotAsTrendsOrder?: \"asc\" | \"desc\" | \"none\";\n showBinSortOrderValues?: boolean;\n};\n\nconst getValuesForSpecialOperators = (op: string) => {\n switch (op) {\n case \"not_equal\":\n return { operator: \"equal\", isNot: true };\n case \"not_contains\":\n return { operator: \"contains\", isNot: true };\n case \"is_empty\":\n return { value: \"\", operator: \"equal\", isNot: false };\n case \"is_not_empty\":\n return { value: \"\", operator: \"equal\", isNot: true };\n case \"is_null\":\n return { value: null, operator: \"equal\", isNot: false };\n case \"is_not_null\":\n return { value: null, operator: \"equal\", isNot: true };\n default:\n return {};\n }\n};\n\nexport const getPivotGridData = async (props: {\n inputs: Inputs;\n definitionModel: Definition;\n variableName: string;\n valueCols?: ValueColsType[];\n}) => {\n const { inputs, definitionModel, variableName, valueCols } = props;\n\n return runDefinitionApi(inputs, definitionModel, variableName);\n};\n\nexport const replaceFilterColumn = (props: {\n fr: FilterSelectOptionsType[];\n column: SelectOptionType<ColumnSetting>;\n}) => {\n const { fr, column } = props;\n\n const updatedFr = _.map(fr, (f) => {\n let newFr = { ...f, label: column?.label, value: column?.value };\n if (newFr.option.uniqueValues) {\n _.map(newFr.option.uniqueValues, (u) => {\n u.label = column?.label;\n u.value = column?.value;\n });\n }\n return newFr;\n });\n\n return updatedFr;\n};\n\nexport const mergeCommonFilters = (props: {\n commonFilters: CommonFilter[];\n rule: FilterSelectOptionsType[];\n condition: RuleType;\n lineId: string;\n}) => {\n const { commonFilters, rule, lineId, condition } = props;\n let replacedFr: FilterSelectOptionsType[][] = [];\n if (_.isEmpty(commonFilters)) return { defaultType: condition, rules: rule };\n _.forEach(commonFilters, (f: CommonFilter) => {\n const columnSettingsSelectOption = [\n {\n label: f.name,\n value: f.column.name,\n option: {\n headerName: f.name,\n field: f.column.name,\n type: f.column.data_type,\n datasetName: f.datasetName,\n datasetId: f.datasetId,\n },\n },\n ];\n\n // check if applied on the line\n const appliedOnLine = _.find(\n f?.appliedOnBlocks,\n (l) => l.blockId === lineId,\n ) as {\n blockId: string;\n applied: boolean;\n blockName: string;\n column: string;\n columnSettings: SelectOptionType<ColumnSetting>[];\n };\n if (appliedOnLine && appliedOnLine.applied) {\n const commonRule = f.rule;\n const fr = filterToSelectOptionType(\n commonRule,\n columnSettingsSelectOption,\n );\n const columnSetting = _.find(\n appliedOnLine.columnSettings,\n (c) => c.value === appliedOnLine.column,\n );\n if (columnSetting) {\n replacedFr.push(\n replaceFilterColumn({ fr: fr.rules, column: columnSetting }),\n );\n }\n }\n });\n\n const mergedFr = _.unionBy(replacedFr.flat(), rule, \"value\");\n\n return { defaultType: condition, rules: mergedFr };\n};\n\nexport const getUniqueValues = async (\n column: string[],\n sheetDetails?: {\n sheetId: string;\n inputs: Inputs;\n definitionModel: Definition;\n parentTableVariable: string;\n },\n uniqueValues?: any,\n uniqueValueStore?: any,\n storeSelectOptions?: boolean,\n): Promise<string[]> => {\n const uValStr = uniqueValues ?? { uniqueValues: {} };\n\n if (column && column[0] && sheetDetails) {\n if (\n sheetDetails.sheetId in uValStr?.uniqueValues &&\n column[0] in uValStr?.uniqueValues?.[sheetDetails.sheetId]\n ) {\n return uValStr?.uniqueValues[sheetDetails.sheetId][column[0]];\n }\n\n /**\n * removing filters to get all unique values. also make sure the variable being called is not a view variable.\n * This is because user might have hidden the column in the view variable, but added it as a filter.\n */\n let inputs = _.reduce(\n Object.entries(sheetDetails?.inputs || {}),\n (acc, [key, value]) => {\n if (_.includes(key, \"rule_\")) {\n acc[key] = defaultFilterRule;\n } else {\n acc[key] = value;\n }\n return acc;\n },\n {} as Record<string, any>,\n );\n\n inputs = {\n ...inputs,\n projectAsInput: {},\n rowGroupByInput: [],\n columnGroupByInput: [],\n groupByInput: [],\n filterOnAggregates: [],\n showDimensionMappingValues: inputs.showDimensionMappingValues ?? false,\n showBinSortOrderValues: inputs.showBinSortOrderValues ?? false,\n groupsSortOrder: [],\n };\n\n let variableName = sheetDetails?.parentTableVariable;\n const variables = sheetDetails?.definitionModel?.variables;\n\n const calledVariable = _.find(variables, (v) => v.name === variableName);\n if (calledVariable?.transforms[0]?.type === \"View\") {\n variableName = (calledVariable?.transforms[0] as View)?.table;\n }\n\n const uniqueValues = (\n await getFxUniqueColumnValuesApi(\n inputs,\n sheetDetails.definitionModel,\n variableName,\n column,\n )\n )?.data;\n\n if (storeSelectOptions) {\n const selectOptions = _.map(uniqueValues[column[0]], (uv) => ({\n label: uv,\n value: uv,\n }));\n uniqueValueStore.updateUniqueValues(sheetDetails.sheetId, {\n [column[0]]: selectOptions,\n });\n } else {\n uniqueValueStore.updateUniqueValues(sheetDetails.sheetId, uniqueValues);\n }\n return uniqueValues[column[0]];\n }\n\n return [];\n};\n\nexport const _getAggregates = (valueCols: ValueColsType[]) => {\n return valueCols.map((vc: ValueColsType) => {\n if (vc.formula) {\n //first param should be the label\n return [vc.label ?? vc.col, vc.formula];\n }\n //first param should be the label, second param should be the column id\n return [vc.label ?? vc.col, vc.col, vc.aggFun];\n });\n};\n\nconst getParentTableVariableType = (\n childId: string,\n variables: Variable[],\n): Variable | undefined => {\n const parentTableVariable = _.find(variables, (v) => v.name === childId);\n return parentTableVariable;\n};\n\nexport const findParentIsMetricSeries = (\n childId: string,\n variables: Variable[],\n): boolean => {\n const parentTableVariable = getParentTableVariableType(childId, variables);\n if (parentTableVariable?.transforms[0]?.type === \"MetricSeries\") {\n return true;\n } else if (parentTableVariable?.transforms[0]) {\n const transform = parentTableVariable.transforms[0] as { table?: string };\n return findParentIsMetricSeries(\n transform.table as string,\n variables,\n );\n }\n return false;\n};\n\nexport const ShowAsToProjectFractionMapper: Partial<\n Record<ShowAsEnum | CustomCalculationShowAsEnum, ProjectFractionEnum>\n> = {\n [ShowAsEnum.ROW]: ProjectFractionEnum.FRACTION_OF_ROW_TOTAL,\n [ShowAsEnum.COLUMN]: ProjectFractionEnum.FRACTION_OF_COL_TOTAL,\n [ShowAsEnum.GRAND_TOTAL]: ProjectFractionEnum.FRACTION_OF_GRAND_TOTAL,\n [CustomCalculationShowAsEnum.NONE]: ProjectFractionEnum.FRACTION_OF_ROW_TOTAL,\n [CustomCalculationShowAsEnum.FORMULA]: ProjectFractionEnum.TOTAL_OF_FORMULA,\n [CustomCalculationShowAsEnum.AGGREGATE]:\n ProjectFractionEnum.TOTAL_OF_AGGREGATE,\n};\n\nexport const getDefinitionModelAndVariableNameForPivot = (props: {\n pivotSheet: Sheet<PivotCustomModel>;\n rowsToGroupBy: string[];\n valueCols: ValueColsType[];\n sortOptions: SortOptions;\n timeBin?: TimeBin | \"\";\n dateRange: DateRange;\n dateColumn?: string;\n pivotCols: string[];\n currency?: string;\n rateType?: string;\n compareTrends?: Array<{\n id: string;\n name: string;\n dateRange: DateRange;\n }>;\n showDimensionMappingValues?: boolean;\n showBinSortOrderValues?: boolean;\n}) => {\n const {\n pivotSheet,\n rowsToGroupBy,\n timeBin,\n dateColumn,\n dateRange,\n pivotCols,\n currency,\n rateType,\n sortOptions,\n compareTrends,\n showDimensionMappingValues,\n showBinSortOrderValues,\n } = props;\n const valueCols = props.valueCols.filter((vc) => vc.type !== \"column\") ?? [];\n const newCols = props.valueCols.filter((vc) => vc.type === \"column\") ?? [];\n let variableName = generatePushID();\n const pivotDefinitionModel = pivotSheet.definitionModel as Definition;\n let variables: Variable[] = pivotDefinitionModel.variables || [];\n const pivotVariable: Variable | undefined = variables.find(\n (v) => v.transforms[0].type === \"MetricSeries\",\n );\n const filterVariable: Variable | undefined = variables.find(\n (v) =>\n v.transforms[0].type === \"RuleFilter\" &&\n (v.transforms[0] as RuleFilter).rule === \"${\" + `rule_pivot` + \"}\",\n );\n\n if (pivotVariable) {\n variableName = pivotVariable.name;\n }\n const parentTableVariable = pivotSheet.customModel?.variable;\n\n if (!_.isEmpty(valueCols)) {\n const rowGroups = _.filter(rowsToGroupBy[0], (r) => !pivotCols.includes(r));\n const variableObject = buildVariable(\"metric\", {\n name: variableName,\n table: filterVariable?.name,\n properties: {\n valueCols,\n rowGroups,\n customCalculation: newCols,\n },\n });\n\n if (pivotVariable) {\n variables = variables.map((v) => {\n if (v.transforms[0].type === \"MetricSeries\") {\n return variableObject;\n }\n return v;\n });\n } else {\n variables = [\n ...variables.filter(\n (vr: Variable) => vr.transforms[0].type !== \"Metric\",\n ),\n variableObject,\n ];\n }\n\n const ruleFilterVariable = _.find(variables, (v) =>\n v.name.startsWith(\"rule_filter_\"),\n );\n // Search for Workbook Sort Variable\n let { variable: workbookSortVariable, index: workbookSortVariableIndex } =\n findVariable(variables, ruleFilterVariable?.name || \"\", \"Sort\");\n\n if (workbookSortVariable) {\n if (workbookSortVariableIndex !== -1) {\n const sortTransformTable = (workbookSortVariable.transforms[0] as Sort)\n .table;\n variables = variables.map((v) => {\n // @ts-ignore\n if (v.transforms[0]?.table === workbookSortVariable.name) {\n return {\n ...v,\n transforms: [\n {\n ...v.transforms[0],\n table: sortTransformTable,\n },\n ],\n };\n }\n return v;\n });\n variables.splice(workbookSortVariableIndex, 1);\n }\n }\n // Search for Metric Sort Variable\n let { variable: sortVariable, index: sortVariableIndex } = findVariable(\n variables,\n pivotSheet.customModel?.variable || \"\",\n \"Sort\",\n (variable) => variable.name.startsWith(\"rule_filter_\"), // Terminate search when rule_filter variable is reached to prevent matching the Workbook Sort variable\n );\n\n let inputsArray: any[] = [];\n let inputsCompareTrendsIndices: Array<{ id: string; index: number }> = [];\n const projectAsInput = _.reduce(\n props.valueCols,\n (acc, curr) => {\n if (curr.showAs && curr.showAs !== ShowAsEnum.DEFAULT && curr.label) {\n const mappedValue = ShowAsToProjectFractionMapper[curr.showAs];\n if (mappedValue) {\n acc[curr.label] = mappedValue;\n }\n }\n return acc;\n },\n {} as Record<string, ProjectFractionEnum>,\n );\n\n if (!_.isEmpty(pivotCols)) {\n const pc = timeBin ? [dateColumn, ...pivotCols] : pivotCols;\n\n pc?.forEach((col, index) => {\n const groupByInput = rowsToGroupBy[index];\n const columnGroupByInput = _.filter(groupByInput, (r) =>\n pc.includes(r),\n );\n const rowGroupByInput = _.filter(groupByInput, (r) => !pc.includes(r));\n\n inputsArray.push({\n ...pivotSheet.customModel?.inputs,\n // valueColsInput: aggregates,\n date_range: { ...dateRange },\n groupByInput: rowsToGroupBy[index],\n columnGroupByInput,\n rowGroupByInput,\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n to_currency: currency,\n rate_type: rateType ?? '',\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(groupByInput, (r) => [r, \"asc\"]),\n });\n });\n } else {\n if (compareTrends && compareTrends.length > 0) {\n inputsArray = _.map(compareTrends, (ct, index) => {\n inputsCompareTrendsIndices.push({ id: ct.id, index });\n return {\n ...pivotSheet.customModel?.inputs,\n // valueColsInput: aggregates,\n date_range: { ...ct.dateRange },\n groupByInput: rowsToGroupBy[0],\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n to_currency: currency,\n rate_type: rateType ?? '',\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n };\n });\n } else {\n inputsArray = [\n {\n ...pivotSheet.customModel?.inputs,\n // valueColsInput: aggregates,\n date_range: { ...dateRange },\n groupByInput: rowsToGroupBy[0],\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n to_currency: currency,\n rate_type: rateType ?? '',\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n },\n ];\n }\n }\n const newColAliases = _.reduce(\n newCols,\n (acc, curr) => {\n if (curr.label) {\n acc[curr.label] = curr.col;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n if (sortOptions?.sortByField) {\n const allSortVariables = _.filter(\n variables,\n (v) => v.transforms[0].type === \"Sort\",\n );\n const metricSortVariables = _.filter(allSortVariables, (v) => {\n //@ts-ignore\n return findParentIsMetricSeries(v.transforms[0].table, variables);\n });\n // remove the metricSortVariables from variables\n variables = _.filter(variables, (v) => !metricSortVariables.includes(v));\n\n const sortVariableName = generatePushID();\n const sortPivotFilterRule = {\n rule_type: \"or_cond\",\n rules: [\n {\n rule_type: \"or_cond\",\n rules: [\n {\n col: dateColumn,\n value: sortOptions.pivotFilters ?? [],\n operator: \"in_op\",\n rule_type: \"cond\",\n is_not: false,\n is_case_sensitive: true,\n },\n ],\n is_not: false,\n },\n ],\n };\n const sortPivotInputs = _.isEmpty(timeBin)\n ? undefined\n : {\n pivot_filters: [sortPivotFilterRule as FilterRule],\n pivot_columns: [...rowGroups, ...pivotCols],\n pivot_groups: {\n [`${dateColumn}_group`]: showBinSortOrderValues ? \"DESC\" : \"ASC\",\n },\n };\n\n inputsArray = inputsArray.map((i) => {\n const newInputs = { ...i };\n Object.keys(newInputs).forEach((key) => {\n if (key.startsWith(\"sortPivotInputs_\")) {\n delete newInputs[key];\n }\n });\n return newInputs;\n });\n\n sortVariable = buildVariable(\"sort\", {\n name: sortVariableName,\n table: variableName,\n properties: {\n col: [sortOptions.sortByField.label],\n asc: [sortOptions.sortByOrder === \"asc\"],\n pivot_inputs: sortPivotInputs\n ? `\\${sortPivotInputs_${sortVariableName}}`\n : undefined,\n },\n });\n variableName = sortVariableName;\n variables = [...variables, sortVariable];\n\n if (inputsArray?.length > 0) {\n inputsArray = inputsArray.map((i) => ({\n ...i,\n [`sortPivotInputs_${sortVariableName}`]: sortPivotInputs,\n }));\n }\n } else if (sortOptions?.sortByField === undefined && sortVariable) {\n const sortVariableIndex = variables.findIndex((v) => v === sortVariable);\n if (sortVariableIndex !== -1) {\n const sortTransformTable = (sortVariable.transforms[0] as Sort).table;\n variables = variables.map((v) => {\n // @ts-ignore\n if (v.transforms[0]?.table === sortVariable.name) {\n return {\n ...v,\n transforms: [\n {\n ...v.transforms[0],\n table: sortTransformTable,\n },\n ],\n };\n }\n return v;\n });\n variables.splice(sortVariableIndex, 1);\n }\n\n if (inputsArray?.length > 0) {\n inputsArray = inputsArray.map((i) => {\n const newInputs = { ...i };\n Object.keys(newInputs).forEach((key) => {\n if (key.startsWith(\"sortPivotInputs_\")) {\n delete newInputs[key];\n }\n });\n return newInputs;\n });\n }\n variables = variables.filter((v) => v.transforms[0]?.type !== \"Sort\");\n }\n\n const definitionModel = {\n ...pivotDefinitionModel,\n aliases: {\n ...pivotDefinitionModel.aliases,\n [variableName]: {\n ...(pivotDefinitionModel.aliases && parentTableVariable\n ? pivotDefinitionModel.aliases[parentTableVariable]\n : {}),\n ...newColAliases,\n },\n },\n variables: [...variables],\n } as Definition;\n\n return {\n inputs: inputsArray,\n definitionModel,\n variableName,\n inputsCompareTrendsIndices,\n };\n }\n return {\n inputs: pivotSheet.customModel?.inputs || [],\n definitionModel: pivotDefinitionModel,\n variableName,\n };\n};\n\nexport const getFilterSelectOptionsMap = (fSO: FilterSelectOptionsType[]) =>\n fSO.reduce(\n (acc, curr) => {\n if (curr.value) {\n acc[curr.value] = curr;\n }\n return acc;\n },\n {} as { [filterId: string]: FilterSelectOptionsType },\n );\n\nexport const getDrilldownFiltersMap = (props: {\n filtersToBeApplied: Array<{\n field: string;\n key: string | number;\n type?: string;\n startDate?: string;\n endDate?: string;\n operator?: string;\n }>;\n columnSelectOptions: SelectOptionType[];\n}) => {\n const { filtersToBeApplied, columnSelectOptions } = props;\n\n let filterMap: { [id: string]: FilterSelectOptionsType } = {};\n\n const filterGroup = _.groupBy(filtersToBeApplied, \"field\");\n\n _.forEach(filterGroup, (fg) => {\n let uniqueValues: FilterUniqueValueSelectOptionsType[] = [];\n const col = columnSelectOptions?.find(\n (c: SelectOptionType) =>\n c.value === fg[0].field ||\n c.value === `${fg[0].field}_group` ||\n c.label === fg[0].field,\n );\n let ruleType: RuleType = \"cond\";\n _.forEach(\n fg,\n (ftba: {\n field: string;\n key: string | number;\n type?: string;\n startDate?: string;\n endDate?: string;\n operator?: string;\n }) => {\n if (ftba.operator) {\n let uniqueValuesForNegationOperator, uniqueValuesForOperator;\n if (ftba.operator.includes(\"not\")) {\n uniqueValuesForNegationOperator = getValuesForSpecialOperators(\n ftba.operator,\n );\n uniqueValuesForOperator = [\n {\n label: col?.label,\n value: col?.value,\n option: {\n uniqueValue: ftba.key,\n ruleType: \"cond\",\n operator: uniqueValuesForNegationOperator.operator,\n isNot: uniqueValuesForNegationOperator.isNot,\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n } else {\n uniqueValuesForOperator = [\n {\n label: col?.label,\n value: col?.value,\n option: {\n uniqueValue: ftba.key,\n ruleType: \"cond\",\n operator: ftba.operator,\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n }\n uniqueValues.push(...uniqueValuesForOperator);\n ruleType = \"and_cond\";\n } else if (ftba.type === \"date\") {\n const uniqueValuesForDate = [\n {\n label: col?.label,\n value: col?.value?.replace(\"_group\", \"\"),\n option: {\n uniqueValue: ftba.startDate,\n ruleType: \"cond\",\n operator: \"greater_equal\",\n },\n },\n {\n label: col?.label,\n value: col?.value?.replace(\"_group\", \"\"),\n option: {\n uniqueValue: ftba.endDate,\n ruleType: \"cond\",\n operator: \"less_equal\",\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n uniqueValues.push(...uniqueValuesForDate);\n ruleType = \"or_cond\";\n } else {\n // build uniquevalues for filter variable\n const uniqueValuesForSelection = [\n {\n label: col?.label || \"\",\n value: col?.value,\n option: {\n uniqueValue: ftba.key,\n ruleType: \"cond\",\n operator: \"equal\",\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n\n uniqueValues.push(...uniqueValuesForSelection);\n }\n },\n );\n const fiterSelectOption: FilterSelectOptionsType = {\n label: col?.label || \"\",\n value: col?.value,\n option: {\n uniqueValues,\n ruleType: ruleType,\n uniqueValueCount: col?.option.uniqueCount,\n type: col?.option.type,\n },\n };\n\n filterMap = {\n ...filterMap,\n [col?.value]: fiterSelectOption,\n };\n });\n\n return filterMap;\n};\n\nexport const getFilterRulesFromMap = (filterMap: {\n [filterId: string]: FilterSelectOptionsType;\n}) => {\n let filterSelectOption = [];\n\n for (const pf of Object.values(filterMap)) {\n filterSelectOption.push(pf);\n }\n\n return getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: filterSelectOption,\n });\n};\n\nexport const getFiltersToBeAppliedOnDrilldown = (props: {\n rowGroups: string[];\n groupKeys: string[];\n}) => {\n const { rowGroups, groupKeys } = props;\n const filtersToBeApplied: { field: string; key: string }[] = [];\n groupKeys?.forEach((key, index) =>\n filtersToBeApplied.push({ field: rowGroups[index], key }),\n );\n return filtersToBeApplied;\n};\n\nexport const getMetricFilterRule = (inputs: Inputs | Inputs[]) => {\n const isInputsArray = Array.isArray(inputs);\n const input = isInputsArray ? inputs[0] : inputs;\n return input?.[\"rule_pivot\"] ?? defaultFilterRule;\n};\n\nexport const getDrilldownModels = (props: {\n filtersToBeApplied: { field: string; key: string }[];\n sheetDefinitionModel: Definition;\n sheetInputs: Inputs;\n sheetVariableName: string;\n columnSelectOptions: SelectOptionType[];\n}) => {\n const {\n filtersToBeApplied,\n sheetDefinitionModel,\n sheetInputs,\n sheetVariableName,\n columnSelectOptions,\n } = props;\n let variables = sheetDefinitionModel.variables;\n\n const metricFilterRule: FilterRule = getMetricFilterRule(sheetInputs);\n const metricFilterRuleSelectOptions = filterToSelectOptionType(\n metricFilterRule,\n columnSelectOptions,\n );\n\n const drilldownFilterMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const mergedRule = _.unionBy(\n Object.values(drilldownFilterMap),\n metricFilterRuleSelectOptions.rules,\n \"value\",\n );\n\n const filterRule: FilterRule = getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: mergedRule,\n });\n\n // current sheet inputs\n\n let inputs = sheetInputs.map((sI: Inputs) => {\n const rowGroupByInput = _.filter(sI.rowGroupByInput, (r) =>\n sI.groupByInput.includes(r),\n );\n const columnGroupByInput = _.filter(sI.columnGroupByInput, (r) =>\n sI.groupByInput.includes(r),\n );\n return {\n ...sI,\n [\"rule_pivot\"]: filterRule,\n rowGroupByInput,\n columnGroupByInput,\n };\n });\n\n const definitionModel = { ...sheetDefinitionModel, variables };\n\n return {\n drilldownTableDefinitionModel: definitionModel,\n drilldownTableVariableName: sheetVariableName,\n drilldownTableInputs: inputs,\n };\n};\n\nexport const getAmChartGroup = (props: {\n drilldownLevel: string[];\n clickedColumn: string;\n}) => {\n const { clickedColumn, drilldownLevel } = props;\n let group: string[] = [];\n\n const clickedColumnIndex = drilldownLevel.indexOf(clickedColumn);\n group = drilldownLevel.slice(clickedColumnIndex + 1);\n\n return group;\n};\n\nexport const getDataForDrilldown = async (props: {\n drilldownFiltersToBeAppliedOnChart: { field: string; key: string }[];\n sheetDefinitionModel: Definition;\n sheetInputs: Inputs;\n sheetVariableName: string;\n columnSelectOptions: SelectOptionType[];\n}) => {\n const {\n drilldownFiltersToBeAppliedOnChart,\n sheetDefinitionModel,\n sheetInputs,\n sheetVariableName,\n columnSelectOptions,\n } = props;\n let {\n drilldownTableDefinitionModel,\n drilldownTableVariableName,\n drilldownTableInputs,\n } = getDrilldownModels({\n filtersToBeApplied: drilldownFiltersToBeAppliedOnChart,\n sheetDefinitionModel: sheetDefinitionModel,\n sheetInputs: sheetInputs,\n sheetVariableName: sheetVariableName,\n columnSelectOptions: columnSelectOptions,\n });\n\n drilldownTableInputs = Array.isArray(drilldownTableInputs)\n ? drilldownTableInputs[0]\n : drilldownTableInputs;\n\n try {\n const data = (\n await runDefinitionApi(\n drilldownTableInputs,\n drilldownTableDefinitionModel,\n drilldownTableVariableName,\n )\n ).data;\n\n return data;\n } catch (error) {\n throw error;\n }\n};\n\nexport const updateWorksheetAndMetricFilterMapForDrilldown = (props: {\n sheetInputs: Inputs;\n filterVariable: Variable[];\n columnSelectOptions: SelectOptionType[];\n}) => {\n const { sheetInputs, filterVariable, columnSelectOptions } = props;\n\n let worksheetFilterMap = {};\n let metricFilterMap = {};\n\n filterVariable.forEach((fv: Variable) => {\n const transform = fv.transforms[0] as RuleFilter;\n const tRule = getInputName(transform.rule as string);\n const sheetFilterRule: FilterRule = sheetInputs[tRule];\n const sheetFilterSelectOption = filterToSelectOptionType(\n sheetFilterRule,\n columnSelectOptions,\n );\n if (tRule.includes(\"worksheet\")) {\n worksheetFilterMap = getFilterSelectOptionsMap(\n sheetFilterSelectOption?.rules,\n );\n } else {\n metricFilterMap = getFilterSelectOptionsMap(\n sheetFilterSelectOption?.rules,\n );\n }\n });\n\n return { ...worksheetFilterMap, ...metricFilterMap };\n};\n\nexport const getTableDrilldownModels = (props: {\n filtersToBeApplied: { field: string; key: string | number }[];\n sheetDefinitionModel: Definition;\n sheetInputs: Inputs;\n columnSelectOptions: SelectOptionType[];\n includesValueCols?: boolean;\n}) => {\n const {\n filtersToBeApplied,\n sheetDefinitionModel,\n sheetInputs,\n columnSelectOptions,\n } = props;\n\n // remove metric series variable from from definition model\n let variables = [...(sheetDefinitionModel.variables || [])];\n variables = variables.filter((variable: Variable) => {\n return variable?.transforms?.[0]?.type !== \"MetricSeries\";\n });\n\n // update parent table name in filter variable if exists\n // create a drill down filter variable\n\n let filterVariable = variables.filter((variable: Variable) => {\n return variable?.transforms?.[0]?.type === \"RuleFilter\";\n });\n\n const drilldownVariable = variables.find((v: Variable) => {\n const transform = v.transforms?.[0];\n if (\n transform?.type === \"RuleFilter\" &&\n typeof (transform as RuleFilter)?.rule === \"string\" &&\n ((transform as RuleFilter)?.rule as string)?.includes(\"rule_drillDown\")\n ) {\n return v;\n }\n });\n\n // updateWorksheetAndMetricFilterMapForDrilldown(currentSheetInputs, filterVariable);\n const variableName = drilldownVariable\n ? drilldownVariable.name\n : generatePushID();\n const tTableName = filterVariable[filterVariable.length - 1]?.name;\n const inputRuleVariable = `rule_drillDown`;\n\n const drilldownFiltersMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const drillDownFilterRule = getFilterRulesFromMap(drilldownFiltersMap);\n\n // current sheet inputs\n let inputs = { ...sheetInputs, [inputRuleVariable]: drillDownFilterRule };\n\n if (!drilldownVariable) {\n const drillDownFilterVariableObject = {\n name: variableName,\n transforms: [\n {\n table: tTableName,\n type: \"RuleFilter\",\n rule: \"${\" + inputRuleVariable + \"}\",\n },\n ],\n };\n variables = [...variables, drillDownFilterVariableObject];\n }\n const definitionModel = { ...sheetDefinitionModel, variables };\n\n return {\n drilldownTableDefinitionModel: definitionModel,\n drilldownTableVariableName: variableName,\n drilldownTableInputs: inputs,\n };\n};\n\nexport const getValueGroupsSelectOptions = (props: {\n valueCols: ValueColsType[];\n aliases: { [key: string]: string };\n}) => {\n const { valueCols, aliases } = props;\n const getLabel = (name: string) =>\n _.findKey(aliases, (o: string) => o === name);\n const getFormulaAggregateFn = (formula: string) => {\n return formula.substring(0, formula.indexOf(\"(\"));\n };\n\n const getFormulaValue = (formula: string) =>\n formula.substring(formula.indexOf(\"(\") + 1, formula.lastIndexOf(\")\"));\n\n const valGroups =\n valueCols?.map((valueCol) => {\n if (valueCol?.formula) {\n const aggFun =\n valueCol?.type && valueCol.type !== \"formula\"\n ? undefined\n : getFormulaAggregateFn(valueCol.formula);\n return {\n label: valueCol.col,\n value: valueCol.col,\n option: {\n formulaMode: true,\n aggFun,\n formula: getFormulaValue(valueCol.formula),\n fieldLabel: valueCol.col,\n impact: valueCol?.impact ?? \"positive\",\n type: valueCol?.type ?? \"formula\",\n currency: valueCol?.currency,\n precision: valueCol?.precision,\n isCurrency: valueCol?.isCurrency,\n isPercentage: valueCol?.isPercentage,\n isNumber: valueCol?.isNumber,\n showAs: valueCol?.showAs ?? \"default\",\n isAmortize: valueCol?.isAmortize ?? false,\n isHidden: valueCol?.hide ?? false,\n hideGrandTotal: valueCol?.hideGrandTotal ?? false,\n showRowTotal: valueCol?.showRowTotal ?? false,\n chartColorBasedOnImpact: valueCol?.chartColorBasedOnImpact ?? false,\n compactNotation: valueCol?.compactNotation,\n },\n };\n }\n\n return {\n label: valueCol.label,\n value: valueCol.col,\n option: {\n formulaMode: false,\n aggFun: valueCol.aggFun,\n fieldLabel: getLabel(valueCol.col) ?? valueCol.col,\n impact: valueCol?.impact ?? \"positive\",\n type: \"value\" as ValueColsType[\"type\"],\n currency: valueCol?.currency,\n precision: valueCol?.precision,\n isCurrency: valueCol?.isCurrency,\n isPercentage: valueCol?.isPercentage,\n isNumber: valueCol?.isNumber,\n showAs: valueCol?.showAs ?? \"default\",\n isHidden: valueCol?.hide ?? false,\n hideGrandTotal: valueCol?.hideGrandTotal ?? false,\n showRowTotal: valueCol?.showRowTotal ?? false,\n chartColorBasedOnImpact: valueCol?.chartColorBasedOnImpact ?? false,\n compactNotation: valueCol?.compactNotation,\n },\n };\n }) ?? [];\n return valGroups;\n};\n\nexport const getRowGroupsSelectOptions = (props: {\n rowGroups: Array<string | string[]>;\n columns: SelectOptionType[];\n}) => {\n const { rowGroups, columns } = props;\n let rowGroupsSelectOptions: any[] = [];\n rowGroups?.forEach((rgc: string | string[]) => {\n if (typeof rgc === \"string\") {\n const col = columns?.find((col) => col.value === rgc);\n rowGroupsSelectOptions = [...rowGroupsSelectOptions, col];\n } else {\n const rowLabel = rgc?.[0];\n const rowField = rgc?.[1]\n ?.split(\"(\")?.[1]\n ?.split(\",\")?.[0]\n ?.replace(/'/g, \"\");\n const col = columns?.find((col) => col.value === rowField);\n const updatedCol = {\n ...col,\n label: rowLabel,\n option: { ...col?.option, rowType: \"hierarchy\" },\n };\n\n rowGroupsSelectOptions = [...rowGroupsSelectOptions, { ...updatedCol }];\n }\n });\n return rowGroupsSelectOptions;\n};\n\nexport const getColumnGroupsSelectOptions = (props: {\n columnGroups: string[];\n columns: SelectOptionType[];\n}) => {\n const { columnGroups, columns } = props;\n let columnGroupsSelectOptions: any[] = [];\n columnGroups?.forEach((rgc: string) => {\n const col = columns?.find((col) => col.value === rgc);\n columnGroupsSelectOptions = [...columnGroupsSelectOptions, col];\n });\n return columnGroupsSelectOptions;\n};\n\nexport const removeDateColumnFromColRowGroupIfTrend = (props: {\n timeBin: TimeBin | \"\";\n pivotCols: string[];\n rowGroupCols: string[];\n dateColumn: string;\n}) => {\n const { timeBin, pivotCols, rowGroupCols, dateColumn } = props;\n if (timeBin) {\n const dateColumnIndex = pivotCols.indexOf(dateColumn);\n if (dateColumnIndex > -1) {\n pivotCols.splice(dateColumnIndex, 1);\n }\n const dateColumnIndex2 = rowGroupCols.indexOf(dateColumn);\n if (dateColumnIndex2 > -1) {\n rowGroupCols.splice(dateColumnIndex2, 1);\n }\n }\n return { pivotCols, rowGroupCols };\n};\n\nexport const getNewMetricSheet = async (props: {\n datasetList: DatasetImportMetadata[];\n sheetName: string;\n objectId: string;\n importType: any;\n dateRange?: any;\n parentId?: string;\n}) => {\n const { objectId, sheetName, datasetList, dateRange } = props;\n //get dataset from store\n const dataset = datasetList.find(\n (ds: DatasetImportMetadata) => ds.id === objectId,\n );\n\n if (!dataset) {\n throw new Error(`Dataset with id ${objectId} not found`);\n }\n\n const datasetName: string = dataset.name || \"\";\n const datasetId: string = dataset.id || \"\";\n\n const datasetDateColumn: string = dataset?.dateColumn ?? \"\";\n const importModel: Import[] = [\n {\n loc: objectId,\n to: datasetName,\n import_type: \"dataset\",\n },\n ];\n\n if (dataset.datasetType === \"TRANSACTION\") {\n importModel[0].date_column_filter = \"${date_range}\";\n }\n\n const sheetId = generatePushID();\n const inputRuleVariable = `rule_worksheet_${sheetId}`;\n const metricFilterVariableName = generatePushID();\n const metricVariableName = generatePushID();\n\n const variableModel: Variable[] = [\n {\n name: sheetId,\n transforms: [\n {\n table: dataset.name,\n type: \"RuleFilter\",\n rule: \"${\" + inputRuleVariable + \"}\",\n },\n ],\n },\n {\n name: metricFilterVariableName,\n transforms: [\n {\n table: sheetId,\n type: \"RuleFilter\",\n rule: \"${rule_pivot}\",\n },\n ],\n },\n {\n name: metricVariableName,\n transforms: [\n //@ts-ignore\n {\n table: metricFilterVariableName,\n aggregates: [],\n group_by: \"${groupByInput}\",\n type: \"MetricSeries\",\n bin_by: \"${binByInput}\",\n },\n ],\n },\n ];\n\n //create the definition model for the sheet in the workbook WITHOUT aliases\n\n const defaultDefinition: Definition = {\n imports: [],\n variables: [],\n aliases: {},\n inputs: {},\n };\n\n let definitionModel: Definition = {\n ...defaultDefinition,\n imports: importModel,\n variables: variableModel,\n aliases: {},\n };\n\n //run describe(definition, variable)\n const inputs: Inputs = {\n ...defaultDefinition.inputs,\n [inputRuleVariable]: {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n },\n rule_pivot: {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n },\n groupByInput: [],\n binByInput: \"\",\n };\n\n if (dataset.datasetType === \"TRANSACTION\") {\n inputs.date_range = dateRange;\n }\n\n const results = await Promise.all([\n getFxUdescribeApi(inputs, definitionModel, datasetName),\n ]);\n const tableDescription: DescriptionResult[] = (results[0] as any).data;\n\n const alias = tableDescription.reduce(\n (acc: { [id: string]: string }, curr: DescriptionResult) => {\n acc[getDisplayName(curr.name)] = curr.name;\n return acc;\n },\n {},\n );\n\n //update the definition model to have the alises\n definitionModel = {\n ...definitionModel,\n aliases: {\n [sheetId]: alias,\n [metricFilterVariableName]: alias,\n [metricVariableName]: alias,\n },\n };\n\n const columnSettings: ColumnSetting[] = tableDescription.map(\n (description: DescriptionResult): ColumnSetting => {\n const descWithCount = description as DescriptionResultWithUniqueCount;\n return {\n hide: false,\n headerName: getDisplayName(description.name),\n type: description.data_type as\n | \"str\"\n | \"f64\"\n | \"i64\"\n | \"date\"\n | \"datetime(time_unit='us', time_zone=None)\"\n | undefined,\n field: description.name,\n unique_count: descWithCount.unique_count,\n datasetId: descWithCount.datasetId,\n datasetName: descWithCount.datasetName,\n };\n },\n );\n\n //then create sheet\n const sheet: Sheet<BlockSheetCustomModel> = {\n name: sheetName,\n definitionModel,\n customModel: {\n metadata: {\n parentTableVariable: sheetId,\n dateRange: dateRange,\n inputs: inputs,\n columnSettings,\n datasetId: datasetId,\n datasetName: datasetName,\n variable: metricVariableName,\n dateColumn: datasetDateColumn,\n valueCols: [],\n rowGroupCols: [],\n filterColumnsBy: {},\n filterModel: [],\n pivotCols: [],\n aliases: definitionModel.aliases\n ? definitionModel.aliases[metricVariableName]\n : undefined,\n },\n settings: {\n chartType: \"table\",\n viewMode: \"grid\",\n },\n [8]: { x: 0, y: 0, w: 4, h: 6 }, // pivotBlockProperties placeholder\n },\n customFields: {\n variable: sheetId as any,\n dateColumn: datasetDateColumn as unknown as Object,\n datasetNames: [datasetName],\n },\n type: \"PIVOT\",\n parentId: props.parentId,\n parentType: \"DASHBOARD\",\n id: sheetId,\n workspaceId: undefined,\n sources: [{ id: datasetId, componentType: \"DATASET\" }],\n };\n\n return sheet;\n};\n\nexport const getColumnSettingsToSelectOptions = (\n columnSettings: ColumnSetting[],\n) => {\n return _.chain(columnSettings)\n .filter((c) => !c.field.includes(\"__bc_\") && !c.aggFunc)\n .map((c: ColumnSetting) => {\n return {\n label: c.headerName,\n value: c.field,\n option: {\n type: c.type,\n uniqueCount: c.unique_count,\n fieldLabel: c.headerName,\n currency: c?.currency,\n precision: c?.precision,\n dateFormat: c?.dateFormat,\n isCurrency: c?.isCurrency,\n },\n };\n })\n .value();\n};\n\nexport const getDefinitionModelWithUpdatedValueCols = (props: {\n definition: Definition;\n valueCols: ValueColsType[];\n}) => {\n const { definition } = props;\n let shDef = definition;\n let variableName = shDef?.variables?.[shDef?.variables?.length - 1]?.name;\n\n let variables = shDef?.variables ?? [];\n const tableName = variables?.[variables.length - 1]?.name;\n const id = generatePushID();\n\n const viewVariable: Variable = {\n name: id,\n transforms: [\n {\n type: \"View\",\n table: tableName,\n cols: \"${viewInputs}\",\n },\n ],\n };\n\n variables = [...variables, viewVariable];\n variableName = id;\n\n const updatedDefinition = { ...shDef, variables };\n\n return { updatedDefinition, variableName };\n};\n\nexport const applyFilter = async (props: {\n sheetId: string;\n metadata: MetricMetadataType;\n lastModifiedDate: string;\n}) => {\n const { metadata, sheetId, lastModifiedDate } = props;\n\n const parentTableVariable: string = metadata?.parentTableVariable || \"\";\n\n const inputs = metadata?.inputs;\n\n const variable = metadata?.variable;\n\n try {\n const serverResponse = await runPublishedDefinitionApi({\n inputs: { ...inputs },\n sheet: {\n id: sheetId,\n lastModifiedDate,\n },\n variable,\n describe: parentTableVariable,\n });\n\n const result: {\n data: any[];\n description: DescriptionResultWithUniqueCount[];\n } = serverResponse.data;\n\n const gridData = result.data;\n\n return gridData;\n } catch (error) {\n console.error(error);\n }\n};\n\nexport const defaultFilterRule: FilterRule = {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n};\n\nexport const getPromotedFiltersSelectOptionsForLine = (\n metricSheet: Sheet<MetricCustomModel>,\n): SelectOptionType[] => {\n let promotedFiltersSelectOptions: any[] = [];\n\n const sheetId = metricSheet?.id;\n const sheetDefinitionModel = metricSheet?.definitionModel;\n\n const metadata = metricSheet?.customModel?.metadata as MetricMetadataType;\n if (!_.isEmpty(metadata)) {\n const blockColumnSettings = metadata?.columnSettings as ColumnSetting[];\n\n const blockSheetDetails: {\n sheetId: string | undefined;\n definitionModel: Definition;\n parentTableVariable: string | undefined;\n inputs: Inputs | undefined;\n } = {\n sheetId,\n definitionModel: sheetDefinitionModel as Definition,\n parentTableVariable: metadata?.parentTableVariable,\n inputs: metadata?.inputs,\n };\n const blockFilterColumnsBy: FilterColumnsBy =\n metadata?.filterColumnsBy || {};\n\n // create promoted fiters select options\n _.chain(blockColumnSettings)\n .filter((c) => !c.aggFunc && !c.field.includes(\"__bc_\"))\n .forEach((cso: ColumnSetting) => {\n promotedFiltersSelectOptions = [\n ...promotedFiltersSelectOptions,\n {\n label: cso.headerName,\n value: cso.field,\n option: {\n name: cso.headerName,\n rule: defaultFilterRule,\n sheetDetails: blockSheetDetails,\n lineId: sheetId,\n filterColumnsBy: blockFilterColumnsBy,\n id: cso.field,\n datasetId: cso?.datasetId ?? metadata?.datasetId,\n blockColumnSettings: blockColumnSettings,\n datasetName: cso?.datasetName ?? metadata?.datasetName,\n uniqueValueCount: cso?.unique_count ?? 1000,\n },\n },\n ];\n })\n .value();\n\n return promotedFiltersSelectOptions;\n } else {\n return [];\n }\n};\n\nexport const getAllLinesFilterSelectOptions = (\n metricSheets: Sheet<MetricCustomModel>[],\n) => {\n let allLinesFilterSelectOptions: SelectOptionType[] = [];\n metricSheets?.forEach((bs: Sheet<MetricCustomModel>) => {\n const so: SelectOptionType[] = getPromotedFiltersSelectOptionsForLine(bs);\n allLinesFilterSelectOptions = _.uniqBy(\n [...allLinesFilterSelectOptions, ...so],\n (v) => `${v.option?.datasetId}_${v.option?.id}`,\n );\n });\n\n return _.uniqWith(\n allLinesFilterSelectOptions,\n (a, b) => a.option.datasetId === b.option.datasetId && a.value === b.value,\n );\n};\n\nexport function formatDate(date: any) {\n let month = \"\" + (date.getMonth() + 1),\n day = \"\" + date.getDate(),\n year = date.getFullYear();\n\n if (month.length < 2) month = \"0\" + month;\n if (day.length < 2) day = \"0\" + day;\n\n return [year, month, day].join(\"-\");\n}\n\nexport const getQuarterDates = (props: { month: number; year: number }) => {\n let startDate;\n let endDate;\n\n let { month, year } = props;\n month = month + 1;\n\n if (month >= 4 && month <= 6) {\n startDate = formatDate(new Date(year, 3, 1));\n endDate = formatDate(new Date(year, 5, 30));\n } else if (month >= 7 && month <= 9) {\n startDate = formatDate(new Date(year, 6, 1));\n endDate = formatDate(new Date(year, 8, 30));\n } else if (month >= 10 && month <= 12) {\n startDate = formatDate(new Date(year, 9, 1));\n endDate = formatDate(new Date(year, 11, 31));\n } else if (month >= 1 && month <= 3) {\n startDate = formatDate(new Date(year - 1, 9, 1));\n endDate = formatDate(new Date(year, 2, 31));\n }\n\n return { startDate, endDate };\n};\n\nexport const getMonthDates = (props: { month: number; year: number }) => {\n const { month, year } = props;\n const startDate = formatDate(new Date(year, month, 1));\n const endDate = formatDate(new Date(year, month + 1, 0));\n return { startDate, endDate };\n};\n\nexport const getYearDates = (props: { year: number }) => {\n const { year } = props;\n\n const startDate = formatDate(new Date(year, 0, 1));\n const endDate = formatDate(new Date(year, 11, 31));\n return { startDate, endDate };\n};\n\nexport const getStartEndDates = (props: { timeBin: TimeBin; date: Date }) => {\n const { timeBin, date } = props;\n\n const month = date.getMonth();\n const year = date.getFullYear();\n\n if (timeBin === \"per_month\") return getMonthDates({ month, year });\n if (timeBin === \"per_quarter\") return getQuarterDates({ month, year });\n if (timeBin === \"per_year\") return getYearDates({ year });\n};\n\nexport const getSheetProperties = (props: {\n sheet: Sheet<PivotCustomModel>;\n groupKeys?: string[];\n toolPanelValues?: MetricToolPanelType;\n initialLoad: boolean;\n currencyValue: string;\n}) => {\n const { sheet, toolPanelValues, groupKeys, initialLoad, currencyValue } =\n props;\n let pivotCols: string[] = [],\n rowGroupCols: Array<string | string[]> = [],\n filterModel: FilterRule | [] = [],\n valueCols: ValueColsType[] = [],\n timeBin: TimeBin | \"\" = \"\",\n dateRange: DateRange,\n currency: string,\n showBinSortOrderValues: boolean,\n compareTrends: Array<{\n id: string;\n name: string;\n dateRange: DateRange;\n }>,\n showDimensionMappingValues: boolean;\n let gridColumnState: GridColumnState;\n let dateColumn = sheet?.customModel?.dateColumn;\n let sortOptions: SortOptions;\n\n if (!initialLoad && toolPanelValues) {\n pivotCols = toolPanelValues.pivotCols;\n rowGroupCols = toolPanelValues.rowGroupCols;\n filterModel = toolPanelValues.filterModel;\n valueCols = toolPanelValues.valueCols;\n sortOptions = toolPanelValues.sortOptions;\n timeBin = toolPanelValues.timeBin;\n dateRange = toolPanelValues.dateRange || { time_period: \"past_quarter\" };\n currency = toolPanelValues.currency || currencyValue;\n compareTrends = toolPanelValues.compareTrends || [];\n showDimensionMappingValues =\n toolPanelValues.showDimensionMappingValues || false;\n showBinSortOrderValues = toolPanelValues.showBinSortOrderValues || false;\n // get rowGroupCols till index clicked row level\n gridColumnState = { pivotCols, rowGroupCols, filterModel, valueCols };\n rowGroupCols = rowGroupCols.slice(0, (groupKeys?.length || 0) + 1);\n } else {\n const cModel = sheet?.customModel;\n gridColumnState = cModel?.gridColumnState || {\n pivotCols: [],\n rowGroupCols: [],\n filterModel: [],\n valueCols: [],\n };\n timeBin = cModel?.timeBin ?? \"\";\n dateRange = cModel?.dateRange ?? { time_period: \"past_quarter\" };\n currency = cModel?.currency ?? currencyValue;\n if (gridColumnState) {\n ({ pivotCols, rowGroupCols, valueCols, filterModel } = gridColumnState);\n rowGroupCols = rowGroupCols.slice(0, (groupKeys?.length || 0) + 1);\n }\n sortOptions = cModel?.sortOptions || {\n sortByField: undefined,\n sortByOrder: \"asc\",\n };\n compareTrends = cModel?.compareTrends || [];\n showDimensionMappingValues = cModel?.showDimensionMappingValues ?? false;\n showBinSortOrderValues = cModel?.showBinSortOrderValues ?? false;\n }\n\n ({ pivotCols, rowGroupCols } = removeDateColumnFromColRowGroupIfTrend({\n timeBin,\n pivotCols,\n rowGroupCols: rowGroupCols as string[],\n dateColumn: dateColumn || \"\",\n }));\n\n pivotCols = pivotCols ?? [];\n rowGroupCols = rowGroupCols ?? [];\n valueCols = valueCols ?? [];\n timeBin = timeBin ?? \"\";\n\n let rowsToGroupBy = [];\n if (!_.isEmpty(pivotCols)) {\n if (timeBin) {\n rowsToGroupBy.push([...rowGroupCols]);\n for (let i = 0; i < pivotCols.length; i++) {\n const pcols = pivotCols;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupCols]);\n }\n } else {\n for (let i = 0; i < pivotCols.length; i++) {\n const pcols = pivotCols;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupCols]);\n }\n }\n } else {\n rowsToGroupBy.push([...pivotCols, ...rowGroupCols]);\n }\n\n // create definition Model for pivot\n const definitionModelAndVariable = getDefinitionModelAndVariableNameForPivot({\n pivotSheet: sheet,\n rowsToGroupBy: rowsToGroupBy as any, // Type assertion to handle 2D array\n valueCols,\n sortOptions,\n timeBin,\n dateRange,\n dateColumn: sheet?.customModel?.dateColumn ?? \"\",\n pivotCols,\n currency,\n compareTrends,\n showDimensionMappingValues,\n showBinSortOrderValues,\n });\n\n let definitionModel = definitionModelAndVariable.definitionModel;\n\n let variableName = definitionModelAndVariable.variableName;\n let inputs: Inputs = definitionModelAndVariable.inputs;\n const inputsCompareTrendsIndices =\n definitionModelAndVariable.inputsCompareTrendsIndices;\n if (!initialLoad && _.isEmpty(filterModel)) {\n inputs = _.map(inputs, (input) => {\n return {\n ...input,\n rule_pivot: defaultFilterRule,\n filterOnAggregates: defaultFilterRule,\n };\n });\n }\n\n if (!_.isEmpty(filterModel)) {\n const aggFilterRule = getAggregateFilterRuleFromCombinedFilterRule(\n filterModel as FilterRule,\n valueCols,\n );\n const columnFilterRule = getColumnFilterRuleFromCombinedFilterRule(\n filterModel as FilterRule,\n valueCols,\n );\n inputs = _.map(inputs, (input) => {\n return {\n ...input,\n rule_pivot: columnFilterRule,\n filterOnAggregates: aggFilterRule,\n };\n });\n }\n\n return {\n inputs,\n definitionModel,\n variableName,\n gridColumnState,\n inputsCompareTrendsIndices,\n };\n};\n\nexport const getValueColumnsFromSelectOptions = (\n selectOptions: SelectOptionType[],\n) => {\n return selectOptions?.map((col: SelectOptionType) => {\n let valueCol = {\n label: col.label,\n col: col.option.formulaMode ? col.label : col.value,\n aggFun: col.option.formulaMode ? undefined : col.option.aggFun,\n impact: col.option.impact,\n type: col.option.type,\n isCurrency: col.option.isCurrency ?? false,\n isPercentage: col?.option?.isPercentage ?? false,\n isNumber: col?.option?.isNumber ?? false,\n showAs: col?.option?.showAs ?? \"default\",\n isAmortize: col?.option?.isAmortize ?? false,\n hide: col?.option?.isHidden ?? false,\n hideGrandTotal: col?.option?.hideGrandTotal ?? false,\n showRowTotal: col?.option?.showRowTotal ?? false,\n chartColorBasedOnImpact: col?.option?.chartColorBasedOnImpact,\n compactNotation: col?.option?.compactNotation,\n precision: col?.option?.precision,\n };\n\n if (!col.option.formulaMode) return valueCol;\n if (!col.option.aggFun)\n return { ...valueCol, formula: `(${col.option.formula})` };\n return {\n ...valueCol,\n formula: `${col.option.aggFun}(${col.option.formula})`,\n };\n });\n};\n\nexport const defaultDateRange: DateRange = {\n time_period: \"past_quarter\",\n};\n\nexport const getPromotedFilterRulesSelectOptions = (promotedFiltersStoreValue: {\n [datasetId: string]: { [id: string]: FilterPanelStoreType };\n}) => {\n let promotedFiltersSelectOptions = [];\n\n for (const [datasetId, pf] of Object.entries(\n promotedFiltersStoreValue ?? {},\n )) {\n for (const rule of Object.values(pf)) {\n if (rule.rules[0]) {\n const rules = {\n ...rule.rules[0],\n option: { ...rule.rules[0].option, datasetId },\n };\n promotedFiltersSelectOptions.push(rules);\n }\n }\n }\n return promotedFiltersSelectOptions;\n};\n\nexport const checkIfCurrencyFormula = (props: {\n formula: string;\n columns: any;\n}) => {\n const { formula, columns } = props;\n const notAllowedFunctions = [\"COUNT\", \"COUNTDIST\", \"CONCAT\"];\n const extractColumnValues = (str: string) => {\n const regex = /'(.*?)'/g;\n const matches = [];\n let match;\n\n while ((match = regex.exec(str))) {\n matches.push(match[1]);\n }\n\n return matches;\n };\n\n //check if formula includes any of the not allowed functions\n const hasNotAllowedFunctions = notAllowedFunctions.some((func) =>\n _.includes([formula], func),\n );\n\n if (hasNotAllowedFunctions) {\n return false;\n } else {\n const columnValues = extractColumnValues(formula);\n const currencyColumn = _.chain(columns)\n .filter((col: ColumnSetting) => col.isCurrency)\n .map((col: ColumnSetting) => col.headerName || col.field)\n .compact()\n .value();\n\n // check if anyone of columnValues is in columns array\n const hasCurrencyColumn = columnValues.some((col: string) =>\n (currencyColumn as any).includes(col),\n );\n return hasCurrencyColumn;\n }\n};\n\nexport const getProjectAsInput = (valueCols: ValueColsType[]) => {\n const projectAsInput = _.reduce(\n valueCols,\n (acc, curr) => {\n if (curr.showAs && curr.showAs !== ShowAsEnum.DEFAULT && curr.label) {\n const mappedValue = ShowAsToProjectFractionMapper[curr.showAs];\n if (mappedValue) {\n acc[curr.label] = mappedValue;\n }\n }\n return acc;\n },\n {} as Record<string, ProjectFractionEnum>,\n );\n return projectAsInput;\n};\n\nexport const getUpdatedDefinitionCustomModel = (props: {\n metricDefinitionModel: Definition;\n parentDefinitionModel: Definition;\n parentCustomModel: WorkbookCustomModel;\n metricCustomModel: PivotCustomModel;\n removeSort?: boolean;\n}) => {\n const {\n metricDefinitionModel,\n parentDefinitionModel,\n metricCustomModel,\n parentCustomModel,\n removeSort,\n } = props;\n\n const parentTableVariable = parentCustomModel.variable;\n const metricNewColumns = _.filter(\n metricDefinitionModel.variables ?? [],\n (v) => {\n if (!v.transforms || !v.transforms[0]) {\n return false;\n }\n if (removeSort) {\n return (\n findParentIsMetricSeries(\n (v.transforms[0] as Sort).table,\n metricDefinitionModel.variables ?? [],\n ) && v.transforms[0].type !== \"Sort\"\n );\n }\n return findParentIsMetricSeries(\n (v.transforms[0] as Sort).table,\n metricDefinitionModel.variables ?? [],\n );\n },\n );\n\n const definitionVariables = metricDefinitionModel.variables ?? [];\n const analysisVariable: Variable | undefined = _.find<Variable>(\n definitionVariables,\n (v: Variable) =>\n !!_.find(v.transforms, (t: Transform<any>) => t.type === \"MetricSeries\"),\n );\n\n metricDefinitionModel.imports = _.uniqBy(\n [\n ...(parentDefinitionModel.imports ?? []),\n ...(metricDefinitionModel.imports ?? []),\n ],\n \"to\",\n );\n\n const parentDefinitionAliases = parentDefinitionModel.aliases ?? {};\n\n const parentTableVariableAlias = parentTableVariable\n ? (parentDefinitionAliases[parentTableVariable] as {\n [columnName: string]: string;\n })\n : {};\n\n const metricDefinitionAliases = {\n ...metricDefinitionModel.aliases,\n ...parentDefinitionAliases,\n } as { [tableId: string]: { [columnName: string]: string } };\n\n //foreach table in metricDefinitionAliases replace the values with parentTableVariableAlias\n for (const [tableId] of Object.entries(metricDefinitionAliases)) {\n if (!parentDefinitionAliases[tableId]) {\n //if the table id does not belong to the data sheet\n\n const metricTableAlias = metricDefinitionAliases[tableId] as {\n [columnName: string]: string;\n };\n\n //foreach each value in the metricTableAlias replace the value with the value of the parentTableVariableAlias\n\n for (const [columnName, columnId] of Object.entries(metricTableAlias)) {\n //find the value of the parentTableVariableAlias where the key is the columnId\n\n const pColName = _.findKey(\n parentTableVariableAlias,\n (pColId) => pColId === columnId,\n );\n\n if (pColName && pColName !== columnName) {\n delete metricTableAlias[columnName];\n metricTableAlias[pColName] = parentTableVariableAlias[pColName];\n }\n }\n }\n }\n metricDefinitionModel.aliases = metricDefinitionAliases;\n\n const variables = _.cloneDeep(parentDefinitionModel.variables ?? []);\n metricDefinitionModel.variables = definitionVariables.filter(\n (v: Variable) => v.name === analysisVariable?.name,\n );\n\n const previousVariables = metricDefinitionModel.variables;\n metricDefinitionModel.variables = [...variables];\n const variableNames = metricDefinitionModel.variables?.map(\n (v: Variable) => v?.name,\n );\n metricDefinitionModel.variables.push(\n ..._.filter(previousVariables, (v: Variable) =>\n variableNames?.includes(v.name),\n ),\n );\n const filterVariable = _.find(definitionVariables, (v: Variable) =>\n v.transforms?.some(\n (t: Transform<any>) =>\n t.type === \"RuleFilter\" && t.rule === \"${rule_pivot}\",\n ),\n );\n if (filterVariable && parentTableVariable) {\n (filterVariable.transforms![0] as RuleFilter).table = parentTableVariable;\n metricDefinitionModel.variables.push(filterVariable);\n }\n if (analysisVariable && parentTableVariable) {\n //@ts-ignore\n analysisVariable.transforms![0].table = parentTableVariable;\n (analysisVariable.transforms![0] as MetricSeries).row_group_by =\n \"${rowGroupByInput}\";\n (analysisVariable.transforms![0] as MetricSeries).col_group_by =\n \"${columnGroupByInput}\";\n\n const rowGroups = metricCustomModel?.gridColumnState?.rowGroupCols ?? [];\n const valueCols = metricCustomModel?.gridColumnState?.valueCols ?? [];\n const showAsList = _.chain(valueCols)\n .filter((vc) => !!vc.showAs)\n .map((vc) => vc?.showAs)\n .value();\n\n (analysisVariable.transforms![0] as MetricSeries).require_totals =\n !_.isEmpty(rowGroups) ||\n (!_.isEmpty(showAsList) &&\n _.some(showAsList, (showAs) => showAs !== \"default\"));\n\n //find the variable where the type of the 0 element of the transforms is 'FilterRule' and the table is the same as the variable of the analysisVariable\n\n if (filterVariable) {\n //@ts-ignore\n analysisVariable.transforms![0].table = filterVariable.name;\n //@ts-ignore\n\n //update aliases and variables of updatedDefinitionModel with the filterVariable aliases and variables\n if (metricDefinitionModel.aliases && parentTableVariable) {\n metricDefinitionModel.aliases[parentTableVariable] = {\n ...metricDefinitionModel.aliases[parentTableVariable],\n };\n }\n }\n\n metricDefinitionModel.variables.push(analysisVariable);\n metricCustomModel.variable = analysisVariable.name;\n\n // update the sheet inputs in customModel\n }\n\n metricCustomModel.inputs = {\n ...parentCustomModel.inputs,\n ...metricCustomModel.inputs,\n };\n\n if (!_.isEmpty(metricNewColumns)) {\n metricDefinitionModel.variables.push(...metricNewColumns);\n metricCustomModel.variable =\n metricNewColumns[metricNewColumns.length - 1].name;\n }\n\n if (\n metricCustomModel.parentTableColumnSettings &&\n parentCustomModel.uiSettings?.columnSettings\n ) {\n metricCustomModel.parentTableColumnSettings.splice(\n 0,\n metricCustomModel.parentTableColumnSettings.length,\n ...parentCustomModel.uiSettings.columnSettings,\n );\n }\n\n if (\n metricCustomModel.inputs?.[\"view_worksheet\"] &&\n metricCustomModel.parentTableColumnSettings\n ) {\n _.forEach(metricCustomModel.parentTableColumnSettings, (c) => {\n if (metricCustomModel.inputs?.view_worksheet) {\n metricCustomModel.inputs.view_worksheet = _.uniq([\n ...metricCustomModel.inputs.view_worksheet,\n c.field,\n ]);\n }\n });\n }\n\n if (parentTableVariable) {\n metricCustomModel.parentTableVariable = parentTableVariable;\n }\n return {\n definitionModel: metricDefinitionModel,\n customModel: metricCustomModel,\n };\n};\n\nexport const getUpdatedWorksheetDefinitionCustomModels = (props: {\n parentSheet: Sheet<WorkbookCustomModel>;\n metricSheet: Sheet<PivotCustomModel>;\n}) => {\n const { parentSheet, metricSheet } = props;\n const parentDefinitionModel = parentSheet?.definitionModel as Definition;\n const parentCustomModel = parentSheet?.customModel;\n const metricDefinitionModel = metricSheet?.definitionModel as Definition;\n const metricCustomModel = metricSheet?.customModel;\n\n if (!parentCustomModel || !metricCustomModel) {\n throw new Error(\"Parent or metric custom model is missing\");\n }\n\n return {\n ...getUpdatedDefinitionCustomModel({\n metricDefinitionModel,\n parentDefinitionModel,\n metricCustomModel,\n parentCustomModel,\n }),\n };\n};\n\nexport const timeBinToIntervalMapper = {\n per_month: \"Month\",\n per_quarter: \"Quarter\",\n per_week: \"Week\",\n per_day: \"Day\",\n per_year: \"Year\",\n};\n\nexport const mapValueColsWithTrends = (props: {\n valueCols: ValueColsType[];\n compareTrends: PivotCustomModel[\"compareTrends\"];\n}) => {\n const { valueCols, compareTrends } = props;\n return _.chain(valueCols)\n .filter((vc) => !vc.hide)\n .flatMap((vc) => {\n if (_.isEmpty(compareTrends)) {\n return [vc];\n }\n const trends = _.map(compareTrends, (ct) => {\n return {\n ...vc,\n label: `${vc.label}__${ct.name}`,\n col: `${vc.col}__${ct.name}`,\n sourceLabel: vc.sourceLabel ?? vc.label,\n compareTrendId: ct.id,\n };\n });\n return trends;\n })\n .value();\n};\n","import type { SelectOptionType } from \"$models/types/selectType\";\nimport {\n CommonFilter,\n FilterPanelStoreType,\n FilterRule,\n FilterSelectOptionsType,\n PromotedFiltersType,\n RuleType,\n} from \"$models/ui-models/filterModel\";\nimport { ColumnSetting } from \"$models/ui-models/workbookModel\";\nimport {\n getColumnSettingsToSelectOptions,\n replaceFilterColumn,\n} from \"./analysisMethods\";\nimport {\n filterToSelectOptionType,\n getSelectOptionTypeToFilter,\n} from \"./filterUtils\";\nimport _ from \"lodash\";\n\nexport type MergeCommonFilterType = {\n commonFilters: CommonFilter[];\n rule: FilterSelectOptionsType[];\n condition: RuleType;\n id: string; // id of the block/line/kpi\n};\n\nexport type MergeFilterType = {\n id: string; // id of the block/line/kpi -> metric\n metricFilters: FilterRule;\n columnSettings: ColumnSetting[]; // metric column settings\n commonFilters: CommonFilter[];\n promotedFilters: PromotedFiltersType[];\n datasetIds: string[];\n};\n\nexport type ApplicablePromotedFiltersType = {\n id: string; // id of the block/line/kpi -> metric\n datasetIds: string[];\n promotedFilters: PromotedFiltersType[];\n};\n\nexport interface IMergeFilterService {\n mergeCommonFilters(props: MergeCommonFilterType): FilterPanelStoreType;\n mergeFilters(props: MergeFilterType): FilterRule; // merge all filters -> metric, promoted, common\n}\n\nexport class MergeFilterService implements IMergeFilterService {\n private getColumnSettingsForCommonFilters(\n cf: CommonFilter,\n ): SelectOptionType<ColumnSetting>[] {\n return [\n {\n label: cf.name,\n value: cf.column.name,\n option: {\n headerName: cf.name,\n field: cf.column.name, //@ts-ignore\n type: cf.column.data_type,\n datasetName: cf.datasetName,\n datasetId: cf.datasetId,\n },\n },\n ];\n }\n\n mergeCommonFilters(props: MergeCommonFilterType): FilterPanelStoreType {\n const { commonFilters, rule, id, condition } = props;\n let replacedFr: FilterSelectOptionsType[][] = [];\n if (_.isEmpty(commonFilters))\n return { defaultType: condition, rules: rule };\n _.forEach(commonFilters, (f: CommonFilter) => {\n const columnSettingsSelectOption =\n this.getColumnSettingsForCommonFilters(f);\n\n // check if applied on the line\n const appliedOnLine = _.find(\n f?.appliedOnBlocks,\n (l) => l.blockId === id,\n ) as {\n blockId: string;\n applied: boolean;\n blockName: string;\n column: string;\n columnSettings: SelectOptionType<ColumnSetting>[];\n };\n if (appliedOnLine && appliedOnLine.applied) {\n const commonRule = f.rule;\n const fr = filterToSelectOptionType(\n commonRule,\n columnSettingsSelectOption,\n );\n const columnSetting = _.find(\n appliedOnLine.columnSettings,\n (c) => c.value === appliedOnLine.column,\n );\n if (columnSetting) {\n replacedFr.push(\n replaceFilterColumn({ fr: fr.rules, column: columnSetting }),\n );\n }\n }\n });\n\n const mergedFr = _.unionBy(replacedFr.flat(), rule, \"value\");\n\n return { defaultType: condition, rules: mergedFr };\n }\n\n private getApplicablePromotedFilters(props: ApplicablePromotedFiltersType) {\n const { id, datasetIds, promotedFilters } = props;\n return _.filter(promotedFilters, (pf) => {\n const appliedBlock = _.find(\n pf.appliedOnBlocks,\n (aob) => aob.blockId === id,\n );\n const isApplied = appliedBlock?.applied ?? false;\n return isApplied && _.includes(datasetIds, pf.datasetId);\n });\n }\n\n private getUnion(\n promotedFilters: PromotedFiltersType[],\n metricFilters: FilterRule,\n columnSettings: ColumnSetting[],\n ): FilterPanelStoreType {\n /** get select options for promoted filters */\n const pfSelectOptions = _.map(promotedFilters, (pf) => {\n return (\n filterToSelectOptionType(\n pf.rule,\n getColumnSettingsToSelectOptions(pf.blockColumnSettings),\n )?.rules ?? []\n );\n }).flat();\n\n const mFilterModel = filterToSelectOptionType(\n metricFilters,\n getColumnSettingsToSelectOptions(columnSettings),\n );\n\n if (_.isEmpty(mFilterModel)) {\n return { defaultType: \"and_cond\", rules: pfSelectOptions };\n }\n\n const ruleType = mFilterModel?.defaultType ?? \"and_cond\";\n const mSelectOptions = mFilterModel?.rules ?? [];\n\n const union = _.unionBy(pfSelectOptions, mSelectOptions, \"value\");\n return { defaultType: ruleType, rules: union };\n }\n\n /** merges promoted filter to metric filter */\n private mergePromotedFilters(props: MergeFilterType): FilterPanelStoreType {\n const { metricFilters, columnSettings, promotedFilters } = props;\n\n const applicablePromotedFilters = this.getApplicablePromotedFilters({\n id: props.id,\n datasetIds: props.datasetIds,\n promotedFilters,\n });\n\n return this.getUnion(\n applicablePromotedFilters,\n metricFilters,\n columnSettings,\n );\n }\n\n mergeFilters(props: MergeFilterType): FilterRule {\n const { commonFilters } = props;\n\n const filtersWithPromoted = this.mergePromotedFilters(props);\n const filtersWithCommon = this.mergeCommonFilters({\n commonFilters,\n rule: filtersWithPromoted.rules,\n id: props.id,\n condition: (filtersWithPromoted?.defaultType ?? \"and_cond\") as RuleType,\n });\n\n return getSelectOptionTypeToFilter(filtersWithCommon);\n }\n}\n","import { HierarchyProperties, Worksheet } from \"$models/gen/Api\";\nimport { DashboardDateRangeModel } from \"$models/ui-models/dashboardModel\";\nimport { Inputs, TimeBin } from \"$models/ui-models/definitionModel\";\nimport {\n CommonFilter,\n FilterPanelStoreType,\n FilterRule,\n PromotedFiltersType,\n} from \"$models/ui-models/filterModel\";\nimport {\n ShowAsEnum,\n type BoardCurrencyModel,\n type ColumnSetting,\n type MetricMetadataType,\n type RowGroupsType,\n type ValueColsType,\n} from \"$models/ui-models/workbookModel\";\nimport _ from \"lodash\";\nimport {\n filterToSelectOptionType,\n getColumnFilterRuleFromCombinedFilterRule,\n getSelectOptionTypeToFilter,\n} from \"./filterUtils\";\nimport { MergeFilterService } from \"./mergeFilterService\";\nimport {\n defaultFilterRule,\n getColumnSettingsToSelectOptions,\n getDrilldownFiltersMap,\n getFiltersToBeAppliedOnDrilldown,\n getMetricFilterRule,\n ShowAsToProjectFractionMapper,\n} from \"./analysisMethods\";\nimport { DateRange } from \"$models/ui-models/dateRangeModel\";\n\nconst updatePromotedFiltersAndDateRangeToMetadataAndInputs = (props: {\n blockId: string;\n metadata: MetricMetadataType;\n promotedFiltersStoreValue: {\n [datasetId: string]: { [id: string]: FilterPanelStoreType };\n };\n promotedFilters: PromotedFiltersType[];\n inputs: Inputs;\n dateRangeModel: DashboardDateRangeModel;\n currencyModel: BoardCurrencyModel;\n commonFilters?: CommonFilter[];\n}) => {\n const { blockId, metadata, promotedFilters, inputs, commonFilters } = props;\n\n const updateDateRange = (updateProps: {\n blockId: string;\n blockDateRange: DateRange;\n dateRangeModel: DashboardDateRangeModel;\n }) => {\n const { blockId, blockDateRange, dateRangeModel } = updateProps;\n const { dateRange, appliedOnBlocks } = dateRangeModel;\n\n const dateRangeApplicableOnBlockIds = appliedOnBlocks\n ?.filter((apb: { applied: boolean }) => apb.applied)\n ?.map((apb: { blockId: string }) => apb.blockId);\n\n if (dateRangeApplicableOnBlockIds?.includes(blockId)) {\n return dateRange;\n } else {\n return blockDateRange;\n }\n };\n\n const updateCurrencyFilter = (updateProps: {\n blockId: string;\n blockCurrencyFilter: string;\n currencyModel: BoardCurrencyModel;\n }) => {\n const { blockId, blockCurrencyFilter, currencyModel } = updateProps;\n const { currency, appliedOnBlocks } = currencyModel;\n\n const currencyFilterApplicableOnBlockIds = _.chain(appliedOnBlocks)\n .filter((apb: { applied: boolean }) => apb.applied)\n .map((apb: { blockId: string }) => apb.blockId)\n .value();\n\n if (currencyFilterApplicableOnBlockIds?.includes(blockId)) {\n return currency;\n } else {\n return blockCurrencyFilter;\n }\n };\n\n const metricColumnFilter = getColumnFilterRuleFromCombinedFilterRule(\n metadata.filterModel as FilterRule,\n metadata.valueCols || [],\n );\n\n const updatedFilterRule = new MergeFilterService().mergeFilters({\n id: blockId,\n metricFilters: metricColumnFilter as FilterRule,\n columnSettings: metadata.columnSettings,\n promotedFilters,\n commonFilters: commonFilters || [],\n datasetIds: [metadata.datasetId || \"\"],\n });\n\n const updatedDateRange = updateDateRange({\n blockId,\n blockDateRange: metadata.dateRange || { time_period: \"past_quarter\" },\n dateRangeModel: props.dateRangeModel,\n });\n\n const updateCurrencyFilterValue = updateCurrencyFilter({\n blockId,\n blockCurrencyFilter: inputs?.to_currency ?? metadata.currency ?? \"\",\n currencyModel: props.currencyModel,\n });\n\n const updatedInputs = {\n ...inputs,\n [\"filterOnAggregates\"]: _.get(\n inputs,\n \"filterOnAggregates\",\n defaultFilterRule,\n ),\n [\"rule_pivot\"]: updatedFilterRule,\n date_range: updatedDateRange,\n to_currency: updateCurrencyFilterValue,\n rate_type: inputs?.rate_type ?? '',\n showDimensionMappingValues: metadata.showDimensionMappingValues ?? false,\n showBinSortOrderValues: metadata?.inputs?.showBinSortOrderValues ?? false,\n groupsSortOrder:\n inputs?.groupsSortOrder ?? inputs.groupByInput.map((r) => [r, \"asc\"]),\n };\n const updatedMetadata = {\n ...metadata,\n filterModel: updatedFilterRule,\n dateRange: updatedDateRange,\n inputs: updatedInputs,\n };\n\n return { updatedInputs, updatedMetadata };\n};\n\nconst getRowsToGroupBy = (props: {\n pivotColumns: string[];\n timeBin: TimeBin | \"\";\n rowGroupColumns: RowGroupsType;\n}) => {\n const { pivotColumns, timeBin, rowGroupColumns } = props;\n const rowsToGroupBy = [];\n if (!_.isEmpty(pivotColumns)) {\n if (timeBin) {\n rowsToGroupBy.push([...rowGroupColumns]);\n for (let i = 0; i < pivotColumns.length; i++) {\n const pcols = pivotColumns;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupColumns]);\n }\n } else {\n for (let i = 0; i < pivotColumns.length; i++) {\n const pcols = pivotColumns;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupColumns]);\n }\n }\n } else {\n rowsToGroupBy.push([...pivotColumns, ...rowGroupColumns]);\n }\n\n return rowsToGroupBy;\n};\n\nconst getInputsArray = (props: {\n pivotColumns: string[];\n timeBin: TimeBin | \"\";\n rowsToGroupBy: string[][];\n inputs: Inputs;\n dateColumn: string;\n valueCols: ValueColsType[];\n hierarchy?: HierarchyProperties;\n rowGroupCols?: RowGroupsType;\n compareTrends?: MetricMetadataType[\"compareTrends\"];\n showDimensionMappingValues?: boolean;\n showBinSortOrderValues: boolean;\n}) => {\n const {\n pivotColumns,\n timeBin,\n rowsToGroupBy,\n inputs,\n dateColumn,\n valueCols,\n hierarchy,\n rowGroupCols,\n compareTrends,\n showDimensionMappingValues = false,\n showBinSortOrderValues = false,\n } = props;\n let inputsArray: Inputs[] = [];\n const inputsCompareTrendsIndices: Array<{ id: string; index: number }> = [];\n\n const getViewsInput = (index?: number) => {\n let viewInputs = inputs?.viewInputs;\n if (!viewInputs) return undefined;\n\n const valueColsLabel = _.map(valueCols, (vc) => vc.label);\n viewInputs = _.filter(\n viewInputs,\n (vi) => valueColsLabel.includes(vi) || vi.includes(\"__bc_\"),\n );\n\n if (_.isEmpty(rowGroupCols)) {\n viewInputs = _.filter(viewInputs, (vi) => !vi.includes(\"__bc_\"));\n }\n if (timeBin) {\n viewInputs = _.uniq([...viewInputs, dateColumn, `${dateColumn}_group`]);\n }\n if (index !== undefined) {\n viewInputs = _.uniq([...viewInputs, ...rowsToGroupBy[index]]);\n } else {\n if (!_.isEmpty(rowGroupCols)) {\n let row = rowsToGroupBy[0];\n if (!_.isEmpty(hierarchy) && hierarchy) {\n const rowLabelName = _.get(rowsToGroupBy, \"0.0.0\");\n row = [\n rowLabelName,\n `${rowLabelName}_level_number`,\n `${rowLabelName}_${hierarchy.parentColId}`,\n `${rowLabelName}_${hierarchy.nodeColName}`,\n ];\n }\n\n viewInputs = _.uniq([...viewInputs, ...row]);\n }\n }\n return viewInputs;\n };\n\n const projectAsInput = _.reduce(\n valueCols,\n (acc: Record<string, any>, curr) => {\n if (curr.showAs && curr.showAs !== ShowAsEnum.DEFAULT && curr.label) {\n acc[curr.label] = ShowAsToProjectFractionMapper[curr.showAs];\n }\n return acc;\n },\n {} as Record<string, any>,\n );\n\n const sortPivotInputsKey = Object.keys(inputs).find((key) =>\n key.startsWith(\"sortPivotInputs\"),\n );\n const sortPivotInputsValue = sortPivotInputsKey\n ? { ...inputs[sortPivotInputsKey] }\n : undefined;\n\n if (!_.isEmpty(pivotColumns)) {\n const pc = timeBin ? [dateColumn, ...pivotColumns] : pivotColumns;\n\n pc?.forEach((col, index) => {\n const groupByInput = rowsToGroupBy[index];\n const columnGroupByInput = _.filter(groupByInput, (r) => pc.includes(r));\n const rowGroupByInput = _.filter(groupByInput, (r) => !pc.includes(r));\n if (sortPivotInputsValue) {\n sortPivotInputsValue.pivotColumns = rowsToGroupBy[index];\n }\n\n inputsArray.push({\n ...inputs,\n groupByInput: rowsToGroupBy[index],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n viewInputs: getViewsInput(index),\n columnGroupByInput,\n rowGroupByInput,\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: groupByInput.map((r) => [r, \"asc\"]),\n ...(sortPivotInputsKey\n ? { [sortPivotInputsKey]: sortPivotInputsValue }\n : {}),\n });\n });\n } else {\n if (compareTrends && compareTrends.length > 0) {\n if (sortPivotInputsValue) {\n sortPivotInputsValue.pivotColumns = rowsToGroupBy[0];\n }\n inputsArray = _.map(compareTrends, (ct, index) => {\n inputsCompareTrendsIndices.push({ id: ct.id, index });\n return {\n ...inputs,\n date_range: { ...ct.dateRange },\n groupByInput: rowsToGroupBy[0],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n viewInputs: getViewsInput(),\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n ...(sortPivotInputsKey\n ? { [sortPivotInputsKey]: sortPivotInputsValue }\n : {}),\n };\n });\n } else {\n if (sortPivotInputsValue) {\n sortPivotInputsValue.pivotColumns = rowsToGroupBy[0];\n }\n inputsArray = [\n {\n ...inputs,\n groupByInput: rowsToGroupBy[0],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n viewInputs: getViewsInput(),\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n ...(sortPivotInputsKey\n ? { [sortPivotInputsKey]: sortPivotInputsValue }\n : {}),\n },\n ];\n }\n }\n\n return { inputs: inputsArray, inputsCompareTrendsIndices };\n};\n\nconst mergeDrilldownFiltersToMetricFilters = (props: {\n metricFilterRule: FilterRule;\n filtersToBeApplied: { field: string; key: string }[];\n columnSettings: ColumnSetting[];\n}) => {\n const { metricFilterRule, filtersToBeApplied, columnSettings } = props;\n const columnSelectOptions = getColumnSettingsToSelectOptions(columnSettings);\n const metricFilterRuleSelectOptions = filterToSelectOptionType(\n metricFilterRule,\n columnSelectOptions,\n );\n const drilldownFilterMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const mergedRule = _.unionBy(\n Object.values(drilldownFilterMap),\n metricFilterRuleSelectOptions.rules,\n \"value\",\n );\n const filterRule: FilterRule = getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: mergedRule,\n });\n\n return filterRule;\n};\n\nexport const getMetricDefinition = (props: {\n sheetId: string;\n metadata: MetricMetadataType;\n groupKeys: string[];\n lastModifiedDate: string;\n promotedFiltersStoreValue: {\n [datasetId: string]: { [id: string]: FilterPanelStoreType };\n };\n promotedFilters: PromotedFiltersType[];\n dateRangeModel: DashboardDateRangeModel;\n currencyModel: BoardCurrencyModel;\n commonFilters: CommonFilter[];\n}) => {\n const {\n sheetId,\n metadata,\n groupKeys,\n promotedFiltersStoreValue,\n promotedFilters,\n dateRangeModel,\n currencyModel,\n commonFilters,\n } = props;\n const {\n parentTableVariable,\n valueCols,\n rowGroupCols,\n pivotCols,\n timeBin,\n dateColumn,\n columnSettings,\n } = metadata;\n let inputs = metadata?.inputs;\n\n //if (isHierarchyMetric({ rowGroups: metadata?.rowGroupCols })) {\n //gridApi.setPivotResultColumns([]);\n // return await this.runHierarchyMetricsForDashboards(props);\n //}\n\n const { updatedInputs } =\n updatePromotedFiltersAndDateRangeToMetadataAndInputs({\n blockId: sheetId,\n metadata,\n promotedFiltersStoreValue,\n promotedFilters,\n inputs,\n dateRangeModel,\n currencyModel,\n commonFilters,\n });\n\n let rowsToGroupBy = getRowsToGroupBy({\n pivotColumns: pivotCols || [],\n rowGroupColumns: (rowGroupCols || []).slice(0, groupKeys.length + 1),\n timeBin: timeBin || \"\",\n });\n\n let { inputs: inputsArray } = getInputsArray({\n inputs: updatedInputs,\n dateColumn: dateColumn || \"\",\n timeBin: timeBin || \"\",\n rowsToGroupBy: rowsToGroupBy as string[][],\n pivotColumns: pivotCols || [],\n valueCols: valueCols || [],\n rowGroupCols: rowGroupCols,\n compareTrends: metadata.compareTrends,\n showDimensionMappingValues:\n metadata?.inputs?.showDimensionMappingValues ?? false,\n showBinSortOrderValues: metadata?.inputs?.showBinSortOrderValues ?? false,\n });\n\n if (!_.isEmpty(groupKeys)) {\n const mergedFilterRule = mergeDrilldownFiltersToMetricFilters({\n metricFilterRule: getMetricFilterRule(inputsArray),\n filtersToBeApplied: getFiltersToBeAppliedOnDrilldown({\n rowGroups: metadata?.rowGroupCols as string[],\n groupKeys,\n }),\n columnSettings,\n });\n\n inputsArray = inputsArray?.map((ia) => {\n return { ...ia, [\"rule_pivot\"]: mergedFilterRule };\n });\n }\n\n return {\n inputs: inputsArray,\n describe: parentTableVariable,\n };\n};\n\nexport const getSelectedMetricsParentIds = (\n selectedItems: { sheet: Worksheet }[],\n) => {\n return _.chain(selectedItems)\n .map((s) => s?.sheet?.customFields?.parentTableId as unknown as string)\n .uniq()\n .value();\n};\n\nexport const defaultDashboardDateRangeModel: DashboardDateRangeModel = {\n //@ts-ignore\n dateRange: {},\n appliedOnBlocks: [],\n};\n\nexport const defaultCurrencyModel: BoardCurrencyModel = {\n currency: \"USD\",\n appliedOnBlocks: [],\n};\n","// REMOVE THIS FILE AFTER REFACTORING INPUT TABLES\nimport { ColumnFilterRule } from \"$models/gen/Api\";\nimport {\n MetricAggregateType,\n MetricSeries,\n} from \"$models/ui-models/definitionModel\";\nimport {\n InputTableDefinitionModel,\n InputTableFilterTransform,\n InputTableSortTransform,\n InputTableTransformation,\n} from \"$models/ui-models/inputTableModel\";\nimport { SortOptions, ValueColsType } from \"$models/ui-models/workbookModel\";\nimport _ from \"lodash\";\nimport {\n getColumnSettingsToSelectOptions,\n getDrilldownFiltersMap,\n getFiltersToBeAppliedOnDrilldown,\n} from \"../metric/analysisMethods\";\nimport {\n filterToSelectOptionType,\n getSelectOptionTypeToFilter,\n} from \"../metric/filterUtils\";\n\nexport const getGroupByDefinition = ({\n tableId,\n tableName,\n groupKeys,\n rowGroupCols,\n columnSettings,\n filterRules,\n sortValue,\n metricSeries,\n}) => {\n let filtersToBeApplied = getFiltersToBeAppliedOnDrilldown({\n groupKeys,\n rowGroups: rowGroupCols as string[],\n });\n const columnSelectOptions = getColumnSettingsToSelectOptions(columnSettings);\n\n const metricFilterRuleSelectOptions = filterToSelectOptionType(\n filterRules,\n columnSelectOptions,\n );\n const crossFilterMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const mergedRule = _.unionBy(\n Object.values(crossFilterMap),\n metricFilterRuleSelectOptions.rules,\n \"value\",\n );\n\n const filterRule = getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: mergedRule,\n });\n return generateDefinitionModel({\n filters: filterRule as any,\n sort: sortValue,\n metricSeries,\n tableId,\n tableName,\n });\n};\n\nexport const generateDefinitionModel = ({\n filters,\n sort,\n metricSeries,\n tableId,\n tableName,\n}: {\n filters?: ColumnFilterRule;\n sort?: Record<string, any>;\n metricSeries?: Partial<MetricSeries>;\n tableId: string;\n tableName: string;\n}): { targetName: string; definition: InputTableDefinitionModel } => {\n const { transformations, targetName } = generateTransformations(\n tableName,\n filters,\n sort,\n metricSeries,\n );\n\n const importConfig: any = getImportConfig(tableId, tableName);\n return {\n targetName,\n definition: {\n imports: [importConfig],\n transformations,\n },\n };\n};\n\nexport const sortConfigFromValue = (sortBy: SortOptions) => {\n const sortValueObj = !_.isNil(sortBy?.sortByField)\n ? {\n [sortBy.sortByField.value]: _.get(\n sortBy,\n \"sortByOrder\",\n \"asc\",\n ).toUpperCase(),\n }\n : undefined;\n return sortValueObj;\n};\n\nexport const getMetricSeries = (props: {\n pivotCols: string[];\n rowGroupCols: string[];\n valueCols: ValueColsType[];\n}) => {\n const { pivotCols, rowGroupCols, valueCols } = props;\n const group_by = [...pivotCols, ...rowGroupCols];\n\n const aggregates: MetricAggregateType[] = _.map<\n ValueColsType,\n | [alias: string, formula: string]\n | [alias: string, col: string, func: string]\n >(valueCols, (valueCol) => {\n if (valueCol.type === \"formula\") {\n const formula = valueCol.formula;\n return [valueCol.label, formula];\n } else if (valueCol.type === \"column\") {\n const formula = valueCol.formula;\n return [valueCol.label, formula];\n }\n return [valueCol.label, valueCol.col, valueCol.aggFun];\n });\n\n const metricSeries: Partial<MetricSeries> = {\n aggregates,\n group_by,\n row_group_by: rowGroupCols,\n col_group_by: pivotCols,\n type: \"TableAggregate\",\n formula_on_aggregates: [],\n };\n return metricSeries;\n};\n\nconst getFilterConfig = (\n filters: ColumnFilterRule,\n prevName: string,\n): InputTableFilterTransform => ({\n name: \"table_filter\",\n table_name: prevName,\n filter: filters,\n type: \"CollectionFilter\",\n});\n\nconst getSortConfig = (\n sort: Record<string, any>,\n prevName: string,\n): InputTableSortTransform => ({\n name: \"table_sort\",\n table_name: prevName,\n sort_columns: sort,\n type: \"CollectionSort\",\n});\n\nconst generateTransformations = (\n tableName: string,\n filters?: ColumnFilterRule,\n sort?: Record<string, any>,\n metricSeries?: Partial<MetricSeries>,\n): { transformations: InputTableTransformation[]; targetName: string } => {\n const transformations = [];\n let prevName = tableName;\n let targetName = tableName;\n\n if (!_.isEmpty(filters)) {\n const filterConfig = getFilterConfig(filters, prevName);\n transformations.push(filterConfig);\n prevName = filterConfig.name;\n targetName = \"table_filter\";\n }\n\n if (metricSeries) {\n const aggregateConfig = {\n name: \"table_aggregate\",\n table_name: prevName,\n aggregates: metricSeries.aggregates,\n group_by: metricSeries.group_by,\n type: \"CollectionAggregate\",\n };\n transformations.push(aggregateConfig);\n prevName = aggregateConfig.name;\n targetName = \"table_aggregate\";\n }\n\n if (metricSeries?.aggregates) {\n if (sort !== undefined) {\n const sortEntries = Object.entries(sort);\n if (sortEntries.length > 0) {\n const newSort = {};\n for (const [sortKey, sortOrder] of sortEntries) {\n const matchingAggregate = metricSeries.aggregates.find(\n (agg) => agg[1] === sortKey,\n );\n if (matchingAggregate) {\n newSort[matchingAggregate[0]] = sortOrder;\n }\n }\n sort = _.isEmpty(newSort) ? {} : newSort;\n }\n }\n }\n\n if (!_.isEmpty(sort)) {\n const sortConfig = getSortConfig(sort, prevName);\n transformations.push(sortConfig);\n prevName = sortConfig.name;\n targetName = \"table_sort\";\n }\n\n return { transformations, targetName };\n};\n\nconst getImportConfig = (id: string, name: string) => ({\n name: name,\n table_id: id,\n type: \"TableImport\",\n});\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar events = {exports: {}};\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nevents.exports = EventEmitter;\nevents.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\nvar eventsExports = events.exports;\nvar EventEmitter$1 = /*@__PURE__*/getDefaultExportFromCjs(eventsExports);\n\nvar errorCodes;\n(function (errorCodes) {\n errorCodes[errorCodes[\"timeout\"] = 1] = \"timeout\";\n errorCodes[errorCodes[\"transportClosed\"] = 2] = \"transportClosed\";\n errorCodes[errorCodes[\"clientDisconnected\"] = 3] = \"clientDisconnected\";\n errorCodes[errorCodes[\"clientClosed\"] = 4] = \"clientClosed\";\n errorCodes[errorCodes[\"clientConnectToken\"] = 5] = \"clientConnectToken\";\n errorCodes[errorCodes[\"clientRefreshToken\"] = 6] = \"clientRefreshToken\";\n errorCodes[errorCodes[\"subscriptionUnsubscribed\"] = 7] = \"subscriptionUnsubscribed\";\n errorCodes[errorCodes[\"subscriptionSubscribeToken\"] = 8] = \"subscriptionSubscribeToken\";\n errorCodes[errorCodes[\"subscriptionRefreshToken\"] = 9] = \"subscriptionRefreshToken\";\n errorCodes[errorCodes[\"transportWriteError\"] = 10] = \"transportWriteError\";\n errorCodes[errorCodes[\"connectionClosed\"] = 11] = \"connectionClosed\";\n errorCodes[errorCodes[\"badConfiguration\"] = 12] = \"badConfiguration\";\n})(errorCodes || (errorCodes = {}));\nvar connectingCodes;\n(function (connectingCodes) {\n connectingCodes[connectingCodes[\"connectCalled\"] = 0] = \"connectCalled\";\n connectingCodes[connectingCodes[\"transportClosed\"] = 1] = \"transportClosed\";\n connectingCodes[connectingCodes[\"noPing\"] = 2] = \"noPing\";\n connectingCodes[connectingCodes[\"subscribeTimeout\"] = 3] = \"subscribeTimeout\";\n connectingCodes[connectingCodes[\"unsubscribeError\"] = 4] = \"unsubscribeError\";\n})(connectingCodes || (connectingCodes = {}));\nvar disconnectedCodes;\n(function (disconnectedCodes) {\n disconnectedCodes[disconnectedCodes[\"disconnectCalled\"] = 0] = \"disconnectCalled\";\n disconnectedCodes[disconnectedCodes[\"unauthorized\"] = 1] = \"unauthorized\";\n disconnectedCodes[disconnectedCodes[\"badProtocol\"] = 2] = \"badProtocol\";\n disconnectedCodes[disconnectedCodes[\"messageSizeLimit\"] = 3] = \"messageSizeLimit\";\n})(disconnectedCodes || (disconnectedCodes = {}));\nvar subscribingCodes;\n(function (subscribingCodes) {\n subscribingCodes[subscribingCodes[\"subscribeCalled\"] = 0] = \"subscribeCalled\";\n subscribingCodes[subscribingCodes[\"transportClosed\"] = 1] = \"transportClosed\";\n})(subscribingCodes || (subscribingCodes = {}));\nvar unsubscribedCodes;\n(function (unsubscribedCodes) {\n unsubscribedCodes[unsubscribedCodes[\"unsubscribeCalled\"] = 0] = \"unsubscribeCalled\";\n unsubscribedCodes[unsubscribedCodes[\"unauthorized\"] = 1] = \"unauthorized\";\n unsubscribedCodes[unsubscribedCodes[\"clientClosed\"] = 2] = \"clientClosed\";\n})(unsubscribedCodes || (unsubscribedCodes = {}));\n\n/** State of client. */\nvar State;\n(function (State) {\n State[\"Disconnected\"] = \"disconnected\";\n State[\"Connecting\"] = \"connecting\";\n State[\"Connected\"] = \"connected\";\n})(State || (State = {}));\n/** State of Subscription */\nvar SubscriptionState;\n(function (SubscriptionState) {\n SubscriptionState[\"Unsubscribed\"] = \"unsubscribed\";\n SubscriptionState[\"Subscribing\"] = \"subscribing\";\n SubscriptionState[\"Subscribed\"] = \"subscribed\";\n})(SubscriptionState || (SubscriptionState = {}));\n\n/** @internal */\nfunction startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n}\n/** @internal */\nfunction isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n}\n/** @internal */\nfunction log(level, args) {\n if (globalThis.console) {\n const logger = globalThis.console[level];\n if (isFunction(logger)) {\n logger.apply(globalThis.console, args);\n }\n }\n}\nfunction randomInt(min, max) {\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n/** @internal */\nfunction backoff(step, min, max) {\n // Full jitter technique, see:\n // https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n if (step > 31) {\n step = 31;\n }\n const interval = randomInt(0, Math.min(max, min * Math.pow(2, step)));\n return Math.min(max, min + interval);\n}\n/** @internal */\nfunction errorExists(data) {\n return 'error' in data && data.error !== null;\n}\n/** @internal */\nfunction ttlMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n}\n\n/** Subscription to a channel */\nclass Subscription extends EventEmitter$1 {\n /** Subscription constructor should not be used directly, create subscriptions using Client method. */\n constructor(centrifuge, channel, options) {\n super();\n this._resubscribeTimeout = null;\n this._refreshTimeout = null;\n this.channel = channel;\n this.state = SubscriptionState.Unsubscribed;\n this._centrifuge = centrifuge;\n this._token = '';\n this._getToken = null;\n this._data = null;\n this._getData = null;\n this._recover = false;\n this._offset = null;\n this._epoch = null;\n this._recoverable = false;\n this._positioned = false;\n this._joinLeave = false;\n this._minResubscribeDelay = 500;\n this._maxResubscribeDelay = 20000;\n this._resubscribeTimeout = null;\n this._resubscribeAttempts = 0;\n this._promises = {};\n this._promiseId = 0;\n this._inflight = false;\n this._refreshTimeout = null;\n this._delta = '';\n this._delta_negotiated = false;\n this._prevValue = null;\n this._unsubPromise = Promise.resolve();\n this._setOptions(options);\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (this._centrifuge._debugEnabled) {\n this.on('state', (ctx) => {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('subscription state', channel, ctx.oldState, '->', ctx.newState);\n });\n this.on('error', (ctx) => {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('subscription error', channel, ctx);\n });\n }\n else {\n // Avoid unhandled exception in EventEmitter for non-set error handler.\n this.on('error', function () { Function.prototype(); });\n }\n }\n /** ready returns a Promise which resolves upon subscription goes to Subscribed\n * state and rejects in case of subscription goes to Unsubscribed state.\n * Optional timeout can be passed.*/\n ready(timeout) {\n if (this.state === SubscriptionState.Unsubscribed) {\n return Promise.reject({ code: errorCodes.subscriptionUnsubscribed, message: this.state });\n }\n if (this.state === SubscriptionState.Subscribed) {\n return Promise.resolve();\n }\n return new Promise((res, rej) => {\n const ctx = {\n resolve: res,\n reject: rej\n };\n if (timeout) {\n ctx.timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n }, timeout);\n }\n this._promises[this._nextPromiseId()] = ctx;\n });\n }\n /** subscribe to a channel.*/\n subscribe() {\n if (this._isSubscribed()) {\n return;\n }\n this._resubscribeAttempts = 0;\n this._setSubscribing(subscribingCodes.subscribeCalled, 'subscribe called');\n }\n /** unsubscribe from a channel, keeping position state.*/\n unsubscribe() {\n this._unsubPromise = this._setUnsubscribed(unsubscribedCodes.unsubscribeCalled, 'unsubscribe called', true);\n }\n /** publish data to a channel.*/\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n }\n /** get online presence for a channel.*/\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n }\n /** presence stats for a channel (num clients and unique users).*/\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n }\n /** history for a channel. By default it does not return publications (only current\n * StreamPosition data) – provide an explicit limit > 0 to load publications.*/\n history(opts) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, opts);\n });\n }\n _methodCall() {\n if (this._isSubscribed()) {\n return Promise.resolve();\n }\n if (this._isUnsubscribed()) {\n return Promise.reject({ code: errorCodes.subscriptionUnsubscribed, message: this.state });\n }\n return new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n }\n _nextPromiseId() {\n return ++this._promiseId;\n }\n _needRecover() {\n return this._recover === true;\n }\n _isUnsubscribed() {\n return this.state === SubscriptionState.Unsubscribed;\n }\n _isSubscribing() {\n return this.state === SubscriptionState.Subscribing;\n }\n _isSubscribed() {\n return this.state === SubscriptionState.Subscribed;\n }\n _setState(newState) {\n if (this.state !== newState) {\n const oldState = this.state;\n this.state = newState;\n this.emit('state', { newState, oldState, channel: this.channel });\n return true;\n }\n return false;\n }\n _usesToken() {\n return this._token !== '' || this._getToken !== null;\n }\n _clearSubscribingState() {\n this._resubscribeAttempts = 0;\n this._clearResubscribeTimeout();\n }\n _clearSubscribedState() {\n this._clearRefreshTimeout();\n }\n _setSubscribed(result) {\n if (!this._isSubscribing()) {\n return;\n }\n this._clearSubscribingState();\n if (result.recoverable) {\n this._recover = true;\n this._offset = result.offset || 0;\n this._epoch = result.epoch || '';\n }\n if (result.delta) {\n this._delta_negotiated = true;\n }\n else {\n this._delta_negotiated = false;\n }\n this._setState(SubscriptionState.Subscribed);\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const ctx = this._centrifuge._getSubscribeContext(this.channel, result);\n this.emit('subscribed', ctx);\n this._resolvePromises();\n const pubs = result.publications;\n if (pubs && pubs.length > 0) {\n for (const i in pubs) {\n if (!pubs.hasOwnProperty(i)) {\n continue;\n }\n this._handlePublication(pubs[i]);\n }\n }\n if (result.expires === true) {\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n }\n _setSubscribing(code, reason) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._isSubscribing()) {\n return;\n }\n if (this._isSubscribed()) {\n this._clearSubscribedState();\n }\n if (this._setState(SubscriptionState.Subscribing)) {\n this.emit('subscribing', { channel: this.channel, code: code, reason: reason });\n }\n // @ts-ignore – for performance reasons only await _unsubPromise for emulution case where it's required.\n if (this._centrifuge._transport && this._centrifuge._transport.emulation()) {\n yield this._unsubPromise;\n }\n if (!this._isSubscribing()) {\n return;\n }\n this._subscribe();\n });\n }\n _subscribe() {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('subscribing on', this.channel);\n // need to check transport readiness here, because there's no point for calling getData or getToken\n // if transport is not ready yet\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (!this._centrifuge._transportIsOpen) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('delay subscribe on', this.channel, 'till connected');\n // subscribe will be called later automatically.\n return null;\n }\n const self = this;\n const getDataCtx = {\n channel: self.channel\n };\n if (!this._usesToken() || this._token) {\n if (self._getData) {\n self._getData(getDataCtx).then(function (data) {\n if (!self._isSubscribing()) {\n return;\n }\n self._data = data;\n self._sendSubscribe(self._token);\n });\n return null;\n }\n else {\n return self._sendSubscribe(self._token);\n }\n }\n this._getSubscriptionToken().then(function (token) {\n if (!self._isSubscribing()) {\n return;\n }\n if (!token) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n if (self._getData) {\n self._getData(getDataCtx).then(function (data) {\n if (!self._isSubscribing()) {\n return;\n }\n self._data = data;\n self._sendSubscribe(token);\n });\n }\n else {\n self._sendSubscribe(token);\n }\n }).catch(function (e) {\n if (!self._isSubscribing()) {\n return;\n }\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n type: 'subscribeToken',\n channel: self.channel,\n error: {\n code: errorCodes.subscriptionSubscribeToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n self._scheduleResubscribe();\n });\n return null;\n }\n _sendSubscribe(token) {\n // we also need to check for transport state before sending subscription\n // because it may change for subscription with side effects (getData, getToken options)\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (!this._centrifuge._transportIsOpen) {\n return null;\n }\n const channel = this.channel;\n const req = {\n channel: channel\n };\n if (token) {\n req.token = token;\n }\n if (this._data) {\n req.data = this._data;\n }\n if (this._positioned) {\n req.positioned = true;\n }\n if (this._recoverable) {\n req.recoverable = true;\n }\n if (this._joinLeave) {\n req.join_leave = true;\n }\n if (this._needRecover()) {\n req.recover = true;\n const offset = this._getOffset();\n if (offset) {\n req.offset = offset;\n }\n const epoch = this._getEpoch();\n if (epoch) {\n req.epoch = epoch;\n }\n }\n if (this._delta) {\n req.delta = this._delta;\n }\n const cmd = { subscribe: req };\n this._inflight = true;\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._call(cmd).then(resolveCtx => {\n this._inflight = false;\n // @ts-ignore - improve later.\n const result = resolveCtx.reply.subscribe;\n this._handleSubscribeResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._inflight = false;\n this._handleSubscribeError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n return cmd;\n }\n _handleSubscribeError(error) {\n if (!this._isSubscribing()) {\n return;\n }\n if (error.code === errorCodes.timeout) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._disconnect(connectingCodes.subscribeTimeout, 'subscribe timeout', true);\n return;\n }\n this._subscribeError(error);\n }\n _handleSubscribeResponse(result) {\n if (!this._isSubscribing()) {\n return;\n }\n this._setSubscribed(result);\n }\n _setUnsubscribed(code, reason, sendUnsubscribe) {\n if (this._isUnsubscribed()) {\n return Promise.resolve();\n }\n let promise = Promise.resolve();\n if (this._isSubscribed()) {\n if (sendUnsubscribe) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n promise = this._centrifuge._unsubscribe(this);\n }\n this._clearSubscribedState();\n }\n else if (this._isSubscribing()) {\n if (this._inflight && sendUnsubscribe) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n promise = this._centrifuge._unsubscribe(this);\n }\n this._clearSubscribingState();\n }\n if (this._setState(SubscriptionState.Unsubscribed)) {\n this.emit('unsubscribed', { channel: this.channel, code: code, reason: reason });\n }\n this._rejectPromises({ code: errorCodes.subscriptionUnsubscribed, message: this.state });\n return promise;\n }\n _handlePublication(pub) {\n if (this._delta && this._delta_negotiated) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const { newData, newPrevValue } = this._centrifuge._codec.applyDeltaIfNeeded(pub, this._prevValue);\n pub.data = newData;\n this._prevValue = newPrevValue;\n }\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const ctx = this._centrifuge._getPublicationContext(this.channel, pub);\n this.emit('publication', ctx);\n if (pub.offset) {\n this._offset = pub.offset;\n }\n }\n _handleJoin(join) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const info = this._centrifuge._getJoinLeaveContext(join.info);\n this.emit('join', { channel: this.channel, info: info });\n }\n _handleLeave(leave) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const info = this._centrifuge._getJoinLeaveContext(leave.info);\n this.emit('leave', { channel: this.channel, info: info });\n }\n _resolvePromises() {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].resolve();\n delete this._promises[id];\n }\n }\n _rejectPromises(err) {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n }\n _scheduleResubscribe() {\n const self = this;\n const delay = this._getResubscribeDelay();\n this._resubscribeTimeout = setTimeout(function () {\n if (self._isSubscribing()) {\n self._subscribe();\n }\n }, delay);\n }\n _subscribeError(err) {\n if (!this._isSubscribing()) {\n return;\n }\n if (err.code < 100 || err.code === 109 || err.temporary === true) {\n if (err.code === 109) { // Token expired error.\n this._token = '';\n }\n const errContext = {\n channel: this.channel,\n type: 'subscribe',\n error: err\n };\n if (this._centrifuge.state === State.Connected) {\n this.emit('error', errContext);\n }\n this._scheduleResubscribe();\n }\n else {\n this._setUnsubscribed(err.code, err.message, false);\n }\n }\n _getResubscribeDelay() {\n const delay = backoff(this._resubscribeAttempts, this._minResubscribeDelay, this._maxResubscribeDelay);\n this._resubscribeAttempts++;\n return delay;\n }\n _setOptions(options) {\n if (!options) {\n return;\n }\n if (options.since) {\n this._offset = options.since.offset;\n this._epoch = options.since.epoch;\n this._recover = true;\n }\n if (options.data) {\n this._data = options.data;\n }\n if (options.getData) {\n this._getData = options.getData;\n }\n if (options.minResubscribeDelay !== undefined) {\n this._minResubscribeDelay = options.minResubscribeDelay;\n }\n if (options.maxResubscribeDelay !== undefined) {\n this._maxResubscribeDelay = options.maxResubscribeDelay;\n }\n if (options.token) {\n this._token = options.token;\n }\n if (options.getToken) {\n this._getToken = options.getToken;\n }\n if (options.positioned === true) {\n this._positioned = true;\n }\n if (options.recoverable === true) {\n this._recoverable = true;\n }\n if (options.joinLeave === true) {\n this._joinLeave = true;\n }\n if (options.delta) {\n if (options.delta !== 'fossil') {\n throw new Error('unsupported delta format');\n }\n this._delta = options.delta;\n }\n }\n _getOffset() {\n const offset = this._offset;\n if (offset !== null) {\n return offset;\n }\n return 0;\n }\n _getEpoch() {\n const epoch = this._epoch;\n if (epoch !== null) {\n return epoch;\n }\n return '';\n }\n _clearRefreshTimeout() {\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n }\n _clearResubscribeTimeout() {\n if (this._resubscribeTimeout !== null) {\n clearTimeout(this._resubscribeTimeout);\n this._resubscribeTimeout = null;\n }\n }\n _getSubscriptionToken() {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n this._centrifuge._debug('get subscription token for channel', this.channel);\n const ctx = {\n channel: this.channel\n };\n const getToken = this._getToken;\n if (getToken === null) {\n this.emit('error', {\n type: 'configuration',\n channel: this.channel,\n error: {\n code: errorCodes.badConfiguration,\n message: 'provide a function to get channel subscription token'\n }\n });\n throw new UnauthorizedError('');\n }\n return getToken(ctx);\n }\n _refresh() {\n this._clearRefreshTimeout();\n const self = this;\n this._getSubscriptionToken().then(function (token) {\n if (!self._isSubscribed()) {\n return;\n }\n if (!token) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n const req = {\n channel: self.channel,\n token: token\n };\n const msg = {\n 'sub_refresh': req\n };\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n self._centrifuge._call(msg).then(resolveCtx => {\n // @ts-ignore - improve later.\n const result = resolveCtx.reply.sub_refresh;\n self._refreshResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n self._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }).catch(function (e) {\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n type: 'refreshToken',\n channel: self.channel,\n error: {\n code: errorCodes.subscriptionRefreshToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n self._refreshTimeout = setTimeout(() => self._refresh(), self._getRefreshRetryDelay());\n });\n }\n _refreshResponse(result) {\n if (!this._isSubscribed()) {\n return;\n }\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n this._centrifuge._debug('subscription token refreshed, channel', this.channel);\n this._clearRefreshTimeout();\n if (result.expires === true) {\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n }\n _refreshError(err) {\n if (!this._isSubscribed()) {\n return;\n }\n if (err.code < 100 || err.temporary === true) {\n this.emit('error', {\n type: 'refresh',\n channel: this.channel,\n error: err\n });\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getRefreshRetryDelay());\n }\n else {\n this._setUnsubscribed(err.code, err.message, true);\n }\n }\n _getRefreshRetryDelay() {\n return backoff(0, 10000, 20000);\n }\n _failUnauthorized() {\n this._setUnsubscribed(unsubscribedCodes.unauthorized, 'unauthorized', true);\n }\n}\n\n/** @internal */\nclass SockjsTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._transport = null;\n }\n name() {\n return 'sockjs';\n }\n subName() {\n return 'sockjs-' + this._transport.transport;\n }\n emulation() {\n return false;\n }\n supported() {\n return this.options.sockjs !== null;\n }\n initialize(_protocol, callbacks) {\n this._transport = new this.options.sockjs(this.endpoint, null, this.options.sockjsOptions);\n this._transport.onopen = () => {\n callbacks.onOpen();\n };\n this._transport.onerror = e => {\n callbacks.onError(e);\n };\n this._transport.onclose = closeEvent => {\n callbacks.onClose(closeEvent);\n };\n this._transport.onmessage = event => {\n callbacks.onMessage(event.data);\n };\n }\n close() {\n this._transport.close();\n }\n send(data) {\n this._transport.send(data);\n }\n}\n\n/** @internal */\nclass WebsocketTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._transport = null;\n }\n name() {\n return 'websocket';\n }\n subName() {\n return 'websocket';\n }\n emulation() {\n return false;\n }\n supported() {\n return this.options.websocket !== undefined && this.options.websocket !== null;\n }\n initialize(protocol, callbacks) {\n let subProtocol = '';\n if (protocol === 'protobuf') {\n subProtocol = 'centrifuge-protobuf';\n }\n if (subProtocol !== '') {\n this._transport = new this.options.websocket(this.endpoint, subProtocol);\n }\n else {\n this._transport = new this.options.websocket(this.endpoint);\n }\n if (protocol === 'protobuf') {\n this._transport.binaryType = 'arraybuffer';\n }\n this._transport.onopen = () => {\n callbacks.onOpen();\n };\n this._transport.onerror = e => {\n callbacks.onError(e);\n };\n this._transport.onclose = closeEvent => {\n callbacks.onClose(closeEvent);\n };\n this._transport.onmessage = event => {\n callbacks.onMessage(event.data);\n };\n }\n close() {\n this._transport.close();\n }\n send(data) {\n this._transport.send(data);\n }\n}\n\n/** @internal */\nclass HttpStreamTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._abortController = null;\n this._utf8decoder = new TextDecoder();\n this._protocol = 'json';\n }\n name() {\n return 'http_stream';\n }\n subName() {\n return 'http_stream';\n }\n emulation() {\n return true;\n }\n _handleErrors(response) {\n if (!response.ok)\n throw new Error(response.status);\n return response;\n }\n _fetchEventTarget(self, endpoint, options) {\n const eventTarget = new EventTarget();\n // fetch with connection timeout maybe? https://github.com/github/fetch/issues/175\n const fetchFunc = self.options.fetch;\n fetchFunc(endpoint, options)\n .then(self._handleErrors)\n .then(response => {\n eventTarget.dispatchEvent(new Event('open'));\n let jsonStreamBuf = '';\n let jsonStreamPos = 0;\n let protoStreamBuf = new Uint8Array();\n const reader = response.body.getReader();\n return new self.options.readableStream({\n start(controller) {\n function pump() {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n eventTarget.dispatchEvent(new Event('close'));\n controller.close();\n return;\n }\n try {\n if (self._protocol === 'json') {\n jsonStreamBuf += self._utf8decoder.decode(value);\n while (jsonStreamPos < jsonStreamBuf.length) {\n if (jsonStreamBuf[jsonStreamPos] === '\\n') {\n const line = jsonStreamBuf.substring(0, jsonStreamPos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: line }));\n jsonStreamBuf = jsonStreamBuf.substring(jsonStreamPos + 1);\n jsonStreamPos = 0;\n }\n else {\n ++jsonStreamPos;\n }\n }\n }\n else {\n const mergedArray = new Uint8Array(protoStreamBuf.length + value.length);\n mergedArray.set(protoStreamBuf);\n mergedArray.set(value, protoStreamBuf.length);\n protoStreamBuf = mergedArray;\n while (true) {\n const result = self.options.decoder.decodeReply(protoStreamBuf);\n if (result.ok) {\n const data = protoStreamBuf.slice(0, result.pos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: data }));\n protoStreamBuf = protoStreamBuf.slice(result.pos);\n continue;\n }\n break;\n }\n }\n }\n catch (error) {\n // @ts-ignore - improve later.\n eventTarget.dispatchEvent(new Event('error', { detail: error }));\n eventTarget.dispatchEvent(new Event('close'));\n controller.close();\n return;\n }\n pump();\n }).catch(function (e) {\n // @ts-ignore - improve later.\n eventTarget.dispatchEvent(new Event('error', { detail: e }));\n eventTarget.dispatchEvent(new Event('close'));\n controller.close();\n return;\n });\n }\n return pump();\n }\n });\n })\n .catch(error => {\n // @ts-ignore - improve later.\n eventTarget.dispatchEvent(new Event('error', { detail: error }));\n eventTarget.dispatchEvent(new Event('close'));\n });\n return eventTarget;\n }\n supported() {\n return this.options.fetch !== null &&\n this.options.readableStream !== null &&\n typeof TextDecoder !== 'undefined' &&\n typeof AbortController !== 'undefined' &&\n typeof EventTarget !== 'undefined' &&\n typeof Event !== 'undefined' &&\n typeof MessageEvent !== 'undefined' &&\n typeof Error !== 'undefined';\n }\n initialize(protocol, callbacks, initialData) {\n this._protocol = protocol;\n this._abortController = new AbortController();\n let headers;\n let body;\n if (protocol === 'json') {\n headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n body = initialData;\n }\n else {\n headers = {\n 'Accept': 'application/octet-stream',\n 'Content-Type': 'application/octet-stream'\n };\n body = initialData;\n }\n const fetchOptions = {\n method: 'POST',\n headers: headers,\n body: body,\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'no-cache',\n signal: this._abortController.signal\n };\n const eventTarget = this._fetchEventTarget(this, this.endpoint, fetchOptions);\n eventTarget.addEventListener('open', () => {\n callbacks.onOpen();\n });\n eventTarget.addEventListener('error', (e) => {\n this._abortController.abort();\n callbacks.onError(e);\n });\n eventTarget.addEventListener('close', () => {\n this._abortController.abort();\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n });\n eventTarget.addEventListener('message', (e) => {\n callbacks.onMessage(e.data);\n });\n }\n close() {\n this._abortController.abort();\n }\n send(data, session, node) {\n let headers;\n let body;\n const req = {\n session: session,\n node: node,\n data: data\n };\n if (this._protocol === 'json') {\n headers = {\n 'Content-Type': 'application/json'\n };\n body = JSON.stringify(req);\n }\n else {\n headers = {\n 'Content-Type': 'application/octet-stream'\n };\n body = this.options.encoder.encodeEmulationRequest(req);\n }\n const fetchFunc = this.options.fetch;\n const fetchOptions = {\n method: 'POST',\n headers: headers,\n body: body,\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'no-cache'\n };\n fetchFunc(this.options.emulationEndpoint, fetchOptions);\n }\n}\n\n/** @internal */\nclass SseTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._protocol = 'json';\n this._transport = null;\n this._onClose = null;\n }\n name() {\n return 'sse';\n }\n subName() {\n return 'sse';\n }\n emulation() {\n return true;\n }\n supported() {\n return this.options.eventsource !== null && this.options.fetch !== null;\n }\n initialize(_protocol, callbacks, initialData) {\n let url;\n if (globalThis && globalThis.document && globalThis.document.baseURI) {\n // Handle case when endpoint is relative, like //example.com/connection/sse\n url = new URL(this.endpoint, globalThis.document.baseURI);\n }\n else {\n url = new URL(this.endpoint);\n }\n url.searchParams.append('cf_connect', initialData);\n const eventsourceOptions = {};\n const eventSource = new this.options.eventsource(url.toString(), eventsourceOptions);\n this._transport = eventSource;\n const self = this;\n eventSource.onopen = function () {\n callbacks.onOpen();\n };\n eventSource.onerror = function (e) {\n eventSource.close();\n callbacks.onError(e);\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n };\n eventSource.onmessage = function (e) {\n callbacks.onMessage(e.data);\n };\n self._onClose = function () {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n };\n }\n close() {\n this._transport.close();\n if (this._onClose !== null) {\n this._onClose();\n }\n }\n send(data, session, node) {\n const req = {\n session: session,\n node: node,\n data: data\n };\n const headers = {\n 'Content-Type': 'application/json'\n };\n const body = JSON.stringify(req);\n const fetchFunc = this.options.fetch;\n const fetchOptions = {\n method: 'POST',\n headers: headers,\n body: body,\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'no-cache'\n };\n fetchFunc(this.options.emulationEndpoint, fetchOptions);\n }\n}\n\n/** @internal */\nclass WebtransportTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._transport = null;\n this._stream = null;\n this._writer = null;\n this._utf8decoder = new TextDecoder();\n this._protocol = 'json';\n }\n name() {\n return 'webtransport';\n }\n subName() {\n return 'webtransport';\n }\n emulation() {\n return false;\n }\n supported() {\n return this.options.webtransport !== undefined && this.options.webtransport !== null;\n }\n initialize(protocol, callbacks) {\n return __awaiter(this, void 0, void 0, function* () {\n let url;\n if (globalThis && globalThis.document && globalThis.document.baseURI) {\n // Handle case when endpoint is relative, like //example.com/connection/webtransport\n url = new URL(this.endpoint, globalThis.document.baseURI);\n }\n else {\n url = new URL(this.endpoint);\n }\n if (protocol === 'protobuf') {\n url.searchParams.append('cf_protocol', 'protobuf');\n }\n this._protocol = protocol;\n const eventTarget = new EventTarget();\n this._transport = new this.options.webtransport(url.toString());\n this._transport.closed.then(() => {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n }).catch(() => {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n });\n try {\n yield this._transport.ready;\n }\n catch (_a) {\n this.close();\n return;\n }\n let stream;\n try {\n stream = yield this._transport.createBidirectionalStream();\n }\n catch (_b) {\n this.close();\n return;\n }\n this._stream = stream;\n this._writer = this._stream.writable.getWriter();\n eventTarget.addEventListener('close', () => {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n });\n eventTarget.addEventListener('message', (e) => {\n callbacks.onMessage(e.data);\n });\n this._startReading(eventTarget);\n callbacks.onOpen();\n });\n }\n _startReading(eventTarget) {\n return __awaiter(this, void 0, void 0, function* () {\n const reader = this._stream.readable.getReader();\n let jsonStreamBuf = '';\n let jsonStreamPos = 0;\n let protoStreamBuf = new Uint8Array();\n try {\n while (true) {\n const { done, value } = yield reader.read();\n if (value.length > 0) {\n if (this._protocol === 'json') {\n jsonStreamBuf += this._utf8decoder.decode(value);\n while (jsonStreamPos < jsonStreamBuf.length) {\n if (jsonStreamBuf[jsonStreamPos] === '\\n') {\n const line = jsonStreamBuf.substring(0, jsonStreamPos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: line }));\n jsonStreamBuf = jsonStreamBuf.substring(jsonStreamPos + 1);\n jsonStreamPos = 0;\n }\n else {\n ++jsonStreamPos;\n }\n }\n }\n else {\n const mergedArray = new Uint8Array(protoStreamBuf.length + value.length);\n mergedArray.set(protoStreamBuf);\n mergedArray.set(value, protoStreamBuf.length);\n protoStreamBuf = mergedArray;\n while (true) {\n const result = this.options.decoder.decodeReply(protoStreamBuf);\n if (result.ok) {\n const data = protoStreamBuf.slice(0, result.pos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: data }));\n protoStreamBuf = protoStreamBuf.slice(result.pos);\n continue;\n }\n break;\n }\n }\n }\n if (done) {\n break;\n }\n }\n }\n catch (_a) {\n eventTarget.dispatchEvent(new Event('close'));\n }\n });\n }\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (this._writer) {\n yield this._writer.close();\n }\n this._transport.close();\n }\n catch (e) {\n // already closed.\n }\n });\n }\n send(data) {\n return __awaiter(this, void 0, void 0, function* () {\n let binary;\n if (this._protocol === 'json') {\n // Need extra \\n since WT is non-frame protocol. \n binary = new TextEncoder().encode(data + '\\n');\n }\n else {\n binary = data;\n }\n try {\n yield this._writer.write(binary);\n }\n catch (e) {\n this.close();\n }\n });\n }\n}\n\n/*\nCopyright 2014-2024 Dmitry Chestnykh (JavaScript port)\nCopyright 2007 D. Richard Hipp (original C version)\n\nFossil SCM delta compression algorithm, this is only the applyDelta part extracted\nfrom https://github.com/dchest/fossil-delta-js. The code was slightly modified\nto strip unnecessary parts. The copyright on top of this file is from the original\nrepo on Github licensed under Simplified BSD License.\n*/\nconst zValue = [\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1,\n -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, 36, -1, 37,\n 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n 57, 58, 59, 60, 61, 62, -1, -1, -1, 63, -1,\n];\n// Reader reads bytes, chars, ints from array.\nclass Reader {\n constructor(array) {\n this.a = array; // source array\n this.pos = 0; // current position in array\n }\n haveBytes() {\n return this.pos < this.a.length;\n }\n getByte() {\n const b = this.a[this.pos];\n this.pos++;\n if (this.pos > this.a.length)\n throw new RangeError(\"out of bounds\");\n return b;\n }\n getChar() {\n return String.fromCharCode(this.getByte());\n }\n // Read base64-encoded unsigned integer.\n getInt() {\n let v = 0;\n let c;\n while (this.haveBytes() && (c = zValue[0x7f & this.getByte()]) >= 0) {\n v = (v << 6) + c;\n }\n this.pos--;\n return v >>> 0;\n }\n}\n// Write writes an array.\nclass Writer {\n constructor() {\n this.a = [];\n }\n toByteArray(sourceType) {\n if (Array.isArray(sourceType)) {\n return this.a;\n }\n return new Uint8Array(this.a);\n }\n // Copy from array at start to end.\n putArray(a, start, end) {\n // TODO: optimize.\n for (let i = start; i < end; i++)\n this.a.push(a[i]);\n }\n}\n// Return a 32-bit checksum of the array.\nfunction checksum(arr) {\n let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0, z = 0, N = arr.length;\n //TODO measure if this unrolling is helpful.\n while (N >= 16) {\n sum0 = (sum0 + arr[z + 0]) | 0;\n sum1 = (sum1 + arr[z + 1]) | 0;\n sum2 = (sum2 + arr[z + 2]) | 0;\n sum3 = (sum3 + arr[z + 3]) | 0;\n sum0 = (sum0 + arr[z + 4]) | 0;\n sum1 = (sum1 + arr[z + 5]) | 0;\n sum2 = (sum2 + arr[z + 6]) | 0;\n sum3 = (sum3 + arr[z + 7]) | 0;\n sum0 = (sum0 + arr[z + 8]) | 0;\n sum1 = (sum1 + arr[z + 9]) | 0;\n sum2 = (sum2 + arr[z + 10]) | 0;\n sum3 = (sum3 + arr[z + 11]) | 0;\n sum0 = (sum0 + arr[z + 12]) | 0;\n sum1 = (sum1 + arr[z + 13]) | 0;\n sum2 = (sum2 + arr[z + 14]) | 0;\n sum3 = (sum3 + arr[z + 15]) | 0;\n z += 16;\n N -= 16;\n }\n while (N >= 4) {\n sum0 = (sum0 + arr[z + 0]) | 0;\n sum1 = (sum1 + arr[z + 1]) | 0;\n sum2 = (sum2 + arr[z + 2]) | 0;\n sum3 = (sum3 + arr[z + 3]) | 0;\n z += 4;\n N -= 4;\n }\n sum3 = (((((sum3 + (sum2 << 8)) | 0) + (sum1 << 16)) | 0) + (sum0 << 24)) | 0;\n switch (N) {\n //@ts-ignore fallthrough is needed.\n case 3:\n sum3 = (sum3 + (arr[z + 2] << 8)) | 0; /* falls through */\n //@ts-ignore fallthrough is needed.\n case 2:\n sum3 = (sum3 + (arr[z + 1] << 16)) | 0; /* falls through */\n case 1:\n sum3 = (sum3 + (arr[z + 0] << 24)) | 0; /* falls through */\n }\n return sum3 >>> 0;\n}\n/**\n * Apply a delta byte array to a source byte array, returning the target byte array.\n */\nfunction applyDelta(source, delta) {\n let total = 0;\n const zDelta = new Reader(delta);\n const lenSrc = source.length;\n const lenDelta = delta.length;\n const limit = zDelta.getInt();\n if (zDelta.getChar() !== \"\\n\")\n throw new Error(\"size integer not terminated by '\\\\n'\");\n const zOut = new Writer();\n while (zDelta.haveBytes()) {\n const cnt = zDelta.getInt();\n let ofst;\n switch (zDelta.getChar()) {\n case \"@\":\n ofst = zDelta.getInt();\n if (zDelta.haveBytes() && zDelta.getChar() !== \",\")\n throw new Error(\"copy command not terminated by ','\");\n total += cnt;\n if (total > limit)\n throw new Error(\"copy exceeds output file size\");\n if (ofst + cnt > lenSrc)\n throw new Error(\"copy extends past end of input\");\n zOut.putArray(source, ofst, ofst + cnt);\n break;\n case \":\":\n total += cnt;\n if (total > limit)\n throw new Error(\"insert command gives an output larger than predicted\");\n if (cnt > lenDelta)\n throw new Error(\"insert count exceeds size of delta\");\n zOut.putArray(zDelta.a, zDelta.pos, zDelta.pos + cnt);\n zDelta.pos += cnt;\n break;\n case \";\":\n {\n const out = zOut.toByteArray(source);\n if (cnt !== checksum(out))\n throw new Error(\"bad checksum\");\n if (total !== limit)\n throw new Error(\"generated size does not match predicted size\");\n return out;\n }\n default:\n throw new Error(\"unknown delta operator\");\n }\n }\n throw new Error(\"unterminated delta\");\n}\n\n/** @internal */\nclass JsonCodec {\n name() {\n return 'json';\n }\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n decodeReplies(data) {\n return data.trim().split('\\n').map(r => JSON.parse(r));\n }\n applyDeltaIfNeeded(pub, prevValue) {\n let newData, newPrevValue;\n if (pub.delta) {\n // JSON string delta.\n const valueArray = applyDelta(prevValue, new TextEncoder().encode(pub.data));\n newData = JSON.parse(new TextDecoder().decode(valueArray));\n newPrevValue = valueArray;\n }\n else {\n // Full data as JSON string.\n newData = JSON.parse(pub.data);\n newPrevValue = new TextEncoder().encode(pub.data);\n }\n return { newData, newPrevValue };\n }\n}\n\nconst defaults = {\n token: '',\n getToken: null,\n data: null,\n getData: null,\n debug: false,\n name: 'js',\n version: '',\n fetch: null,\n readableStream: null,\n websocket: null,\n eventsource: null,\n sockjs: null,\n sockjsOptions: {},\n emulationEndpoint: '/emulation',\n minReconnectDelay: 500,\n maxReconnectDelay: 20000,\n timeout: 5000,\n maxServerPingDelay: 10000,\n networkEventTarget: null,\n};\nclass UnauthorizedError extends Error {\n constructor(message) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n/** Centrifuge is a Centrifuge/Centrifugo bidirectional client. */\nclass Centrifuge extends EventEmitter$1 {\n /** Constructs Centrifuge client. Call connect() method to start connecting. */\n constructor(endpoint, options) {\n super();\n this._reconnectTimeout = null;\n this._refreshTimeout = null;\n this._serverPingTimeout = null;\n this.state = State.Disconnected;\n this._transportIsOpen = false;\n this._endpoint = endpoint;\n this._emulation = false;\n this._transports = [];\n this._currentTransportIndex = 0;\n this._triedAllTransports = false;\n this._transportWasOpen = false;\n this._transport = null;\n this._transportId = 0;\n this._deviceWentOffline = false;\n this._transportClosed = true;\n this._codec = new JsonCodec();\n this._reconnecting = false;\n this._reconnectTimeout = null;\n this._reconnectAttempts = 0;\n this._client = null;\n this._session = '';\n this._node = '';\n this._subs = {};\n this._serverSubs = {};\n this._commandId = 0;\n this._commands = [];\n this._batching = false;\n this._refreshRequired = false;\n this._refreshTimeout = null;\n this._callbacks = {};\n this._token = '';\n this._data = null;\n this._dispatchPromise = Promise.resolve();\n this._serverPing = 0;\n this._serverPingTimeout = null;\n this._sendPong = false;\n this._promises = {};\n this._promiseId = 0;\n this._debugEnabled = false;\n this._networkEventsSet = false;\n this._config = Object.assign(Object.assign({}, defaults), options);\n this._configure();\n if (this._debugEnabled) {\n this.on('state', (ctx) => {\n this._debug('client state', ctx.oldState, '->', ctx.newState);\n });\n this.on('error', (ctx) => {\n this._debug('client error', ctx);\n });\n }\n else {\n // Avoid unhandled exception in EventEmitter for non-set error handler.\n this.on('error', function () { Function.prototype(); });\n }\n }\n /** newSubscription allocates new Subscription to a channel. Since server only allows\n * one subscription per channel per client this method throws if client already has\n * channel subscription in internal registry.\n * */\n newSubscription(channel, options) {\n if (this.getSubscription(channel) !== null) {\n throw new Error('Subscription to the channel ' + channel + ' already exists');\n }\n const sub = new Subscription(this, channel, options);\n this._subs[channel] = sub;\n return sub;\n }\n /** getSubscription returns Subscription if it's registered in the internal\n * registry or null. */\n getSubscription(channel) {\n return this._getSub(channel);\n }\n /** removeSubscription allows removing Subcription from the internal registry. Subscrption\n * must be in unsubscribed state. */\n removeSubscription(sub) {\n if (!sub) {\n return;\n }\n if (sub.state !== SubscriptionState.Unsubscribed) {\n sub.unsubscribe();\n }\n this._removeSubscription(sub);\n }\n /** Get a map with all current client-side subscriptions. */\n subscriptions() {\n return this._subs;\n }\n /** ready returns a Promise which resolves upon client goes to Connected\n * state and rejects in case of client goes to Disconnected or Failed state.\n * Users can provide optional timeout in milliseconds. */\n ready(timeout) {\n if (this.state === State.Disconnected) {\n return Promise.reject({ code: errorCodes.clientDisconnected, message: 'client disconnected' });\n }\n if (this.state === State.Connected) {\n return Promise.resolve();\n }\n return new Promise((res, rej) => {\n const ctx = {\n resolve: res,\n reject: rej\n };\n if (timeout) {\n ctx.timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n }, timeout);\n }\n this._promises[this._nextPromiseId()] = ctx;\n });\n }\n /** connect to a server. */\n connect() {\n if (this._isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._isConnecting()) {\n this._debug('connect called when already connecting');\n return;\n }\n this._debug('connect called');\n this._reconnectAttempts = 0;\n this._startConnecting();\n }\n /** disconnect from a server. */\n disconnect() {\n this._disconnect(disconnectedCodes.disconnectCalled, 'disconnect called', false);\n }\n /** setToken allows setting connection token. Or resetting used token to be empty. */\n setToken(token) {\n this._token = token;\n }\n /** send asynchronous data to a server (without any response from a server\n * expected, see rpc method if you need response). */\n send(data) {\n const cmd = {\n send: {\n data: data\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n const sent = self._transportSendCommands([cmd]); // can send message to server without id set\n if (!sent) {\n return Promise.reject(self._createErrorObject(errorCodes.transportWriteError, 'transport write error'));\n }\n return Promise.resolve();\n });\n }\n /** rpc to a server - i.e. a call which waits for a response with data. */\n rpc(method, data) {\n const cmd = {\n rpc: {\n method: method,\n data: data\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n return {\n 'data': reply.rpc.data\n };\n });\n });\n }\n /** publish data to a channel. */\n publish(channel, data) {\n const cmd = {\n publish: {\n channel: channel,\n data: data\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function () {\n return {};\n });\n });\n }\n /** history for a channel. By default it does not return publications (only current\n * StreamPosition data) – provide an explicit limit > 0 to load publications.*/\n history(channel, options) {\n const cmd = {\n history: this._getHistoryRequest(channel, options)\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n const result = reply.history;\n const publications = [];\n if (result.publications) {\n for (let i = 0; i < result.publications.length; i++) {\n publications.push(self._getPublicationContext(channel, result.publications[i]));\n }\n }\n return {\n 'publications': publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n });\n }\n /** presence for a channel. */\n presence(channel) {\n const cmd = {\n presence: {\n channel: channel\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n const clients = reply.presence.presence;\n for (const clientId in clients) {\n if (clients.hasOwnProperty(clientId)) {\n const connInfo = clients[clientId]['conn_info'];\n const chanInfo = clients[clientId]['chan_info'];\n if (connInfo) {\n clients[clientId].connInfo = connInfo;\n }\n if (chanInfo) {\n clients[clientId].chanInfo = chanInfo;\n }\n }\n }\n return {\n 'clients': clients\n };\n });\n });\n }\n /** presence stats for a channel. */\n presenceStats(channel) {\n const cmd = {\n 'presence_stats': {\n channel: channel\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n const result = reply.presence_stats;\n return {\n 'numUsers': result.num_users,\n 'numClients': result.num_clients\n };\n });\n });\n }\n /** start command batching (collect into temporary buffer without sending to a server)\n * until stopBatching called.*/\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._batching = true;\n }\n /** stop batching commands and flush collected commands to the\n * network (all in one request/frame).*/\n stopBatching() {\n const self = this;\n // Why so nested? Two levels here requred to deal with promise resolving queue.\n // In Subscription case we wait 2 futures before sending data to connection.\n // Otherwise _batching becomes false before batching decision has a chance to be executed.\n Promise.resolve().then(function () {\n Promise.resolve().then(function () {\n self._batching = false;\n self._flush();\n });\n });\n }\n _debug(...args) {\n if (!this._debugEnabled) {\n return;\n }\n log('debug', args);\n }\n /** @internal */\n _formatOverride() {\n return;\n }\n _configure() {\n if (!('Promise' in globalThis)) {\n throw new Error('Promise polyfill required');\n }\n if (!this._endpoint) {\n throw new Error('endpoint configuration required');\n }\n if (this._config.token !== null) {\n this._token = this._config.token;\n }\n if (this._config.data !== null) {\n this._data = this._config.data;\n }\n this._codec = new JsonCodec();\n this._formatOverride();\n if (this._config.debug === true ||\n (typeof localStorage !== 'undefined' && localStorage.getItem('centrifuge.debug'))) {\n this._debugEnabled = true;\n }\n this._debug('config', this._config);\n if (typeof this._endpoint === 'string') ;\n else if (typeof this._endpoint === 'object' && this._endpoint instanceof Array) {\n this._transports = this._endpoint;\n this._emulation = true;\n for (const i in this._transports) {\n if (this._transports.hasOwnProperty(i)) {\n const transportConfig = this._transports[i];\n if (!transportConfig.endpoint || !transportConfig.transport) {\n throw new Error('malformed transport configuration');\n }\n const transportName = transportConfig.transport;\n if (['websocket', 'http_stream', 'sse', 'sockjs', 'webtransport'].indexOf(transportName) < 0) {\n throw new Error('unsupported transport name: ' + transportName);\n }\n }\n }\n }\n else {\n throw new Error('unsupported url configuration type: only string or array of objects are supported');\n }\n }\n _setState(newState) {\n if (this.state !== newState) {\n this._reconnecting = false;\n const oldState = this.state;\n this.state = newState;\n this.emit('state', { newState, oldState });\n return true;\n }\n return false;\n }\n _isDisconnected() {\n return this.state === State.Disconnected;\n }\n _isConnecting() {\n return this.state === State.Connecting;\n }\n _isConnected() {\n return this.state === State.Connected;\n }\n _nextCommandId() {\n return ++this._commandId;\n }\n _setNetworkEvents() {\n if (this._networkEventsSet) {\n return;\n }\n let eventTarget = null;\n if (this._config.networkEventTarget !== null) {\n eventTarget = this._config.networkEventTarget;\n }\n else if (typeof globalThis.addEventListener !== 'undefined') {\n eventTarget = globalThis;\n }\n if (eventTarget) {\n eventTarget.addEventListener('offline', () => {\n this._debug('offline event triggered');\n if (this.state === State.Connected || this.state === State.Connecting) {\n this._disconnect(connectingCodes.transportClosed, 'transport closed', true);\n this._deviceWentOffline = true;\n }\n });\n eventTarget.addEventListener('online', () => {\n this._debug('online event triggered');\n if (this.state !== State.Connecting) {\n return;\n }\n if (this._deviceWentOffline && !this._transportClosed) {\n // This is a workaround for mobile Safari where close callback may be\n // not issued upon device going to the flight mode. We know for sure\n // that transport close was called, so we start reconnecting. In this\n // case if the close callback will be issued for some reason after some\n // time – it will be ignored due to transport ID mismatch.\n this._deviceWentOffline = false;\n this._transportClosed = true;\n }\n this._clearReconnectTimeout();\n this._startReconnecting();\n });\n this._networkEventsSet = true;\n }\n }\n _getReconnectDelay() {\n const delay = backoff(this._reconnectAttempts, this._config.minReconnectDelay, this._config.maxReconnectDelay);\n this._reconnectAttempts += 1;\n return delay;\n }\n _clearOutgoingRequests() {\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject(errorCodes.connectionClosed, 'connection closed') });\n }\n }\n this._callbacks = {};\n }\n _clearConnectedState() {\n this._client = null;\n this._clearServerPingTimeout();\n this._clearRefreshTimeout();\n // fire events for client-side subscriptions.\n for (const channel in this._subs) {\n if (!this._subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = this._subs[channel];\n if (sub.state === SubscriptionState.Subscribed) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._setSubscribing(subscribingCodes.transportClosed, 'transport closed');\n }\n }\n // fire events for server-side subscriptions.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('subscribing', { channel: channel });\n }\n }\n }\n _handleWriteError(commands) {\n for (const command of commands) {\n const id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(errorCodes.transportWriteError, 'transport write error') });\n }\n }\n _transportSendCommands(commands) {\n if (!commands.length) {\n return true;\n }\n if (!this._transport) {\n return false;\n }\n try {\n this._transport.send(this._codec.encodeCommands(commands), this._session, this._node);\n }\n catch (e) {\n this._debug('error writing commands', e);\n this._handleWriteError(commands);\n return false;\n }\n return true;\n }\n _initializeTransport() {\n let websocket;\n if (this._config.websocket !== null) {\n websocket = this._config.websocket;\n }\n else {\n if (!(typeof globalThis.WebSocket !== 'function' && typeof globalThis.WebSocket !== 'object')) {\n websocket = globalThis.WebSocket;\n }\n }\n let sockjs = null;\n if (this._config.sockjs !== null) {\n sockjs = this._config.sockjs;\n }\n else {\n if (typeof globalThis.SockJS !== 'undefined') {\n sockjs = globalThis.SockJS;\n }\n }\n let eventsource = null;\n if (this._config.eventsource !== null) {\n eventsource = this._config.eventsource;\n }\n else {\n if (typeof globalThis.EventSource !== 'undefined') {\n eventsource = globalThis.EventSource;\n }\n }\n let fetchFunc = null;\n if (this._config.fetch !== null) {\n fetchFunc = this._config.fetch;\n }\n else {\n if (typeof globalThis.fetch !== 'undefined') {\n fetchFunc = globalThis.fetch;\n }\n }\n let readableStream = null;\n if (this._config.readableStream !== null) {\n readableStream = this._config.readableStream;\n }\n else {\n if (typeof globalThis.ReadableStream !== 'undefined') {\n readableStream = globalThis.ReadableStream;\n }\n }\n if (!this._emulation) {\n if (startsWith(this._endpoint, 'http')) {\n throw new Error('Provide explicit transport endpoints configuration in case of using HTTP (i.e. using array of TransportEndpoint instead of a single string), or use ws(s):// scheme in an endpoint if you aimed using WebSocket transport');\n }\n else {\n this._debug('client will use websocket');\n this._transport = new WebsocketTransport(this._endpoint, {\n websocket: websocket\n });\n if (!this._transport.supported()) {\n throw new Error('WebSocket not available');\n }\n }\n }\n else {\n if (this._currentTransportIndex >= this._transports.length) {\n this._triedAllTransports = true;\n this._currentTransportIndex = 0;\n }\n let count = 0;\n while (true) {\n if (count >= this._transports.length) {\n throw new Error('no supported transport found');\n }\n const transportConfig = this._transports[this._currentTransportIndex];\n const transportName = transportConfig.transport;\n const transportEndpoint = transportConfig.endpoint;\n if (transportName === 'websocket') {\n this._debug('trying websocket transport');\n this._transport = new WebsocketTransport(transportEndpoint, {\n websocket: websocket\n });\n if (!this._transport.supported()) {\n this._debug('websocket transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'webtransport') {\n this._debug('trying webtransport transport');\n this._transport = new WebtransportTransport(transportEndpoint, {\n webtransport: globalThis.WebTransport,\n decoder: this._codec,\n encoder: this._codec\n });\n if (!this._transport.supported()) {\n this._debug('webtransport transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'http_stream') {\n this._debug('trying http_stream transport');\n this._transport = new HttpStreamTransport(transportEndpoint, {\n fetch: fetchFunc,\n readableStream: readableStream,\n emulationEndpoint: this._config.emulationEndpoint,\n decoder: this._codec,\n encoder: this._codec\n });\n if (!this._transport.supported()) {\n this._debug('http_stream transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'sse') {\n this._debug('trying sse transport');\n this._transport = new SseTransport(transportEndpoint, {\n eventsource: eventsource,\n fetch: fetchFunc,\n emulationEndpoint: this._config.emulationEndpoint,\n });\n if (!this._transport.supported()) {\n this._debug('sse transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'sockjs') {\n this._debug('trying sockjs');\n this._transport = new SockjsTransport(transportEndpoint, {\n sockjs: sockjs,\n sockjsOptions: this._config.sockjsOptions\n });\n if (!this._transport.supported()) {\n this._debug('sockjs transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else {\n throw new Error('unknown transport ' + transportName);\n }\n break;\n }\n }\n const self = this;\n const transport = this._transport;\n const transportId = this._nextTransportId();\n self._debug(\"id of transport\", transportId);\n let wasOpen = false;\n const initialCommands = [];\n if (this._transport.emulation()) {\n const connectCommand = self._sendConnect(true);\n initialCommands.push(connectCommand);\n }\n this._setNetworkEvents();\n const initialData = this._codec.encodeCommands(initialCommands);\n this._transportClosed = false;\n let connectTimeout;\n connectTimeout = setTimeout(function () {\n transport.close();\n }, this._config.timeout);\n this._transport.initialize(this._codec.name(), {\n onOpen: function () {\n if (connectTimeout) {\n clearTimeout(connectTimeout);\n connectTimeout = null;\n }\n if (self._transportId != transportId) {\n self._debug('open callback from non-actual transport');\n transport.close();\n return;\n }\n wasOpen = true;\n self._debug(transport.subName(), 'transport open');\n if (transport.emulation()) {\n return;\n }\n self._transportIsOpen = true;\n self._transportWasOpen = true;\n self.startBatching();\n self._sendConnect(false);\n self._sendSubscribeCommands();\n self.stopBatching();\n //@ts-ignore must be used only for debug and test purposes. Exposed only for non-emulation transport.\n self.emit('__centrifuge_debug:connect_frame_sent', {});\n },\n onError: function (e) {\n if (self._transportId != transportId) {\n self._debug('error callback from non-actual transport');\n return;\n }\n self._debug('transport level error', e);\n },\n onClose: function (closeEvent) {\n if (connectTimeout) {\n clearTimeout(connectTimeout);\n connectTimeout = null;\n }\n if (self._transportId != transportId) {\n self._debug('close callback from non-actual transport');\n return;\n }\n self._debug(transport.subName(), 'transport closed');\n self._transportClosed = true;\n self._transportIsOpen = false;\n let reason = 'connection closed';\n let needReconnect = true;\n let code = 0;\n if (closeEvent && 'code' in closeEvent && closeEvent.code) {\n code = closeEvent.code;\n }\n if (closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n }\n catch (e) {\n reason = closeEvent.reason;\n if ((code >= 3500 && code < 4000) || (code >= 4500 && code < 5000)) {\n needReconnect = false;\n }\n }\n }\n if (code < 3000) {\n if (code === 1009) {\n code = disconnectedCodes.messageSizeLimit;\n reason = 'message size limit exceeded';\n needReconnect = false;\n }\n else {\n code = connectingCodes.transportClosed;\n reason = 'transport closed';\n }\n if (self._emulation && !self._transportWasOpen) {\n self._currentTransportIndex++;\n if (self._currentTransportIndex >= self._transports.length) {\n self._triedAllTransports = true;\n self._currentTransportIndex = 0;\n }\n }\n }\n else {\n // Codes >= 3000 are sent from a server application level.\n self._transportWasOpen = true;\n }\n if (self._isConnecting() && !wasOpen) {\n self.emit('error', {\n type: 'transport',\n error: {\n code: errorCodes.transportClosed,\n message: 'transport closed'\n },\n transport: transport.name()\n });\n }\n self._reconnecting = false;\n self._disconnect(code, reason, needReconnect);\n },\n onMessage: function (data) {\n self._dataReceived(data);\n }\n }, initialData);\n //@ts-ignore must be used only for debug and test purposes.\n self.emit('__centrifuge_debug:transport_initialized', {});\n }\n _sendConnect(skipSending) {\n const connectCommand = this._constructConnectCommand();\n const self = this;\n this._call(connectCommand, skipSending).then(resolveCtx => {\n // @ts-ignore = improve later.\n const result = resolveCtx.reply.connect;\n self._connectResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n self._connectError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n return connectCommand;\n }\n _startReconnecting() {\n this._debug('start reconnecting');\n if (!this._isConnecting()) {\n this._debug('stop reconnecting: client not in connecting state');\n return;\n }\n if (this._reconnecting) {\n this._debug('reconnect already in progress, return from reconnect routine');\n return;\n }\n if (this._transportClosed === false) {\n this._debug('waiting for transport close');\n return;\n }\n this._reconnecting = true;\n const self = this;\n const emptyToken = this._token === '';\n const needTokenRefresh = this._refreshRequired || (emptyToken && this._config.getToken !== null);\n if (!needTokenRefresh) {\n if (this._config.getData) {\n this._config.getData().then(function (data) {\n if (!self._isConnecting()) {\n return;\n }\n self._data = data;\n self._initializeTransport();\n });\n }\n else {\n this._initializeTransport();\n }\n return;\n }\n this._getToken().then(function (token) {\n if (!self._isConnecting()) {\n return;\n }\n if (token == null || token == undefined) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n self._debug('connection token refreshed');\n if (self._config.getData) {\n self._config.getData().then(function (data) {\n if (!self._isConnecting()) {\n return;\n }\n self._data = data;\n self._initializeTransport();\n });\n }\n else {\n self._initializeTransport();\n }\n }).catch(function (e) {\n if (!self._isConnecting()) {\n return;\n }\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n 'type': 'connectToken',\n 'error': {\n code: errorCodes.clientConnectToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n const delay = self._getReconnectDelay();\n self._debug('error on connection token refresh, reconnect after ' + delay + ' milliseconds', e);\n self._reconnecting = false;\n self._reconnectTimeout = setTimeout(() => {\n self._startReconnecting();\n }, delay);\n });\n }\n _connectError(err) {\n if (this.state !== State.Connecting) {\n return;\n }\n if (err.code === 109) { // token expired.\n // next connect attempt will try to refresh token.\n this._refreshRequired = true;\n }\n if (err.code < 100 || err.temporary === true || err.code === 109) {\n this.emit('error', {\n 'type': 'connect',\n 'error': err\n });\n this._debug('closing transport due to connect error');\n this._disconnect(err.code, err.message, true);\n }\n else {\n this._disconnect(err.code, err.message, false);\n }\n }\n _scheduleReconnect() {\n if (!this._isConnecting()) {\n return;\n }\n let isInitialHandshake = false;\n if (this._emulation && !this._transportWasOpen && !this._triedAllTransports) {\n isInitialHandshake = true;\n }\n let delay = this._getReconnectDelay();\n if (isInitialHandshake) {\n delay = 0;\n }\n this._debug('reconnect after ' + delay + ' milliseconds');\n this._clearReconnectTimeout();\n this._reconnectTimeout = setTimeout(() => {\n this._startReconnecting();\n }, delay);\n }\n _constructConnectCommand() {\n const req = {};\n if (this._token) {\n req.token = this._token;\n }\n if (this._data) {\n req.data = this._data;\n }\n if (this._config.name) {\n req.name = this._config.name;\n }\n if (this._config.version) {\n req.version = this._config.version;\n }\n const subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n const sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n req.subs = subs;\n }\n return {\n connect: req\n };\n }\n _getHistoryRequest(channel, options) {\n const req = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n req.since = {\n offset: options.since.offset\n };\n if (options.since.epoch) {\n req.since.epoch = options.since.epoch;\n }\n }\n if (options.limit !== undefined) {\n req.limit = options.limit;\n }\n if (options.reverse === true) {\n req.reverse = true;\n }\n }\n return req;\n }\n _methodCall() {\n if (this._isConnected()) {\n return Promise.resolve();\n }\n return new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n }, this._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n }\n _callPromise(cmd, resultCB) {\n return new Promise((resolve, reject) => {\n this._call(cmd, false).then(resolveCtx => {\n // @ts-ignore - improve later.\n resolve(resultCB(resolveCtx.reply));\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n _dataReceived(data) {\n if (this._serverPing > 0) {\n this._waitServerPing();\n }\n const replies = this._codec.decodeReplies(data);\n // We have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n }\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n _dispatchReply(reply) {\n let next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n const id = reply.id;\n if (id && id > 0) {\n this._handleReply(reply, next);\n }\n else {\n if (!reply.push) {\n this._handleServerPing(next);\n }\n else {\n this._handlePush(reply.push, next);\n }\n }\n return p;\n }\n _call(cmd, skipSending) {\n return new Promise((resolve, reject) => {\n cmd.id = this._nextCommandId();\n this._registerCall(cmd.id, resolve, reject);\n if (!skipSending) {\n this._addCommand(cmd);\n }\n });\n }\n _startConnecting() {\n this._debug('start connecting');\n if (this._setState(State.Connecting)) {\n this.emit('connecting', { code: connectingCodes.connectCalled, reason: 'connect called' });\n }\n this._client = null;\n this._startReconnecting();\n }\n _disconnect(code, reason, reconnect) {\n if (this._isDisconnected()) {\n return;\n }\n // we mark transport is closed right away, because _clearConnectedState will move subscriptions to subscribing state\n // if transport will still be open at this time, subscribe frames will be sent to closing transport\n this._transportIsOpen = false;\n const previousState = this.state;\n this._reconnecting = false;\n const ctx = {\n code: code,\n reason: reason\n };\n let needEvent = false;\n if (reconnect) {\n needEvent = this._setState(State.Connecting);\n }\n else {\n needEvent = this._setState(State.Disconnected);\n this._rejectPromises({ code: errorCodes.clientDisconnected, message: 'disconnected' });\n }\n this._clearOutgoingRequests();\n if (previousState === State.Connecting) {\n this._clearReconnectTimeout();\n }\n if (previousState === State.Connected) {\n this._clearConnectedState();\n }\n if (needEvent) {\n if (this._isConnecting()) {\n this.emit('connecting', ctx);\n }\n else {\n this.emit('disconnected', ctx);\n }\n }\n if (this._transport) {\n this._debug(\"closing existing transport\");\n const transport = this._transport;\n this._transport = null;\n transport.close(); // Close only after setting this._transport to null to avoid recursion when calling transport close().\n // Need to mark as closed here, because connect call may be sync called after disconnect,\n // transport onClose callback will not be called yet\n this._transportClosed = true;\n this._nextTransportId();\n }\n else {\n this._debug(\"no transport to close\");\n }\n this._scheduleReconnect();\n }\n _failUnauthorized() {\n this._disconnect(disconnectedCodes.unauthorized, 'unauthorized', false);\n }\n _getToken() {\n this._debug('get connection token');\n if (!this._config.getToken) {\n this.emit('error', {\n type: 'configuration',\n error: {\n code: errorCodes.badConfiguration,\n message: 'token expired but no getToken function set in the configuration'\n }\n });\n throw new UnauthorizedError('');\n }\n return this._config.getToken({});\n }\n _refresh() {\n const clientId = this._client;\n const self = this;\n this._getToken().then(function (token) {\n if (clientId !== self._client) {\n return;\n }\n if (!token) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n self._debug('connection token refreshed');\n if (!self._isConnected()) {\n return;\n }\n const cmd = {\n refresh: { token: self._token }\n };\n self._call(cmd, false).then(resolveCtx => {\n // @ts-ignore - improve later.\n const result = resolveCtx.reply.refresh;\n self._refreshResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n self._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }).catch(function (e) {\n if (!self._isConnected()) {\n return;\n }\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n type: 'refreshToken',\n error: {\n code: errorCodes.clientRefreshToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n self._refreshTimeout = setTimeout(() => self._refresh(), self._getRefreshRetryDelay());\n });\n }\n _refreshError(err) {\n if (err.code < 100 || err.temporary === true) {\n this.emit('error', {\n type: 'refresh',\n error: err\n });\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getRefreshRetryDelay());\n }\n else {\n this._disconnect(err.code, err.message, false);\n }\n }\n _getRefreshRetryDelay() {\n return backoff(0, 5000, 10000);\n }\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._client = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n }\n _removeSubscription(sub) {\n if (sub === null) {\n return;\n }\n delete this._subs[sub.channel];\n }\n _unsubscribe(sub) {\n if (!this._transportIsOpen) {\n return Promise.resolve();\n }\n const req = {\n channel: sub.channel\n };\n const cmd = { unsubscribe: req };\n const self = this;\n const unsubscribePromise = new Promise((resolve, _) => {\n this._call(cmd, false).then(resolveCtx => {\n resolve();\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n resolve();\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n self._disconnect(connectingCodes.unsubscribeError, 'unsubscribe error', true);\n });\n });\n return unsubscribePromise;\n }\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n }\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n }\n _sendSubscribeCommands() {\n const commands = [];\n for (const channel in this._subs) {\n if (!this._subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = this._subs[channel];\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (sub._inflight === true) {\n continue;\n }\n if (sub.state === SubscriptionState.Subscribing) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n const cmd = sub._subscribe();\n if (cmd) {\n commands.push(cmd);\n }\n }\n }\n return commands;\n }\n _connectResponse(result) {\n this._transportIsOpen = true;\n this._transportWasOpen = true;\n this._reconnectAttempts = 0;\n this._refreshRequired = false;\n if (this._isConnected()) {\n return;\n }\n this._client = result.client;\n this._setState(State.Connected);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n this._session = result.session;\n this._node = result.node;\n this.startBatching();\n this._sendSubscribeCommands();\n this.stopBatching();\n const ctx = {\n client: result.client,\n transport: this._transport.subName()\n };\n if (result.data) {\n ctx.data = result.data;\n }\n this.emit('connected', ctx);\n this._resolvePromises();\n this._processServerSubs(result.subs || {});\n if (result.ping && result.ping > 0) {\n this._serverPing = result.ping * 1000;\n this._sendPong = result.pong === true;\n this._waitServerPing();\n }\n else {\n this._serverPing = 0;\n }\n }\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (!subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = subs[channel];\n this._serverSubs[channel] = {\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable || false\n };\n const subCtx = this._getSubscribeContext(channel, sub);\n this.emit('subscribed', subCtx);\n }\n for (const channel in subs) {\n if (!subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = subs[channel];\n if (sub.recovered) {\n const pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n for (const i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n }\n for (const channel in this._serverSubs) {\n if (!this._serverSubs.hasOwnProperty(channel)) {\n continue;\n }\n if (!subs[channel]) {\n this.emit('unsubscribed', { channel: channel });\n delete this._serverSubs[channel];\n }\n }\n }\n _clearRefreshTimeout() {\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n }\n _clearReconnectTimeout() {\n if (this._reconnectTimeout !== null) {\n clearTimeout(this._reconnectTimeout);\n this._reconnectTimeout = null;\n }\n }\n _clearServerPingTimeout() {\n if (this._serverPingTimeout !== null) {\n clearTimeout(this._serverPingTimeout);\n this._serverPingTimeout = null;\n }\n }\n _waitServerPing() {\n if (this._config.maxServerPingDelay === 0) {\n return;\n }\n if (!this._isConnected()) {\n return;\n }\n this._clearServerPingTimeout();\n this._serverPingTimeout = setTimeout(() => {\n if (!this._isConnected()) {\n return;\n }\n this._disconnect(connectingCodes.noPing, 'no ping', true);\n }, this._serverPing + this._config.maxServerPingDelay);\n }\n _getSubscribeContext(channel, result) {\n const ctx = {\n channel: channel,\n positioned: false,\n recoverable: false,\n wasRecovering: false,\n recovered: false\n };\n if (result.recovered) {\n ctx.recovered = true;\n }\n if (result.positioned) {\n ctx.positioned = true;\n }\n if (result.recoverable) {\n ctx.recoverable = true;\n }\n if (result.was_recovering) {\n ctx.wasRecovering = true;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (ctx.positioned || ctx.recoverable) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n }\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n _handleReply(reply, next) {\n const id = reply.id;\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ reply, next });\n }\n else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n _handleJoin(channel, join) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n const ctx = { channel: channel, info: this._getJoinLeaveContext(join.info) };\n this.emit('join', ctx);\n }\n return;\n }\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._handleJoin(join);\n }\n _handleLeave(channel, leave) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n const ctx = { channel: channel, info: this._getJoinLeaveContext(leave.info) };\n this.emit('leave', ctx);\n }\n return;\n }\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._handleLeave(leave);\n }\n _handleUnsubscribe(channel, unsubscribe) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n this.emit('unsubscribed', { channel: channel });\n }\n return;\n }\n if (unsubscribe.code < 2500) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._setUnsubscribed(unsubscribe.code, unsubscribe.reason, false);\n }\n else {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._setSubscribing(unsubscribe.code, unsubscribe.reason);\n }\n }\n _handleSubscribe(channel, sub) {\n this._serverSubs[channel] = {\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable || false\n };\n this.emit('subscribed', this._getSubscribeContext(channel, sub));\n }\n _handleDisconnect(disconnect) {\n const code = disconnect.code;\n let reconnect = true;\n if ((code >= 3500 && code < 4000) || (code >= 4500 && code < 5000)) {\n reconnect = false;\n }\n this._disconnect(code, disconnect.reason, reconnect);\n }\n _getPublicationContext(channel, pub) {\n const ctx = {\n channel: channel,\n data: pub.data\n };\n if (pub.offset) {\n ctx.offset = pub.offset;\n }\n if (pub.info) {\n ctx.info = this._getJoinLeaveContext(pub.info);\n }\n if (pub.tags) {\n ctx.tags = pub.tags;\n }\n return ctx;\n }\n _getJoinLeaveContext(clientInfo) {\n const info = {\n client: clientInfo.client,\n user: clientInfo.user\n };\n if (clientInfo.conn_info) {\n info.connInfo = clientInfo.conn_info;\n }\n if (clientInfo.chan_info) {\n info.chanInfo = clientInfo.chan_info;\n }\n return info;\n }\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n const ctx = this._getPublicationContext(channel, pub);\n this.emit('publication', ctx);\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n }\n return;\n }\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._handlePublication(pub);\n }\n _handleMessage(message) {\n this.emit('message', { data: message.data });\n }\n _handleServerPing(next) {\n if (this._sendPong) {\n const cmd = {};\n this._transportSendCommands([cmd]);\n }\n next();\n }\n _handlePush(data, next) {\n const channel = data.channel;\n if (data.pub) {\n this._handlePublication(channel, data.pub);\n }\n else if (data.message) {\n this._handleMessage(data.message);\n }\n else if (data.join) {\n this._handleJoin(channel, data.join);\n }\n else if (data.leave) {\n this._handleLeave(channel, data.leave);\n }\n else if (data.unsubscribe) {\n this._handleUnsubscribe(channel, data.unsubscribe);\n }\n else if (data.subscribe) {\n this._handleSubscribe(channel, data.subscribe);\n }\n else if (data.disconnect) {\n this._handleDisconnect(data.disconnect);\n }\n next();\n }\n _flush() {\n const commands = this._commands.slice(0);\n this._commands = [];\n this._transportSendCommands(commands);\n }\n _createErrorObject(code, message, temporary) {\n const errObject = {\n code: code,\n message: message\n };\n if (temporary) {\n errObject.temporary = true;\n }\n return errObject;\n }\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(errorCodes.timeout, 'timeout') });\n }\n }, this._config.timeout);\n }\n _addCommand(command) {\n if (this._batching) {\n this._commands.push(command);\n }\n else {\n this._transportSendCommands([command]);\n }\n }\n _nextPromiseId() {\n return ++this._promiseId;\n }\n _nextTransportId() {\n return ++this._transportId;\n }\n _resolvePromises() {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].resolve();\n delete this._promises[id];\n }\n }\n _rejectPromises(err) {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n }\n}\nCentrifuge.SubscriptionState = SubscriptionState;\nCentrifuge.State = State;\nCentrifuge.UnauthorizedError = UnauthorizedError;\n\nexport { Centrifuge, State, Subscription, SubscriptionState, UnauthorizedError, connectingCodes, disconnectedCodes, errorCodes, subscribingCodes, unsubscribedCodes };\n","import { Centrifuge, Subscription } from \"centrifuge\";\nimport { IWebsocketProvider } from \"./websocketProviderFactory\";\nimport _ from \"lodash\";\n\nclass CentrifugoWebsocket implements IWebsocketProvider {\n private centrifuge: Centrifuge | null = null;\n private subscriptions: { [key: string]: Subscription } = {};\n public isConnected: boolean = false;\n\n constructor(\n private connectionUrl?: string,\n private accessToken?: string,\n private userId?: string,\n ) {\n if (!this.accessToken) {\n throw new Error(\"AccessToken is required\");\n }\n if (!this.userId) {\n throw new Error(\"UserId is required\");\n }\n\n if (!this.connectionUrl) {\n throw new Error(\"ConnectionUrl is required\");\n }\n }\n\n connect(): void {\n if (!this.centrifuge) {\n this.centrifuge = new Centrifuge(\n [\n {\n transport: \"websocket\",\n endpoint: this.connectionUrl,\n },\n ],\n {\n token: this.accessToken,\n },\n );\n this.centrifuge.on(\"connecting\", () => {\n console.log(\"Connecting to centrifuge\", this.connectionUrl);\n });\n this.centrifuge.on(\"error\", (err) => {\n console.error(\"Error connecting to centrifuge\", err);\n });\n this.centrifuge.on(\"connected\", (data) => {\n console.log(\"Connected to centrifuge\", data);\n console.log(\"subscriptions\", this.subscriptions);\n this.isConnected = true;\n });\n this.centrifuge.on(\"disconnected\", () => {\n this.isConnected = false;\n });\n this.centrifuge.connect();\n }\n }\n\n private _bind(channelName: string, callback: (data: any) => void) {\n if (!this.isConnected) {\n throw new Error(\"Centrifuge is not initialized. Call connect() first.\");\n }\n\n if (!this.subscriptions[channelName]) {\n const existingSubscription = this.centrifuge.getSubscription(channelName);\n if (existingSubscription) {\n this.subscriptions[channelName] = existingSubscription;\n } else {\n this.subscriptions[channelName] =\n this.centrifuge.newSubscription(channelName);\n }\n }\n const subscription = this.subscriptions[channelName];\n subscription.on(\"publication\", (data) => {\n callback(_.get(data, \"data\", data));\n });\n subscription.on(\"subscribing\", () => {\n console.log(\"subscribing\");\n });\n subscription.on(\"subscribed\", () => {\n console.log(\"subscribed to\", channelName);\n });\n subscription.subscribe();\n }\n\n bind(channel: string, event: string, callback: (data: any) => void): void {\n this._bind(`private-${channel}-${this.userId}#${event}`, callback);\n }\n\n bindGlobal(channel: string, callback: (data: any) => void): void {\n if (!this.isConnected) {\n throw new Error(\"Centrifuge is not initialized. Call connect() first.\");\n }\n this._bind(channel, callback);\n }\n\n unbind(channel: string, event: string): void {\n const channelName = `${channel}#${event}`;\n if (this.subscriptions[channelName]) {\n this.subscriptions[channelName].removeAllListeners();\n this.subscriptions[channelName].unsubscribe();\n delete this.subscriptions[channelName];\n }\n }\n unbindAll(channel: string): void {\n Object.keys(this.subscriptions).forEach((key) => {\n if (key.startsWith(channel)) {\n this.unbind(key, \"\");\n delete this.subscriptions[key];\n }\n });\n }\n\n disconnect(): void {\n if (this.isConnected) {\n this.centrifuge.disconnect();\n this.centrifuge = null;\n this.subscriptions = {};\n }\n this.isConnected = false;\n }\n}\n\nexport default CentrifugoWebsocket;\n","/*!\n * Pusher JavaScript Library v8.5.0\n * https://pusher.com/\n *\n * Copyright 2020, Pusher\n * Released under the MIT licence.\n */\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 594\n(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nvar INVALID_BYTE = 256;\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nvar Coder = /** @class */ (function () {\n // TODO(dchest): methods to encode chunk-by-chunk.\n function Coder(_paddingCharacter) {\n if (_paddingCharacter === void 0) { _paddingCharacter = \"=\"; }\n this._paddingCharacter = _paddingCharacter;\n }\n Coder.prototype.encodedLength = function (length) {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n };\n Coder.prototype.encode = function (data) {\n var out = \"\";\n var i = 0;\n for (; i < data.length - 2; i += 3) {\n var c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n var left = data.length - i;\n if (left > 0) {\n var c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n }\n else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n return out;\n };\n Coder.prototype.maxDecodedLength = function (length) {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n };\n Coder.prototype.decodedLength = function (s) {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n };\n Coder.prototype.decode = function (s) {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n var paddingLength = this._getPaddingLength(s);\n var length = s.length - paddingLength;\n var out = new Uint8Array(this.maxDecodedLength(length));\n var op = 0;\n var i = 0;\n var haveBad = 0;\n var v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n };\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n // Encode 6 bits in b into a new character.\n Coder.prototype._encodeByte = function (b) {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n var result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n return String.fromCharCode(result);\n };\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n Coder.prototype._decodeChar = function (c) {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n var result = INVALID_BYTE; // start with invalid character\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n return result;\n };\n Coder.prototype._getPaddingLength = function (s) {\n var paddingLength = 0;\n if (this._paddingCharacter) {\n for (var i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n };\n return Coder;\n}());\nexports.Coder = Coder;\nvar stdCoder = new Coder();\nfunction encode(data) {\n return stdCoder.encode(data);\n}\nexports.encode = encode;\nfunction decode(s) {\n return stdCoder.decode(s);\n}\nexports.decode = decode;\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nvar URLSafeCoder = /** @class */ (function (_super) {\n __extends(URLSafeCoder, _super);\n function URLSafeCoder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n URLSafeCoder.prototype._encodeByte = function (b) {\n var result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n return String.fromCharCode(result);\n };\n URLSafeCoder.prototype._decodeChar = function (c) {\n var result = INVALID_BYTE;\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n return result;\n };\n return URLSafeCoder;\n}(Coder));\nexports.URLSafeCoder = URLSafeCoder;\nvar urlSafeCoder = new URLSafeCoder();\nfunction encodeURLSafe(data) {\n return urlSafeCoder.encode(data);\n}\nexports.encodeURLSafe = encodeURLSafe;\nfunction decodeURLSafe(s) {\n return urlSafeCoder.decode(s);\n}\nexports.decodeURLSafe = decodeURLSafe;\nexports.encodedLength = function (length) {\n return stdCoder.encodedLength(length);\n};\nexports.maxDecodedLength = function (length) {\n return stdCoder.maxDecodedLength(length);\n};\nexports.decodedLength = function (s) {\n return stdCoder.decodedLength(s);\n};\n\n\n/***/ },\n\n/***/ 978\n(__unused_webpack_module, exports) {\n\n\"use strict\";\nvar __webpack_unused_export__;\n\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n__webpack_unused_export__ = ({ value: true });\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\nvar INVALID_UTF16 = \"utf8: invalid string\";\nvar INVALID_UTF8 = \"utf8: invalid source encoding\";\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encode(s) {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n var arr = new Uint8Array(encodedLength(s));\n var pos = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n }\n else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n__webpack_unused_export__ = encode;\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encodedLength(s) {\n var result = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n }\n else if (c < 0x800) {\n result += 2;\n }\n else if (c < 0xd800) {\n result += 3;\n }\n else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n }\n else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n__webpack_unused_export__ = encodedLength;\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nfunction decode(arr) {\n var chars = [];\n for (var i = 0; i < arr.length; i++) {\n var b = arr[i];\n if (b & 0x80) {\n var min = void 0;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n }\n else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n }\n else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n var n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n }\n else {\n throw new Error(INVALID_UTF8);\n }\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\nexports.D4 = decode;\n\n\n/***/ },\n\n/***/ 721\n(module, __unused_webpack_exports, __webpack_require__) {\n\n// required so we don't have to do require('pusher').default etc.\nmodule.exports = __webpack_require__(207)[\"default\"];\n\n\n/***/ },\n\n/***/ 207\n(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": () => (/* binding */ pusher)\n});\n\n;// ./src/runtimes/web/dom/script_receiver_factory.ts\nclass ScriptReceiverFactory {\n constructor(prefix, name) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n create(callback) {\n this.lastId++;\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n var called = false;\n var callbackWrapper = function () {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n remove(receiver) {\n delete this[receiver.number];\n }\n}\nvar ScriptReceivers = new ScriptReceiverFactory('_pusher_script_', 'Pusher.ScriptReceivers');\n\n;// ./src/core/defaults.ts\nvar Defaults = {\n VERSION: \"8.5.0\",\n PROTOCOL: 7,\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n stats_host: 'stats.pusher.com',\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax',\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax',\n },\n cdn_http: \"http://js.pusher.com\",\n cdn_https: \"https://js.pusher.com\",\n dependency_suffix: \"\",\n};\n/* harmony default export */ const defaults = (Defaults);\n\n;// ./src/runtimes/web/dom/dependency_loader.ts\n\n\nclass DependencyLoader {\n constructor(options) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n load(name, options, callback) {\n var self = this;\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n }\n else {\n self.loading[name] = [callback];\n var request = runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function (error) {\n self.receivers.remove(receiver);\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n var successCallback = function (wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n getRoot(options) {\n var cdn;\n var protocol = runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n }\n else {\n cdn = this.options.cdn_http;\n }\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n getPath(name, options) {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n\n;// ./src/runtimes/web/dom/dependencies.ts\n\n\n\nvar DependenciesReceivers = new ScriptReceiverFactory('_pusher_dependencies', 'Pusher.DependenciesReceivers');\nvar Dependencies = new DependencyLoader({\n cdn_http: defaults.cdn_http,\n cdn_https: defaults.cdn_https,\n version: defaults.VERSION,\n suffix: defaults.dependency_suffix,\n receivers: DependenciesReceivers,\n});\n\n;// ./src/core/utils/url_store.ts\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users',\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/',\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start',\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events',\n },\n encryptedChannelSupport: {\n fullUrl: 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support',\n },\n },\n};\nconst buildLogSuffix = function (key) {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj)\n return '';\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n }\n else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n if (!url)\n return '';\n return `${urlPrefix} ${url}`;\n};\n/* harmony default export */ const url_store = ({ buildLogSuffix });\n\n;// ./src/core/auth/options.ts\nvar AuthRequestType;\n(function (AuthRequestType) {\n AuthRequestType[\"UserAuthentication\"] = \"user-authentication\";\n AuthRequestType[\"ChannelAuthorization\"] = \"channel-authorization\";\n})(AuthRequestType || (AuthRequestType = {}));\n\n;// ./src/core/errors.ts\nclass BadEventName extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass BadChannelName extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass RequestTimedOut extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass TransportPriorityTooLow extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass TransportClosed extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass UnsupportedFeature extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass UnsupportedTransport extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass UnsupportedStrategy extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass HTTPAuthError extends Error {\n constructor(status, msg) {\n super(msg);\n this.status = status;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n;// ./src/runtimes/isomorphic/auth/xhr_auth.ts\n\n\n\n\nconst ajax = function (context, query, authOptions, authRequestType, callback) {\n const xhr = runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n }\n catch (e) {\n callback(new HTTPAuthError(200, `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${xhr.responseText}`), null);\n }\n if (parsed) {\n callback(null, data);\n }\n }\n else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = url_store.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${url_store.buildLogSuffix('authorizationEndpoint')}`;\n break;\n }\n callback(new HTTPAuthError(xhr.status, `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`), null);\n }\n }\n };\n xhr.send(query);\n return xhr;\n};\n/* harmony default export */ const xhr_auth = (ajax);\n\n;// ./src/core/base64.ts\nfunction encode(s) {\n return btoa(utob(s));\n}\nvar fromCharCode = String.fromCharCode;\nvar b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\nvar cb_utob = function (c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\nvar utob = function (u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\nvar cb_encode = function (ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord = (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63),\n ];\n return chars.join('');\n};\nvar btoa = window.btoa ||\n function (b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n\n;// ./src/core/utils/timers/abstract_timer.ts\nclass Timer {\n constructor(set, clear, delay, callback) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n isRunning() {\n return this.timer !== null;\n }\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n/* harmony default export */ const abstract_timer = (Timer);\n\n;// ./src/core/utils/timers/index.ts\n\nfunction timers_clearTimeout(timer) {\n window.clearTimeout(timer);\n}\nfunction timers_clearInterval(timer) {\n window.clearInterval(timer);\n}\nclass OneOffTimer extends abstract_timer {\n constructor(delay, callback) {\n super(setTimeout, timers_clearTimeout, delay, function (timer) {\n callback();\n return null;\n });\n }\n}\nclass PeriodicTimer extends abstract_timer {\n constructor(delay, callback) {\n super(setInterval, timers_clearInterval, delay, function (timer) {\n callback();\n return timer;\n });\n }\n}\n\n;// ./src/core/util.ts\n\nvar Util = {\n now() {\n if (Date.now) {\n return Date.now();\n }\n else {\n return new Date().valueOf();\n }\n },\n defer(callback) {\n return new OneOffTimer(0, callback);\n },\n method(name, ...args) {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function (object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n },\n};\n/* harmony default export */ const util = (Util);\n\n;// ./src/core/utils/collections.ts\n\n\nfunction extend(target, ...sources) {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object) {\n target[property] = extend(target[property] || {}, extensions[property]);\n }\n else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\nfunction stringify() {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n }\n else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\nfunction arrayIndexOf(array, item) {\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\nfunction objectApply(object, f) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\nfunction keys(object) {\n var keys = [];\n objectApply(object, function (_, key) {\n keys.push(key);\n });\n return keys;\n}\nfunction values(object) {\n var values = [];\n objectApply(object, function (value) {\n values.push(value);\n });\n return values;\n}\nfunction apply(array, f, context) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || window, array[i], i, array);\n }\n}\nfunction map(array, f) {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\nfunction mapObject(object, f) {\n var result = {};\n objectApply(object, function (value, key) {\n result[key] = f(value);\n });\n return result;\n}\nfunction filter(array, test) {\n test =\n test ||\n function (value) {\n return !!value;\n };\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\nfunction filterObject(object, test) {\n var result = {};\n objectApply(object, function (value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction flatten(object) {\n var result = [];\n objectApply(object, function (value, key) {\n result.push([key, value]);\n });\n return result;\n}\nfunction any(array, test) {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\nfunction collections_all(array, test) {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\nfunction encodeParamsObject(data) {\n return mapObject(data, function (value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(encode(value.toString()));\n });\n}\nfunction buildQueryString(data) {\n var params = filterObject(data, function (value) {\n return value !== undefined;\n });\n var query = map(flatten(encodeParamsObject(params)), util.method('join', '=')).join('&');\n return query;\n}\nfunction decycleObject(object) {\n var objects = [], paths = [];\n return (function derez(value, path) {\n var i, name, nu;\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n objects.push(value);\n paths.push(path);\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n }\n else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(value[name], path + '[' + JSON.stringify(name) + ']');\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\nfunction safeJSONStringify(source) {\n try {\n return JSON.stringify(source);\n }\n catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n\n;// ./src/core/logger.ts\n\n\nclass Logger {\n constructor() {\n this.globalLog = (message) => {\n if (window.console && window.console.log) {\n window.console.log(message);\n }\n };\n }\n debug(...args) {\n this.log(this.globalLog, args);\n }\n warn(...args) {\n this.log(this.globalLogWarn, args);\n }\n error(...args) {\n this.log(this.globalLogError, args);\n }\n globalLogWarn(message) {\n if (window.console && window.console.warn) {\n window.console.warn(message);\n }\n else {\n this.globalLog(message);\n }\n }\n globalLogError(message) {\n if (window.console && window.console.error) {\n window.console.error(message);\n }\n else {\n this.globalLogWarn(message);\n }\n }\n log(defaultLoggingFunction, ...args) {\n var message = stringify.apply(this, arguments);\n if (pusher.log) {\n pusher.log(message);\n }\n else if (pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n/* harmony default export */ const logger = (new Logger());\n\n;// ./src/runtimes/web/auth/jsonp_auth.ts\n\nvar jsonp = function (context, query, authOptions, authRequestType, callback) {\n if (authOptions.headers !== undefined ||\n authOptions.headersProvider != null) {\n logger.warn(`To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`);\n }\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n var document = context.getDocument();\n var script = document.createElement('script');\n context.auth_callbacks[callbackName] = function (data) {\n callback(null, data);\n };\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n var head = document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n/* harmony default export */ const jsonp_auth = (jsonp);\n\n;// ./src/runtimes/web/dom/script_request.ts\nclass ScriptRequest {\n constructor(src) {\n this.src = src;\n }\n send(receiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n if (self.script.addEventListener) {\n self.script.onerror = function () {\n receiver.callback(errorString);\n };\n self.script.onload = function () {\n receiver.callback(null);\n };\n }\n else {\n self.script.onreadystatechange = function () {\n if (self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete') {\n receiver.callback(null);\n }\n };\n }\n if (self.script.async === undefined &&\n document.attachEvent &&\n /opera/i.test(navigator.userAgent)) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n }\n else {\n self.script.async = true;\n }\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n\n;// ./src/runtimes/web/dom/jsonp_request.ts\n\n\nclass JSONPRequest {\n constructor(url, data) {\n this.url = url;\n this.data = data;\n }\n send(receiver) {\n if (this.request) {\n return;\n }\n var query = buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n\n;// ./src/runtimes/web/timeline/jsonp_timeline.ts\n\n\nvar getAgent = function (sender, useTLS) {\n return function (data, callback) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url = scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = runtime.createJSONPRequest(url, data);\n var receiver = runtime.ScriptReceivers.create(function (error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\nvar jsonp_timeline_jsonp = {\n name: 'jsonp',\n getAgent,\n};\n/* harmony default export */ const jsonp_timeline = (jsonp_timeline_jsonp);\n\n;// ./src/core/transports/url_schemes.ts\n\nfunction getGenericURL(baseScheme, params, path) {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\nfunction getGenericPath(key, queryString) {\n var path = '/app/' + key;\n var query = '?protocol=' +\n defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\nvar ws = {\n getInitial: function (key, params) {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n },\n};\nvar http = {\n getInitial: function (key, params) {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n },\n};\nvar sockjs = {\n getInitial: function (key, params) {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function (key, params) {\n return getGenericPath(key);\n },\n};\n\n;// ./src/core/events/callback_registry.ts\n\nclass CallbackRegistry {\n constructor() {\n this._callbacks = {};\n }\n get(name) {\n return this._callbacks[prefix(name)];\n }\n add(name, callback, context) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context,\n });\n }\n remove(name, callback, context) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n var names = name ? [prefix(name)] : keys(this._callbacks);\n if (callback || context) {\n this.removeCallback(names, callback, context);\n }\n else {\n this.removeAllCallbacks(names);\n }\n }\n removeCallback(names, callback, context) {\n apply(names, function (name) {\n this._callbacks[name] = filter(this._callbacks[name] || [], function (binding) {\n return ((callback && callback !== binding.fn) ||\n (context && context !== binding.context));\n });\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n }, this);\n }\n removeAllCallbacks(names) {\n apply(names, function (name) {\n delete this._callbacks[name];\n }, this);\n }\n}\nfunction prefix(name) {\n return '_' + name;\n}\n\n;// ./src/core/events/dispatcher.ts\n\n\nclass Dispatcher {\n constructor(failThrough) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n bind(eventName, callback, context) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n bind_global(callback) {\n this.global_callbacks.push(callback);\n return this;\n }\n unbind(eventName, callback, context) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n unbind_global(callback) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n this.global_callbacks = filter(this.global_callbacks || [], (c) => c !== callback);\n return this;\n }\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n emit(eventName, data, metadata) {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n if (metadata) {\n args.push(data, metadata);\n }\n else if (data) {\n args.push(data);\n }\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || window, args);\n }\n }\n else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n return this;\n }\n}\n\n;// ./src/core/transports/transport_connection.ts\n\n\n\n\n\nclass TransportConnection extends Dispatcher {\n constructor(hooks, name, priority, key, options) {\n super();\n this.initialize = runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n handlesActivityChecks() {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n supportsPing() {\n return Boolean(this.hooks.supportsPing);\n }\n connect() {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n }\n catch (e) {\n util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n this.bindListeners();\n logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n close() {\n if (this.socket) {\n this.socket.close();\n return true;\n }\n else {\n return false;\n }\n }\n send(data) {\n if (this.state === 'open') {\n util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n }\n else {\n return false;\n }\n }\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options));\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n onClose(closeEvent) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean,\n });\n }\n else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n onMessage(message) {\n this.emit('message', message);\n }\n onActivity() {\n this.emit('activity');\n }\n bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = (error) => {\n this.onError(error);\n };\n this.socket.onclose = (closeEvent) => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = (message) => {\n this.onMessage(message);\n };\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n changeState(state, params) {\n this.state = state;\n this.timeline.info(this.buildTimelineMessage({\n state: state,\n params: params,\n }));\n this.emit(state, params);\n }\n buildTimelineMessage(message) {\n return extend({ cid: this.id }, message);\n }\n}\n\n;// ./src/core/transports/transport.ts\n\nclass Transport {\n constructor(hooks) {\n this.hooks = hooks;\n }\n isSupported(environment) {\n return this.hooks.isSupported(environment);\n }\n createConnection(name, priority, key, options) {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n\n;// ./src/runtimes/isomorphic/transports/transports.ts\n\n\n\n\nvar WSTransport = new Transport({\n urls: ws,\n handlesActivityChecks: false,\n supportsPing: false,\n isInitialized: function () {\n return Boolean(runtime.getWebSocketAPI());\n },\n isSupported: function () {\n return Boolean(runtime.getWebSocketAPI());\n },\n getSocket: function (url) {\n return runtime.createWebSocket(url);\n },\n});\nvar httpConfiguration = {\n urls: http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function () {\n return true;\n },\n};\nvar streamingConfiguration = extend({\n getSocket: function (url) {\n return runtime.HTTPFactory.createStreamingSocket(url);\n },\n}, httpConfiguration);\nvar pollingConfiguration = extend({\n getSocket: function (url) {\n return runtime.HTTPFactory.createPollingSocket(url);\n },\n}, httpConfiguration);\nvar xhrConfiguration = {\n isSupported: function () {\n return runtime.isXHRSupported();\n },\n};\nvar XHRStreamingTransport = new Transport((extend({}, streamingConfiguration, xhrConfiguration)));\nvar XHRPollingTransport = new Transport((extend({}, pollingConfiguration, xhrConfiguration)));\nvar Transports = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport,\n};\n/* harmony default export */ const transports = (Transports);\n\n;// ./src/runtimes/web/transports/transports.ts\n\n\n\n\n\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n isSupported: function () {\n return true;\n },\n isInitialized: function () {\n return window.SockJS !== undefined;\n },\n getSocket: function (url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS,\n }),\n ignore_null_origin: options.ignoreNullOrigin,\n });\n },\n beforeOpen: function (socket, path) {\n socket.send(JSON.stringify({\n path: path,\n }));\n },\n});\nvar xdrConfiguration = {\n isSupported: function (environment) {\n var yes = runtime.isXDRSupported(environment.useTLS);\n return yes;\n },\n};\nvar XDRStreamingTransport = new Transport((extend({}, streamingConfiguration, xdrConfiguration)));\nvar XDRPollingTransport = new Transport((extend({}, pollingConfiguration, xdrConfiguration)));\ntransports.xdr_streaming = XDRStreamingTransport;\ntransports.xdr_polling = XDRPollingTransport;\ntransports.sockjs = SockJSTransport;\n/* harmony default export */ const transports_transports = (transports);\n\n;// ./src/runtimes/web/net_info.ts\n\nclass NetInfo extends Dispatcher {\n constructor() {\n super();\n var self = this;\n if (window.addEventListener !== undefined) {\n window.addEventListener('online', function () {\n self.emit('online');\n }, false);\n window.addEventListener('offline', function () {\n self.emit('offline');\n }, false);\n }\n }\n isOnline() {\n if (window.navigator.onLine === undefined) {\n return true;\n }\n else {\n return window.navigator.onLine;\n }\n }\n}\nvar Network = new NetInfo();\n\n;// ./src/core/transports/assistant_to_the_transport_manager.ts\n\n\nclass AssistantToTheTransportManager {\n constructor(manager, transport, options) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n createConnection(name, priority, key, options) {\n options = extend({}, options, {\n activityTimeout: this.pingDelay,\n });\n var connection = this.transport.createConnection(name, priority, key, options);\n var openTimestamp = null;\n var onOpen = function () {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = util.now();\n };\n var onClosed = (closeEvent) => {\n connection.unbind('closed', onClosed);\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n this.manager.reportDeath();\n }\n else if (!closeEvent.wasClean && openTimestamp) {\n var lifespan = util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n connection.bind('open', onOpen);\n return connection;\n }\n isSupported(environment) {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n\n;// ./src/core/connection/protocol/protocol.ts\nconst Protocol = {\n decodeMessage: function (messageEvent) {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n }\n catch (e) { }\n }\n var pusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData,\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n }\n catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n encodeMessage: function (event) {\n return JSON.stringify(event);\n },\n processHandshake: function (messageEvent) {\n var message = Protocol.decodeMessage(messageEvent);\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000,\n };\n }\n else if (message.event === 'pusher:error') {\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data),\n };\n }\n else {\n throw 'Invalid handshake';\n }\n },\n getCloseAction: function (closeEvent) {\n if (closeEvent.code < 4000) {\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n }\n else {\n return null;\n }\n }\n else if (closeEvent.code === 4000) {\n return 'tls_only';\n }\n else if (closeEvent.code < 4100) {\n return 'refused';\n }\n else if (closeEvent.code < 4200) {\n return 'backoff';\n }\n else if (closeEvent.code < 4300) {\n return 'retry';\n }\n else {\n return 'refused';\n }\n },\n getCloseError: function (closeEvent) {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message,\n },\n };\n }\n else {\n return null;\n }\n },\n};\n/* harmony default export */ const protocol = (Protocol);\n\n;// ./src/core/connection/connection.ts\n\n\n\n\nclass Connection extends Dispatcher {\n constructor(id, transport) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n send(data) {\n return this.transport.send(data);\n }\n send_event(name, data, channel) {\n var event = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n logger.debug('Event sent', event);\n return this.send(protocol.encodeMessage(event));\n }\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n }\n else {\n this.send_event('pusher:ping', {});\n }\n }\n close() {\n this.transport.close();\n }\n bindListeners() {\n var listeners = {\n message: (messageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = protocol.decodeMessage(messageEvent);\n }\n catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data,\n });\n }\n if (pusherEvent !== undefined) {\n logger.debug('Event recd', pusherEvent);\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data,\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: (error) => {\n this.emit('error', error);\n },\n closed: (closeEvent) => {\n unbindListeners();\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n this.transport = null;\n this.emit('closed');\n },\n };\n var unbindListeners = () => {\n objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n handleCloseEvent(closeEvent) {\n var action = protocol.getCloseAction(closeEvent);\n var error = protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n\n;// ./src/core/connection/handshake/index.ts\n\n\n\nclass Handshake {\n constructor(transport, callback) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n bindListeners() {\n this.onMessage = (m) => {\n this.unbindListeners();\n var result;\n try {\n result = protocol.processHandshake(m);\n }\n catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout,\n });\n }\n else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n this.onClosed = (closeEvent) => {\n this.unbindListeners();\n var action = protocol.getCloseAction(closeEvent) || 'backoff';\n var error = protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n finish(action, params) {\n this.callback(extend({ transport: this.transport, action: action }, params));\n }\n}\n\n;// ./src/core/timeline/timeline_sender.ts\n\nclass TimelineSender {\n constructor(timeline, options) {\n this.timeline = timeline;\n this.options = options || {};\n }\n send(useTLS, callback) {\n if (this.timeline.isEmpty()) {\n return;\n }\n this.timeline.send(runtime.TimelineTransport.getAgent(this, useTLS), callback);\n }\n}\n\n;// ./src/core/channels/channel.ts\n\n\n\n\n\nclass Channel extends Dispatcher {\n constructor(name, pusher) {\n super(function (event, data) {\n logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n authorize(socketId, callback) {\n return callback(null, { auth: '' });\n }\n trigger(event, data) {\n if (event.indexOf('client-') !== 0) {\n throw new BadEventName(\"Event '\" + event + \"' does not start with 'client-'\");\n }\n if (!this.subscribed) {\n var suffix = url_store.buildLogSuffix('triggeringClientEvents');\n logger.warn(`Client event triggered before channel 'subscription_succeeded' event . ${suffix}`);\n }\n return this.pusher.send_event(event, data, this.name);\n }\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n handleEvent(event) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n }\n else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n }\n else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n handleSubscriptionSucceededEvent(event) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n }\n else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n handleSubscriptionCountEvent(event) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n this.emit('pusher:subscription_count', event.data);\n }\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(this.pusher.connection.socket_id, (error, data) => {\n if (error) {\n this.subscriptionPending = false;\n logger.error(error.toString());\n this.emit('pusher:subscription_error', Object.assign({}, {\n type: 'AuthError',\n error: error.message,\n }, error instanceof HTTPAuthError ? { status: error.status } : {}));\n }\n else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name,\n });\n }\n });\n }\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name,\n });\n }\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n\n;// ./src/core/channels/private_channel.ts\n\nclass PrivateChannel extends Channel {\n authorize(socketId, callback) {\n return this.pusher.config.channelAuthorizer({\n channelName: this.name,\n socketId: socketId,\n }, callback);\n }\n}\n\n;// ./src/core/channels/members.ts\n\nclass Members {\n constructor() {\n this.reset();\n }\n get(id) {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id],\n };\n }\n else {\n return null;\n }\n }\n each(callback) {\n objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n setMyID(id) {\n this.myID = id;\n }\n onSubscription(subscriptionData) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n addMember(memberData) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n removeMember(memberData) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n\n;// ./src/core/channels/presence_channel.ts\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\nclass PresenceChannel extends PrivateChannel {\n constructor(name, pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n authorize(socketId, callback) {\n super.authorize(socketId, (error, authData) => __awaiter(this, void 0, void 0, function* () {\n if (!error) {\n authData = authData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n }\n else {\n yield this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n this.members.setMyID(this.pusher.user.user_data.id);\n }\n else {\n let suffix = url_store.buildLogSuffix('authorizationEndpoint');\n logger.error(`Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`);\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n }));\n }\n handleEvent(event) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n }\n else {\n var data = event.data;\n var metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n handleSubscriptionSucceededEvent(event) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n }\n else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n\n// EXTERNAL MODULE: ./node_modules/@stablelib/utf8/lib/utf8.js\nvar utf8 = __webpack_require__(978);\n// EXTERNAL MODULE: ./node_modules/@stablelib/base64/lib/base64.js\nvar base64 = __webpack_require__(594);\n;// ./src/core/channels/encrypted_channel.ts\n\n\n\n\n\nclass EncryptedChannel extends PrivateChannel {\n constructor(name, pusher, nacl) {\n super(name, pusher);\n this.key = null;\n this.nacl = nacl;\n }\n authorize(socketId, callback) {\n super.authorize(socketId, (error, authData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`), null);\n return;\n }\n this.key = (0,base64.decode)(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n });\n }\n trigger(event, data) {\n throw new UnsupportedFeature('Client events are not currently supported for encrypted channels');\n }\n handleEvent(event) {\n var eventName = event.event;\n var data = event.data;\n if (eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n handleEncryptedEvent(event, data) {\n if (!this.key) {\n logger.debug('Received encrypted event before key has been retrieved from the authEndpoint');\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n logger.error('Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data);\n return;\n }\n let cipherText = (0,base64.decode)(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n logger.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`);\n return;\n }\n let nonce = (0,base64.decode)(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n logger.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`);\n return;\n }\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n logger.debug('Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...');\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n logger.error(`Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`);\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n logger.error(`Failed to decrypt event with new key. Dropping encrypted event`);\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n getDataToEmit(bytes) {\n let raw = (0,utf8/* decode */.D4)(bytes);\n try {\n return JSON.parse(raw);\n }\n catch (_a) {\n return raw;\n }\n }\n}\n\n;// ./src/core/connection/connection_manager.ts\n\n\n\n\n\nclass ConnectionManager extends Dispatcher {\n constructor(key, options) {\n super();\n this.state = 'initialized';\n this.connection = null;\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(this.errorCallbacks);\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n var Network = runtime.getNetwork();\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n this.updateStrategy();\n }\n switchCluster(key) {\n this.key = key;\n this.updateStrategy();\n this.retryIn(0);\n }\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n }\n else {\n return false;\n }\n }\n send_event(name, data, channel) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n }\n else {\n return false;\n }\n }\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n isUsingTLS() {\n return this.usingTLS;\n }\n startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n }\n else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error,\n });\n this.timeline.error({ handshakeError: handshake.error });\n }\n else {\n this.abortConnecting();\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS,\n });\n }\n retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new OneOffTimer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n setUnavailableTimer() {\n this.unavailableTimer = new OneOffTimer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n this.activityTimer = new OneOffTimer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n resetActivityCheck() {\n this.stopActivityCheck();\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new OneOffTimer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n buildConnectionCallbacks(errorCallbacks) {\n return extend({}, errorCallbacks, {\n message: (message) => {\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: (error) => {\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n },\n });\n }\n buildHandshakeCallbacks(errorCallbacks) {\n return extend({}, errorCallbacks, {\n connected: (handshake) => {\n this.activityTimeout = Math.min(this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity);\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n },\n });\n }\n buildErrorCallbacks() {\n let withErrorEmitted = (callback) => {\n return (result) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n }),\n };\n }\n setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n updateState(newState, data) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n logger.debug('State changed', previousState + ' -> ' + newStateDescription);\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n shouldRetry() {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n\n;// ./src/core/channels/channels.ts\n\n\n\n\nclass Channels {\n constructor() {\n this.channels = {};\n }\n add(name, pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n all() {\n return values(this.channels);\n }\n find(name) {\n return this.channels[name];\n }\n remove(name) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n disconnect() {\n objectApply(this.channels, function (channel) {\n channel.disconnect();\n });\n }\n}\nfunction createChannel(name, pusher) {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = url_store.buildLogSuffix('encryptedChannelSupport');\n throw new UnsupportedFeature(`${errMsg}. ${suffix}`);\n }\n else if (name.indexOf('private-') === 0) {\n return factory.createPrivateChannel(name, pusher);\n }\n else if (name.indexOf('presence-') === 0) {\n return factory.createPresenceChannel(name, pusher);\n }\n else if (name.indexOf('#') === 0) {\n throw new BadChannelName('Cannot create a channel with name \"' + name + '\".');\n }\n else {\n return factory.createChannel(name, pusher);\n }\n}\n\n;// ./src/core/utils/factory.ts\n\n\n\n\n\n\n\n\n\nvar Factory = {\n createChannels() {\n return new Channels();\n },\n createConnectionManager(key, options) {\n return new ConnectionManager(key, options);\n },\n createChannel(name, pusher) {\n return new Channel(name, pusher);\n },\n createPrivateChannel(name, pusher) {\n return new PrivateChannel(name, pusher);\n },\n createPresenceChannel(name, pusher) {\n return new PresenceChannel(name, pusher);\n },\n createEncryptedChannel(name, pusher, nacl) {\n return new EncryptedChannel(name, pusher, nacl);\n },\n createTimelineSender(timeline, options) {\n return new TimelineSender(timeline, options);\n },\n createHandshake(transport, callback) {\n return new Handshake(transport, callback);\n },\n createAssistantToTheTransportManager(manager, transport, options) {\n return new AssistantToTheTransportManager(manager, transport, options);\n },\n};\n/* harmony default export */ const factory = (Factory);\n\n;// ./src/core/transports/transport_manager.ts\n\nclass TransportManager {\n constructor(options) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n getAssistant(transport) {\n return factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay,\n });\n }\n isAlive() {\n return this.livesLeft > 0;\n }\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n\n;// ./src/core/strategies/sequential_strategy.ts\n\n\n\nclass SequentialStrategy {\n constructor(strategies, options) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n isSupported() {\n return any(this.strategies, util.method('isSupported'));\n }\n connect(minPriority, callback) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n }\n else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(strategies[current], minPriority, { timeout, failFast: this.failFast }, tryNextStrategy);\n }\n else {\n callback(true);\n }\n }\n };\n runner = this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: this.failFast }, tryNextStrategy);\n return {\n abort: function () {\n runner.abort();\n },\n forceMinPriority: function (p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n },\n };\n }\n tryStrategy(strategy, minPriority, options, callback) {\n var timer = null;\n var runner = null;\n if (options.timeout > 0) {\n timer = new OneOffTimer(options.timeout, function () {\n runner.abort();\n callback(true);\n });\n }\n runner = strategy.connect(minPriority, function (error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n return {\n abort: function () {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function (p) {\n runner.forceMinPriority(p);\n },\n };\n }\n}\n\n;// ./src/core/strategies/best_connected_ever_strategy.ts\n\n\nclass BestConnectedEverStrategy {\n constructor(strategies) {\n this.strategies = strategies;\n }\n isSupported() {\n return any(this.strategies, util.method('isSupported'));\n }\n connect(minPriority, callback) {\n return connect(this.strategies, minPriority, function (i, runners) {\n return function (error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n apply(runners, function (runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\nfunction connect(strategies, minPriority, callbackBuilder) {\n var runners = map(strategies, function (strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function () {\n apply(runners, abortRunner);\n },\n forceMinPriority: function (p) {\n apply(runners, function (runner) {\n runner.forceMinPriority(p);\n });\n },\n };\n}\nfunction allRunnersFailed(runners) {\n return collections_all(runners, function (runner) {\n return Boolean(runner.error);\n });\n}\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n\n;// ./src/core/strategies/websocket_prioritized_cached_strategy.ts\n\n\n\n\nclass WebSocketPrioritizedCachedStrategy {\n constructor(strategy, transports, options) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n isSupported() {\n return this.strategy.isSupported();\n }\n connect(minPriority, callback) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n var cacheSkipCount = info && info.cacheSkipCount ? info.cacheSkipCount : 0;\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n if (['ws', 'wss'].includes(info.transport) || cacheSkipCount > 3) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency,\n });\n strategies.push(new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true,\n }));\n }\n else {\n cacheSkipCount++;\n }\n }\n }\n var startTimestamp = util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = util.now();\n runner = strategies.pop().connect(minPriority, cb);\n }\n else {\n callback(error);\n }\n }\n else {\n storeTransportCache(usingTLS, handshake.transport.name, util.now() - startTimestamp, cacheSkipCount);\n callback(null, handshake);\n }\n });\n return {\n abort: function () {\n runner.abort();\n },\n forceMinPriority: function (p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n },\n };\n }\n}\nfunction getTransportCacheKey(usingTLS) {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\nfunction fetchTransportCache(usingTLS) {\n var storage = runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n }\n catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\nfunction storeTransportCache(usingTLS, transport, latency, cacheSkipCount) {\n var storage = runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = safeJSONStringify({\n timestamp: util.now(),\n transport: transport,\n latency: latency,\n cacheSkipCount: cacheSkipCount,\n });\n }\n catch (e) {\n }\n }\n}\nfunction flushTransportCache(usingTLS) {\n var storage = runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n }\n catch (e) {\n }\n }\n}\n\n;// ./src/core/strategies/delayed_strategy.ts\n\nclass DelayedStrategy {\n constructor(strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n isSupported() {\n return this.strategy.isSupported();\n }\n connect(minPriority, callback) {\n var strategy = this.strategy;\n var runner;\n var timer = new OneOffTimer(this.options.delay, function () {\n runner = strategy.connect(minPriority, callback);\n });\n return {\n abort: function () {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function (p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n },\n };\n }\n}\n\n;// ./src/core/strategies/if_strategy.ts\nclass IfStrategy {\n constructor(test, trueBranch, falseBranch) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n isSupported() {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n connect(minPriority, callback) {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n\n;// ./src/core/strategies/first_connected_strategy.ts\nclass FirstConnectedStrategy {\n constructor(strategy) {\n this.strategy = strategy;\n }\n isSupported() {\n return this.strategy.isSupported();\n }\n connect(minPriority, callback) {\n var runner = this.strategy.connect(minPriority, function (error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n\n;// ./src/runtimes/web/default_strategy.ts\n\n\n\n\n\n\n\nfunction testSupportsStrategy(strategy) {\n return function () {\n return strategy.isSupported();\n };\n}\nvar getDefaultStrategy = function (config, baseOptions, defineTransport) {\n var definedTransports = {};\n function defineTransportStrategy(name, type, priority, options, manager) {\n var transport = defineTransport(config, name, type, priority, options, manager);\n definedTransports[name] = transport;\n return transport;\n }\n var ws_options = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath,\n });\n var wss_options = Object.assign({}, ws_options, {\n useTLS: true,\n });\n var sockjs_options = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath,\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000,\n };\n var ws_manager = new TransportManager({\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout,\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout,\n });\n var ws_transport = defineTransportStrategy('ws', 'ws', 3, ws_options, ws_manager);\n var wss_transport = defineTransportStrategy('wss', 'ws', 3, wss_options, ws_manager);\n var sockjs_transport = defineTransportStrategy('sockjs', 'sockjs', 1, sockjs_options);\n var xhr_streaming_transport = defineTransportStrategy('xhr_streaming', 'xhr_streaming', 1, sockjs_options, streaming_manager);\n var xdr_streaming_transport = defineTransportStrategy('xdr_streaming', 'xdr_streaming', 1, sockjs_options, streaming_manager);\n var xhr_polling_transport = defineTransportStrategy('xhr_polling', 'xhr_polling', 1, sockjs_options);\n var xdr_polling_transport = defineTransportStrategy('xdr_polling', 'xdr_polling', 1, sockjs_options);\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy([\n new IfStrategy(testSupportsStrategy(xhr_streaming_transport), xhr_streaming_transport, xdr_streaming_transport),\n ], timeouts);\n var polling_loop = new SequentialStrategy([\n new IfStrategy(testSupportsStrategy(xhr_polling_transport), xhr_polling_transport, xdr_polling_transport),\n ], timeouts);\n var http_loop = new SequentialStrategy([\n new IfStrategy(testSupportsStrategy(streaming_loop), new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 }),\n ]), polling_loop),\n ], timeouts);\n var http_fallback_loop = new IfStrategy(testSupportsStrategy(http_loop), http_loop, sockjs_loop);\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 }),\n ]);\n }\n else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 }),\n ]);\n }\n return new WebSocketPrioritizedCachedStrategy(new FirstConnectedStrategy(new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_fallback_loop)), definedTransports, {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS,\n });\n};\n/* harmony default export */ const default_strategy = (getDefaultStrategy);\n\n;// ./src/runtimes/web/transports/transport_connection_initializer.ts\n\n/* harmony default export */ function transport_connection_initializer() {\n var self = this;\n self.timeline.info(self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : ''),\n }));\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n }\n else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(self.hooks.file, { useTLS: self.options.useTLS }, function (error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n }\n else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n });\n }\n else {\n self.onClose();\n }\n}\n\n;// ./src/runtimes/web/http/http_xdomain_request.ts\n\nvar hooks = {\n getRequest: function (socket) {\n var xdr = new window.XDomainRequest();\n xdr.ontimeout = function () {\n socket.emit('error', new RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function (e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function () {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function () {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function (xdr) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n },\n};\n/* harmony default export */ const http_xdomain_request = (hooks);\n\n;// ./src/core/http/http_request.ts\n\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\nclass HTTPRequest extends Dispatcher {\n constructor(hooks, method, url) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n start(payload) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n this.unloader = () => {\n this.close();\n };\n runtime.addUnloadListener(this.unloader);\n this.xhr.open(this.method, this.url, true);\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json');\n }\n this.xhr.send(payload);\n }\n close() {\n if (this.unloader) {\n runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n onChunk(status, data) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n }\n else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n advanceBuffer(buffer) {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n }\n else {\n return null;\n }\n }\n isBufferTooLong(buffer) {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n\n;// ./src/core/http/state.ts\nvar State;\n(function (State) {\n State[State[\"CONNECTING\"] = 0] = \"CONNECTING\";\n State[State[\"OPEN\"] = 1] = \"OPEN\";\n State[State[\"CLOSED\"] = 3] = \"CLOSED\";\n})(State || (State = {}));\n/* harmony default export */ const state = (State);\n\n;// ./src/core/http/http_socket.ts\n\n\n\nvar autoIncrement = 1;\nclass HTTPSocket {\n constructor(hooks, url) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = state.CONNECTING;\n this.openStream();\n }\n send(payload) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n close(code, reason) {\n this.onClose(code, reason, true);\n }\n sendRaw(payload) {\n if (this.readyState === state.OPEN) {\n try {\n runtime.createSocketRequest('POST', getUniqueURL(getSendURL(this.location, this.session))).start(payload);\n return true;\n }\n catch (e) {\n return false;\n }\n }\n else {\n return false;\n }\n }\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = state.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean,\n });\n }\n }\n onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === state.OPEN) {\n this.onActivity();\n }\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n onOpen(options) {\n if (this.readyState === state.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = state.OPEN;\n if (this.onopen) {\n this.onopen();\n }\n }\n else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n onEvent(event) {\n if (this.readyState === state.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n openStream() {\n this.stream = runtime.createSocketRequest('POST', getUniqueURL(this.hooks.getReceiveURL(this.location, this.session)));\n this.stream.bind('chunk', (chunk) => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', (status) => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n try {\n this.stream.start();\n }\n catch (error) {\n util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\nfunction getLocation(url) {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2],\n };\n}\nfunction getSendURL(url, session) {\n return url.base + '/' + session + '/xhr_send';\n}\nfunction getUniqueURL(url) {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\nfunction replaceHost(url, hostname) {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\nfunction randomNumber(max) {\n return runtime.randomInt(max);\n}\nfunction randomString(length) {\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n return result.join('');\n}\n/* harmony default export */ const http_socket = (HTTPSocket);\n\n;// ./src/core/http/http_streaming_socket.ts\nvar http_streaming_socket_hooks = {\n getReceiveURL: function (url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function (socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function (socket) {\n socket.sendRaw('[]');\n },\n onFinished: function (socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n },\n};\n/* harmony default export */ const http_streaming_socket = (http_streaming_socket_hooks);\n\n;// ./src/core/http/http_polling_socket.ts\nvar http_polling_socket_hooks = {\n getReceiveURL: function (url, session) {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function () {\n },\n sendHeartbeat: function (socket) {\n socket.sendRaw('[]');\n },\n onFinished: function (socket, status) {\n if (status === 200) {\n socket.reconnect();\n }\n else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n },\n};\n/* harmony default export */ const http_polling_socket = (http_polling_socket_hooks);\n\n;// ./src/runtimes/isomorphic/http/http_xhr_request.ts\n\nvar http_xhr_request_hooks = {\n getRequest: function (socket) {\n var Constructor = runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function () {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function (xhr) {\n xhr.onreadystatechange = null;\n xhr.abort();\n },\n};\n/* harmony default export */ const http_xhr_request = (http_xhr_request_hooks);\n\n;// ./src/runtimes/isomorphic/http/http.ts\n\n\n\n\n\nvar HTTP = {\n createStreamingSocket(url) {\n return this.createSocket(http_streaming_socket, url);\n },\n createPollingSocket(url) {\n return this.createSocket(http_polling_socket, url);\n },\n createSocket(hooks, url) {\n return new http_socket(hooks, url);\n },\n createXHR(method, url) {\n return this.createRequest(http_xhr_request, method, url);\n },\n createRequest(hooks, method, url) {\n return new HTTPRequest(hooks, method, url);\n },\n};\n/* harmony default export */ const http_http = (HTTP);\n\n;// ./src/runtimes/web/http/http.ts\n\n\nhttp_http.createXDR = function (method, url) {\n return this.createRequest(http_xdomain_request, method, url);\n};\n/* harmony default export */ const web_http_http = (http_http);\n\n;// ./src/runtimes/web/runtime.ts\n\n\n\n\n\n\n\n\n\n\n\n\nvar Runtime = {\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers: ScriptReceivers,\n DependenciesReceivers: DependenciesReceivers,\n getDefaultStrategy: default_strategy,\n Transports: transports_transports,\n transportConnectionInitializer: transport_connection_initializer,\n HTTPFactory: web_http_http,\n TimelineTransport: jsonp_timeline,\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n setup(PusherClass) {\n window.Pusher = PusherClass;\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!window.JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n }\n else {\n initializeOnDocumentBody();\n }\n },\n getDocument() {\n return document;\n },\n getProtocol() {\n return this.getDocument().location.protocol;\n },\n getAuthorizers() {\n return { ajax: xhr_auth, jsonp: jsonp_auth };\n },\n onDocumentBody(callback) {\n if (document.body) {\n callback();\n }\n else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n createJSONPRequest(url, data) {\n return new JSONPRequest(url, data);\n },\n createScriptRequest(src) {\n return new ScriptRequest(src);\n },\n getLocalStorage() {\n try {\n return window.localStorage;\n }\n catch (e) {\n return undefined;\n }\n },\n createXHR() {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n }\n else {\n return this.createMicrosoftXHR();\n }\n },\n createXMLHttpRequest() {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n createMicrosoftXHR() {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n getNetwork() {\n return Network;\n },\n createWebSocket(url) {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n createSocketRequest(method, url) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n }\n else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n }\n else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n isXHRSupported() {\n var Constructor = this.getXHRAPI();\n return (Boolean(Constructor) && new Constructor().withCredentials !== undefined);\n },\n isXDRSupported(useTLS) {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (Boolean(window['XDomainRequest']) && documentProtocol === protocol);\n },\n addUnloadListener(listener) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n }\n else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n removeUnloadListener(listener) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n }\n else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n randomInt(max) {\n const random = function () {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n return random / Math.pow(2, 32);\n };\n return Math.floor(random() * max);\n },\n};\n/* harmony default export */ const runtime = (Runtime);\n\n;// ./src/core/timeline/level.ts\nvar TimelineLevel;\n(function (TimelineLevel) {\n TimelineLevel[TimelineLevel[\"ERROR\"] = 3] = \"ERROR\";\n TimelineLevel[TimelineLevel[\"INFO\"] = 6] = \"INFO\";\n TimelineLevel[TimelineLevel[\"DEBUG\"] = 7] = \"DEBUG\";\n})(TimelineLevel || (TimelineLevel = {}));\n/* harmony default export */ const level = (TimelineLevel);\n\n;// ./src/core/timeline/timeline.ts\n\n\n\nclass Timeline {\n constructor(key, session, options) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(extend({}, event, { timestamp: util.now() }));\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n error(event) {\n this.log(level.ERROR, event);\n }\n info(event) {\n this.log(level.INFO, event);\n }\n debug(event) {\n this.log(level.DEBUG, event);\n }\n isEmpty() {\n return this.events.length === 0;\n }\n send(sendfn, callback) {\n var data = extend({\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events,\n }, this.options.params);\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n return true;\n }\n generateUniqueID() {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n\n;// ./src/core/strategies/transport_strategy.ts\n\n\n\n\nclass TransportStrategy {\n constructor(name, priority, transport, options) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n isSupported() {\n return this.transport.isSupported({\n useTLS: this.options.useTLS,\n });\n }\n connect(minPriority, callback) {\n if (!this.isSupported()) {\n return failAttempt(new UnsupportedStrategy(), callback);\n }\n else if (this.priority < minPriority) {\n return failAttempt(new TransportPriorityTooLow(), callback);\n }\n var connected = false;\n var transport = this.transport.createConnection(this.name, this.priority, this.options.key, this.options);\n var handshake = null;\n var onInitialized = function () {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function () {\n handshake = factory.createHandshake(transport, function (result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function (error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function () {\n unbindListeners();\n var serializedTransport;\n serializedTransport = safeJSONStringify(transport);\n callback(new TransportClosed(serializedTransport));\n };\n var unbindListeners = function () {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n transport.initialize();\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n }\n else {\n transport.close();\n }\n },\n forceMinPriority: (p) => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n }\n else {\n transport.close();\n }\n }\n },\n };\n }\n}\nfunction failAttempt(error, callback) {\n util.defer(function () {\n callback(error);\n });\n return {\n abort: function () { },\n forceMinPriority: function () { },\n };\n}\n\n;// ./src/core/strategies/strategy_builder.ts\n\n\n\n\n\nconst { Transports: strategy_builder_Transports } = runtime;\nvar defineTransport = function (config, name, type, priority, options, manager) {\n var transportClass = strategy_builder_Transports[type];\n if (!transportClass) {\n throw new UnsupportedTransport(type);\n }\n var enabled = (!config.enabledTransports ||\n arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n arrayIndexOf(config.disabledTransports, name) === -1);\n var transport;\n if (enabled) {\n options = Object.assign({ ignoreNullOrigin: config.ignoreNullOrigin }, options);\n transport = new TransportStrategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options);\n }\n else {\n transport = strategy_builder_UnsupportedStrategy;\n }\n return transport;\n};\nvar strategy_builder_UnsupportedStrategy = {\n isSupported: function () {\n return false;\n },\n connect: function (_, callback) {\n var deferred = util.defer(function () {\n callback(new UnsupportedStrategy());\n });\n return {\n abort: function () {\n deferred.ensureAborted();\n },\n forceMinPriority: function () { },\n };\n },\n};\n\n;// ./src/core/options.ts\n\nfunction validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n logger.warn('The disableStats option is deprecated in favor of enableStats');\n }\n}\n\n;// ./src/core/auth/user_authenticator.ts\n\n\nconst composeChannelQuery = (params, authOptions) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n return query;\n};\nconst UserAuthenticator = (authOptions) => {\n if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n return (params, callback) => {\n const query = composeChannelQuery(params, authOptions);\n runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.UserAuthentication, callback);\n };\n};\n/* harmony default export */ const user_authenticator = (UserAuthenticator);\n\n;// ./src/core/auth/channel_authorizer.ts\n\n\nconst channel_authorizer_composeChannelQuery = (params, authOptions) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n return query;\n};\nconst ChannelAuthorizer = (authOptions) => {\n if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n return (params, callback) => {\n const query = channel_authorizer_composeChannelQuery(params, authOptions);\n runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.ChannelAuthorization, callback);\n };\n};\n/* harmony default export */ const channel_authorizer = (ChannelAuthorizer);\n\n;// ./src/core/auth/deprecated_channel_authorizer.ts\nconst ChannelAuthorizerProxy = (pusher, authOptions, channelAuthorizerGenerator) => {\n const deprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers,\n },\n };\n return (params, callback) => {\n const channel = pusher.channel(params.channelName);\n const channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions);\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n\n;// ./src/core/config.ts\n\n\n\n\n\nfunction getConfig(opts, pusher) {\n let config = {\n activityTimeout: opts.activityTimeout || defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || defaults.httpPath,\n httpPort: opts.httpPort || defaults.httpPort,\n httpsPort: opts.httpsPort || defaults.httpsPort,\n pongTimeout: opts.pongTimeout || defaults.pongTimeout,\n statsHost: opts.statsHost || defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || defaults.unavailableTimeout,\n wsPath: opts.wsPath || defaults.wsPath,\n wsPort: opts.wsPort || defaults.wsPort,\n wssPort: opts.wssPort || defaults.wssPort,\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher),\n };\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts)\n config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n return config;\n}\nfunction getHttpHost(opts) {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return defaults.httpHost;\n}\nfunction getWebsocketHost(opts) {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\nfunction getWebsocketHostFromCluster(cluster) {\n return `ws-${cluster}.pusher.com`;\n}\nfunction shouldUseTLS(opts) {\n if (runtime.getProtocol() === 'https:') {\n return true;\n }\n else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\nfunction getEnableStatsConfig(opts) {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\nconst hasCustomHandler = (auth) => {\n return 'customHandler' in auth && auth['customHandler'] != null;\n};\nfunction buildUserAuthenticator(opts) {\n const userAuthentication = Object.assign(Object.assign({}, defaults.userAuthentication), opts.userAuthentication);\n if (hasCustomHandler(userAuthentication)) {\n return userAuthentication['customHandler'];\n }\n return user_authenticator(userAuthentication);\n}\nfunction buildChannelAuth(opts, pusher) {\n let channelAuthorization;\n if ('channelAuthorization' in opts) {\n channelAuthorization = Object.assign(Object.assign({}, defaults.channelAuthorization), opts.channelAuthorization);\n }\n else {\n channelAuthorization = {\n transport: opts.authTransport || defaults.authTransport,\n endpoint: opts.authEndpoint || defaults.authEndpoint,\n };\n if ('auth' in opts) {\n if ('params' in opts.auth)\n channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts) {\n return {\n customHandler: ChannelAuthorizerProxy(pusher, channelAuthorization, opts.authorizer),\n };\n }\n }\n return channelAuthorization;\n}\nfunction buildChannelAuthorizer(opts, pusher) {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (hasCustomHandler(channelAuthorization)) {\n return channelAuthorization['customHandler'];\n }\n return channel_authorizer(channelAuthorization);\n}\n\n;// ./src/core/watchlist.ts\n\n\nclass WatchlistFacade extends Dispatcher {\n constructor(pusher) {\n super(function (eventName, data) {\n logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach((watchlistEvent) => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', (pusherEvent) => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n\n;// ./src/core/utils/flat_promise.ts\nfunction flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n/* harmony default export */ const flat_promise = (flatPromise);\n\n;// ./src/core/user.ts\n\n\n\n\n\nclass UserFacade extends Dispatcher {\n constructor(pusher) {\n super(function (eventName, data) {\n logger.debug('No callbacks on user for ' + eventName);\n });\n this.signin_requested = false;\n this.user_data = null;\n this.serverToUserChannel = null;\n this.signinDonePromise = null;\n this._signinDoneResolve = null;\n this._onAuthorize = (err, authData) => {\n if (err) {\n logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data,\n });\n };\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n this.watchlist = new WatchlistFacade(pusher);\n this.pusher.connection.bind('message', (event) => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n signin() {\n if (this.signin_requested) {\n return;\n }\n this.signin_requested = true;\n this._signin();\n }\n _signin() {\n if (!this.signin_requested) {\n return;\n }\n this._newSigninPromiseIfNeeded();\n if (this.pusher.connection.state !== 'connected') {\n return;\n }\n this.pusher.config.userAuthenticator({\n socketId: this.pusher.connection.socket_id,\n }, this._onAuthorize);\n }\n _onSigninSuccess(data) {\n try {\n this.user_data = JSON.parse(data.user_data);\n }\n catch (e) {\n logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n logger.error(`user_data doesn't contain an id. user_data: ${this.user_data}`);\n this._cleanup();\n return;\n }\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n _subscribeChannels() {\n const ensure_subscribed = (channel) => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n }\n else if (!channel.subscriptionPending &&\n this.pusher.connection.state === 'connected') {\n channel.subscribe();\n }\n };\n this.serverToUserChannel = new Channel(`#server-to-user-${this.user_data.id}`, this.pusher);\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0) {\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n if (this.signin_requested) {\n this._signinDoneResolve();\n }\n }\n _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n if (this.signinDonePromise && !this.signinDonePromise.done) {\n return;\n }\n const { promise, resolve, reject: _ } = flat_promise();\n promise.done = false;\n const setDone = () => {\n promise.done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n\n;// ./src/core/pusher.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Pusher {\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n static getClientFeatures() {\n return keys(filterObject({ ws: runtime.Transports.ws }, function (t) {\n return t.isSupported({});\n }));\n }\n constructor(app_key, options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.options = options;\n this.config = getConfig(this.options, this);\n this.channels = factory.createChannels();\n this.global_emitter = new Dispatcher();\n this.sessionID = runtime.randomInt(1000000000);\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: level.INFO,\n version: defaults.VERSION,\n });\n if (this.config.enableStats) {\n this.timelineSender = factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + runtime.TimelineTransport.name,\n });\n }\n var getStrategy = (options) => {\n return runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n this.connection = factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS),\n });\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n this.connection.bind('message', (event) => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', (err) => {\n logger.warn(err);\n });\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n this.user = new UserFacade(this);\n if (Pusher.isReady) {\n this.connect();\n }\n }\n switchCluster(options) {\n const { appKey, cluster } = options;\n this.key = appKey;\n this.options = Object.assign(Object.assign({}, this.options), { cluster });\n this.config = getConfig(this.options, this);\n this.connection.switchCluster(this.key);\n }\n channel(name) {\n return this.channels.find(name);\n }\n allChannels() {\n return this.channels.all();\n }\n connect() {\n this.connection.connect();\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function () {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n disconnect() {\n this.connection.disconnect();\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n bind(event_name, callback, context) {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n unbind(event_name, callback, context) {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n bind_global(callback) {\n this.global_emitter.bind_global(callback);\n return this;\n }\n unbind_global(callback) {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n unbind_all(callback) {\n this.global_emitter.unbind_all();\n return this;\n }\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n subscribe(channel_name) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n }\n else if (!channel.subscriptionPending &&\n this.connection.state === 'connected') {\n channel.subscribe();\n }\n return channel;\n }\n unsubscribe(channel_name) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n }\n else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n send_event(event_name, data, channel) {\n return this.connection.send_event(event_name, data, channel);\n }\n shouldUseTLS() {\n return this.config.useTLS;\n }\n signin() {\n this.user.signin();\n }\n}\nPusher.instances = [];\nPusher.isReady = false;\nPusher.logToConsole = false;\nPusher.Runtime = runtime;\nPusher.ScriptReceivers = runtime.ScriptReceivers;\nPusher.DependenciesReceivers = runtime.DependenciesReceivers;\nPusher.auth_callbacks = runtime.auth_callbacks;\n/* harmony default export */ const pusher = (Pusher);\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\nruntime.setup(Pusher);\n\n\n/***/ }\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module used 'module' so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(721);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=pusher.js.map","import Pusher, { Channel, PresenceChannel } from \"pusher-js\";\nimport { IWebsocketProvider } from \"./websocketProviderFactory\";\nimport axios from \"axios\";\n\nexport const NotebookChannel = \"notebook\";\nexport const NotificationChannel = \"user-notification\";\nexport const StatementResultChannel = \"report-result\";\nexport const ReconResultChannel = \"recon-result\";\nexport type PresenceMember = {\n id: string;\n info: {\n name: string;\n email: string;\n isEditing?: boolean;\n };\n};\n\nexport type PresenceMembers = {\n count: number;\n each: (callback: (member: PresenceMember) => void) => void;\n members: Record<string, PresenceMember[\"info\"]>;\n};\n\nclass PusherWebsocket implements IWebsocketProvider {\n private pusher: Pusher | null = null;\n public isConnected: boolean = false;\n public userId: string;\n private pusherKey?: string;\n private pusherCluster?: string;\n private authenticationEndpoint?: string;\n private notebookChannel: Channel | null = null;\n private notificationChannel: Channel | null = null;\n private reconResultChannel: Channel | null = null;\n private statementResultChannel: Channel | null = null;\n private otherChannels: { [key: string]: Channel | null } = {};\n\n constructor(\n userId: string,\n pusherKey: string,\n pusherCluster: string,\n authenticationEndpoint?: string,\n ) {\n this.userId = userId;\n this.pusherKey = pusherKey;\n this.pusherCluster = pusherCluster;\n this.authenticationEndpoint = authenticationEndpoint;\n }\n\n /**\n * Set user info for presence channels.\n * Note: For Pusher, presence info is set via the server-side auth endpoint.\n * This method is a no-op but provided for interface compatibility.\n */\n setPresenceInfo(_info: { name: string; email: string }): void {\n // Pusher handles presence info through the auth endpoint (/pusher/auth)\n // This is a no-op for interface compatibility\n }\n\n connect(): void {\n if (this.pusherKey) {\n // If authenticationEndpoint is provided, use custom authorizer\n if (this.authenticationEndpoint) {\n const pusherOptions: any = {\n cluster: this.pusherCluster,\n };\n const authEndpoint = this.authenticationEndpoint;\n // Use top-level authorizer for custom authentication endpoint\n pusherOptions.authorizer = (channel: any, options: any) => {\n return {\n authorize: async (\n socketId: string,\n callback: (err: any, authData: any) => void,\n ) => {\n const formData = new URLSearchParams();\n formData.append(\"socket_id\", socketId);\n formData.append(\"channel_name\", channel.name);\n\n try {\n const response = await axios.post(authEndpoint, formData, {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n withCredentials: true,\n });\n callback(null, response.data);\n } catch (error) {\n callback(error, null);\n }\n },\n };\n };\n this.pusher = new Pusher(this.pusherKey, pusherOptions);\n } else {\n // Use default authentication endpoint (normal/old behavior)\n this.pusher = new Pusher(this.pusherKey, {\n cluster: this.pusherCluster,\n userAuthentication: { endpoint: \"/pusher/auth\", transport: \"ajax\" },\n });\n }\n\n // Subscribe to default channels\n this.notebookChannel = this.pusher.subscribe(\n \"private-notebook-\" + this.userId,\n );\n this.notificationChannel = this.pusher.subscribe(\n `user-notification-${this.userId}`,\n );\n this.reconResultChannel = this.pusher.subscribe(\n `private-recon-result-${this.userId}`,\n );\n this.statementResultChannel = this.pusher.subscribe(\n \"private-report-result-\" + this.userId,\n );\n\n this.pusher.connection.bind(\"error\", (err: any) => {\n console.error(\"Pusher Error!\", err);\n this.isConnected = false;\n });\n this.isConnected = true;\n }\n }\n\n bind(channel: string, event: string, callback: (data: any) => void): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.bind(event, callback);\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.bind(event, callback);\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.bind(event, callback);\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.bind(event, callback);\n } else {\n if (!this.otherChannels[channel]) {\n this.otherChannels[channel] = this.pusher?.subscribe(channel);\n }\n this.otherChannels[channel]?.bind(event, callback);\n }\n }\n\n bindGlobal(channel: string, callback: (data: any) => void): void {\n if (!this.otherChannels[channel]) {\n this.otherChannels[channel] = this.pusher?.subscribe(channel);\n }\n this.otherChannels[channel]?.bind_global(callback);\n }\n\n unbind(channel: string, event: string): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.unbind(event);\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.unbind(event);\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.unbind(event);\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.unbind(event);\n } else {\n this.otherChannels[channel]?.unbind(event);\n }\n }\n\n unbindAll(channel: string): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.unbind_all();\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.unbind_all();\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.unbind_all();\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.unbind_all();\n } else {\n this.otherChannels[channel]?.unbind_all();\n }\n }\n\n trigger(channel: string, event: string, data: any): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.trigger(event, data);\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.trigger(event, data);\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.trigger(event, data);\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.trigger(event, data);\n } else {\n this.otherChannels[channel]?.trigger(event, data);\n }\n }\n\n disconnect(): void {\n if (this.pusher) {\n this.notebookChannel?.unsubscribe();\n this.notificationChannel?.unsubscribe();\n this.reconResultChannel?.unsubscribe();\n this.statementResultChannel?.unsubscribe();\n\n for (const channel in this.otherChannels) {\n this.otherChannels[channel]?.unsubscribe();\n }\n\n this.pusher.disconnect();\n this.pusher = null;\n this.notebookChannel = null;\n this.notificationChannel = null;\n this.reconResultChannel = null;\n this.statementResultChannel = null;\n }\n this.isConnected = false;\n }\n /**\n * Get members of a presence channel.\n * Returns PresenceMembers synchronously for Pusher.\n */\n getPresenceChannelMembers(channel: string): PresenceMembers {\n if (!channel.startsWith(\"presence-\")) {\n throw new Error(\"Channel is not a presence channel\");\n }\n if (!this.pusher) {\n throw new Error(\"Pusher is not connected\");\n }\n if (!this.otherChannels[channel]) {\n this.otherChannels[channel] = this.pusher.subscribe(channel);\n }\n const presenceChannel = this.otherChannels[channel] as PresenceChannel;\n if (!presenceChannel) {\n throw new Error(\"Failed to subscribe to presence channel\");\n }\n if (!presenceChannel.members) {\n throw new Error(\n \"Channel is not a presence channel or subscription not ready\",\n );\n }\n\n // Convert Pusher members to PresenceMembers format\n const membersMap: Record<string, PresenceMember[\"info\"]> = {};\n const membersList: PresenceMember[] = [];\n\n presenceChannel.members.each((member: { id: string; info: any }) => {\n membersMap[member.id] = member.info;\n membersList.push({ id: member.id, info: member.info });\n });\n\n return {\n count: presenceChannel.members.count,\n members: membersMap,\n each: (callback: (member: PresenceMember) => void) => {\n membersList.forEach(callback);\n },\n };\n }\n}\n\nexport default PusherWebsocket;\n","import CentrifugoWebsocket from \"./centrifugoWebsocket\";\nimport PusherWebsocket from \"./pusherWebsocket\";\n\nexport interface IWebsocketProvider {\n connect: () => void;\n bind: (channel: string, event: string, callback: (data: any) => void) => void;\n bindGlobal: (event: string, callback: (data: any) => void) => void;\n unbind: (channel: string, event: string) => void;\n unbindAll: (channel: string) => void;\n disconnect: () => void;\n}\n\nexport class WebsocketContextFactory {\n static create(\n mechanism: \"pusher\" | \"centrifugo\",\n args: {\n connectionUrl?: string;\n token?: string;\n userId: string;\n pusherKey?: string;\n pusherCluster?: string;\n authenticationEndpoint?: string;\n },\n ): IWebsocketProvider {\n let websocketProvider: IWebsocketProvider | undefined;\n\n if (mechanism === \"centrifugo\") {\n if (!args.connectionUrl) {\n throw new Error(\"Connection url is required\");\n }\n if (!args.token) {\n throw new Error(\"Token is required\");\n }\n websocketProvider = new CentrifugoWebsocket(\n args.connectionUrl,\n args.token,\n args.userId,\n );\n } else if (mechanism === \"pusher\") {\n if (!args.pusherKey) {\n throw new Error(\"Pusher key is required\");\n }\n if (!args.pusherCluster) {\n throw new Error(\"Pusher cluster is required\");\n }\n websocketProvider = new PusherWebsocket(\n args.userId,\n args.pusherKey,\n args.pusherCluster,\n args.authenticationEndpoint,\n );\n } else {\n throw new Error(\n `Unsupported mechanism: ${mechanism}. Supported mechanisms are: pusher, centrifugo`,\n );\n }\n\n if (!websocketProvider) {\n throw new Error(\n `Failed to create websocket provider for mechanism: ${mechanism}`,\n );\n }\n\n websocketProvider.connect();\n return websocketProvider;\n }\n}\n","import { Definition, Inputs } from \"$models/ui-models/definitionModel\";\nimport { CancelTokenSource } from \"axios\";\nimport { apiClient } from \"../client\";\n\nexport const getDescription = async (props: {\n inputs: Inputs;\n definition: Definition;\n variable: string;\n source?: CancelTokenSource;\n}) => {\n const { definition, variable, inputs, source } = props;\n\n if (!definition) {\n throw {\n message: \"Definition is required for description lookup\",\n status: 400,\n };\n }\n if (!variable) {\n throw {\n message: \"Variable name is required for description lookup\",\n status: 400,\n };\n }\n if (!inputs) {\n throw {\n message: \"Inputs are required for description lookup\",\n status: 400,\n };\n }\n\n try {\n const response = await apiClient.post(\n \"/definition/describe\",\n { definition, variable, inputs },\n { cancelToken: source?.token },\n );\n return response.data;\n } catch (error: any) {\n throw {\n message:\n error.response?.data?.message || \"Failed to fetch variable description\",\n status: error.response?.status || 500,\n data: error.response?.data,\n };\n }\n};\n","import _ from \"lodash\";\nimport type { Workbook } from \"$models/gen/Api\";\nimport type {\n Definition,\n DescriptionResult,\n} from \"$models/ui-models/definitionModel\";\nimport type {\n CommonFilter,\n PromotedFiltersType,\n} from \"$models/ui-models/filterModel\";\nimport { FilterRule } from \"$models/ui-models/filterModel\";\nimport type {\n ColumnSetting,\n CustomModel,\n FilterColumnsBy,\n Sheet,\n} from \"$models/ui-models/workbookModel\";\nimport { getDescription } from \"../../api/definition/getDescription\";\nimport {\n StatementCommonFiltersType,\n StatementPromotedFiltersType,\n} from \"../../types/statement\";\n\nexport const defaultFilterRule: FilterRule = {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n};\n\nexport const createFilterRuleFromValues = (\n column: string,\n values: unknown[],\n): FilterRule => {\n return {\n rule_type: \"and_cond\",\n is_not: false,\n is_case_sensitive: false,\n rules: [\n {\n rule_type: \"cond\",\n col: column,\n operator: \"in_op\",\n value: values,\n is_not: false,\n },\n ],\n };\n};\n\nconst getSheetById = (\n sheets: Sheet<any>[],\n sheetId: string,\n): Sheet<any> | undefined => sheets.find((s) => s.id === sheetId);\n\nexport const convertToPromotedFilter = (\n statementFilter: StatementPromotedFiltersType,\n statement: Workbook,\n): PromotedFiltersType | null => {\n try {\n const sheet = getSheetById(statement.sheets || [], statementFilter.sheetId);\n if (!sheet) {\n console.warn(\n `Sheet ${statementFilter.sheetId} not found for promoted filter`,\n );\n return null;\n }\n\n const metadata = sheet.customModel?.metadata;\n const definitionModel = sheet.definitionModel;\n\n if (!metadata || !definitionModel) {\n console.warn(`Metadata or definition not found for sheet ${sheet.id}`);\n return null;\n }\n\n const columnSettings = (metadata.columnSettings as ColumnSetting[]) || [];\n\n const sheetDetails = {\n sheetId: statementFilter.sheetId,\n definitionModel,\n parentTableVariable: metadata.parentTableVariable || \"\",\n inputs: metadata.inputs || {},\n };\n\n const rule = createFilterRuleFromValues(\n statementFilter.column,\n statementFilter.values,\n );\n\n const appliedOnBlocks = statementFilter.lineIds.map((lineId) => {\n const lineSheet = getSheetById(statement.sheets || [], lineId);\n return {\n blockId: lineId,\n blockName: lineSheet?.name || lineId,\n applied: true,\n };\n });\n\n const columnSetting = columnSettings.find(\n (c) => c.field === statementFilter.column,\n );\n\n const promotedFilter: PromotedFiltersType = {\n name: statementFilter.name,\n rule,\n filterColumnsBy: metadata.filterColumnsBy || ({} as FilterColumnsBy),\n sheetDetails,\n appliedOnBlocks,\n datasetId: statementFilter.datasetId,\n datasetName: statementFilter.datasetName || \"\",\n blockColumnSettings: columnSettings,\n blockId: statementFilter.sheetId,\n uniqueValueCount: columnSetting?.unique_count,\n id: statementFilter.column,\n };\n\n return promotedFilter;\n } catch (error) {\n console.error(\"Error converting to promoted filter:\", error);\n return null;\n }\n};\n\nexport const convertToCommonFilter = async (\n statementFilter: StatementCommonFiltersType,\n statement: Workbook,\n): Promise<CommonFilter | null> => {\n try {\n const sheet = getSheetById(statement.sheets || [], statementFilter.sheetId);\n if (!sheet) {\n console.warn(\n `Sheet ${statementFilter.sheetId} not found for common filter`,\n );\n return null;\n }\n\n const metadata = sheet.customModel?.metadata;\n const definitionModel = sheet.definitionModel;\n\n if (!metadata || !definitionModel) {\n console.warn(`Metadata or definition not found for sheet ${sheet.id}`);\n return null;\n }\n\n const columnSettings = (metadata.columnSettings as ColumnSetting[]) || [];\n const sheetDetails = {\n sheetId: statementFilter.sheetId,\n definitionModel,\n parentTableVariable: metadata.parentTableVariable || \"\",\n inputs: metadata.inputs || {},\n };\n\n const rule = createFilterRuleFromValues(\n statementFilter.column,\n statementFilter.values,\n );\n\n const appliedOnBlocks = statementFilter.linesToApply.map((lineMapping) => {\n const lineSheet = getSheetById(\n statement.sheets || [],\n lineMapping.lineId,\n );\n const lineColumnSettings = lineSheet?.customModel?.metadata\n ?.columnSettings as ColumnSetting[];\n\n const columnSelectOptions = _.map(lineColumnSettings, (cs) => ({\n label: cs.headerName,\n value: cs.field,\n option: cs,\n }));\n\n return {\n blockId: lineMapping.lineId,\n blockName: lineSheet?.name || lineMapping.lineId,\n applied: true,\n column: lineMapping.column,\n columnSettings: columnSelectOptions,\n };\n });\n\n // Create a barebones dataset definition model\n const datasetDefinitionModel = {\n imports: [\n {\n loc: statementFilter.datasetId,\n to: statementFilter.datasetName,\n import_type: \"dataset\",\n },\n ],\n loads: [],\n variables: [],\n metrics: [],\n permissions: [],\n exports: [],\n inputs: {\n date_range: {},\n },\n };\n // Get column description from API using the barebones definition\n let columnDescResult: DescriptionResult | undefined;\n try {\n const response = await getDescription({\n inputs: {},\n definition: datasetDefinitionModel as Definition,\n variable: statementFilter.datasetName,\n });\n const descriptionResults = response.data as DescriptionResult[];\n columnDescResult = _.find(\n descriptionResults,\n (desc) => desc.name === statementFilter.column,\n );\n } catch (error) {\n console.warn(\n `Failed to get description for dataset ${statementFilter.datasetName}:`,\n error,\n );\n // Fallback to minimal description if API call fails\n columnDescResult = {\n name: statementFilter.column,\n data_type: \"string\",\n is_currency_column: false,\n datasetId: statementFilter.datasetId,\n datasetName: statementFilter.datasetName,\n } as DescriptionResult;\n }\n\n const filterColumnsBy = metadata.filterColumnsBy\n ? metadata.filterColumnsBy\n : ({ [statementFilter.column]: \"value\" } as FilterColumnsBy);\n const commonFilter: CommonFilter = {\n name: statementFilter.name,\n column: columnDescResult,\n rule,\n sheetDetails,\n filterColumnsBy,\n appliedOnBlocks,\n datasetName: statementFilter.datasetName || \"\",\n datasetId: statementFilter.datasetId,\n columnSettings,\n uniqueValueCount: columnDescResult?.[\"unique_count\"],\n id: statementFilter.column,\n };\n\n return commonFilter;\n } catch (error) {\n console.error(\"Error converting to common filter:\", error);\n return null;\n }\n};\n\nexport const convertStatementFiltersToFullTypes = async (\n promotedFilters: StatementPromotedFiltersType[],\n commonFilters: StatementCommonFiltersType[],\n statement: Workbook,\n): Promise<{\n promotedFilters: PromotedFiltersType[];\n commonFilters: CommonFilter[];\n}> => {\n const convertedPromoted = promotedFilters\n .map((f) => convertToPromotedFilter(f, statement))\n .filter((f) => f !== null) as PromotedFiltersType[];\n\n const convertedCommonPromises = commonFilters.map((f) =>\n convertToCommonFilter(f, statement),\n );\n const convertedCommon = (await Promise.all(convertedCommonPromises)).filter(\n (f) => f !== null,\n ) as CommonFilter[];\n\n return {\n promotedFilters: convertedPromoted,\n commonFilters: convertedCommon,\n };\n};\n","/**\n * Utility functions for converting statement filters into runInputs\n */\n\nimport _ from \"lodash\";\nimport {\n LineFilterOverride,\n ReportCustomModel,\n} from \"$models/ui-models/reportModel\";\nimport type { Sheet } from \"$models/ui-models/workbookModel\";\nimport {\n StatementCommonFiltersType,\n StatementPromotedFiltersType,\n StatementRunInputs,\n} from \"../../types/statement\";\nimport { createFilterRuleFromValues } from \"./filterConverters\";\n\n/**\n * Helper function to add a filter to runInputs, accumulating multiple filters per line\n */\nconst addFilterToRunInputs = (\n runInputs: StatementRunInputs,\n lineValue: string,\n filter: LineFilterOverride,\n): void => {\n if (!runInputs[lineValue]) {\n // First filter for this line\n runInputs[lineValue] = filter;\n } else if (Array.isArray(runInputs[lineValue])) {\n // Already an array, push the new filter\n runInputs[lineValue].push(filter);\n } else {\n // Convert single filter to array and add the new one\n runInputs[lineValue] = [runInputs[lineValue], filter];\n }\n};\n\n/**\n * Converts promoted and common filters into runInputs format for statement views\n */\nexport const convertFiltersToRunInputs = (\n promotedFilters: StatementPromotedFiltersType[],\n commonFilters: StatementCommonFiltersType[],\n statementSheet: Sheet<ReportCustomModel>,\n): StatementRunInputs => {\n const runInputs: StatementRunInputs = {};\n\n const allLines =\n statementSheet.customModel?.sections?.flatMap((section) => section.lines) ??\n [];\n\n // Process promoted filters\n _.forEach(promotedFilters, (filter) => {\n // Apply to each line specified in lineIds\n _.forEach(filter.lineIds, (lineId) => {\n const lineValue = _.find(allLines, (l) => l.id === lineId)?.value;\n if (!lineValue) {\n console.warn(`Line with id ${lineId} not found in statement sheet`);\n return;\n }\n const lineFilter: LineFilterOverride = {\n dataset_id: filter.datasetId,\n filter_input_key: \"rule_pivot\",\n filter_value: createFilterRuleFromValues(filter.column, filter.values),\n };\n addFilterToRunInputs(runInputs, lineValue, lineFilter);\n });\n });\n\n // Process common filters\n _.forEach(commonFilters, (filter) => {\n // Apply to each line with its specific column mapping\n _.forEach(filter.linesToApply, (lineMapping) => {\n const lineValue = _.find(\n allLines,\n (l) => l.id === lineMapping.lineId,\n )?.value;\n if (!lineValue) {\n console.warn(\n `Line with id ${lineMapping.lineId} not found in statement sheet`,\n );\n return;\n }\n const columnName = lineMapping.column;\n const lineFilter: LineFilterOverride = {\n dataset_id: filter.datasetId,\n filter_input_key: \"rule_pivot\",\n filter_value: createFilterRuleFromValues(columnName, filter.values),\n };\n addFilterToRunInputs(runInputs, lineValue, lineFilter);\n });\n });\n\n return runInputs;\n};\n\n/**\n * Separates columnFilters into promoted and common filters\n */\nexport const separateColumnFilters = (\n columnFilters: (StatementPromotedFiltersType | StatementCommonFiltersType)[],\n): {\n promotedFilters: StatementPromotedFiltersType[];\n commonFilters: StatementCommonFiltersType[];\n} => {\n const promotedFilters: StatementPromotedFiltersType[] = [];\n const commonFilters: StatementCommonFiltersType[] = [];\n\n _.forEach(columnFilters, (filter) => {\n if (filter.filterType === \"promoted\") {\n promotedFilters.push(filter as StatementPromotedFiltersType);\n } else if (filter.filterType === \"common\") {\n commonFilters.push(filter as StatementCommonFiltersType);\n }\n });\n\n return { promotedFilters, commonFilters };\n};\n","import axios, { AxiosRequestConfig } from \"axios\";\nimport { getFileUrlByFileId, GetFileUrlRequest } from \"../../api/file\";\n\nexport async function downloadFile(\n loc: string,\n contentType: string,\n): Promise<object | null> {\n if (!loc) return null;\n\n const requestData: GetFileUrlRequest = {\n key: loc,\n contentType: contentType,\n method: \"GET\" as unknown as \"GET\" | \"PUT\" | \"POST\", // Type assertion to match the expected type\n };\n\n try {\n const response = await getFileUrlByFileId(requestData);\n // Get the PresignedUrl\n const presignedUrl = response.url;\n\n const config: AxiosRequestConfig = {\n method: \"GET\",\n url: presignedUrl,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n };\n const axiosInstance = axios.create();\n const result = await axiosInstance(config);\n\n const fileRead = result.data;\n return fileRead;\n } catch (error) {\n console.error(\"Error downloading file:\", error);\n throw error;\n }\n}\n","import _ from \"lodash\";\nimport type { Workbook } from \"$models/gen/Api\";\nimport type { Definition } from \"$models/ui-models/definitionModel\";\nimport {\n ReportCustomModel,\n StatementPlan,\n} from \"$models/ui-models/reportModel\";\nimport type {\n CustomModel,\n MetricCustomModel,\n Sheet,\n WorkbookModel,\n} from \"$models/ui-models/workbookModel\";\nimport { downloadFile } from \"../file/downloadFile\";\n\n/**\n * Hydrates a statement workbook by fetching and assigning definition and custom models\n * to all sheets (STATEMENT_SHEET, PIVOT, PLAN)\n */\nexport const hydrateStatement = async (\n workbook: Workbook,\n): Promise<Partial<WorkbookModel>> => {\n const workbookModel: Partial<WorkbookModel> = {\n ...workbook,\n sheets: [...workbook.sheets],\n };\n const sheetsGroupedByType = _.groupBy(workbookModel.sheets, \"type\");\n\n const statementSheet = sheetsGroupedByType.STATEMENT_SHEET?.[0];\n if (!statementSheet) {\n throw new Error(\"No STATEMENT_SHEET found in workbook\");\n }\n\n if (!statementSheet.externalDataId) {\n throw new Error(\"STATEMENT_SHEET is missing required externalDataId\");\n }\n if (!statementSheet.modelId) {\n throw new Error(\"STATEMENT_SHEET is missing required modelId\");\n }\n\n const statementSheetDefinitionModelId = statementSheet.externalDataId;\n const statementSheetCustomModelId = statementSheet.modelId;\n\n const modelResultsPromises = [\n downloadFile(statementSheetDefinitionModelId, \"application/json\"),\n downloadFile(statementSheetCustomModelId, \"application/json\"),\n ];\n\n // Handle PIVOT sheets\n if (!_.isEmpty(sheetsGroupedByType.PIVOT)) {\n const commonDefinitionModelId = sheetsGroupedByType.PIVOT[0].externalDataId;\n const commonCustomModelId = sheetsGroupedByType.PIVOT[0].modelId;\n modelResultsPromises.push(\n downloadFile(commonDefinitionModelId, \"application/json\"),\n );\n modelResultsPromises.push(\n downloadFile(commonCustomModelId, \"application/json\"),\n );\n } else {\n modelResultsPromises.push(Promise.resolve({}), Promise.resolve({}));\n }\n\n // Handle PLAN sheets\n if (!_.isEmpty(sheetsGroupedByType.PLAN)) {\n const commonPlanDefinitionModelId =\n sheetsGroupedByType.PLAN[0].externalDataId;\n const commonPlanCustomModelId = sheetsGroupedByType.PLAN[0].modelId;\n modelResultsPromises.push(\n downloadFile(commonPlanDefinitionModelId, \"application/json\"),\n );\n modelResultsPromises.push(\n downloadFile(commonPlanCustomModelId, \"application/json\"),\n );\n } else {\n modelResultsPromises.push(Promise.resolve({}), Promise.resolve({}));\n }\n\n const results = await Promise.allSettled(modelResultsPromises);\n\n // Prepare correctly typed holders; default to empty objects for optional downloads\n let commonDefinitionModel: Record<string, Definition> = {};\n let commonCustomModel: Record<string, CustomModel> = {};\n let planCommonDefinitionModel: Record<string, StatementPlan> = {};\n let planCommonCustomModel: Record<string, CustomModel> = {};\n\n // 0,1 are mandatory (STATEMENT) — fail fast on rejection\n const [\n resStatementDef,\n resStatementCustom,\n resPivotDef,\n resPivotCustom,\n resPlanDef,\n resPlanCustom,\n ] = results;\n\n if (resStatementDef.status !== \"fulfilled\") {\n throw new Error(\n `Failed to download STATEMENT definition model: ${\n (resStatementDef as PromiseRejectedResult).reason ?? \"unknown error\"\n }`,\n );\n }\n if (resStatementCustom.status !== \"fulfilled\") {\n throw new Error(\n `Failed to download STATEMENT custom model: ${\n (resStatementCustom as PromiseRejectedResult).reason ?? \"unknown error\"\n }`,\n );\n }\n\n // Assign statement models directly from fulfilled results\n statementSheet.definitionModel = resStatementDef.value as Definition;\n statementSheet.customModel =\n resStatementCustom.value as unknown as CustomModel;\n\n // Optional downloads (PIVOT and PLAN) — use sensible defaults on rejection\n if (resPivotDef && resPivotDef.status === \"fulfilled\") {\n commonDefinitionModel = resPivotDef.value as Record<string, Definition>;\n }\n if (resPivotCustom && resPivotCustom.status === \"fulfilled\") {\n commonCustomModel = resPivotCustom.value as Record<string, CustomModel>;\n }\n if (resPlanDef && resPlanDef.status === \"fulfilled\") {\n planCommonDefinitionModel = resPlanDef.value as Record<\n string,\n StatementPlan\n >;\n }\n if (resPlanCustom && resPlanCustom.status === \"fulfilled\") {\n planCommonCustomModel = resPlanCustom.value as Record<string, CustomModel>;\n }\n\n // Assign models to PIVOT sheets\n _.forEach(sheetsGroupedByType.PIVOT, (sheet: Sheet<MetricCustomModel>) => {\n sheet.customModel = commonCustomModel[sheet.id] as any;\n sheet.definitionModel = commonDefinitionModel[sheet.id] as any;\n });\n\n // Assign models to PLAN sheets\n _.forEach(sheetsGroupedByType.PLAN, (sheet: Sheet<ReportCustomModel>) => {\n sheet.customModel = planCommonCustomModel[sheet.id] as any;\n sheet.definitionModel = planCommonDefinitionModel[sheet.id] as any;\n });\n\n return workbookModel;\n};\n","/**\n * Fancy ID generator that creates 20-character string identifiers with the following properties:\n *\n * 1. They're based on timestamp so that they sort *after* any existing ids.\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't collide with other clients' IDs.\n * 3. They sort *lexicographically* (so the timestamp is converted to characters that will sort properly).\n * 4. They're monotonically increasing. Even if you generate more than one in the same timestamp, the\n * latter ones will sort after the former ones. We do this by using the previous random bits\n * but \"incrementing\" them by 1 (only in the case of a timestamp collision).\n */\nexport const generatePushID: () => string = (function () {\n // Modeled after base64 web-safe chars, but only using uppercase letters and numbers, ordered by ASCII.\n const PUSH_CHARS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n const pushCharLength = PUSH_CHARS.length;\n\n // Timestamp of last push, used to prevent local collisions if you push twice in one ms.\n let lastPushTime = 0;\n\n // We generate 72-bits of randomness which get turned into 12 characters and appended to the\n // timestamp to prevent collisions with other clients. We store the last characters we\n // generated because in the event of a collision, we'll use those same characters except\n // \"incremented\" by one.\n const lastRandChars = [];\n\n return function () {\n let now = new Date().getTime();\n const duplicateTime = now === lastPushTime;\n lastPushTime = now;\n\n const timeStampChars = new Array(8);\n for (let i = 7; i >= 0; i--) {\n timeStampChars[i] = PUSH_CHARS.charAt(now % pushCharLength);\n // NOTE: Can't use << here because javascript will convert to int and lose the upper bits.\n now = Math.floor(now / pushCharLength);\n }\n if (now !== 0)\n throw new Error(\"We should have converted the entire timestamp.\");\n\n let id = timeStampChars.join(\"\");\n let i;\n\n if (!duplicateTime) {\n for (i = 0; i < 12; i++) {\n lastRandChars[i] = Math.floor(Math.random() * pushCharLength);\n }\n } else {\n // If the timestamp hasn't changed since last push, use the same random number, except incremented by 1.\n for (i = 11; i >= 0 && lastRandChars[i] === pushCharLength - 1; i--) {\n lastRandChars[i] = 0;\n }\n lastRandChars[i]++;\n }\n for (i = 0; i < 12; i++) {\n id += PUSH_CHARS.charAt(lastRandChars[i]);\n }\n if (id.length != 20) throw new Error(\"Length should be 20.\");\n\n return id;\n };\n})();\n","export const getUniqueDuplicateName = (\n name: string,\n collectionToCheckIn: string[],\n suffix: string = \"Copy\",\n concatChar: string = \"_\",\n) => {\n // Ensure a valid name is provided to prevent unexpected behavior\n if (!name) {\n throw new Error(\"Invalid name provided to getUniqueDuplicateName\");\n }\n\n let newName = `${name}${concatChar}${suffix}`.trim();\n for (let i = 1; collectionToCheckIn.includes(newName); i++) {\n newName = `${name}${concatChar}${suffix}${concatChar}${i}`;\n }\n return newName.trim();\n};\n","import { Sheet } from \"$models/ui-models/workbookModel\";\nimport { downloadFile } from \"../file/downloadFile\";\n\nexport const hydrateWorksheet = async (sheet: Sheet): Promise<Sheet | null> => {\n try {\n if (!sheet) return sheet;\n\n const isHydrated = sheet.definitionModel && sheet.customModel;\n\n if (isHydrated) {\n return sheet;\n }\n\n const definitionModelId = sheet.externalDataId;\n const customModelId = sheet.modelId;\n\n let definitionModel = {} as Record<string, unknown>;\n let customModel = {} as Record<string, unknown>;\n const sheetId = sheet.id as string;\n if (definitionModelId && customModelId) {\n definitionModel = (await downloadFile(\n definitionModelId,\n \"application/json\",\n )) as Record<string, unknown>;\n customModel = (await downloadFile(\n customModelId,\n \"application/json\",\n )) as Record<string, unknown>;\n }\n if (!definitionModel || !definitionModel[sheetId]) {\n return sheet;\n }\n sheet.definitionModel = definitionModel[sheetId];\n sheet.customModel = customModel[sheetId];\n return sheet;\n } catch (error) {\n console.error(\"Error hydrating portal page:\", error);\n throw error;\n }\n};\n","import _ from \"lodash\";\nimport { getWorksheets } from \"../worksheet\";\nimport { getMetricDefinition } from \"../../utils\";\nimport {\n defaultCurrencyModel,\n defaultDashboardDateRangeModel,\n getSelectedMetricsParentIds,\n} from \"../../utils/metric/getMetricDefinition\";\nimport { hydrateWorksheet } from \"../../utils/metric/hydrateWorksheet\";\nimport { getUpdatedDefinitionCustomModel } from \"../../utils/metric/analysisMethods\";\nimport { Definition, Inputs, TimeBin } from \"$models/ui-models/definitionModel\";\nimport {\n GridColumnState,\n MetricMetadataType,\n PivotCustomModel,\n} from \"$models/ui-models/workbookModel\";\nimport { runPublishedDefinition } from \"../definition\";\n\nexport const getData = async (\n metricSheetId: string,\n options?: {\n groupKeys?: string[];\n isKPI?: boolean;\n plotAsTrend?: boolean;\n stringValue?: boolean;\n },\n) => {\n const worksheets = await getWorksheets([metricSheetId]);\n if (_.isEmpty(worksheets)) return {};\n\n const selectedWorksheet = worksheets[0];\n const hydratedSheet = await hydrateWorksheet(selectedWorksheet);\n if (!hydratedSheet) return {};\n\n const selectedMetricsParentIds = getSelectedMetricsParentIds([\n { sheet: selectedWorksheet },\n ]);\n const parentWorksheets = await getWorksheets(selectedMetricsParentIds);\n const parentSheet = _.find(\n parentWorksheets,\n (ps) =>\n ps.id ===\n (hydratedSheet?.customFields.parentTableId as unknown as string),\n );\n let definitionModel;\n let customModel;\n\n if (parentSheet) {\n const hydratedParentSheet = await hydrateWorksheet(parentSheet);\n if (hydratedParentSheet?.definitionModel) {\n const {\n definitionModel: parentDefinitionModel,\n customModel: parentCustomModel,\n } = getUpdatedDefinitionCustomModel({\n metricDefinitionModel: hydratedSheet.definitionModel as Definition,\n parentDefinitionModel:\n hydratedParentSheet?.definitionModel as Definition,\n parentCustomModel: hydratedParentSheet?.customModel as PivotCustomModel,\n metricCustomModel: hydratedSheet.customModel as PivotCustomModel,\n });\n definitionModel = parentDefinitionModel;\n customModel = parentCustomModel;\n }\n } else {\n definitionModel = hydratedSheet.definitionModel as Definition;\n customModel = hydratedSheet.customModel as PivotCustomModel;\n }\n\n const cModel = customModel;\n const dModel = definitionModel as Definition;\n const gridColumnState: GridColumnState =\n cModel?.gridColumnState as GridColumnState;\n\n const { variable, parentTableVariable, inputs } = cModel as {\n variable: string;\n parentTableVariable: string;\n inputs: Inputs;\n };\n\n const aliases = dModel?.aliases?.[parentTableVariable];\n\n let timeBin = \"\";\n if (options?.isKPI) {\n timeBin = (\n options?.plotAsTrend\n ? !_.isEmpty(cModel?.timeBin)\n ? cModel?.timeBin\n : \"per_month\"\n : \"\"\n ) as TimeBin;\n } else {\n timeBin = cModel?.timeBin ?? \"\";\n }\n\n const valueCols = _.map(gridColumnState?.valueCols, (vc) => ({\n ...vc,\n hide: false,\n }));\n\n const columnSettings = _.map(cModel?.parentTableColumnSettings, (cs) => ({\n ...cs,\n hide: false,\n }));\n const metadata: MetricMetadataType = {\n variable,\n parentTableVariable,\n inputs,\n datasetId: cModel?.datasetId ?? \"\",\n datasetName: cModel?.datasetName ?? \"\",\n columnSettings: columnSettings ?? [],\n filterColumnsBy: cModel?.filterColumnsBy ?? {},\n filterModel: hydratedSheet?.customModel?.gridColumnState?.filterModel ?? {},\n valueCols: valueCols ?? [],\n rowGroupCols: gridColumnState?.rowGroupCols ?? [],\n pivotCols: gridColumnState?.pivotCols ?? [],\n dateColumn: cModel?.dateColumn,\n timeBin: timeBin as TimeBin,\n dateRange: cModel?.inputs?.date_range,\n aliases,\n lastModifiedDate: hydratedSheet?.lastModifiedDate,\n hierarchy: cModel?.hierarchy,\n description: \"\",\n isKPI: options?.isKPI ?? false,\n currency: cModel?.currency,\n sortOptions: cModel?.sortOptions,\n limitOptions: cModel?.limitOptions,\n stringValue: options?.stringValue ?? false,\n };\n\n const { inputs: definitionInputs, describe } = getMetricDefinition({\n sheetId: hydratedSheet.id as string,\n metadata,\n groupKeys: options?.groupKeys ?? [],\n lastModifiedDate: hydratedSheet.lastModifiedDate as string,\n promotedFiltersStoreValue: {},\n promotedFilters: [],\n dateRangeModel:\n hydratedSheet?.customModel?.dateRangeModel ??\n defaultDashboardDateRangeModel,\n currencyModel:\n hydratedSheet?.customModel?.currencyModel ?? defaultCurrencyModel,\n commonFilters: [],\n });\n\n let resultData = [] as object[];\n if (\n !_.isEmpty(valueCols) ||\n !_.isEmpty(metadata.rowGroupCols) ||\n !_.isEmpty(metadata.pivotCols)\n ) {\n if (!_.isEmpty(definitionInputs)) {\n let promises = [] as Promise<any>[];\n definitionInputs.forEach((input) => {\n promises.push(\n runPublishedDefinition({\n inputs: { ...input },\n sheet: {\n id: hydratedSheet.id as string,\n lastModifiedDate: hydratedSheet.lastModifiedDate as string,\n },\n variable,\n describe: parentTableVariable,\n }),\n );\n });\n const data = await Promise.all(promises);\n resultData = _.map(data, (d) => d.data.data);\n } else {\n const result = (\n await runPublishedDefinition({\n inputs: { ...inputs },\n sheet: {\n id: hydratedSheet.id as string,\n lastModifiedDate: hydratedSheet.lastModifiedDate as string,\n },\n variable,\n describe: parentTableVariable,\n })\n ).data;\n resultData = result.data;\n }\n }\n resultData = _.flatten(resultData);\n\n return { data: resultData };\n};\n","import { apiClient } from \"../client\";\nimport { ChatThread } from \"$models/gen/Api\";\n\nexport interface CreateThreadRequest {\n data: ChatThread;\n}\n\nexport interface CreateThreadResponse {\n success: boolean;\n data: ChatThread;\n message?: string;\n}\n\n/**\n * Creates a new comment thread\n * @param request - The thread creation request containing ChatThread data\n * @returns Promise<CreateThreadResponse> The created thread details\n * @throws Error if the request fails\n */\nexport async function createThread(\n request: CreateThreadRequest,\n): Promise<CreateThreadResponse> {\n try {\n const response = await apiClient.post(\"/chat/create-thread\", request);\n\n if (!response.data) {\n throw { message: \"Failed to create thread\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatThread,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating thread\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport { ChatComment } from \"$models/gen/Api\";\n\nexport interface GetCommentsByThreadIdResponse {\n success: boolean;\n data: ChatComment[];\n message?: string;\n}\n\n/**\n * Gets all comments for a specific thread\n * @param threadId - The ID of the thread to get comments for\n * @returns Promise<GetCommentsByThreadIdResponse> The comments for the thread\n * @throws Error if the request fails\n */\nexport async function getCommentsByThreadId(\n threadId: string,\n): Promise<GetCommentsByThreadIdResponse> {\n try {\n if (!threadId) {\n throw { message: \"Thread ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/chat/get-comments-by-thread-id?threadId=${threadId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch comments\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatComment[],\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching comments\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport { ChatComment } from \"$models/gen/Api\";\n\nexport interface PostCommentRequest {\n data: ChatComment;\n}\n\nexport interface PostCommentResponse {\n success: boolean;\n data: ChatComment;\n message?: string;\n}\n\n/**\n * Adds a new comment to an existing thread\n * @param request - The comment creation request containing ChatComment data\n * @returns Promise<PostCommentResponse> The created comment details\n * @throws Error if the request fails\n */\nexport async function postComment(\n request: PostCommentRequest,\n): Promise<PostCommentResponse> {\n try {\n const response = await apiClient.post(\"/chat/post-comment\", request);\n\n if (!response.data) {\n throw { message: \"Failed to post comment\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatComment,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while posting comment\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport { ChatComment } from \"$models/gen/Api\";\n\nexport interface UpdateCommentRequest {\n data: ChatComment;\n commentId: string;\n}\n\nexport interface UpdateCommentResponse {\n success: boolean;\n data: ChatComment;\n message?: string;\n}\n\n/**\n * Updates an existing comment\n * @param request - The comment update request containing ChatComment data and commentId\n * @returns Promise<UpdateCommentResponse> The updated comment details\n * @throws Error if the request fails\n */\nexport async function updateComment(\n request: UpdateCommentRequest,\n): Promise<UpdateCommentResponse> {\n try {\n if (!request.commentId) {\n throw { message: \"Comment ID is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/chat/update-comment\", request);\n\n if (!response.data) {\n throw { message: \"Failed to update comment\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatComment,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while updating comment\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface DeleteCommentResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Deletes a comment\n * @param commentId - The ID of the comment to delete\n * @returns Promise<DeleteCommentResponse> The deletion result\n * @throws Error if the request fails\n */\nexport async function deleteComment(\n commentId: string,\n): Promise<DeleteCommentResponse> {\n try {\n if (!commentId) {\n throw { message: \"Comment ID is required\", status: 400 };\n }\n\n const response = await apiClient.delete(\n `/chat/delete-comment?commentId=${commentId}`,\n );\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while deleting comment\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface SubscribeUserRequest {\n params: {\n userId: string;\n threadId: string;\n };\n}\n\nexport interface SubscribeUserResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Subscribes a user to a thread\n * @param request - The subscription request containing userId and threadId\n * @returns Promise<SubscribeUserResponse> The subscription result\n * @throws Error if the request fails\n */\nexport async function subscribeUser(\n request: SubscribeUserRequest,\n): Promise<SubscribeUserResponse> {\n try {\n if (!request.params.userId || !request.params.threadId) {\n throw { message: \"User ID and Thread ID are required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/chat/subscribe-user\", request);\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while subscribing user\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface UnsubscribeUserRequest {\n params: {\n userId: string;\n threadId: string;\n };\n}\n\nexport interface UnsubscribeUserResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Unsubscribes a user from a thread\n * @param request - The unsubscription request containing userId and threadId\n * @returns Promise<UnsubscribeUserResponse> The unsubscription result\n * @throws Error if the request fails\n */\nexport async function unsubscribeUser(\n request: UnsubscribeUserRequest,\n): Promise<UnsubscribeUserResponse> {\n try {\n if (!request.params.userId || !request.params.threadId) {\n throw { message: \"User ID and Thread ID are required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/chat/unsubscribe-user\", request);\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while unsubscribing user\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface CheckSubscriptionStatusResponse {\n success: boolean;\n data: {\n isSubscribed: boolean;\n subscriptionDetails?: any;\n };\n message?: string;\n}\n\n/**\n * Checks if a user is subscribed to a thread\n * @param userId - The ID of the user\n * @param threadId - The ID of the thread\n * @returns Promise<CheckSubscriptionStatusResponse> The subscription status\n * @throws Error if the request fails\n */\nexport async function checkSubscriptionStatus(\n userId: string,\n threadId: string,\n): Promise<CheckSubscriptionStatusResponse> {\n try {\n if (!userId || !threadId) {\n throw { message: \"User ID and Thread ID are required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/chat/check-user-subscription-status?userId=${userId}&threadId=${threadId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to check subscription status\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while checking subscription status\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import {\n\ttype Definition,\n\ttype Import,\n\ttype Load,\n\ttype Variable,\n\ttype Export,\n\ttype Permission,\n\ttype Table,\n\ttype Inputs,\n\ttype AvailableTransform\n} from '$models/ui-models/definitionModel';\nimport { type Section } from '$models/ui-models/reportModel';\n\nexport class DefinitionBuilder {\n\tprivate definition: Definition;\n\n\tprivate constructor(def?: Definition) {\n\t\tthis.definition = {\n\t\t\tinputs: {},\n\t\t\taliases: {},\n\t\t\timports: [],\n\t\t\tloads: [],\n\t\t\tvariables: [],\n\t\t\tpermissions: [],\n\t\t\texports: [],\n\t\t\ttables: [],\n\t\t\tsections: []\n\t\t};\n\n\t\tif (def) {\n\t\t\tthis.definition = {\n\t\t\t\t...this.definition,\n\t\t\t\t...def\n\t\t\t};\n\t\t}\n\t}\n\n\tstatic builder(def?: Definition): DefinitionBuilder {\n\t\treturn new DefinitionBuilder(def);\n\t}\n\n\t// Input methods\n\twithInputs(inputs: Inputs): DefinitionBuilder {\n\t\tthis.definition.inputs = { ...this.definition.inputs, ...inputs };\n\t\treturn this;\n\t}\n\n\t// Alias methods\n\twithAlias(tableName: string, columnAliases: Record<string, string>): DefinitionBuilder {\n\t\tif (!this.definition.aliases) {\n\t\t\tthis.definition.aliases = {};\n\t\t}\n\t\tthis.definition.aliases[tableName] = columnAliases;\n\t\treturn this;\n\t}\n\n\t// Import methods\n\taddImport(imprt: Import): DefinitionBuilder {\n\t\tthis.definition.imports?.push(imprt);\n\t\treturn this;\n\t}\n\n\taddDatasetImport(\n\t\tdatasetId: string,\n\t\toptions?: Partial<Omit<Import, 'loc' | 'to' | 'import_type'>>\n\t): DefinitionBuilder {\n\t\tconst imprt: Import = {\n\t\t\tloc: datasetId,\n\t\t\tto: datasetId,\n\t\t\timport_type: 'dataset',\n\t\t\t...options\n\t\t};\n\t\treturn this.addImport(imprt);\n\t}\n\n\t// Load methods\n\taddLoad(load: Load): DefinitionBuilder {\n\t\tthis.definition.loads?.push(load);\n\t\treturn this;\n\t}\n\n\taddFileLoad(\n\t\tfrom: string,\n\t\tto: string,\n\t\tfsOptions: Record<string, unknown> = {}\n\t): DefinitionBuilder {\n\t\tconst load: Load = {\n\t\t\tloc: from,\n\t\t\tto,\n\t\t\tfs_options: fsOptions\n\t\t};\n\t\treturn this.addLoad(load);\n\t}\n\n\t// Variable methods\n\taddVariable(name: string, transforms: AvailableTransform[]): DefinitionBuilder {\n\t\tconst variable: Variable = {\n\t\t\tname,\n\t\t\ttransforms\n\t\t};\n\t\tthis.definition.variables?.push(variable);\n\t\treturn this;\n\t}\n\n\t// Permission methods\n\taddPermission(permission: Permission): DefinitionBuilder {\n\t\tthis.definition.permissions?.push(permission);\n\t\treturn this;\n\t}\n\n\t// Export methods\n\taddExport(exprt: Export): DefinitionBuilder {\n\t\tthis.definition.exports?.push(exprt);\n\t\treturn this;\n\t}\n\n\t// Table methods\n\taddTable(table: Table): DefinitionBuilder {\n\t\tthis.definition.tables?.push(table);\n\t\treturn this;\n\t}\n\n\t// Section methods\n\taddSection(section: Section): DefinitionBuilder {\n\t\tthis.definition.sections?.push(section);\n\t\treturn this;\n\t}\n\n\t// Build method with basic validation\n\tbuild(): Definition {\n\t\tthis.validateDefinition();\n\t\treturn this.definition;\n\t}\n\n\tprivate validateDefinition(): void {\n\t\t// Ensure all referenced tables in aliases exist in imports or loads\n\t\tconst definedTables = new Set([\n\t\t\t...(this.definition.imports?.map((i) => i.to) || []),\n\t\t\t...(this.definition.loads?.map((l) => l.to) || [])\n\t\t]);\n\n\t\tconst aliasedTables = Object.keys(this.definition.aliases || {});\n\t\tfor (const table of aliasedTables) {\n\t\t\tif (!definedTables.has(table)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Table \"${table}\" referenced in aliases but not defined in imports or loads`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Ensure all variables have valid names and transforms\n\t\tthis.definition.variables?.forEach((variable) => {\n\t\t\tif (!variable.name) {\n\t\t\t\tthrow new Error('Variable must have a name');\n\t\t\t}\n\t\t\tif (!Array.isArray(variable.transforms) || variable.transforms.length === 0) {\n\t\t\t\tthrow new Error(`Variable \"${variable.name}\" must have at least one transform`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { DefinitionBuilder } from \"$models/builders/definitionBuilder\";\nimport { Inputs } from \"$models/ui-models/definitionModel\";\nimport { runDefinition } from \"../definition\";\n\nexport const getData = async (\n datasetId: string,\n options?: { limit?: number },\n) => {\n try {\n if (!datasetId) {\n throw new Error(\"Dataset ID is required\");\n }\n\n // Build the definition model with the dataset import\n const definitionModel = DefinitionBuilder.builder()\n .addDatasetImport(datasetId)\n .build();\n\n const response = await runDefinition({\n definition: definitionModel,\n inputs: definitionModel.inputs as Inputs,\n variable: datasetId,\n limit: options?.limit || 1000,\n });\n\n if (!response) {\n throw new Error(\"No data returned from API\");\n }\n console.log(\"Data returned from API\", response);\n return { data: response };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching data for the dataset\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { runSampleDefinition } from \"../definition\";\n\nexport const getSampleData = async ({\n datasetId,\n dataFilter,\n duplicateColGroups,\n datasetType,\n}: {\n datasetId: string;\n dataFilter: \"valid_data\" | \"invalid_data\" | \"all_data\";\n duplicateColGroups?: string[];\n datasetType?: string;\n}) => {\n try {\n if (!datasetId) {\n throw new Error(\"Dataset ID is required\");\n }\n\n const response = await runSampleDefinition({\n datasetId,\n dataFilter,\n duplicateColGroups,\n datasetType,\n });\n\n if (!response?.data) {\n throw new Error(\"No data returned from API\");\n }\n\n return { data: response.data };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching sample data\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getAllDatasets = async () => {\n try {\n const response = await apiClient.post(\"/datasets/get-datasets\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch datasets\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching datasets\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getPublishedWorkbookById = async ({\n type,\n id,\n}: {\n type: string;\n id: string;\n}) => {\n try {\n const response = await apiClient.post(\n \"/workbook/get-published-workbook-by-id\",\n {\n type,\n id,\n },\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch workbook details\", status: 500 };\n }\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workbook details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","export enum WorkbookTypeEnum {\n WORKBOOK = \"WORKBOOK\",\n TRANSFORMATION = \"TRANSFORMATION\",\n STATEMENT = \"STATEMENT\",\n DASHBOARD = \"DASHBOARD\",\n PORTAL = \"PORTAL\",\n PROCESS = \"PROCESS\",\n COLLECTION = \"COLLECTION\",\n COST_ALLOCATION_GROUP = \"ALLOCATION_GROUP\",\n ALLOCATION_BLUEPRINT = \"ALLOCATION_BLUEPRINT\",\n FIN_CLOSE = \"FIN_CLOSE\",\n PAGE_TEMPLATE = \"PAGE_TEMPLATE\",\n}\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getTableById = async (tableId: string) => {\n try {\n const response = await apiClient.get(`/input-table/get-table/${tableId}`);\n\n if (!response.data) {\n throw { message: \"Failed to fetch table details\", status: 500 };\n }\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching table details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import _ from \"lodash\";\nimport { LimitOptions, SortOptions } from \"$models/ui-models/workbookModel\";\nimport {\n generateDefinitionModel,\n getGroupByDefinition,\n getMetricSeries,\n sortConfigFromValue,\n} from \"../../utils/inputTable\";\nimport { getPublishedWorkbookById } from \"../workbook/getPublishedWorkbookById\";\nimport { WorkbookTypeEnum } from \"../../types/workbook\";\nimport { getTableById } from \"./getTableById\";\nimport { hydrateWorksheet } from \"../../utils/metric/hydrateWorksheet\";\nimport { apiClient } from \"../client\";\n\nexport const getData = async ({\n inputTableId: inputTableWorkbookId,\n inputTableViewId,\n pageParams = {},\n limitParams,\n sortParams,\n offsetParam,\n}: {\n inputTableId: string;\n inputTableViewId: string;\n pageParams?: any;\n limitParams?: LimitOptions;\n sortParams?: SortOptions;\n offsetParam?: number;\n}) => {\n try {\n if (!inputTableWorkbookId || !inputTableViewId) {\n return [];\n }\n const inputTableWorkbook = await getPublishedWorkbookById({\n id: inputTableWorkbookId,\n type: WorkbookTypeEnum.COLLECTION,\n });\n const inputTableId = _.get(\n inputTableWorkbook,\n \"customFields.metadata.inputTableId\",\n );\n\n const inputTable = await getTableById(inputTableId);\n if (!inputTable) {\n throw new Error(\"Input table not found\");\n }\n\n const inputTableView = inputTableWorkbook?.sheets?.find(\n (sheet) => sheet.id === inputTableViewId,\n );\n\n if (!inputTableView) {\n throw new Error(\"Input table view not found\");\n }\n\n const hydratedView = await hydrateWorksheet(inputTableView);\n\n if (!hydratedView) {\n throw new Error(\"Failed to hydrate input table view\");\n }\n\n const filters = _.get(hydratedView, \"customModel.filters\");\n const sort = _.get(hydratedView, \"customModel.sort\");\n const limit = _.get(hydratedView, \"customModel.limit\", {}) as LimitOptions;\n const metadata = _.get(hydratedView, \"customModel.metadata\");\n let { targetName, definition } = {\n targetName: \"\",\n definition: {},\n };\n if (hydratedView.type === \"PIVOT\") {\n const gridColumnState = {\n valueCols: _.get(metadata, \"valueCols\", []),\n rowGroupCols: _.get(metadata, \"rowGroupCols\", []),\n filterModel: _.get(metadata, \"filterModel\", {}),\n pivotCols: _.get(metadata, \"pivotCols\", []),\n };\n const metricSeries = getMetricSeries({\n pivotCols: _.get(metadata, \"pivotCols\", []),\n rowGroupCols: _.get(metadata, \"rowGroupCols\", []),\n valueCols: _.get(metadata, \"valueCols\", []),\n });\n\n const columnSettings = _.get(\n hydratedView,\n \"customModel.metadata.columnSettings\",\n );\n const groupByDefinition = getGroupByDefinition({\n tableId: inputTable.id,\n tableName: inputTable.name,\n groupKeys: [],\n rowGroupCols: gridColumnState.rowGroupCols,\n columnSettings,\n filterRules: filters,\n sortValue: sort,\n metricSeries,\n });\n targetName = groupByDefinition.targetName;\n definition = groupByDefinition.definition;\n } else {\n const definitionModel = generateDefinitionModel({\n tableId: inputTable.id as string,\n tableName: inputTable.name,\n filters: filters,\n sort: sortParams?.sortByOrder\n ? sortConfigFromValue(sortParams)\n : sortConfigFromValue(sort),\n });\n targetName = definitionModel.targetName;\n definition = definitionModel.definition;\n }\n\n let stringifiedDefinition = JSON.stringify(definition);\n try {\n const matches = stringifiedDefinition?.match(/{{\\s*([\\w.]+)\\s*}}/g);\n if (matches) {\n matches.forEach((match) => {\n const key = match.replace(/{{\\s*|\\s*}}/g, \"\");\n const value = _.get(pageParams, key, \"\");\n if (value) {\n stringifiedDefinition =\n stringifiedDefinition?.replace(match, value) || \"\";\n }\n });\n }\n } catch (error) {\n console.warn(\"Error evaluating input\", error);\n }\n\n const inputTableResponse = await apiClient.post(\n \"/input-table/get-table-data\",\n {\n targetName,\n definition: JSON.parse(stringifiedDefinition),\n },\n {\n params: {\n limit: limitParams?.limit || limit.limit || 1000,\n offset: offsetParam || 0,\n },\n },\n );\n const data = _.get(inputTableResponse, \"data.result\");\n\n return { data };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching table details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { InputTable, Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getInputTables = async () => {\n try {\n const response = await apiClient.get(\"/input-table/get-input-tables\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch tables\", status: 500 };\n }\n return response.data as InputTable[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching tables\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\nexport interface GetRowsOptions {\n limit?: number;\n offset?: number;\n order?: string;\n order_by?: string;\n [key: string]: any; // Allow any filter field\n}\n\nexport interface GetRowsResponse {\n data: any[];\n count: number;\n total_count: number;\n}\n\n/**\n * Get rows from an input table with optional filtering and pagination\n * Supports Supabase-style filtering via query parameters\n *\n * @param tableId - The ID of the input table\n * @param options - Query options including filters, pagination, and sorting\n * @returns Promise<GetRowsResponse> The rows data with count information\n * @throws Error if the request fails\n *\n * @example\n * // Get all rows\n * await getRows('table-123');\n *\n * @example\n * // Filter by equality\n * await getRows('table-123', { status: 'active' });\n *\n * @example\n * // Filter with operators\n * await getRows('table-123', { price: 'gte.100', status: 'in.(active,pending)' });\n *\n * @example\n * // Pagination\n * await getRows('table-123', { limit: 10, offset: 0 });\n */\nexport const getRows = async (\n tableId: string,\n options?: GetRowsOptions,\n): Promise<GetRowsResponse> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n const params: Record<string, any> = {};\n\n if (options) {\n Object.keys(options).forEach((key) => {\n if (options[key] !== undefined && options[key] !== null) {\n params[key] = options[key];\n }\n });\n }\n\n const response = await apiClient.get(`/input-table/${tableId}/rows`, {\n params,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch rows\", status: 500 };\n }\n\n return response.data as GetRowsResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching rows\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\n/**\n * Insert a new row into an input table\n *\n * @param tableId - The ID of the input table\n * @param rowData - The row data object (column names as keys)\n * @returns Promise<any> The inserted row data\n * @throws Error if the request fails\n *\n * @example\n * await insertRow('table-123', {\n * name: 'Item 1',\n * status: 'active',\n * price: 100\n * });\n */\nexport const insertRow = async (\n tableId: string,\n rowData: Record<string, any>,\n): Promise<any> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n if (!rowData || typeof rowData !== \"object\" || Array.isArray(rowData)) {\n throw { message: \"Row data must be an object\", status: 400 };\n }\n\n const response = await apiClient.post(\n `/input-table/${tableId}/rows`,\n rowData,\n );\n\n if (!response.data) {\n throw { message: \"Failed to insert row\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while inserting row\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\nexport interface UpdateRowOptions {\n copa_id?: string;\n _copa_id?: string;\n [key: string]: any; // Allow any field to update\n}\n\n/**\n * Update a row in an input table\n * Row ID can be provided via copa_id/_copa_id in the updateData or as a separate parameter\n *\n * @param tableId - The ID of the input table\n * @param updateData - The fields to update (may include copa_id or _copa_id)\n * @param rowId - Optional: Row ID to update (alternative to including in updateData)\n * @returns Promise<any> The updated row data\n * @throws Error if the request fails\n *\n * @example\n * // Using rowId parameter\n * await updateRow('table-123', { status: 'completed' }, 'row-123');\n *\n * @example\n * // Using copa_id in updateData\n * await updateRow('table-123', { _copa_id: 'row-123', status: 'completed' });\n */\nexport const updateRow = async (\n tableId: string,\n updateData: UpdateRowOptions,\n rowId?: string,\n): Promise<any> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n if (\n !updateData ||\n typeof updateData !== \"object\" ||\n Array.isArray(updateData)\n ) {\n throw { message: \"Update data must be an object\", status: 400 };\n }\n\n // Build request body and query params\n const body = { ...updateData };\n const params: Record<string, string> = {};\n\n // If rowId is provided as parameter, use it in query params\n if (rowId) {\n params._copa_id = rowId;\n // Remove ID fields from body if they exist\n delete body.copa_id;\n delete body._copa_id;\n }\n\n // Ensure at least one field to update\n const fieldsToUpdate = Object.keys(body).filter(\n (key) => key !== \"copa_id\" && key !== \"_copa_id\",\n );\n if (fieldsToUpdate.length === 0 && !rowId) {\n throw {\n message: \"At least one field to update must be provided\",\n status: 400,\n };\n }\n\n const response = await apiClient.patch(\n `/input-table/${tableId}/rows`,\n body,\n { params },\n );\n\n if (!response.data) {\n throw { message: \"Failed to update row\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while updating row\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\n/**\n * Delete one or more rows from an input table\n * Row ID can be provided as a string (single ID) or array (multiple IDs)\n *\n * @param tableId - The ID of the input table\n * @param rowId - Row ID(s) to delete (string for single, array for multiple)\n * @param idField - Optional: Field name to use ('copa_id' or '_copa_id'), defaults to '_copa_id'\n * @returns Promise<any> The delete response\n * @throws Error if the request fails\n *\n * @example\n * // Delete single row\n * await deleteRow('table-123', 'row-123');\n *\n * @example\n * // Delete multiple rows\n * await deleteRow('table-123', ['row-123', 'row-456']);\n *\n * @example\n * // Using copa_id field\n * await deleteRow('table-123', 'row-123', 'copa_id');\n */\nexport const deleteRow = async (\n tableId: string,\n rowId: string | string[],\n idField: \"copa_id\" | \"_copa_id\" = \"_copa_id\",\n): Promise<any> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n if (!rowId) {\n throw { message: \"Row ID is required\", status: 400 };\n }\n\n // Build query params or body based on whether it's single or multiple IDs\n const isMultiple = Array.isArray(rowId);\n const params: Record<string, string> = {};\n let body: Record<string, string | string[]> | undefined;\n\n if (isMultiple && rowId.length === 0) {\n throw { message: \"At least one row ID must be provided\", status: 400 };\n }\n\n // Use query params for single ID, body for multiple IDs (or single if preferred)\n if (isMultiple) {\n body = { [idField]: rowId };\n } else {\n params[idField] = rowId;\n }\n\n const config: any = {\n url: `/input-table/${tableId}/rows`,\n method: \"delete\",\n };\n\n if (Object.keys(params).length > 0) {\n config.params = params;\n }\n\n if (body) {\n config.data = body;\n }\n\n const response = await apiClient.request(config);\n\n if (!response.data) {\n throw { message: \"Failed to delete row(s)\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while deleting row(s)\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getWorkbooksByType = async (type: Worksheet[\"type\"]) => {\n try {\n const response = await apiClient.post(\"/workbook/get-workbooks-by-type\", {\n type,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch workbooks\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workbooks by type\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface GetWorkbookDetailsRequest {\n workbookId: string;\n}\n\n/**\n * Gets workbook details by workbook ID\n * @param params - The workbook request parameters\n * @param params.workbookId - Required: The ID of the workbook\n * @returns Promise<Workbook> The workbook details\n * @throws Error if the request fails\n */\nexport async function getWorkbookDetails({\n workbookId,\n}: GetWorkbookDetailsRequest): Promise<Workbook> {\n try {\n if (!workbookId) {\n throw { message: \"Workbook ID is required\", status: 400 };\n }\n console.log(\"workbookId\", workbookId);\n\n const response = await apiClient.get(\n `/workbook/get-workbook-details?workbookId=${encodeURIComponent(workbookId)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch workbook details\", status: 500 };\n }\n\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workbook details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { Workbook, WorksheetInputs } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface SaveWorkbookRequest {\n workbook: Workbook;\n sheetInputs?: WorksheetInputs[];\n}\n\n/**\n * Saves or updates a workbook\n * @param params - The workbook save parameters\n * @param params.workbook - Required: The workbook object to save\n * @param params.sheetInputs - Optional: Array of worksheet inputs\n * @returns Promise<Workbook> The saved workbook\n * @throws Error if the request fails\n */\nexport async function saveWorkbook({\n workbook,\n sheetInputs = [],\n}: SaveWorkbookRequest): Promise<Workbook> {\n try {\n if (!workbook || !workbook.id) {\n throw { message: \"Workbook with ID is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/workbook/save-workbook\", {\n workbook,\n sheetInputs,\n });\n\n if (!response.data) {\n throw { message: \"Failed to save workbook\", status: 500 };\n }\n\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while saving workbook\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface PublishWorkbookRequest {\n workbookId: string;\n comment?: string;\n}\n\n/**\n * Publishes a workbook\n * @param params - The workbook publish parameters\n * @param params.workbookId - Required: The ID of the workbook to publish\n * @param params.comment - Optional: Comment for approval workflow\n * @returns Promise<Workbook> The published workbook\n * @throws Error if the request fails\n */\nexport async function publishWorkbook({\n workbookId,\n comment,\n}: PublishWorkbookRequest): Promise<Workbook> {\n try {\n if (!workbookId) {\n throw { message: \"Workbook ID is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/workbook/publish-workbook\", {\n workbookId,\n comment,\n });\n\n if (!response.data) {\n throw { message: \"Failed to publish workbook\", status: 500 };\n }\n\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while publishing workbook\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets statement view workflows for a specific sheet.\n *\n * @param sheetId - The ID of the statement sheet\n * @returns Array of statement view workflows for the sheet\n */\nexport const getViewsBySheetId = async (\n sheetId: string,\n): Promise<StatementViewWorkflow[]> => {\n if (!sheetId) {\n throw { message: \"Sheet ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(\n `/statement/get-views-by-sheet-id/${sheetId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch statement views\", status: 500 };\n }\n\n return response.data as StatementViewWorkflow[];\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching statement views\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { StatementViewWorkflowResult } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets runs for a specific view.\n *\n * @param viewId - The ID of the statement view\n * @returns Array of runs/results for the view\n */\nexport const getRunsByViewId = async (\n viewId: string,\n): Promise<StatementViewWorkflowResult[]> => {\n if (!viewId) {\n throw { message: \"View ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(\n `/statement/get-runs-by-view-id/${viewId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch view runs\", status: 500 };\n }\n\n return response.data as StatementViewWorkflowResult[];\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching view runs\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import _ from \"lodash\";\nimport { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\nimport { getPublishedWorkbookById } from \"../workbook/getPublishedWorkbookById\";\nimport { getViewsBySheetId } from \"./getViewsBySheetId\";\nimport { getRunsByViewId } from \"./getRunsByViewId\";\nimport { downloadFile } from \"@/utils/file/downloadFile\";\n\nexport type StatementDataResult = {\n data: Array<any>;\n error: {\n lineErrors: Array<any>;\n comparisonErrors: {};\n };\n};\n\n/**\n * Gets the latest run data for a statement.\n * If viewId is not provided, uses the default view of the statement.\n *\n * @param statementId - The ID of the statement workbook\n * @param viewId - Optional view ID. If not provided, uses the default view\n * @returns Latest run data for the statement view\n */\nexport const getData = async ({\n statementId,\n viewId,\n runId,\n}: {\n statementId: string;\n viewId?: string;\n runId?: string;\n}): Promise<StatementDataResult> => {\n try {\n if (!statementId) {\n throw { message: \"Statement ID is required\", status: 400 };\n }\n\n // First, fetch the statement workbook to get the statement sheet ID\n const statement = await getPublishedWorkbookById({\n type: \"STATEMENT\",\n id: statementId,\n });\n if (!statement || !statement.sheets) {\n throw { message: \"Statement not found or has no sheets\", status: 404 };\n }\n const statementSheet = statement.sheets.find(\n (sheet) => sheet.type === \"STATEMENT_SHEET\",\n );\n if (!statementSheet || !statementSheet.id) {\n throw {\n message: \"Statement sheet not found in the workbook\",\n status: 404,\n };\n }\n\n const statementViews = await getViewsBySheetId(statementSheet.id);\n\n if (_.isEmpty(statementViews)) {\n throw { message: \"No views found for this statement\", status: 404 };\n }\n\n let targetView: StatementViewWorkflow | undefined;\n\n if (viewId) {\n targetView = statementViews.find((v) => v.id === viewId);\n if (!targetView) {\n throw { message: `View with ID ${viewId} not found`, status: 404 };\n }\n } else {\n const defaultView = _.find(statementViews, (v) =>\n Boolean(v.customFields?.isDefault),\n );\n if (defaultView) {\n targetView = defaultView;\n } else {\n targetView = statementViews[0];\n }\n }\n\n if (!targetView) {\n throw { message: \"No valid view found for this statement\", status: 404 };\n }\n\n const results = await getRunsByViewId(targetView.id);\n\n if (_.isEmpty(results)) {\n throw { message: \"No runs found for this view\", status: 404 };\n }\n\n const latestResult = _.orderBy(\n results,\n [(r) => r.lastModifiedDate || r.createdDate],\n [\"desc\"],\n )[0];\n\n let runToFetchResult = latestResult;\n if (runId) {\n runToFetchResult = _.find(results, (r) => r.id === runId);\n if (!runToFetchResult) {\n throw { message: `Run with ID ${runId} not found.`, status: 404 };\n }\n }\n\n if (runToFetchResult.status === \"FAILED\") {\n throw { message: \"Latest run has failed\", status: 500 };\n }\n if (\n runToFetchResult.status === \"SCHEDULED\" ||\n runToFetchResult.status === \"RUNNING\"\n ) {\n throw { message: \"Run in progress\", status: 202 };\n }\n\n if (!runToFetchResult.artifactLocation) {\n throw { message: \"Latest result does not have a data path\", status: 500 };\n }\n\n const dataResponse = await downloadFile(\n runToFetchResult.artifactLocation,\n \"application/json\",\n );\n\n return dataResponse as StatementDataResult;\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching statement data\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets statement view workflow by id.\n *\n * @param viewId - The ID of the statement view\n * @returns Statement view workflow for the sheet\n */\nexport const getViewById = async (\n viewId: string,\n): Promise<StatementViewWorkflow> => {\n if (!viewId) {\n throw { message: \"View ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(`/statement/get-view-by-id/${viewId}`);\n\n if (!response.data) {\n throw { message: \"Failed to fetch statement view\", status: 500 };\n }\n\n return response.data as StatementViewWorkflow;\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching statement view\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import _ from \"lodash\";\nimport { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { generatePushID } from \"@/utils/common/generatePushId\";\nimport { getUniqueDuplicateName } from \"@/utils/common/generateRandomName\";\nimport {\n convertFiltersToRunInputs,\n separateColumnFilters,\n} from \"@/utils/statement/filterUtils\";\nimport { convertStatementFiltersToFullTypes } from \"@/utils/statement/filterConverters\";\nimport {\n StatementCommonFiltersType,\n StatementPromotedFiltersType,\n} from \"../../types/statement\";\nimport { apiClient } from \"../client\";\nimport { getPublishedWorkbookById } from \"../workbook/getPublishedWorkbookById\";\nimport { getViewsBySheetId } from \"./getViewsBySheetId\";\nimport { getRunsByViewId } from \"./getRunsByViewId\";\nimport { hydrateStatement } from \"@/utils/statement/hydrateStatement\";\nimport { WorkbookModel } from \"$models/ui-models/workbookModel\";\n\n/**\n * Creates a new run for a statement.\n * If viewId is not provided, uses the default view of the statement.\n *\n * @param statementId - The ID of the statement workbook\n * @param viewId - Optional view ID. If not provided, uses the default view\n * @param runId - Optional run ID. If not provided, generates one.\n * @param options - Optional options\n * @param options.name - Custom name for the run. If not provided, generates a unique name.\n * @param options.columnFilters - Array of promoted or common filters to apply to the run\n * @returns Object containing the runId\n */\n\nexport type CreateNewRunResult = {\n runId: string;\n};\n\nexport const createNewRun = async ({\n statementId,\n viewId,\n runId,\n options,\n}: {\n statementId: string;\n viewId?: string;\n runId?: string;\n options?: {\n name?: string;\n columnFilters?: (\n | StatementPromotedFiltersType\n | StatementCommonFiltersType\n )[];\n };\n}): Promise<CreateNewRunResult> => {\n if (!statementId) {\n throw { message: \"Statement ID is required\", status: 400 };\n }\n\n try {\n // First, fetch the statement workbook to get the statement sheet ID\n const workbook = await getPublishedWorkbookById({\n type: \"STATEMENT\",\n id: statementId,\n });\n const statement = (await hydrateStatement(workbook)) as WorkbookModel;\n if (!statement || !statement.sheets) {\n throw { message: \"Statement not found or has no sheets\", status: 404 };\n }\n const statementSheet = statement.sheets.find(\n (sheet) => sheet.type === \"STATEMENT_SHEET\",\n );\n if (!statementSheet || !statementSheet.id) {\n throw {\n message: \"Statement sheet not found in the statement\",\n status: 404,\n };\n }\n\n const statementViews = await getViewsBySheetId(statementSheet.id);\n\n if (_.isEmpty(statementViews)) {\n throw { message: \"No views found for this statement\", status: 404 };\n }\n\n let targetView: StatementViewWorkflow | undefined;\n\n if (viewId) {\n targetView = statementViews.find((v) => v.id === viewId);\n if (!targetView) {\n throw { message: `View with ID ${viewId} not found`, status: 404 };\n }\n } else {\n const defaultView = _.find(statementViews, (v) =>\n Boolean(v.customFields?.isDefault),\n );\n if (defaultView) {\n targetView = defaultView;\n } else {\n targetView = statementViews[0];\n }\n }\n\n if (!targetView) {\n throw { message: \"No valid view found for this statement\", status: 404 };\n }\n\n const results = await getRunsByViewId(targetView.id);\n\n const sortedResults = _.orderBy(\n results,\n [(r) => r.lastModifiedDate || r.createdDate],\n [\"desc\"],\n );\n\n const runName = options?.name\n ? options.name\n : getUniqueDuplicateName(\"Run\", _.map(sortedResults, \"name\"), \"\", \" \");\n\n let runInputs = undefined;\n let customFields: Record<string, any> = {};\n\n if (options?.columnFilters && options.columnFilters.length > 0) {\n const { promotedFilters, commonFilters } = separateColumnFilters(\n options.columnFilters,\n );\n\n runInputs = convertFiltersToRunInputs(\n promotedFilters,\n commonFilters,\n statementSheet,\n );\n\n const fullFilters = await convertStatementFiltersToFullTypes(\n promotedFilters,\n commonFilters,\n statement,\n );\n\n customFields = {\n promotedFilters: fullFilters.promotedFilters,\n commonFilters: fullFilters.commonFilters,\n };\n }\n\n const finalRunId = runId ?? generatePushID();\n await apiClient.post(`/statement/run/create/${targetView.id}`, {\n runId: finalRunId,\n name: runName,\n runInputs,\n customFields,\n });\n return { runId: finalRunId };\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while creating a new run\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { StatementViewWorkflowResult } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets Workflow run result by id.\n *\n * @param runId - The ID of the statement run\n * @returns Workflow run result for the run\n */\nexport const getRunResultById = async (\n runId: string,\n): Promise<StatementViewWorkflowResult> => {\n if (!runId) {\n throw { message: \"Run ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(\n `/statement/run/get-result-by-run-id/${runId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch run result\", status: 404 };\n }\n\n return response.data as StatementViewWorkflowResult;\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching run result\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { ProcessTask } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface GetTaskDetailsRequest {\n taskId: string;\n}\n\n/**\n * Gets task details by task ID\n * @param params - The task request parameters\n * @param params.taskId - Required: The ID of the task\n * @returns Promise<ProcessTask> The task details\n * @throws Error if the request fails\n */\nexport async function getTaskDetails({\n taskId,\n}: GetTaskDetailsRequest): Promise<ProcessTask> {\n try {\n if (!taskId) {\n throw { message: \"Task ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/task/get-task-details?taskId=${encodeURIComponent(taskId)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch task details\", status: 500 };\n }\n\n return response.data as ProcessTask;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching task details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface RunReconRequest {\n workflowId: string;\n runId?: string;\n fullRefresh?: boolean;\n}\n\nexport interface RunReconResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Runs a reconciliation workflow\n * @param params - The recon run parameters\n * @param params.workflowId - Required: The ID of the reconciliation workflow\n * @param params.runId - Optional: Custom run ID\n * @param params.fullRefresh - Optional: Whether to do a full refresh\n * @returns Promise<RunReconResponse> The run response\n * @throws Error if the request fails\n */\nexport async function runRecon({\n workflowId,\n runId,\n fullRefresh = false,\n}: RunReconRequest): Promise<RunReconResponse> {\n try {\n if (!workflowId) {\n throw { message: \"Workflow ID is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/recon/run-recon\", {\n workflowId,\n runId,\n fullRefresh,\n });\n\n if (!response.data) {\n throw { message: \"Failed to run recon workflow\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while running recon workflow\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface ReconWorkflow {\n [key: string]: any;\n}\n\n/**\n * Gets all recon workflows\n * @returns Promise<ReconWorkflow[]> The list of recon workflows\n * @throws Error if the request fails\n */\nexport async function getAllReconWorkflows(): Promise<ReconWorkflow[]> {\n try {\n const response = await apiClient.get(\"/recon/get-all\");\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch recon workflows\", status: 500 };\n }\n\n return response.data.data as ReconWorkflow[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching recon workflows\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFormSchemaRequest {\n formInstanceId: string;\n formRevision: string | number;\n}\n\n/**\n * Gets form schema by form instance ID and revision\n * @param params - The form schema request parameters\n * @param params.formInstanceId - Required: The ID of the form instance\n * @param params.formRevision - Required: The revision of the form\n * @returns Promise<any> The form schema\n * @throws Error if the request fails\n */\nexport async function getFormSchema({\n formInstanceId,\n formRevision,\n}: GetFormSchemaRequest): Promise<any> {\n try {\n if (!formInstanceId || !formRevision) {\n throw {\n message: \"Form instance ID and revision are required\",\n status: 400,\n };\n }\n\n const response = await apiClient.get(\n `/form/get-form-schema?formInstanceId=${encodeURIComponent(formInstanceId)}&formRevision=${encodeURIComponent(formRevision)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch form schema\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching form schema\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFormDataRequest {\n formId: string;\n}\n\n/**\n * Gets form data by form ID\n * @param params - The form data request parameters\n * @param params.formId - Required: The ID of the form\n * @returns Promise<any> The form data\n * @throws Error if the request fails\n */\nexport async function getFormData({\n formId,\n}: GetFormDataRequest): Promise<any> {\n try {\n if (!formId) {\n throw { message: \"Form ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/form/get-form-data?formId=${encodeURIComponent(formId)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch form data\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching form data\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFormByIdRequest {\n formId: string;\n}\n\nexport interface Form {\n [key: string]: any;\n}\n\n/**\n * Gets form by ID\n * @param params - The form request parameters\n * @param params.formId - Required: The ID of the form\n * @returns Promise<Form> The form data\n * @throws Error if the request fails\n */\nexport async function getFormById({\n formId,\n}: GetFormByIdRequest): Promise<Form> {\n try {\n if (!formId) {\n throw { message: \"Form ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/form/get-form-by-id?formId=${encodeURIComponent(formId)}`,\n );\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch form\", status: 500 };\n }\n\n return response.data.data as Form;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching form\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { Form } from \"./getFormById\";\n\nexport interface CreateOrUpdateFormRequest {\n data: Form;\n processSheetId: string;\n formInstanceId: string;\n isDummy: boolean;\n status: \"DRAFTED\" | \"PUBLISHED\";\n}\n\n/**\n * Creates or updates a form\n * @param params - The form creation/update parameters\n * @param params.data - Required: The form data\n * @returns Promise<Form> The created or updated form\n * @throws Error if the request fails\n */\nexport async function createOrUpdateForm({\n data,\n processSheetId,\n formInstanceId,\n isDummy,\n status,\n}: CreateOrUpdateFormRequest): Promise<Form> {\n try {\n if (!data) {\n throw { message: \"Form data is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/form/create-or-update-form\", {\n data,\n processSheetId,\n formInstanceId,\n isDummy,\n status,\n });\n\n if (!response.data) {\n throw { message: \"Failed to create or update form\", status: 500 };\n }\n\n return response.data.data as Form;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating or updating form\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetAuditLogsRequest {\n entityType?: string;\n entitySubType?: string;\n entityId?: string;\n source?: \"UI\" | \"BACKEND\";\n userId?: string;\n limit: number;\n startDate?: string;\n endDate?: string;\n pageToken?: string;\n}\n\nexport interface AuditLogResponse {\n logs: any[];\n count: number;\n nextPageToken?: string;\n}\n\n/**\n * Gets audit logs based on filter criteria\n * @param params - The audit logs request parameters\n * @param params.entityType - Optional: Entity type to filter by\n * @param params.entitySubType - Optional: Entity sub type to filter by\n * @param params.entityId - Optional: Entity ID to filter by\n * @param params.source - Optional: Source filter (UI or BACKEND)\n * @param params.userId - Optional: User ID to filter by\n * @param params.limit - Required: Maximum number of logs to return\n * @param params.startDate - Optional: Start date filter (YYYY-MM-DD)\n * @param params.endDate - Optional: End date filter (YYYY-MM-DD)\n * @param params.pageToken - Optional: Token for pagination\n * @returns Promise<AuditLogResponse> The audit logs response\n * @throws Error if the request fails\n */\nexport async function getAuditLogs(\n params: GetAuditLogsRequest,\n): Promise<AuditLogResponse> {\n try {\n if (!params.limit) {\n throw { message: \"Limit is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/audit/get-audit-logs\", params);\n\n if (!response.data) {\n throw { message: \"Failed to fetch audit logs\", status: 500 };\n }\n\n return response.data.data as AuditLogResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching audit logs\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface AuditRecord {\n source: \"UI\" | \"BACKEND\";\n userId: string;\n entityId: string;\n entityType: string;\n entitySubType?: string;\n action: \"CREATE\" | \"UPDATE\" | \"DELETE\";\n oldValue?: string;\n newValue?: string;\n additionalDetails?: any;\n eventType: \"WORKFLOW\" | \"API\" | \"PROCESS\" | \"DELEGATED_TASK\";\n eventId: string;\n eventTimestamp: string;\n}\n\nexport interface CreateAuditLogRequest {\n auditRecords: AuditRecord[];\n}\n\n/**\n * Creates audit log records\n * @param params - The create audit log request parameters\n * @param params.auditRecords - Required: Array of audit records to create\n * @returns Promise<void> Success response\n * @throws Error if the request fails\n */\nexport async function createAuditLog(\n params: CreateAuditLogRequest,\n): Promise<{ success: boolean }> {\n try {\n if (\n !params.auditRecords ||\n !Array.isArray(params.auditRecords) ||\n params.auditRecords.length === 0\n ) {\n throw { message: \"Audit records array is required\", status: 400 };\n }\n\n const response = await apiClient.post(\n \"/audit/create-audit-log\",\n params.auditRecords,\n );\n\n return { success: response.data.success || true };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating audit log\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TemplatedPipelineWorkflow {\n [key: string]: any;\n}\n\nexport interface GetAllTemplatedPipelinesResponse {\n data: TemplatedPipelineWorkflow[];\n}\n\n/**\n * Gets all templated pipeline workflows\n * @returns Promise<GetAllTemplatedPipelinesResponse> The list of templated pipeline workflows\n * @throws Error if the request fails\n */\nexport async function getAllTemplatedPipelines(): Promise<\n TemplatedPipelineWorkflow[]\n> {\n try {\n const response = await apiClient.get(\"/templated-pipeline/get-all\");\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch templated pipelines\", status: 500 };\n }\n\n return response.data.data as TemplatedPipelineWorkflow[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching templated pipelines\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface CompleteTaskRequest {\n [key: string]: any;\n}\n\nexport interface ProcessTask {\n [key: string]: any;\n}\n\nexport interface MarkTaskDoneRequest {\n taskId: string;\n data: CompleteTaskRequest;\n}\n\nexport interface MarkTaskDoneResponse {\n data: ProcessTask;\n}\n\n/**\n * Marks a task as done\n * @param params - The task completion parameters\n * @param params.taskId - Required: The ID of the task\n * @param params.data - Required: The task completion data\n * @returns Promise<ProcessTask> The updated task\n * @throws Error if the request fails\n */\nexport async function markTaskDone({\n taskId,\n data,\n}: MarkTaskDoneRequest): Promise<ProcessTask> {\n try {\n if (!taskId) {\n throw { message: \"Task ID is required\", status: 400 };\n }\n\n if (!data) {\n throw { message: \"Task completion data is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/process/mark-task-done\", {\n taskId,\n data,\n });\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to mark task as done\", status: 500 };\n }\n\n return response.data.data as ProcessTask;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while marking task as done\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { ProcessTask } from \"./markTaskDone\";\n\nexport interface ReassignTaskRequest {\n taskId: string;\n newAssignee: string;\n assigneeType: \"USER\" | \"TEAM\";\n}\n\nexport interface ReassignTaskResponse {\n data: ProcessTask;\n}\n\n/**\n * Reassigns a task to a new assignee\n * @param params - The task reassignment parameters\n * @param params.taskId - Required: The ID of the task\n * @param params.newAssignee - Required: The new assignee ID\n * @param params.assigneeType - Required: The type of assignee (USER or TEAM)\n * @returns Promise<ProcessTask> The updated task\n * @throws Error if the request fails\n */\nexport async function reassignTask({\n taskId,\n newAssignee,\n assigneeType,\n}: ReassignTaskRequest): Promise<ProcessTask> {\n try {\n if (!taskId) {\n throw { message: \"Task ID is required\", status: 400 };\n }\n\n if (!newAssignee) {\n throw { message: \"New assignee is required\", status: 400 };\n }\n\n if (!assigneeType || ![\"USER\", \"TEAM\"].includes(assigneeType)) {\n throw { message: \"Assignee type must be USER or TEAM\", status: 400 };\n }\n\n const response = await apiClient.post(\"/process/reassign-task\", {\n taskId,\n newAssignee,\n assigneeType,\n });\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to reassign task\", status: 500 };\n }\n\n return response.data.data as ProcessTask;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while reassigning task\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetAllInboxItemsRequest {\n page?: number;\n perPage?: number;\n}\n\nexport interface InboxItem {\n [key: string]: any;\n}\n\n/**\n * Gets all inbox items\n * @param params - The inbox items request parameters\n * @param params.page - Optional: Page number (default: 0)\n * @param params.perPage - Optional: Items per page (default: 50)\n * @returns Promise<InboxItem[]> Array of inbox items\n * @throws Error if the request fails\n */\nexport async function getAllInboxItems({\n page,\n perPage,\n}: GetAllInboxItemsRequest = {}): Promise<InboxItem[]> {\n try {\n const queryParams = new URLSearchParams();\n if (page !== undefined) {\n queryParams.append(\"page\", page.toString());\n }\n if (perPage !== undefined) {\n queryParams.append(\"perPage\", perPage.toString());\n }\n\n const queryString = queryParams.toString();\n const url = `/inbox-items/get-all-inbox-items${queryString ? `?${queryString}` : \"\"}`;\n\n const response = await apiClient.get(url);\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch inbox items\", status: 500 };\n }\n\n return response.data.data as InboxItem[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching inbox items\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface MarkItemAsReadRequest {\n inboxItemIds: string[];\n}\n\n/**\n * Marks inbox items as read\n * @param params - The mark as read request parameters\n * @param params.inboxItemIds - Required: Array of inbox item IDs to mark as read\n * @returns Promise<void>\n * @throws Error if the request fails\n */\nexport async function markItemAsRead({\n inboxItemIds,\n}: MarkItemAsReadRequest): Promise<void> {\n try {\n if (\n !inboxItemIds ||\n !Array.isArray(inboxItemIds) ||\n inboxItemIds.length === 0\n ) {\n throw { message: \"inboxItemIds array is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/inbox-items/mark-item-as-read\", {\n inboxItemIds,\n });\n\n if (response.status >= 400) {\n throw {\n message: \"Failed to mark items as read\",\n status: response.status,\n };\n }\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while marking items as read\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface MarkItemAsUnreadRequest {\n inboxItemIds: string[];\n}\n\n/**\n * Marks inbox items as unread\n * @param params - The mark as unread request parameters\n * @param params.inboxItemIds - Required: Array of inbox item IDs to mark as unread\n * @returns Promise<void>\n * @throws Error if the request fails\n */\nexport async function markItemAsUnread({\n inboxItemIds,\n}: MarkItemAsUnreadRequest): Promise<void> {\n try {\n if (\n !inboxItemIds ||\n !Array.isArray(inboxItemIds) ||\n inboxItemIds.length === 0\n ) {\n throw { message: \"inboxItemIds array is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/inbox-items/mark-item-as-unread\", {\n inboxItemIds,\n });\n\n if (response.status >= 400) {\n throw {\n message: \"Failed to mark items as unread\",\n status: response.status,\n };\n }\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while marking items as unread\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport type GetPermissionsParams = {\n objectId: string;\n objectType: string;\n user: string;\n userType: \"User\" | \"Team\";\n relations: string[];\n};\n\nexport type PermissionsResponse = Record<string, boolean>;\n\n/**\n * Fetches permissions for a user on a given object (e.g. workbook/page).\n * Used by external apps to gate UI or logic by Owner/Editor/Viewer/ReadOnly.\n * All parameters are required; no defaults.\n *\n * @param params.objectId - Workbook/page ID\n * @param params.objectType - e.g. 'Portal', 'Workbook', 'ExternalAppPage'\n * @param params.user - User ID\n * @param params.userType - 'User' | 'Team'\n * @param params.relations - e.g. ['Owner', 'Editor', 'Viewer', 'ReadOnly']\n * @returns Record of role to boolean (e.g. { Owner: false, Editor: true, Viewer: true })\n */\nexport async function getPermissions(\n params: GetPermissionsParams\n): Promise<PermissionsResponse> {\n try {\n const { objectId, objectType, user, userType, relations } = params;\n\n const response = await apiClient.post<PermissionsResponse>(\"/permissions/check\", {\n objectId,\n objectType,\n user,\n userType,\n relations,\n });\n\n if (!response.data || typeof response.data !== \"object\") {\n throw { message: \"Failed to fetch permissions\", status: 500 };\n }\n return response.data as PermissionsResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching permissions\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface ClientIpResponse {\n ip: string;\n}\n\n/**\n * Fetches the client's IP address from the server\n * @returns Promise<ClientIpResponse> The client's IP address\n * @throws Error if the request fails or user is not authenticated\n */\nexport async function getClientIp(): Promise<ClientIpResponse> {\n try {\n const response = await apiClient.get(\"/client-ip\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch client IP\", status: 500 };\n }\n return response.data as ClientIpResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching client IP\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface EmailConversation {\n id?: string;\n toEmail: string[];\n senderId: string;\n subject: string;\n bodyText?: string;\n bodyHtml?: string;\n status:\n | \"AWAITING_RESPONSE\"\n | \"RESPONSE_RECEIVED\"\n | \"IN_PROGRESS\"\n | \"RESOLVED\"\n | \"ESCALATED\"\n | \"CLOSED\";\n threadId?: string;\n lastMessageAt?: string;\n accountId: string;\n cc?: string[];\n bcc?: string[];\n messagePreview?: string;\n tag?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n workspaceId?: string;\n}\n\nexport interface GetAllConversationsParams {\n page?: number;\n pageSize?: number;\n orderByCreatedDate?: boolean;\n tag?: string;\n}\n\nexport interface PageChunkEmailConversation {\n content: EmailConversation[];\n pageNumber: number;\n pageSize: number;\n}\n\n/**\n * Gets all email conversations with pagination and optional tag filter\n * @param params - Optional query parameters\n * @param params.page - Page number (default: 1)\n * @param params.pageSize - Page size (default: 10)\n * @param params.orderByCreatedDate - Order by created date (default: false)\n * @param params.tag - Optional tag to filter by\n * @returns Promise<PageChunkEmailConversation> Paginated conversations\n * @throws Error if the request fails\n */\nexport async function getAllConversations(\n params?: GetAllConversationsParams,\n): Promise<PageChunkEmailConversation> {\n try {\n const response = await apiClient.get(\"/email/conversations\", {\n params: {\n page: params?.page ?? 1,\n pageSize: params?.pageSize ?? 10,\n orderByCreatedDate: params?.orderByCreatedDate ?? false,\n ...(params?.tag && { tag: params.tag }),\n },\n });\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching conversations\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { EmailConversation } from \"./getAllConversations\";\n\nexport interface GetConversationRequest {\n conversationId: string;\n}\n\n/**\n * Gets a single email conversation by ID\n * @param params - The request parameters\n * @param params.conversationId - Required: The conversation ID\n * @returns Promise<EmailConversation> The conversation details\n * @throws Error if the request fails\n */\nexport async function getConversation(\n params: GetConversationRequest,\n): Promise<EmailConversation> {\n try {\n if (!params.conversationId) {\n throw { message: \"Conversation ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/email/conversations/${params.conversationId}`,\n );\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching conversation\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { EmailConversation } from \"./getAllConversations\";\nimport type { EmailAttachment } from \"./types\";\n\nexport interface CreateConversationRequest {\n toEmail: string[];\n subject: string;\n bodyText?: string;\n bodyHtml?: string;\n accountId: string;\n senderId: string;\n cc?: string[];\n bcc?: string[];\n messagePreview?: string;\n tag?: string;\n attachments?: EmailAttachment[];\n}\n\n/**\n * Creates a new email conversation\n * @param params - The conversation data\n * @param params.toEmail - Required: Array of recipient email addresses\n * @param params.subject - Required: Email subject\n * @param params.bodyText - Optional: Plain text body\n * @param params.bodyHtml - Optional: HTML body\n * @param params.accountId - Required: Account ID\n * @param params.senderId - Required: Sender email address\n * @param params.cc - Optional: Array of CC email addresses\n * @param params.bcc - Optional: Array of BCC email addresses\n * @param params.messagePreview - Optional: Preview text for the email\n * @param params.tag - Optional: Tag for categorizing the email\n * @param params.attachments - Optional: Array of attachments\n * @returns Promise<EmailConversation> The created conversation\n * @throws Error if the request fails\n */\nexport async function createConversation(\n params: CreateConversationRequest,\n): Promise<EmailConversation> {\n try {\n const trimmed = {\n ...params,\n toEmail: params.toEmail?.map((e) => e.trim()).filter(Boolean),\n subject: params.subject?.trim(),\n bodyText: params.bodyText?.trim(),\n accountId: params.accountId?.trim(),\n senderId: params.senderId?.trim(),\n cc: params.cc?.map((e) => e.trim()).filter(Boolean),\n bcc: params.bcc?.map((e) => e.trim()).filter(Boolean),\n messagePreview: params.messagePreview?.trim(),\n tag: params.tag?.trim(),\n };\n\n if (\n !trimmed.toEmail?.length ||\n !trimmed.subject ||\n !trimmed.accountId ||\n !trimmed.senderId\n ) {\n throw {\n message:\n \"toEmail (non-empty array), subject, accountId, and senderId are required\",\n status: 400,\n };\n }\n\n const response = await apiClient.post(\"/email/conversations\", trimmed);\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating conversation\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { EmailAttachment } from \"./types\";\n\nexport interface ReplyToConversationRequest {\n conversationId: string;\n accountId: string;\n senderId: string;\n bodyText?: string;\n bodyHtml?: string;\n toEmail?: string[];\n cc?: string[];\n bcc?: string[];\n attachments?: EmailAttachment[];\n}\n\n/**\n * Replies to an existing email conversation\n * @param params - The reply parameters\n * @param params.conversationId - Required: The conversation ID to reply to\n * @param params.accountId - Required: Account ID\n * @param params.senderId - Required: Sender email address\n * @param params.bodyText - Optional: Plain text body of the reply\n * @param params.bodyHtml - Optional: HTML body of the reply\n * @param params.toEmail - Optional: Array of recipient email addresses\n * @param params.cc - Optional: Array of CC email addresses\n * @param params.bcc - Optional: Array of BCC email addresses\n * @param params.attachments - Optional: Array of attachments\n * @returns Promise<any> The reply response\n * @throws Error if the request fails\n */\nexport async function replyToConversation(\n params: ReplyToConversationRequest,\n): Promise<any> {\n try {\n const trimmedId = params.conversationId?.trim();\n const trimmedAccountId = params.accountId?.trim();\n const trimmedSenderId = params.senderId?.trim();\n const trimmedBodyText = params.bodyText?.trim();\n const trimmedBodyHtml = params.bodyHtml?.trim();\n\n if (\n !trimmedId ||\n !trimmedAccountId ||\n !trimmedSenderId\n ) {\n throw {\n message:\n \"conversationId, accountId, and senderId are required\",\n status: 400,\n };\n }\n\n if (!trimmedBodyText && !trimmedBodyHtml && !params.attachments?.length) {\n throw {\n message:\n \"At least one of bodyText, bodyHtml, or attachments is required\",\n status: 400,\n };\n }\n\n const { conversationId, ...body } = {\n ...params,\n conversationId: trimmedId,\n accountId: trimmedAccountId,\n senderId: trimmedSenderId,\n bodyText: trimmedBodyText,\n bodyHtml: trimmedBodyHtml,\n toEmail: params.toEmail?.map((e) => e.trim()).filter(Boolean),\n cc: params.cc?.map((e) => e.trim()).filter(Boolean),\n bcc: params.bcc?.map((e) => e.trim()).filter(Boolean),\n };\n const response = await apiClient.post(\n `/email/conversations/${conversationId}/reply`,\n body,\n );\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while replying to conversation\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface FilterOnSenderId {\n senderId: string;\n direction?: \"INBOUND\" | \"OUTBOUND\";\n page?: number;\n pageSize?: number;\n orderByCreatedDate?: boolean;\n}\n\nexport interface EmailMessage {\n conversationId: string;\n direction: \"INBOUND\" | \"OUTBOUND\";\n fromAddress: string;\n toAddresses: string[];\n ccAddresses?: string[];\n bccAddresses?: string[];\n subject?: string;\n emailengineId?: string;\n emailMessageId?: string;\n threadId?: string;\n inReplyTo?: string;\n senderId: string;\n emlStorageKey?: string;\n sentAt?: string;\n receivedAt?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n id?: string;\n workspaceId?: string;\n entityVersion?: number;\n}\n\nexport interface PageChunkEmailMessage {\n content: EmailMessage[];\n pageNumber: number;\n pageSize: number;\n totalPages: number;\n totalElements: number;\n isLast: boolean;\n}\n\n/**\n * Filters email messages by sender ID\n * @param params - The filter parameters\n * @param params.senderId - Required: The sender email address\n * @param params.direction - 'INBOUND' or 'OUTBOUND' (default: OUTBOUND)\n * @param params.page - Page number (default: 1)\n * @param params.pageSize - Page size (default: 10)\n * @param params.orderByCreatedDate - Order by created date (default: false)\n * @returns Promise<PageChunkEmailMessage> Paginated list of matching messages\n * @throws Error if the request fails\n */\nexport async function getMessageBySenderId(\n params: FilterOnSenderId,\n): Promise<PageChunkEmailMessage> {\n if (!params.senderId?.trim()) {\n throw { message: \"senderId is required\", status: 400 };\n }\n\n try {\n const response = await apiClient.get(\n \"/email/messages/filter/senderId\",\n {\n params: {\n senderId: params.senderId.trim(),\n direction: params.direction ?? \"OUTBOUND\",\n page: params.page ?? 1,\n pageSize: params.pageSize ?? 10,\n orderByCreatedDate: params.orderByCreatedDate ?? false,\n },\n },\n );\n return response.data?.data ?? response.data;\n } catch (error: unknown) {\n const axiosError = error as { response?: { data?: { message?: string }; status?: number }; message?: string };\n const message =\n axiosError.response?.data?.message ||\n axiosError.message ||\n \"An unexpected error occurred while filtering messages\";\n const status = axiosError.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnAuthUrlResponse {\n url: string;\n}\n\nexport async function getAuthUrl(): Promise<TcnAuthUrlResponse> {\n try {\n const response = await apiClient.get(\"/tcn/auth-url\");\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get auth URL\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnTokenData {\n access_token: string;\n refresh_token: string;\n}\n\nexport async function exchangeCode(code: string): Promise<TcnTokenData> {\n try {\n const response = await apiClient.post(\"/tcn/exchange-code\", { code });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to exchange code\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { TcnTokenData } from \"./exchangeCode\";\n\nexport async function refreshToken(refreshTokenValue: string): Promise<TcnTokenData> {\n try {\n const response = await apiClient.post(\"/tcn/token\", { refresh_token: refreshTokenValue });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to refresh token\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnAgentData {\n agentSid: string;\n clientSid: string;\n huntGroupSid: string;\n}\n\nexport async function getCurrentAgent(token: string): Promise<TcnAgentData> {\n try {\n const response = await apiClient.post(\"/tcn/get-current-agent\", { token });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get current agent\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnSkillsData {\n skills: Record<string, unknown>;\n}\n\nexport async function getAgentSkills(\n token: string,\n huntGroupSid: string,\n): Promise<TcnSkillsData> {\n try {\n const response = await apiClient.post(\"/tcn/get-agent-skills\", {\n token,\n huntGroupSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get agent skills\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnSessionData {\n voiceSessionSid: number;\n voiceRegistration: {\n username: string;\n password: string;\n dialUrl: string;\n };\n}\n\nexport async function createSession(\n token: string,\n huntGroupSid: string,\n skills: Record<string, unknown>,\n): Promise<TcnSessionData> {\n try {\n const response = await apiClient.post(\"/tcn/create-session\", {\n token,\n huntGroupSid,\n skills,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to create session\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnKeepAliveData {\n status: string;\n statusDesc: string;\n}\n\nexport async function keepAlive(\n token: string,\n sessionSid: string,\n): Promise<TcnKeepAliveData> {\n try {\n const response = await apiClient.post(\"/tcn/keep-alive\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to keep alive\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnStatusData {\n currentSessionId: string;\n}\n\nexport async function agentGetStatus(token: string): Promise<TcnStatusData> {\n try {\n const response = await apiClient.post(\"/tcn/agent-get-status\", { token });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get agent status\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnDialSettings {\n manualDial: {\n defaultCallerId?: string;\n callRecording?: boolean;\n defaultCountrySid?: number;\n scrubCellPhones?: boolean;\n };\n}\n\nexport async function getHuntGroupAgentSettings(\n token: string,\n huntGroupSid: string,\n): Promise<TcnDialSettings> {\n try {\n const response = await apiClient.post(\"/tcn/get-hunt-group-agent-settings\", {\n token,\n huntGroupSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to get hunt group settings\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function dialManualPrepare(\n token: string,\n sessionSid: string,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/dial-manual-prepare\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to prepare manual dial\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnProcessDialData {\n scrubbedCall: {\n callSid: string;\n taskGroupSid: string;\n callerId: string;\n doRecord: string;\n callerIdCountryCode: string;\n countryCode: string;\n callerIdCountrySid: number;\n countrySid: number;\n };\n}\n\nexport async function processManualDial(\n token: string,\n call: Record<string, unknown>,\n): Promise<TcnProcessDialData> {\n try {\n const response = await apiClient.post(\"/tcn/process-manual-dial\", {\n token,\n call,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to process manual dial\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function manualDialStart(\n token: string,\n agentSessionSid: string,\n huntGroupSid: string,\n simpleCallData: Record<string, unknown>,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/manual-dial-start\", {\n token,\n agentSessionSid,\n huntGroupSid,\n simpleCallData,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to start manual dial\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function agentDisconnect(\n token: string,\n sessionSid: string,\n reason = 'endcall',\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/agent-disconnect\", {\n token,\n sessionSid,\n reason,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to disconnect agent\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function agentPause(\n token: string,\n sessionSid: string,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/agent-pause\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to pause agent\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function agentSetReady(\n token: string,\n sessionSid: string,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/agent-set-ready\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to set agent ready\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnConnectedParty {\n callType: string;\n callId: string;\n}\n\nexport async function agentGetConnectedParty(\n token: string,\n sessionSid: string,\n): Promise<TcnConnectedParty> {\n try {\n const response = await apiClient.post(\"/tcn/agent-get-connected-party\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to get connected party\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnCallData {\n callerIdName?: string;\n journeyRetrievedData?: {\n FName?: string;\n PhoneNumber?: string;\n };\n}\n\nexport async function getCallData(\n token: string,\n callSid: number,\n): Promise<TcnCallData> {\n try {\n const response = await apiClient.post(\"/tcn/get-call-data\", {\n token,\n callSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get call data\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","const bluecopaTailwindConfig = {\n darkMode: \"class\",\n important: true,\n theme: {\n fontFamily: {\n para: [\"Bogle\"],\n display: [\"Bogle\"],\n table: [\"Bogle\"],\n },\n fontWeight: {\n normal: \"300\",\n semibold: \"500\",\n bold: \"700\",\n black: \"800\",\n },\n keyframes: {\n \"fadeIn-top-to-bottom\": {\n \"0%\": { transform: \"translateY(-3%)\", opacity: 0 },\n \"100%\": { transform: \"translateY(0)\", opacity: 1 },\n },\n },\n animation: {\n \"fadeIn-t-b\": \"fadeIn-top-to-bottom 0.8s ease-out forwards\",\n \"fadeOut-b-t\": \"fadeIn-top-to-bottom 0.8s ease-out backwards\",\n },\n extend: {\n boxShadow: {\n md: \"2px 2px 10px 0px rgba(0,0,0,0.3)\",\n lg: \"4px 4px 10px 0px rgba(0,0,0,0.3)\",\n xl: \"6px 6px 10px 0px rgba(0,0,0,0.3)\",\n DEFAULT: \"2px 2px 10px 0px rgba(0,0,0,0.3)\",\n },\n colors: {\n primary: {\n 50: \"#ebf4ff\",\n 100: \"#dbe9ff\",\n 200: \"#bed7ff\",\n 300: \"#97bbff\",\n 400: \"#6e92ff\",\n 500: \"#0071dc\",\n 600: \"#3548ff\",\n 700: \"#202ee2\",\n 800: \"#1d2bb6\",\n 900: \"#202d8f\",\n 950: \"#131953\",\n DEFAULT: \"#0071dc\",\n },\n secondary: {\n 50: \"#F9FAFB\",\n 100: \"#F3F4F6\",\n 200: \"#E5E7EB\",\n 300: \"#D1D5DB\",\n 400: \"#9CA3AF\",\n 500: \"#041e42\",\n 600: \"#4B5563\",\n 700: \"#374151\",\n 800: \"#1F2937\",\n 900: \"#111827\",\n DEFAULT: \"#041e42\",\n },\n danger: {\n 50: \"#FEF2F2\",\n 100: \"#FEE2E2\",\n 200: \"#FECACA\",\n 300: \"#FCA5A5\",\n 400: \"#F87171\",\n 500: \"#EF4444\",\n 600: \"#DC2626\",\n 700: \"#B91C1C\",\n 800: \"#991B1B\",\n 900: \"#7F1D1D\",\n DEFAULT: \"#DE1C24\",\n },\n success: {\n 50: \"#EEFFDD\",\n 100: \"#ddedce\",\n 200: \"#bcdb9d\",\n 300: \"#9ac96c\",\n 400: \"#79b73b\",\n 500: \"#89E32F\",\n 600: \"#468408\",\n 700: \"#346306\",\n 800: \"#234204\",\n 900: \"#112102\",\n DEFAULT: \"#53a10f\",\n },\n warning: {\n DEFAULT: \"#fff200\",\n 100: \"#fef3c7\",\n },\n menuBtnBg: \"#ffffff\",\n menuBtnText: \"#041e42\",\n navbarBg: \"#041e42\",\n navbarBlue: \"#041e42\",\n navbarText: \"#fff\",\n headerBg: \"#fff\",\n headerText: \"#041e42\",\n homeHeaderBg: \"#f5f5f4\",\n homeHeaderText: \"#041e42\",\n\n coralRed: \"#ef4444\",\n dartMouthGreen: \"#059669\",\n chestnut: \"#c2410c\",\n softPink: \"#fecaca\",\n darkPurple: \"#6b21a8\",\n darkPastelGreen: \"#4d7c0f\",\n sandyBrown: \"#fb923c\",\n cinnabar: \"#ef4444\",\n tyrianPurple: \"#701a75\",\n ruddyBlue: \"#0891b2\",\n viridian: \"#0f766e\",\n cobaltBlue: \"#1d4ed8\",\n dukeBlue: \"#1e3a8a\",\n jasmine: \"#fde68a\",\n },\n spacing: {\n none: \"0rem\",\n sm: \"0.3025rem\",\n md: \"0.605rem\",\n lg: \"0.9075rem\",\n xl: \"1.21rem\",\n \"2xl\": \"2.42rem\",\n \"3xl\": \"4.84rem\",\n },\n borderRadius: {\n sm: \"1.3rem\",\n md: \"1.3rem\",\n lg: \"1.3rem\",\n DEFAULT: \"1.3rem\",\n },\n fontSize: {\n \"preset-0\": [\"3.013rem\", \"4.513rem\"],\n \"preset-1\": [\"2.505rem\", \"3.763rem\"],\n \"preset-2\": [\"2.093rem\", \"3.146rem\"],\n \"preset-3\": [\"1.742rem\", \"2.626rem\"],\n \"preset-4\": [\"1.452rem\", \"2.190rem\"],\n \"preset-5\": [\"1.21rem\", \"1.815rem\"],\n \"preset-6\": [\"1.004rem\", \"1.513rem\"],\n \"preset-7\": [\"0.835rem\", \"1.258rem\"],\n \"preset-8\": [\"0.702rem\", \"1.053rem\"],\n },\n zIndex: {\n 1: \"1\",\n 2: \"2\",\n 3: \"3\",\n 4: \"4\",\n 5: \"5\",\n 6: \"6\",\n 7: \"7\",\n 8: \"8\",\n 9: \"9\",\n 10: \"10\",\n 1001: \"1001\",\n 1002: \"1002\",\n },\n },\n },\n};\n\nexport default bluecopaTailwindConfig;\n"],"names":["WorkflowStatus","ShowAsEnum","CustomCalculationShowAsEnum","col","_b","_a","_d","_c","_e","valueCol","ProjectFractionEnum","index","defaultFilterRule","blockId","getDefaultExportFromCjs","ReflectApply","ReflectOwnKeys","NumberIsNaN","once","events","listeners","errorCodes","connectingCodes","disconnectedCodes","subscribingCodes","unsubscribedCodes","State","SubscriptionState","self","_","exports","d","b","Coder","URLSafeCoder","module","__webpack_require__","__webpack_exports__","pusher","prefix","defaults","protocol","AuthRequestType","keys","values","log","document","hooks","state","__awaiter","Network","transports","defineTransport","random","TimelineLevel","level","getConfig","Pusher","options","i","getData","WorkbookTypeEnum","status"],"mappings":"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","x_google_ignoreList":[24,26]}
1
+ {"version":3,"file":"index.es.js","sources":["../src/config.ts","../src/api/client.ts","../src/api/user/getLoggedInUserDetails.ts","../src/api/user/getAllUsers.ts","../src/api/workflow/triggerHttpWorkflowById.ts","../src/api/workflow/triggerWorkflowById.ts","../src/api/workflow/getWorkflowInstanceStatusById.ts","../src/api/workflow/getAllHttpTriggers.ts","../src/api/file/getFileUrlByFileId.ts","../src/api/file/fileUpload.ts","../src/api/file/fileDownload.ts","../src/api/definition/runPublishedDefinition.ts","../src/api/definition/runSampleDefinition.ts","../src/api/definition/runDefinition.ts","../src/api/worksheet/getWorksheets.ts","../src/api/worksheet/getWorksheetsByType.ts","../src/utils/date.ts","../../models/src/lib/ui-models/workbookModel.ts","../src/utils/metric/filterUtils.ts","../../models/src/lib/ui-models/definitionModel.ts","../src/utils/metric/analysisMethods.ts","../src/utils/metric/mergeFilterService.ts","../src/utils/metric/getMetricDefinition.ts","../src/utils/inputTable/inputTableDefinition.ts","../../../node_modules/.pnpm/centrifuge@5.2.2/node_modules/centrifuge/build/index.mjs","../src/utils/websockets/centrifugoWebsocket.ts","../../../node_modules/.pnpm/pusher-js@8.5.0/node_modules/pusher-js/dist/web/pusher.js","../src/utils/websockets/pusherWebsocket.ts","../src/utils/websockets/websocketProviderFactory.ts","../src/api/definition/getDescription.ts","../src/utils/statement/filterConverters.ts","../src/utils/statement/filterUtils.ts","../src/utils/file/downloadFile.ts","../src/utils/statement/hydrateStatement.ts","../src/utils/common/generatePushId.ts","../src/utils/common/generateRandomName.ts","../src/utils/metric/hydrateWorksheet.ts","../src/api/metric/getData.ts","../src/api/chat/createThread.ts","../src/api/chat/getCommentsByThreadId.ts","../src/api/chat/postComment.ts","../src/api/chat/updateComment.ts","../src/api/chat/deleteComment.ts","../src/api/chat/subscribeUser.ts","../src/api/chat/unsubscribeUser.ts","../src/api/chat/checkSubscriptionStatus.ts","../../models/src/lib/builders/definitionBuilder.ts","../src/api/dataset/getData.ts","../src/api/dataset/getSampleData.ts","../src/api/dataset/getDatasets.ts","../src/api/workbook/getPublishedWorkbookById.ts","../src/types/workbook.ts","../src/api/inputTable/getTableById.ts","../src/api/inputTable/getData.ts","../src/api/inputTable/getInputTables.ts","../src/api/inputTable/getRows.ts","../src/api/inputTable/insertRow.ts","../src/api/inputTable/updateRow.ts","../src/api/inputTable/deleteRow.ts","../src/api/workbook/getWorkbooksByType.ts","../src/api/workbook/getWorkbookDetails.ts","../src/api/workbook/saveWorkbook.ts","../src/api/workbook/publishWorkbook.ts","../src/api/statement/getViewsBySheetId.ts","../src/api/statement/getRunsByViewId.ts","../src/api/statement/getData.ts","../src/api/statement/getViewById.ts","../src/api/statement/createNewRun.ts","../src/api/statement/getRunResultById.ts","../src/api/task/getTaskDetails.ts","../src/api/recon/runRecon.ts","../src/api/recon/getAllReconWorkflows.ts","../src/api/form/getFormSchema.ts","../src/api/form/getFormData.ts","../src/api/form/getFormById.ts","../src/api/form/createOrUpdateForm.ts","../src/api/audit/getAuditLogs.ts","../src/api/audit/createAuditLog.ts","../src/api/templatedPipeline/getAllTemplatedPipelines.ts","../src/api/process/markTaskDone.ts","../src/api/process/reassignTask.ts","../src/api/inboxItems/getAllInboxItems.ts","../src/api/inboxItems/markItemAsRead.ts","../src/api/inboxItems/markItemAsUnread.ts","../src/api/permissions/getPermissions.ts","../src/api/clientIp/getClientIp.ts","../src/api/emailEngine/getAllConversations.ts","../src/api/emailEngine/getConversation.ts","../src/api/emailEngine/createConversation.ts","../src/api/emailEngine/replyToConversation.ts","../src/api/emailEngine/getMessageBySenderId.ts","../src/api/tcn/getAuthUrl.ts","../src/api/tcn/exchangeCode.ts","../src/api/tcn/refreshToken.ts","../src/api/tcn/getCurrentAgent.ts","../src/api/tcn/getAgentSkills.ts","../src/api/tcn/createSession.ts","../src/api/tcn/keepAlive.ts","../src/api/tcn/agentGetStatus.ts","../src/api/tcn/getHuntGroupAgentSettings.ts","../src/api/tcn/dialManualPrepare.ts","../src/api/tcn/processManualDial.ts","../src/api/tcn/manualDialStart.ts","../src/api/tcn/agentDisconnect.ts","../src/api/tcn/agentPause.ts","../src/api/tcn/agentSetReady.ts","../src/api/tcn/agentGetConnectedParty.ts","../src/api/tcn/getCallData.ts","../src/input-table-db/types.ts","../src/input-table-db/queryBuilder.ts","../src/input-table-db/rxdb/constants.ts","../src/input-table-db/utils.ts","../src/input-table-db/docRef.ts","../src/input-table-db/collectionRef.ts","../src/input-table-db/rxdb/database.ts","../src/input-table-db/rxdb/schemaBuilder.ts","../src/input-table-db/rxdb/replication.ts","../src/input-table-db/realtimeBinding.ts","../src/input-table-db/rxdb/collectionManager.ts","../src/input-table-db/inputTableDb.ts","../src/tailwind/bluecopa.config.ts"],"sourcesContent":["import { type IWebsocketProvider } from './utils/websockets/websocketProviderFactory';\nexport type { IWebsocketProvider } from './utils/websockets/websocketProviderFactory';\n\nexport interface Config {\n apiBaseUrl: string;\n accessToken: string;\n workspaceId: string;\n userId: string;\n solutionId?: string;\n websocketProvider?: IWebsocketProvider;\n}\n\nclass ConfigSingleton {\n private static instance: ConfigSingleton;\n private config: Config;\n\n private constructor() {\n this.config = {\n apiBaseUrl: \"\",\n accessToken: \"\",\n workspaceId: \"\",\n userId: \"\",\n solutionId: undefined,\n websocketProvider: undefined,\n };\n }\n\n public static getInstance(): ConfigSingleton {\n if (!ConfigSingleton.instance) {\n ConfigSingleton.instance = new ConfigSingleton();\n }\n return ConfigSingleton.instance;\n }\n\n public setConfig(newConfig: Partial<Config>): void {\n this.config = { ...this.config, ...newConfig };\n }\n\n public getConfig(): Config {\n return { ...this.config }; // Return a copy to prevent external mutations\n }\n\n public resetConfig(): void {\n this.config = {\n apiBaseUrl: \"\",\n accessToken: \"\",\n workspaceId: \"\",\n userId: \"\",\n solutionId: undefined,\n websocketProvider: undefined,\n };\n }\n}\n\n// Export convenience functions that use the singleton instance\nconst configInstance = ConfigSingleton.getInstance();\n\nexport function setConfig(newConfig: Partial<Config>): void {\n configInstance.setConfig(newConfig);\n}\n\nexport function getConfig(): Config {\n return configInstance.getConfig();\n}\n\nexport function resetConfig(): void {\n configInstance.resetConfig();\n}\n\n// Export the singleton class for advanced usage if needed\nexport { ConfigSingleton };\n","import axios, {\n AxiosInstance,\n AxiosResponse,\n InternalAxiosRequestConfig,\n} from \"axios\";\nimport { getConfig, setConfig } from \"../config\";\n\n// Create axios instance with default configuration\nconst createApiClient = (): AxiosInstance => {\n const client = axios.create({\n timeout: 120000, // Increased to 120 seconds for audit log queries\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n // Request interceptor to add auth token and dynamic baseURL\n client.interceptors.request.use(\n (config: InternalAxiosRequestConfig) => {\n const copaConfig = getConfig();\n\n // Always update baseURL from current config\n if (copaConfig.apiBaseUrl) {\n config.baseURL = copaConfig.apiBaseUrl;\n }\n\n // Add auth headers if available\n if (copaConfig.accessToken && config.headers) {\n config.headers[\"X-COPA-TOKEN\"] = `${copaConfig.accessToken}`;\n }\n\n if (copaConfig.workspaceId && config.headers) {\n config.headers[\"X-COPA-WORKSPACE-ID\"] = copaConfig.workspaceId;\n }\n\n if (copaConfig.solutionId && config.headers) {\n config.headers[\"x-bluecopa-solution-id\"] = copaConfig.solutionId;\n }\n\n console.log(\"API Request Config:\", {\n baseURL: config.baseURL,\n hasToken: !!copaConfig.accessToken,\n hasWorkspaceId: !!copaConfig.workspaceId,\n });\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n },\n );\n\n // Response interceptor for error handling\n client.interceptors.response.use(\n (response: AxiosResponse) => {\n return response;\n },\n (error) => {\n // Handle common errors\n if (error.response?.status === 401) {\n setConfig({ accessToken: \"\", workspaceId: \"\" });\n // You might want to redirect to login page here\n }\n return Promise.reject(error);\n },\n );\n\n return client;\n};\n\n// Export the configured client instance\nexport const apiClient = createApiClient();\n","import { apiClient } from \"../client\";\n\nexport interface UserDetails {\n id: string;\n email: string;\n name: string;\n role: string;\n workspaceId: string;\n avatar?: string;\n preferences?: Record<string, any>;\n lastLoginAt?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ApiResponse<T> {\n success: boolean;\n data: T;\n message?: string;\n}\n\n/**\n * Fetches the logged-in user's details from the API\n * @returns Promise<{ user: UserDetails }> The user's details\n * @throws Error if the request fails or user is not authenticated\n */\nexport async function getLoggedInUserDetails(): Promise<{ user: UserDetails }> {\n try {\n const response = await apiClient.get(\"/user/current\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch user details\", status: 500 };\n }\n return response.data as { user: UserDetails };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching user details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface User {\n id?: string;\n email?: string;\n firstName?: string;\n lastName?: string;\n externalId?: string;\n active?: boolean;\n organizationId?: string;\n metadata?: Record<string, any>;\n organizationExternalId?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n entityVersion?: number;\n _links?: Record<string, any>;\n}\n\n/**\n * Gets all users in the current workspace\n * @returns Promise<User[]> The list of users\n * @throws Error if the request fails\n */\nexport async function getAllUsers(): Promise<User[]> {\n try {\n const response = await apiClient.get(\"/user/get-all\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch users\", status: 500 };\n }\n\n return response.data as User[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching users\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TriggerHttpWorkflowRequest {\n data: Record<string, any>;\n triggerId: string;\n}\n\nexport interface TriggeredWorkflow {\n workflowId: string;\n triggerId: string;\n}\n\nexport interface TriggerHttpWorkflowResponse {\n triggeredWorkflows: TriggeredWorkflow[];\n}\n\n/**\n * Triggers an HTTP workflow with the provided data\n * @param params - The trigger parameters\n * @param params.triggerId - The ID of the HTTP trigger\n * @param params.data - The data payload to send to the workflow\n * @returns Promise<TriggerHttpWorkflowResponse> The triggered workflow details\n * @throws Error if the request fails\n */\nexport async function triggerHttpWorkflowById({\n data,\n triggerId,\n}: TriggerHttpWorkflowRequest): Promise<TriggerHttpWorkflowResponse> {\n try {\n const response = await apiClient.post(`/http-trigger/${triggerId}`, data);\n if (!response.data) {\n throw { message: \"Failed to trigger HTTP workflow\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while triggering the HTTP workflow\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TriggerWorkflowRequest {\n parentId: string;\n triggerBy: string;\n}\n\nexport interface TriggerWorkflowResponse {\n workbookId: string;\n triggerBy: string;\n instanceId: string;\n triggerId: string;\n workflowId: string;\n status: string;\n triggeredAt: string;\n message: string;\n}\n\n/**\n * Triggers workflow\n * @param params - The trigger parameters\n * @param params.parentId - The ID of the workflow to be triggered\n * @param params.triggerBy - The user who triggered the workflow\n * @returns Promise<TriggerWorkflowResponse> The triggered workflow details\n * @throws Error if the request fails\n */\nexport async function triggerWorkflowById({\n parentId,\n triggerBy,\n}: TriggerWorkflowRequest): Promise<TriggerWorkflowResponse> {\n try {\n const response = await apiClient.post(\"/workflow/trigger\", {\n parentId,\n triggerBy,\n });\n if (!response.data) {\n throw { message: \"Failed to trigger workflow\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while triggering the workflow\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport type WorkflowStatusRequest = ReadonlyArray<{\n instanceId: string;\n parentId: string;\n}>;\n\nexport enum WorkflowStatus {\n Succeeded = \"Succeeded\",\n Failed = \"Failed\",\n Running = \"Running\",\n NotFound = \"NotFound\",\n}\n\nexport type StepInfo = {\n stepId: string;\n name: string;\n stepOutput: Record<string, any>;\n};\n\nexport type WorkflowStatusResponse = {\n instanceId: string;\n processName: string;\n parentId: string;\n status: WorkflowStatus;\n message: string;\n data: {\n completed: StepInfo[];\n running: StepInfo[];\n failed?: StepInfo[];\n };\n completedAt: string;\n error?: string;\n};\n\nexport type WorkflowStatusResponses = ReadonlyArray<WorkflowStatusResponse>;\n\nexport const getWorkflowInstanceStatusById = async (\n request: WorkflowStatusRequest,\n): Promise<WorkflowStatusResponses> => {\n try {\n const response = await apiClient.post(\n \"/workflow/instances/status\",\n request,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch workflow statuses\", status: 500 };\n }\n return response.data as WorkflowStatusResponses;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workflow statuses\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\nexport interface HttpTrigger {\n id?: string;\n name?: string;\n description?: string;\n url?: string;\n active?: boolean;\n metadata?: Record<string, any>;\n schema?: Record<string, any>;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n entityVersion?: number;\n _links?: Record<string, any>;\n}\n\n/**\n * Gets all HTTP triggers (webhooks) in the current workspace\n * @returns Promise<HttpTrigger[]> The list of HTTP triggers\n * @throws Error if the request fails\n */\nexport async function getAllHttpTriggers(): Promise<HttpTrigger[]> {\n try {\n const response = await apiClient.get(\"/http-trigger/get-all\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch HTTP triggers\", status: 500 };\n }\n\n return response.data as HttpTrigger[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching HTTP triggers\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFileUrlRequest {\n key: string;\n contentType: string;\n method: \"GET\" | \"PUT\" | \"POST\";\n}\n\nexport interface GetFileUrlResponse {\n url: string;\n}\n\n/**\n * Gets a signed URL for a file by its key\n * @param params - The file request parameters\n * @param params.key - The file key/path in storage\n * @param params.contentType - The content type of the file\n * @param params.method - The HTTP method (GET, PUT, POST)\n * @returns Promise<GetFileUrlResponse> The signed URL for the file\n * @throws Error if the request fails\n */\nexport async function getFileUrlByFileId({\n key,\n contentType,\n method,\n}: GetFileUrlRequest): Promise<GetFileUrlResponse> {\n try {\n const response = await apiClient.post(\"/file/url\", {\n key,\n contentType,\n method,\n });\n if (!response.data) {\n throw { message: \"Failed to get file URL\", status: 500 };\n }\n\n return { url: response.data };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while getting file URL\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import axios, { AxiosRequestConfig } from \"axios\";\nimport { apiClient } from \"../client\";\n\nexport interface FileUploadRequest {\n path?: string;\n contentType?: string;\n method?: string;\n data: any;\n}\n\nexport interface FileUploadResponse {\n fileId: string;\n}\n\n/**\n * Uploads a file to S3 using presigned URL\n * @param params - The file upload parameters\n * @param params.path - Optional: The S3 path/key (defaults to auto-generated)\n * @param params.contentType - Optional: Content type (defaults to 'application/json')\n * @param params.method - Optional: HTTP method (defaults to 'PUT')\n * @param params.data - Required: The data to upload\n * @returns Promise<FileUploadResponse> The file ID/path\n * @throws Error if the request fails\n */\nexport async function fileUpload({\n path,\n contentType,\n method,\n data,\n}: FileUploadRequest): Promise<FileUploadResponse> {\n try {\n if (!data || !path) {\n throw { message: \"Data is required\", status: 400 };\n }\n const response = await apiClient.post(\"/file/url\", {\n key: path,\n contentType,\n method,\n });\n\n if (!response.data) {\n throw { message: \"Failed to upload file\", status: 500 };\n }\n const fileUploadUrl = response.data;\n const config: AxiosRequestConfig = {\n method: method,\n url: fileUploadUrl,\n headers: {\n \"Content-Type\": contentType,\n },\n data: data,\n };\n await axios(config);\n return { fileId: path } as FileUploadResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while uploading file\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface FileDownloadRequest {\n fileId: string;\n contentType?: string;\n method?: \"GET\" | \"PUT\";\n}\n\n/**\n * Downloads a file from S3 using presigned URL\n * @param params - The file download parameters\n * @param params.fileId - Required: The S3 path/key of the file to download\n * @returns Promise<any> The file data\n * @throws Error if the request fails\n */\nexport async function fileDownload({\n fileId,\n contentType,\n method,\n}: FileDownloadRequest): Promise<any> {\n try {\n if (!fileId) {\n throw { message: \"File ID is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/file/url\", {\n key: fileId,\n contentType: contentType || \"application/json\",\n method: method || \"GET\",\n });\n\n if (!response.data) {\n throw { message: \"Failed to download file\", status: 500 };\n }\n const fileUrl = response.data;\n let fileName = fileId;\n try {\n fileName = fileId.split(\"/\").pop().split(\".\")?.[0];\n } catch (error: any) {}\n\n if (fileUrl) {\n const link = document.createElement(\"a\");\n link.href = fileUrl;\n link.download = fileId;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n return fileUrl;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while downloading file\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { CancelTokenSource } from \"axios\";\nimport { apiClient } from \"../client\";\n\nexport const runPublishedDefinition = async (props: {\n describe: string;\n sheet: { id: string; lastModifiedDate: string };\n variable: string;\n inputs: object;\n source?: CancelTokenSource;\n}) => {\n const { sheet, variable, inputs, describe, source } = props;\n\n if (!sheet) {\n throw new Error(`Definition is null`);\n }\n if (!variable) {\n throw new Error(`Variable is null`);\n }\n\n return apiClient.post(\n \"/definition/run-published\",\n {\n sheet: sheet,\n variable: variable,\n inputs: inputs,\n describe,\n },\n { cancelToken: source?.token },\n );\n};\n","import { apiClient } from \"../client\";\n\nexport const runSampleDefinition = async (props: {\n datasetId: string;\n dataFilter: \"valid_data\" | \"invalid_data\" | \"all_data\";\n duplicateColGroups?: string[];\n datasetType?: string;\n}) => {\n const { datasetId, dataFilter, duplicateColGroups, datasetType } = props;\n\n if (!datasetId) {\n throw new Error(`Dataset ID is null`);\n }\n if (!dataFilter) {\n throw new Error(`Data filter is null`);\n }\n\n return apiClient.post(\"/definition/run-sample\", {\n datasetId,\n dataFilter,\n duplicateColGroups,\n datasetType,\n });\n};\n","import { CancelTokenSource } from \"axios\";\nimport { Definition, Inputs } from \"$models/ui-models/definitionModel\";\nimport { apiClient } from \"../client\";\n\nexport const runDefinition = async (props: {\n inputs: Inputs;\n definition: Definition;\n variable: string;\n source?: CancelTokenSource;\n limit?: number;\n}) => {\n const { definition, variable, inputs, limit, source } = props;\n\n if (!definition) {\n throw {\n message: \"Definition is required for definition run\",\n status: 400,\n };\n }\n if (!variable) {\n throw {\n message: \"Variable name is required for definition run\",\n status: 400,\n };\n }\n if (!inputs) {\n throw {\n message: \"Inputs are required for definition run\",\n status: 400,\n };\n }\n\n try {\n const response = await apiClient.post(\n \"/definition/run\",\n { inputs, definition, variable, limit },\n { cancelToken: source?.token },\n );\n return response.data;\n } catch (error: any) {\n throw {\n message: error.response?.data?.message || \"Failed to run definition\",\n status: error.response?.status || 500,\n data: error.response?.data,\n };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getWorksheets = async (worksheetIds: string[]) => {\n try {\n const response = await apiClient.post(\"/worksheet/get-worksheets\", {\n ids: worksheetIds,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch worksheets details\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching worksheets details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getWorksheetsByType = async (type: Worksheet[\"type\"]) => {\n try {\n const response = await apiClient.post(\"/worksheet/get-worksheets-by-type\", {\n type,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch worksheets\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching worksheets\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","export function formatDate(date: Date): string {\n return date.toISOString().split(\"T\")[0];\n}\n","import type { CompactNotation, Currency } from '$models/common/localeUtils';\nimport type { HierarchyProperties, Workbook, Worksheet } from '$models/gen/Api';\nimport type { SelectOptionType } from '$models/types/selectType';\nimport type { DateRange } from '$models/ui-models/dateRangeModel';\nimport type {\n\tDefinition,\n\tFormatRule,\n\tGroupByHierarchyType,\n\tInputs,\n\tTimeBin\n} from '$models/ui-models/definitionModel';\nimport type { FilterRule } from '$models/ui-models/filterModel';\nimport { type YAxisCountEnum } from './chartModels';\nimport type { CrossFiltersModalDataType, DashboardBlockProperties } from './dashboardModel';\nimport { type InputTableDefinitionModel } from './inputTableModel';\nimport type { MapFxModel } from './mapFxModel';\nimport { type PortalDefinition } from './portalWidgetDefinition';\nimport { type ProcessDefinition } from './processDefinitionTypes';\nimport type { Report, StatementPlan } from './reportModel';\nimport { type DocumentTypeEnum } from './workspaceTreeModel';\n\nexport const DASHBOARD_TYPE = 'DASHBOARD';\nexport const STATEMENT_TYPE = 'STATEMENT';\nexport const PLAN_TYPE = 'PLAN';\n\nexport type BoardTypes = 'DASHBOARD' | 'STATEMENT' | 'PLAN';\nexport type WorkbookSheetTypes = 'WORKSHEET' | 'PIVOT' | 'METRIC' | 'STATEMENT';\n\nexport type ModelUpdateType = 'DEFINITION' | 'MODEL' | 'THUMBNAIL' | 'FAVORITE';\n\nexport type PivotProperties = {\n\trowGroup: any;\n\tcolGroup: any;\n};\n\nexport type TableMaps = Record<string, any[]>;\n\nexport type SheetCreationOptions = 'newSheet' | 'existingSheet';\nexport type LineType = 'PIVOT' | 'FORMULA';\n\nexport type MetricSeriesAdditional = {\n\tchartSettings: {\n\t\tdisplayMode: 'chart' | 'table';\n\t};\n\n\tconfiguration: {\n\t\tbinValue: string;\n\t\tdataField: string;\n\t\trowgroup: string[];\n\t\tvalues: string[];\n\t\tfilters: unknown;\n\t};\n};\n\nexport type ColumnSetting = {\n\tcurrency?: Currency;\n\tdateFormat?: string;\n\tfield: string; // data is reflected in the grid based on fields\n\theaderName: string; // header name is reflected in the grid\n\tprecision?: number; // set precision value\n\ttype?:\n\t\t| 'str'\n\t\t| 'f64'\n\t\t| 'i64'\n\t\t| 'date'\n\t\t| \"datetime(time_unit='us', time_zone=None)\"\n\t\t| 'datetime'\n\t\t| 'bool'\n\t\t| 'boolean'\n\t\t| 'Boolean'; // ex -> ['dateColumn', 'nonEditableColumn'], 'nonEditableColumn'\n\tclearFormatting?: boolean; // clear all formatting, including defaults\n\tvalueFormatter?: (params: any) => any; // formate the value\n\tvalueGetter?: (params: any) => any; // will have access to other params and can do calculations\n\theaderTooltip?: string; // tooltip for the header\n\theaderClass?: string | string[] | ((params: any) => string | string[] | undefined);\n\theaderComponent?: any; // custom header component\n\tcolId?: string; // unique id for the column - optional\n\tcheckboxSelection?: boolean; // if true, will have a checkbox in the column\n\tshowDisabledCheckboxes?: boolean; // if true, will show disabled checkbox, default -> false\n\ticons?: { [key: string]: Function | string };\n\tsuppressNavigable?: boolean; // et to true if this column is not navigable (i.e. cannot be tabbed into), otherwise false. Can also be a callback function to have different rows navigable.\n\tsuppressKeyboardEvent?: Function; //Allows the user to suppress certain keyboard events in the grid cell. See Suppress Keyboard Events.\n\thide?: boolean; // show hide the columns\n\tlockVisible?: boolean; //Set to true to block making column visible / hidden via the UI (API will still work).\n\tlockPosition?: boolean | 'left' | 'right'; //Lock a column to position to 'left' or'right' to always have this column displayed in that position. true is treated as 'left'\n\tsuppressMovable?: boolean; //Set to true to block moving this column via dragging\n\tmenuTabs?: string[]; // Set to an array containing zero, one or many of the following options: 'filterMenuTab' | 'generalMenuTab' | 'columnsMenuTab'. This is used to figure out which menu tabs are present and in which order the tabs are shown.\n\tsuppressMenu?: boolean; //Set to true to not show the column menu when the column header is right clicked.\n\tpinned?: boolean | 'left' | 'right' | null;\n\teditable?: boolean;\n\tcellClassRule?: {\n\t\t[key: string]: (params: any) => boolean;\n\t};\n\tenableRowGroup?: boolean;\n\tenablePivot?: boolean;\n\tenableValue?: boolean;\n\tunique_count?: number;\n\tcellRendererParams?: any;\n\tcellRenderer?: string | Function;\n\twidth?: number;\n\taggFunc?: string;\n\tisCurrency?: boolean;\n\tisPercentage?: boolean;\n\tisNumber?: boolean;\n\tshowAs?: ShowAsType | CustomCalculationsShowAsType;\n\tminWidth?: number;\n\tcellClass?: string | string[] | ((params: any) => string | string[] | undefined);\n\tcellDataType?: boolean;\n\tsheetName?: string;\n\tisFormulaColumn?: boolean;\n\tisLookupColumn?: boolean;\n\tisJoinColumn?: boolean;\n\tcompactNotation?: CompactNotation;\n\tdatasetId?: string;\n\tdatasetName?: string;\n\tcolumnGroup?: string;\n\tcolumnGroupShow?: 'open' | 'closed';\n\tmarryChildren?: boolean;\n\tchildren?: ColumnSetting[];\n\tgroupId?: string;\n\tmetaData?: {\n\t\tdateColGroup?: string;\n\t};\n};\n\nexport enum ShowAsEnum {\n\tDEFAULT = 'default',\n\tROW = 'row',\n\tCOLUMN = 'column',\n\tGRAND_TOTAL = 'grandTotal'\n}\n\nexport enum CustomCalculationShowAsEnum {\n\tNONE = 'none',\n\tFORMULA = 'formula',\n\tAGGREGATE = 'aggregate'\n}\n\nexport type UiSettings = {\n\tfontSize?: number;\n\tdecimalPlaces?: {\n\t\t[colId: string]: number;\n\t};\n\tcolumnSettings?: ColumnSetting[];\n};\n\nexport type CustomModel = {};\nexport type LookupSetting = {\n\tleftCol: string;\n\trightCol: string;\n\trightSheetId: string;\n\tselectedColumns: { col: string; alias: string }[];\n};\n\nexport type XLookupSetting = {\n\tlookup_sheet_id: string;\n\tlookup_col: string;\n\tlookup_sheet: string;\n\twith_col: string;\n\treturn_col: string; // this is the id of the column in the lookup sheet\n\tsort_col?: string;\n\tsort_order?: string;\n\tselection_mode?: boolean;\n\treturn_col_id?: string; // this is the id of the column in the current sheet\n};\n\nexport type WorkbookCustomModel = {\n\tinputs?: Inputs;\n\tvariable?: string;\n\tfilterColumnsBy?: FilterColumnsBy;\n\tdateRange?: DateRange;\n\tuiSettings?: UiSettings;\n\tworksheetType?: 'TableSheet';\n\tdatasetId?: string;\n\tdatasetName?: string;\n\tparentTableColumnSettings?: ColumnSetting[];\n\tcurrency?: string;\n\tlookupSettings?: LookupSetting[];\n\tformatSettings?: FormatRule[];\n\txLookupSettings?: XLookupSetting[];\n\tsortOptions?: SortOptionsForWorkbook;\n};\n\nexport type ReconWorkbookCustomModel = WorkbookCustomModel & {\n\tdateColumn?: string;\n};\n\nexport type RowGroupsType = Array<string | string[]>;\n\nexport type GridColumnState = {\n\tvalueCols: ValueColsType[];\n\tfilterModel: any;\n\trowGroupCols: RowGroupsType;\n\tpivotCols: string[];\n};\n\nexport type SortOptions = {\n\tsortByField: SelectOptionType | undefined;\n\tsortByOrder: 'asc' | 'desc';\n\t/** Intervals to sort data based on (for trends) */\n\tpivotFilters?: string[];\n};\nexport type SortOptionsForWorkbook = {\n\tsortByField: SelectOptionType | undefined | SelectOptionType[];\n\tsortByOrder: 'asc' | 'desc' | undefined | ('asc' | 'desc')[];\n};\n\nexport type LimitOptions = {\n\tlimit: number;\n\tlimitFrom: 'top' | 'bottom';\n};\n\nexport type PivotCustomModel = WorkbookCustomModel & {\n\tchartType?: string;\n\tparentTableId: string;\n\tgridColumnState?: GridColumnState;\n\tparentTableVariable: string;\n\ttimeBin?: TimeBin | '';\n\tcompareTrends?: Array<{ id: string; name: string; dateRange: DateRange }>;\n\tdateColumn?: string;\n\tdatasetId: string;\n\tdatasetName: string;\n\thierarchy?: HierarchyProperties;\n\tcurrency?: string;\n\tsortOptions?: SortOptions;\n\tlimitOptions?: LimitOptions;\n\tcolorPalette?: string;\n\tsettings?: any;\n\tcolumnWidth?: any;\n\tshowDimensionMappingValues?: boolean;\n\tshowBinSortOrderValues?: boolean;\n\tplotAsTrendsOrder?: 'asc' | 'desc' | 'none';\n\tpivotColumnFormatMap?: Record<string, ColumnSetting>;\n\t/** Used in workbook context. Portal/dashboard contexts use metadata.hideValueSubHeader instead. */\n\thideValueSubHeader?: boolean;\n\t/** When true, parent worksheet's sort and filters are applied to the metric */\n\tapplyFiltersFromSheet?: boolean;\n};\n\nexport type MetricViewMode = 'grid' | 'chart' | 'geomap';\n\nexport type TableCustomModel = WorkbookCustomModel & {\n\tcolumns?: string[];\n};\n\nexport type LineCustomModel = WorkbookCustomModel & {\n\tparentTableVariable?: string;\n\tparentTableId?: string;\n\tvalueCols?: ValueColsType[];\n\tallValueCols?: ValueColsType[];\n\tfilterModel?: any;\n\ttimeBin?: TimeBin;\n\tdateColumn?: string;\n\tgroupBy?: string[];\n\tpivotCols?: string[];\n};\n\nexport type Line = {\n\tid: string;\n\ttype: LineType;\n\tsheetId?: string;\n\tvariable?: string;\n\tinputs?: any;\n\tcustomModel?: LineCustomModel;\n\tdefinitionModel?: Definition;\n\tdisplayName?: string;\n\tformula?: string;\n\tlastModifiedDate?: string;\n\tpublishedVersion?: number;\n\tcurrency?: Currency;\n\tprecision?: number;\n\tdateFormat?: string;\n\tclearFormatting?: boolean;\n};\nexport type ShowAsType = 'default' | 'row' | 'column' | 'grandTotal';\nexport type CustomCalculationsShowAsType = 'none' | 'formula' | 'aggregate';\nexport type PivotGridDisplayType = { gridData: any[]; gridColumns: any[] };\nexport type ValueColsType = {\n\tlabel?: string;\n\tcol: string;\n\taggFun?: string;\n\tformula?: string;\n\tcurrency?: Currency;\n\tprecision?: number;\n\tnumberFormat?: string;\n\tdateFormat?: string;\n\tclearFormatting?: boolean;\n\timpact?: 'positive' | 'negative';\n\tchartColorBasedOnImpact?: boolean;\n\ttype?: 'value' | 'formula' | 'column';\n\tisCurrency?: boolean;\n\tisPercentage?: boolean;\n\tisNumber?: boolean;\n\tshowAs?: ShowAsType | CustomCalculationsShowAsType;\n\tisAmortize?: boolean;\n\thide?: boolean;\n\tcompactNotation?: CompactNotation;\n\thideGrandTotal?: boolean;\n\tsourceLabel?: string; // Label of the valueCol this is based/derived from\n\tcompareTrendId?: string;\n\tshowRowTotal?: boolean;\n};\nexport type Section = {\n\tid: string;\n\theader: string;\n\tlines: Line[];\n};\n\nexport type Statement = {\n\tsections: Section[];\n\tformulaColumns?: string[];\n\ttimeBinOption: { label: string; value: TimeBin };\n\tinputs?: Inputs;\n};\n\nexport type DashboardDateRangeModel = {\n\tdateRange: DateRange;\n\tappliedOnBlocks: { blockId: string; blockName: string; applied: boolean }[];\n};\n\nexport type BoardCurrencyModel = {\n\tcurrency: string;\n\tappliedOnBlocks: { blockId: string; blockName: string; applied: boolean }[];\n};\n\nexport type Sheet<\n\tT extends CustomModel = any,\n\tD extends\n\t\t| Definition\n\t\t| MapFxModel\n\t\t| Report\n\t\t| ProcessDefinition\n\t\t| PortalDefinition\n\t\t| StatementPlan\n\t\t| InputTableDefinitionModel = Definition\n> = Worksheet & {\n\tcustomModel?: T;\n\tdefinitionModel?: D;\n};\n\n//Same model for Board and Workbook\nexport type WorkbookModel<T extends CustomModel = any, Y = any> = Omit<Workbook, 'sheets'> & {\n\tsheets: Sheet<T, Y>[];\n};\n\nexport type FilterBy = 'value' | 'condition';\n\nexport type FilterColumnsBy = { [column: string]: FilterBy };\n\nexport type WeakLinkType = {\n\tdocumentId: string;\n\tsheetId: string;\n\ttype: DocumentTypeEnum.WORKBOOK | DocumentTypeEnum.STATEMENT;\n};\n\nexport type MetricMetadataType = {\n\tparentTableVariable?: string;\n\tvariable: string;\n\tdatasetId?: string;\n\tdatasetName?: string;\n\tcolumnSettings: ColumnSetting[];\n\tdateColumn?: string;\n\tdateRange?: DateRange;\n\tfilterColumnsBy?: FilterColumnsBy;\n\tinputs: Inputs;\n\taliases?: { [key: string]: string };\n\tvalueCols?: ValueColsType[];\n\tfilterModel?: FilterRule | [];\n\trowGroupCols?: RowGroupsType;\n\tpivotCols?: string[];\n\ttimeBin?: TimeBin | '';\n\thierarchy?: HierarchyProperties;\n\tcurrency?: string;\n\tsortOptions?: SortOptions;\n\tlimitOptions?: LimitOptions;\n\tlastModifiedDate?: string;\n\tdescription?: string;\n\tscore?: string;\n\tisKPI?: boolean;\n\tcrossFilterModel?: CrossFiltersModalDataType;\n\tviewFilterModel?: any;\n\thierarchyCol?: GroupByHierarchyType;\n\tweakLink?: WeakLinkType;\n\tstringValue?: boolean;\n\tcompareTrends?: Array<{ id: string; name: string; dateRange: DateRange }>;\n\tshowDimensionMappingValues?: boolean;\n\tshowBinSortOrderValues?: boolean;\n\tplotAsTrendsOrder?: 'asc' | 'desc' | 'none';\n\tpivotColumnFormatMap?: Record<string, ColumnSetting>;\n\tcolumnWidth?: Record<string, number>;\n\t/** Used in portal/dashboard context. Workbook context uses customModel.hideValueSubHeader directly. */\n\thideValueSubHeader?: boolean;\n};\n\n/**\n * Settings for configuring geographical map visualizations.\n * @property {string} country - The country for which the map is displayed (currently supports 'India').\n * @property {string} cityColumn - The column containing city names.\n * @property {string} aggregateByCol - The column to aggregate data by.\n * @property {string[]} showInTooltip - Fields to display in the tooltip.\n * @property {string[]} fieldToIndicateZeroValues - Fields that should be highlighted when zero.\n * @property {string} fillColor - The color used to fill the markers.\n * @property {string} borderColor - The color used for marker borders.\n */\nexport type GeomapSettings = {\n\tcountry: string;\n\tcityColumn: string;\n\taggregateByCol: string;\n\tshowInTooltip: string[];\n\tfieldToIndicateZeroValues: string[];\n\tfillColor: string;\n\tborderColor: string;\n};\n\ntype FunnelChartSortOrder = 'descending' | 'ascending' | 'none';\n\nexport type FunnelChartSettings = {\n\thideLabels: boolean;\n\tselectedValueColumn: string;\n\tsortOrder: FunnelChartSortOrder;\n\tmin: number;\n\tmax: number;\n};\n\nexport type MetricSettingsType = {\n\tchartType?: string;\n\thideTooltipHeader?: boolean;\n\tchartTypeBeforeDrilldown?: string;\n\tviewMode: MetricViewMode;\n\tcolorPalette?: string;\n\taxisDistributionType?: 'value' | 'log';\n\tyAxisCount?: YAxisCountEnum;\n\tlabelPosition?: string;\n\tlabelRotation?: string;\n\twaterfallParentMapping?: Record<string, string>;\n\tgeomapSettings?: GeomapSettings;\n\tfunnelChartSettings?: FunnelChartSettings;\n\tchartSettings?: Record<string, any>;\n};\n\nexport type DashboardProperties = { [cols in number]?: DashboardBlockProperties };\n\nexport type MetricCustomModel = DashboardProperties & {\n\tmetadata: MetricMetadataType;\n\tsettings: MetricSettingsType;\n\taddedMode?: 'imported' | 'created';\n};\n","import type { SelectOptionType } from \"$models/types/selectType\";\nimport {\n operatorsWithIsNotTrue,\n type FilterRule,\n type FilterSelectOptionsType,\n type FilterUniqueValueSelectOptionsType,\n type RuleType,\n} from \"$models/ui-models/filterModel\";\nimport {\n FilterColumnsBy,\n ValueColsType,\n} from \"$models/ui-models/workbookModel\";\nimport { Operator } from \"$models/ui-models/filterModel\";\nimport _ from \"lodash\";\n\nexport type FilterPanelStoreType = {\n defaultType: Omit<RuleType, \"cond\">;\n rules: FilterSelectOptionsType[];\n};\n\nconst defaultFilterPanel: FilterRule = {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n};\n\nexport const filterToSelectOptionType = (\n filter: FilterRule,\n columns: SelectOptionType[],\n): FilterPanelStoreType => {\n const rules: FilterRule[] = (filter?.rules as FilterRule[]) || [];\n\n if (!rules || rules.length === 0) {\n return {\n defaultType: \"and_cond\",\n rules: [],\n };\n }\n\n const selectOptionsForRules: FilterSelectOptionsType[] = rules.map((rule) =>\n getSelectionOptionsFromFilter(rule, columns),\n );\n return {\n defaultType: (filter?.rule_type as Omit<RuleType, \"cond\">) || \"and_cond\",\n rules: selectOptionsForRules,\n };\n};\n\nexport const getSelectionOptionsFromFilter = (\n rule: FilterRule,\n columns: SelectOptionType[],\n): FilterSelectOptionsType => {\n if (_.isEmpty(rule?.rules)) {\n const col = columns.find(\n (column) => column.label === rule.col || column.value === rule.col,\n );\n\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValues: [\n {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n uniqueValue: rule?.value as string | number | boolean,\n operator: rule?.operator,\n ruleType: rule?.rule_type || \"cond\",\n isNot: rule?.is_not || false,\n caseSensitive: rule?.is_case_sensitive ?? true,\n },\n },\n ],\n uniqueValueCount: col?.option?.uniqueCount,\n type: col?.option?.type,\n ruleType: rule?.rule_type || \"cond\",\n },\n };\n }\n const col = columns?.find(\n (column) =>\n column.label === rule?.rules?.[0]?.col ||\n column.value === rule?.rules?.[0]?.col,\n );\n const isValueFilter =\n _.get(rule, \"rules.0.operator\", null) === \"in_op\" &&\n _.get(rule, \"rules.0.value\", null);\n if (isValueFilter) {\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValues:\n rule?.rules?.[0]?.value?.map((r: string) => {\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValue: r,\n operator: \"equal\",\n ruleType: \"cond\",\n isNot: false,\n caseSensitive: true,\n },\n };\n }) || [],\n uniqueValueCount: col?.option?.uniqueCount,\n type: col?.option?.type,\n ruleType: rule?.rule_type || \"cond\",\n },\n };\n }\n return {\n label: col?.label || \"\",\n value: col?.value || \"\",\n option: {\n aggFun: col?.option?.aggFun,\n uniqueValues:\n rule?.rules?.map((r: FilterRule) => {\n const childCol = columns?.find((column) => column.value === r.col);\n return {\n label: childCol?.label || \"\",\n value: childCol?.value || \"\",\n option: {\n aggFun: childCol?.option?.aggFun,\n uniqueValue: r?.value as string | number | boolean,\n operator: r?.operator,\n ruleType: r?.rule_type || \"cond\",\n isNot: r?.is_not || false,\n caseSensitive: r?.is_case_sensitive ?? true,\n },\n };\n }) || [],\n uniqueValueCount: col?.option?.uniqueCount,\n type: col?.option?.type,\n ruleType: rule?.rule_type || \"cond\",\n },\n };\n};\n\nexport const getSelectOptionTypeToFilter = (\n filter: FilterPanelStoreType,\n filterColumnsBy?: FilterColumnsBy,\n): FilterRule => {\n const rules: FilterSelectOptionsType[] = filter?.rules;\n const defaultRuleType = filter?.defaultType;\n\n if (!rules || rules.length === 0) {\n return defaultFilterPanel;\n }\n\n let filterRules: FilterRule[] = rules?.map((rule) =>\n getFilterRuleFromSelectionOptions(rule, filterColumnsBy),\n );\n\n if (\n filterRules.length === 1 &&\n filterRules[0].rules &&\n filterRules[0].rules.length < 1\n ) {\n filterRules = [];\n }\n\n return {\n is_not: false,\n rule_type: defaultRuleType as RuleType,\n rules: filterRules,\n };\n};\n\nexport const getFilterRuleFromSelectionOptions = (\n rule: FilterSelectOptionsType,\n filterColumnsBy?: FilterColumnsBy,\n): FilterRule => {\n if (\n filterColumnsBy?.[rule.value] === \"value\" ||\n rule?.option?.uniqueValues?.length > 2\n ) {\n return {\n rule_type: \"or_cond\",\n rules: [\n {\n col: rule.value,\n value: _.map(\n rule?.option?.uniqueValues || [],\n (r) => r.option.uniqueValue,\n ),\n operator: \"in_op\",\n rule_type: \"cond\",\n is_not: false,\n is_case_sensitive: true,\n },\n ],\n is_not: false,\n };\n }\n if (rule?.option?.uniqueValues?.length === 1) {\n const uniqueValue = rule?.option?.uniqueValues?.[0];\n return {\n col: rule.value,\n value: uniqueValue?.option?.uniqueValue,\n operator: uniqueValue?.option?.operator,\n rule_type: uniqueValue?.option?.ruleType ?? \"cond\",\n is_not: uniqueValue?.option?.isNot ?? false,\n is_case_sensitive: uniqueValue?.option?.caseSensitive ?? true,\n };\n }\n return {\n rule_type: rule?.option?.ruleType,\n rules: (rule?.option?.uniqueValues || []).map(\n (r: FilterUniqueValueSelectOptionsType) => {\n return {\n col: r.value,\n value: r.option?.uniqueValue,\n operator: r.option?.operator,\n rule_type: r.option?.ruleType ?? \"cond\",\n is_not: r.option?.isNot ?? false,\n is_case_sensitive: r.option?.caseSensitive ?? true,\n };\n },\n ),\n is_not: false,\n };\n};\n\nexport const getFilterRulesFromFilterSelectOptionsMap = (\n filterSelectOptionsMap: {\n [filterId: string]: FilterSelectOptionsType;\n },\n filterColumnsBy: FilterColumnsBy,\n): {\n combinedFilterRule: FilterRule;\n columnFilterRule: FilterRule;\n aggFilterRule: FilterRule;\n} => {\n const filterSelectOptionsMapForAgg = _.pickBy(\n filterSelectOptionsMap,\n (o) => !_.isEmpty(o.option.aggFun),\n );\n const filterSelectOptionsMapForFilters = _.pickBy(\n filterSelectOptionsMap,\n (o) => _.isEmpty(o.option.aggFun),\n );\n\n const filterSelectOption: FilterPanelStoreType = {\n defaultType: \"and_cond\" as RuleType,\n rules: Object.values(filterSelectOptionsMap),\n };\n\n const filterSelectOptionWithoutAgg: FilterPanelStoreType = {\n defaultType: \"and_cond\" as RuleType,\n rules: Object.values(filterSelectOptionsMapForFilters),\n };\n const filterSelectOptionForAgg: FilterPanelStoreType = {\n defaultType: \"and_cond\" as RuleType,\n rules: Object.values(filterSelectOptionsMapForAgg),\n };\n\n const columnFilterRule = getSelectOptionTypeToFilter(\n filterSelectOptionWithoutAgg,\n filterColumnsBy,\n );\n const combinedFilterRule = getSelectOptionTypeToFilter(\n filterSelectOption,\n filterColumnsBy,\n );\n const aggFilterRule = getSelectOptionTypeToFilter(\n filterSelectOptionForAgg,\n filterColumnsBy,\n );\n\n return {\n combinedFilterRule,\n columnFilterRule,\n aggFilterRule,\n };\n};\n\nexport const getColumnFilterRuleFromCombinedFilterRule = (\n combinedFilterRule: FilterRule,\n valueCols: ValueColsType[],\n): FilterRule => {\n const filterRules: FilterRule[] = combinedFilterRule?.rules ?? [];\n const columnFilterRules: FilterRule[] = [];\n\n _.forEach(filterRules, (rule) => {\n const valueCol = valueCols?.find(\n (valueCol) => rule?.col === valueCol?.label,\n );\n if (!valueCol) {\n columnFilterRules.push(rule);\n }\n });\n\n return {\n ...combinedFilterRule,\n rules: columnFilterRules,\n };\n};\n\nexport const getAggregateFilterRuleFromCombinedFilterRule = (\n combinedFilterRule: FilterRule,\n valueCols: ValueColsType[],\n): FilterRule => {\n const filterRules: FilterRule[] = combinedFilterRule?.rules ?? [];\n const aggFilterRules: FilterRule[] = [];\n\n _.forEach(filterRules, (rule) => {\n const valueCol = valueCols?.find(\n (valueCol) => rule?.col === valueCol?.label,\n );\n if (valueCol) {\n aggFilterRules.push(rule);\n }\n });\n\n return {\n ...combinedFilterRule,\n rules: aggFilterRules,\n };\n};\n\nexport const getIsNotValueForPredicateType = (predicateType: Operator) => {\n return _.includes(operatorsWithIsNotTrue, predicateType);\n};\n","import { type Section } from './reportModel';\nimport { type ColumnFilterRule } from '$models/gen/Api';\n\nexport type BaseTransform = {\n\ttype: string;\n};\n\nexport type Pivot = BaseTransform & {\n\ttable: string;\n\tvalues: string | string[];\n\tcol_groups: string | string[];\n\trow_groups: string | string[];\n\taggregate_fn: string;\n};\n\nexport type TimeBin = 'per_day' | 'per_week' | 'per_month' | 'per_quarter' | 'per_year';\n\nexport type DateRange =\n\t| 'current_week'\n\t| 'current_month'\n\t| 'current_quarter'\n\t| 'current_year'\n\t| 'previous_week'\n\t| 'previous_month'\n\t| 'previous_quarter'\n\t| 'previous_year'\n\t| 'past_week'\n\t| 'past_month'\n\t| 'past_quarter'\n\t| 'past_year'\n\t| 'custom_period'\n\t| 'all';\n\nexport type MetricAggregateType =\n\t| [alias: string, formula: string]\n\t| [alias: string, col: string, func: string];\n\nexport type InputTableMetricAggregateType = Record<string, [string, string]>;\n\nexport type ProjectFractionType =\n\t| 'FRACTION_OF_COL_TOTAL'\n\t| 'FRACTION_OF_ROW_TOTAL'\n\t| 'FRACTION_OF_GRAND_TOTAL';\n\nexport enum ProjectFractionEnum {\n\tFRACTION_OF_COL_TOTAL = 'FRACTION_OF_COL_TOTAL',\n\tFRACTION_OF_ROW_TOTAL = 'FRACTION_OF_ROW_TOTAL',\n\tFRACTION_OF_GRAND_TOTAL = 'FRACTION_OF_GRAND_TOTAL',\n\tNONE = 'null',\n\tTOTAL_OF_FORMULA = 'TOTAL_OF_FORMULA',\n\tTOTAL_OF_AGGREGATE = 'TOTAL_OF_AGGREGATE'\n}\n\nexport type ProjectAsType = {\n\t[valueColName: string]: ProjectFractionType;\n};\n\nexport type MetricSeries = BaseTransform & {\n\ttable: string;\n\tdate_column: string;\n\taggregates: MetricAggregateType[];\n\tformula_on_aggregates: [alias: string, formula: string][];\n\tfilter_on_aggregates?: FilterRule;\n\tbin_by: string; // because we are passing it as variable now\n\tgroup_by: string[] | string;\n\trow_group_by?: string[] | string;\n\tcol_group_by?: string[] | string;\n\trequire_totals?: boolean;\n\tproject_as?: string | ProjectAsType; // because we are passing it as variable now\n\tshow_dimension_mapping_values?: boolean;\n\tbin_order_by_desc?: boolean; // because we are passing it as variable now\n\tgroups_sort_order?: [string, 'asc' | 'desc'][];\n};\n\nexport type Load = {\n\tloc: string;\n\tto: string;\n\tfs_options: any;\n};\n\nexport type Import = {\n\tloc: string;\n\tto: string;\n\timport_type: 'dataset' | 'definition';\n\tfrom_var?: string;\n\tdate_column_filter?:\n\t\t| {\n\t\t\t\ttime_period: DateRange;\n\t\t\t\tstart_date?: string;\n\t\t\t\tend_date?: string;\n\t\t }\n\t\t| string;\n\tto_currency?: string;\n\trate_type?: string;\n};\n\nexport type AddColumn = BaseTransform & {\n\ttype: 'AddColumn';\n\ttable: string;\n\n\tcol: string;\n\n\texpr: string;\n};\nexport type ManageColumns = BaseTransform & {\n\ttype: 'ManageColumns';\n\ttable: string;\n\tcols: string[];\n};\n\nexport type RenameColumn = BaseTransform & {\n\ttype: 'RenameColumn';\n\ttable: string;\n\n\t//TODO : Check fxRuntime Types\n\tcol: string;\n\n\tbefore: string;\n\n\tafter: string;\n};\n\nexport type SourceDataset = BaseTransform & {\n\ttype: 'SourceDataset';\n\ttable: string;\n\tcols: string[];\n};\n\nexport type View = BaseTransform & {\n\ttype: 'View';\n\ttable: string;\n\tcols: string[] | string;\n};\n\ntype RuleType = 'or_cond' | 'and_cond' | 'cond';\n\nexport type RuleOp =\n\t| 'starts_with'\n\t| 'ends_with'\n\t| 'like'\n\t| 'contains'\n\t| 'equal'\n\t| 'greater'\n\t| 'greater_equal'\n\t| 'less'\n\t| 'less_equal'\n\t| 'in_op';\n\nexport type FilterRule = {\n\trule_type: RuleType;\n\tcol?: string;\n\toperator?: RuleOp;\n\tvalue?: string | number | boolean | string[];\n\trules?: FilterRule[];\n\tis_not: boolean;\n\tis_empty?: boolean;\n\tis_null?: boolean;\n\tis_case_sensitive: boolean;\n\tignore_if_col_not_exists?: boolean;\n\tfilter_mode?: 'condition' | 'values';\n};\n\nexport type Filter = BaseTransform & {\n\ttable: string;\n\texpr: string;\n};\n\nexport type RuleFilter = BaseTransform & {\n\ttable: string;\n\trule: ColumnFilterRule | string;\n};\n\nexport type Sort = BaseTransform & {\n\ttable: string;\n\n\tcol: string[];\n\n\tasc: boolean[];\n\n\tpivot_inputs: {\n\t\tpivot_filters: FilterRule[];\n\t\tpivot_columns: string[];\n\t\tpivot_groups: { [key: string]: 'ASC' | 'DESC' };\n\t};\n};\n\nexport type Metric = BaseTransform & {\n\ttable: string;\n\n\taggregates: Aggregates;\n\n\tgroup_by: string | string[];\n};\n\nexport type Merge = BaseTransform & {\n\ttables: string[];\n};\n\nexport type JoinTransformHow = 'left' | 'right';\n\nexport type Join = BaseTransform & {\n\tleft: string;\n\n\tright: string;\n\n\tleft_on: string;\n\n\tright_on: string;\n\n\thow: JoinTransformHow;\n\n\tallow_duplication: boolean;\n\n\tright_cols?: string[];\n\n\tright_aliases?: string[];\n};\n\nexport type Transform<T extends BaseTransform> = T;\nexport type TransformStrings =\n\t| 'addColumn'\n\t| 'renameColumn'\n\t| 'view'\n\t| 'join'\n\t| 'metric'\n\t| 'filter'\n\t| 'sort'\n\t| 'merge'\n\t| 'pivot'\n\t| 'metric'\n\t| 'metricseries';\nexport type AvailableTransform =\n\t| AddColumn\n\t| RenameColumn\n\t| View\n\t| Filter\n\t| Sort\n\t| Metric\n\t| Merge\n\t| Join\n\t| Pivot\n\t| MetricSeries\n\t| RuleFilter;\n\nexport type Variable = {\n\tname: string;\n\ttransforms: AvailableTransform[];\n};\n\nexport type Aggregates = Record<string, string[]>;\n\nexport type Permission = any;\n\ntype Principal = {\n\tname: string;\n\n\tptype: string;\n};\n\nexport type Export = {\n\ttable: string;\n\n\tassignments?: (Principal | Permission[])[];\n\n\tentry_key: string;\n\n\ttags?: string[];\n};\n\nexport type TableColMap = {\n\ttables: any[];\n\tcolumns: Record<string, string[]>;\n};\n\ntype ColId = string;\nexport type Inputs = {\n\t[key: string]: any;\n};\n\nexport type Table = { data: any[]; to: string };\nexport type Definition = {\n\tinputs?: {\n\t\t[key: string]: any;\n\t};\n\taliases?: {\n\t\t[tableName: string]: { [alias: string]: ColId };\n\t};\n\timports?: Import[];\n\n\tloads?: Load[];\n\n\tvariables?: Variable[];\n\n\tpermissions?: Permission[];\n\n\texports?: Export[];\n\n\ttables?: Table[];\n\n\tsections?: Section[];\n};\n\nexport type DescriptionResultWithUniqueCount = {\n\tname: string;\n\tdata_type:\n\t\t| 'str'\n\t\t| 'f64'\n\t\t| 'i64'\n\t\t| 'date'\n\t\t| \"datetime(time_unit='us', time_zone=None)\"\n\t\t| 'datetime'\n\t\t| 'bool'\n\t\t| 'boolean'\n\t\t| 'Boolean';\n\tcount: number;\n\tunique_count: number;\n\tis_currency_column: boolean;\n\tdatasetId: string;\n\tdatasetName: string;\n};\n\nexport type DescriptionResultWithoutUniqueCount = {\n\tname: string;\n\tdata_type: string;\n\tis_currency_column: boolean;\n\tdatasetId: string;\n\tdatasetName: string;\n};\n\nexport type DescriptionResult =\n\t| DescriptionResultWithoutUniqueCount\n\t| DescriptionResultWithUniqueCount;\n\nconst CURRENT_WEEK = 'current_week';\nconst CURRENT_MONTH = 'current_month';\nconst CURRENT_QUARTER = 'current_quarter';\nconst CURRENT_YEAR = 'current_year';\nconst PREV_WEEK = 'previous_week';\nconst PREV_MONTH = 'previous_month';\nconst PREV_QUARTER = 'previous_quarter';\nconst PREV_YEAR = 'previous_year';\nconst PAST_WEEK = 'past_week';\nconst PAST_MONTH = 'past_month';\nconst PAST_QUARTER = 'past_quarter';\nconst PAST_YEAR = 'past_year';\nconst CUSTOM = 'custom_period';\n\nexport type FormatRule = {\n\tid: string;\n\trule_type: RuleType;\n\tcol: string;\n\toperator: RuleOp;\n\tvalue: string | number | Date;\n\t// rules?: FilterRule[];\n\tis_not: boolean;\n\tcolor_hex: [string, string];\n\tcase_sensitive: boolean;\n};\n\nexport type GroupByHierarchyType = {\n\talias: string;\n\ttype: string;\n\tlookup_col: string;\n\ttable: string;\n\tlevel?: number;\n\tparent?: string;\n\tfilter: FilterRule;\n\tinclude_parents: boolean;\n\tuse_as: string;\n};\n","import { generatePushID } from \"$models/common/pushId\";\nimport {\n getFxUdescribeApi,\n getFxUniqueColumnValuesApi,\n runDefinitionApi,\n runPublishedDefinitionApi,\n} from \"$models/fx/fxApi\";\nimport type { DatasetImportMetadata } from \"$models/gen/Api\";\nimport type { SelectOptionType } from \"$models/types/selectType\";\nimport type { BlockSheetCustomModel } from \"$models/ui-models/dashboardModel\";\nimport type { DateRange } from \"$models/ui-models/dateRangeModel\";\nimport {\n ProjectFractionEnum,\n Transform,\n Sort,\n type Definition,\n type DescriptionResult,\n type DescriptionResultWithUniqueCount,\n type Import,\n type Inputs,\n type RuleFilter,\n type TimeBin,\n type Variable,\n type View,\n MetricSeries,\n} from \"$models/ui-models/definitionModel\";\nimport type {\n CommonFilter,\n FilterPanelStoreType,\n FilterRule,\n FilterSelectOptionsType,\n FilterUniqueValueSelectOptionsType,\n RuleType,\n} from \"$models/ui-models/filterModel\";\nimport {\n CustomCalculationShowAsEnum,\n ShowAsEnum,\n WorkbookCustomModel,\n type ColumnSetting,\n type FilterColumnsBy,\n type GridColumnState,\n type MetricCustomModel,\n type MetricMetadataType,\n type PivotCustomModel,\n type Sheet,\n type SortOptions,\n type ValueColsType,\n} from \"$models/ui-models/workbookModel\";\n\nimport _ from \"lodash\";\nimport { findVariable } from \"./variableUtils\";\nimport { buildVariable } from \"./buildVariable\";\nimport {\n filterToSelectOptionType,\n getAggregateFilterRuleFromCombinedFilterRule,\n getColumnFilterRuleFromCombinedFilterRule,\n getSelectOptionTypeToFilter,\n} from \"./filterUtils\";\nimport { getInputName } from \"./inputNameUtil\";\nimport { getDisplayName } from \"./displayNamesUtil\";\nimport type {\n LimitOptions,\n RowGroupsType,\n} from \"$models/ui-models/workbookModel\";\n\nexport type MetricToolPanelType = {\n pivotCols: string[];\n rowGroupCols: RowGroupsType;\n valueCols: ValueColsType[];\n sortOptions: SortOptions;\n limitOptions: LimitOptions;\n filterModel: FilterRule | [];\n dateRange?: DateRange;\n timeBin: TimeBin | \"\";\n currency?: string;\n compareTrends?: Array<{\n id: string;\n name: string;\n dateRange: DateRange;\n }>;\n showDimensionMappingValues?: boolean;\n plotAsTrendsOrder?: \"asc\" | \"desc\" | \"none\";\n showBinSortOrderValues?: boolean;\n};\n\nconst getValuesForSpecialOperators = (op: string) => {\n switch (op) {\n case \"not_equal\":\n return { operator: \"equal\", isNot: true };\n case \"not_contains\":\n return { operator: \"contains\", isNot: true };\n case \"is_empty\":\n return { value: \"\", operator: \"equal\", isNot: false };\n case \"is_not_empty\":\n return { value: \"\", operator: \"equal\", isNot: true };\n case \"is_null\":\n return { value: null, operator: \"equal\", isNot: false };\n case \"is_not_null\":\n return { value: null, operator: \"equal\", isNot: true };\n default:\n return {};\n }\n};\n\nexport const getPivotGridData = async (props: {\n inputs: Inputs;\n definitionModel: Definition;\n variableName: string;\n valueCols?: ValueColsType[];\n}) => {\n const { inputs, definitionModel, variableName, valueCols } = props;\n\n return runDefinitionApi(inputs, definitionModel, variableName);\n};\n\nexport const replaceFilterColumn = (props: {\n fr: FilterSelectOptionsType[];\n column: SelectOptionType<ColumnSetting>;\n}) => {\n const { fr, column } = props;\n\n const updatedFr = _.map(fr, (f) => {\n let newFr = { ...f, label: column?.label, value: column?.value };\n if (newFr.option.uniqueValues) {\n _.map(newFr.option.uniqueValues, (u) => {\n u.label = column?.label;\n u.value = column?.value;\n });\n }\n return newFr;\n });\n\n return updatedFr;\n};\n\nexport const mergeCommonFilters = (props: {\n commonFilters: CommonFilter[];\n rule: FilterSelectOptionsType[];\n condition: RuleType;\n lineId: string;\n}) => {\n const { commonFilters, rule, lineId, condition } = props;\n let replacedFr: FilterSelectOptionsType[][] = [];\n if (_.isEmpty(commonFilters)) return { defaultType: condition, rules: rule };\n _.forEach(commonFilters, (f: CommonFilter) => {\n const columnSettingsSelectOption = [\n {\n label: f.name,\n value: f.column.name,\n option: {\n headerName: f.name,\n field: f.column.name,\n type: f.column.data_type,\n datasetName: f.datasetName,\n datasetId: f.datasetId,\n },\n },\n ];\n\n // check if applied on the line\n const appliedOnLine = _.find(\n f?.appliedOnBlocks,\n (l) => l.blockId === lineId,\n ) as {\n blockId: string;\n applied: boolean;\n blockName: string;\n column: string;\n columnSettings: SelectOptionType<ColumnSetting>[];\n };\n if (appliedOnLine && appliedOnLine.applied) {\n const commonRule = f.rule;\n const fr = filterToSelectOptionType(\n commonRule,\n columnSettingsSelectOption,\n );\n const columnSetting = _.find(\n appliedOnLine.columnSettings,\n (c) => c.value === appliedOnLine.column,\n );\n if (columnSetting) {\n replacedFr.push(\n replaceFilterColumn({ fr: fr.rules, column: columnSetting }),\n );\n }\n }\n });\n\n const mergedFr = _.unionBy(replacedFr.flat(), rule, \"value\");\n\n return { defaultType: condition, rules: mergedFr };\n};\n\nexport const getUniqueValues = async (\n column: string[],\n sheetDetails?: {\n sheetId: string;\n inputs: Inputs;\n definitionModel: Definition;\n parentTableVariable: string;\n },\n uniqueValues?: any,\n uniqueValueStore?: any,\n storeSelectOptions?: boolean,\n): Promise<string[]> => {\n const uValStr = uniqueValues ?? { uniqueValues: {} };\n\n if (column && column[0] && sheetDetails) {\n if (\n sheetDetails.sheetId in uValStr?.uniqueValues &&\n column[0] in uValStr?.uniqueValues?.[sheetDetails.sheetId]\n ) {\n return uValStr?.uniqueValues[sheetDetails.sheetId][column[0]];\n }\n\n /**\n * removing filters to get all unique values. also make sure the variable being called is not a view variable.\n * This is because user might have hidden the column in the view variable, but added it as a filter.\n */\n let inputs = _.reduce(\n Object.entries(sheetDetails?.inputs || {}),\n (acc, [key, value]) => {\n if (_.includes(key, \"rule_\")) {\n acc[key] = defaultFilterRule;\n } else {\n acc[key] = value;\n }\n return acc;\n },\n {} as Record<string, any>,\n );\n\n inputs = {\n ...inputs,\n projectAsInput: {},\n rowGroupByInput: [],\n columnGroupByInput: [],\n groupByInput: [],\n filterOnAggregates: [],\n showDimensionMappingValues: inputs.showDimensionMappingValues ?? false,\n showBinSortOrderValues: inputs.showBinSortOrderValues ?? false,\n groupsSortOrder: [],\n };\n\n let variableName = sheetDetails?.parentTableVariable;\n const variables = sheetDetails?.definitionModel?.variables;\n\n const calledVariable = _.find(variables, (v) => v.name === variableName);\n if (calledVariable?.transforms[0]?.type === \"View\") {\n variableName = (calledVariable?.transforms[0] as View)?.table;\n }\n\n const uniqueValues = (\n await getFxUniqueColumnValuesApi(\n inputs,\n sheetDetails.definitionModel,\n variableName,\n column,\n )\n )?.data;\n\n if (storeSelectOptions) {\n const selectOptions = _.map(uniqueValues[column[0]], (uv) => ({\n label: uv,\n value: uv,\n }));\n uniqueValueStore.updateUniqueValues(sheetDetails.sheetId, {\n [column[0]]: selectOptions,\n });\n } else {\n uniqueValueStore.updateUniqueValues(sheetDetails.sheetId, uniqueValues);\n }\n return uniqueValues[column[0]];\n }\n\n return [];\n};\n\nexport const _getAggregates = (valueCols: ValueColsType[]) => {\n return valueCols.map((vc: ValueColsType) => {\n if (vc.formula) {\n //first param should be the label\n return [vc.label ?? vc.col, vc.formula];\n }\n //first param should be the label, second param should be the column id\n return [vc.label ?? vc.col, vc.col, vc.aggFun];\n });\n};\n\nconst getParentTableVariableType = (\n childId: string,\n variables: Variable[],\n): Variable | undefined => {\n const parentTableVariable = _.find(variables, (v) => v.name === childId);\n return parentTableVariable;\n};\n\nexport const findParentIsMetricSeries = (\n childId: string,\n variables: Variable[],\n): boolean => {\n const parentTableVariable = getParentTableVariableType(childId, variables);\n if (parentTableVariable?.transforms[0]?.type === \"MetricSeries\") {\n return true;\n } else if (parentTableVariable?.transforms[0]) {\n const transform = parentTableVariable.transforms[0] as { table?: string };\n return findParentIsMetricSeries(\n transform.table as string,\n variables,\n );\n }\n return false;\n};\n\nexport const ShowAsToProjectFractionMapper: Partial<\n Record<ShowAsEnum | CustomCalculationShowAsEnum, ProjectFractionEnum>\n> = {\n [ShowAsEnum.ROW]: ProjectFractionEnum.FRACTION_OF_ROW_TOTAL,\n [ShowAsEnum.COLUMN]: ProjectFractionEnum.FRACTION_OF_COL_TOTAL,\n [ShowAsEnum.GRAND_TOTAL]: ProjectFractionEnum.FRACTION_OF_GRAND_TOTAL,\n [CustomCalculationShowAsEnum.NONE]: ProjectFractionEnum.FRACTION_OF_ROW_TOTAL,\n [CustomCalculationShowAsEnum.FORMULA]: ProjectFractionEnum.TOTAL_OF_FORMULA,\n [CustomCalculationShowAsEnum.AGGREGATE]:\n ProjectFractionEnum.TOTAL_OF_AGGREGATE,\n};\n\nexport const getDefinitionModelAndVariableNameForPivot = (props: {\n pivotSheet: Sheet<PivotCustomModel>;\n rowsToGroupBy: string[];\n valueCols: ValueColsType[];\n sortOptions: SortOptions;\n timeBin?: TimeBin | \"\";\n dateRange: DateRange;\n dateColumn?: string;\n pivotCols: string[];\n currency?: string;\n rateType?: string;\n compareTrends?: Array<{\n id: string;\n name: string;\n dateRange: DateRange;\n }>;\n showDimensionMappingValues?: boolean;\n showBinSortOrderValues?: boolean;\n}) => {\n const {\n pivotSheet,\n rowsToGroupBy,\n timeBin,\n dateColumn,\n dateRange,\n pivotCols,\n currency,\n rateType,\n sortOptions,\n compareTrends,\n showDimensionMappingValues,\n showBinSortOrderValues,\n } = props;\n const valueCols = props.valueCols.filter((vc) => vc.type !== \"column\") ?? [];\n const newCols = props.valueCols.filter((vc) => vc.type === \"column\") ?? [];\n let variableName = generatePushID();\n const pivotDefinitionModel = pivotSheet.definitionModel as Definition;\n let variables: Variable[] = pivotDefinitionModel.variables || [];\n const pivotVariable: Variable | undefined = variables.find(\n (v) => v.transforms[0].type === \"MetricSeries\",\n );\n const filterVariable: Variable | undefined = variables.find(\n (v) =>\n v.transforms[0].type === \"RuleFilter\" &&\n (v.transforms[0] as RuleFilter).rule === \"${\" + `rule_pivot` + \"}\",\n );\n\n if (pivotVariable) {\n variableName = pivotVariable.name;\n }\n const parentTableVariable = pivotSheet.customModel?.variable;\n\n if (!_.isEmpty(valueCols)) {\n const rowGroups = _.filter(rowsToGroupBy[0], (r) => !pivotCols.includes(r));\n const variableObject = buildVariable(\"metric\", {\n name: variableName,\n table: filterVariable?.name,\n properties: {\n valueCols,\n rowGroups,\n customCalculation: newCols,\n },\n });\n\n if (pivotVariable) {\n variables = variables.map((v) => {\n if (v.transforms[0].type === \"MetricSeries\") {\n return variableObject;\n }\n return v;\n });\n } else {\n variables = [\n ...variables.filter(\n (vr: Variable) => vr.transforms[0].type !== \"Metric\",\n ),\n variableObject,\n ];\n }\n\n const ruleFilterVariable = _.find(variables, (v) =>\n v.name.startsWith(\"rule_filter_\"),\n );\n // Search for Workbook Sort Variable\n let { variable: workbookSortVariable, index: workbookSortVariableIndex } =\n findVariable(variables, ruleFilterVariable?.name || \"\", \"Sort\");\n\n if (workbookSortVariable) {\n if (workbookSortVariableIndex !== -1) {\n const sortTransformTable = (workbookSortVariable.transforms[0] as Sort)\n .table;\n variables = variables.map((v) => {\n // @ts-ignore\n if (v.transforms[0]?.table === workbookSortVariable.name) {\n return {\n ...v,\n transforms: [\n {\n ...v.transforms[0],\n table: sortTransformTable,\n },\n ],\n };\n }\n return v;\n });\n variables.splice(workbookSortVariableIndex, 1);\n }\n }\n // Search for Metric Sort Variable\n let { variable: sortVariable, index: sortVariableIndex } = findVariable(\n variables,\n pivotSheet.customModel?.variable || \"\",\n \"Sort\",\n (variable) => variable.name.startsWith(\"rule_filter_\"), // Terminate search when rule_filter variable is reached to prevent matching the Workbook Sort variable\n );\n\n let inputsArray: any[] = [];\n let inputsCompareTrendsIndices: Array<{ id: string; index: number }> = [];\n const projectAsInput = _.reduce(\n props.valueCols,\n (acc, curr) => {\n if (curr.showAs && curr.showAs !== ShowAsEnum.DEFAULT && curr.label) {\n const mappedValue = ShowAsToProjectFractionMapper[curr.showAs];\n if (mappedValue) {\n acc[curr.label] = mappedValue;\n }\n }\n return acc;\n },\n {} as Record<string, ProjectFractionEnum>,\n );\n\n if (!_.isEmpty(pivotCols)) {\n const pc = timeBin ? [dateColumn, ...pivotCols] : pivotCols;\n\n pc?.forEach((col, index) => {\n const groupByInput = rowsToGroupBy[index];\n const columnGroupByInput = _.filter(groupByInput, (r) =>\n pc.includes(r),\n );\n const rowGroupByInput = _.filter(groupByInput, (r) => !pc.includes(r));\n\n inputsArray.push({\n ...pivotSheet.customModel?.inputs,\n // valueColsInput: aggregates,\n date_range: { ...dateRange },\n groupByInput: rowsToGroupBy[index],\n columnGroupByInput,\n rowGroupByInput,\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n to_currency: currency,\n rate_type: rateType ?? '',\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(groupByInput, (r) => [r, \"asc\"]),\n });\n });\n } else {\n if (compareTrends && compareTrends.length > 0) {\n inputsArray = _.map(compareTrends, (ct, index) => {\n inputsCompareTrendsIndices.push({ id: ct.id, index });\n return {\n ...pivotSheet.customModel?.inputs,\n // valueColsInput: aggregates,\n date_range: { ...ct.dateRange },\n groupByInput: rowsToGroupBy[0],\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n to_currency: currency,\n rate_type: rateType ?? '',\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n };\n });\n } else {\n inputsArray = [\n {\n ...pivotSheet.customModel?.inputs,\n // valueColsInput: aggregates,\n date_range: { ...dateRange },\n groupByInput: rowsToGroupBy[0],\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n to_currency: currency,\n rate_type: rateType ?? '',\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n },\n ];\n }\n }\n const newColAliases = _.reduce(\n newCols,\n (acc, curr) => {\n if (curr.label) {\n acc[curr.label] = curr.col;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n\n if (sortOptions?.sortByField) {\n const allSortVariables = _.filter(\n variables,\n (v) => v.transforms[0].type === \"Sort\",\n );\n const metricSortVariables = _.filter(allSortVariables, (v) => {\n //@ts-ignore\n return findParentIsMetricSeries(v.transforms[0].table, variables);\n });\n // remove the metricSortVariables from variables\n variables = _.filter(variables, (v) => !metricSortVariables.includes(v));\n\n const sortVariableName = generatePushID();\n const sortPivotFilterRule = {\n rule_type: \"or_cond\",\n rules: [\n {\n rule_type: \"or_cond\",\n rules: [\n {\n col: dateColumn,\n value: sortOptions.pivotFilters ?? [],\n operator: \"in_op\",\n rule_type: \"cond\",\n is_not: false,\n is_case_sensitive: true,\n },\n ],\n is_not: false,\n },\n ],\n };\n const sortPivotInputs = _.isEmpty(timeBin)\n ? undefined\n : {\n pivot_filters: [sortPivotFilterRule as FilterRule],\n pivot_columns: [...rowGroups, ...pivotCols],\n pivot_groups: {\n [`${dateColumn}_group`]: showBinSortOrderValues ? \"DESC\" : \"ASC\",\n },\n };\n\n inputsArray = inputsArray.map((i) => {\n const newInputs = { ...i };\n Object.keys(newInputs).forEach((key) => {\n if (key.startsWith(\"sortPivotInputs_\")) {\n delete newInputs[key];\n }\n });\n return newInputs;\n });\n\n sortVariable = buildVariable(\"sort\", {\n name: sortVariableName,\n table: variableName,\n properties: {\n col: [sortOptions.sortByField.label],\n asc: [sortOptions.sortByOrder === \"asc\"],\n pivot_inputs: sortPivotInputs\n ? `\\${sortPivotInputs_${sortVariableName}}`\n : undefined,\n },\n });\n variableName = sortVariableName;\n variables = [...variables, sortVariable];\n\n if (inputsArray?.length > 0) {\n inputsArray = inputsArray.map((i) => ({\n ...i,\n [`sortPivotInputs_${sortVariableName}`]: sortPivotInputs,\n }));\n }\n } else if (sortOptions?.sortByField === undefined && sortVariable) {\n const sortVariableIndex = variables.findIndex((v) => v === sortVariable);\n if (sortVariableIndex !== -1) {\n const sortTransformTable = (sortVariable.transforms[0] as Sort).table;\n variables = variables.map((v) => {\n // @ts-ignore\n if (v.transforms[0]?.table === sortVariable.name) {\n return {\n ...v,\n transforms: [\n {\n ...v.transforms[0],\n table: sortTransformTable,\n },\n ],\n };\n }\n return v;\n });\n variables.splice(sortVariableIndex, 1);\n }\n\n if (inputsArray?.length > 0) {\n inputsArray = inputsArray.map((i) => {\n const newInputs = { ...i };\n Object.keys(newInputs).forEach((key) => {\n if (key.startsWith(\"sortPivotInputs_\")) {\n delete newInputs[key];\n }\n });\n return newInputs;\n });\n }\n variables = variables.filter((v) => v.transforms[0]?.type !== \"Sort\");\n }\n\n const definitionModel = {\n ...pivotDefinitionModel,\n aliases: {\n ...pivotDefinitionModel.aliases,\n [variableName]: {\n ...(pivotDefinitionModel.aliases && parentTableVariable\n ? pivotDefinitionModel.aliases[parentTableVariable]\n : {}),\n ...newColAliases,\n },\n },\n variables: [...variables],\n } as Definition;\n\n return {\n inputs: inputsArray,\n definitionModel,\n variableName,\n inputsCompareTrendsIndices,\n };\n }\n return {\n inputs: pivotSheet.customModel?.inputs || [],\n definitionModel: pivotDefinitionModel,\n variableName,\n };\n};\n\nexport const getFilterSelectOptionsMap = (fSO: FilterSelectOptionsType[]) =>\n fSO.reduce(\n (acc, curr) => {\n if (curr.value) {\n acc[curr.value] = curr;\n }\n return acc;\n },\n {} as { [filterId: string]: FilterSelectOptionsType },\n );\n\nexport const getDrilldownFiltersMap = (props: {\n filtersToBeApplied: Array<{\n field: string;\n key: string | number;\n type?: string;\n startDate?: string;\n endDate?: string;\n operator?: string;\n }>;\n columnSelectOptions: SelectOptionType[];\n}) => {\n const { filtersToBeApplied, columnSelectOptions } = props;\n\n let filterMap: { [id: string]: FilterSelectOptionsType } = {};\n\n const filterGroup = _.groupBy(filtersToBeApplied, \"field\");\n\n _.forEach(filterGroup, (fg) => {\n let uniqueValues: FilterUniqueValueSelectOptionsType[] = [];\n const col = columnSelectOptions?.find(\n (c: SelectOptionType) =>\n c.value === fg[0].field ||\n c.value === `${fg[0].field}_group` ||\n c.label === fg[0].field,\n );\n let ruleType: RuleType = \"cond\";\n _.forEach(\n fg,\n (ftba: {\n field: string;\n key: string | number;\n type?: string;\n startDate?: string;\n endDate?: string;\n operator?: string;\n }) => {\n if (ftba.operator) {\n let uniqueValuesForNegationOperator, uniqueValuesForOperator;\n if (ftba.operator.includes(\"not\")) {\n uniqueValuesForNegationOperator = getValuesForSpecialOperators(\n ftba.operator,\n );\n uniqueValuesForOperator = [\n {\n label: col?.label,\n value: col?.value,\n option: {\n uniqueValue: ftba.key,\n ruleType: \"cond\",\n operator: uniqueValuesForNegationOperator.operator,\n isNot: uniqueValuesForNegationOperator.isNot,\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n } else {\n uniqueValuesForOperator = [\n {\n label: col?.label,\n value: col?.value,\n option: {\n uniqueValue: ftba.key,\n ruleType: \"cond\",\n operator: ftba.operator,\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n }\n uniqueValues.push(...uniqueValuesForOperator);\n ruleType = \"and_cond\";\n } else if (ftba.type === \"date\") {\n const uniqueValuesForDate = [\n {\n label: col?.label,\n value: col?.value?.replace(\"_group\", \"\"),\n option: {\n uniqueValue: ftba.startDate,\n ruleType: \"cond\",\n operator: \"greater_equal\",\n },\n },\n {\n label: col?.label,\n value: col?.value?.replace(\"_group\", \"\"),\n option: {\n uniqueValue: ftba.endDate,\n ruleType: \"cond\",\n operator: \"less_equal\",\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n uniqueValues.push(...uniqueValuesForDate);\n ruleType = \"or_cond\";\n } else {\n // build uniquevalues for filter variable\n const uniqueValuesForSelection = [\n {\n label: col?.label || \"\",\n value: col?.value,\n option: {\n uniqueValue: ftba.key,\n ruleType: \"cond\",\n operator: \"equal\",\n },\n },\n ] as FilterUniqueValueSelectOptionsType[];\n\n uniqueValues.push(...uniqueValuesForSelection);\n }\n },\n );\n const fiterSelectOption: FilterSelectOptionsType = {\n label: col?.label || \"\",\n value: col?.value,\n option: {\n uniqueValues,\n ruleType: ruleType,\n uniqueValueCount: col?.option.uniqueCount,\n type: col?.option.type,\n },\n };\n\n filterMap = {\n ...filterMap,\n [col?.value]: fiterSelectOption,\n };\n });\n\n return filterMap;\n};\n\nexport const getFilterRulesFromMap = (filterMap: {\n [filterId: string]: FilterSelectOptionsType;\n}) => {\n let filterSelectOption = [];\n\n for (const pf of Object.values(filterMap)) {\n filterSelectOption.push(pf);\n }\n\n return getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: filterSelectOption,\n });\n};\n\nexport const getFiltersToBeAppliedOnDrilldown = (props: {\n rowGroups: string[];\n groupKeys: string[];\n}) => {\n const { rowGroups, groupKeys } = props;\n const filtersToBeApplied: { field: string; key: string }[] = [];\n groupKeys?.forEach((key, index) =>\n filtersToBeApplied.push({ field: rowGroups[index], key }),\n );\n return filtersToBeApplied;\n};\n\nexport const getMetricFilterRule = (inputs: Inputs | Inputs[]) => {\n const isInputsArray = Array.isArray(inputs);\n const input = isInputsArray ? inputs[0] : inputs;\n return input?.[\"rule_pivot\"] ?? defaultFilterRule;\n};\n\nexport const getDrilldownModels = (props: {\n filtersToBeApplied: { field: string; key: string }[];\n sheetDefinitionModel: Definition;\n sheetInputs: Inputs;\n sheetVariableName: string;\n columnSelectOptions: SelectOptionType[];\n}) => {\n const {\n filtersToBeApplied,\n sheetDefinitionModel,\n sheetInputs,\n sheetVariableName,\n columnSelectOptions,\n } = props;\n let variables = sheetDefinitionModel.variables;\n\n const metricFilterRule: FilterRule = getMetricFilterRule(sheetInputs);\n const metricFilterRuleSelectOptions = filterToSelectOptionType(\n metricFilterRule,\n columnSelectOptions,\n );\n\n const drilldownFilterMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const mergedRule = _.unionBy(\n Object.values(drilldownFilterMap),\n metricFilterRuleSelectOptions.rules,\n \"value\",\n );\n\n const filterRule: FilterRule = getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: mergedRule,\n });\n\n // current sheet inputs\n\n let inputs = sheetInputs.map((sI: Inputs) => {\n const rowGroupByInput = _.filter(sI.rowGroupByInput, (r) =>\n sI.groupByInput.includes(r),\n );\n const columnGroupByInput = _.filter(sI.columnGroupByInput, (r) =>\n sI.groupByInput.includes(r),\n );\n return {\n ...sI,\n [\"rule_pivot\"]: filterRule,\n rowGroupByInput,\n columnGroupByInput,\n };\n });\n\n const definitionModel = { ...sheetDefinitionModel, variables };\n\n return {\n drilldownTableDefinitionModel: definitionModel,\n drilldownTableVariableName: sheetVariableName,\n drilldownTableInputs: inputs,\n };\n};\n\nexport const getAmChartGroup = (props: {\n drilldownLevel: string[];\n clickedColumn: string;\n}) => {\n const { clickedColumn, drilldownLevel } = props;\n let group: string[] = [];\n\n const clickedColumnIndex = drilldownLevel.indexOf(clickedColumn);\n group = drilldownLevel.slice(clickedColumnIndex + 1);\n\n return group;\n};\n\nexport const getDataForDrilldown = async (props: {\n drilldownFiltersToBeAppliedOnChart: { field: string; key: string }[];\n sheetDefinitionModel: Definition;\n sheetInputs: Inputs;\n sheetVariableName: string;\n columnSelectOptions: SelectOptionType[];\n}) => {\n const {\n drilldownFiltersToBeAppliedOnChart,\n sheetDefinitionModel,\n sheetInputs,\n sheetVariableName,\n columnSelectOptions,\n } = props;\n let {\n drilldownTableDefinitionModel,\n drilldownTableVariableName,\n drilldownTableInputs,\n } = getDrilldownModels({\n filtersToBeApplied: drilldownFiltersToBeAppliedOnChart,\n sheetDefinitionModel: sheetDefinitionModel,\n sheetInputs: sheetInputs,\n sheetVariableName: sheetVariableName,\n columnSelectOptions: columnSelectOptions,\n });\n\n drilldownTableInputs = Array.isArray(drilldownTableInputs)\n ? drilldownTableInputs[0]\n : drilldownTableInputs;\n\n try {\n const data = (\n await runDefinitionApi(\n drilldownTableInputs,\n drilldownTableDefinitionModel,\n drilldownTableVariableName,\n )\n ).data;\n\n return data;\n } catch (error) {\n throw error;\n }\n};\n\nexport const updateWorksheetAndMetricFilterMapForDrilldown = (props: {\n sheetInputs: Inputs;\n filterVariable: Variable[];\n columnSelectOptions: SelectOptionType[];\n}) => {\n const { sheetInputs, filterVariable, columnSelectOptions } = props;\n\n let worksheetFilterMap = {};\n let metricFilterMap = {};\n\n filterVariable.forEach((fv: Variable) => {\n const transform = fv.transforms[0] as RuleFilter;\n const tRule = getInputName(transform.rule as string);\n const sheetFilterRule: FilterRule = sheetInputs[tRule];\n const sheetFilterSelectOption = filterToSelectOptionType(\n sheetFilterRule,\n columnSelectOptions,\n );\n if (tRule.includes(\"worksheet\")) {\n worksheetFilterMap = getFilterSelectOptionsMap(\n sheetFilterSelectOption?.rules,\n );\n } else {\n metricFilterMap = getFilterSelectOptionsMap(\n sheetFilterSelectOption?.rules,\n );\n }\n });\n\n return { ...worksheetFilterMap, ...metricFilterMap };\n};\n\nexport const getTableDrilldownModels = (props: {\n filtersToBeApplied: { field: string; key: string | number }[];\n sheetDefinitionModel: Definition;\n sheetInputs: Inputs;\n columnSelectOptions: SelectOptionType[];\n includesValueCols?: boolean;\n}) => {\n const {\n filtersToBeApplied,\n sheetDefinitionModel,\n sheetInputs,\n columnSelectOptions,\n } = props;\n\n // remove metric series variable from from definition model\n let variables = [...(sheetDefinitionModel.variables || [])];\n variables = variables.filter((variable: Variable) => {\n return variable?.transforms?.[0]?.type !== \"MetricSeries\";\n });\n\n // update parent table name in filter variable if exists\n // create a drill down filter variable\n\n let filterVariable = variables.filter((variable: Variable) => {\n return variable?.transforms?.[0]?.type === \"RuleFilter\";\n });\n\n const drilldownVariable = variables.find((v: Variable) => {\n const transform = v.transforms?.[0];\n if (\n transform?.type === \"RuleFilter\" &&\n typeof (transform as RuleFilter)?.rule === \"string\" &&\n ((transform as RuleFilter)?.rule as string)?.includes(\"rule_drillDown\")\n ) {\n return v;\n }\n });\n\n // updateWorksheetAndMetricFilterMapForDrilldown(currentSheetInputs, filterVariable);\n const variableName = drilldownVariable\n ? drilldownVariable.name\n : generatePushID();\n const tTableName = filterVariable[filterVariable.length - 1]?.name;\n const inputRuleVariable = `rule_drillDown`;\n\n const drilldownFiltersMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const drillDownFilterRule = getFilterRulesFromMap(drilldownFiltersMap);\n\n // current sheet inputs\n let inputs = { ...sheetInputs, [inputRuleVariable]: drillDownFilterRule };\n\n if (!drilldownVariable) {\n const drillDownFilterVariableObject = {\n name: variableName,\n transforms: [\n {\n table: tTableName,\n type: \"RuleFilter\",\n rule: \"${\" + inputRuleVariable + \"}\",\n },\n ],\n };\n variables = [...variables, drillDownFilterVariableObject];\n }\n const definitionModel = { ...sheetDefinitionModel, variables };\n\n return {\n drilldownTableDefinitionModel: definitionModel,\n drilldownTableVariableName: variableName,\n drilldownTableInputs: inputs,\n };\n};\n\nexport const getValueGroupsSelectOptions = (props: {\n valueCols: ValueColsType[];\n aliases: { [key: string]: string };\n}) => {\n const { valueCols, aliases } = props;\n const getLabel = (name: string) =>\n _.findKey(aliases, (o: string) => o === name);\n const getFormulaAggregateFn = (formula: string) => {\n return formula.substring(0, formula.indexOf(\"(\"));\n };\n\n const getFormulaValue = (formula: string) =>\n formula.substring(formula.indexOf(\"(\") + 1, formula.lastIndexOf(\")\"));\n\n const valGroups =\n valueCols?.map((valueCol) => {\n if (valueCol?.formula) {\n const aggFun =\n valueCol?.type && valueCol.type !== \"formula\"\n ? undefined\n : getFormulaAggregateFn(valueCol.formula);\n return {\n label: valueCol.col,\n value: valueCol.col,\n option: {\n formulaMode: true,\n aggFun,\n formula: getFormulaValue(valueCol.formula),\n fieldLabel: valueCol.col,\n impact: valueCol?.impact ?? \"positive\",\n type: valueCol?.type ?? \"formula\",\n currency: valueCol?.currency,\n precision: valueCol?.precision,\n isCurrency: valueCol?.isCurrency,\n isPercentage: valueCol?.isPercentage,\n isNumber: valueCol?.isNumber,\n showAs: valueCol?.showAs ?? \"default\",\n isAmortize: valueCol?.isAmortize ?? false,\n isHidden: valueCol?.hide ?? false,\n hideGrandTotal: valueCol?.hideGrandTotal ?? false,\n showRowTotal: valueCol?.showRowTotal ?? false,\n chartColorBasedOnImpact: valueCol?.chartColorBasedOnImpact ?? false,\n compactNotation: valueCol?.compactNotation,\n },\n };\n }\n\n return {\n label: valueCol.label,\n value: valueCol.col,\n option: {\n formulaMode: false,\n aggFun: valueCol.aggFun,\n fieldLabel: getLabel(valueCol.col) ?? valueCol.col,\n impact: valueCol?.impact ?? \"positive\",\n type: \"value\" as ValueColsType[\"type\"],\n currency: valueCol?.currency,\n precision: valueCol?.precision,\n isCurrency: valueCol?.isCurrency,\n isPercentage: valueCol?.isPercentage,\n isNumber: valueCol?.isNumber,\n showAs: valueCol?.showAs ?? \"default\",\n isHidden: valueCol?.hide ?? false,\n hideGrandTotal: valueCol?.hideGrandTotal ?? false,\n showRowTotal: valueCol?.showRowTotal ?? false,\n chartColorBasedOnImpact: valueCol?.chartColorBasedOnImpact ?? false,\n compactNotation: valueCol?.compactNotation,\n },\n };\n }) ?? [];\n return valGroups;\n};\n\nexport const getRowGroupsSelectOptions = (props: {\n rowGroups: Array<string | string[]>;\n columns: SelectOptionType[];\n}) => {\n const { rowGroups, columns } = props;\n let rowGroupsSelectOptions: any[] = [];\n rowGroups?.forEach((rgc: string | string[]) => {\n if (typeof rgc === \"string\") {\n const col = columns?.find((col) => col.value === rgc);\n rowGroupsSelectOptions = [...rowGroupsSelectOptions, col];\n } else {\n const rowLabel = rgc?.[0];\n const rowField = rgc?.[1]\n ?.split(\"(\")?.[1]\n ?.split(\",\")?.[0]\n ?.replace(/'/g, \"\");\n const col = columns?.find((col) => col.value === rowField);\n const updatedCol = {\n ...col,\n label: rowLabel,\n option: { ...col?.option, rowType: \"hierarchy\" },\n };\n\n rowGroupsSelectOptions = [...rowGroupsSelectOptions, { ...updatedCol }];\n }\n });\n return rowGroupsSelectOptions;\n};\n\nexport const getColumnGroupsSelectOptions = (props: {\n columnGroups: string[];\n columns: SelectOptionType[];\n}) => {\n const { columnGroups, columns } = props;\n let columnGroupsSelectOptions: any[] = [];\n columnGroups?.forEach((rgc: string) => {\n const col = columns?.find((col) => col.value === rgc);\n columnGroupsSelectOptions = [...columnGroupsSelectOptions, col];\n });\n return columnGroupsSelectOptions;\n};\n\nexport const removeDateColumnFromColRowGroupIfTrend = (props: {\n timeBin: TimeBin | \"\";\n pivotCols: string[];\n rowGroupCols: string[];\n dateColumn: string;\n}) => {\n const { timeBin, pivotCols, rowGroupCols, dateColumn } = props;\n if (timeBin) {\n const dateColumnIndex = pivotCols.indexOf(dateColumn);\n if (dateColumnIndex > -1) {\n pivotCols.splice(dateColumnIndex, 1);\n }\n const dateColumnIndex2 = rowGroupCols.indexOf(dateColumn);\n if (dateColumnIndex2 > -1) {\n rowGroupCols.splice(dateColumnIndex2, 1);\n }\n }\n return { pivotCols, rowGroupCols };\n};\n\nexport const getNewMetricSheet = async (props: {\n datasetList: DatasetImportMetadata[];\n sheetName: string;\n objectId: string;\n importType: any;\n dateRange?: any;\n parentId?: string;\n}) => {\n const { objectId, sheetName, datasetList, dateRange } = props;\n //get dataset from store\n const dataset = datasetList.find(\n (ds: DatasetImportMetadata) => ds.id === objectId,\n );\n\n if (!dataset) {\n throw new Error(`Dataset with id ${objectId} not found`);\n }\n\n const datasetName: string = dataset.name || \"\";\n const datasetId: string = dataset.id || \"\";\n\n const datasetDateColumn: string = dataset?.dateColumn ?? \"\";\n const importModel: Import[] = [\n {\n loc: objectId,\n to: datasetName,\n import_type: \"dataset\",\n },\n ];\n\n if (dataset.datasetType === \"TRANSACTION\") {\n importModel[0].date_column_filter = \"${date_range}\";\n }\n\n const sheetId = generatePushID();\n const inputRuleVariable = `rule_worksheet_${sheetId}`;\n const metricFilterVariableName = generatePushID();\n const metricVariableName = generatePushID();\n\n const variableModel: Variable[] = [\n {\n name: sheetId,\n transforms: [\n {\n table: dataset.name,\n type: \"RuleFilter\",\n rule: \"${\" + inputRuleVariable + \"}\",\n },\n ],\n },\n {\n name: metricFilterVariableName,\n transforms: [\n {\n table: sheetId,\n type: \"RuleFilter\",\n rule: \"${rule_pivot}\",\n },\n ],\n },\n {\n name: metricVariableName,\n transforms: [\n //@ts-ignore\n {\n table: metricFilterVariableName,\n aggregates: [],\n group_by: \"${groupByInput}\",\n type: \"MetricSeries\",\n bin_by: \"${binByInput}\",\n },\n ],\n },\n ];\n\n //create the definition model for the sheet in the workbook WITHOUT aliases\n\n const defaultDefinition: Definition = {\n imports: [],\n variables: [],\n aliases: {},\n inputs: {},\n };\n\n let definitionModel: Definition = {\n ...defaultDefinition,\n imports: importModel,\n variables: variableModel,\n aliases: {},\n };\n\n //run describe(definition, variable)\n const inputs: Inputs = {\n ...defaultDefinition.inputs,\n [inputRuleVariable]: {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n },\n rule_pivot: {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n },\n groupByInput: [],\n binByInput: \"\",\n };\n\n if (dataset.datasetType === \"TRANSACTION\") {\n inputs.date_range = dateRange;\n }\n\n const results = await Promise.all([\n getFxUdescribeApi(inputs, definitionModel, datasetName),\n ]);\n const tableDescription: DescriptionResult[] = (results[0] as any).data;\n\n const alias = tableDescription.reduce(\n (acc: { [id: string]: string }, curr: DescriptionResult) => {\n acc[getDisplayName(curr.name)] = curr.name;\n return acc;\n },\n {},\n );\n\n //update the definition model to have the alises\n definitionModel = {\n ...definitionModel,\n aliases: {\n [sheetId]: alias,\n [metricFilterVariableName]: alias,\n [metricVariableName]: alias,\n },\n };\n\n const columnSettings: ColumnSetting[] = tableDescription.map(\n (description: DescriptionResult): ColumnSetting => {\n const descWithCount = description as DescriptionResultWithUniqueCount;\n return {\n hide: false,\n headerName: getDisplayName(description.name),\n type: description.data_type as\n | \"str\"\n | \"f64\"\n | \"i64\"\n | \"date\"\n | \"datetime(time_unit='us', time_zone=None)\"\n | undefined,\n field: description.name,\n unique_count: descWithCount.unique_count,\n datasetId: descWithCount.datasetId,\n datasetName: descWithCount.datasetName,\n };\n },\n );\n\n //then create sheet\n const sheet: Sheet<BlockSheetCustomModel> = {\n name: sheetName,\n definitionModel,\n customModel: {\n metadata: {\n parentTableVariable: sheetId,\n dateRange: dateRange,\n inputs: inputs,\n columnSettings,\n datasetId: datasetId,\n datasetName: datasetName,\n variable: metricVariableName,\n dateColumn: datasetDateColumn,\n valueCols: [],\n rowGroupCols: [],\n filterColumnsBy: {},\n filterModel: [],\n pivotCols: [],\n aliases: definitionModel.aliases\n ? definitionModel.aliases[metricVariableName]\n : undefined,\n },\n settings: {\n chartType: \"table\",\n viewMode: \"grid\",\n },\n [8]: { x: 0, y: 0, w: 4, h: 6 }, // pivotBlockProperties placeholder\n },\n customFields: {\n variable: sheetId as any,\n dateColumn: datasetDateColumn as unknown as Object,\n datasetNames: [datasetName],\n },\n type: \"PIVOT\",\n parentId: props.parentId,\n parentType: \"DASHBOARD\",\n id: sheetId,\n workspaceId: undefined,\n sources: [{ id: datasetId, componentType: \"DATASET\" }],\n };\n\n return sheet;\n};\n\nexport const getColumnSettingsToSelectOptions = (\n columnSettings: ColumnSetting[],\n) => {\n return _.chain(columnSettings)\n .filter((c) => !c.field.includes(\"__bc_\") && !c.aggFunc)\n .map((c: ColumnSetting) => {\n return {\n label: c.headerName,\n value: c.field,\n option: {\n type: c.type,\n uniqueCount: c.unique_count,\n fieldLabel: c.headerName,\n currency: c?.currency,\n precision: c?.precision,\n dateFormat: c?.dateFormat,\n isCurrency: c?.isCurrency,\n },\n };\n })\n .value();\n};\n\nexport const getDefinitionModelWithUpdatedValueCols = (props: {\n definition: Definition;\n valueCols: ValueColsType[];\n}) => {\n const { definition } = props;\n let shDef = definition;\n let variableName = shDef?.variables?.[shDef?.variables?.length - 1]?.name;\n\n let variables = shDef?.variables ?? [];\n const tableName = variables?.[variables.length - 1]?.name;\n const id = generatePushID();\n\n const viewVariable: Variable = {\n name: id,\n transforms: [\n {\n type: \"View\",\n table: tableName,\n cols: \"${viewInputs}\",\n },\n ],\n };\n\n variables = [...variables, viewVariable];\n variableName = id;\n\n const updatedDefinition = { ...shDef, variables };\n\n return { updatedDefinition, variableName };\n};\n\nexport const applyFilter = async (props: {\n sheetId: string;\n metadata: MetricMetadataType;\n lastModifiedDate: string;\n}) => {\n const { metadata, sheetId, lastModifiedDate } = props;\n\n const parentTableVariable: string = metadata?.parentTableVariable || \"\";\n\n const inputs = metadata?.inputs;\n\n const variable = metadata?.variable;\n\n try {\n const serverResponse = await runPublishedDefinitionApi({\n inputs: { ...inputs },\n sheet: {\n id: sheetId,\n lastModifiedDate,\n },\n variable,\n describe: parentTableVariable,\n });\n\n const result: {\n data: any[];\n description: DescriptionResultWithUniqueCount[];\n } = serverResponse.data;\n\n const gridData = result.data;\n\n return gridData;\n } catch (error) {\n console.error(error);\n }\n};\n\nexport const defaultFilterRule: FilterRule = {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n};\n\nexport const getPromotedFiltersSelectOptionsForLine = (\n metricSheet: Sheet<MetricCustomModel>,\n): SelectOptionType[] => {\n let promotedFiltersSelectOptions: any[] = [];\n\n const sheetId = metricSheet?.id;\n const sheetDefinitionModel = metricSheet?.definitionModel;\n\n const metadata = metricSheet?.customModel?.metadata as MetricMetadataType;\n if (!_.isEmpty(metadata)) {\n const blockColumnSettings = metadata?.columnSettings as ColumnSetting[];\n\n const blockSheetDetails: {\n sheetId: string | undefined;\n definitionModel: Definition;\n parentTableVariable: string | undefined;\n inputs: Inputs | undefined;\n } = {\n sheetId,\n definitionModel: sheetDefinitionModel as Definition,\n parentTableVariable: metadata?.parentTableVariable,\n inputs: metadata?.inputs,\n };\n const blockFilterColumnsBy: FilterColumnsBy =\n metadata?.filterColumnsBy || {};\n\n // create promoted fiters select options\n _.chain(blockColumnSettings)\n .filter((c) => !c.aggFunc && !c.field.includes(\"__bc_\"))\n .forEach((cso: ColumnSetting) => {\n promotedFiltersSelectOptions = [\n ...promotedFiltersSelectOptions,\n {\n label: cso.headerName,\n value: cso.field,\n option: {\n name: cso.headerName,\n rule: defaultFilterRule,\n sheetDetails: blockSheetDetails,\n lineId: sheetId,\n filterColumnsBy: blockFilterColumnsBy,\n id: cso.field,\n datasetId: cso?.datasetId ?? metadata?.datasetId,\n blockColumnSettings: blockColumnSettings,\n datasetName: cso?.datasetName ?? metadata?.datasetName,\n uniqueValueCount: cso?.unique_count ?? 1000,\n },\n },\n ];\n })\n .value();\n\n return promotedFiltersSelectOptions;\n } else {\n return [];\n }\n};\n\nexport const getAllLinesFilterSelectOptions = (\n metricSheets: Sheet<MetricCustomModel>[],\n) => {\n let allLinesFilterSelectOptions: SelectOptionType[] = [];\n metricSheets?.forEach((bs: Sheet<MetricCustomModel>) => {\n const so: SelectOptionType[] = getPromotedFiltersSelectOptionsForLine(bs);\n allLinesFilterSelectOptions = _.uniqBy(\n [...allLinesFilterSelectOptions, ...so],\n (v) => `${v.option?.datasetId}_${v.option?.id}`,\n );\n });\n\n return _.uniqWith(\n allLinesFilterSelectOptions,\n (a, b) => a.option.datasetId === b.option.datasetId && a.value === b.value,\n );\n};\n\nexport function formatDate(date: any) {\n let month = \"\" + (date.getMonth() + 1),\n day = \"\" + date.getDate(),\n year = date.getFullYear();\n\n if (month.length < 2) month = \"0\" + month;\n if (day.length < 2) day = \"0\" + day;\n\n return [year, month, day].join(\"-\");\n}\n\nexport const getQuarterDates = (props: { month: number; year: number }) => {\n let startDate;\n let endDate;\n\n let { month, year } = props;\n month = month + 1;\n\n if (month >= 4 && month <= 6) {\n startDate = formatDate(new Date(year, 3, 1));\n endDate = formatDate(new Date(year, 5, 30));\n } else if (month >= 7 && month <= 9) {\n startDate = formatDate(new Date(year, 6, 1));\n endDate = formatDate(new Date(year, 8, 30));\n } else if (month >= 10 && month <= 12) {\n startDate = formatDate(new Date(year, 9, 1));\n endDate = formatDate(new Date(year, 11, 31));\n } else if (month >= 1 && month <= 3) {\n startDate = formatDate(new Date(year - 1, 9, 1));\n endDate = formatDate(new Date(year, 2, 31));\n }\n\n return { startDate, endDate };\n};\n\nexport const getMonthDates = (props: { month: number; year: number }) => {\n const { month, year } = props;\n const startDate = formatDate(new Date(year, month, 1));\n const endDate = formatDate(new Date(year, month + 1, 0));\n return { startDate, endDate };\n};\n\nexport const getYearDates = (props: { year: number }) => {\n const { year } = props;\n\n const startDate = formatDate(new Date(year, 0, 1));\n const endDate = formatDate(new Date(year, 11, 31));\n return { startDate, endDate };\n};\n\nexport const getStartEndDates = (props: { timeBin: TimeBin; date: Date }) => {\n const { timeBin, date } = props;\n\n const month = date.getMonth();\n const year = date.getFullYear();\n\n if (timeBin === \"per_month\") return getMonthDates({ month, year });\n if (timeBin === \"per_quarter\") return getQuarterDates({ month, year });\n if (timeBin === \"per_year\") return getYearDates({ year });\n};\n\nexport const getSheetProperties = (props: {\n sheet: Sheet<PivotCustomModel>;\n groupKeys?: string[];\n toolPanelValues?: MetricToolPanelType;\n initialLoad: boolean;\n currencyValue: string;\n}) => {\n const { sheet, toolPanelValues, groupKeys, initialLoad, currencyValue } =\n props;\n let pivotCols: string[] = [],\n rowGroupCols: Array<string | string[]> = [],\n filterModel: FilterRule | [] = [],\n valueCols: ValueColsType[] = [],\n timeBin: TimeBin | \"\" = \"\",\n dateRange: DateRange,\n currency: string,\n showBinSortOrderValues: boolean,\n compareTrends: Array<{\n id: string;\n name: string;\n dateRange: DateRange;\n }>,\n showDimensionMappingValues: boolean;\n let gridColumnState: GridColumnState;\n let dateColumn = sheet?.customModel?.dateColumn;\n let sortOptions: SortOptions;\n\n if (!initialLoad && toolPanelValues) {\n pivotCols = toolPanelValues.pivotCols;\n rowGroupCols = toolPanelValues.rowGroupCols;\n filterModel = toolPanelValues.filterModel;\n valueCols = toolPanelValues.valueCols;\n sortOptions = toolPanelValues.sortOptions;\n timeBin = toolPanelValues.timeBin;\n dateRange = toolPanelValues.dateRange || { time_period: \"past_quarter\" };\n currency = toolPanelValues.currency || currencyValue;\n compareTrends = toolPanelValues.compareTrends || [];\n showDimensionMappingValues =\n toolPanelValues.showDimensionMappingValues || false;\n showBinSortOrderValues = toolPanelValues.showBinSortOrderValues || false;\n // get rowGroupCols till index clicked row level\n gridColumnState = { pivotCols, rowGroupCols, filterModel, valueCols };\n rowGroupCols = rowGroupCols.slice(0, (groupKeys?.length || 0) + 1);\n } else {\n const cModel = sheet?.customModel;\n gridColumnState = cModel?.gridColumnState || {\n pivotCols: [],\n rowGroupCols: [],\n filterModel: [],\n valueCols: [],\n };\n timeBin = cModel?.timeBin ?? \"\";\n dateRange = cModel?.dateRange ?? { time_period: \"past_quarter\" };\n currency = cModel?.currency ?? currencyValue;\n if (gridColumnState) {\n ({ pivotCols, rowGroupCols, valueCols, filterModel } = gridColumnState);\n rowGroupCols = rowGroupCols.slice(0, (groupKeys?.length || 0) + 1);\n }\n sortOptions = cModel?.sortOptions || {\n sortByField: undefined,\n sortByOrder: \"asc\",\n };\n compareTrends = cModel?.compareTrends || [];\n showDimensionMappingValues = cModel?.showDimensionMappingValues ?? false;\n showBinSortOrderValues = cModel?.showBinSortOrderValues ?? false;\n }\n\n ({ pivotCols, rowGroupCols } = removeDateColumnFromColRowGroupIfTrend({\n timeBin,\n pivotCols,\n rowGroupCols: rowGroupCols as string[],\n dateColumn: dateColumn || \"\",\n }));\n\n pivotCols = pivotCols ?? [];\n rowGroupCols = rowGroupCols ?? [];\n valueCols = valueCols ?? [];\n timeBin = timeBin ?? \"\";\n\n let rowsToGroupBy = [];\n if (!_.isEmpty(pivotCols)) {\n if (timeBin) {\n rowsToGroupBy.push([...rowGroupCols]);\n for (let i = 0; i < pivotCols.length; i++) {\n const pcols = pivotCols;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupCols]);\n }\n } else {\n for (let i = 0; i < pivotCols.length; i++) {\n const pcols = pivotCols;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupCols]);\n }\n }\n } else {\n rowsToGroupBy.push([...pivotCols, ...rowGroupCols]);\n }\n\n // create definition Model for pivot\n const definitionModelAndVariable = getDefinitionModelAndVariableNameForPivot({\n pivotSheet: sheet,\n rowsToGroupBy: rowsToGroupBy as any, // Type assertion to handle 2D array\n valueCols,\n sortOptions,\n timeBin,\n dateRange,\n dateColumn: sheet?.customModel?.dateColumn ?? \"\",\n pivotCols,\n currency,\n compareTrends,\n showDimensionMappingValues,\n showBinSortOrderValues,\n });\n\n let definitionModel = definitionModelAndVariable.definitionModel;\n\n let variableName = definitionModelAndVariable.variableName;\n let inputs: Inputs = definitionModelAndVariable.inputs;\n const inputsCompareTrendsIndices =\n definitionModelAndVariable.inputsCompareTrendsIndices;\n if (!initialLoad && _.isEmpty(filterModel)) {\n inputs = _.map(inputs, (input) => {\n return {\n ...input,\n rule_pivot: defaultFilterRule,\n filterOnAggregates: defaultFilterRule,\n };\n });\n }\n\n if (!_.isEmpty(filterModel)) {\n const aggFilterRule = getAggregateFilterRuleFromCombinedFilterRule(\n filterModel as FilterRule,\n valueCols,\n );\n const columnFilterRule = getColumnFilterRuleFromCombinedFilterRule(\n filterModel as FilterRule,\n valueCols,\n );\n inputs = _.map(inputs, (input) => {\n return {\n ...input,\n rule_pivot: columnFilterRule,\n filterOnAggregates: aggFilterRule,\n };\n });\n }\n\n return {\n inputs,\n definitionModel,\n variableName,\n gridColumnState,\n inputsCompareTrendsIndices,\n };\n};\n\nexport const getValueColumnsFromSelectOptions = (\n selectOptions: SelectOptionType[],\n) => {\n return selectOptions?.map((col: SelectOptionType) => {\n let valueCol = {\n label: col.label,\n col: col.option.formulaMode ? col.label : col.value,\n aggFun: col.option.formulaMode ? undefined : col.option.aggFun,\n impact: col.option.impact,\n type: col.option.type,\n isCurrency: col.option.isCurrency ?? false,\n isPercentage: col?.option?.isPercentage ?? false,\n isNumber: col?.option?.isNumber ?? false,\n showAs: col?.option?.showAs ?? \"default\",\n isAmortize: col?.option?.isAmortize ?? false,\n hide: col?.option?.isHidden ?? false,\n hideGrandTotal: col?.option?.hideGrandTotal ?? false,\n showRowTotal: col?.option?.showRowTotal ?? false,\n chartColorBasedOnImpact: col?.option?.chartColorBasedOnImpact,\n compactNotation: col?.option?.compactNotation,\n precision: col?.option?.precision,\n };\n\n if (!col.option.formulaMode) return valueCol;\n if (!col.option.aggFun)\n return { ...valueCol, formula: `(${col.option.formula})` };\n return {\n ...valueCol,\n formula: `${col.option.aggFun}(${col.option.formula})`,\n };\n });\n};\n\nexport const defaultDateRange: DateRange = {\n time_period: \"past_quarter\",\n};\n\nexport const getPromotedFilterRulesSelectOptions = (promotedFiltersStoreValue: {\n [datasetId: string]: { [id: string]: FilterPanelStoreType };\n}) => {\n let promotedFiltersSelectOptions = [];\n\n for (const [datasetId, pf] of Object.entries(\n promotedFiltersStoreValue ?? {},\n )) {\n for (const rule of Object.values(pf)) {\n if (rule.rules[0]) {\n const rules = {\n ...rule.rules[0],\n option: { ...rule.rules[0].option, datasetId },\n };\n promotedFiltersSelectOptions.push(rules);\n }\n }\n }\n return promotedFiltersSelectOptions;\n};\n\nexport const checkIfCurrencyFormula = (props: {\n formula: string;\n columns: any;\n}) => {\n const { formula, columns } = props;\n const notAllowedFunctions = [\"COUNT\", \"COUNTDIST\", \"CONCAT\"];\n const extractColumnValues = (str: string) => {\n const regex = /'(.*?)'/g;\n const matches = [];\n let match;\n\n while ((match = regex.exec(str))) {\n matches.push(match[1]);\n }\n\n return matches;\n };\n\n //check if formula includes any of the not allowed functions\n const hasNotAllowedFunctions = notAllowedFunctions.some((func) =>\n _.includes([formula], func),\n );\n\n if (hasNotAllowedFunctions) {\n return false;\n } else {\n const columnValues = extractColumnValues(formula);\n const currencyColumn = _.chain(columns)\n .filter((col: ColumnSetting) => col.isCurrency)\n .map((col: ColumnSetting) => col.headerName || col.field)\n .compact()\n .value();\n\n // check if anyone of columnValues is in columns array\n const hasCurrencyColumn = columnValues.some((col: string) =>\n (currencyColumn as any).includes(col),\n );\n return hasCurrencyColumn;\n }\n};\n\nexport const getProjectAsInput = (valueCols: ValueColsType[]) => {\n const projectAsInput = _.reduce(\n valueCols,\n (acc, curr) => {\n if (curr.showAs && curr.showAs !== ShowAsEnum.DEFAULT && curr.label) {\n const mappedValue = ShowAsToProjectFractionMapper[curr.showAs];\n if (mappedValue) {\n acc[curr.label] = mappedValue;\n }\n }\n return acc;\n },\n {} as Record<string, ProjectFractionEnum>,\n );\n return projectAsInput;\n};\n\nexport const getUpdatedDefinitionCustomModel = (props: {\n metricDefinitionModel: Definition;\n parentDefinitionModel: Definition;\n parentCustomModel: WorkbookCustomModel;\n metricCustomModel: PivotCustomModel;\n removeSort?: boolean;\n}) => {\n const {\n metricDefinitionModel,\n parentDefinitionModel,\n metricCustomModel,\n parentCustomModel,\n removeSort,\n } = props;\n\n const parentTableVariable = parentCustomModel.variable;\n const metricNewColumns = _.filter(\n metricDefinitionModel.variables ?? [],\n (v) => {\n if (!v.transforms || !v.transforms[0]) {\n return false;\n }\n if (removeSort) {\n return (\n findParentIsMetricSeries(\n (v.transforms[0] as Sort).table,\n metricDefinitionModel.variables ?? [],\n ) && v.transforms[0].type !== \"Sort\"\n );\n }\n return findParentIsMetricSeries(\n (v.transforms[0] as Sort).table,\n metricDefinitionModel.variables ?? [],\n );\n },\n );\n\n const definitionVariables = metricDefinitionModel.variables ?? [];\n const analysisVariable: Variable | undefined = _.find<Variable>(\n definitionVariables,\n (v: Variable) =>\n !!_.find(v.transforms, (t: Transform<any>) => t.type === \"MetricSeries\"),\n );\n\n metricDefinitionModel.imports = _.uniqBy(\n [\n ...(parentDefinitionModel.imports ?? []),\n ...(metricDefinitionModel.imports ?? []),\n ],\n \"to\",\n );\n\n const parentDefinitionAliases = parentDefinitionModel.aliases ?? {};\n\n const parentTableVariableAlias = parentTableVariable\n ? (parentDefinitionAliases[parentTableVariable] as {\n [columnName: string]: string;\n })\n : {};\n\n const metricDefinitionAliases = {\n ...metricDefinitionModel.aliases,\n ...parentDefinitionAliases,\n } as { [tableId: string]: { [columnName: string]: string } };\n\n //foreach table in metricDefinitionAliases replace the values with parentTableVariableAlias\n for (const [tableId] of Object.entries(metricDefinitionAliases)) {\n if (!parentDefinitionAliases[tableId]) {\n //if the table id does not belong to the data sheet\n\n const metricTableAlias = metricDefinitionAliases[tableId] as {\n [columnName: string]: string;\n };\n\n //foreach each value in the metricTableAlias replace the value with the value of the parentTableVariableAlias\n\n for (const [columnName, columnId] of Object.entries(metricTableAlias)) {\n //find the value of the parentTableVariableAlias where the key is the columnId\n\n const pColName = _.findKey(\n parentTableVariableAlias,\n (pColId) => pColId === columnId,\n );\n\n if (pColName && pColName !== columnName) {\n delete metricTableAlias[columnName];\n metricTableAlias[pColName] = parentTableVariableAlias[pColName];\n }\n }\n }\n }\n metricDefinitionModel.aliases = metricDefinitionAliases;\n\n const variables = _.cloneDeep(parentDefinitionModel.variables ?? []);\n metricDefinitionModel.variables = definitionVariables.filter(\n (v: Variable) => v.name === analysisVariable?.name,\n );\n\n const previousVariables = metricDefinitionModel.variables;\n metricDefinitionModel.variables = [...variables];\n const variableNames = metricDefinitionModel.variables?.map(\n (v: Variable) => v?.name,\n );\n metricDefinitionModel.variables.push(\n ..._.filter(previousVariables, (v: Variable) =>\n variableNames?.includes(v.name),\n ),\n );\n const filterVariable = _.find(definitionVariables, (v: Variable) =>\n v.transforms?.some(\n (t: Transform<any>) =>\n t.type === \"RuleFilter\" && t.rule === \"${rule_pivot}\",\n ),\n );\n if (filterVariable && parentTableVariable) {\n (filterVariable.transforms![0] as RuleFilter).table = parentTableVariable;\n metricDefinitionModel.variables.push(filterVariable);\n }\n if (analysisVariable && parentTableVariable) {\n //@ts-ignore\n analysisVariable.transforms![0].table = parentTableVariable;\n (analysisVariable.transforms![0] as MetricSeries).row_group_by =\n \"${rowGroupByInput}\";\n (analysisVariable.transforms![0] as MetricSeries).col_group_by =\n \"${columnGroupByInput}\";\n\n const rowGroups = metricCustomModel?.gridColumnState?.rowGroupCols ?? [];\n const valueCols = metricCustomModel?.gridColumnState?.valueCols ?? [];\n const showAsList = _.chain(valueCols)\n .filter((vc) => !!vc.showAs)\n .map((vc) => vc?.showAs)\n .value();\n\n (analysisVariable.transforms![0] as MetricSeries).require_totals =\n !_.isEmpty(rowGroups) ||\n (!_.isEmpty(showAsList) &&\n _.some(showAsList, (showAs) => showAs !== \"default\"));\n\n //find the variable where the type of the 0 element of the transforms is 'FilterRule' and the table is the same as the variable of the analysisVariable\n\n if (filterVariable) {\n //@ts-ignore\n analysisVariable.transforms![0].table = filterVariable.name;\n //@ts-ignore\n\n //update aliases and variables of updatedDefinitionModel with the filterVariable aliases and variables\n if (metricDefinitionModel.aliases && parentTableVariable) {\n metricDefinitionModel.aliases[parentTableVariable] = {\n ...metricDefinitionModel.aliases[parentTableVariable],\n };\n }\n }\n\n metricDefinitionModel.variables.push(analysisVariable);\n metricCustomModel.variable = analysisVariable.name;\n\n // update the sheet inputs in customModel\n }\n\n metricCustomModel.inputs = {\n ...parentCustomModel.inputs,\n ...metricCustomModel.inputs,\n };\n\n if (!_.isEmpty(metricNewColumns)) {\n metricDefinitionModel.variables.push(...metricNewColumns);\n metricCustomModel.variable =\n metricNewColumns[metricNewColumns.length - 1].name;\n }\n\n if (\n metricCustomModel.parentTableColumnSettings &&\n parentCustomModel.uiSettings?.columnSettings\n ) {\n metricCustomModel.parentTableColumnSettings.splice(\n 0,\n metricCustomModel.parentTableColumnSettings.length,\n ...parentCustomModel.uiSettings.columnSettings,\n );\n }\n\n if (\n metricCustomModel.inputs?.[\"view_worksheet\"] &&\n metricCustomModel.parentTableColumnSettings\n ) {\n _.forEach(metricCustomModel.parentTableColumnSettings, (c) => {\n if (metricCustomModel.inputs?.view_worksheet) {\n metricCustomModel.inputs.view_worksheet = _.uniq([\n ...metricCustomModel.inputs.view_worksheet,\n c.field,\n ]);\n }\n });\n }\n\n if (parentTableVariable) {\n metricCustomModel.parentTableVariable = parentTableVariable;\n }\n return {\n definitionModel: metricDefinitionModel,\n customModel: metricCustomModel,\n };\n};\n\nexport const getUpdatedWorksheetDefinitionCustomModels = (props: {\n parentSheet: Sheet<WorkbookCustomModel>;\n metricSheet: Sheet<PivotCustomModel>;\n}) => {\n const { parentSheet, metricSheet } = props;\n const parentDefinitionModel = parentSheet?.definitionModel as Definition;\n const parentCustomModel = parentSheet?.customModel;\n const metricDefinitionModel = metricSheet?.definitionModel as Definition;\n const metricCustomModel = metricSheet?.customModel;\n\n if (!parentCustomModel || !metricCustomModel) {\n throw new Error(\"Parent or metric custom model is missing\");\n }\n\n return {\n ...getUpdatedDefinitionCustomModel({\n metricDefinitionModel,\n parentDefinitionModel,\n metricCustomModel,\n parentCustomModel,\n }),\n };\n};\n\nexport const timeBinToIntervalMapper = {\n per_month: \"Month\",\n per_quarter: \"Quarter\",\n per_week: \"Week\",\n per_day: \"Day\",\n per_year: \"Year\",\n};\n\nexport const mapValueColsWithTrends = (props: {\n valueCols: ValueColsType[];\n compareTrends: PivotCustomModel[\"compareTrends\"];\n}) => {\n const { valueCols, compareTrends } = props;\n return _.chain(valueCols)\n .filter((vc) => !vc.hide)\n .flatMap((vc) => {\n if (_.isEmpty(compareTrends)) {\n return [vc];\n }\n const trends = _.map(compareTrends, (ct) => {\n return {\n ...vc,\n label: `${vc.label}__${ct.name}`,\n col: `${vc.col}__${ct.name}`,\n sourceLabel: vc.sourceLabel ?? vc.label,\n compareTrendId: ct.id,\n };\n });\n return trends;\n })\n .value();\n};\n","import type { SelectOptionType } from \"$models/types/selectType\";\nimport {\n CommonFilter,\n FilterPanelStoreType,\n FilterRule,\n FilterSelectOptionsType,\n PromotedFiltersType,\n RuleType,\n} from \"$models/ui-models/filterModel\";\nimport { ColumnSetting } from \"$models/ui-models/workbookModel\";\nimport {\n getColumnSettingsToSelectOptions,\n replaceFilterColumn,\n} from \"./analysisMethods\";\nimport {\n filterToSelectOptionType,\n getSelectOptionTypeToFilter,\n} from \"./filterUtils\";\nimport _ from \"lodash\";\n\nexport type MergeCommonFilterType = {\n commonFilters: CommonFilter[];\n rule: FilterSelectOptionsType[];\n condition: RuleType;\n id: string; // id of the block/line/kpi\n};\n\nexport type MergeFilterType = {\n id: string; // id of the block/line/kpi -> metric\n metricFilters: FilterRule;\n columnSettings: ColumnSetting[]; // metric column settings\n commonFilters: CommonFilter[];\n promotedFilters: PromotedFiltersType[];\n datasetIds: string[];\n};\n\nexport type ApplicablePromotedFiltersType = {\n id: string; // id of the block/line/kpi -> metric\n datasetIds: string[];\n promotedFilters: PromotedFiltersType[];\n};\n\nexport interface IMergeFilterService {\n mergeCommonFilters(props: MergeCommonFilterType): FilterPanelStoreType;\n mergeFilters(props: MergeFilterType): FilterRule; // merge all filters -> metric, promoted, common\n}\n\nexport class MergeFilterService implements IMergeFilterService {\n private getColumnSettingsForCommonFilters(\n cf: CommonFilter,\n ): SelectOptionType<ColumnSetting>[] {\n return [\n {\n label: cf.name,\n value: cf.column.name,\n option: {\n headerName: cf.name,\n field: cf.column.name, //@ts-ignore\n type: cf.column.data_type,\n datasetName: cf.datasetName,\n datasetId: cf.datasetId,\n },\n },\n ];\n }\n\n mergeCommonFilters(props: MergeCommonFilterType): FilterPanelStoreType {\n const { commonFilters, rule, id, condition } = props;\n let replacedFr: FilterSelectOptionsType[][] = [];\n if (_.isEmpty(commonFilters))\n return { defaultType: condition, rules: rule };\n _.forEach(commonFilters, (f: CommonFilter) => {\n const columnSettingsSelectOption =\n this.getColumnSettingsForCommonFilters(f);\n\n // check if applied on the line\n const appliedOnLine = _.find(\n f?.appliedOnBlocks,\n (l) => l.blockId === id,\n ) as {\n blockId: string;\n applied: boolean;\n blockName: string;\n column: string;\n columnSettings: SelectOptionType<ColumnSetting>[];\n };\n if (appliedOnLine && appliedOnLine.applied) {\n const commonRule = f.rule;\n const fr = filterToSelectOptionType(\n commonRule,\n columnSettingsSelectOption,\n );\n const columnSetting = _.find(\n appliedOnLine.columnSettings,\n (c) => c.value === appliedOnLine.column,\n );\n if (columnSetting) {\n replacedFr.push(\n replaceFilterColumn({ fr: fr.rules, column: columnSetting }),\n );\n }\n }\n });\n\n const mergedFr = _.unionBy(replacedFr.flat(), rule, \"value\");\n\n return { defaultType: condition, rules: mergedFr };\n }\n\n private getApplicablePromotedFilters(props: ApplicablePromotedFiltersType) {\n const { id, datasetIds, promotedFilters } = props;\n return _.filter(promotedFilters, (pf) => {\n const appliedBlock = _.find(\n pf.appliedOnBlocks,\n (aob) => aob.blockId === id,\n );\n const isApplied = appliedBlock?.applied ?? false;\n return isApplied && _.includes(datasetIds, pf.datasetId);\n });\n }\n\n private getUnion(\n promotedFilters: PromotedFiltersType[],\n metricFilters: FilterRule,\n columnSettings: ColumnSetting[],\n ): FilterPanelStoreType {\n /** get select options for promoted filters */\n const pfSelectOptions = _.map(promotedFilters, (pf) => {\n return (\n filterToSelectOptionType(\n pf.rule,\n getColumnSettingsToSelectOptions(pf.blockColumnSettings),\n )?.rules ?? []\n );\n }).flat();\n\n const mFilterModel = filterToSelectOptionType(\n metricFilters,\n getColumnSettingsToSelectOptions(columnSettings),\n );\n\n if (_.isEmpty(mFilterModel)) {\n return { defaultType: \"and_cond\", rules: pfSelectOptions };\n }\n\n const ruleType = mFilterModel?.defaultType ?? \"and_cond\";\n const mSelectOptions = mFilterModel?.rules ?? [];\n\n const union = _.unionBy(pfSelectOptions, mSelectOptions, \"value\");\n return { defaultType: ruleType, rules: union };\n }\n\n /** merges promoted filter to metric filter */\n private mergePromotedFilters(props: MergeFilterType): FilterPanelStoreType {\n const { metricFilters, columnSettings, promotedFilters } = props;\n\n const applicablePromotedFilters = this.getApplicablePromotedFilters({\n id: props.id,\n datasetIds: props.datasetIds,\n promotedFilters,\n });\n\n return this.getUnion(\n applicablePromotedFilters,\n metricFilters,\n columnSettings,\n );\n }\n\n mergeFilters(props: MergeFilterType): FilterRule {\n const { commonFilters } = props;\n\n const filtersWithPromoted = this.mergePromotedFilters(props);\n const filtersWithCommon = this.mergeCommonFilters({\n commonFilters,\n rule: filtersWithPromoted.rules,\n id: props.id,\n condition: (filtersWithPromoted?.defaultType ?? \"and_cond\") as RuleType,\n });\n\n return getSelectOptionTypeToFilter(filtersWithCommon);\n }\n}\n","import { HierarchyProperties, Worksheet } from \"$models/gen/Api\";\nimport { DashboardDateRangeModel } from \"$models/ui-models/dashboardModel\";\nimport { Inputs, TimeBin } from \"$models/ui-models/definitionModel\";\nimport {\n CommonFilter,\n FilterPanelStoreType,\n FilterRule,\n PromotedFiltersType,\n} from \"$models/ui-models/filterModel\";\nimport {\n ShowAsEnum,\n type BoardCurrencyModel,\n type ColumnSetting,\n type MetricMetadataType,\n type RowGroupsType,\n type ValueColsType,\n} from \"$models/ui-models/workbookModel\";\nimport _ from \"lodash\";\nimport {\n filterToSelectOptionType,\n getColumnFilterRuleFromCombinedFilterRule,\n getSelectOptionTypeToFilter,\n} from \"./filterUtils\";\nimport { MergeFilterService } from \"./mergeFilterService\";\nimport {\n defaultFilterRule,\n getColumnSettingsToSelectOptions,\n getDrilldownFiltersMap,\n getFiltersToBeAppliedOnDrilldown,\n getMetricFilterRule,\n ShowAsToProjectFractionMapper,\n} from \"./analysisMethods\";\nimport { DateRange } from \"$models/ui-models/dateRangeModel\";\n\nconst updatePromotedFiltersAndDateRangeToMetadataAndInputs = (props: {\n blockId: string;\n metadata: MetricMetadataType;\n promotedFiltersStoreValue: {\n [datasetId: string]: { [id: string]: FilterPanelStoreType };\n };\n promotedFilters: PromotedFiltersType[];\n inputs: Inputs;\n dateRangeModel: DashboardDateRangeModel;\n currencyModel: BoardCurrencyModel;\n commonFilters?: CommonFilter[];\n}) => {\n const { blockId, metadata, promotedFilters, inputs, commonFilters } = props;\n\n const updateDateRange = (updateProps: {\n blockId: string;\n blockDateRange: DateRange;\n dateRangeModel: DashboardDateRangeModel;\n }) => {\n const { blockId, blockDateRange, dateRangeModel } = updateProps;\n const { dateRange, appliedOnBlocks } = dateRangeModel;\n\n const dateRangeApplicableOnBlockIds = appliedOnBlocks\n ?.filter((apb: { applied: boolean }) => apb.applied)\n ?.map((apb: { blockId: string }) => apb.blockId);\n\n if (dateRangeApplicableOnBlockIds?.includes(blockId)) {\n return dateRange;\n } else {\n return blockDateRange;\n }\n };\n\n const updateCurrencyFilter = (updateProps: {\n blockId: string;\n blockCurrencyFilter: string;\n currencyModel: BoardCurrencyModel;\n }) => {\n const { blockId, blockCurrencyFilter, currencyModel } = updateProps;\n const { currency, appliedOnBlocks } = currencyModel;\n\n const currencyFilterApplicableOnBlockIds = _.chain(appliedOnBlocks)\n .filter((apb: { applied: boolean }) => apb.applied)\n .map((apb: { blockId: string }) => apb.blockId)\n .value();\n\n if (currencyFilterApplicableOnBlockIds?.includes(blockId)) {\n return currency;\n } else {\n return blockCurrencyFilter;\n }\n };\n\n const metricColumnFilter = getColumnFilterRuleFromCombinedFilterRule(\n metadata.filterModel as FilterRule,\n metadata.valueCols || [],\n );\n\n const updatedFilterRule = new MergeFilterService().mergeFilters({\n id: blockId,\n metricFilters: metricColumnFilter as FilterRule,\n columnSettings: metadata.columnSettings,\n promotedFilters,\n commonFilters: commonFilters || [],\n datasetIds: [metadata.datasetId || \"\"],\n });\n\n const updatedDateRange = updateDateRange({\n blockId,\n blockDateRange: metadata.dateRange || { time_period: \"past_quarter\" },\n dateRangeModel: props.dateRangeModel,\n });\n\n const updateCurrencyFilterValue = updateCurrencyFilter({\n blockId,\n blockCurrencyFilter: inputs?.to_currency ?? metadata.currency ?? \"\",\n currencyModel: props.currencyModel,\n });\n\n const updatedInputs = {\n ...inputs,\n [\"filterOnAggregates\"]: _.get(\n inputs,\n \"filterOnAggregates\",\n defaultFilterRule,\n ),\n [\"rule_pivot\"]: updatedFilterRule,\n date_range: updatedDateRange,\n to_currency: updateCurrencyFilterValue,\n rate_type: inputs?.rate_type ?? '',\n showDimensionMappingValues: metadata.showDimensionMappingValues ?? false,\n showBinSortOrderValues: metadata?.inputs?.showBinSortOrderValues ?? false,\n groupsSortOrder:\n inputs?.groupsSortOrder ?? inputs.groupByInput.map((r) => [r, \"asc\"]),\n };\n const updatedMetadata = {\n ...metadata,\n filterModel: updatedFilterRule,\n dateRange: updatedDateRange,\n inputs: updatedInputs,\n };\n\n return { updatedInputs, updatedMetadata };\n};\n\nconst getRowsToGroupBy = (props: {\n pivotColumns: string[];\n timeBin: TimeBin | \"\";\n rowGroupColumns: RowGroupsType;\n}) => {\n const { pivotColumns, timeBin, rowGroupColumns } = props;\n const rowsToGroupBy = [];\n if (!_.isEmpty(pivotColumns)) {\n if (timeBin) {\n rowsToGroupBy.push([...rowGroupColumns]);\n for (let i = 0; i < pivotColumns.length; i++) {\n const pcols = pivotColumns;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupColumns]);\n }\n } else {\n for (let i = 0; i < pivotColumns.length; i++) {\n const pcols = pivotColumns;\n rowsToGroupBy.push([...pcols.slice(0, i + 1), ...rowGroupColumns]);\n }\n }\n } else {\n rowsToGroupBy.push([...pivotColumns, ...rowGroupColumns]);\n }\n\n return rowsToGroupBy;\n};\n\nconst getInputsArray = (props: {\n pivotColumns: string[];\n timeBin: TimeBin | \"\";\n rowsToGroupBy: string[][];\n inputs: Inputs;\n dateColumn: string;\n valueCols: ValueColsType[];\n hierarchy?: HierarchyProperties;\n rowGroupCols?: RowGroupsType;\n compareTrends?: MetricMetadataType[\"compareTrends\"];\n showDimensionMappingValues?: boolean;\n showBinSortOrderValues: boolean;\n}) => {\n const {\n pivotColumns,\n timeBin,\n rowsToGroupBy,\n inputs,\n dateColumn,\n valueCols,\n hierarchy,\n rowGroupCols,\n compareTrends,\n showDimensionMappingValues = false,\n showBinSortOrderValues = false,\n } = props;\n let inputsArray: Inputs[] = [];\n const inputsCompareTrendsIndices: Array<{ id: string; index: number }> = [];\n\n const getViewsInput = (index?: number) => {\n let viewInputs = inputs?.viewInputs;\n if (!viewInputs) return undefined;\n\n const valueColsLabel = _.map(valueCols, (vc) => vc.label);\n viewInputs = _.filter(\n viewInputs,\n (vi) => valueColsLabel.includes(vi) || vi.includes(\"__bc_\"),\n );\n\n if (_.isEmpty(rowGroupCols)) {\n viewInputs = _.filter(viewInputs, (vi) => !vi.includes(\"__bc_\"));\n }\n if (timeBin) {\n viewInputs = _.uniq([...viewInputs, dateColumn, `${dateColumn}_group`]);\n }\n if (index !== undefined) {\n viewInputs = _.uniq([...viewInputs, ...rowsToGroupBy[index]]);\n } else {\n if (!_.isEmpty(rowGroupCols)) {\n let row = rowsToGroupBy[0];\n if (!_.isEmpty(hierarchy) && hierarchy) {\n const rowLabelName = _.get(rowsToGroupBy, \"0.0.0\");\n row = [\n rowLabelName,\n `${rowLabelName}_level_number`,\n `${rowLabelName}_${hierarchy.parentColId}`,\n `${rowLabelName}_${hierarchy.nodeColName}`,\n ];\n }\n\n viewInputs = _.uniq([...viewInputs, ...row]);\n }\n }\n return viewInputs;\n };\n\n const projectAsInput = _.reduce(\n valueCols,\n (acc: Record<string, any>, curr) => {\n if (curr.showAs && curr.showAs !== ShowAsEnum.DEFAULT && curr.label) {\n acc[curr.label] = ShowAsToProjectFractionMapper[curr.showAs];\n }\n return acc;\n },\n {} as Record<string, any>,\n );\n\n const sortPivotInputsKey = Object.keys(inputs).find((key) =>\n key.startsWith(\"sortPivotInputs\"),\n );\n const sortPivotInputsValue = sortPivotInputsKey\n ? { ...inputs[sortPivotInputsKey] }\n : undefined;\n\n if (!_.isEmpty(pivotColumns)) {\n const pc = timeBin ? [dateColumn, ...pivotColumns] : pivotColumns;\n\n pc?.forEach((col, index) => {\n const groupByInput = rowsToGroupBy[index];\n const columnGroupByInput = _.filter(groupByInput, (r) => pc.includes(r));\n const rowGroupByInput = _.filter(groupByInput, (r) => !pc.includes(r));\n if (sortPivotInputsValue) {\n sortPivotInputsValue.pivotColumns = rowsToGroupBy[index];\n }\n\n inputsArray.push({\n ...inputs,\n groupByInput: rowsToGroupBy[index],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n viewInputs: getViewsInput(index),\n columnGroupByInput,\n rowGroupByInput,\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: groupByInput.map((r) => [r, \"asc\"]),\n ...(sortPivotInputsKey\n ? { [sortPivotInputsKey]: sortPivotInputsValue }\n : {}),\n });\n });\n } else {\n if (compareTrends && compareTrends.length > 0) {\n if (sortPivotInputsValue) {\n sortPivotInputsValue.pivotColumns = rowsToGroupBy[0];\n }\n inputsArray = _.map(compareTrends, (ct, index) => {\n inputsCompareTrendsIndices.push({ id: ct.id, index });\n return {\n ...inputs,\n date_range: { ...ct.dateRange },\n groupByInput: rowsToGroupBy[0],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n viewInputs: getViewsInput(),\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n ...(sortPivotInputsKey\n ? { [sortPivotInputsKey]: sortPivotInputsValue }\n : {}),\n };\n });\n } else {\n if (sortPivotInputsValue) {\n sortPivotInputsValue.pivotColumns = rowsToGroupBy[0];\n }\n inputsArray = [\n {\n ...inputs,\n groupByInput: rowsToGroupBy[0],\n dateColumnInput: dateColumn,\n binByInput: timeBin,\n viewInputs: getViewsInput(),\n rowGroupByInput: rowsToGroupBy[0],\n columnGroupByInput: [],\n projectAsInput,\n showDimensionMappingValues,\n showBinSortOrderValues,\n groupsSortOrder: _.map(rowsToGroupBy[0], (r) => [r, \"asc\"]),\n ...(sortPivotInputsKey\n ? { [sortPivotInputsKey]: sortPivotInputsValue }\n : {}),\n },\n ];\n }\n }\n\n return { inputs: inputsArray, inputsCompareTrendsIndices };\n};\n\nconst mergeDrilldownFiltersToMetricFilters = (props: {\n metricFilterRule: FilterRule;\n filtersToBeApplied: { field: string; key: string }[];\n columnSettings: ColumnSetting[];\n}) => {\n const { metricFilterRule, filtersToBeApplied, columnSettings } = props;\n const columnSelectOptions = getColumnSettingsToSelectOptions(columnSettings);\n const metricFilterRuleSelectOptions = filterToSelectOptionType(\n metricFilterRule,\n columnSelectOptions,\n );\n const drilldownFilterMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const mergedRule = _.unionBy(\n Object.values(drilldownFilterMap),\n metricFilterRuleSelectOptions.rules,\n \"value\",\n );\n const filterRule: FilterRule = getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: mergedRule,\n });\n\n return filterRule;\n};\n\nexport const getMetricDefinition = (props: {\n sheetId: string;\n metadata: MetricMetadataType;\n groupKeys: string[];\n lastModifiedDate: string;\n promotedFiltersStoreValue: {\n [datasetId: string]: { [id: string]: FilterPanelStoreType };\n };\n promotedFilters: PromotedFiltersType[];\n dateRangeModel: DashboardDateRangeModel;\n currencyModel: BoardCurrencyModel;\n commonFilters: CommonFilter[];\n}) => {\n const {\n sheetId,\n metadata,\n groupKeys,\n promotedFiltersStoreValue,\n promotedFilters,\n dateRangeModel,\n currencyModel,\n commonFilters,\n } = props;\n const {\n parentTableVariable,\n valueCols,\n rowGroupCols,\n pivotCols,\n timeBin,\n dateColumn,\n columnSettings,\n } = metadata;\n let inputs = metadata?.inputs;\n\n //if (isHierarchyMetric({ rowGroups: metadata?.rowGroupCols })) {\n //gridApi.setPivotResultColumns([]);\n // return await this.runHierarchyMetricsForDashboards(props);\n //}\n\n const { updatedInputs } =\n updatePromotedFiltersAndDateRangeToMetadataAndInputs({\n blockId: sheetId,\n metadata,\n promotedFiltersStoreValue,\n promotedFilters,\n inputs,\n dateRangeModel,\n currencyModel,\n commonFilters,\n });\n\n let rowsToGroupBy = getRowsToGroupBy({\n pivotColumns: pivotCols || [],\n rowGroupColumns: (rowGroupCols || []).slice(0, groupKeys.length + 1),\n timeBin: timeBin || \"\",\n });\n\n let { inputs: inputsArray } = getInputsArray({\n inputs: updatedInputs,\n dateColumn: dateColumn || \"\",\n timeBin: timeBin || \"\",\n rowsToGroupBy: rowsToGroupBy as string[][],\n pivotColumns: pivotCols || [],\n valueCols: valueCols || [],\n rowGroupCols: rowGroupCols,\n compareTrends: metadata.compareTrends,\n showDimensionMappingValues:\n metadata?.inputs?.showDimensionMappingValues ?? false,\n showBinSortOrderValues: metadata?.inputs?.showBinSortOrderValues ?? false,\n });\n\n if (!_.isEmpty(groupKeys)) {\n const mergedFilterRule = mergeDrilldownFiltersToMetricFilters({\n metricFilterRule: getMetricFilterRule(inputsArray),\n filtersToBeApplied: getFiltersToBeAppliedOnDrilldown({\n rowGroups: metadata?.rowGroupCols as string[],\n groupKeys,\n }),\n columnSettings,\n });\n\n inputsArray = inputsArray?.map((ia) => {\n return { ...ia, [\"rule_pivot\"]: mergedFilterRule };\n });\n }\n\n return {\n inputs: inputsArray,\n describe: parentTableVariable,\n };\n};\n\nexport const getSelectedMetricsParentIds = (\n selectedItems: { sheet: Worksheet }[],\n) => {\n return _.chain(selectedItems)\n .map((s) => s?.sheet?.customFields?.parentTableId as unknown as string)\n .uniq()\n .value();\n};\n\nexport const defaultDashboardDateRangeModel: DashboardDateRangeModel = {\n //@ts-ignore\n dateRange: {},\n appliedOnBlocks: [],\n};\n\nexport const defaultCurrencyModel: BoardCurrencyModel = {\n currency: \"USD\",\n appliedOnBlocks: [],\n};\n","// REMOVE THIS FILE AFTER REFACTORING INPUT TABLES\nimport { ColumnFilterRule } from \"$models/gen/Api\";\nimport {\n MetricAggregateType,\n MetricSeries,\n} from \"$models/ui-models/definitionModel\";\nimport {\n InputTableDefinitionModel,\n InputTableFilterTransform,\n InputTableSortTransform,\n InputTableTransformation,\n} from \"$models/ui-models/inputTableModel\";\nimport { SortOptions, ValueColsType } from \"$models/ui-models/workbookModel\";\nimport _ from \"lodash\";\nimport {\n getColumnSettingsToSelectOptions,\n getDrilldownFiltersMap,\n getFiltersToBeAppliedOnDrilldown,\n} from \"../metric/analysisMethods\";\nimport {\n filterToSelectOptionType,\n getSelectOptionTypeToFilter,\n} from \"../metric/filterUtils\";\n\nexport const getGroupByDefinition = ({\n tableId,\n tableName,\n groupKeys,\n rowGroupCols,\n columnSettings,\n filterRules,\n sortValue,\n metricSeries,\n}) => {\n let filtersToBeApplied = getFiltersToBeAppliedOnDrilldown({\n groupKeys,\n rowGroups: rowGroupCols as string[],\n });\n const columnSelectOptions = getColumnSettingsToSelectOptions(columnSettings);\n\n const metricFilterRuleSelectOptions = filterToSelectOptionType(\n filterRules,\n columnSelectOptions,\n );\n const crossFilterMap = getDrilldownFiltersMap({\n filtersToBeApplied,\n columnSelectOptions,\n });\n\n const mergedRule = _.unionBy(\n Object.values(crossFilterMap),\n metricFilterRuleSelectOptions.rules,\n \"value\",\n );\n\n const filterRule = getSelectOptionTypeToFilter({\n defaultType: \"and_cond\",\n rules: mergedRule,\n });\n return generateDefinitionModel({\n filters: filterRule as any,\n sort: sortValue,\n metricSeries,\n tableId,\n tableName,\n });\n};\n\nexport const generateDefinitionModel = ({\n filters,\n sort,\n metricSeries,\n tableId,\n tableName,\n}: {\n filters?: ColumnFilterRule;\n sort?: Record<string, any>;\n metricSeries?: Partial<MetricSeries>;\n tableId: string;\n tableName: string;\n}): { targetName: string; definition: InputTableDefinitionModel } => {\n const { transformations, targetName } = generateTransformations(\n tableName,\n filters,\n sort,\n metricSeries,\n );\n\n const importConfig: any = getImportConfig(tableId, tableName);\n return {\n targetName,\n definition: {\n imports: [importConfig],\n transformations,\n },\n };\n};\n\nexport const sortConfigFromValue = (sortBy: SortOptions) => {\n const sortValueObj = !_.isNil(sortBy?.sortByField)\n ? {\n [sortBy.sortByField.value]: _.get(\n sortBy,\n \"sortByOrder\",\n \"asc\",\n ).toUpperCase(),\n }\n : undefined;\n return sortValueObj;\n};\n\nexport const getMetricSeries = (props: {\n pivotCols: string[];\n rowGroupCols: string[];\n valueCols: ValueColsType[];\n}) => {\n const { pivotCols, rowGroupCols, valueCols } = props;\n const group_by = [...pivotCols, ...rowGroupCols];\n\n const aggregates: MetricAggregateType[] = _.map<\n ValueColsType,\n | [alias: string, formula: string]\n | [alias: string, col: string, func: string]\n >(valueCols, (valueCol) => {\n if (valueCol.type === \"formula\") {\n const formula = valueCol.formula;\n return [valueCol.label, formula];\n } else if (valueCol.type === \"column\") {\n const formula = valueCol.formula;\n return [valueCol.label, formula];\n }\n return [valueCol.label, valueCol.col, valueCol.aggFun];\n });\n\n const metricSeries: Partial<MetricSeries> = {\n aggregates,\n group_by,\n row_group_by: rowGroupCols,\n col_group_by: pivotCols,\n type: \"TableAggregate\",\n formula_on_aggregates: [],\n };\n return metricSeries;\n};\n\nconst getFilterConfig = (\n filters: ColumnFilterRule,\n prevName: string,\n): InputTableFilterTransform => ({\n name: \"table_filter\",\n table_name: prevName,\n filter: filters,\n type: \"CollectionFilter\",\n});\n\nconst getSortConfig = (\n sort: Record<string, any>,\n prevName: string,\n): InputTableSortTransform => ({\n name: \"table_sort\",\n table_name: prevName,\n sort_columns: sort,\n type: \"CollectionSort\",\n});\n\nconst generateTransformations = (\n tableName: string,\n filters?: ColumnFilterRule,\n sort?: Record<string, any>,\n metricSeries?: Partial<MetricSeries>,\n): { transformations: InputTableTransformation[]; targetName: string } => {\n const transformations = [];\n let prevName = tableName;\n let targetName = tableName;\n\n if (!_.isEmpty(filters)) {\n const filterConfig = getFilterConfig(filters, prevName);\n transformations.push(filterConfig);\n prevName = filterConfig.name;\n targetName = \"table_filter\";\n }\n\n if (metricSeries) {\n const aggregateConfig = {\n name: \"table_aggregate\",\n table_name: prevName,\n aggregates: metricSeries.aggregates,\n group_by: metricSeries.group_by,\n type: \"CollectionAggregate\",\n };\n transformations.push(aggregateConfig);\n prevName = aggregateConfig.name;\n targetName = \"table_aggregate\";\n }\n\n if (metricSeries?.aggregates) {\n if (sort !== undefined) {\n const sortEntries = Object.entries(sort);\n if (sortEntries.length > 0) {\n const newSort = {};\n for (const [sortKey, sortOrder] of sortEntries) {\n const matchingAggregate = metricSeries.aggregates.find(\n (agg) => agg[1] === sortKey,\n );\n if (matchingAggregate) {\n newSort[matchingAggregate[0]] = sortOrder;\n }\n }\n sort = _.isEmpty(newSort) ? {} : newSort;\n }\n }\n }\n\n if (!_.isEmpty(sort)) {\n const sortConfig = getSortConfig(sort, prevName);\n transformations.push(sortConfig);\n prevName = sortConfig.name;\n targetName = \"table_sort\";\n }\n\n return { transformations, targetName };\n};\n\nconst getImportConfig = (id: string, name: string) => ({\n name: name,\n table_id: id,\n type: \"TableImport\",\n});\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar events = {exports: {}};\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n };\n\nvar ReflectOwnKeys;\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nevents.exports = EventEmitter;\nevents.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n }\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n\nvar eventsExports = events.exports;\nvar EventEmitter$1 = /*@__PURE__*/getDefaultExportFromCjs(eventsExports);\n\nvar errorCodes;\n(function (errorCodes) {\n errorCodes[errorCodes[\"timeout\"] = 1] = \"timeout\";\n errorCodes[errorCodes[\"transportClosed\"] = 2] = \"transportClosed\";\n errorCodes[errorCodes[\"clientDisconnected\"] = 3] = \"clientDisconnected\";\n errorCodes[errorCodes[\"clientClosed\"] = 4] = \"clientClosed\";\n errorCodes[errorCodes[\"clientConnectToken\"] = 5] = \"clientConnectToken\";\n errorCodes[errorCodes[\"clientRefreshToken\"] = 6] = \"clientRefreshToken\";\n errorCodes[errorCodes[\"subscriptionUnsubscribed\"] = 7] = \"subscriptionUnsubscribed\";\n errorCodes[errorCodes[\"subscriptionSubscribeToken\"] = 8] = \"subscriptionSubscribeToken\";\n errorCodes[errorCodes[\"subscriptionRefreshToken\"] = 9] = \"subscriptionRefreshToken\";\n errorCodes[errorCodes[\"transportWriteError\"] = 10] = \"transportWriteError\";\n errorCodes[errorCodes[\"connectionClosed\"] = 11] = \"connectionClosed\";\n errorCodes[errorCodes[\"badConfiguration\"] = 12] = \"badConfiguration\";\n})(errorCodes || (errorCodes = {}));\nvar connectingCodes;\n(function (connectingCodes) {\n connectingCodes[connectingCodes[\"connectCalled\"] = 0] = \"connectCalled\";\n connectingCodes[connectingCodes[\"transportClosed\"] = 1] = \"transportClosed\";\n connectingCodes[connectingCodes[\"noPing\"] = 2] = \"noPing\";\n connectingCodes[connectingCodes[\"subscribeTimeout\"] = 3] = \"subscribeTimeout\";\n connectingCodes[connectingCodes[\"unsubscribeError\"] = 4] = \"unsubscribeError\";\n})(connectingCodes || (connectingCodes = {}));\nvar disconnectedCodes;\n(function (disconnectedCodes) {\n disconnectedCodes[disconnectedCodes[\"disconnectCalled\"] = 0] = \"disconnectCalled\";\n disconnectedCodes[disconnectedCodes[\"unauthorized\"] = 1] = \"unauthorized\";\n disconnectedCodes[disconnectedCodes[\"badProtocol\"] = 2] = \"badProtocol\";\n disconnectedCodes[disconnectedCodes[\"messageSizeLimit\"] = 3] = \"messageSizeLimit\";\n})(disconnectedCodes || (disconnectedCodes = {}));\nvar subscribingCodes;\n(function (subscribingCodes) {\n subscribingCodes[subscribingCodes[\"subscribeCalled\"] = 0] = \"subscribeCalled\";\n subscribingCodes[subscribingCodes[\"transportClosed\"] = 1] = \"transportClosed\";\n})(subscribingCodes || (subscribingCodes = {}));\nvar unsubscribedCodes;\n(function (unsubscribedCodes) {\n unsubscribedCodes[unsubscribedCodes[\"unsubscribeCalled\"] = 0] = \"unsubscribeCalled\";\n unsubscribedCodes[unsubscribedCodes[\"unauthorized\"] = 1] = \"unauthorized\";\n unsubscribedCodes[unsubscribedCodes[\"clientClosed\"] = 2] = \"clientClosed\";\n})(unsubscribedCodes || (unsubscribedCodes = {}));\n\n/** State of client. */\nvar State;\n(function (State) {\n State[\"Disconnected\"] = \"disconnected\";\n State[\"Connecting\"] = \"connecting\";\n State[\"Connected\"] = \"connected\";\n})(State || (State = {}));\n/** State of Subscription */\nvar SubscriptionState;\n(function (SubscriptionState) {\n SubscriptionState[\"Unsubscribed\"] = \"unsubscribed\";\n SubscriptionState[\"Subscribing\"] = \"subscribing\";\n SubscriptionState[\"Subscribed\"] = \"subscribed\";\n})(SubscriptionState || (SubscriptionState = {}));\n\n/** @internal */\nfunction startsWith(value, prefix) {\n return value.lastIndexOf(prefix, 0) === 0;\n}\n/** @internal */\nfunction isFunction(value) {\n if (value === undefined || value === null) {\n return false;\n }\n return typeof value === 'function';\n}\n/** @internal */\nfunction log(level, args) {\n if (globalThis.console) {\n const logger = globalThis.console[level];\n if (isFunction(logger)) {\n logger.apply(globalThis.console, args);\n }\n }\n}\nfunction randomInt(min, max) {\n return Math.floor(Math.random() * (max - min + 1) + min);\n}\n/** @internal */\nfunction backoff(step, min, max) {\n // Full jitter technique, see:\n // https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n if (step > 31) {\n step = 31;\n }\n const interval = randomInt(0, Math.min(max, min * Math.pow(2, step)));\n return Math.min(max, min + interval);\n}\n/** @internal */\nfunction errorExists(data) {\n return 'error' in data && data.error !== null;\n}\n/** @internal */\nfunction ttlMilliseconds(ttl) {\n // https://stackoverflow.com/questions/12633405/what-is-the-maximum-delay-for-setinterval\n return Math.min(ttl * 1000, 2147483647);\n}\n\n/** Subscription to a channel */\nclass Subscription extends EventEmitter$1 {\n /** Subscription constructor should not be used directly, create subscriptions using Client method. */\n constructor(centrifuge, channel, options) {\n super();\n this._resubscribeTimeout = null;\n this._refreshTimeout = null;\n this.channel = channel;\n this.state = SubscriptionState.Unsubscribed;\n this._centrifuge = centrifuge;\n this._token = '';\n this._getToken = null;\n this._data = null;\n this._getData = null;\n this._recover = false;\n this._offset = null;\n this._epoch = null;\n this._recoverable = false;\n this._positioned = false;\n this._joinLeave = false;\n this._minResubscribeDelay = 500;\n this._maxResubscribeDelay = 20000;\n this._resubscribeTimeout = null;\n this._resubscribeAttempts = 0;\n this._promises = {};\n this._promiseId = 0;\n this._inflight = false;\n this._refreshTimeout = null;\n this._delta = '';\n this._delta_negotiated = false;\n this._prevValue = null;\n this._unsubPromise = Promise.resolve();\n this._setOptions(options);\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (this._centrifuge._debugEnabled) {\n this.on('state', (ctx) => {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('subscription state', channel, ctx.oldState, '->', ctx.newState);\n });\n this.on('error', (ctx) => {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('subscription error', channel, ctx);\n });\n }\n else {\n // Avoid unhandled exception in EventEmitter for non-set error handler.\n this.on('error', function () { Function.prototype(); });\n }\n }\n /** ready returns a Promise which resolves upon subscription goes to Subscribed\n * state and rejects in case of subscription goes to Unsubscribed state.\n * Optional timeout can be passed.*/\n ready(timeout) {\n if (this.state === SubscriptionState.Unsubscribed) {\n return Promise.reject({ code: errorCodes.subscriptionUnsubscribed, message: this.state });\n }\n if (this.state === SubscriptionState.Subscribed) {\n return Promise.resolve();\n }\n return new Promise((res, rej) => {\n const ctx = {\n resolve: res,\n reject: rej\n };\n if (timeout) {\n ctx.timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n }, timeout);\n }\n this._promises[this._nextPromiseId()] = ctx;\n });\n }\n /** subscribe to a channel.*/\n subscribe() {\n if (this._isSubscribed()) {\n return;\n }\n this._resubscribeAttempts = 0;\n this._setSubscribing(subscribingCodes.subscribeCalled, 'subscribe called');\n }\n /** unsubscribe from a channel, keeping position state.*/\n unsubscribe() {\n this._unsubPromise = this._setUnsubscribed(unsubscribedCodes.unsubscribeCalled, 'unsubscribe called', true);\n }\n /** publish data to a channel.*/\n publish(data) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.publish(self.channel, data);\n });\n }\n /** get online presence for a channel.*/\n presence() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presence(self.channel);\n });\n }\n /** presence stats for a channel (num clients and unique users).*/\n presenceStats() {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.presenceStats(self.channel);\n });\n }\n /** history for a channel. By default it does not return publications (only current\n * StreamPosition data) – provide an explicit limit > 0 to load publications.*/\n history(opts) {\n const self = this;\n return this._methodCall().then(function () {\n return self._centrifuge.history(self.channel, opts);\n });\n }\n _methodCall() {\n if (this._isSubscribed()) {\n return Promise.resolve();\n }\n if (this._isUnsubscribed()) {\n return Promise.reject({ code: errorCodes.subscriptionUnsubscribed, message: this.state });\n }\n return new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n }, this._centrifuge._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n }\n _nextPromiseId() {\n return ++this._promiseId;\n }\n _needRecover() {\n return this._recover === true;\n }\n _isUnsubscribed() {\n return this.state === SubscriptionState.Unsubscribed;\n }\n _isSubscribing() {\n return this.state === SubscriptionState.Subscribing;\n }\n _isSubscribed() {\n return this.state === SubscriptionState.Subscribed;\n }\n _setState(newState) {\n if (this.state !== newState) {\n const oldState = this.state;\n this.state = newState;\n this.emit('state', { newState, oldState, channel: this.channel });\n return true;\n }\n return false;\n }\n _usesToken() {\n return this._token !== '' || this._getToken !== null;\n }\n _clearSubscribingState() {\n this._resubscribeAttempts = 0;\n this._clearResubscribeTimeout();\n }\n _clearSubscribedState() {\n this._clearRefreshTimeout();\n }\n _setSubscribed(result) {\n if (!this._isSubscribing()) {\n return;\n }\n this._clearSubscribingState();\n if (result.recoverable) {\n this._recover = true;\n this._offset = result.offset || 0;\n this._epoch = result.epoch || '';\n }\n if (result.delta) {\n this._delta_negotiated = true;\n }\n else {\n this._delta_negotiated = false;\n }\n this._setState(SubscriptionState.Subscribed);\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const ctx = this._centrifuge._getSubscribeContext(this.channel, result);\n this.emit('subscribed', ctx);\n this._resolvePromises();\n const pubs = result.publications;\n if (pubs && pubs.length > 0) {\n for (const i in pubs) {\n if (!pubs.hasOwnProperty(i)) {\n continue;\n }\n this._handlePublication(pubs[i]);\n }\n }\n if (result.expires === true) {\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n }\n _setSubscribing(code, reason) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._isSubscribing()) {\n return;\n }\n if (this._isSubscribed()) {\n this._clearSubscribedState();\n }\n if (this._setState(SubscriptionState.Subscribing)) {\n this.emit('subscribing', { channel: this.channel, code: code, reason: reason });\n }\n // @ts-ignore – for performance reasons only await _unsubPromise for emulution case where it's required.\n if (this._centrifuge._transport && this._centrifuge._transport.emulation()) {\n yield this._unsubPromise;\n }\n if (!this._isSubscribing()) {\n return;\n }\n this._subscribe();\n });\n }\n _subscribe() {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('subscribing on', this.channel);\n // need to check transport readiness here, because there's no point for calling getData or getToken\n // if transport is not ready yet\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (!this._centrifuge._transportIsOpen) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._debug('delay subscribe on', this.channel, 'till connected');\n // subscribe will be called later automatically.\n return null;\n }\n const self = this;\n const getDataCtx = {\n channel: self.channel\n };\n if (!this._usesToken() || this._token) {\n if (self._getData) {\n self._getData(getDataCtx).then(function (data) {\n if (!self._isSubscribing()) {\n return;\n }\n self._data = data;\n self._sendSubscribe(self._token);\n });\n return null;\n }\n else {\n return self._sendSubscribe(self._token);\n }\n }\n this._getSubscriptionToken().then(function (token) {\n if (!self._isSubscribing()) {\n return;\n }\n if (!token) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n if (self._getData) {\n self._getData(getDataCtx).then(function (data) {\n if (!self._isSubscribing()) {\n return;\n }\n self._data = data;\n self._sendSubscribe(token);\n });\n }\n else {\n self._sendSubscribe(token);\n }\n }).catch(function (e) {\n if (!self._isSubscribing()) {\n return;\n }\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n type: 'subscribeToken',\n channel: self.channel,\n error: {\n code: errorCodes.subscriptionSubscribeToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n self._scheduleResubscribe();\n });\n return null;\n }\n _sendSubscribe(token) {\n // we also need to check for transport state before sending subscription\n // because it may change for subscription with side effects (getData, getToken options)\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (!this._centrifuge._transportIsOpen) {\n return null;\n }\n const channel = this.channel;\n const req = {\n channel: channel\n };\n if (token) {\n req.token = token;\n }\n if (this._data) {\n req.data = this._data;\n }\n if (this._positioned) {\n req.positioned = true;\n }\n if (this._recoverable) {\n req.recoverable = true;\n }\n if (this._joinLeave) {\n req.join_leave = true;\n }\n if (this._needRecover()) {\n req.recover = true;\n const offset = this._getOffset();\n if (offset) {\n req.offset = offset;\n }\n const epoch = this._getEpoch();\n if (epoch) {\n req.epoch = epoch;\n }\n }\n if (this._delta) {\n req.delta = this._delta;\n }\n const cmd = { subscribe: req };\n this._inflight = true;\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._call(cmd).then(resolveCtx => {\n this._inflight = false;\n // @ts-ignore - improve later.\n const result = resolveCtx.reply.subscribe;\n this._handleSubscribeResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n this._inflight = false;\n this._handleSubscribeError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n return cmd;\n }\n _handleSubscribeError(error) {\n if (!this._isSubscribing()) {\n return;\n }\n if (error.code === errorCodes.timeout) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n this._centrifuge._disconnect(connectingCodes.subscribeTimeout, 'subscribe timeout', true);\n return;\n }\n this._subscribeError(error);\n }\n _handleSubscribeResponse(result) {\n if (!this._isSubscribing()) {\n return;\n }\n this._setSubscribed(result);\n }\n _setUnsubscribed(code, reason, sendUnsubscribe) {\n if (this._isUnsubscribed()) {\n return Promise.resolve();\n }\n let promise = Promise.resolve();\n if (this._isSubscribed()) {\n if (sendUnsubscribe) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n promise = this._centrifuge._unsubscribe(this);\n }\n this._clearSubscribedState();\n }\n else if (this._isSubscribing()) {\n if (this._inflight && sendUnsubscribe) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n promise = this._centrifuge._unsubscribe(this);\n }\n this._clearSubscribingState();\n }\n if (this._setState(SubscriptionState.Unsubscribed)) {\n this.emit('unsubscribed', { channel: this.channel, code: code, reason: reason });\n }\n this._rejectPromises({ code: errorCodes.subscriptionUnsubscribed, message: this.state });\n return promise;\n }\n _handlePublication(pub) {\n if (this._delta && this._delta_negotiated) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const { newData, newPrevValue } = this._centrifuge._codec.applyDeltaIfNeeded(pub, this._prevValue);\n pub.data = newData;\n this._prevValue = newPrevValue;\n }\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const ctx = this._centrifuge._getPublicationContext(this.channel, pub);\n this.emit('publication', ctx);\n if (pub.offset) {\n this._offset = pub.offset;\n }\n }\n _handleJoin(join) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const info = this._centrifuge._getJoinLeaveContext(join.info);\n this.emit('join', { channel: this.channel, info: info });\n }\n _handleLeave(leave) {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n const info = this._centrifuge._getJoinLeaveContext(leave.info);\n this.emit('leave', { channel: this.channel, info: info });\n }\n _resolvePromises() {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].resolve();\n delete this._promises[id];\n }\n }\n _rejectPromises(err) {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n }\n _scheduleResubscribe() {\n const self = this;\n const delay = this._getResubscribeDelay();\n this._resubscribeTimeout = setTimeout(function () {\n if (self._isSubscribing()) {\n self._subscribe();\n }\n }, delay);\n }\n _subscribeError(err) {\n if (!this._isSubscribing()) {\n return;\n }\n if (err.code < 100 || err.code === 109 || err.temporary === true) {\n if (err.code === 109) { // Token expired error.\n this._token = '';\n }\n const errContext = {\n channel: this.channel,\n type: 'subscribe',\n error: err\n };\n if (this._centrifuge.state === State.Connected) {\n this.emit('error', errContext);\n }\n this._scheduleResubscribe();\n }\n else {\n this._setUnsubscribed(err.code, err.message, false);\n }\n }\n _getResubscribeDelay() {\n const delay = backoff(this._resubscribeAttempts, this._minResubscribeDelay, this._maxResubscribeDelay);\n this._resubscribeAttempts++;\n return delay;\n }\n _setOptions(options) {\n if (!options) {\n return;\n }\n if (options.since) {\n this._offset = options.since.offset;\n this._epoch = options.since.epoch;\n this._recover = true;\n }\n if (options.data) {\n this._data = options.data;\n }\n if (options.getData) {\n this._getData = options.getData;\n }\n if (options.minResubscribeDelay !== undefined) {\n this._minResubscribeDelay = options.minResubscribeDelay;\n }\n if (options.maxResubscribeDelay !== undefined) {\n this._maxResubscribeDelay = options.maxResubscribeDelay;\n }\n if (options.token) {\n this._token = options.token;\n }\n if (options.getToken) {\n this._getToken = options.getToken;\n }\n if (options.positioned === true) {\n this._positioned = true;\n }\n if (options.recoverable === true) {\n this._recoverable = true;\n }\n if (options.joinLeave === true) {\n this._joinLeave = true;\n }\n if (options.delta) {\n if (options.delta !== 'fossil') {\n throw new Error('unsupported delta format');\n }\n this._delta = options.delta;\n }\n }\n _getOffset() {\n const offset = this._offset;\n if (offset !== null) {\n return offset;\n }\n return 0;\n }\n _getEpoch() {\n const epoch = this._epoch;\n if (epoch !== null) {\n return epoch;\n }\n return '';\n }\n _clearRefreshTimeout() {\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n }\n _clearResubscribeTimeout() {\n if (this._resubscribeTimeout !== null) {\n clearTimeout(this._resubscribeTimeout);\n this._resubscribeTimeout = null;\n }\n }\n _getSubscriptionToken() {\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n this._centrifuge._debug('get subscription token for channel', this.channel);\n const ctx = {\n channel: this.channel\n };\n const getToken = this._getToken;\n if (getToken === null) {\n this.emit('error', {\n type: 'configuration',\n channel: this.channel,\n error: {\n code: errorCodes.badConfiguration,\n message: 'provide a function to get channel subscription token'\n }\n });\n throw new UnauthorizedError('');\n }\n return getToken(ctx);\n }\n _refresh() {\n this._clearRefreshTimeout();\n const self = this;\n this._getSubscriptionToken().then(function (token) {\n if (!self._isSubscribed()) {\n return;\n }\n if (!token) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n const req = {\n channel: self.channel,\n token: token\n };\n const msg = {\n 'sub_refresh': req\n };\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n self._centrifuge._call(msg).then(resolveCtx => {\n // @ts-ignore - improve later.\n const result = resolveCtx.reply.sub_refresh;\n self._refreshResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n self._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }).catch(function (e) {\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n type: 'refreshToken',\n channel: self.channel,\n error: {\n code: errorCodes.subscriptionRefreshToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n self._refreshTimeout = setTimeout(() => self._refresh(), self._getRefreshRetryDelay());\n });\n }\n _refreshResponse(result) {\n if (!this._isSubscribed()) {\n return;\n }\n // @ts-ignore – we are hiding some methods from public API autocompletion.\n this._centrifuge._debug('subscription token refreshed, channel', this.channel);\n this._clearRefreshTimeout();\n if (result.expires === true) {\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n }\n _refreshError(err) {\n if (!this._isSubscribed()) {\n return;\n }\n if (err.code < 100 || err.temporary === true) {\n this.emit('error', {\n type: 'refresh',\n channel: this.channel,\n error: err\n });\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getRefreshRetryDelay());\n }\n else {\n this._setUnsubscribed(err.code, err.message, true);\n }\n }\n _getRefreshRetryDelay() {\n return backoff(0, 10000, 20000);\n }\n _failUnauthorized() {\n this._setUnsubscribed(unsubscribedCodes.unauthorized, 'unauthorized', true);\n }\n}\n\n/** @internal */\nclass SockjsTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._transport = null;\n }\n name() {\n return 'sockjs';\n }\n subName() {\n return 'sockjs-' + this._transport.transport;\n }\n emulation() {\n return false;\n }\n supported() {\n return this.options.sockjs !== null;\n }\n initialize(_protocol, callbacks) {\n this._transport = new this.options.sockjs(this.endpoint, null, this.options.sockjsOptions);\n this._transport.onopen = () => {\n callbacks.onOpen();\n };\n this._transport.onerror = e => {\n callbacks.onError(e);\n };\n this._transport.onclose = closeEvent => {\n callbacks.onClose(closeEvent);\n };\n this._transport.onmessage = event => {\n callbacks.onMessage(event.data);\n };\n }\n close() {\n this._transport.close();\n }\n send(data) {\n this._transport.send(data);\n }\n}\n\n/** @internal */\nclass WebsocketTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._transport = null;\n }\n name() {\n return 'websocket';\n }\n subName() {\n return 'websocket';\n }\n emulation() {\n return false;\n }\n supported() {\n return this.options.websocket !== undefined && this.options.websocket !== null;\n }\n initialize(protocol, callbacks) {\n let subProtocol = '';\n if (protocol === 'protobuf') {\n subProtocol = 'centrifuge-protobuf';\n }\n if (subProtocol !== '') {\n this._transport = new this.options.websocket(this.endpoint, subProtocol);\n }\n else {\n this._transport = new this.options.websocket(this.endpoint);\n }\n if (protocol === 'protobuf') {\n this._transport.binaryType = 'arraybuffer';\n }\n this._transport.onopen = () => {\n callbacks.onOpen();\n };\n this._transport.onerror = e => {\n callbacks.onError(e);\n };\n this._transport.onclose = closeEvent => {\n callbacks.onClose(closeEvent);\n };\n this._transport.onmessage = event => {\n callbacks.onMessage(event.data);\n };\n }\n close() {\n this._transport.close();\n }\n send(data) {\n this._transport.send(data);\n }\n}\n\n/** @internal */\nclass HttpStreamTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._abortController = null;\n this._utf8decoder = new TextDecoder();\n this._protocol = 'json';\n }\n name() {\n return 'http_stream';\n }\n subName() {\n return 'http_stream';\n }\n emulation() {\n return true;\n }\n _handleErrors(response) {\n if (!response.ok)\n throw new Error(response.status);\n return response;\n }\n _fetchEventTarget(self, endpoint, options) {\n const eventTarget = new EventTarget();\n // fetch with connection timeout maybe? https://github.com/github/fetch/issues/175\n const fetchFunc = self.options.fetch;\n fetchFunc(endpoint, options)\n .then(self._handleErrors)\n .then(response => {\n eventTarget.dispatchEvent(new Event('open'));\n let jsonStreamBuf = '';\n let jsonStreamPos = 0;\n let protoStreamBuf = new Uint8Array();\n const reader = response.body.getReader();\n return new self.options.readableStream({\n start(controller) {\n function pump() {\n return reader.read().then(({ done, value }) => {\n // When no more data needs to be consumed, close the stream\n if (done) {\n eventTarget.dispatchEvent(new Event('close'));\n controller.close();\n return;\n }\n try {\n if (self._protocol === 'json') {\n jsonStreamBuf += self._utf8decoder.decode(value);\n while (jsonStreamPos < jsonStreamBuf.length) {\n if (jsonStreamBuf[jsonStreamPos] === '\\n') {\n const line = jsonStreamBuf.substring(0, jsonStreamPos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: line }));\n jsonStreamBuf = jsonStreamBuf.substring(jsonStreamPos + 1);\n jsonStreamPos = 0;\n }\n else {\n ++jsonStreamPos;\n }\n }\n }\n else {\n const mergedArray = new Uint8Array(protoStreamBuf.length + value.length);\n mergedArray.set(protoStreamBuf);\n mergedArray.set(value, protoStreamBuf.length);\n protoStreamBuf = mergedArray;\n while (true) {\n const result = self.options.decoder.decodeReply(protoStreamBuf);\n if (result.ok) {\n const data = protoStreamBuf.slice(0, result.pos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: data }));\n protoStreamBuf = protoStreamBuf.slice(result.pos);\n continue;\n }\n break;\n }\n }\n }\n catch (error) {\n // @ts-ignore - improve later.\n eventTarget.dispatchEvent(new Event('error', { detail: error }));\n eventTarget.dispatchEvent(new Event('close'));\n controller.close();\n return;\n }\n pump();\n }).catch(function (e) {\n // @ts-ignore - improve later.\n eventTarget.dispatchEvent(new Event('error', { detail: e }));\n eventTarget.dispatchEvent(new Event('close'));\n controller.close();\n return;\n });\n }\n return pump();\n }\n });\n })\n .catch(error => {\n // @ts-ignore - improve later.\n eventTarget.dispatchEvent(new Event('error', { detail: error }));\n eventTarget.dispatchEvent(new Event('close'));\n });\n return eventTarget;\n }\n supported() {\n return this.options.fetch !== null &&\n this.options.readableStream !== null &&\n typeof TextDecoder !== 'undefined' &&\n typeof AbortController !== 'undefined' &&\n typeof EventTarget !== 'undefined' &&\n typeof Event !== 'undefined' &&\n typeof MessageEvent !== 'undefined' &&\n typeof Error !== 'undefined';\n }\n initialize(protocol, callbacks, initialData) {\n this._protocol = protocol;\n this._abortController = new AbortController();\n let headers;\n let body;\n if (protocol === 'json') {\n headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n body = initialData;\n }\n else {\n headers = {\n 'Accept': 'application/octet-stream',\n 'Content-Type': 'application/octet-stream'\n };\n body = initialData;\n }\n const fetchOptions = {\n method: 'POST',\n headers: headers,\n body: body,\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'no-cache',\n signal: this._abortController.signal\n };\n const eventTarget = this._fetchEventTarget(this, this.endpoint, fetchOptions);\n eventTarget.addEventListener('open', () => {\n callbacks.onOpen();\n });\n eventTarget.addEventListener('error', (e) => {\n this._abortController.abort();\n callbacks.onError(e);\n });\n eventTarget.addEventListener('close', () => {\n this._abortController.abort();\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n });\n eventTarget.addEventListener('message', (e) => {\n callbacks.onMessage(e.data);\n });\n }\n close() {\n this._abortController.abort();\n }\n send(data, session, node) {\n let headers;\n let body;\n const req = {\n session: session,\n node: node,\n data: data\n };\n if (this._protocol === 'json') {\n headers = {\n 'Content-Type': 'application/json'\n };\n body = JSON.stringify(req);\n }\n else {\n headers = {\n 'Content-Type': 'application/octet-stream'\n };\n body = this.options.encoder.encodeEmulationRequest(req);\n }\n const fetchFunc = this.options.fetch;\n const fetchOptions = {\n method: 'POST',\n headers: headers,\n body: body,\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'no-cache'\n };\n fetchFunc(this.options.emulationEndpoint, fetchOptions);\n }\n}\n\n/** @internal */\nclass SseTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._protocol = 'json';\n this._transport = null;\n this._onClose = null;\n }\n name() {\n return 'sse';\n }\n subName() {\n return 'sse';\n }\n emulation() {\n return true;\n }\n supported() {\n return this.options.eventsource !== null && this.options.fetch !== null;\n }\n initialize(_protocol, callbacks, initialData) {\n let url;\n if (globalThis && globalThis.document && globalThis.document.baseURI) {\n // Handle case when endpoint is relative, like //example.com/connection/sse\n url = new URL(this.endpoint, globalThis.document.baseURI);\n }\n else {\n url = new URL(this.endpoint);\n }\n url.searchParams.append('cf_connect', initialData);\n const eventsourceOptions = {};\n const eventSource = new this.options.eventsource(url.toString(), eventsourceOptions);\n this._transport = eventSource;\n const self = this;\n eventSource.onopen = function () {\n callbacks.onOpen();\n };\n eventSource.onerror = function (e) {\n eventSource.close();\n callbacks.onError(e);\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n };\n eventSource.onmessage = function (e) {\n callbacks.onMessage(e.data);\n };\n self._onClose = function () {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n };\n }\n close() {\n this._transport.close();\n if (this._onClose !== null) {\n this._onClose();\n }\n }\n send(data, session, node) {\n const req = {\n session: session,\n node: node,\n data: data\n };\n const headers = {\n 'Content-Type': 'application/json'\n };\n const body = JSON.stringify(req);\n const fetchFunc = this.options.fetch;\n const fetchOptions = {\n method: 'POST',\n headers: headers,\n body: body,\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'no-cache'\n };\n fetchFunc(this.options.emulationEndpoint, fetchOptions);\n }\n}\n\n/** @internal */\nclass WebtransportTransport {\n constructor(endpoint, options) {\n this.endpoint = endpoint;\n this.options = options;\n this._transport = null;\n this._stream = null;\n this._writer = null;\n this._utf8decoder = new TextDecoder();\n this._protocol = 'json';\n }\n name() {\n return 'webtransport';\n }\n subName() {\n return 'webtransport';\n }\n emulation() {\n return false;\n }\n supported() {\n return this.options.webtransport !== undefined && this.options.webtransport !== null;\n }\n initialize(protocol, callbacks) {\n return __awaiter(this, void 0, void 0, function* () {\n let url;\n if (globalThis && globalThis.document && globalThis.document.baseURI) {\n // Handle case when endpoint is relative, like //example.com/connection/webtransport\n url = new URL(this.endpoint, globalThis.document.baseURI);\n }\n else {\n url = new URL(this.endpoint);\n }\n if (protocol === 'protobuf') {\n url.searchParams.append('cf_protocol', 'protobuf');\n }\n this._protocol = protocol;\n const eventTarget = new EventTarget();\n this._transport = new this.options.webtransport(url.toString());\n this._transport.closed.then(() => {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n }).catch(() => {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n });\n try {\n yield this._transport.ready;\n }\n catch (_a) {\n this.close();\n return;\n }\n let stream;\n try {\n stream = yield this._transport.createBidirectionalStream();\n }\n catch (_b) {\n this.close();\n return;\n }\n this._stream = stream;\n this._writer = this._stream.writable.getWriter();\n eventTarget.addEventListener('close', () => {\n callbacks.onClose({\n code: 4,\n reason: 'connection closed'\n });\n });\n eventTarget.addEventListener('message', (e) => {\n callbacks.onMessage(e.data);\n });\n this._startReading(eventTarget);\n callbacks.onOpen();\n });\n }\n _startReading(eventTarget) {\n return __awaiter(this, void 0, void 0, function* () {\n const reader = this._stream.readable.getReader();\n let jsonStreamBuf = '';\n let jsonStreamPos = 0;\n let protoStreamBuf = new Uint8Array();\n try {\n while (true) {\n const { done, value } = yield reader.read();\n if (value.length > 0) {\n if (this._protocol === 'json') {\n jsonStreamBuf += this._utf8decoder.decode(value);\n while (jsonStreamPos < jsonStreamBuf.length) {\n if (jsonStreamBuf[jsonStreamPos] === '\\n') {\n const line = jsonStreamBuf.substring(0, jsonStreamPos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: line }));\n jsonStreamBuf = jsonStreamBuf.substring(jsonStreamPos + 1);\n jsonStreamPos = 0;\n }\n else {\n ++jsonStreamPos;\n }\n }\n }\n else {\n const mergedArray = new Uint8Array(protoStreamBuf.length + value.length);\n mergedArray.set(protoStreamBuf);\n mergedArray.set(value, protoStreamBuf.length);\n protoStreamBuf = mergedArray;\n while (true) {\n const result = this.options.decoder.decodeReply(protoStreamBuf);\n if (result.ok) {\n const data = protoStreamBuf.slice(0, result.pos);\n eventTarget.dispatchEvent(new MessageEvent('message', { data: data }));\n protoStreamBuf = protoStreamBuf.slice(result.pos);\n continue;\n }\n break;\n }\n }\n }\n if (done) {\n break;\n }\n }\n }\n catch (_a) {\n eventTarget.dispatchEvent(new Event('close'));\n }\n });\n }\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (this._writer) {\n yield this._writer.close();\n }\n this._transport.close();\n }\n catch (e) {\n // already closed.\n }\n });\n }\n send(data) {\n return __awaiter(this, void 0, void 0, function* () {\n let binary;\n if (this._protocol === 'json') {\n // Need extra \\n since WT is non-frame protocol. \n binary = new TextEncoder().encode(data + '\\n');\n }\n else {\n binary = data;\n }\n try {\n yield this._writer.write(binary);\n }\n catch (e) {\n this.close();\n }\n });\n }\n}\n\n/*\nCopyright 2014-2024 Dmitry Chestnykh (JavaScript port)\nCopyright 2007 D. Richard Hipp (original C version)\n\nFossil SCM delta compression algorithm, this is only the applyDelta part extracted\nfrom https://github.com/dchest/fossil-delta-js. The code was slightly modified\nto strip unnecessary parts. The copyright on top of this file is from the original\nrepo on Github licensed under Simplified BSD License.\n*/\nconst zValue = [\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1,\n -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,\n 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, 36, -1, 37,\n 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,\n 57, 58, 59, 60, 61, 62, -1, -1, -1, 63, -1,\n];\n// Reader reads bytes, chars, ints from array.\nclass Reader {\n constructor(array) {\n this.a = array; // source array\n this.pos = 0; // current position in array\n }\n haveBytes() {\n return this.pos < this.a.length;\n }\n getByte() {\n const b = this.a[this.pos];\n this.pos++;\n if (this.pos > this.a.length)\n throw new RangeError(\"out of bounds\");\n return b;\n }\n getChar() {\n return String.fromCharCode(this.getByte());\n }\n // Read base64-encoded unsigned integer.\n getInt() {\n let v = 0;\n let c;\n while (this.haveBytes() && (c = zValue[0x7f & this.getByte()]) >= 0) {\n v = (v << 6) + c;\n }\n this.pos--;\n return v >>> 0;\n }\n}\n// Write writes an array.\nclass Writer {\n constructor() {\n this.a = [];\n }\n toByteArray(sourceType) {\n if (Array.isArray(sourceType)) {\n return this.a;\n }\n return new Uint8Array(this.a);\n }\n // Copy from array at start to end.\n putArray(a, start, end) {\n // TODO: optimize.\n for (let i = start; i < end; i++)\n this.a.push(a[i]);\n }\n}\n// Return a 32-bit checksum of the array.\nfunction checksum(arr) {\n let sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0, z = 0, N = arr.length;\n //TODO measure if this unrolling is helpful.\n while (N >= 16) {\n sum0 = (sum0 + arr[z + 0]) | 0;\n sum1 = (sum1 + arr[z + 1]) | 0;\n sum2 = (sum2 + arr[z + 2]) | 0;\n sum3 = (sum3 + arr[z + 3]) | 0;\n sum0 = (sum0 + arr[z + 4]) | 0;\n sum1 = (sum1 + arr[z + 5]) | 0;\n sum2 = (sum2 + arr[z + 6]) | 0;\n sum3 = (sum3 + arr[z + 7]) | 0;\n sum0 = (sum0 + arr[z + 8]) | 0;\n sum1 = (sum1 + arr[z + 9]) | 0;\n sum2 = (sum2 + arr[z + 10]) | 0;\n sum3 = (sum3 + arr[z + 11]) | 0;\n sum0 = (sum0 + arr[z + 12]) | 0;\n sum1 = (sum1 + arr[z + 13]) | 0;\n sum2 = (sum2 + arr[z + 14]) | 0;\n sum3 = (sum3 + arr[z + 15]) | 0;\n z += 16;\n N -= 16;\n }\n while (N >= 4) {\n sum0 = (sum0 + arr[z + 0]) | 0;\n sum1 = (sum1 + arr[z + 1]) | 0;\n sum2 = (sum2 + arr[z + 2]) | 0;\n sum3 = (sum3 + arr[z + 3]) | 0;\n z += 4;\n N -= 4;\n }\n sum3 = (((((sum3 + (sum2 << 8)) | 0) + (sum1 << 16)) | 0) + (sum0 << 24)) | 0;\n switch (N) {\n //@ts-ignore fallthrough is needed.\n case 3:\n sum3 = (sum3 + (arr[z + 2] << 8)) | 0; /* falls through */\n //@ts-ignore fallthrough is needed.\n case 2:\n sum3 = (sum3 + (arr[z + 1] << 16)) | 0; /* falls through */\n case 1:\n sum3 = (sum3 + (arr[z + 0] << 24)) | 0; /* falls through */\n }\n return sum3 >>> 0;\n}\n/**\n * Apply a delta byte array to a source byte array, returning the target byte array.\n */\nfunction applyDelta(source, delta) {\n let total = 0;\n const zDelta = new Reader(delta);\n const lenSrc = source.length;\n const lenDelta = delta.length;\n const limit = zDelta.getInt();\n if (zDelta.getChar() !== \"\\n\")\n throw new Error(\"size integer not terminated by '\\\\n'\");\n const zOut = new Writer();\n while (zDelta.haveBytes()) {\n const cnt = zDelta.getInt();\n let ofst;\n switch (zDelta.getChar()) {\n case \"@\":\n ofst = zDelta.getInt();\n if (zDelta.haveBytes() && zDelta.getChar() !== \",\")\n throw new Error(\"copy command not terminated by ','\");\n total += cnt;\n if (total > limit)\n throw new Error(\"copy exceeds output file size\");\n if (ofst + cnt > lenSrc)\n throw new Error(\"copy extends past end of input\");\n zOut.putArray(source, ofst, ofst + cnt);\n break;\n case \":\":\n total += cnt;\n if (total > limit)\n throw new Error(\"insert command gives an output larger than predicted\");\n if (cnt > lenDelta)\n throw new Error(\"insert count exceeds size of delta\");\n zOut.putArray(zDelta.a, zDelta.pos, zDelta.pos + cnt);\n zDelta.pos += cnt;\n break;\n case \";\":\n {\n const out = zOut.toByteArray(source);\n if (cnt !== checksum(out))\n throw new Error(\"bad checksum\");\n if (total !== limit)\n throw new Error(\"generated size does not match predicted size\");\n return out;\n }\n default:\n throw new Error(\"unknown delta operator\");\n }\n }\n throw new Error(\"unterminated delta\");\n}\n\n/** @internal */\nclass JsonCodec {\n name() {\n return 'json';\n }\n encodeCommands(commands) {\n return commands.map(c => JSON.stringify(c)).join('\\n');\n }\n decodeReplies(data) {\n return data.trim().split('\\n').map(r => JSON.parse(r));\n }\n applyDeltaIfNeeded(pub, prevValue) {\n let newData, newPrevValue;\n if (pub.delta) {\n // JSON string delta.\n const valueArray = applyDelta(prevValue, new TextEncoder().encode(pub.data));\n newData = JSON.parse(new TextDecoder().decode(valueArray));\n newPrevValue = valueArray;\n }\n else {\n // Full data as JSON string.\n newData = JSON.parse(pub.data);\n newPrevValue = new TextEncoder().encode(pub.data);\n }\n return { newData, newPrevValue };\n }\n}\n\nconst defaults = {\n token: '',\n getToken: null,\n data: null,\n getData: null,\n debug: false,\n name: 'js',\n version: '',\n fetch: null,\n readableStream: null,\n websocket: null,\n eventsource: null,\n sockjs: null,\n sockjsOptions: {},\n emulationEndpoint: '/emulation',\n minReconnectDelay: 500,\n maxReconnectDelay: 20000,\n timeout: 5000,\n maxServerPingDelay: 10000,\n networkEventTarget: null,\n};\nclass UnauthorizedError extends Error {\n constructor(message) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n/** Centrifuge is a Centrifuge/Centrifugo bidirectional client. */\nclass Centrifuge extends EventEmitter$1 {\n /** Constructs Centrifuge client. Call connect() method to start connecting. */\n constructor(endpoint, options) {\n super();\n this._reconnectTimeout = null;\n this._refreshTimeout = null;\n this._serverPingTimeout = null;\n this.state = State.Disconnected;\n this._transportIsOpen = false;\n this._endpoint = endpoint;\n this._emulation = false;\n this._transports = [];\n this._currentTransportIndex = 0;\n this._triedAllTransports = false;\n this._transportWasOpen = false;\n this._transport = null;\n this._transportId = 0;\n this._deviceWentOffline = false;\n this._transportClosed = true;\n this._codec = new JsonCodec();\n this._reconnecting = false;\n this._reconnectTimeout = null;\n this._reconnectAttempts = 0;\n this._client = null;\n this._session = '';\n this._node = '';\n this._subs = {};\n this._serverSubs = {};\n this._commandId = 0;\n this._commands = [];\n this._batching = false;\n this._refreshRequired = false;\n this._refreshTimeout = null;\n this._callbacks = {};\n this._token = '';\n this._data = null;\n this._dispatchPromise = Promise.resolve();\n this._serverPing = 0;\n this._serverPingTimeout = null;\n this._sendPong = false;\n this._promises = {};\n this._promiseId = 0;\n this._debugEnabled = false;\n this._networkEventsSet = false;\n this._config = Object.assign(Object.assign({}, defaults), options);\n this._configure();\n if (this._debugEnabled) {\n this.on('state', (ctx) => {\n this._debug('client state', ctx.oldState, '->', ctx.newState);\n });\n this.on('error', (ctx) => {\n this._debug('client error', ctx);\n });\n }\n else {\n // Avoid unhandled exception in EventEmitter for non-set error handler.\n this.on('error', function () { Function.prototype(); });\n }\n }\n /** newSubscription allocates new Subscription to a channel. Since server only allows\n * one subscription per channel per client this method throws if client already has\n * channel subscription in internal registry.\n * */\n newSubscription(channel, options) {\n if (this.getSubscription(channel) !== null) {\n throw new Error('Subscription to the channel ' + channel + ' already exists');\n }\n const sub = new Subscription(this, channel, options);\n this._subs[channel] = sub;\n return sub;\n }\n /** getSubscription returns Subscription if it's registered in the internal\n * registry or null. */\n getSubscription(channel) {\n return this._getSub(channel);\n }\n /** removeSubscription allows removing Subcription from the internal registry. Subscrption\n * must be in unsubscribed state. */\n removeSubscription(sub) {\n if (!sub) {\n return;\n }\n if (sub.state !== SubscriptionState.Unsubscribed) {\n sub.unsubscribe();\n }\n this._removeSubscription(sub);\n }\n /** Get a map with all current client-side subscriptions. */\n subscriptions() {\n return this._subs;\n }\n /** ready returns a Promise which resolves upon client goes to Connected\n * state and rejects in case of client goes to Disconnected or Failed state.\n * Users can provide optional timeout in milliseconds. */\n ready(timeout) {\n if (this.state === State.Disconnected) {\n return Promise.reject({ code: errorCodes.clientDisconnected, message: 'client disconnected' });\n }\n if (this.state === State.Connected) {\n return Promise.resolve();\n }\n return new Promise((res, rej) => {\n const ctx = {\n resolve: res,\n reject: rej\n };\n if (timeout) {\n ctx.timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n }, timeout);\n }\n this._promises[this._nextPromiseId()] = ctx;\n });\n }\n /** connect to a server. */\n connect() {\n if (this._isConnected()) {\n this._debug('connect called when already connected');\n return;\n }\n if (this._isConnecting()) {\n this._debug('connect called when already connecting');\n return;\n }\n this._debug('connect called');\n this._reconnectAttempts = 0;\n this._startConnecting();\n }\n /** disconnect from a server. */\n disconnect() {\n this._disconnect(disconnectedCodes.disconnectCalled, 'disconnect called', false);\n }\n /** setToken allows setting connection token. Or resetting used token to be empty. */\n setToken(token) {\n this._token = token;\n }\n /** send asynchronous data to a server (without any response from a server\n * expected, see rpc method if you need response). */\n send(data) {\n const cmd = {\n send: {\n data: data\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n const sent = self._transportSendCommands([cmd]); // can send message to server without id set\n if (!sent) {\n return Promise.reject(self._createErrorObject(errorCodes.transportWriteError, 'transport write error'));\n }\n return Promise.resolve();\n });\n }\n /** rpc to a server - i.e. a call which waits for a response with data. */\n rpc(method, data) {\n const cmd = {\n rpc: {\n method: method,\n data: data\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n return {\n 'data': reply.rpc.data\n };\n });\n });\n }\n /** publish data to a channel. */\n publish(channel, data) {\n const cmd = {\n publish: {\n channel: channel,\n data: data\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function () {\n return {};\n });\n });\n }\n /** history for a channel. By default it does not return publications (only current\n * StreamPosition data) – provide an explicit limit > 0 to load publications.*/\n history(channel, options) {\n const cmd = {\n history: this._getHistoryRequest(channel, options)\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n const result = reply.history;\n const publications = [];\n if (result.publications) {\n for (let i = 0; i < result.publications.length; i++) {\n publications.push(self._getPublicationContext(channel, result.publications[i]));\n }\n }\n return {\n 'publications': publications,\n 'epoch': result.epoch || '',\n 'offset': result.offset || 0\n };\n });\n });\n }\n /** presence for a channel. */\n presence(channel) {\n const cmd = {\n presence: {\n channel: channel\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n const clients = reply.presence.presence;\n for (const clientId in clients) {\n if (clients.hasOwnProperty(clientId)) {\n const connInfo = clients[clientId]['conn_info'];\n const chanInfo = clients[clientId]['chan_info'];\n if (connInfo) {\n clients[clientId].connInfo = connInfo;\n }\n if (chanInfo) {\n clients[clientId].chanInfo = chanInfo;\n }\n }\n }\n return {\n 'clients': clients\n };\n });\n });\n }\n /** presence stats for a channel. */\n presenceStats(channel) {\n const cmd = {\n 'presence_stats': {\n channel: channel\n }\n };\n const self = this;\n return this._methodCall().then(function () {\n return self._callPromise(cmd, function (reply) {\n const result = reply.presence_stats;\n return {\n 'numUsers': result.num_users,\n 'numClients': result.num_clients\n };\n });\n });\n }\n /** start command batching (collect into temporary buffer without sending to a server)\n * until stopBatching called.*/\n startBatching() {\n // start collecting messages without sending them to Centrifuge until flush\n // method called\n this._batching = true;\n }\n /** stop batching commands and flush collected commands to the\n * network (all in one request/frame).*/\n stopBatching() {\n const self = this;\n // Why so nested? Two levels here requred to deal with promise resolving queue.\n // In Subscription case we wait 2 futures before sending data to connection.\n // Otherwise _batching becomes false before batching decision has a chance to be executed.\n Promise.resolve().then(function () {\n Promise.resolve().then(function () {\n self._batching = false;\n self._flush();\n });\n });\n }\n _debug(...args) {\n if (!this._debugEnabled) {\n return;\n }\n log('debug', args);\n }\n /** @internal */\n _formatOverride() {\n return;\n }\n _configure() {\n if (!('Promise' in globalThis)) {\n throw new Error('Promise polyfill required');\n }\n if (!this._endpoint) {\n throw new Error('endpoint configuration required');\n }\n if (this._config.token !== null) {\n this._token = this._config.token;\n }\n if (this._config.data !== null) {\n this._data = this._config.data;\n }\n this._codec = new JsonCodec();\n this._formatOverride();\n if (this._config.debug === true ||\n (typeof localStorage !== 'undefined' && localStorage.getItem('centrifuge.debug'))) {\n this._debugEnabled = true;\n }\n this._debug('config', this._config);\n if (typeof this._endpoint === 'string') ;\n else if (typeof this._endpoint === 'object' && this._endpoint instanceof Array) {\n this._transports = this._endpoint;\n this._emulation = true;\n for (const i in this._transports) {\n if (this._transports.hasOwnProperty(i)) {\n const transportConfig = this._transports[i];\n if (!transportConfig.endpoint || !transportConfig.transport) {\n throw new Error('malformed transport configuration');\n }\n const transportName = transportConfig.transport;\n if (['websocket', 'http_stream', 'sse', 'sockjs', 'webtransport'].indexOf(transportName) < 0) {\n throw new Error('unsupported transport name: ' + transportName);\n }\n }\n }\n }\n else {\n throw new Error('unsupported url configuration type: only string or array of objects are supported');\n }\n }\n _setState(newState) {\n if (this.state !== newState) {\n this._reconnecting = false;\n const oldState = this.state;\n this.state = newState;\n this.emit('state', { newState, oldState });\n return true;\n }\n return false;\n }\n _isDisconnected() {\n return this.state === State.Disconnected;\n }\n _isConnecting() {\n return this.state === State.Connecting;\n }\n _isConnected() {\n return this.state === State.Connected;\n }\n _nextCommandId() {\n return ++this._commandId;\n }\n _setNetworkEvents() {\n if (this._networkEventsSet) {\n return;\n }\n let eventTarget = null;\n if (this._config.networkEventTarget !== null) {\n eventTarget = this._config.networkEventTarget;\n }\n else if (typeof globalThis.addEventListener !== 'undefined') {\n eventTarget = globalThis;\n }\n if (eventTarget) {\n eventTarget.addEventListener('offline', () => {\n this._debug('offline event triggered');\n if (this.state === State.Connected || this.state === State.Connecting) {\n this._disconnect(connectingCodes.transportClosed, 'transport closed', true);\n this._deviceWentOffline = true;\n }\n });\n eventTarget.addEventListener('online', () => {\n this._debug('online event triggered');\n if (this.state !== State.Connecting) {\n return;\n }\n if (this._deviceWentOffline && !this._transportClosed) {\n // This is a workaround for mobile Safari where close callback may be\n // not issued upon device going to the flight mode. We know for sure\n // that transport close was called, so we start reconnecting. In this\n // case if the close callback will be issued for some reason after some\n // time – it will be ignored due to transport ID mismatch.\n this._deviceWentOffline = false;\n this._transportClosed = true;\n }\n this._clearReconnectTimeout();\n this._startReconnecting();\n });\n this._networkEventsSet = true;\n }\n }\n _getReconnectDelay() {\n const delay = backoff(this._reconnectAttempts, this._config.minReconnectDelay, this._config.maxReconnectDelay);\n this._reconnectAttempts += 1;\n return delay;\n }\n _clearOutgoingRequests() {\n // fire errbacks of registered outgoing calls.\n for (const id in this._callbacks) {\n if (this._callbacks.hasOwnProperty(id)) {\n const callbacks = this._callbacks[id];\n clearTimeout(callbacks.timeout);\n const errback = callbacks.errback;\n if (!errback) {\n continue;\n }\n errback({ error: this._createErrorObject(errorCodes.connectionClosed, 'connection closed') });\n }\n }\n this._callbacks = {};\n }\n _clearConnectedState() {\n this._client = null;\n this._clearServerPingTimeout();\n this._clearRefreshTimeout();\n // fire events for client-side subscriptions.\n for (const channel in this._subs) {\n if (!this._subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = this._subs[channel];\n if (sub.state === SubscriptionState.Subscribed) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._setSubscribing(subscribingCodes.transportClosed, 'transport closed');\n }\n }\n // fire events for server-side subscriptions.\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel)) {\n this.emit('subscribing', { channel: channel });\n }\n }\n }\n _handleWriteError(commands) {\n for (const command of commands) {\n const id = command.id;\n if (!(id in this._callbacks)) {\n continue;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n const errback = callbacks.errback;\n errback({ error: this._createErrorObject(errorCodes.transportWriteError, 'transport write error') });\n }\n }\n _transportSendCommands(commands) {\n if (!commands.length) {\n return true;\n }\n if (!this._transport) {\n return false;\n }\n try {\n this._transport.send(this._codec.encodeCommands(commands), this._session, this._node);\n }\n catch (e) {\n this._debug('error writing commands', e);\n this._handleWriteError(commands);\n return false;\n }\n return true;\n }\n _initializeTransport() {\n let websocket;\n if (this._config.websocket !== null) {\n websocket = this._config.websocket;\n }\n else {\n if (!(typeof globalThis.WebSocket !== 'function' && typeof globalThis.WebSocket !== 'object')) {\n websocket = globalThis.WebSocket;\n }\n }\n let sockjs = null;\n if (this._config.sockjs !== null) {\n sockjs = this._config.sockjs;\n }\n else {\n if (typeof globalThis.SockJS !== 'undefined') {\n sockjs = globalThis.SockJS;\n }\n }\n let eventsource = null;\n if (this._config.eventsource !== null) {\n eventsource = this._config.eventsource;\n }\n else {\n if (typeof globalThis.EventSource !== 'undefined') {\n eventsource = globalThis.EventSource;\n }\n }\n let fetchFunc = null;\n if (this._config.fetch !== null) {\n fetchFunc = this._config.fetch;\n }\n else {\n if (typeof globalThis.fetch !== 'undefined') {\n fetchFunc = globalThis.fetch;\n }\n }\n let readableStream = null;\n if (this._config.readableStream !== null) {\n readableStream = this._config.readableStream;\n }\n else {\n if (typeof globalThis.ReadableStream !== 'undefined') {\n readableStream = globalThis.ReadableStream;\n }\n }\n if (!this._emulation) {\n if (startsWith(this._endpoint, 'http')) {\n throw new Error('Provide explicit transport endpoints configuration in case of using HTTP (i.e. using array of TransportEndpoint instead of a single string), or use ws(s):// scheme in an endpoint if you aimed using WebSocket transport');\n }\n else {\n this._debug('client will use websocket');\n this._transport = new WebsocketTransport(this._endpoint, {\n websocket: websocket\n });\n if (!this._transport.supported()) {\n throw new Error('WebSocket not available');\n }\n }\n }\n else {\n if (this._currentTransportIndex >= this._transports.length) {\n this._triedAllTransports = true;\n this._currentTransportIndex = 0;\n }\n let count = 0;\n while (true) {\n if (count >= this._transports.length) {\n throw new Error('no supported transport found');\n }\n const transportConfig = this._transports[this._currentTransportIndex];\n const transportName = transportConfig.transport;\n const transportEndpoint = transportConfig.endpoint;\n if (transportName === 'websocket') {\n this._debug('trying websocket transport');\n this._transport = new WebsocketTransport(transportEndpoint, {\n websocket: websocket\n });\n if (!this._transport.supported()) {\n this._debug('websocket transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'webtransport') {\n this._debug('trying webtransport transport');\n this._transport = new WebtransportTransport(transportEndpoint, {\n webtransport: globalThis.WebTransport,\n decoder: this._codec,\n encoder: this._codec\n });\n if (!this._transport.supported()) {\n this._debug('webtransport transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'http_stream') {\n this._debug('trying http_stream transport');\n this._transport = new HttpStreamTransport(transportEndpoint, {\n fetch: fetchFunc,\n readableStream: readableStream,\n emulationEndpoint: this._config.emulationEndpoint,\n decoder: this._codec,\n encoder: this._codec\n });\n if (!this._transport.supported()) {\n this._debug('http_stream transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'sse') {\n this._debug('trying sse transport');\n this._transport = new SseTransport(transportEndpoint, {\n eventsource: eventsource,\n fetch: fetchFunc,\n emulationEndpoint: this._config.emulationEndpoint,\n });\n if (!this._transport.supported()) {\n this._debug('sse transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else if (transportName === 'sockjs') {\n this._debug('trying sockjs');\n this._transport = new SockjsTransport(transportEndpoint, {\n sockjs: sockjs,\n sockjsOptions: this._config.sockjsOptions\n });\n if (!this._transport.supported()) {\n this._debug('sockjs transport not available');\n this._currentTransportIndex++;\n count++;\n continue;\n }\n }\n else {\n throw new Error('unknown transport ' + transportName);\n }\n break;\n }\n }\n const self = this;\n const transport = this._transport;\n const transportId = this._nextTransportId();\n self._debug(\"id of transport\", transportId);\n let wasOpen = false;\n const initialCommands = [];\n if (this._transport.emulation()) {\n const connectCommand = self._sendConnect(true);\n initialCommands.push(connectCommand);\n }\n this._setNetworkEvents();\n const initialData = this._codec.encodeCommands(initialCommands);\n this._transportClosed = false;\n let connectTimeout;\n connectTimeout = setTimeout(function () {\n transport.close();\n }, this._config.timeout);\n this._transport.initialize(this._codec.name(), {\n onOpen: function () {\n if (connectTimeout) {\n clearTimeout(connectTimeout);\n connectTimeout = null;\n }\n if (self._transportId != transportId) {\n self._debug('open callback from non-actual transport');\n transport.close();\n return;\n }\n wasOpen = true;\n self._debug(transport.subName(), 'transport open');\n if (transport.emulation()) {\n return;\n }\n self._transportIsOpen = true;\n self._transportWasOpen = true;\n self.startBatching();\n self._sendConnect(false);\n self._sendSubscribeCommands();\n self.stopBatching();\n //@ts-ignore must be used only for debug and test purposes. Exposed only for non-emulation transport.\n self.emit('__centrifuge_debug:connect_frame_sent', {});\n },\n onError: function (e) {\n if (self._transportId != transportId) {\n self._debug('error callback from non-actual transport');\n return;\n }\n self._debug('transport level error', e);\n },\n onClose: function (closeEvent) {\n if (connectTimeout) {\n clearTimeout(connectTimeout);\n connectTimeout = null;\n }\n if (self._transportId != transportId) {\n self._debug('close callback from non-actual transport');\n return;\n }\n self._debug(transport.subName(), 'transport closed');\n self._transportClosed = true;\n self._transportIsOpen = false;\n let reason = 'connection closed';\n let needReconnect = true;\n let code = 0;\n if (closeEvent && 'code' in closeEvent && closeEvent.code) {\n code = closeEvent.code;\n }\n if (closeEvent && closeEvent.reason) {\n try {\n const advice = JSON.parse(closeEvent.reason);\n reason = advice.reason;\n needReconnect = advice.reconnect;\n }\n catch (e) {\n reason = closeEvent.reason;\n if ((code >= 3500 && code < 4000) || (code >= 4500 && code < 5000)) {\n needReconnect = false;\n }\n }\n }\n if (code < 3000) {\n if (code === 1009) {\n code = disconnectedCodes.messageSizeLimit;\n reason = 'message size limit exceeded';\n needReconnect = false;\n }\n else {\n code = connectingCodes.transportClosed;\n reason = 'transport closed';\n }\n if (self._emulation && !self._transportWasOpen) {\n self._currentTransportIndex++;\n if (self._currentTransportIndex >= self._transports.length) {\n self._triedAllTransports = true;\n self._currentTransportIndex = 0;\n }\n }\n }\n else {\n // Codes >= 3000 are sent from a server application level.\n self._transportWasOpen = true;\n }\n if (self._isConnecting() && !wasOpen) {\n self.emit('error', {\n type: 'transport',\n error: {\n code: errorCodes.transportClosed,\n message: 'transport closed'\n },\n transport: transport.name()\n });\n }\n self._reconnecting = false;\n self._disconnect(code, reason, needReconnect);\n },\n onMessage: function (data) {\n self._dataReceived(data);\n }\n }, initialData);\n //@ts-ignore must be used only for debug and test purposes.\n self.emit('__centrifuge_debug:transport_initialized', {});\n }\n _sendConnect(skipSending) {\n const connectCommand = this._constructConnectCommand();\n const self = this;\n this._call(connectCommand, skipSending).then(resolveCtx => {\n // @ts-ignore = improve later.\n const result = resolveCtx.reply.connect;\n self._connectResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n self._connectError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n return connectCommand;\n }\n _startReconnecting() {\n this._debug('start reconnecting');\n if (!this._isConnecting()) {\n this._debug('stop reconnecting: client not in connecting state');\n return;\n }\n if (this._reconnecting) {\n this._debug('reconnect already in progress, return from reconnect routine');\n return;\n }\n if (this._transportClosed === false) {\n this._debug('waiting for transport close');\n return;\n }\n this._reconnecting = true;\n const self = this;\n const emptyToken = this._token === '';\n const needTokenRefresh = this._refreshRequired || (emptyToken && this._config.getToken !== null);\n if (!needTokenRefresh) {\n if (this._config.getData) {\n this._config.getData().then(function (data) {\n if (!self._isConnecting()) {\n return;\n }\n self._data = data;\n self._initializeTransport();\n });\n }\n else {\n this._initializeTransport();\n }\n return;\n }\n this._getToken().then(function (token) {\n if (!self._isConnecting()) {\n return;\n }\n if (token == null || token == undefined) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n self._debug('connection token refreshed');\n if (self._config.getData) {\n self._config.getData().then(function (data) {\n if (!self._isConnecting()) {\n return;\n }\n self._data = data;\n self._initializeTransport();\n });\n }\n else {\n self._initializeTransport();\n }\n }).catch(function (e) {\n if (!self._isConnecting()) {\n return;\n }\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n 'type': 'connectToken',\n 'error': {\n code: errorCodes.clientConnectToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n const delay = self._getReconnectDelay();\n self._debug('error on connection token refresh, reconnect after ' + delay + ' milliseconds', e);\n self._reconnecting = false;\n self._reconnectTimeout = setTimeout(() => {\n self._startReconnecting();\n }, delay);\n });\n }\n _connectError(err) {\n if (this.state !== State.Connecting) {\n return;\n }\n if (err.code === 109) { // token expired.\n // next connect attempt will try to refresh token.\n this._refreshRequired = true;\n }\n if (err.code < 100 || err.temporary === true || err.code === 109) {\n this.emit('error', {\n 'type': 'connect',\n 'error': err\n });\n this._debug('closing transport due to connect error');\n this._disconnect(err.code, err.message, true);\n }\n else {\n this._disconnect(err.code, err.message, false);\n }\n }\n _scheduleReconnect() {\n if (!this._isConnecting()) {\n return;\n }\n let isInitialHandshake = false;\n if (this._emulation && !this._transportWasOpen && !this._triedAllTransports) {\n isInitialHandshake = true;\n }\n let delay = this._getReconnectDelay();\n if (isInitialHandshake) {\n delay = 0;\n }\n this._debug('reconnect after ' + delay + ' milliseconds');\n this._clearReconnectTimeout();\n this._reconnectTimeout = setTimeout(() => {\n this._startReconnecting();\n }, delay);\n }\n _constructConnectCommand() {\n const req = {};\n if (this._token) {\n req.token = this._token;\n }\n if (this._data) {\n req.data = this._data;\n }\n if (this._config.name) {\n req.name = this._config.name;\n }\n if (this._config.version) {\n req.version = this._config.version;\n }\n const subs = {};\n let hasSubs = false;\n for (const channel in this._serverSubs) {\n if (this._serverSubs.hasOwnProperty(channel) && this._serverSubs[channel].recoverable) {\n hasSubs = true;\n const sub = {\n 'recover': true\n };\n if (this._serverSubs[channel].offset) {\n sub['offset'] = this._serverSubs[channel].offset;\n }\n if (this._serverSubs[channel].epoch) {\n sub['epoch'] = this._serverSubs[channel].epoch;\n }\n subs[channel] = sub;\n }\n }\n if (hasSubs) {\n req.subs = subs;\n }\n return {\n connect: req\n };\n }\n _getHistoryRequest(channel, options) {\n const req = {\n channel: channel\n };\n if (options !== undefined) {\n if (options.since) {\n req.since = {\n offset: options.since.offset\n };\n if (options.since.epoch) {\n req.since.epoch = options.since.epoch;\n }\n }\n if (options.limit !== undefined) {\n req.limit = options.limit;\n }\n if (options.reverse === true) {\n req.reverse = true;\n }\n }\n return req;\n }\n _methodCall() {\n if (this._isConnected()) {\n return Promise.resolve();\n }\n return new Promise((res, rej) => {\n const timeout = setTimeout(function () {\n rej({ code: errorCodes.timeout, message: 'timeout' });\n }, this._config.timeout);\n this._promises[this._nextPromiseId()] = {\n timeout: timeout,\n resolve: res,\n reject: rej\n };\n });\n }\n _callPromise(cmd, resultCB) {\n return new Promise((resolve, reject) => {\n this._call(cmd, false).then(resolveCtx => {\n // @ts-ignore - improve later.\n resolve(resultCB(resolveCtx.reply));\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n reject(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n });\n }\n _dataReceived(data) {\n if (this._serverPing > 0) {\n this._waitServerPing();\n }\n const replies = this._codec.decodeReplies(data);\n // We have to guarantee order of events in replies processing - i.e. start processing\n // next reply only when we finished processing of current one. Without syncing things in\n // this way we could get wrong publication events order as reply promises resolve\n // on next loop tick so for loop continues before we finished emitting all reply events.\n this._dispatchPromise = this._dispatchPromise.then(() => {\n let finishDispatch;\n this._dispatchPromise = new Promise(resolve => {\n finishDispatch = resolve;\n });\n this._dispatchSynchronized(replies, finishDispatch);\n });\n }\n _dispatchSynchronized(replies, finishDispatch) {\n let p = Promise.resolve();\n for (const i in replies) {\n if (replies.hasOwnProperty(i)) {\n p = p.then(() => {\n return this._dispatchReply(replies[i]);\n });\n }\n }\n p = p.then(() => {\n finishDispatch();\n });\n }\n _dispatchReply(reply) {\n let next;\n const p = new Promise(resolve => {\n next = resolve;\n });\n if (reply === undefined || reply === null) {\n this._debug('dispatch: got undefined or null reply');\n next();\n return p;\n }\n const id = reply.id;\n if (id && id > 0) {\n this._handleReply(reply, next);\n }\n else {\n if (!reply.push) {\n this._handleServerPing(next);\n }\n else {\n this._handlePush(reply.push, next);\n }\n }\n return p;\n }\n _call(cmd, skipSending) {\n return new Promise((resolve, reject) => {\n cmd.id = this._nextCommandId();\n this._registerCall(cmd.id, resolve, reject);\n if (!skipSending) {\n this._addCommand(cmd);\n }\n });\n }\n _startConnecting() {\n this._debug('start connecting');\n if (this._setState(State.Connecting)) {\n this.emit('connecting', { code: connectingCodes.connectCalled, reason: 'connect called' });\n }\n this._client = null;\n this._startReconnecting();\n }\n _disconnect(code, reason, reconnect) {\n if (this._isDisconnected()) {\n return;\n }\n // we mark transport is closed right away, because _clearConnectedState will move subscriptions to subscribing state\n // if transport will still be open at this time, subscribe frames will be sent to closing transport\n this._transportIsOpen = false;\n const previousState = this.state;\n this._reconnecting = false;\n const ctx = {\n code: code,\n reason: reason\n };\n let needEvent = false;\n if (reconnect) {\n needEvent = this._setState(State.Connecting);\n }\n else {\n needEvent = this._setState(State.Disconnected);\n this._rejectPromises({ code: errorCodes.clientDisconnected, message: 'disconnected' });\n }\n this._clearOutgoingRequests();\n if (previousState === State.Connecting) {\n this._clearReconnectTimeout();\n }\n if (previousState === State.Connected) {\n this._clearConnectedState();\n }\n if (needEvent) {\n if (this._isConnecting()) {\n this.emit('connecting', ctx);\n }\n else {\n this.emit('disconnected', ctx);\n }\n }\n if (this._transport) {\n this._debug(\"closing existing transport\");\n const transport = this._transport;\n this._transport = null;\n transport.close(); // Close only after setting this._transport to null to avoid recursion when calling transport close().\n // Need to mark as closed here, because connect call may be sync called after disconnect,\n // transport onClose callback will not be called yet\n this._transportClosed = true;\n this._nextTransportId();\n }\n else {\n this._debug(\"no transport to close\");\n }\n this._scheduleReconnect();\n }\n _failUnauthorized() {\n this._disconnect(disconnectedCodes.unauthorized, 'unauthorized', false);\n }\n _getToken() {\n this._debug('get connection token');\n if (!this._config.getToken) {\n this.emit('error', {\n type: 'configuration',\n error: {\n code: errorCodes.badConfiguration,\n message: 'token expired but no getToken function set in the configuration'\n }\n });\n throw new UnauthorizedError('');\n }\n return this._config.getToken({});\n }\n _refresh() {\n const clientId = this._client;\n const self = this;\n this._getToken().then(function (token) {\n if (clientId !== self._client) {\n return;\n }\n if (!token) {\n self._failUnauthorized();\n return;\n }\n self._token = token;\n self._debug('connection token refreshed');\n if (!self._isConnected()) {\n return;\n }\n const cmd = {\n refresh: { token: self._token }\n };\n self._call(cmd, false).then(resolveCtx => {\n // @ts-ignore - improve later.\n const result = resolveCtx.reply.refresh;\n self._refreshResponse(result);\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n self._refreshError(rejectCtx.error);\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n });\n }).catch(function (e) {\n if (!self._isConnected()) {\n return;\n }\n if (e instanceof UnauthorizedError) {\n self._failUnauthorized();\n return;\n }\n self.emit('error', {\n type: 'refreshToken',\n error: {\n code: errorCodes.clientRefreshToken,\n message: e !== undefined ? e.toString() : ''\n }\n });\n self._refreshTimeout = setTimeout(() => self._refresh(), self._getRefreshRetryDelay());\n });\n }\n _refreshError(err) {\n if (err.code < 100 || err.temporary === true) {\n this.emit('error', {\n type: 'refresh',\n error: err\n });\n this._refreshTimeout = setTimeout(() => this._refresh(), this._getRefreshRetryDelay());\n }\n else {\n this._disconnect(err.code, err.message, false);\n }\n }\n _getRefreshRetryDelay() {\n return backoff(0, 5000, 10000);\n }\n _refreshResponse(result) {\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n if (result.expires) {\n this._client = result.client;\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n }\n _removeSubscription(sub) {\n if (sub === null) {\n return;\n }\n delete this._subs[sub.channel];\n }\n _unsubscribe(sub) {\n if (!this._transportIsOpen) {\n return Promise.resolve();\n }\n const req = {\n channel: sub.channel\n };\n const cmd = { unsubscribe: req };\n const self = this;\n const unsubscribePromise = new Promise((resolve, _) => {\n this._call(cmd, false).then(resolveCtx => {\n resolve();\n // @ts-ignore - improve later.\n if (resolveCtx.next) {\n // @ts-ignore - improve later.\n resolveCtx.next();\n }\n }, rejectCtx => {\n resolve();\n if (rejectCtx.next) {\n rejectCtx.next();\n }\n self._disconnect(connectingCodes.unsubscribeError, 'unsubscribe error', true);\n });\n });\n return unsubscribePromise;\n }\n _getSub(channel) {\n const sub = this._subs[channel];\n if (!sub) {\n return null;\n }\n return sub;\n }\n _isServerSub(channel) {\n return this._serverSubs[channel] !== undefined;\n }\n _sendSubscribeCommands() {\n const commands = [];\n for (const channel in this._subs) {\n if (!this._subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = this._subs[channel];\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n if (sub._inflight === true) {\n continue;\n }\n if (sub.state === SubscriptionState.Subscribing) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n const cmd = sub._subscribe();\n if (cmd) {\n commands.push(cmd);\n }\n }\n }\n return commands;\n }\n _connectResponse(result) {\n this._transportIsOpen = true;\n this._transportWasOpen = true;\n this._reconnectAttempts = 0;\n this._refreshRequired = false;\n if (this._isConnected()) {\n return;\n }\n this._client = result.client;\n this._setState(State.Connected);\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n if (result.expires) {\n this._refreshTimeout = setTimeout(() => this._refresh(), ttlMilliseconds(result.ttl));\n }\n this._session = result.session;\n this._node = result.node;\n this.startBatching();\n this._sendSubscribeCommands();\n this.stopBatching();\n const ctx = {\n client: result.client,\n transport: this._transport.subName()\n };\n if (result.data) {\n ctx.data = result.data;\n }\n this.emit('connected', ctx);\n this._resolvePromises();\n this._processServerSubs(result.subs || {});\n if (result.ping && result.ping > 0) {\n this._serverPing = result.ping * 1000;\n this._sendPong = result.pong === true;\n this._waitServerPing();\n }\n else {\n this._serverPing = 0;\n }\n }\n _processServerSubs(subs) {\n for (const channel in subs) {\n if (!subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = subs[channel];\n this._serverSubs[channel] = {\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable || false\n };\n const subCtx = this._getSubscribeContext(channel, sub);\n this.emit('subscribed', subCtx);\n }\n for (const channel in subs) {\n if (!subs.hasOwnProperty(channel)) {\n continue;\n }\n const sub = subs[channel];\n if (sub.recovered) {\n const pubs = sub.publications;\n if (pubs && pubs.length > 0) {\n for (const i in pubs) {\n if (pubs.hasOwnProperty(i)) {\n this._handlePublication(channel, pubs[i]);\n }\n }\n }\n }\n }\n for (const channel in this._serverSubs) {\n if (!this._serverSubs.hasOwnProperty(channel)) {\n continue;\n }\n if (!subs[channel]) {\n this.emit('unsubscribed', { channel: channel });\n delete this._serverSubs[channel];\n }\n }\n }\n _clearRefreshTimeout() {\n if (this._refreshTimeout !== null) {\n clearTimeout(this._refreshTimeout);\n this._refreshTimeout = null;\n }\n }\n _clearReconnectTimeout() {\n if (this._reconnectTimeout !== null) {\n clearTimeout(this._reconnectTimeout);\n this._reconnectTimeout = null;\n }\n }\n _clearServerPingTimeout() {\n if (this._serverPingTimeout !== null) {\n clearTimeout(this._serverPingTimeout);\n this._serverPingTimeout = null;\n }\n }\n _waitServerPing() {\n if (this._config.maxServerPingDelay === 0) {\n return;\n }\n if (!this._isConnected()) {\n return;\n }\n this._clearServerPingTimeout();\n this._serverPingTimeout = setTimeout(() => {\n if (!this._isConnected()) {\n return;\n }\n this._disconnect(connectingCodes.noPing, 'no ping', true);\n }, this._serverPing + this._config.maxServerPingDelay);\n }\n _getSubscribeContext(channel, result) {\n const ctx = {\n channel: channel,\n positioned: false,\n recoverable: false,\n wasRecovering: false,\n recovered: false\n };\n if (result.recovered) {\n ctx.recovered = true;\n }\n if (result.positioned) {\n ctx.positioned = true;\n }\n if (result.recoverable) {\n ctx.recoverable = true;\n }\n if (result.was_recovering) {\n ctx.wasRecovering = true;\n }\n let epoch = '';\n if ('epoch' in result) {\n epoch = result.epoch;\n }\n let offset = 0;\n if ('offset' in result) {\n offset = result.offset;\n }\n if (ctx.positioned || ctx.recoverable) {\n ctx.streamPosition = {\n 'offset': offset,\n 'epoch': epoch\n };\n }\n if (result.data) {\n ctx.data = result.data;\n }\n return ctx;\n }\n _handleReply(reply, next) {\n const id = reply.id;\n if (!(id in this._callbacks)) {\n next();\n return;\n }\n const callbacks = this._callbacks[id];\n clearTimeout(this._callbacks[id].timeout);\n delete this._callbacks[id];\n if (!errorExists(reply)) {\n const callback = callbacks.callback;\n if (!callback) {\n return;\n }\n callback({ reply, next });\n }\n else {\n const errback = callbacks.errback;\n if (!errback) {\n next();\n return;\n }\n const error = reply.error;\n errback({ error, next });\n }\n }\n _handleJoin(channel, join) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n const ctx = { channel: channel, info: this._getJoinLeaveContext(join.info) };\n this.emit('join', ctx);\n }\n return;\n }\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._handleJoin(join);\n }\n _handleLeave(channel, leave) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n const ctx = { channel: channel, info: this._getJoinLeaveContext(leave.info) };\n this.emit('leave', ctx);\n }\n return;\n }\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._handleLeave(leave);\n }\n _handleUnsubscribe(channel, unsubscribe) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n delete this._serverSubs[channel];\n this.emit('unsubscribed', { channel: channel });\n }\n return;\n }\n if (unsubscribe.code < 2500) {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._setUnsubscribed(unsubscribe.code, unsubscribe.reason, false);\n }\n else {\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._setSubscribing(unsubscribe.code, unsubscribe.reason);\n }\n }\n _handleSubscribe(channel, sub) {\n this._serverSubs[channel] = {\n 'offset': sub.offset,\n 'epoch': sub.epoch,\n 'recoverable': sub.recoverable || false\n };\n this.emit('subscribed', this._getSubscribeContext(channel, sub));\n }\n _handleDisconnect(disconnect) {\n const code = disconnect.code;\n let reconnect = true;\n if ((code >= 3500 && code < 4000) || (code >= 4500 && code < 5000)) {\n reconnect = false;\n }\n this._disconnect(code, disconnect.reason, reconnect);\n }\n _getPublicationContext(channel, pub) {\n const ctx = {\n channel: channel,\n data: pub.data\n };\n if (pub.offset) {\n ctx.offset = pub.offset;\n }\n if (pub.info) {\n ctx.info = this._getJoinLeaveContext(pub.info);\n }\n if (pub.tags) {\n ctx.tags = pub.tags;\n }\n return ctx;\n }\n _getJoinLeaveContext(clientInfo) {\n const info = {\n client: clientInfo.client,\n user: clientInfo.user\n };\n if (clientInfo.conn_info) {\n info.connInfo = clientInfo.conn_info;\n }\n if (clientInfo.chan_info) {\n info.chanInfo = clientInfo.chan_info;\n }\n return info;\n }\n _handlePublication(channel, pub) {\n const sub = this._getSub(channel);\n if (!sub) {\n if (this._isServerSub(channel)) {\n const ctx = this._getPublicationContext(channel, pub);\n this.emit('publication', ctx);\n if (pub.offset !== undefined) {\n this._serverSubs[channel].offset = pub.offset;\n }\n }\n return;\n }\n // @ts-ignore – we are hiding some symbols from public API autocompletion.\n sub._handlePublication(pub);\n }\n _handleMessage(message) {\n this.emit('message', { data: message.data });\n }\n _handleServerPing(next) {\n if (this._sendPong) {\n const cmd = {};\n this._transportSendCommands([cmd]);\n }\n next();\n }\n _handlePush(data, next) {\n const channel = data.channel;\n if (data.pub) {\n this._handlePublication(channel, data.pub);\n }\n else if (data.message) {\n this._handleMessage(data.message);\n }\n else if (data.join) {\n this._handleJoin(channel, data.join);\n }\n else if (data.leave) {\n this._handleLeave(channel, data.leave);\n }\n else if (data.unsubscribe) {\n this._handleUnsubscribe(channel, data.unsubscribe);\n }\n else if (data.subscribe) {\n this._handleSubscribe(channel, data.subscribe);\n }\n else if (data.disconnect) {\n this._handleDisconnect(data.disconnect);\n }\n next();\n }\n _flush() {\n const commands = this._commands.slice(0);\n this._commands = [];\n this._transportSendCommands(commands);\n }\n _createErrorObject(code, message, temporary) {\n const errObject = {\n code: code,\n message: message\n };\n if (temporary) {\n errObject.temporary = true;\n }\n return errObject;\n }\n _registerCall(id, callback, errback) {\n this._callbacks[id] = {\n callback: callback,\n errback: errback,\n timeout: null\n };\n this._callbacks[id].timeout = setTimeout(() => {\n delete this._callbacks[id];\n if (isFunction(errback)) {\n errback({ error: this._createErrorObject(errorCodes.timeout, 'timeout') });\n }\n }, this._config.timeout);\n }\n _addCommand(command) {\n if (this._batching) {\n this._commands.push(command);\n }\n else {\n this._transportSendCommands([command]);\n }\n }\n _nextPromiseId() {\n return ++this._promiseId;\n }\n _nextTransportId() {\n return ++this._transportId;\n }\n _resolvePromises() {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].resolve();\n delete this._promises[id];\n }\n }\n _rejectPromises(err) {\n for (const id in this._promises) {\n if (!this._promises.hasOwnProperty(id)) {\n continue;\n }\n if (this._promises[id].timeout) {\n clearTimeout(this._promises[id].timeout);\n }\n this._promises[id].reject(err);\n delete this._promises[id];\n }\n }\n}\nCentrifuge.SubscriptionState = SubscriptionState;\nCentrifuge.State = State;\nCentrifuge.UnauthorizedError = UnauthorizedError;\n\nexport { Centrifuge, State, Subscription, SubscriptionState, UnauthorizedError, connectingCodes, disconnectedCodes, errorCodes, subscribingCodes, unsubscribedCodes };\n","import { Centrifuge, Subscription } from \"centrifuge\";\nimport { IWebsocketProvider } from \"./websocketProviderFactory\";\nimport _ from \"lodash\";\n\nclass CentrifugoWebsocket implements IWebsocketProvider {\n private centrifuge: Centrifuge | null = null;\n private subscriptions: { [key: string]: Subscription } = {};\n public isConnected: boolean = false;\n\n constructor(\n private connectionUrl?: string,\n private accessToken?: string,\n private userId?: string,\n ) {\n if (!this.accessToken) {\n throw new Error(\"AccessToken is required\");\n }\n if (!this.userId) {\n throw new Error(\"UserId is required\");\n }\n\n if (!this.connectionUrl) {\n throw new Error(\"ConnectionUrl is required\");\n }\n }\n\n connect(): void {\n if (!this.centrifuge) {\n this.centrifuge = new Centrifuge(\n [\n {\n transport: \"websocket\",\n endpoint: this.connectionUrl,\n },\n ],\n {\n token: this.accessToken,\n },\n );\n this.centrifuge.on(\"connecting\", () => {\n console.log(\"Connecting to centrifuge\", this.connectionUrl);\n });\n this.centrifuge.on(\"error\", (err) => {\n console.error(\"Error connecting to centrifuge\", err);\n });\n this.centrifuge.on(\"connected\", (data) => {\n console.log(\"Connected to centrifuge\", data);\n console.log(\"subscriptions\", this.subscriptions);\n this.isConnected = true;\n });\n this.centrifuge.on(\"disconnected\", () => {\n this.isConnected = false;\n });\n this.centrifuge.connect();\n }\n }\n\n private _bind(channelName: string, callback: (data: any) => void) {\n if (!this.isConnected) {\n throw new Error(\"Centrifuge is not initialized. Call connect() first.\");\n }\n\n if (!this.subscriptions[channelName]) {\n const existingSubscription = this.centrifuge.getSubscription(channelName);\n if (existingSubscription) {\n this.subscriptions[channelName] = existingSubscription;\n } else {\n this.subscriptions[channelName] =\n this.centrifuge.newSubscription(channelName);\n }\n }\n const subscription = this.subscriptions[channelName];\n subscription.on(\"publication\", (data) => {\n callback(_.get(data, \"data\", data));\n });\n subscription.on(\"subscribing\", () => {\n console.log(\"subscribing\");\n });\n subscription.on(\"subscribed\", () => {\n console.log(\"subscribed to\", channelName);\n });\n subscription.subscribe();\n }\n\n bind(channel: string, event: string, callback: (data: any) => void): void {\n this._bind(`private-${channel}-${this.userId}#${event}`, callback);\n }\n\n bindGlobal(channel: string, callback: (data: any) => void): void {\n if (!this.isConnected) {\n throw new Error(\"Centrifuge is not initialized. Call connect() first.\");\n }\n this._bind(channel, callback);\n }\n\n unbind(channel: string, event: string): void {\n const channelName = `${channel}#${event}`;\n if (this.subscriptions[channelName]) {\n this.subscriptions[channelName].removeAllListeners();\n this.subscriptions[channelName].unsubscribe();\n delete this.subscriptions[channelName];\n }\n }\n unbindAll(channel: string): void {\n Object.keys(this.subscriptions).forEach((key) => {\n if (key.startsWith(channel)) {\n this.unbind(key, \"\");\n delete this.subscriptions[key];\n }\n });\n }\n\n disconnect(): void {\n if (this.isConnected) {\n this.centrifuge.disconnect();\n this.centrifuge = null;\n this.subscriptions = {};\n }\n this.isConnected = false;\n }\n}\n\nexport default CentrifugoWebsocket;\n","/*!\n * Pusher JavaScript Library v8.5.0\n * https://pusher.com/\n *\n * Copyright 2020, Pusher\n * Released under the MIT licence.\n */\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Pusher\"] = factory();\n\telse\n\t\troot[\"Pusher\"] = factory();\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 594\n(__unused_webpack_module, exports) {\n\n\"use strict\";\n\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * Package base64 implements Base64 encoding and decoding.\n */\n// Invalid character used in decoding to indicate\n// that the character to decode is out of range of\n// alphabet and cannot be decoded.\nvar INVALID_BYTE = 256;\n/**\n * Implements standard Base64 encoding.\n *\n * Operates in constant time.\n */\nvar Coder = /** @class */ (function () {\n // TODO(dchest): methods to encode chunk-by-chunk.\n function Coder(_paddingCharacter) {\n if (_paddingCharacter === void 0) { _paddingCharacter = \"=\"; }\n this._paddingCharacter = _paddingCharacter;\n }\n Coder.prototype.encodedLength = function (length) {\n if (!this._paddingCharacter) {\n return (length * 8 + 5) / 6 | 0;\n }\n return (length + 2) / 3 * 4 | 0;\n };\n Coder.prototype.encode = function (data) {\n var out = \"\";\n var i = 0;\n for (; i < data.length - 2; i += 3) {\n var c = (data[i] << 16) | (data[i + 1] << 8) | (data[i + 2]);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n out += this._encodeByte((c >>> 1 * 6) & 63);\n out += this._encodeByte((c >>> 0 * 6) & 63);\n }\n var left = data.length - i;\n if (left > 0) {\n var c = (data[i] << 16) | (left === 2 ? data[i + 1] << 8 : 0);\n out += this._encodeByte((c >>> 3 * 6) & 63);\n out += this._encodeByte((c >>> 2 * 6) & 63);\n if (left === 2) {\n out += this._encodeByte((c >>> 1 * 6) & 63);\n }\n else {\n out += this._paddingCharacter || \"\";\n }\n out += this._paddingCharacter || \"\";\n }\n return out;\n };\n Coder.prototype.maxDecodedLength = function (length) {\n if (!this._paddingCharacter) {\n return (length * 6 + 7) / 8 | 0;\n }\n return length / 4 * 3 | 0;\n };\n Coder.prototype.decodedLength = function (s) {\n return this.maxDecodedLength(s.length - this._getPaddingLength(s));\n };\n Coder.prototype.decode = function (s) {\n if (s.length === 0) {\n return new Uint8Array(0);\n }\n var paddingLength = this._getPaddingLength(s);\n var length = s.length - paddingLength;\n var out = new Uint8Array(this.maxDecodedLength(length));\n var op = 0;\n var i = 0;\n var haveBad = 0;\n var v0 = 0, v1 = 0, v2 = 0, v3 = 0;\n for (; i < length - 4; i += 4) {\n v0 = this._decodeChar(s.charCodeAt(i + 0));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n out[op++] = (v1 << 4) | (v2 >>> 2);\n out[op++] = (v2 << 6) | v3;\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n haveBad |= v2 & INVALID_BYTE;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (i < length - 1) {\n v0 = this._decodeChar(s.charCodeAt(i));\n v1 = this._decodeChar(s.charCodeAt(i + 1));\n out[op++] = (v0 << 2) | (v1 >>> 4);\n haveBad |= v0 & INVALID_BYTE;\n haveBad |= v1 & INVALID_BYTE;\n }\n if (i < length - 2) {\n v2 = this._decodeChar(s.charCodeAt(i + 2));\n out[op++] = (v1 << 4) | (v2 >>> 2);\n haveBad |= v2 & INVALID_BYTE;\n }\n if (i < length - 3) {\n v3 = this._decodeChar(s.charCodeAt(i + 3));\n out[op++] = (v2 << 6) | v3;\n haveBad |= v3 & INVALID_BYTE;\n }\n if (haveBad !== 0) {\n throw new Error(\"Base64Coder: incorrect characters for decoding\");\n }\n return out;\n };\n // Standard encoding have the following encoded/decoded ranges,\n // which we need to convert between.\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 + /\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 43 47\n //\n // Encode 6 bits in b into a new character.\n Coder.prototype._encodeByte = function (b) {\n // Encoding uses constant time operations as follows:\n //\n // 1. Define comparison of A with B using (A - B) >>> 8:\n // if A > B, then result is positive integer\n // if A <= B, then result is 0\n //\n // 2. Define selection of C or 0 using bitwise AND: X & C:\n // if X == 0, then result is 0\n // if X != 0, then result is C\n //\n // 3. Start with the smallest comparison (b >= 0), which is always\n // true, so set the result to the starting ASCII value (65).\n //\n // 4. Continue comparing b to higher ASCII values, and selecting\n // zero if comparison isn't true, otherwise selecting a value\n // to add to result, which:\n //\n // a) undoes the previous addition\n // b) provides new value to add\n //\n var result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 43);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 43) - 63 + 47);\n return String.fromCharCode(result);\n };\n // Decode a character code into a byte.\n // Must return 256 if character is out of alphabet range.\n Coder.prototype._decodeChar = function (c) {\n // Decoding works similar to encoding: using the same comparison\n // function, but now it works on ranges: result is always incremented\n // by value, but this value becomes zero if the range is not\n // satisfied.\n //\n // Decoding starts with invalid value, 256, which is then\n // subtracted when the range is satisfied. If none of the ranges\n // apply, the function returns 256, which is then checked by\n // the caller to throw error.\n var result = INVALID_BYTE; // start with invalid character\n // c == 43 (c > 42 and c < 44)\n result += (((42 - c) & (c - 44)) >>> 8) & (-INVALID_BYTE + c - 43 + 62);\n // c == 47 (c > 46 and c < 48)\n result += (((46 - c) & (c - 48)) >>> 8) & (-INVALID_BYTE + c - 47 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n return result;\n };\n Coder.prototype._getPaddingLength = function (s) {\n var paddingLength = 0;\n if (this._paddingCharacter) {\n for (var i = s.length - 1; i >= 0; i--) {\n if (s[i] !== this._paddingCharacter) {\n break;\n }\n paddingLength++;\n }\n if (s.length < 4 || paddingLength > 2) {\n throw new Error(\"Base64Coder: incorrect padding\");\n }\n }\n return paddingLength;\n };\n return Coder;\n}());\nexports.Coder = Coder;\nvar stdCoder = new Coder();\nfunction encode(data) {\n return stdCoder.encode(data);\n}\nexports.encode = encode;\nfunction decode(s) {\n return stdCoder.decode(s);\n}\nexports.decode = decode;\n/**\n * Implements URL-safe Base64 encoding.\n * (Same as Base64, but '+' is replaced with '-', and '/' with '_').\n *\n * Operates in constant time.\n */\nvar URLSafeCoder = /** @class */ (function (_super) {\n __extends(URLSafeCoder, _super);\n function URLSafeCoder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n // URL-safe encoding have the following encoded/decoded ranges:\n //\n // ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 - _\n // Index: 0 - 25 26 - 51 52 - 61 62 63\n // ASCII: 65 - 90 97 - 122 48 - 57 45 95\n //\n URLSafeCoder.prototype._encodeByte = function (b) {\n var result = b;\n // b >= 0\n result += 65;\n // b > 25\n result += ((25 - b) >>> 8) & ((0 - 65) - 26 + 97);\n // b > 51\n result += ((51 - b) >>> 8) & ((26 - 97) - 52 + 48);\n // b > 61\n result += ((61 - b) >>> 8) & ((52 - 48) - 62 + 45);\n // b > 62\n result += ((62 - b) >>> 8) & ((62 - 45) - 63 + 95);\n return String.fromCharCode(result);\n };\n URLSafeCoder.prototype._decodeChar = function (c) {\n var result = INVALID_BYTE;\n // c == 45 (c > 44 and c < 46)\n result += (((44 - c) & (c - 46)) >>> 8) & (-INVALID_BYTE + c - 45 + 62);\n // c == 95 (c > 94 and c < 96)\n result += (((94 - c) & (c - 96)) >>> 8) & (-INVALID_BYTE + c - 95 + 63);\n // c > 47 and c < 58\n result += (((47 - c) & (c - 58)) >>> 8) & (-INVALID_BYTE + c - 48 + 52);\n // c > 64 and c < 91\n result += (((64 - c) & (c - 91)) >>> 8) & (-INVALID_BYTE + c - 65 + 0);\n // c > 96 and c < 123\n result += (((96 - c) & (c - 123)) >>> 8) & (-INVALID_BYTE + c - 97 + 26);\n return result;\n };\n return URLSafeCoder;\n}(Coder));\nexports.URLSafeCoder = URLSafeCoder;\nvar urlSafeCoder = new URLSafeCoder();\nfunction encodeURLSafe(data) {\n return urlSafeCoder.encode(data);\n}\nexports.encodeURLSafe = encodeURLSafe;\nfunction decodeURLSafe(s) {\n return urlSafeCoder.decode(s);\n}\nexports.decodeURLSafe = decodeURLSafe;\nexports.encodedLength = function (length) {\n return stdCoder.encodedLength(length);\n};\nexports.maxDecodedLength = function (length) {\n return stdCoder.maxDecodedLength(length);\n};\nexports.decodedLength = function (s) {\n return stdCoder.decodedLength(s);\n};\n\n\n/***/ },\n\n/***/ 978\n(__unused_webpack_module, exports) {\n\n\"use strict\";\nvar __webpack_unused_export__;\n\n// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n__webpack_unused_export__ = ({ value: true });\n/**\n * Package utf8 implements UTF-8 encoding and decoding.\n */\nvar INVALID_UTF16 = \"utf8: invalid string\";\nvar INVALID_UTF8 = \"utf8: invalid source encoding\";\n/**\n * Encodes the given string into UTF-8 byte array.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encode(s) {\n // Calculate result length and allocate output array.\n // encodedLength() also validates string and throws errors,\n // so we don't need repeat validation here.\n var arr = new Uint8Array(encodedLength(s));\n var pos = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n arr[pos++] = c;\n }\n else if (c < 0x800) {\n arr[pos++] = 0xc0 | c >> 6;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else if (c < 0xd800) {\n arr[pos++] = 0xe0 | c >> 12;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n else {\n i++; // get one more character\n c = (c & 0x3ff) << 10;\n c |= s.charCodeAt(i) & 0x3ff;\n c += 0x10000;\n arr[pos++] = 0xf0 | c >> 18;\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\n arr[pos++] = 0x80 | c & 0x3f;\n }\n }\n return arr;\n}\n__webpack_unused_export__ = encode;\n/**\n * Returns the number of bytes required to encode the given string into UTF-8.\n * Throws if the source string has invalid UTF-16 encoding.\n */\nfunction encodedLength(s) {\n var result = 0;\n for (var i = 0; i < s.length; i++) {\n var c = s.charCodeAt(i);\n if (c < 0x80) {\n result += 1;\n }\n else if (c < 0x800) {\n result += 2;\n }\n else if (c < 0xd800) {\n result += 3;\n }\n else if (c <= 0xdfff) {\n if (i >= s.length - 1) {\n throw new Error(INVALID_UTF16);\n }\n i++; // \"eat\" next character\n result += 4;\n }\n else {\n throw new Error(INVALID_UTF16);\n }\n }\n return result;\n}\n__webpack_unused_export__ = encodedLength;\n/**\n * Decodes the given byte array from UTF-8 into a string.\n * Throws if encoding is invalid.\n */\nfunction decode(arr) {\n var chars = [];\n for (var i = 0; i < arr.length; i++) {\n var b = arr[i];\n if (b & 0x80) {\n var min = void 0;\n if (b < 0xe0) {\n // Need 1 more byte.\n if (i >= arr.length) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n if ((n1 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\n min = 0x80;\n }\n else if (b < 0xf0) {\n // Need 2 more bytes.\n if (i >= arr.length - 1) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\n min = 0x800;\n }\n else if (b < 0xf8) {\n // Need 3 more bytes.\n if (i >= arr.length - 2) {\n throw new Error(INVALID_UTF8);\n }\n var n1 = arr[++i];\n var n2 = arr[++i];\n var n3 = arr[++i];\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\n throw new Error(INVALID_UTF8);\n }\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\n min = 0x10000;\n }\n else {\n throw new Error(INVALID_UTF8);\n }\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\n throw new Error(INVALID_UTF8);\n }\n if (b >= 0x10000) {\n // Surrogate pair.\n if (b > 0x10ffff) {\n throw new Error(INVALID_UTF8);\n }\n b -= 0x10000;\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\n b = 0xdc00 | (b & 0x3ff);\n }\n }\n chars.push(String.fromCharCode(b));\n }\n return chars.join(\"\");\n}\nexports.D4 = decode;\n\n\n/***/ },\n\n/***/ 721\n(module, __unused_webpack_exports, __webpack_require__) {\n\n// required so we don't have to do require('pusher').default etc.\nmodule.exports = __webpack_require__(207)[\"default\"];\n\n\n/***/ },\n\n/***/ 207\n(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": () => (/* binding */ pusher)\n});\n\n;// ./src/runtimes/web/dom/script_receiver_factory.ts\nclass ScriptReceiverFactory {\n constructor(prefix, name) {\n this.lastId = 0;\n this.prefix = prefix;\n this.name = name;\n }\n create(callback) {\n this.lastId++;\n var number = this.lastId;\n var id = this.prefix + number;\n var name = this.name + '[' + number + ']';\n var called = false;\n var callbackWrapper = function () {\n if (!called) {\n callback.apply(null, arguments);\n called = true;\n }\n };\n this[number] = callbackWrapper;\n return { number: number, id: id, name: name, callback: callbackWrapper };\n }\n remove(receiver) {\n delete this[receiver.number];\n }\n}\nvar ScriptReceivers = new ScriptReceiverFactory('_pusher_script_', 'Pusher.ScriptReceivers');\n\n;// ./src/core/defaults.ts\nvar Defaults = {\n VERSION: \"8.5.0\",\n PROTOCOL: 7,\n wsPort: 80,\n wssPort: 443,\n wsPath: '',\n httpHost: 'sockjs.pusher.com',\n httpPort: 80,\n httpsPort: 443,\n httpPath: '/pusher',\n stats_host: 'stats.pusher.com',\n authEndpoint: '/pusher/auth',\n authTransport: 'ajax',\n activityTimeout: 120000,\n pongTimeout: 30000,\n unavailableTimeout: 10000,\n userAuthentication: {\n endpoint: '/pusher/user-auth',\n transport: 'ajax',\n },\n channelAuthorization: {\n endpoint: '/pusher/auth',\n transport: 'ajax',\n },\n cdn_http: \"http://js.pusher.com\",\n cdn_https: \"https://js.pusher.com\",\n dependency_suffix: \"\",\n};\n/* harmony default export */ const defaults = (Defaults);\n\n;// ./src/runtimes/web/dom/dependency_loader.ts\n\n\nclass DependencyLoader {\n constructor(options) {\n this.options = options;\n this.receivers = options.receivers || ScriptReceivers;\n this.loading = {};\n }\n load(name, options, callback) {\n var self = this;\n if (self.loading[name] && self.loading[name].length > 0) {\n self.loading[name].push(callback);\n }\n else {\n self.loading[name] = [callback];\n var request = runtime.createScriptRequest(self.getPath(name, options));\n var receiver = self.receivers.create(function (error) {\n self.receivers.remove(receiver);\n if (self.loading[name]) {\n var callbacks = self.loading[name];\n delete self.loading[name];\n var successCallback = function (wasSuccessful) {\n if (!wasSuccessful) {\n request.cleanup();\n }\n };\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i](error, successCallback);\n }\n }\n });\n request.send(receiver);\n }\n }\n getRoot(options) {\n var cdn;\n var protocol = runtime.getDocument().location.protocol;\n if ((options && options.useTLS) || protocol === 'https:') {\n cdn = this.options.cdn_https;\n }\n else {\n cdn = this.options.cdn_http;\n }\n return cdn.replace(/\\/*$/, '') + '/' + this.options.version;\n }\n getPath(name, options) {\n return this.getRoot(options) + '/' + name + this.options.suffix + '.js';\n }\n}\n\n;// ./src/runtimes/web/dom/dependencies.ts\n\n\n\nvar DependenciesReceivers = new ScriptReceiverFactory('_pusher_dependencies', 'Pusher.DependenciesReceivers');\nvar Dependencies = new DependencyLoader({\n cdn_http: defaults.cdn_http,\n cdn_https: defaults.cdn_https,\n version: defaults.VERSION,\n suffix: defaults.dependency_suffix,\n receivers: DependenciesReceivers,\n});\n\n;// ./src/core/utils/url_store.ts\nconst urlStore = {\n baseUrl: 'https://pusher.com',\n urls: {\n authenticationEndpoint: {\n path: '/docs/channels/server_api/authenticating_users',\n },\n authorizationEndpoint: {\n path: '/docs/channels/server_api/authorizing-users/',\n },\n javascriptQuickStart: {\n path: '/docs/javascript_quick_start',\n },\n triggeringClientEvents: {\n path: '/docs/client_api_guide/client_events#trigger-events',\n },\n encryptedChannelSupport: {\n fullUrl: 'https://github.com/pusher/pusher-js/tree/cc491015371a4bde5743d1c87a0fbac0feb53195#encrypted-channel-support',\n },\n },\n};\nconst buildLogSuffix = function (key) {\n const urlPrefix = 'See:';\n const urlObj = urlStore.urls[key];\n if (!urlObj)\n return '';\n let url;\n if (urlObj.fullUrl) {\n url = urlObj.fullUrl;\n }\n else if (urlObj.path) {\n url = urlStore.baseUrl + urlObj.path;\n }\n if (!url)\n return '';\n return `${urlPrefix} ${url}`;\n};\n/* harmony default export */ const url_store = ({ buildLogSuffix });\n\n;// ./src/core/auth/options.ts\nvar AuthRequestType;\n(function (AuthRequestType) {\n AuthRequestType[\"UserAuthentication\"] = \"user-authentication\";\n AuthRequestType[\"ChannelAuthorization\"] = \"channel-authorization\";\n})(AuthRequestType || (AuthRequestType = {}));\n\n;// ./src/core/errors.ts\nclass BadEventName extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass BadChannelName extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass RequestTimedOut extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass TransportPriorityTooLow extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass TransportClosed extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass UnsupportedFeature extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass UnsupportedTransport extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass UnsupportedStrategy extends Error {\n constructor(msg) {\n super(msg);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\nclass HTTPAuthError extends Error {\n constructor(status, msg) {\n super(msg);\n this.status = status;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n;// ./src/runtimes/isomorphic/auth/xhr_auth.ts\n\n\n\n\nconst ajax = function (context, query, authOptions, authRequestType, callback) {\n const xhr = runtime.createXHR();\n xhr.open('POST', authOptions.endpoint, true);\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n for (var headerName in authOptions.headers) {\n xhr.setRequestHeader(headerName, authOptions.headers[headerName]);\n }\n if (authOptions.headersProvider != null) {\n let dynamicHeaders = authOptions.headersProvider();\n for (var headerName in dynamicHeaders) {\n xhr.setRequestHeader(headerName, dynamicHeaders[headerName]);\n }\n }\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n let data;\n let parsed = false;\n try {\n data = JSON.parse(xhr.responseText);\n parsed = true;\n }\n catch (e) {\n callback(new HTTPAuthError(200, `JSON returned from ${authRequestType.toString()} endpoint was invalid, yet status code was 200. Data was: ${xhr.responseText}`), null);\n }\n if (parsed) {\n callback(null, data);\n }\n }\n else {\n let suffix = '';\n switch (authRequestType) {\n case AuthRequestType.UserAuthentication:\n suffix = url_store.buildLogSuffix('authenticationEndpoint');\n break;\n case AuthRequestType.ChannelAuthorization:\n suffix = `Clients must be authorized to join private or presence channels. ${url_store.buildLogSuffix('authorizationEndpoint')}`;\n break;\n }\n callback(new HTTPAuthError(xhr.status, `Unable to retrieve auth string from ${authRequestType.toString()} endpoint - ` +\n `received status: ${xhr.status} from ${authOptions.endpoint}. ${suffix}`), null);\n }\n }\n };\n xhr.send(query);\n return xhr;\n};\n/* harmony default export */ const xhr_auth = (ajax);\n\n;// ./src/core/base64.ts\nfunction encode(s) {\n return btoa(utob(s));\n}\nvar fromCharCode = String.fromCharCode;\nvar b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nvar b64tab = {};\nfor (var i = 0, l = b64chars.length; i < l; i++) {\n b64tab[b64chars.charAt(i)] = i;\n}\nvar cb_utob = function (c) {\n var cc = c.charCodeAt(0);\n return cc < 0x80\n ? c\n : cc < 0x800\n ? fromCharCode(0xc0 | (cc >>> 6)) + fromCharCode(0x80 | (cc & 0x3f))\n : fromCharCode(0xe0 | ((cc >>> 12) & 0x0f)) +\n fromCharCode(0x80 | ((cc >>> 6) & 0x3f)) +\n fromCharCode(0x80 | (cc & 0x3f));\n};\nvar utob = function (u) {\n return u.replace(/[^\\x00-\\x7F]/g, cb_utob);\n};\nvar cb_encode = function (ccc) {\n var padlen = [0, 2, 1][ccc.length % 3];\n var ord = (ccc.charCodeAt(0) << 16) |\n ((ccc.length > 1 ? ccc.charCodeAt(1) : 0) << 8) |\n (ccc.length > 2 ? ccc.charCodeAt(2) : 0);\n var chars = [\n b64chars.charAt(ord >>> 18),\n b64chars.charAt((ord >>> 12) & 63),\n padlen >= 2 ? '=' : b64chars.charAt((ord >>> 6) & 63),\n padlen >= 1 ? '=' : b64chars.charAt(ord & 63),\n ];\n return chars.join('');\n};\nvar btoa = window.btoa ||\n function (b) {\n return b.replace(/[\\s\\S]{1,3}/g, cb_encode);\n };\n\n;// ./src/core/utils/timers/abstract_timer.ts\nclass Timer {\n constructor(set, clear, delay, callback) {\n this.clear = clear;\n this.timer = set(() => {\n if (this.timer) {\n this.timer = callback(this.timer);\n }\n }, delay);\n }\n isRunning() {\n return this.timer !== null;\n }\n ensureAborted() {\n if (this.timer) {\n this.clear(this.timer);\n this.timer = null;\n }\n }\n}\n/* harmony default export */ const abstract_timer = (Timer);\n\n;// ./src/core/utils/timers/index.ts\n\nfunction timers_clearTimeout(timer) {\n window.clearTimeout(timer);\n}\nfunction timers_clearInterval(timer) {\n window.clearInterval(timer);\n}\nclass OneOffTimer extends abstract_timer {\n constructor(delay, callback) {\n super(setTimeout, timers_clearTimeout, delay, function (timer) {\n callback();\n return null;\n });\n }\n}\nclass PeriodicTimer extends abstract_timer {\n constructor(delay, callback) {\n super(setInterval, timers_clearInterval, delay, function (timer) {\n callback();\n return timer;\n });\n }\n}\n\n;// ./src/core/util.ts\n\nvar Util = {\n now() {\n if (Date.now) {\n return Date.now();\n }\n else {\n return new Date().valueOf();\n }\n },\n defer(callback) {\n return new OneOffTimer(0, callback);\n },\n method(name, ...args) {\n var boundArguments = Array.prototype.slice.call(arguments, 1);\n return function (object) {\n return object[name].apply(object, boundArguments.concat(arguments));\n };\n },\n};\n/* harmony default export */ const util = (Util);\n\n;// ./src/core/utils/collections.ts\n\n\nfunction extend(target, ...sources) {\n for (var i = 0; i < sources.length; i++) {\n var extensions = sources[i];\n for (var property in extensions) {\n if (extensions[property] &&\n extensions[property].constructor &&\n extensions[property].constructor === Object) {\n target[property] = extend(target[property] || {}, extensions[property]);\n }\n else {\n target[property] = extensions[property];\n }\n }\n }\n return target;\n}\nfunction stringify() {\n var m = ['Pusher'];\n for (var i = 0; i < arguments.length; i++) {\n if (typeof arguments[i] === 'string') {\n m.push(arguments[i]);\n }\n else {\n m.push(safeJSONStringify(arguments[i]));\n }\n }\n return m.join(' : ');\n}\nfunction arrayIndexOf(array, item) {\n var nativeIndexOf = Array.prototype.indexOf;\n if (array === null) {\n return -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) {\n return array.indexOf(item);\n }\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n}\nfunction objectApply(object, f) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n f(object[key], key, object);\n }\n }\n}\nfunction keys(object) {\n var keys = [];\n objectApply(object, function (_, key) {\n keys.push(key);\n });\n return keys;\n}\nfunction values(object) {\n var values = [];\n objectApply(object, function (value) {\n values.push(value);\n });\n return values;\n}\nfunction apply(array, f, context) {\n for (var i = 0; i < array.length; i++) {\n f.call(context || window, array[i], i, array);\n }\n}\nfunction map(array, f) {\n var result = [];\n for (var i = 0; i < array.length; i++) {\n result.push(f(array[i], i, array, result));\n }\n return result;\n}\nfunction mapObject(object, f) {\n var result = {};\n objectApply(object, function (value, key) {\n result[key] = f(value);\n });\n return result;\n}\nfunction filter(array, test) {\n test =\n test ||\n function (value) {\n return !!value;\n };\n var result = [];\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array, result)) {\n result.push(array[i]);\n }\n }\n return result;\n}\nfunction filterObject(object, test) {\n var result = {};\n objectApply(object, function (value, key) {\n if ((test && test(value, key, object, result)) || Boolean(value)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction flatten(object) {\n var result = [];\n objectApply(object, function (value, key) {\n result.push([key, value]);\n });\n return result;\n}\nfunction any(array, test) {\n for (var i = 0; i < array.length; i++) {\n if (test(array[i], i, array)) {\n return true;\n }\n }\n return false;\n}\nfunction collections_all(array, test) {\n for (var i = 0; i < array.length; i++) {\n if (!test(array[i], i, array)) {\n return false;\n }\n }\n return true;\n}\nfunction encodeParamsObject(data) {\n return mapObject(data, function (value) {\n if (typeof value === 'object') {\n value = safeJSONStringify(value);\n }\n return encodeURIComponent(encode(value.toString()));\n });\n}\nfunction buildQueryString(data) {\n var params = filterObject(data, function (value) {\n return value !== undefined;\n });\n var query = map(flatten(encodeParamsObject(params)), util.method('join', '=')).join('&');\n return query;\n}\nfunction decycleObject(object) {\n var objects = [], paths = [];\n return (function derez(value, path) {\n var i, name, nu;\n switch (typeof value) {\n case 'object':\n if (!value) {\n return null;\n }\n for (i = 0; i < objects.length; i += 1) {\n if (objects[i] === value) {\n return { $ref: paths[i] };\n }\n }\n objects.push(value);\n paths.push(path);\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n nu = [];\n for (i = 0; i < value.length; i += 1) {\n nu[i] = derez(value[i], path + '[' + i + ']');\n }\n }\n else {\n nu = {};\n for (name in value) {\n if (Object.prototype.hasOwnProperty.call(value, name)) {\n nu[name] = derez(value[name], path + '[' + JSON.stringify(name) + ']');\n }\n }\n }\n return nu;\n case 'number':\n case 'string':\n case 'boolean':\n return value;\n }\n })(object, '$');\n}\nfunction safeJSONStringify(source) {\n try {\n return JSON.stringify(source);\n }\n catch (e) {\n return JSON.stringify(decycleObject(source));\n }\n}\n\n;// ./src/core/logger.ts\n\n\nclass Logger {\n constructor() {\n this.globalLog = (message) => {\n if (window.console && window.console.log) {\n window.console.log(message);\n }\n };\n }\n debug(...args) {\n this.log(this.globalLog, args);\n }\n warn(...args) {\n this.log(this.globalLogWarn, args);\n }\n error(...args) {\n this.log(this.globalLogError, args);\n }\n globalLogWarn(message) {\n if (window.console && window.console.warn) {\n window.console.warn(message);\n }\n else {\n this.globalLog(message);\n }\n }\n globalLogError(message) {\n if (window.console && window.console.error) {\n window.console.error(message);\n }\n else {\n this.globalLogWarn(message);\n }\n }\n log(defaultLoggingFunction, ...args) {\n var message = stringify.apply(this, arguments);\n if (pusher.log) {\n pusher.log(message);\n }\n else if (pusher.logToConsole) {\n const log = defaultLoggingFunction.bind(this);\n log(message);\n }\n }\n}\n/* harmony default export */ const logger = (new Logger());\n\n;// ./src/runtimes/web/auth/jsonp_auth.ts\n\nvar jsonp = function (context, query, authOptions, authRequestType, callback) {\n if (authOptions.headers !== undefined ||\n authOptions.headersProvider != null) {\n logger.warn(`To send headers with the ${authRequestType.toString()} request, you must use AJAX, rather than JSONP.`);\n }\n var callbackName = context.nextAuthCallbackID.toString();\n context.nextAuthCallbackID++;\n var document = context.getDocument();\n var script = document.createElement('script');\n context.auth_callbacks[callbackName] = function (data) {\n callback(null, data);\n };\n var callback_name = \"Pusher.auth_callbacks['\" + callbackName + \"']\";\n script.src =\n authOptions.endpoint +\n '?callback=' +\n encodeURIComponent(callback_name) +\n '&' +\n query;\n var head = document.getElementsByTagName('head')[0] || document.documentElement;\n head.insertBefore(script, head.firstChild);\n};\n/* harmony default export */ const jsonp_auth = (jsonp);\n\n;// ./src/runtimes/web/dom/script_request.ts\nclass ScriptRequest {\n constructor(src) {\n this.src = src;\n }\n send(receiver) {\n var self = this;\n var errorString = 'Error loading ' + self.src;\n self.script = document.createElement('script');\n self.script.id = receiver.id;\n self.script.src = self.src;\n self.script.type = 'text/javascript';\n self.script.charset = 'UTF-8';\n if (self.script.addEventListener) {\n self.script.onerror = function () {\n receiver.callback(errorString);\n };\n self.script.onload = function () {\n receiver.callback(null);\n };\n }\n else {\n self.script.onreadystatechange = function () {\n if (self.script.readyState === 'loaded' ||\n self.script.readyState === 'complete') {\n receiver.callback(null);\n }\n };\n }\n if (self.script.async === undefined &&\n document.attachEvent &&\n /opera/i.test(navigator.userAgent)) {\n self.errorScript = document.createElement('script');\n self.errorScript.id = receiver.id + '_error';\n self.errorScript.text = receiver.name + \"('\" + errorString + \"');\";\n self.script.async = self.errorScript.async = false;\n }\n else {\n self.script.async = true;\n }\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(self.script, head.firstChild);\n if (self.errorScript) {\n head.insertBefore(self.errorScript, self.script.nextSibling);\n }\n }\n cleanup() {\n if (this.script) {\n this.script.onload = this.script.onerror = null;\n this.script.onreadystatechange = null;\n }\n if (this.script && this.script.parentNode) {\n this.script.parentNode.removeChild(this.script);\n }\n if (this.errorScript && this.errorScript.parentNode) {\n this.errorScript.parentNode.removeChild(this.errorScript);\n }\n this.script = null;\n this.errorScript = null;\n }\n}\n\n;// ./src/runtimes/web/dom/jsonp_request.ts\n\n\nclass JSONPRequest {\n constructor(url, data) {\n this.url = url;\n this.data = data;\n }\n send(receiver) {\n if (this.request) {\n return;\n }\n var query = buildQueryString(this.data);\n var url = this.url + '/' + receiver.number + '?' + query;\n this.request = runtime.createScriptRequest(url);\n this.request.send(receiver);\n }\n cleanup() {\n if (this.request) {\n this.request.cleanup();\n }\n }\n}\n\n;// ./src/runtimes/web/timeline/jsonp_timeline.ts\n\n\nvar getAgent = function (sender, useTLS) {\n return function (data, callback) {\n var scheme = 'http' + (useTLS ? 's' : '') + '://';\n var url = scheme + (sender.host || sender.options.host) + sender.options.path;\n var request = runtime.createJSONPRequest(url, data);\n var receiver = runtime.ScriptReceivers.create(function (error, result) {\n ScriptReceivers.remove(receiver);\n request.cleanup();\n if (result && result.host) {\n sender.host = result.host;\n }\n if (callback) {\n callback(error, result);\n }\n });\n request.send(receiver);\n };\n};\nvar jsonp_timeline_jsonp = {\n name: 'jsonp',\n getAgent,\n};\n/* harmony default export */ const jsonp_timeline = (jsonp_timeline_jsonp);\n\n;// ./src/core/transports/url_schemes.ts\n\nfunction getGenericURL(baseScheme, params, path) {\n var scheme = baseScheme + (params.useTLS ? 's' : '');\n var host = params.useTLS ? params.hostTLS : params.hostNonTLS;\n return scheme + '://' + host + path;\n}\nfunction getGenericPath(key, queryString) {\n var path = '/app/' + key;\n var query = '?protocol=' +\n defaults.PROTOCOL +\n '&client=js' +\n '&version=' +\n defaults.VERSION +\n (queryString ? '&' + queryString : '');\n return path + query;\n}\nvar ws = {\n getInitial: function (key, params) {\n var path = (params.httpPath || '') + getGenericPath(key, 'flash=false');\n return getGenericURL('ws', params, path);\n },\n};\nvar http = {\n getInitial: function (key, params) {\n var path = (params.httpPath || '/pusher') + getGenericPath(key);\n return getGenericURL('http', params, path);\n },\n};\nvar sockjs = {\n getInitial: function (key, params) {\n return getGenericURL('http', params, params.httpPath || '/pusher');\n },\n getPath: function (key, params) {\n return getGenericPath(key);\n },\n};\n\n;// ./src/core/events/callback_registry.ts\n\nclass CallbackRegistry {\n constructor() {\n this._callbacks = {};\n }\n get(name) {\n return this._callbacks[prefix(name)];\n }\n add(name, callback, context) {\n var prefixedEventName = prefix(name);\n this._callbacks[prefixedEventName] =\n this._callbacks[prefixedEventName] || [];\n this._callbacks[prefixedEventName].push({\n fn: callback,\n context: context,\n });\n }\n remove(name, callback, context) {\n if (!name && !callback && !context) {\n this._callbacks = {};\n return;\n }\n var names = name ? [prefix(name)] : keys(this._callbacks);\n if (callback || context) {\n this.removeCallback(names, callback, context);\n }\n else {\n this.removeAllCallbacks(names);\n }\n }\n removeCallback(names, callback, context) {\n apply(names, function (name) {\n this._callbacks[name] = filter(this._callbacks[name] || [], function (binding) {\n return ((callback && callback !== binding.fn) ||\n (context && context !== binding.context));\n });\n if (this._callbacks[name].length === 0) {\n delete this._callbacks[name];\n }\n }, this);\n }\n removeAllCallbacks(names) {\n apply(names, function (name) {\n delete this._callbacks[name];\n }, this);\n }\n}\nfunction prefix(name) {\n return '_' + name;\n}\n\n;// ./src/core/events/dispatcher.ts\n\n\nclass Dispatcher {\n constructor(failThrough) {\n this.callbacks = new CallbackRegistry();\n this.global_callbacks = [];\n this.failThrough = failThrough;\n }\n bind(eventName, callback, context) {\n this.callbacks.add(eventName, callback, context);\n return this;\n }\n bind_global(callback) {\n this.global_callbacks.push(callback);\n return this;\n }\n unbind(eventName, callback, context) {\n this.callbacks.remove(eventName, callback, context);\n return this;\n }\n unbind_global(callback) {\n if (!callback) {\n this.global_callbacks = [];\n return this;\n }\n this.global_callbacks = filter(this.global_callbacks || [], (c) => c !== callback);\n return this;\n }\n unbind_all() {\n this.unbind();\n this.unbind_global();\n return this;\n }\n emit(eventName, data, metadata) {\n for (var i = 0; i < this.global_callbacks.length; i++) {\n this.global_callbacks[i](eventName, data);\n }\n var callbacks = this.callbacks.get(eventName);\n var args = [];\n if (metadata) {\n args.push(data, metadata);\n }\n else if (data) {\n args.push(data);\n }\n if (callbacks && callbacks.length > 0) {\n for (var i = 0; i < callbacks.length; i++) {\n callbacks[i].fn.apply(callbacks[i].context || window, args);\n }\n }\n else if (this.failThrough) {\n this.failThrough(eventName, data);\n }\n return this;\n }\n}\n\n;// ./src/core/transports/transport_connection.ts\n\n\n\n\n\nclass TransportConnection extends Dispatcher {\n constructor(hooks, name, priority, key, options) {\n super();\n this.initialize = runtime.transportConnectionInitializer;\n this.hooks = hooks;\n this.name = name;\n this.priority = priority;\n this.key = key;\n this.options = options;\n this.state = 'new';\n this.timeline = options.timeline;\n this.activityTimeout = options.activityTimeout;\n this.id = this.timeline.generateUniqueID();\n }\n handlesActivityChecks() {\n return Boolean(this.hooks.handlesActivityChecks);\n }\n supportsPing() {\n return Boolean(this.hooks.supportsPing);\n }\n connect() {\n if (this.socket || this.state !== 'initialized') {\n return false;\n }\n var url = this.hooks.urls.getInitial(this.key, this.options);\n try {\n this.socket = this.hooks.getSocket(url, this.options);\n }\n catch (e) {\n util.defer(() => {\n this.onError(e);\n this.changeState('closed');\n });\n return false;\n }\n this.bindListeners();\n logger.debug('Connecting', { transport: this.name, url });\n this.changeState('connecting');\n return true;\n }\n close() {\n if (this.socket) {\n this.socket.close();\n return true;\n }\n else {\n return false;\n }\n }\n send(data) {\n if (this.state === 'open') {\n util.defer(() => {\n if (this.socket) {\n this.socket.send(data);\n }\n });\n return true;\n }\n else {\n return false;\n }\n }\n ping() {\n if (this.state === 'open' && this.supportsPing()) {\n this.socket.ping();\n }\n }\n onOpen() {\n if (this.hooks.beforeOpen) {\n this.hooks.beforeOpen(this.socket, this.hooks.urls.getPath(this.key, this.options));\n }\n this.changeState('open');\n this.socket.onopen = undefined;\n }\n onError(error) {\n this.emit('error', { type: 'WebSocketError', error: error });\n this.timeline.error(this.buildTimelineMessage({ error: error.toString() }));\n }\n onClose(closeEvent) {\n if (closeEvent) {\n this.changeState('closed', {\n code: closeEvent.code,\n reason: closeEvent.reason,\n wasClean: closeEvent.wasClean,\n });\n }\n else {\n this.changeState('closed');\n }\n this.unbindListeners();\n this.socket = undefined;\n }\n onMessage(message) {\n this.emit('message', message);\n }\n onActivity() {\n this.emit('activity');\n }\n bindListeners() {\n this.socket.onopen = () => {\n this.onOpen();\n };\n this.socket.onerror = (error) => {\n this.onError(error);\n };\n this.socket.onclose = (closeEvent) => {\n this.onClose(closeEvent);\n };\n this.socket.onmessage = (message) => {\n this.onMessage(message);\n };\n if (this.supportsPing()) {\n this.socket.onactivity = () => {\n this.onActivity();\n };\n }\n }\n unbindListeners() {\n if (this.socket) {\n this.socket.onopen = undefined;\n this.socket.onerror = undefined;\n this.socket.onclose = undefined;\n this.socket.onmessage = undefined;\n if (this.supportsPing()) {\n this.socket.onactivity = undefined;\n }\n }\n }\n changeState(state, params) {\n this.state = state;\n this.timeline.info(this.buildTimelineMessage({\n state: state,\n params: params,\n }));\n this.emit(state, params);\n }\n buildTimelineMessage(message) {\n return extend({ cid: this.id }, message);\n }\n}\n\n;// ./src/core/transports/transport.ts\n\nclass Transport {\n constructor(hooks) {\n this.hooks = hooks;\n }\n isSupported(environment) {\n return this.hooks.isSupported(environment);\n }\n createConnection(name, priority, key, options) {\n return new TransportConnection(this.hooks, name, priority, key, options);\n }\n}\n\n;// ./src/runtimes/isomorphic/transports/transports.ts\n\n\n\n\nvar WSTransport = new Transport({\n urls: ws,\n handlesActivityChecks: false,\n supportsPing: false,\n isInitialized: function () {\n return Boolean(runtime.getWebSocketAPI());\n },\n isSupported: function () {\n return Boolean(runtime.getWebSocketAPI());\n },\n getSocket: function (url) {\n return runtime.createWebSocket(url);\n },\n});\nvar httpConfiguration = {\n urls: http,\n handlesActivityChecks: false,\n supportsPing: true,\n isInitialized: function () {\n return true;\n },\n};\nvar streamingConfiguration = extend({\n getSocket: function (url) {\n return runtime.HTTPFactory.createStreamingSocket(url);\n },\n}, httpConfiguration);\nvar pollingConfiguration = extend({\n getSocket: function (url) {\n return runtime.HTTPFactory.createPollingSocket(url);\n },\n}, httpConfiguration);\nvar xhrConfiguration = {\n isSupported: function () {\n return runtime.isXHRSupported();\n },\n};\nvar XHRStreamingTransport = new Transport((extend({}, streamingConfiguration, xhrConfiguration)));\nvar XHRPollingTransport = new Transport((extend({}, pollingConfiguration, xhrConfiguration)));\nvar Transports = {\n ws: WSTransport,\n xhr_streaming: XHRStreamingTransport,\n xhr_polling: XHRPollingTransport,\n};\n/* harmony default export */ const transports = (Transports);\n\n;// ./src/runtimes/web/transports/transports.ts\n\n\n\n\n\n\nvar SockJSTransport = new Transport({\n file: 'sockjs',\n urls: sockjs,\n handlesActivityChecks: true,\n supportsPing: false,\n isSupported: function () {\n return true;\n },\n isInitialized: function () {\n return window.SockJS !== undefined;\n },\n getSocket: function (url, options) {\n return new window.SockJS(url, null, {\n js_path: Dependencies.getPath('sockjs', {\n useTLS: options.useTLS,\n }),\n ignore_null_origin: options.ignoreNullOrigin,\n });\n },\n beforeOpen: function (socket, path) {\n socket.send(JSON.stringify({\n path: path,\n }));\n },\n});\nvar xdrConfiguration = {\n isSupported: function (environment) {\n var yes = runtime.isXDRSupported(environment.useTLS);\n return yes;\n },\n};\nvar XDRStreamingTransport = new Transport((extend({}, streamingConfiguration, xdrConfiguration)));\nvar XDRPollingTransport = new Transport((extend({}, pollingConfiguration, xdrConfiguration)));\ntransports.xdr_streaming = XDRStreamingTransport;\ntransports.xdr_polling = XDRPollingTransport;\ntransports.sockjs = SockJSTransport;\n/* harmony default export */ const transports_transports = (transports);\n\n;// ./src/runtimes/web/net_info.ts\n\nclass NetInfo extends Dispatcher {\n constructor() {\n super();\n var self = this;\n if (window.addEventListener !== undefined) {\n window.addEventListener('online', function () {\n self.emit('online');\n }, false);\n window.addEventListener('offline', function () {\n self.emit('offline');\n }, false);\n }\n }\n isOnline() {\n if (window.navigator.onLine === undefined) {\n return true;\n }\n else {\n return window.navigator.onLine;\n }\n }\n}\nvar Network = new NetInfo();\n\n;// ./src/core/transports/assistant_to_the_transport_manager.ts\n\n\nclass AssistantToTheTransportManager {\n constructor(manager, transport, options) {\n this.manager = manager;\n this.transport = transport;\n this.minPingDelay = options.minPingDelay;\n this.maxPingDelay = options.maxPingDelay;\n this.pingDelay = undefined;\n }\n createConnection(name, priority, key, options) {\n options = extend({}, options, {\n activityTimeout: this.pingDelay,\n });\n var connection = this.transport.createConnection(name, priority, key, options);\n var openTimestamp = null;\n var onOpen = function () {\n connection.unbind('open', onOpen);\n connection.bind('closed', onClosed);\n openTimestamp = util.now();\n };\n var onClosed = (closeEvent) => {\n connection.unbind('closed', onClosed);\n if (closeEvent.code === 1002 || closeEvent.code === 1003) {\n this.manager.reportDeath();\n }\n else if (!closeEvent.wasClean && openTimestamp) {\n var lifespan = util.now() - openTimestamp;\n if (lifespan < 2 * this.maxPingDelay) {\n this.manager.reportDeath();\n this.pingDelay = Math.max(lifespan / 2, this.minPingDelay);\n }\n }\n };\n connection.bind('open', onOpen);\n return connection;\n }\n isSupported(environment) {\n return this.manager.isAlive() && this.transport.isSupported(environment);\n }\n}\n\n;// ./src/core/connection/protocol/protocol.ts\nconst Protocol = {\n decodeMessage: function (messageEvent) {\n try {\n var messageData = JSON.parse(messageEvent.data);\n var pusherEventData = messageData.data;\n if (typeof pusherEventData === 'string') {\n try {\n pusherEventData = JSON.parse(messageData.data);\n }\n catch (e) { }\n }\n var pusherEvent = {\n event: messageData.event,\n channel: messageData.channel,\n data: pusherEventData,\n };\n if (messageData.user_id) {\n pusherEvent.user_id = messageData.user_id;\n }\n return pusherEvent;\n }\n catch (e) {\n throw { type: 'MessageParseError', error: e, data: messageEvent.data };\n }\n },\n encodeMessage: function (event) {\n return JSON.stringify(event);\n },\n processHandshake: function (messageEvent) {\n var message = Protocol.decodeMessage(messageEvent);\n if (message.event === 'pusher:connection_established') {\n if (!message.data.activity_timeout) {\n throw 'No activity timeout specified in handshake';\n }\n return {\n action: 'connected',\n id: message.data.socket_id,\n activityTimeout: message.data.activity_timeout * 1000,\n };\n }\n else if (message.event === 'pusher:error') {\n return {\n action: this.getCloseAction(message.data),\n error: this.getCloseError(message.data),\n };\n }\n else {\n throw 'Invalid handshake';\n }\n },\n getCloseAction: function (closeEvent) {\n if (closeEvent.code < 4000) {\n if (closeEvent.code >= 1002 && closeEvent.code <= 1004) {\n return 'backoff';\n }\n else {\n return null;\n }\n }\n else if (closeEvent.code === 4000) {\n return 'tls_only';\n }\n else if (closeEvent.code < 4100) {\n return 'refused';\n }\n else if (closeEvent.code < 4200) {\n return 'backoff';\n }\n else if (closeEvent.code < 4300) {\n return 'retry';\n }\n else {\n return 'refused';\n }\n },\n getCloseError: function (closeEvent) {\n if (closeEvent.code !== 1000 && closeEvent.code !== 1001) {\n return {\n type: 'PusherError',\n data: {\n code: closeEvent.code,\n message: closeEvent.reason || closeEvent.message,\n },\n };\n }\n else {\n return null;\n }\n },\n};\n/* harmony default export */ const protocol = (Protocol);\n\n;// ./src/core/connection/connection.ts\n\n\n\n\nclass Connection extends Dispatcher {\n constructor(id, transport) {\n super();\n this.id = id;\n this.transport = transport;\n this.activityTimeout = transport.activityTimeout;\n this.bindListeners();\n }\n handlesActivityChecks() {\n return this.transport.handlesActivityChecks();\n }\n send(data) {\n return this.transport.send(data);\n }\n send_event(name, data, channel) {\n var event = { event: name, data: data };\n if (channel) {\n event.channel = channel;\n }\n logger.debug('Event sent', event);\n return this.send(protocol.encodeMessage(event));\n }\n ping() {\n if (this.transport.supportsPing()) {\n this.transport.ping();\n }\n else {\n this.send_event('pusher:ping', {});\n }\n }\n close() {\n this.transport.close();\n }\n bindListeners() {\n var listeners = {\n message: (messageEvent) => {\n var pusherEvent;\n try {\n pusherEvent = protocol.decodeMessage(messageEvent);\n }\n catch (e) {\n this.emit('error', {\n type: 'MessageParseError',\n error: e,\n data: messageEvent.data,\n });\n }\n if (pusherEvent !== undefined) {\n logger.debug('Event recd', pusherEvent);\n switch (pusherEvent.event) {\n case 'pusher:error':\n this.emit('error', {\n type: 'PusherError',\n data: pusherEvent.data,\n });\n break;\n case 'pusher:ping':\n this.emit('ping');\n break;\n case 'pusher:pong':\n this.emit('pong');\n break;\n }\n this.emit('message', pusherEvent);\n }\n },\n activity: () => {\n this.emit('activity');\n },\n error: (error) => {\n this.emit('error', error);\n },\n closed: (closeEvent) => {\n unbindListeners();\n if (closeEvent && closeEvent.code) {\n this.handleCloseEvent(closeEvent);\n }\n this.transport = null;\n this.emit('closed');\n },\n };\n var unbindListeners = () => {\n objectApply(listeners, (listener, event) => {\n this.transport.unbind(event, listener);\n });\n };\n objectApply(listeners, (listener, event) => {\n this.transport.bind(event, listener);\n });\n }\n handleCloseEvent(closeEvent) {\n var action = protocol.getCloseAction(closeEvent);\n var error = protocol.getCloseError(closeEvent);\n if (error) {\n this.emit('error', error);\n }\n if (action) {\n this.emit(action, { action: action, error: error });\n }\n }\n}\n\n;// ./src/core/connection/handshake/index.ts\n\n\n\nclass Handshake {\n constructor(transport, callback) {\n this.transport = transport;\n this.callback = callback;\n this.bindListeners();\n }\n close() {\n this.unbindListeners();\n this.transport.close();\n }\n bindListeners() {\n this.onMessage = (m) => {\n this.unbindListeners();\n var result;\n try {\n result = protocol.processHandshake(m);\n }\n catch (e) {\n this.finish('error', { error: e });\n this.transport.close();\n return;\n }\n if (result.action === 'connected') {\n this.finish('connected', {\n connection: new Connection(result.id, this.transport),\n activityTimeout: result.activityTimeout,\n });\n }\n else {\n this.finish(result.action, { error: result.error });\n this.transport.close();\n }\n };\n this.onClosed = (closeEvent) => {\n this.unbindListeners();\n var action = protocol.getCloseAction(closeEvent) || 'backoff';\n var error = protocol.getCloseError(closeEvent);\n this.finish(action, { error: error });\n };\n this.transport.bind('message', this.onMessage);\n this.transport.bind('closed', this.onClosed);\n }\n unbindListeners() {\n this.transport.unbind('message', this.onMessage);\n this.transport.unbind('closed', this.onClosed);\n }\n finish(action, params) {\n this.callback(extend({ transport: this.transport, action: action }, params));\n }\n}\n\n;// ./src/core/timeline/timeline_sender.ts\n\nclass TimelineSender {\n constructor(timeline, options) {\n this.timeline = timeline;\n this.options = options || {};\n }\n send(useTLS, callback) {\n if (this.timeline.isEmpty()) {\n return;\n }\n this.timeline.send(runtime.TimelineTransport.getAgent(this, useTLS), callback);\n }\n}\n\n;// ./src/core/channels/channel.ts\n\n\n\n\n\nclass Channel extends Dispatcher {\n constructor(name, pusher) {\n super(function (event, data) {\n logger.debug('No callbacks on ' + name + ' for ' + event);\n });\n this.name = name;\n this.pusher = pusher;\n this.subscribed = false;\n this.subscriptionPending = false;\n this.subscriptionCancelled = false;\n }\n authorize(socketId, callback) {\n return callback(null, { auth: '' });\n }\n trigger(event, data) {\n if (event.indexOf('client-') !== 0) {\n throw new BadEventName(\"Event '\" + event + \"' does not start with 'client-'\");\n }\n if (!this.subscribed) {\n var suffix = url_store.buildLogSuffix('triggeringClientEvents');\n logger.warn(`Client event triggered before channel 'subscription_succeeded' event . ${suffix}`);\n }\n return this.pusher.send_event(event, data, this.name);\n }\n disconnect() {\n this.subscribed = false;\n this.subscriptionPending = false;\n }\n handleEvent(event) {\n var eventName = event.event;\n var data = event.data;\n if (eventName === 'pusher_internal:subscription_succeeded') {\n this.handleSubscriptionSucceededEvent(event);\n }\n else if (eventName === 'pusher_internal:subscription_count') {\n this.handleSubscriptionCountEvent(event);\n }\n else if (eventName.indexOf('pusher_internal:') !== 0) {\n var metadata = {};\n this.emit(eventName, data, metadata);\n }\n }\n handleSubscriptionSucceededEvent(event) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n }\n else {\n this.emit('pusher:subscription_succeeded', event.data);\n }\n }\n handleSubscriptionCountEvent(event) {\n if (event.data.subscription_count) {\n this.subscriptionCount = event.data.subscription_count;\n }\n this.emit('pusher:subscription_count', event.data);\n }\n subscribe() {\n if (this.subscribed) {\n return;\n }\n this.subscriptionPending = true;\n this.subscriptionCancelled = false;\n this.authorize(this.pusher.connection.socket_id, (error, data) => {\n if (error) {\n this.subscriptionPending = false;\n logger.error(error.toString());\n this.emit('pusher:subscription_error', Object.assign({}, {\n type: 'AuthError',\n error: error.message,\n }, error instanceof HTTPAuthError ? { status: error.status } : {}));\n }\n else {\n this.pusher.send_event('pusher:subscribe', {\n auth: data.auth,\n channel_data: data.channel_data,\n channel: this.name,\n });\n }\n });\n }\n unsubscribe() {\n this.subscribed = false;\n this.pusher.send_event('pusher:unsubscribe', {\n channel: this.name,\n });\n }\n cancelSubscription() {\n this.subscriptionCancelled = true;\n }\n reinstateSubscription() {\n this.subscriptionCancelled = false;\n }\n}\n\n;// ./src/core/channels/private_channel.ts\n\nclass PrivateChannel extends Channel {\n authorize(socketId, callback) {\n return this.pusher.config.channelAuthorizer({\n channelName: this.name,\n socketId: socketId,\n }, callback);\n }\n}\n\n;// ./src/core/channels/members.ts\n\nclass Members {\n constructor() {\n this.reset();\n }\n get(id) {\n if (Object.prototype.hasOwnProperty.call(this.members, id)) {\n return {\n id: id,\n info: this.members[id],\n };\n }\n else {\n return null;\n }\n }\n each(callback) {\n objectApply(this.members, (member, id) => {\n callback(this.get(id));\n });\n }\n setMyID(id) {\n this.myID = id;\n }\n onSubscription(subscriptionData) {\n this.members = subscriptionData.presence.hash;\n this.count = subscriptionData.presence.count;\n this.me = this.get(this.myID);\n }\n addMember(memberData) {\n if (this.get(memberData.user_id) === null) {\n this.count++;\n }\n this.members[memberData.user_id] = memberData.user_info;\n return this.get(memberData.user_id);\n }\n removeMember(memberData) {\n var member = this.get(memberData.user_id);\n if (member) {\n delete this.members[memberData.user_id];\n this.count--;\n }\n return member;\n }\n reset() {\n this.members = {};\n this.count = 0;\n this.myID = null;\n this.me = null;\n }\n}\n\n;// ./src/core/channels/presence_channel.ts\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\nclass PresenceChannel extends PrivateChannel {\n constructor(name, pusher) {\n super(name, pusher);\n this.members = new Members();\n }\n authorize(socketId, callback) {\n super.authorize(socketId, (error, authData) => __awaiter(this, void 0, void 0, function* () {\n if (!error) {\n authData = authData;\n if (authData.channel_data != null) {\n var channelData = JSON.parse(authData.channel_data);\n this.members.setMyID(channelData.user_id);\n }\n else {\n yield this.pusher.user.signinDonePromise;\n if (this.pusher.user.user_data != null) {\n this.members.setMyID(this.pusher.user.user_data.id);\n }\n else {\n let suffix = url_store.buildLogSuffix('authorizationEndpoint');\n logger.error(`Invalid auth response for channel '${this.name}', ` +\n `expected 'channel_data' field. ${suffix}, ` +\n `or the user should be signed in.`);\n callback('Invalid auth response');\n return;\n }\n }\n }\n callback(error, authData);\n }));\n }\n handleEvent(event) {\n var eventName = event.event;\n if (eventName.indexOf('pusher_internal:') === 0) {\n this.handleInternalEvent(event);\n }\n else {\n var data = event.data;\n var metadata = {};\n if (event.user_id) {\n metadata.user_id = event.user_id;\n }\n this.emit(eventName, data, metadata);\n }\n }\n handleInternalEvent(event) {\n var eventName = event.event;\n var data = event.data;\n switch (eventName) {\n case 'pusher_internal:subscription_succeeded':\n this.handleSubscriptionSucceededEvent(event);\n break;\n case 'pusher_internal:subscription_count':\n this.handleSubscriptionCountEvent(event);\n break;\n case 'pusher_internal:member_added':\n var addedMember = this.members.addMember(data);\n this.emit('pusher:member_added', addedMember);\n break;\n case 'pusher_internal:member_removed':\n var removedMember = this.members.removeMember(data);\n if (removedMember) {\n this.emit('pusher:member_removed', removedMember);\n }\n break;\n }\n }\n handleSubscriptionSucceededEvent(event) {\n this.subscriptionPending = false;\n this.subscribed = true;\n if (this.subscriptionCancelled) {\n this.pusher.unsubscribe(this.name);\n }\n else {\n this.members.onSubscription(event.data);\n this.emit('pusher:subscription_succeeded', this.members);\n }\n }\n disconnect() {\n this.members.reset();\n super.disconnect();\n }\n}\n\n// EXTERNAL MODULE: ./node_modules/@stablelib/utf8/lib/utf8.js\nvar utf8 = __webpack_require__(978);\n// EXTERNAL MODULE: ./node_modules/@stablelib/base64/lib/base64.js\nvar base64 = __webpack_require__(594);\n;// ./src/core/channels/encrypted_channel.ts\n\n\n\n\n\nclass EncryptedChannel extends PrivateChannel {\n constructor(name, pusher, nacl) {\n super(name, pusher);\n this.key = null;\n this.nacl = nacl;\n }\n authorize(socketId, callback) {\n super.authorize(socketId, (error, authData) => {\n if (error) {\n callback(error, authData);\n return;\n }\n let sharedSecret = authData['shared_secret'];\n if (!sharedSecret) {\n callback(new Error(`No shared_secret key in auth payload for encrypted channel: ${this.name}`), null);\n return;\n }\n this.key = (0,base64.decode)(sharedSecret);\n delete authData['shared_secret'];\n callback(null, authData);\n });\n }\n trigger(event, data) {\n throw new UnsupportedFeature('Client events are not currently supported for encrypted channels');\n }\n handleEvent(event) {\n var eventName = event.event;\n var data = event.data;\n if (eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0) {\n super.handleEvent(event);\n return;\n }\n this.handleEncryptedEvent(eventName, data);\n }\n handleEncryptedEvent(event, data) {\n if (!this.key) {\n logger.debug('Received encrypted event before key has been retrieved from the authEndpoint');\n return;\n }\n if (!data.ciphertext || !data.nonce) {\n logger.error('Unexpected format for encrypted event, expected object with `ciphertext` and `nonce` fields, got: ' +\n data);\n return;\n }\n let cipherText = (0,base64.decode)(data.ciphertext);\n if (cipherText.length < this.nacl.secretbox.overheadLength) {\n logger.error(`Expected encrypted event ciphertext length to be ${this.nacl.secretbox.overheadLength}, got: ${cipherText.length}`);\n return;\n }\n let nonce = (0,base64.decode)(data.nonce);\n if (nonce.length < this.nacl.secretbox.nonceLength) {\n logger.error(`Expected encrypted event nonce length to be ${this.nacl.secretbox.nonceLength}, got: ${nonce.length}`);\n return;\n }\n let bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n logger.debug('Failed to decrypt an event, probably because it was encrypted with a different key. Fetching a new key from the authEndpoint...');\n this.authorize(this.pusher.connection.socket_id, (error, authData) => {\n if (error) {\n logger.error(`Failed to make a request to the authEndpoint: ${authData}. Unable to fetch new key, so dropping encrypted event`);\n return;\n }\n bytes = this.nacl.secretbox.open(cipherText, nonce, this.key);\n if (bytes === null) {\n logger.error(`Failed to decrypt event with new key. Dropping encrypted event`);\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n return;\n });\n return;\n }\n this.emit(event, this.getDataToEmit(bytes));\n }\n getDataToEmit(bytes) {\n let raw = (0,utf8/* decode */.D4)(bytes);\n try {\n return JSON.parse(raw);\n }\n catch (_a) {\n return raw;\n }\n }\n}\n\n;// ./src/core/connection/connection_manager.ts\n\n\n\n\n\nclass ConnectionManager extends Dispatcher {\n constructor(key, options) {\n super();\n this.state = 'initialized';\n this.connection = null;\n this.key = key;\n this.options = options;\n this.timeline = this.options.timeline;\n this.usingTLS = this.options.useTLS;\n this.errorCallbacks = this.buildErrorCallbacks();\n this.connectionCallbacks = this.buildConnectionCallbacks(this.errorCallbacks);\n this.handshakeCallbacks = this.buildHandshakeCallbacks(this.errorCallbacks);\n var Network = runtime.getNetwork();\n Network.bind('online', () => {\n this.timeline.info({ netinfo: 'online' });\n if (this.state === 'connecting' || this.state === 'unavailable') {\n this.retryIn(0);\n }\n });\n Network.bind('offline', () => {\n this.timeline.info({ netinfo: 'offline' });\n if (this.connection) {\n this.sendActivityCheck();\n }\n });\n this.updateStrategy();\n }\n switchCluster(key) {\n this.key = key;\n this.updateStrategy();\n this.retryIn(0);\n }\n connect() {\n if (this.connection || this.runner) {\n return;\n }\n if (!this.strategy.isSupported()) {\n this.updateState('failed');\n return;\n }\n this.updateState('connecting');\n this.startConnecting();\n this.setUnavailableTimer();\n }\n send(data) {\n if (this.connection) {\n return this.connection.send(data);\n }\n else {\n return false;\n }\n }\n send_event(name, data, channel) {\n if (this.connection) {\n return this.connection.send_event(name, data, channel);\n }\n else {\n return false;\n }\n }\n disconnect() {\n this.disconnectInternally();\n this.updateState('disconnected');\n }\n isUsingTLS() {\n return this.usingTLS;\n }\n startConnecting() {\n var callback = (error, handshake) => {\n if (error) {\n this.runner = this.strategy.connect(0, callback);\n }\n else {\n if (handshake.action === 'error') {\n this.emit('error', {\n type: 'HandshakeError',\n error: handshake.error,\n });\n this.timeline.error({ handshakeError: handshake.error });\n }\n else {\n this.abortConnecting();\n this.handshakeCallbacks[handshake.action](handshake);\n }\n }\n };\n this.runner = this.strategy.connect(0, callback);\n }\n abortConnecting() {\n if (this.runner) {\n this.runner.abort();\n this.runner = null;\n }\n }\n disconnectInternally() {\n this.abortConnecting();\n this.clearRetryTimer();\n this.clearUnavailableTimer();\n if (this.connection) {\n var connection = this.abandonConnection();\n connection.close();\n }\n }\n updateStrategy() {\n this.strategy = this.options.getStrategy({\n key: this.key,\n timeline: this.timeline,\n useTLS: this.usingTLS,\n });\n }\n retryIn(delay) {\n this.timeline.info({ action: 'retry', delay: delay });\n if (delay > 0) {\n this.emit('connecting_in', Math.round(delay / 1000));\n }\n this.retryTimer = new OneOffTimer(delay || 0, () => {\n this.disconnectInternally();\n this.connect();\n });\n }\n clearRetryTimer() {\n if (this.retryTimer) {\n this.retryTimer.ensureAborted();\n this.retryTimer = null;\n }\n }\n setUnavailableTimer() {\n this.unavailableTimer = new OneOffTimer(this.options.unavailableTimeout, () => {\n this.updateState('unavailable');\n });\n }\n clearUnavailableTimer() {\n if (this.unavailableTimer) {\n this.unavailableTimer.ensureAborted();\n }\n }\n sendActivityCheck() {\n this.stopActivityCheck();\n this.connection.ping();\n this.activityTimer = new OneOffTimer(this.options.pongTimeout, () => {\n this.timeline.error({ pong_timed_out: this.options.pongTimeout });\n this.retryIn(0);\n });\n }\n resetActivityCheck() {\n this.stopActivityCheck();\n if (this.connection && !this.connection.handlesActivityChecks()) {\n this.activityTimer = new OneOffTimer(this.activityTimeout, () => {\n this.sendActivityCheck();\n });\n }\n }\n stopActivityCheck() {\n if (this.activityTimer) {\n this.activityTimer.ensureAborted();\n }\n }\n buildConnectionCallbacks(errorCallbacks) {\n return extend({}, errorCallbacks, {\n message: (message) => {\n this.resetActivityCheck();\n this.emit('message', message);\n },\n ping: () => {\n this.send_event('pusher:pong', {});\n },\n activity: () => {\n this.resetActivityCheck();\n },\n error: (error) => {\n this.emit('error', error);\n },\n closed: () => {\n this.abandonConnection();\n if (this.shouldRetry()) {\n this.retryIn(1000);\n }\n },\n });\n }\n buildHandshakeCallbacks(errorCallbacks) {\n return extend({}, errorCallbacks, {\n connected: (handshake) => {\n this.activityTimeout = Math.min(this.options.activityTimeout, handshake.activityTimeout, handshake.connection.activityTimeout || Infinity);\n this.clearUnavailableTimer();\n this.setConnection(handshake.connection);\n this.socket_id = this.connection.id;\n this.updateState('connected', { socket_id: this.socket_id });\n },\n });\n }\n buildErrorCallbacks() {\n let withErrorEmitted = (callback) => {\n return (result) => {\n if (result.error) {\n this.emit('error', { type: 'WebSocketError', error: result.error });\n }\n callback(result);\n };\n };\n return {\n tls_only: withErrorEmitted(() => {\n this.usingTLS = true;\n this.updateStrategy();\n this.retryIn(0);\n }),\n refused: withErrorEmitted(() => {\n this.disconnect();\n }),\n backoff: withErrorEmitted(() => {\n this.retryIn(1000);\n }),\n retry: withErrorEmitted(() => {\n this.retryIn(0);\n }),\n };\n }\n setConnection(connection) {\n this.connection = connection;\n for (var event in this.connectionCallbacks) {\n this.connection.bind(event, this.connectionCallbacks[event]);\n }\n this.resetActivityCheck();\n }\n abandonConnection() {\n if (!this.connection) {\n return;\n }\n this.stopActivityCheck();\n for (var event in this.connectionCallbacks) {\n this.connection.unbind(event, this.connectionCallbacks[event]);\n }\n var connection = this.connection;\n this.connection = null;\n return connection;\n }\n updateState(newState, data) {\n var previousState = this.state;\n this.state = newState;\n if (previousState !== newState) {\n var newStateDescription = newState;\n if (newStateDescription === 'connected') {\n newStateDescription += ' with new socket ID ' + data.socket_id;\n }\n logger.debug('State changed', previousState + ' -> ' + newStateDescription);\n this.timeline.info({ state: newState, params: data });\n this.emit('state_change', { previous: previousState, current: newState });\n this.emit(newState, data);\n }\n }\n shouldRetry() {\n return this.state === 'connecting' || this.state === 'connected';\n }\n}\n\n;// ./src/core/channels/channels.ts\n\n\n\n\nclass Channels {\n constructor() {\n this.channels = {};\n }\n add(name, pusher) {\n if (!this.channels[name]) {\n this.channels[name] = createChannel(name, pusher);\n }\n return this.channels[name];\n }\n all() {\n return values(this.channels);\n }\n find(name) {\n return this.channels[name];\n }\n remove(name) {\n var channel = this.channels[name];\n delete this.channels[name];\n return channel;\n }\n disconnect() {\n objectApply(this.channels, function (channel) {\n channel.disconnect();\n });\n }\n}\nfunction createChannel(name, pusher) {\n if (name.indexOf('private-encrypted-') === 0) {\n if (pusher.config.nacl) {\n return factory.createEncryptedChannel(name, pusher, pusher.config.nacl);\n }\n let errMsg = 'Tried to subscribe to a private-encrypted- channel but no nacl implementation available';\n let suffix = url_store.buildLogSuffix('encryptedChannelSupport');\n throw new UnsupportedFeature(`${errMsg}. ${suffix}`);\n }\n else if (name.indexOf('private-') === 0) {\n return factory.createPrivateChannel(name, pusher);\n }\n else if (name.indexOf('presence-') === 0) {\n return factory.createPresenceChannel(name, pusher);\n }\n else if (name.indexOf('#') === 0) {\n throw new BadChannelName('Cannot create a channel with name \"' + name + '\".');\n }\n else {\n return factory.createChannel(name, pusher);\n }\n}\n\n;// ./src/core/utils/factory.ts\n\n\n\n\n\n\n\n\n\nvar Factory = {\n createChannels() {\n return new Channels();\n },\n createConnectionManager(key, options) {\n return new ConnectionManager(key, options);\n },\n createChannel(name, pusher) {\n return new Channel(name, pusher);\n },\n createPrivateChannel(name, pusher) {\n return new PrivateChannel(name, pusher);\n },\n createPresenceChannel(name, pusher) {\n return new PresenceChannel(name, pusher);\n },\n createEncryptedChannel(name, pusher, nacl) {\n return new EncryptedChannel(name, pusher, nacl);\n },\n createTimelineSender(timeline, options) {\n return new TimelineSender(timeline, options);\n },\n createHandshake(transport, callback) {\n return new Handshake(transport, callback);\n },\n createAssistantToTheTransportManager(manager, transport, options) {\n return new AssistantToTheTransportManager(manager, transport, options);\n },\n};\n/* harmony default export */ const factory = (Factory);\n\n;// ./src/core/transports/transport_manager.ts\n\nclass TransportManager {\n constructor(options) {\n this.options = options || {};\n this.livesLeft = this.options.lives || Infinity;\n }\n getAssistant(transport) {\n return factory.createAssistantToTheTransportManager(this, transport, {\n minPingDelay: this.options.minPingDelay,\n maxPingDelay: this.options.maxPingDelay,\n });\n }\n isAlive() {\n return this.livesLeft > 0;\n }\n reportDeath() {\n this.livesLeft -= 1;\n }\n}\n\n;// ./src/core/strategies/sequential_strategy.ts\n\n\n\nclass SequentialStrategy {\n constructor(strategies, options) {\n this.strategies = strategies;\n this.loop = Boolean(options.loop);\n this.failFast = Boolean(options.failFast);\n this.timeout = options.timeout;\n this.timeoutLimit = options.timeoutLimit;\n }\n isSupported() {\n return any(this.strategies, util.method('isSupported'));\n }\n connect(minPriority, callback) {\n var strategies = this.strategies;\n var current = 0;\n var timeout = this.timeout;\n var runner = null;\n var tryNextStrategy = (error, handshake) => {\n if (handshake) {\n callback(null, handshake);\n }\n else {\n current = current + 1;\n if (this.loop) {\n current = current % strategies.length;\n }\n if (current < strategies.length) {\n if (timeout) {\n timeout = timeout * 2;\n if (this.timeoutLimit) {\n timeout = Math.min(timeout, this.timeoutLimit);\n }\n }\n runner = this.tryStrategy(strategies[current], minPriority, { timeout, failFast: this.failFast }, tryNextStrategy);\n }\n else {\n callback(true);\n }\n }\n };\n runner = this.tryStrategy(strategies[current], minPriority, { timeout: timeout, failFast: this.failFast }, tryNextStrategy);\n return {\n abort: function () {\n runner.abort();\n },\n forceMinPriority: function (p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n },\n };\n }\n tryStrategy(strategy, minPriority, options, callback) {\n var timer = null;\n var runner = null;\n if (options.timeout > 0) {\n timer = new OneOffTimer(options.timeout, function () {\n runner.abort();\n callback(true);\n });\n }\n runner = strategy.connect(minPriority, function (error, handshake) {\n if (error && timer && timer.isRunning() && !options.failFast) {\n return;\n }\n if (timer) {\n timer.ensureAborted();\n }\n callback(error, handshake);\n });\n return {\n abort: function () {\n if (timer) {\n timer.ensureAborted();\n }\n runner.abort();\n },\n forceMinPriority: function (p) {\n runner.forceMinPriority(p);\n },\n };\n }\n}\n\n;// ./src/core/strategies/best_connected_ever_strategy.ts\n\n\nclass BestConnectedEverStrategy {\n constructor(strategies) {\n this.strategies = strategies;\n }\n isSupported() {\n return any(this.strategies, util.method('isSupported'));\n }\n connect(minPriority, callback) {\n return connect(this.strategies, minPriority, function (i, runners) {\n return function (error, handshake) {\n runners[i].error = error;\n if (error) {\n if (allRunnersFailed(runners)) {\n callback(true);\n }\n return;\n }\n apply(runners, function (runner) {\n runner.forceMinPriority(handshake.transport.priority);\n });\n callback(null, handshake);\n };\n });\n }\n}\nfunction connect(strategies, minPriority, callbackBuilder) {\n var runners = map(strategies, function (strategy, i, _, rs) {\n return strategy.connect(minPriority, callbackBuilder(i, rs));\n });\n return {\n abort: function () {\n apply(runners, abortRunner);\n },\n forceMinPriority: function (p) {\n apply(runners, function (runner) {\n runner.forceMinPriority(p);\n });\n },\n };\n}\nfunction allRunnersFailed(runners) {\n return collections_all(runners, function (runner) {\n return Boolean(runner.error);\n });\n}\nfunction abortRunner(runner) {\n if (!runner.error && !runner.aborted) {\n runner.abort();\n runner.aborted = true;\n }\n}\n\n;// ./src/core/strategies/websocket_prioritized_cached_strategy.ts\n\n\n\n\nclass WebSocketPrioritizedCachedStrategy {\n constructor(strategy, transports, options) {\n this.strategy = strategy;\n this.transports = transports;\n this.ttl = options.ttl || 1800 * 1000;\n this.usingTLS = options.useTLS;\n this.timeline = options.timeline;\n }\n isSupported() {\n return this.strategy.isSupported();\n }\n connect(minPriority, callback) {\n var usingTLS = this.usingTLS;\n var info = fetchTransportCache(usingTLS);\n var cacheSkipCount = info && info.cacheSkipCount ? info.cacheSkipCount : 0;\n var strategies = [this.strategy];\n if (info && info.timestamp + this.ttl >= util.now()) {\n var transport = this.transports[info.transport];\n if (transport) {\n if (['ws', 'wss'].includes(info.transport) || cacheSkipCount > 3) {\n this.timeline.info({\n cached: true,\n transport: info.transport,\n latency: info.latency,\n });\n strategies.push(new SequentialStrategy([transport], {\n timeout: info.latency * 2 + 1000,\n failFast: true,\n }));\n }\n else {\n cacheSkipCount++;\n }\n }\n }\n var startTimestamp = util.now();\n var runner = strategies\n .pop()\n .connect(minPriority, function cb(error, handshake) {\n if (error) {\n flushTransportCache(usingTLS);\n if (strategies.length > 0) {\n startTimestamp = util.now();\n runner = strategies.pop().connect(minPriority, cb);\n }\n else {\n callback(error);\n }\n }\n else {\n storeTransportCache(usingTLS, handshake.transport.name, util.now() - startTimestamp, cacheSkipCount);\n callback(null, handshake);\n }\n });\n return {\n abort: function () {\n runner.abort();\n },\n forceMinPriority: function (p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n },\n };\n }\n}\nfunction getTransportCacheKey(usingTLS) {\n return 'pusherTransport' + (usingTLS ? 'TLS' : 'NonTLS');\n}\nfunction fetchTransportCache(usingTLS) {\n var storage = runtime.getLocalStorage();\n if (storage) {\n try {\n var serializedCache = storage[getTransportCacheKey(usingTLS)];\n if (serializedCache) {\n return JSON.parse(serializedCache);\n }\n }\n catch (e) {\n flushTransportCache(usingTLS);\n }\n }\n return null;\n}\nfunction storeTransportCache(usingTLS, transport, latency, cacheSkipCount) {\n var storage = runtime.getLocalStorage();\n if (storage) {\n try {\n storage[getTransportCacheKey(usingTLS)] = safeJSONStringify({\n timestamp: util.now(),\n transport: transport,\n latency: latency,\n cacheSkipCount: cacheSkipCount,\n });\n }\n catch (e) {\n }\n }\n}\nfunction flushTransportCache(usingTLS) {\n var storage = runtime.getLocalStorage();\n if (storage) {\n try {\n delete storage[getTransportCacheKey(usingTLS)];\n }\n catch (e) {\n }\n }\n}\n\n;// ./src/core/strategies/delayed_strategy.ts\n\nclass DelayedStrategy {\n constructor(strategy, { delay: number }) {\n this.strategy = strategy;\n this.options = { delay: number };\n }\n isSupported() {\n return this.strategy.isSupported();\n }\n connect(minPriority, callback) {\n var strategy = this.strategy;\n var runner;\n var timer = new OneOffTimer(this.options.delay, function () {\n runner = strategy.connect(minPriority, callback);\n });\n return {\n abort: function () {\n timer.ensureAborted();\n if (runner) {\n runner.abort();\n }\n },\n forceMinPriority: function (p) {\n minPriority = p;\n if (runner) {\n runner.forceMinPriority(p);\n }\n },\n };\n }\n}\n\n;// ./src/core/strategies/if_strategy.ts\nclass IfStrategy {\n constructor(test, trueBranch, falseBranch) {\n this.test = test;\n this.trueBranch = trueBranch;\n this.falseBranch = falseBranch;\n }\n isSupported() {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.isSupported();\n }\n connect(minPriority, callback) {\n var branch = this.test() ? this.trueBranch : this.falseBranch;\n return branch.connect(minPriority, callback);\n }\n}\n\n;// ./src/core/strategies/first_connected_strategy.ts\nclass FirstConnectedStrategy {\n constructor(strategy) {\n this.strategy = strategy;\n }\n isSupported() {\n return this.strategy.isSupported();\n }\n connect(minPriority, callback) {\n var runner = this.strategy.connect(minPriority, function (error, handshake) {\n if (handshake) {\n runner.abort();\n }\n callback(error, handshake);\n });\n return runner;\n }\n}\n\n;// ./src/runtimes/web/default_strategy.ts\n\n\n\n\n\n\n\nfunction testSupportsStrategy(strategy) {\n return function () {\n return strategy.isSupported();\n };\n}\nvar getDefaultStrategy = function (config, baseOptions, defineTransport) {\n var definedTransports = {};\n function defineTransportStrategy(name, type, priority, options, manager) {\n var transport = defineTransport(config, name, type, priority, options, manager);\n definedTransports[name] = transport;\n return transport;\n }\n var ws_options = Object.assign({}, baseOptions, {\n hostNonTLS: config.wsHost + ':' + config.wsPort,\n hostTLS: config.wsHost + ':' + config.wssPort,\n httpPath: config.wsPath,\n });\n var wss_options = Object.assign({}, ws_options, {\n useTLS: true,\n });\n var sockjs_options = Object.assign({}, baseOptions, {\n hostNonTLS: config.httpHost + ':' + config.httpPort,\n hostTLS: config.httpHost + ':' + config.httpsPort,\n httpPath: config.httpPath,\n });\n var timeouts = {\n loop: true,\n timeout: 15000,\n timeoutLimit: 60000,\n };\n var ws_manager = new TransportManager({\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout,\n });\n var streaming_manager = new TransportManager({\n lives: 2,\n minPingDelay: 10000,\n maxPingDelay: config.activityTimeout,\n });\n var ws_transport = defineTransportStrategy('ws', 'ws', 3, ws_options, ws_manager);\n var wss_transport = defineTransportStrategy('wss', 'ws', 3, wss_options, ws_manager);\n var sockjs_transport = defineTransportStrategy('sockjs', 'sockjs', 1, sockjs_options);\n var xhr_streaming_transport = defineTransportStrategy('xhr_streaming', 'xhr_streaming', 1, sockjs_options, streaming_manager);\n var xdr_streaming_transport = defineTransportStrategy('xdr_streaming', 'xdr_streaming', 1, sockjs_options, streaming_manager);\n var xhr_polling_transport = defineTransportStrategy('xhr_polling', 'xhr_polling', 1, sockjs_options);\n var xdr_polling_transport = defineTransportStrategy('xdr_polling', 'xdr_polling', 1, sockjs_options);\n var ws_loop = new SequentialStrategy([ws_transport], timeouts);\n var wss_loop = new SequentialStrategy([wss_transport], timeouts);\n var sockjs_loop = new SequentialStrategy([sockjs_transport], timeouts);\n var streaming_loop = new SequentialStrategy([\n new IfStrategy(testSupportsStrategy(xhr_streaming_transport), xhr_streaming_transport, xdr_streaming_transport),\n ], timeouts);\n var polling_loop = new SequentialStrategy([\n new IfStrategy(testSupportsStrategy(xhr_polling_transport), xhr_polling_transport, xdr_polling_transport),\n ], timeouts);\n var http_loop = new SequentialStrategy([\n new IfStrategy(testSupportsStrategy(streaming_loop), new BestConnectedEverStrategy([\n streaming_loop,\n new DelayedStrategy(polling_loop, { delay: 4000 }),\n ]), polling_loop),\n ], timeouts);\n var http_fallback_loop = new IfStrategy(testSupportsStrategy(http_loop), http_loop, sockjs_loop);\n var wsStrategy;\n if (baseOptions.useTLS) {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(http_fallback_loop, { delay: 2000 }),\n ]);\n }\n else {\n wsStrategy = new BestConnectedEverStrategy([\n ws_loop,\n new DelayedStrategy(wss_loop, { delay: 2000 }),\n new DelayedStrategy(http_fallback_loop, { delay: 5000 }),\n ]);\n }\n return new WebSocketPrioritizedCachedStrategy(new FirstConnectedStrategy(new IfStrategy(testSupportsStrategy(ws_transport), wsStrategy, http_fallback_loop)), definedTransports, {\n ttl: 1800000,\n timeline: baseOptions.timeline,\n useTLS: baseOptions.useTLS,\n });\n};\n/* harmony default export */ const default_strategy = (getDefaultStrategy);\n\n;// ./src/runtimes/web/transports/transport_connection_initializer.ts\n\n/* harmony default export */ function transport_connection_initializer() {\n var self = this;\n self.timeline.info(self.buildTimelineMessage({\n transport: self.name + (self.options.useTLS ? 's' : ''),\n }));\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n }\n else if (self.hooks.file) {\n self.changeState('initializing');\n Dependencies.load(self.hooks.file, { useTLS: self.options.useTLS }, function (error, callback) {\n if (self.hooks.isInitialized()) {\n self.changeState('initialized');\n callback(true);\n }\n else {\n if (error) {\n self.onError(error);\n }\n self.onClose();\n callback(false);\n }\n });\n }\n else {\n self.onClose();\n }\n}\n\n;// ./src/runtimes/web/http/http_xdomain_request.ts\n\nvar hooks = {\n getRequest: function (socket) {\n var xdr = new window.XDomainRequest();\n xdr.ontimeout = function () {\n socket.emit('error', new RequestTimedOut());\n socket.close();\n };\n xdr.onerror = function (e) {\n socket.emit('error', e);\n socket.close();\n };\n xdr.onprogress = function () {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n };\n xdr.onload = function () {\n if (xdr.responseText && xdr.responseText.length > 0) {\n socket.onChunk(200, xdr.responseText);\n }\n socket.emit('finished', 200);\n socket.close();\n };\n return xdr;\n },\n abortRequest: function (xdr) {\n xdr.ontimeout = xdr.onerror = xdr.onprogress = xdr.onload = null;\n xdr.abort();\n },\n};\n/* harmony default export */ const http_xdomain_request = (hooks);\n\n;// ./src/core/http/http_request.ts\n\n\nconst MAX_BUFFER_LENGTH = 256 * 1024;\nclass HTTPRequest extends Dispatcher {\n constructor(hooks, method, url) {\n super();\n this.hooks = hooks;\n this.method = method;\n this.url = url;\n }\n start(payload) {\n this.position = 0;\n this.xhr = this.hooks.getRequest(this);\n this.unloader = () => {\n this.close();\n };\n runtime.addUnloadListener(this.unloader);\n this.xhr.open(this.method, this.url, true);\n if (this.xhr.setRequestHeader) {\n this.xhr.setRequestHeader('Content-Type', 'application/json');\n }\n this.xhr.send(payload);\n }\n close() {\n if (this.unloader) {\n runtime.removeUnloadListener(this.unloader);\n this.unloader = null;\n }\n if (this.xhr) {\n this.hooks.abortRequest(this.xhr);\n this.xhr = null;\n }\n }\n onChunk(status, data) {\n while (true) {\n var chunk = this.advanceBuffer(data);\n if (chunk) {\n this.emit('chunk', { status: status, data: chunk });\n }\n else {\n break;\n }\n }\n if (this.isBufferTooLong(data)) {\n this.emit('buffer_too_long');\n }\n }\n advanceBuffer(buffer) {\n var unreadData = buffer.slice(this.position);\n var endOfLinePosition = unreadData.indexOf('\\n');\n if (endOfLinePosition !== -1) {\n this.position += endOfLinePosition + 1;\n return unreadData.slice(0, endOfLinePosition);\n }\n else {\n return null;\n }\n }\n isBufferTooLong(buffer) {\n return this.position === buffer.length && buffer.length > MAX_BUFFER_LENGTH;\n }\n}\n\n;// ./src/core/http/state.ts\nvar State;\n(function (State) {\n State[State[\"CONNECTING\"] = 0] = \"CONNECTING\";\n State[State[\"OPEN\"] = 1] = \"OPEN\";\n State[State[\"CLOSED\"] = 3] = \"CLOSED\";\n})(State || (State = {}));\n/* harmony default export */ const state = (State);\n\n;// ./src/core/http/http_socket.ts\n\n\n\nvar autoIncrement = 1;\nclass HTTPSocket {\n constructor(hooks, url) {\n this.hooks = hooks;\n this.session = randomNumber(1000) + '/' + randomString(8);\n this.location = getLocation(url);\n this.readyState = state.CONNECTING;\n this.openStream();\n }\n send(payload) {\n return this.sendRaw(JSON.stringify([payload]));\n }\n ping() {\n this.hooks.sendHeartbeat(this);\n }\n close(code, reason) {\n this.onClose(code, reason, true);\n }\n sendRaw(payload) {\n if (this.readyState === state.OPEN) {\n try {\n runtime.createSocketRequest('POST', getUniqueURL(getSendURL(this.location, this.session))).start(payload);\n return true;\n }\n catch (e) {\n return false;\n }\n }\n else {\n return false;\n }\n }\n reconnect() {\n this.closeStream();\n this.openStream();\n }\n onClose(code, reason, wasClean) {\n this.closeStream();\n this.readyState = state.CLOSED;\n if (this.onclose) {\n this.onclose({\n code: code,\n reason: reason,\n wasClean: wasClean,\n });\n }\n }\n onChunk(chunk) {\n if (chunk.status !== 200) {\n return;\n }\n if (this.readyState === state.OPEN) {\n this.onActivity();\n }\n var payload;\n var type = chunk.data.slice(0, 1);\n switch (type) {\n case 'o':\n payload = JSON.parse(chunk.data.slice(1) || '{}');\n this.onOpen(payload);\n break;\n case 'a':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n for (var i = 0; i < payload.length; i++) {\n this.onEvent(payload[i]);\n }\n break;\n case 'm':\n payload = JSON.parse(chunk.data.slice(1) || 'null');\n this.onEvent(payload);\n break;\n case 'h':\n this.hooks.onHeartbeat(this);\n break;\n case 'c':\n payload = JSON.parse(chunk.data.slice(1) || '[]');\n this.onClose(payload[0], payload[1], true);\n break;\n }\n }\n onOpen(options) {\n if (this.readyState === state.CONNECTING) {\n if (options && options.hostname) {\n this.location.base = replaceHost(this.location.base, options.hostname);\n }\n this.readyState = state.OPEN;\n if (this.onopen) {\n this.onopen();\n }\n }\n else {\n this.onClose(1006, 'Server lost session', true);\n }\n }\n onEvent(event) {\n if (this.readyState === state.OPEN && this.onmessage) {\n this.onmessage({ data: event });\n }\n }\n onActivity() {\n if (this.onactivity) {\n this.onactivity();\n }\n }\n onError(error) {\n if (this.onerror) {\n this.onerror(error);\n }\n }\n openStream() {\n this.stream = runtime.createSocketRequest('POST', getUniqueURL(this.hooks.getReceiveURL(this.location, this.session)));\n this.stream.bind('chunk', (chunk) => {\n this.onChunk(chunk);\n });\n this.stream.bind('finished', (status) => {\n this.hooks.onFinished(this, status);\n });\n this.stream.bind('buffer_too_long', () => {\n this.reconnect();\n });\n try {\n this.stream.start();\n }\n catch (error) {\n util.defer(() => {\n this.onError(error);\n this.onClose(1006, 'Could not start streaming', false);\n });\n }\n }\n closeStream() {\n if (this.stream) {\n this.stream.unbind_all();\n this.stream.close();\n this.stream = null;\n }\n }\n}\nfunction getLocation(url) {\n var parts = /([^\\?]*)\\/*(\\??.*)/.exec(url);\n return {\n base: parts[1],\n queryString: parts[2],\n };\n}\nfunction getSendURL(url, session) {\n return url.base + '/' + session + '/xhr_send';\n}\nfunction getUniqueURL(url) {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n return url + separator + 't=' + +new Date() + '&n=' + autoIncrement++;\n}\nfunction replaceHost(url, hostname) {\n var urlParts = /(https?:\\/\\/)([^\\/:]+)((\\/|:)?.*)/.exec(url);\n return urlParts[1] + hostname + urlParts[3];\n}\nfunction randomNumber(max) {\n return runtime.randomInt(max);\n}\nfunction randomString(length) {\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(randomNumber(32).toString(32));\n }\n return result.join('');\n}\n/* harmony default export */ const http_socket = (HTTPSocket);\n\n;// ./src/core/http/http_streaming_socket.ts\nvar http_streaming_socket_hooks = {\n getReceiveURL: function (url, session) {\n return url.base + '/' + session + '/xhr_streaming' + url.queryString;\n },\n onHeartbeat: function (socket) {\n socket.sendRaw('[]');\n },\n sendHeartbeat: function (socket) {\n socket.sendRaw('[]');\n },\n onFinished: function (socket, status) {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n },\n};\n/* harmony default export */ const http_streaming_socket = (http_streaming_socket_hooks);\n\n;// ./src/core/http/http_polling_socket.ts\nvar http_polling_socket_hooks = {\n getReceiveURL: function (url, session) {\n return url.base + '/' + session + '/xhr' + url.queryString;\n },\n onHeartbeat: function () {\n },\n sendHeartbeat: function (socket) {\n socket.sendRaw('[]');\n },\n onFinished: function (socket, status) {\n if (status === 200) {\n socket.reconnect();\n }\n else {\n socket.onClose(1006, 'Connection interrupted (' + status + ')', false);\n }\n },\n};\n/* harmony default export */ const http_polling_socket = (http_polling_socket_hooks);\n\n;// ./src/runtimes/isomorphic/http/http_xhr_request.ts\n\nvar http_xhr_request_hooks = {\n getRequest: function (socket) {\n var Constructor = runtime.getXHRAPI();\n var xhr = new Constructor();\n xhr.onreadystatechange = xhr.onprogress = function () {\n switch (xhr.readyState) {\n case 3:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n break;\n case 4:\n if (xhr.responseText && xhr.responseText.length > 0) {\n socket.onChunk(xhr.status, xhr.responseText);\n }\n socket.emit('finished', xhr.status);\n socket.close();\n break;\n }\n };\n return xhr;\n },\n abortRequest: function (xhr) {\n xhr.onreadystatechange = null;\n xhr.abort();\n },\n};\n/* harmony default export */ const http_xhr_request = (http_xhr_request_hooks);\n\n;// ./src/runtimes/isomorphic/http/http.ts\n\n\n\n\n\nvar HTTP = {\n createStreamingSocket(url) {\n return this.createSocket(http_streaming_socket, url);\n },\n createPollingSocket(url) {\n return this.createSocket(http_polling_socket, url);\n },\n createSocket(hooks, url) {\n return new http_socket(hooks, url);\n },\n createXHR(method, url) {\n return this.createRequest(http_xhr_request, method, url);\n },\n createRequest(hooks, method, url) {\n return new HTTPRequest(hooks, method, url);\n },\n};\n/* harmony default export */ const http_http = (HTTP);\n\n;// ./src/runtimes/web/http/http.ts\n\n\nhttp_http.createXDR = function (method, url) {\n return this.createRequest(http_xdomain_request, method, url);\n};\n/* harmony default export */ const web_http_http = (http_http);\n\n;// ./src/runtimes/web/runtime.ts\n\n\n\n\n\n\n\n\n\n\n\n\nvar Runtime = {\n nextAuthCallbackID: 1,\n auth_callbacks: {},\n ScriptReceivers: ScriptReceivers,\n DependenciesReceivers: DependenciesReceivers,\n getDefaultStrategy: default_strategy,\n Transports: transports_transports,\n transportConnectionInitializer: transport_connection_initializer,\n HTTPFactory: web_http_http,\n TimelineTransport: jsonp_timeline,\n getXHRAPI() {\n return window.XMLHttpRequest;\n },\n getWebSocketAPI() {\n return window.WebSocket || window.MozWebSocket;\n },\n setup(PusherClass) {\n window.Pusher = PusherClass;\n var initializeOnDocumentBody = () => {\n this.onDocumentBody(PusherClass.ready);\n };\n if (!window.JSON) {\n Dependencies.load('json2', {}, initializeOnDocumentBody);\n }\n else {\n initializeOnDocumentBody();\n }\n },\n getDocument() {\n return document;\n },\n getProtocol() {\n return this.getDocument().location.protocol;\n },\n getAuthorizers() {\n return { ajax: xhr_auth, jsonp: jsonp_auth };\n },\n onDocumentBody(callback) {\n if (document.body) {\n callback();\n }\n else {\n setTimeout(() => {\n this.onDocumentBody(callback);\n }, 0);\n }\n },\n createJSONPRequest(url, data) {\n return new JSONPRequest(url, data);\n },\n createScriptRequest(src) {\n return new ScriptRequest(src);\n },\n getLocalStorage() {\n try {\n return window.localStorage;\n }\n catch (e) {\n return undefined;\n }\n },\n createXHR() {\n if (this.getXHRAPI()) {\n return this.createXMLHttpRequest();\n }\n else {\n return this.createMicrosoftXHR();\n }\n },\n createXMLHttpRequest() {\n var Constructor = this.getXHRAPI();\n return new Constructor();\n },\n createMicrosoftXHR() {\n return new ActiveXObject('Microsoft.XMLHTTP');\n },\n getNetwork() {\n return Network;\n },\n createWebSocket(url) {\n var Constructor = this.getWebSocketAPI();\n return new Constructor(url);\n },\n createSocketRequest(method, url) {\n if (this.isXHRSupported()) {\n return this.HTTPFactory.createXHR(method, url);\n }\n else if (this.isXDRSupported(url.indexOf('https:') === 0)) {\n return this.HTTPFactory.createXDR(method, url);\n }\n else {\n throw 'Cross-origin HTTP requests are not supported';\n }\n },\n isXHRSupported() {\n var Constructor = this.getXHRAPI();\n return (Boolean(Constructor) && new Constructor().withCredentials !== undefined);\n },\n isXDRSupported(useTLS) {\n var protocol = useTLS ? 'https:' : 'http:';\n var documentProtocol = this.getProtocol();\n return (Boolean(window['XDomainRequest']) && documentProtocol === protocol);\n },\n addUnloadListener(listener) {\n if (window.addEventListener !== undefined) {\n window.addEventListener('unload', listener, false);\n }\n else if (window.attachEvent !== undefined) {\n window.attachEvent('onunload', listener);\n }\n },\n removeUnloadListener(listener) {\n if (window.addEventListener !== undefined) {\n window.removeEventListener('unload', listener, false);\n }\n else if (window.detachEvent !== undefined) {\n window.detachEvent('onunload', listener);\n }\n },\n randomInt(max) {\n const random = function () {\n const crypto = window.crypto || window['msCrypto'];\n const random = crypto.getRandomValues(new Uint32Array(1))[0];\n return random / Math.pow(2, 32);\n };\n return Math.floor(random() * max);\n },\n};\n/* harmony default export */ const runtime = (Runtime);\n\n;// ./src/core/timeline/level.ts\nvar TimelineLevel;\n(function (TimelineLevel) {\n TimelineLevel[TimelineLevel[\"ERROR\"] = 3] = \"ERROR\";\n TimelineLevel[TimelineLevel[\"INFO\"] = 6] = \"INFO\";\n TimelineLevel[TimelineLevel[\"DEBUG\"] = 7] = \"DEBUG\";\n})(TimelineLevel || (TimelineLevel = {}));\n/* harmony default export */ const level = (TimelineLevel);\n\n;// ./src/core/timeline/timeline.ts\n\n\n\nclass Timeline {\n constructor(key, session, options) {\n this.key = key;\n this.session = session;\n this.events = [];\n this.options = options || {};\n this.sent = 0;\n this.uniqueID = 0;\n }\n log(level, event) {\n if (level <= this.options.level) {\n this.events.push(extend({}, event, { timestamp: util.now() }));\n if (this.options.limit && this.events.length > this.options.limit) {\n this.events.shift();\n }\n }\n }\n error(event) {\n this.log(level.ERROR, event);\n }\n info(event) {\n this.log(level.INFO, event);\n }\n debug(event) {\n this.log(level.DEBUG, event);\n }\n isEmpty() {\n return this.events.length === 0;\n }\n send(sendfn, callback) {\n var data = extend({\n session: this.session,\n bundle: this.sent + 1,\n key: this.key,\n lib: 'js',\n version: this.options.version,\n cluster: this.options.cluster,\n features: this.options.features,\n timeline: this.events,\n }, this.options.params);\n this.events = [];\n sendfn(data, (error, result) => {\n if (!error) {\n this.sent++;\n }\n if (callback) {\n callback(error, result);\n }\n });\n return true;\n }\n generateUniqueID() {\n this.uniqueID++;\n return this.uniqueID;\n }\n}\n\n;// ./src/core/strategies/transport_strategy.ts\n\n\n\n\nclass TransportStrategy {\n constructor(name, priority, transport, options) {\n this.name = name;\n this.priority = priority;\n this.transport = transport;\n this.options = options || {};\n }\n isSupported() {\n return this.transport.isSupported({\n useTLS: this.options.useTLS,\n });\n }\n connect(minPriority, callback) {\n if (!this.isSupported()) {\n return failAttempt(new UnsupportedStrategy(), callback);\n }\n else if (this.priority < minPriority) {\n return failAttempt(new TransportPriorityTooLow(), callback);\n }\n var connected = false;\n var transport = this.transport.createConnection(this.name, this.priority, this.options.key, this.options);\n var handshake = null;\n var onInitialized = function () {\n transport.unbind('initialized', onInitialized);\n transport.connect();\n };\n var onOpen = function () {\n handshake = factory.createHandshake(transport, function (result) {\n connected = true;\n unbindListeners();\n callback(null, result);\n });\n };\n var onError = function (error) {\n unbindListeners();\n callback(error);\n };\n var onClosed = function () {\n unbindListeners();\n var serializedTransport;\n serializedTransport = safeJSONStringify(transport);\n callback(new TransportClosed(serializedTransport));\n };\n var unbindListeners = function () {\n transport.unbind('initialized', onInitialized);\n transport.unbind('open', onOpen);\n transport.unbind('error', onError);\n transport.unbind('closed', onClosed);\n };\n transport.bind('initialized', onInitialized);\n transport.bind('open', onOpen);\n transport.bind('error', onError);\n transport.bind('closed', onClosed);\n transport.initialize();\n return {\n abort: () => {\n if (connected) {\n return;\n }\n unbindListeners();\n if (handshake) {\n handshake.close();\n }\n else {\n transport.close();\n }\n },\n forceMinPriority: (p) => {\n if (connected) {\n return;\n }\n if (this.priority < p) {\n if (handshake) {\n handshake.close();\n }\n else {\n transport.close();\n }\n }\n },\n };\n }\n}\nfunction failAttempt(error, callback) {\n util.defer(function () {\n callback(error);\n });\n return {\n abort: function () { },\n forceMinPriority: function () { },\n };\n}\n\n;// ./src/core/strategies/strategy_builder.ts\n\n\n\n\n\nconst { Transports: strategy_builder_Transports } = runtime;\nvar defineTransport = function (config, name, type, priority, options, manager) {\n var transportClass = strategy_builder_Transports[type];\n if (!transportClass) {\n throw new UnsupportedTransport(type);\n }\n var enabled = (!config.enabledTransports ||\n arrayIndexOf(config.enabledTransports, name) !== -1) &&\n (!config.disabledTransports ||\n arrayIndexOf(config.disabledTransports, name) === -1);\n var transport;\n if (enabled) {\n options = Object.assign({ ignoreNullOrigin: config.ignoreNullOrigin }, options);\n transport = new TransportStrategy(name, priority, manager ? manager.getAssistant(transportClass) : transportClass, options);\n }\n else {\n transport = strategy_builder_UnsupportedStrategy;\n }\n return transport;\n};\nvar strategy_builder_UnsupportedStrategy = {\n isSupported: function () {\n return false;\n },\n connect: function (_, callback) {\n var deferred = util.defer(function () {\n callback(new UnsupportedStrategy());\n });\n return {\n abort: function () {\n deferred.ensureAborted();\n },\n forceMinPriority: function () { },\n };\n },\n};\n\n;// ./src/core/options.ts\n\nfunction validateOptions(options) {\n if (options == null) {\n throw 'You must pass an options object';\n }\n if (options.cluster == null) {\n throw 'Options object must provide a cluster';\n }\n if ('disableStats' in options) {\n logger.warn('The disableStats option is deprecated in favor of enableStats');\n }\n}\n\n;// ./src/core/auth/user_authenticator.ts\n\n\nconst composeChannelQuery = (params, authOptions) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n return query;\n};\nconst UserAuthenticator = (authOptions) => {\n if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n return (params, callback) => {\n const query = composeChannelQuery(params, authOptions);\n runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.UserAuthentication, callback);\n };\n};\n/* harmony default export */ const user_authenticator = (UserAuthenticator);\n\n;// ./src/core/auth/channel_authorizer.ts\n\n\nconst channel_authorizer_composeChannelQuery = (params, authOptions) => {\n var query = 'socket_id=' + encodeURIComponent(params.socketId);\n query += '&channel_name=' + encodeURIComponent(params.channelName);\n for (var key in authOptions.params) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(authOptions.params[key]);\n }\n if (authOptions.paramsProvider != null) {\n let dynamicParams = authOptions.paramsProvider();\n for (var key in dynamicParams) {\n query +=\n '&' +\n encodeURIComponent(key) +\n '=' +\n encodeURIComponent(dynamicParams[key]);\n }\n }\n return query;\n};\nconst ChannelAuthorizer = (authOptions) => {\n if (typeof runtime.getAuthorizers()[authOptions.transport] === 'undefined') {\n throw `'${authOptions.transport}' is not a recognized auth transport`;\n }\n return (params, callback) => {\n const query = channel_authorizer_composeChannelQuery(params, authOptions);\n runtime.getAuthorizers()[authOptions.transport](runtime, query, authOptions, AuthRequestType.ChannelAuthorization, callback);\n };\n};\n/* harmony default export */ const channel_authorizer = (ChannelAuthorizer);\n\n;// ./src/core/auth/deprecated_channel_authorizer.ts\nconst ChannelAuthorizerProxy = (pusher, authOptions, channelAuthorizerGenerator) => {\n const deprecatedAuthorizerOptions = {\n authTransport: authOptions.transport,\n authEndpoint: authOptions.endpoint,\n auth: {\n params: authOptions.params,\n headers: authOptions.headers,\n },\n };\n return (params, callback) => {\n const channel = pusher.channel(params.channelName);\n const channelAuthorizer = channelAuthorizerGenerator(channel, deprecatedAuthorizerOptions);\n channelAuthorizer.authorize(params.socketId, callback);\n };\n};\n\n;// ./src/core/config.ts\n\n\n\n\n\nfunction getConfig(opts, pusher) {\n let config = {\n activityTimeout: opts.activityTimeout || defaults.activityTimeout,\n cluster: opts.cluster,\n httpPath: opts.httpPath || defaults.httpPath,\n httpPort: opts.httpPort || defaults.httpPort,\n httpsPort: opts.httpsPort || defaults.httpsPort,\n pongTimeout: opts.pongTimeout || defaults.pongTimeout,\n statsHost: opts.statsHost || defaults.stats_host,\n unavailableTimeout: opts.unavailableTimeout || defaults.unavailableTimeout,\n wsPath: opts.wsPath || defaults.wsPath,\n wsPort: opts.wsPort || defaults.wsPort,\n wssPort: opts.wssPort || defaults.wssPort,\n enableStats: getEnableStatsConfig(opts),\n httpHost: getHttpHost(opts),\n useTLS: shouldUseTLS(opts),\n wsHost: getWebsocketHost(opts),\n userAuthenticator: buildUserAuthenticator(opts),\n channelAuthorizer: buildChannelAuthorizer(opts, pusher),\n };\n if ('disabledTransports' in opts)\n config.disabledTransports = opts.disabledTransports;\n if ('enabledTransports' in opts)\n config.enabledTransports = opts.enabledTransports;\n if ('ignoreNullOrigin' in opts)\n config.ignoreNullOrigin = opts.ignoreNullOrigin;\n if ('timelineParams' in opts)\n config.timelineParams = opts.timelineParams;\n if ('nacl' in opts) {\n config.nacl = opts.nacl;\n }\n return config;\n}\nfunction getHttpHost(opts) {\n if (opts.httpHost) {\n return opts.httpHost;\n }\n if (opts.cluster) {\n return `sockjs-${opts.cluster}.pusher.com`;\n }\n return defaults.httpHost;\n}\nfunction getWebsocketHost(opts) {\n if (opts.wsHost) {\n return opts.wsHost;\n }\n return getWebsocketHostFromCluster(opts.cluster);\n}\nfunction getWebsocketHostFromCluster(cluster) {\n return `ws-${cluster}.pusher.com`;\n}\nfunction shouldUseTLS(opts) {\n if (runtime.getProtocol() === 'https:') {\n return true;\n }\n else if (opts.forceTLS === false) {\n return false;\n }\n return true;\n}\nfunction getEnableStatsConfig(opts) {\n if ('enableStats' in opts) {\n return opts.enableStats;\n }\n if ('disableStats' in opts) {\n return !opts.disableStats;\n }\n return false;\n}\nconst hasCustomHandler = (auth) => {\n return 'customHandler' in auth && auth['customHandler'] != null;\n};\nfunction buildUserAuthenticator(opts) {\n const userAuthentication = Object.assign(Object.assign({}, defaults.userAuthentication), opts.userAuthentication);\n if (hasCustomHandler(userAuthentication)) {\n return userAuthentication['customHandler'];\n }\n return user_authenticator(userAuthentication);\n}\nfunction buildChannelAuth(opts, pusher) {\n let channelAuthorization;\n if ('channelAuthorization' in opts) {\n channelAuthorization = Object.assign(Object.assign({}, defaults.channelAuthorization), opts.channelAuthorization);\n }\n else {\n channelAuthorization = {\n transport: opts.authTransport || defaults.authTransport,\n endpoint: opts.authEndpoint || defaults.authEndpoint,\n };\n if ('auth' in opts) {\n if ('params' in opts.auth)\n channelAuthorization.params = opts.auth.params;\n if ('headers' in opts.auth)\n channelAuthorization.headers = opts.auth.headers;\n }\n if ('authorizer' in opts) {\n return {\n customHandler: ChannelAuthorizerProxy(pusher, channelAuthorization, opts.authorizer),\n };\n }\n }\n return channelAuthorization;\n}\nfunction buildChannelAuthorizer(opts, pusher) {\n const channelAuthorization = buildChannelAuth(opts, pusher);\n if (hasCustomHandler(channelAuthorization)) {\n return channelAuthorization['customHandler'];\n }\n return channel_authorizer(channelAuthorization);\n}\n\n;// ./src/core/watchlist.ts\n\n\nclass WatchlistFacade extends Dispatcher {\n constructor(pusher) {\n super(function (eventName, data) {\n logger.debug(`No callbacks on watchlist events for ${eventName}`);\n });\n this.pusher = pusher;\n this.bindWatchlistInternalEvent();\n }\n handleEvent(pusherEvent) {\n pusherEvent.data.events.forEach((watchlistEvent) => {\n this.emit(watchlistEvent.name, watchlistEvent);\n });\n }\n bindWatchlistInternalEvent() {\n this.pusher.connection.bind('message', (pusherEvent) => {\n var eventName = pusherEvent.event;\n if (eventName === 'pusher_internal:watchlist_events') {\n this.handleEvent(pusherEvent);\n }\n });\n }\n}\n\n;// ./src/core/utils/flat_promise.ts\nfunction flatPromise() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n/* harmony default export */ const flat_promise = (flatPromise);\n\n;// ./src/core/user.ts\n\n\n\n\n\nclass UserFacade extends Dispatcher {\n constructor(pusher) {\n super(function (eventName, data) {\n logger.debug('No callbacks on user for ' + eventName);\n });\n this.signin_requested = false;\n this.user_data = null;\n this.serverToUserChannel = null;\n this.signinDonePromise = null;\n this._signinDoneResolve = null;\n this._onAuthorize = (err, authData) => {\n if (err) {\n logger.warn(`Error during signin: ${err}`);\n this._cleanup();\n return;\n }\n this.pusher.send_event('pusher:signin', {\n auth: authData.auth,\n user_data: authData.user_data,\n });\n };\n this.pusher = pusher;\n this.pusher.connection.bind('state_change', ({ previous, current }) => {\n if (previous !== 'connected' && current === 'connected') {\n this._signin();\n }\n if (previous === 'connected' && current !== 'connected') {\n this._cleanup();\n this._newSigninPromiseIfNeeded();\n }\n });\n this.watchlist = new WatchlistFacade(pusher);\n this.pusher.connection.bind('message', (event) => {\n var eventName = event.event;\n if (eventName === 'pusher:signin_success') {\n this._onSigninSuccess(event.data);\n }\n if (this.serverToUserChannel &&\n this.serverToUserChannel.name === event.channel) {\n this.serverToUserChannel.handleEvent(event);\n }\n });\n }\n signin() {\n if (this.signin_requested) {\n return;\n }\n this.signin_requested = true;\n this._signin();\n }\n _signin() {\n if (!this.signin_requested) {\n return;\n }\n this._newSigninPromiseIfNeeded();\n if (this.pusher.connection.state !== 'connected') {\n return;\n }\n this.pusher.config.userAuthenticator({\n socketId: this.pusher.connection.socket_id,\n }, this._onAuthorize);\n }\n _onSigninSuccess(data) {\n try {\n this.user_data = JSON.parse(data.user_data);\n }\n catch (e) {\n logger.error(`Failed parsing user data after signin: ${data.user_data}`);\n this._cleanup();\n return;\n }\n if (typeof this.user_data.id !== 'string' || this.user_data.id === '') {\n logger.error(`user_data doesn't contain an id. user_data: ${this.user_data}`);\n this._cleanup();\n return;\n }\n this._signinDoneResolve();\n this._subscribeChannels();\n }\n _subscribeChannels() {\n const ensure_subscribed = (channel) => {\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n }\n else if (!channel.subscriptionPending &&\n this.pusher.connection.state === 'connected') {\n channel.subscribe();\n }\n };\n this.serverToUserChannel = new Channel(`#server-to-user-${this.user_data.id}`, this.pusher);\n this.serverToUserChannel.bind_global((eventName, data) => {\n if (eventName.indexOf('pusher_internal:') === 0 ||\n eventName.indexOf('pusher:') === 0) {\n return;\n }\n this.emit(eventName, data);\n });\n ensure_subscribed(this.serverToUserChannel);\n }\n _cleanup() {\n this.user_data = null;\n if (this.serverToUserChannel) {\n this.serverToUserChannel.unbind_all();\n this.serverToUserChannel.disconnect();\n this.serverToUserChannel = null;\n }\n if (this.signin_requested) {\n this._signinDoneResolve();\n }\n }\n _newSigninPromiseIfNeeded() {\n if (!this.signin_requested) {\n return;\n }\n if (this.signinDonePromise && !this.signinDonePromise.done) {\n return;\n }\n const { promise, resolve, reject: _ } = flat_promise();\n promise.done = false;\n const setDone = () => {\n promise.done = true;\n };\n promise.then(setDone).catch(setDone);\n this.signinDonePromise = promise;\n this._signinDoneResolve = resolve;\n }\n}\n\n;// ./src/core/pusher.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass Pusher {\n static ready() {\n Pusher.isReady = true;\n for (var i = 0, l = Pusher.instances.length; i < l; i++) {\n Pusher.instances[i].connect();\n }\n }\n static getClientFeatures() {\n return keys(filterObject({ ws: runtime.Transports.ws }, function (t) {\n return t.isSupported({});\n }));\n }\n constructor(app_key, options) {\n checkAppKey(app_key);\n validateOptions(options);\n this.key = app_key;\n this.options = options;\n this.config = getConfig(this.options, this);\n this.channels = factory.createChannels();\n this.global_emitter = new Dispatcher();\n this.sessionID = runtime.randomInt(1000000000);\n this.timeline = new Timeline(this.key, this.sessionID, {\n cluster: this.config.cluster,\n features: Pusher.getClientFeatures(),\n params: this.config.timelineParams || {},\n limit: 50,\n level: level.INFO,\n version: defaults.VERSION,\n });\n if (this.config.enableStats) {\n this.timelineSender = factory.createTimelineSender(this.timeline, {\n host: this.config.statsHost,\n path: '/timeline/v2/' + runtime.TimelineTransport.name,\n });\n }\n var getStrategy = (options) => {\n return runtime.getDefaultStrategy(this.config, options, defineTransport);\n };\n this.connection = factory.createConnectionManager(this.key, {\n getStrategy: getStrategy,\n timeline: this.timeline,\n activityTimeout: this.config.activityTimeout,\n pongTimeout: this.config.pongTimeout,\n unavailableTimeout: this.config.unavailableTimeout,\n useTLS: Boolean(this.config.useTLS),\n });\n this.connection.bind('connected', () => {\n this.subscribeAll();\n if (this.timelineSender) {\n this.timelineSender.send(this.connection.isUsingTLS());\n }\n });\n this.connection.bind('message', (event) => {\n var eventName = event.event;\n var internal = eventName.indexOf('pusher_internal:') === 0;\n if (event.channel) {\n var channel = this.channel(event.channel);\n if (channel) {\n channel.handleEvent(event);\n }\n }\n if (!internal) {\n this.global_emitter.emit(event.event, event.data);\n }\n });\n this.connection.bind('connecting', () => {\n this.channels.disconnect();\n });\n this.connection.bind('disconnected', () => {\n this.channels.disconnect();\n });\n this.connection.bind('error', (err) => {\n logger.warn(err);\n });\n Pusher.instances.push(this);\n this.timeline.info({ instances: Pusher.instances.length });\n this.user = new UserFacade(this);\n if (Pusher.isReady) {\n this.connect();\n }\n }\n switchCluster(options) {\n const { appKey, cluster } = options;\n this.key = appKey;\n this.options = Object.assign(Object.assign({}, this.options), { cluster });\n this.config = getConfig(this.options, this);\n this.connection.switchCluster(this.key);\n }\n channel(name) {\n return this.channels.find(name);\n }\n allChannels() {\n return this.channels.all();\n }\n connect() {\n this.connection.connect();\n if (this.timelineSender) {\n if (!this.timelineSenderTimer) {\n var usingTLS = this.connection.isUsingTLS();\n var timelineSender = this.timelineSender;\n this.timelineSenderTimer = new PeriodicTimer(60000, function () {\n timelineSender.send(usingTLS);\n });\n }\n }\n }\n disconnect() {\n this.connection.disconnect();\n if (this.timelineSenderTimer) {\n this.timelineSenderTimer.ensureAborted();\n this.timelineSenderTimer = null;\n }\n }\n bind(event_name, callback, context) {\n this.global_emitter.bind(event_name, callback, context);\n return this;\n }\n unbind(event_name, callback, context) {\n this.global_emitter.unbind(event_name, callback, context);\n return this;\n }\n bind_global(callback) {\n this.global_emitter.bind_global(callback);\n return this;\n }\n unbind_global(callback) {\n this.global_emitter.unbind_global(callback);\n return this;\n }\n unbind_all(callback) {\n this.global_emitter.unbind_all();\n return this;\n }\n subscribeAll() {\n var channelName;\n for (channelName in this.channels.channels) {\n if (this.channels.channels.hasOwnProperty(channelName)) {\n this.subscribe(channelName);\n }\n }\n }\n subscribe(channel_name) {\n var channel = this.channels.add(channel_name, this);\n if (channel.subscriptionPending && channel.subscriptionCancelled) {\n channel.reinstateSubscription();\n }\n else if (!channel.subscriptionPending &&\n this.connection.state === 'connected') {\n channel.subscribe();\n }\n return channel;\n }\n unsubscribe(channel_name) {\n var channel = this.channels.find(channel_name);\n if (channel && channel.subscriptionPending) {\n channel.cancelSubscription();\n }\n else {\n channel = this.channels.remove(channel_name);\n if (channel && channel.subscribed) {\n channel.unsubscribe();\n }\n }\n }\n send_event(event_name, data, channel) {\n return this.connection.send_event(event_name, data, channel);\n }\n shouldUseTLS() {\n return this.config.useTLS;\n }\n signin() {\n this.user.signin();\n }\n}\nPusher.instances = [];\nPusher.isReady = false;\nPusher.logToConsole = false;\nPusher.Runtime = runtime;\nPusher.ScriptReceivers = runtime.ScriptReceivers;\nPusher.DependenciesReceivers = runtime.DependenciesReceivers;\nPusher.auth_callbacks = runtime.auth_callbacks;\n/* harmony default export */ const pusher = (Pusher);\nfunction checkAppKey(key) {\n if (key === null || key === undefined) {\n throw 'You must pass your app key when you instantiate Pusher.';\n }\n}\nruntime.setup(Pusher);\n\n\n/***/ }\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module used 'module' so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(721);\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=pusher.js.map","import Pusher, { Channel, PresenceChannel } from \"pusher-js\";\nimport { IWebsocketProvider } from \"./websocketProviderFactory\";\nimport axios from \"axios\";\n\nexport const NotebookChannel = \"notebook\";\nexport const NotificationChannel = \"user-notification\";\nexport const StatementResultChannel = \"report-result\";\nexport const ReconResultChannel = \"recon-result\";\nexport type PresenceMember = {\n id: string;\n info: {\n name: string;\n email: string;\n isEditing?: boolean;\n };\n};\n\nexport type PresenceMembers = {\n count: number;\n each: (callback: (member: PresenceMember) => void) => void;\n members: Record<string, PresenceMember[\"info\"]>;\n};\n\nclass PusherWebsocket implements IWebsocketProvider {\n private pusher: Pusher | null = null;\n public isConnected: boolean = false;\n public userId: string;\n private pusherKey?: string;\n private pusherCluster?: string;\n private authenticationEndpoint?: string;\n private notebookChannel: Channel | null = null;\n private notificationChannel: Channel | null = null;\n private reconResultChannel: Channel | null = null;\n private statementResultChannel: Channel | null = null;\n private otherChannels: { [key: string]: Channel | null } = {};\n\n constructor(\n userId: string,\n pusherKey: string,\n pusherCluster: string,\n authenticationEndpoint?: string,\n ) {\n this.userId = userId;\n this.pusherKey = pusherKey;\n this.pusherCluster = pusherCluster;\n this.authenticationEndpoint = authenticationEndpoint;\n }\n\n /**\n * Set user info for presence channels.\n * Note: For Pusher, presence info is set via the server-side auth endpoint.\n * This method is a no-op but provided for interface compatibility.\n */\n setPresenceInfo(_info: { name: string; email: string }): void {\n // Pusher handles presence info through the auth endpoint (/pusher/auth)\n // This is a no-op for interface compatibility\n }\n\n connect(): void {\n if (this.pusherKey) {\n // If authenticationEndpoint is provided, use custom authorizer\n if (this.authenticationEndpoint) {\n const pusherOptions: any = {\n cluster: this.pusherCluster,\n };\n const authEndpoint = this.authenticationEndpoint;\n // Use top-level authorizer for custom authentication endpoint\n pusherOptions.authorizer = (channel: any, options: any) => {\n return {\n authorize: async (\n socketId: string,\n callback: (err: any, authData: any) => void,\n ) => {\n const formData = new URLSearchParams();\n formData.append(\"socket_id\", socketId);\n formData.append(\"channel_name\", channel.name);\n\n try {\n const response = await axios.post(authEndpoint, formData, {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n withCredentials: true,\n });\n callback(null, response.data);\n } catch (error) {\n callback(error, null);\n }\n },\n };\n };\n this.pusher = new Pusher(this.pusherKey, pusherOptions);\n } else {\n // Use default authentication endpoint (normal/old behavior)\n this.pusher = new Pusher(this.pusherKey, {\n cluster: this.pusherCluster,\n userAuthentication: { endpoint: \"/pusher/auth\", transport: \"ajax\" },\n });\n }\n\n // Subscribe to default channels\n this.notebookChannel = this.pusher.subscribe(\n \"private-notebook-\" + this.userId,\n );\n this.notificationChannel = this.pusher.subscribe(\n `user-notification-${this.userId}`,\n );\n this.reconResultChannel = this.pusher.subscribe(\n `private-recon-result-${this.userId}`,\n );\n this.statementResultChannel = this.pusher.subscribe(\n \"private-report-result-\" + this.userId,\n );\n\n this.pusher.connection.bind(\"error\", (err: any) => {\n console.error(\"Pusher Error!\", err);\n this.isConnected = false;\n });\n this.isConnected = true;\n }\n }\n\n bind(channel: string, event: string, callback: (data: any) => void): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.bind(event, callback);\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.bind(event, callback);\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.bind(event, callback);\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.bind(event, callback);\n } else {\n if (!this.otherChannels[channel]) {\n this.otherChannels[channel] = this.pusher?.subscribe(channel);\n }\n this.otherChannels[channel]?.bind(event, callback);\n }\n }\n\n bindGlobal(channel: string, callback: (data: any) => void): void {\n if (!this.otherChannels[channel]) {\n this.otherChannels[channel] = this.pusher?.subscribe(channel);\n }\n this.otherChannels[channel]?.bind_global(callback);\n }\n\n unbind(channel: string, event: string): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.unbind(event);\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.unbind(event);\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.unbind(event);\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.unbind(event);\n } else {\n this.otherChannels[channel]?.unbind(event);\n }\n }\n\n unbindAll(channel: string): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.unbind_all();\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.unbind_all();\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.unbind_all();\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.unbind_all();\n } else {\n this.otherChannels[channel]?.unbind_all();\n }\n }\n\n trigger(channel: string, event: string, data: any): void {\n if (channel === NotebookChannel) {\n this.notebookChannel?.trigger(event, data);\n } else if (channel === NotificationChannel) {\n this.notificationChannel?.trigger(event, data);\n } else if (channel === ReconResultChannel) {\n this.reconResultChannel?.trigger(event, data);\n } else if (channel === StatementResultChannel) {\n this.statementResultChannel?.trigger(event, data);\n } else {\n this.otherChannels[channel]?.trigger(event, data);\n }\n }\n\n disconnect(): void {\n if (this.pusher) {\n this.notebookChannel?.unsubscribe();\n this.notificationChannel?.unsubscribe();\n this.reconResultChannel?.unsubscribe();\n this.statementResultChannel?.unsubscribe();\n\n for (const channel in this.otherChannels) {\n this.otherChannels[channel]?.unsubscribe();\n }\n\n this.pusher.disconnect();\n this.pusher = null;\n this.notebookChannel = null;\n this.notificationChannel = null;\n this.reconResultChannel = null;\n this.statementResultChannel = null;\n }\n this.isConnected = false;\n }\n /**\n * Get members of a presence channel.\n * Returns PresenceMembers synchronously for Pusher.\n */\n getPresenceChannelMembers(channel: string): PresenceMembers {\n if (!channel.startsWith(\"presence-\")) {\n throw new Error(\"Channel is not a presence channel\");\n }\n if (!this.pusher) {\n throw new Error(\"Pusher is not connected\");\n }\n if (!this.otherChannels[channel]) {\n this.otherChannels[channel] = this.pusher.subscribe(channel);\n }\n const presenceChannel = this.otherChannels[channel] as PresenceChannel;\n if (!presenceChannel) {\n throw new Error(\"Failed to subscribe to presence channel\");\n }\n if (!presenceChannel.members) {\n throw new Error(\n \"Channel is not a presence channel or subscription not ready\",\n );\n }\n\n // Convert Pusher members to PresenceMembers format\n const membersMap: Record<string, PresenceMember[\"info\"]> = {};\n const membersList: PresenceMember[] = [];\n\n presenceChannel.members.each((member: { id: string; info: any }) => {\n membersMap[member.id] = member.info;\n membersList.push({ id: member.id, info: member.info });\n });\n\n return {\n count: presenceChannel.members.count,\n members: membersMap,\n each: (callback: (member: PresenceMember) => void) => {\n membersList.forEach(callback);\n },\n };\n }\n}\n\nexport default PusherWebsocket;\n","import CentrifugoWebsocket from \"./centrifugoWebsocket\";\nimport PusherWebsocket from \"./pusherWebsocket\";\n\nexport interface IWebsocketProvider {\n connect: () => void;\n bind: (channel: string, event: string, callback: (data: any) => void) => void;\n bindGlobal: (event: string, callback: (data: any) => void) => void;\n unbind: (channel: string, event: string) => void;\n unbindAll: (channel: string) => void;\n disconnect: () => void;\n}\n\nexport class WebsocketContextFactory {\n static create(\n mechanism: \"pusher\" | \"centrifugo\",\n args: {\n connectionUrl?: string;\n token?: string;\n userId: string;\n pusherKey?: string;\n pusherCluster?: string;\n authenticationEndpoint?: string;\n },\n ): IWebsocketProvider {\n let websocketProvider: IWebsocketProvider | undefined;\n\n if (mechanism === \"centrifugo\") {\n if (!args.connectionUrl) {\n throw new Error(\"Connection url is required\");\n }\n if (!args.token) {\n throw new Error(\"Token is required\");\n }\n websocketProvider = new CentrifugoWebsocket(\n args.connectionUrl,\n args.token,\n args.userId,\n );\n } else if (mechanism === \"pusher\") {\n if (!args.pusherKey) {\n throw new Error(\"Pusher key is required\");\n }\n if (!args.pusherCluster) {\n throw new Error(\"Pusher cluster is required\");\n }\n websocketProvider = new PusherWebsocket(\n args.userId,\n args.pusherKey,\n args.pusherCluster,\n args.authenticationEndpoint,\n );\n } else {\n throw new Error(\n `Unsupported mechanism: ${mechanism}. Supported mechanisms are: pusher, centrifugo`,\n );\n }\n\n if (!websocketProvider) {\n throw new Error(\n `Failed to create websocket provider for mechanism: ${mechanism}`,\n );\n }\n\n websocketProvider.connect();\n return websocketProvider;\n }\n}\n","import { Definition, Inputs } from \"$models/ui-models/definitionModel\";\nimport { CancelTokenSource } from \"axios\";\nimport { apiClient } from \"../client\";\n\nexport const getDescription = async (props: {\n inputs: Inputs;\n definition: Definition;\n variable: string;\n source?: CancelTokenSource;\n}) => {\n const { definition, variable, inputs, source } = props;\n\n if (!definition) {\n throw {\n message: \"Definition is required for description lookup\",\n status: 400,\n };\n }\n if (!variable) {\n throw {\n message: \"Variable name is required for description lookup\",\n status: 400,\n };\n }\n if (!inputs) {\n throw {\n message: \"Inputs are required for description lookup\",\n status: 400,\n };\n }\n\n try {\n const response = await apiClient.post(\n \"/definition/describe\",\n { definition, variable, inputs },\n { cancelToken: source?.token },\n );\n return response.data;\n } catch (error: any) {\n throw {\n message:\n error.response?.data?.message || \"Failed to fetch variable description\",\n status: error.response?.status || 500,\n data: error.response?.data,\n };\n }\n};\n","import _ from \"lodash\";\nimport type { Workbook } from \"$models/gen/Api\";\nimport type {\n Definition,\n DescriptionResult,\n} from \"$models/ui-models/definitionModel\";\nimport type {\n CommonFilter,\n PromotedFiltersType,\n} from \"$models/ui-models/filterModel\";\nimport { FilterRule } from \"$models/ui-models/filterModel\";\nimport type {\n ColumnSetting,\n CustomModel,\n FilterColumnsBy,\n Sheet,\n} from \"$models/ui-models/workbookModel\";\nimport { getDescription } from \"../../api/definition/getDescription\";\nimport {\n StatementCommonFiltersType,\n StatementPromotedFiltersType,\n} from \"../../types/statement\";\n\nexport const defaultFilterRule: FilterRule = {\n is_not: false,\n rule_type: \"and_cond\",\n rules: [],\n};\n\nexport const createFilterRuleFromValues = (\n column: string,\n values: unknown[],\n): FilterRule => {\n return {\n rule_type: \"and_cond\",\n is_not: false,\n is_case_sensitive: false,\n rules: [\n {\n rule_type: \"cond\",\n col: column,\n operator: \"in_op\",\n value: values,\n is_not: false,\n },\n ],\n };\n};\n\nconst getSheetById = (\n sheets: Sheet<any>[],\n sheetId: string,\n): Sheet<any> | undefined => sheets.find((s) => s.id === sheetId);\n\nexport const convertToPromotedFilter = (\n statementFilter: StatementPromotedFiltersType,\n statement: Workbook,\n): PromotedFiltersType | null => {\n try {\n const sheet = getSheetById(statement.sheets || [], statementFilter.sheetId);\n if (!sheet) {\n console.warn(\n `Sheet ${statementFilter.sheetId} not found for promoted filter`,\n );\n return null;\n }\n\n const metadata = sheet.customModel?.metadata;\n const definitionModel = sheet.definitionModel;\n\n if (!metadata || !definitionModel) {\n console.warn(`Metadata or definition not found for sheet ${sheet.id}`);\n return null;\n }\n\n const columnSettings = (metadata.columnSettings as ColumnSetting[]) || [];\n\n const sheetDetails = {\n sheetId: statementFilter.sheetId,\n definitionModel,\n parentTableVariable: metadata.parentTableVariable || \"\",\n inputs: metadata.inputs || {},\n };\n\n const rule = createFilterRuleFromValues(\n statementFilter.column,\n statementFilter.values,\n );\n\n const appliedOnBlocks = statementFilter.lineIds.map((lineId) => {\n const lineSheet = getSheetById(statement.sheets || [], lineId);\n return {\n blockId: lineId,\n blockName: lineSheet?.name || lineId,\n applied: true,\n };\n });\n\n const columnSetting = columnSettings.find(\n (c) => c.field === statementFilter.column,\n );\n\n const promotedFilter: PromotedFiltersType = {\n name: statementFilter.name,\n rule,\n filterColumnsBy: metadata.filterColumnsBy || ({} as FilterColumnsBy),\n sheetDetails,\n appliedOnBlocks,\n datasetId: statementFilter.datasetId,\n datasetName: statementFilter.datasetName || \"\",\n blockColumnSettings: columnSettings,\n blockId: statementFilter.sheetId,\n uniqueValueCount: columnSetting?.unique_count,\n id: statementFilter.column,\n };\n\n return promotedFilter;\n } catch (error) {\n console.error(\"Error converting to promoted filter:\", error);\n return null;\n }\n};\n\nexport const convertToCommonFilter = async (\n statementFilter: StatementCommonFiltersType,\n statement: Workbook,\n): Promise<CommonFilter | null> => {\n try {\n const sheet = getSheetById(statement.sheets || [], statementFilter.sheetId);\n if (!sheet) {\n console.warn(\n `Sheet ${statementFilter.sheetId} not found for common filter`,\n );\n return null;\n }\n\n const metadata = sheet.customModel?.metadata;\n const definitionModel = sheet.definitionModel;\n\n if (!metadata || !definitionModel) {\n console.warn(`Metadata or definition not found for sheet ${sheet.id}`);\n return null;\n }\n\n const columnSettings = (metadata.columnSettings as ColumnSetting[]) || [];\n const sheetDetails = {\n sheetId: statementFilter.sheetId,\n definitionModel,\n parentTableVariable: metadata.parentTableVariable || \"\",\n inputs: metadata.inputs || {},\n };\n\n const rule = createFilterRuleFromValues(\n statementFilter.column,\n statementFilter.values,\n );\n\n const appliedOnBlocks = statementFilter.linesToApply.map((lineMapping) => {\n const lineSheet = getSheetById(\n statement.sheets || [],\n lineMapping.lineId,\n );\n const lineColumnSettings = lineSheet?.customModel?.metadata\n ?.columnSettings as ColumnSetting[];\n\n const columnSelectOptions = _.map(lineColumnSettings, (cs) => ({\n label: cs.headerName,\n value: cs.field,\n option: cs,\n }));\n\n return {\n blockId: lineMapping.lineId,\n blockName: lineSheet?.name || lineMapping.lineId,\n applied: true,\n column: lineMapping.column,\n columnSettings: columnSelectOptions,\n };\n });\n\n // Create a barebones dataset definition model\n const datasetDefinitionModel = {\n imports: [\n {\n loc: statementFilter.datasetId,\n to: statementFilter.datasetName,\n import_type: \"dataset\",\n },\n ],\n loads: [],\n variables: [],\n metrics: [],\n permissions: [],\n exports: [],\n inputs: {\n date_range: {},\n },\n };\n // Get column description from API using the barebones definition\n let columnDescResult: DescriptionResult | undefined;\n try {\n const response = await getDescription({\n inputs: {},\n definition: datasetDefinitionModel as Definition,\n variable: statementFilter.datasetName,\n });\n const descriptionResults = response.data as DescriptionResult[];\n columnDescResult = _.find(\n descriptionResults,\n (desc) => desc.name === statementFilter.column,\n );\n } catch (error) {\n console.warn(\n `Failed to get description for dataset ${statementFilter.datasetName}:`,\n error,\n );\n // Fallback to minimal description if API call fails\n columnDescResult = {\n name: statementFilter.column,\n data_type: \"string\",\n is_currency_column: false,\n datasetId: statementFilter.datasetId,\n datasetName: statementFilter.datasetName,\n } as DescriptionResult;\n }\n\n const filterColumnsBy = metadata.filterColumnsBy\n ? metadata.filterColumnsBy\n : ({ [statementFilter.column]: \"value\" } as FilterColumnsBy);\n const commonFilter: CommonFilter = {\n name: statementFilter.name,\n column: columnDescResult,\n rule,\n sheetDetails,\n filterColumnsBy,\n appliedOnBlocks,\n datasetName: statementFilter.datasetName || \"\",\n datasetId: statementFilter.datasetId,\n columnSettings,\n uniqueValueCount: columnDescResult?.[\"unique_count\"],\n id: statementFilter.column,\n };\n\n return commonFilter;\n } catch (error) {\n console.error(\"Error converting to common filter:\", error);\n return null;\n }\n};\n\nexport const convertStatementFiltersToFullTypes = async (\n promotedFilters: StatementPromotedFiltersType[],\n commonFilters: StatementCommonFiltersType[],\n statement: Workbook,\n): Promise<{\n promotedFilters: PromotedFiltersType[];\n commonFilters: CommonFilter[];\n}> => {\n const convertedPromoted = promotedFilters\n .map((f) => convertToPromotedFilter(f, statement))\n .filter((f) => f !== null) as PromotedFiltersType[];\n\n const convertedCommonPromises = commonFilters.map((f) =>\n convertToCommonFilter(f, statement),\n );\n const convertedCommon = (await Promise.all(convertedCommonPromises)).filter(\n (f) => f !== null,\n ) as CommonFilter[];\n\n return {\n promotedFilters: convertedPromoted,\n commonFilters: convertedCommon,\n };\n};\n","/**\n * Utility functions for converting statement filters into runInputs\n */\n\nimport _ from \"lodash\";\nimport {\n LineFilterOverride,\n ReportCustomModel,\n} from \"$models/ui-models/reportModel\";\nimport type { Sheet } from \"$models/ui-models/workbookModel\";\nimport {\n StatementCommonFiltersType,\n StatementPromotedFiltersType,\n StatementRunInputs,\n} from \"../../types/statement\";\nimport { createFilterRuleFromValues } from \"./filterConverters\";\n\n/**\n * Helper function to add a filter to runInputs, accumulating multiple filters per line\n */\nconst addFilterToRunInputs = (\n runInputs: StatementRunInputs,\n lineValue: string,\n filter: LineFilterOverride,\n): void => {\n if (!runInputs[lineValue]) {\n // First filter for this line\n runInputs[lineValue] = filter;\n } else if (Array.isArray(runInputs[lineValue])) {\n // Already an array, push the new filter\n runInputs[lineValue].push(filter);\n } else {\n // Convert single filter to array and add the new one\n runInputs[lineValue] = [runInputs[lineValue], filter];\n }\n};\n\n/**\n * Converts promoted and common filters into runInputs format for statement views\n */\nexport const convertFiltersToRunInputs = (\n promotedFilters: StatementPromotedFiltersType[],\n commonFilters: StatementCommonFiltersType[],\n statementSheet: Sheet<ReportCustomModel>,\n): StatementRunInputs => {\n const runInputs: StatementRunInputs = {};\n\n const allLines =\n statementSheet.customModel?.sections?.flatMap((section) => section.lines) ??\n [];\n\n // Process promoted filters\n _.forEach(promotedFilters, (filter) => {\n // Apply to each line specified in lineIds\n _.forEach(filter.lineIds, (lineId) => {\n const lineValue = _.find(allLines, (l) => l.id === lineId)?.value;\n if (!lineValue) {\n console.warn(`Line with id ${lineId} not found in statement sheet`);\n return;\n }\n const lineFilter: LineFilterOverride = {\n dataset_id: filter.datasetId,\n filter_input_key: \"rule_pivot\",\n filter_value: createFilterRuleFromValues(filter.column, filter.values),\n };\n addFilterToRunInputs(runInputs, lineValue, lineFilter);\n });\n });\n\n // Process common filters\n _.forEach(commonFilters, (filter) => {\n // Apply to each line with its specific column mapping\n _.forEach(filter.linesToApply, (lineMapping) => {\n const lineValue = _.find(\n allLines,\n (l) => l.id === lineMapping.lineId,\n )?.value;\n if (!lineValue) {\n console.warn(\n `Line with id ${lineMapping.lineId} not found in statement sheet`,\n );\n return;\n }\n const columnName = lineMapping.column;\n const lineFilter: LineFilterOverride = {\n dataset_id: filter.datasetId,\n filter_input_key: \"rule_pivot\",\n filter_value: createFilterRuleFromValues(columnName, filter.values),\n };\n addFilterToRunInputs(runInputs, lineValue, lineFilter);\n });\n });\n\n return runInputs;\n};\n\n/**\n * Separates columnFilters into promoted and common filters\n */\nexport const separateColumnFilters = (\n columnFilters: (StatementPromotedFiltersType | StatementCommonFiltersType)[],\n): {\n promotedFilters: StatementPromotedFiltersType[];\n commonFilters: StatementCommonFiltersType[];\n} => {\n const promotedFilters: StatementPromotedFiltersType[] = [];\n const commonFilters: StatementCommonFiltersType[] = [];\n\n _.forEach(columnFilters, (filter) => {\n if (filter.filterType === \"promoted\") {\n promotedFilters.push(filter as StatementPromotedFiltersType);\n } else if (filter.filterType === \"common\") {\n commonFilters.push(filter as StatementCommonFiltersType);\n }\n });\n\n return { promotedFilters, commonFilters };\n};\n","import axios, { AxiosRequestConfig } from \"axios\";\nimport { getFileUrlByFileId, GetFileUrlRequest } from \"../../api/file\";\n\nexport async function downloadFile(\n loc: string,\n contentType: string,\n): Promise<object | null> {\n if (!loc) return null;\n\n const requestData: GetFileUrlRequest = {\n key: loc,\n contentType: contentType,\n method: \"GET\" as unknown as \"GET\" | \"PUT\" | \"POST\", // Type assertion to match the expected type\n };\n\n try {\n const response = await getFileUrlByFileId(requestData);\n // Get the PresignedUrl\n const presignedUrl = response.url;\n\n const config: AxiosRequestConfig = {\n method: \"GET\",\n url: presignedUrl,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n };\n const axiosInstance = axios.create();\n const result = await axiosInstance(config);\n\n const fileRead = result.data;\n return fileRead;\n } catch (error) {\n console.error(\"Error downloading file:\", error);\n throw error;\n }\n}\n","import _ from \"lodash\";\nimport type { Workbook } from \"$models/gen/Api\";\nimport type { Definition } from \"$models/ui-models/definitionModel\";\nimport {\n ReportCustomModel,\n StatementPlan,\n} from \"$models/ui-models/reportModel\";\nimport type {\n CustomModel,\n MetricCustomModel,\n Sheet,\n WorkbookModel,\n} from \"$models/ui-models/workbookModel\";\nimport { downloadFile } from \"../file/downloadFile\";\n\n/**\n * Hydrates a statement workbook by fetching and assigning definition and custom models\n * to all sheets (STATEMENT_SHEET, PIVOT, PLAN)\n */\nexport const hydrateStatement = async (\n workbook: Workbook,\n): Promise<Partial<WorkbookModel>> => {\n const workbookModel: Partial<WorkbookModel> = {\n ...workbook,\n sheets: [...workbook.sheets],\n };\n const sheetsGroupedByType = _.groupBy(workbookModel.sheets, \"type\");\n\n const statementSheet = sheetsGroupedByType.STATEMENT_SHEET?.[0];\n if (!statementSheet) {\n throw new Error(\"No STATEMENT_SHEET found in workbook\");\n }\n\n if (!statementSheet.externalDataId) {\n throw new Error(\"STATEMENT_SHEET is missing required externalDataId\");\n }\n if (!statementSheet.modelId) {\n throw new Error(\"STATEMENT_SHEET is missing required modelId\");\n }\n\n const statementSheetDefinitionModelId = statementSheet.externalDataId;\n const statementSheetCustomModelId = statementSheet.modelId;\n\n const modelResultsPromises = [\n downloadFile(statementSheetDefinitionModelId, \"application/json\"),\n downloadFile(statementSheetCustomModelId, \"application/json\"),\n ];\n\n // Handle PIVOT sheets\n if (!_.isEmpty(sheetsGroupedByType.PIVOT)) {\n const commonDefinitionModelId = sheetsGroupedByType.PIVOT[0].externalDataId;\n const commonCustomModelId = sheetsGroupedByType.PIVOT[0].modelId;\n modelResultsPromises.push(\n downloadFile(commonDefinitionModelId, \"application/json\"),\n );\n modelResultsPromises.push(\n downloadFile(commonCustomModelId, \"application/json\"),\n );\n } else {\n modelResultsPromises.push(Promise.resolve({}), Promise.resolve({}));\n }\n\n // Handle PLAN sheets\n if (!_.isEmpty(sheetsGroupedByType.PLAN)) {\n const commonPlanDefinitionModelId =\n sheetsGroupedByType.PLAN[0].externalDataId;\n const commonPlanCustomModelId = sheetsGroupedByType.PLAN[0].modelId;\n modelResultsPromises.push(\n downloadFile(commonPlanDefinitionModelId, \"application/json\"),\n );\n modelResultsPromises.push(\n downloadFile(commonPlanCustomModelId, \"application/json\"),\n );\n } else {\n modelResultsPromises.push(Promise.resolve({}), Promise.resolve({}));\n }\n\n const results = await Promise.allSettled(modelResultsPromises);\n\n // Prepare correctly typed holders; default to empty objects for optional downloads\n let commonDefinitionModel: Record<string, Definition> = {};\n let commonCustomModel: Record<string, CustomModel> = {};\n let planCommonDefinitionModel: Record<string, StatementPlan> = {};\n let planCommonCustomModel: Record<string, CustomModel> = {};\n\n // 0,1 are mandatory (STATEMENT) — fail fast on rejection\n const [\n resStatementDef,\n resStatementCustom,\n resPivotDef,\n resPivotCustom,\n resPlanDef,\n resPlanCustom,\n ] = results;\n\n if (resStatementDef.status !== \"fulfilled\") {\n throw new Error(\n `Failed to download STATEMENT definition model: ${\n (resStatementDef as PromiseRejectedResult).reason ?? \"unknown error\"\n }`,\n );\n }\n if (resStatementCustom.status !== \"fulfilled\") {\n throw new Error(\n `Failed to download STATEMENT custom model: ${\n (resStatementCustom as PromiseRejectedResult).reason ?? \"unknown error\"\n }`,\n );\n }\n\n // Assign statement models directly from fulfilled results\n statementSheet.definitionModel = resStatementDef.value as Definition;\n statementSheet.customModel =\n resStatementCustom.value as unknown as CustomModel;\n\n // Optional downloads (PIVOT and PLAN) — use sensible defaults on rejection\n if (resPivotDef && resPivotDef.status === \"fulfilled\") {\n commonDefinitionModel = resPivotDef.value as Record<string, Definition>;\n }\n if (resPivotCustom && resPivotCustom.status === \"fulfilled\") {\n commonCustomModel = resPivotCustom.value as Record<string, CustomModel>;\n }\n if (resPlanDef && resPlanDef.status === \"fulfilled\") {\n planCommonDefinitionModel = resPlanDef.value as Record<\n string,\n StatementPlan\n >;\n }\n if (resPlanCustom && resPlanCustom.status === \"fulfilled\") {\n planCommonCustomModel = resPlanCustom.value as Record<string, CustomModel>;\n }\n\n // Assign models to PIVOT sheets\n _.forEach(sheetsGroupedByType.PIVOT, (sheet: Sheet<MetricCustomModel>) => {\n sheet.customModel = commonCustomModel[sheet.id] as any;\n sheet.definitionModel = commonDefinitionModel[sheet.id] as any;\n });\n\n // Assign models to PLAN sheets\n _.forEach(sheetsGroupedByType.PLAN, (sheet: Sheet<ReportCustomModel>) => {\n sheet.customModel = planCommonCustomModel[sheet.id] as any;\n sheet.definitionModel = planCommonDefinitionModel[sheet.id] as any;\n });\n\n return workbookModel;\n};\n","/**\n * Fancy ID generator that creates 20-character string identifiers with the following properties:\n *\n * 1. They're based on timestamp so that they sort *after* any existing ids.\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't collide with other clients' IDs.\n * 3. They sort *lexicographically* (so the timestamp is converted to characters that will sort properly).\n * 4. They're monotonically increasing. Even if you generate more than one in the same timestamp, the\n * latter ones will sort after the former ones. We do this by using the previous random bits\n * but \"incrementing\" them by 1 (only in the case of a timestamp collision).\n */\nexport const generatePushID: () => string = (function () {\n // Modeled after base64 web-safe chars, but only using uppercase letters and numbers, ordered by ASCII.\n const PUSH_CHARS = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\n const pushCharLength = PUSH_CHARS.length;\n\n // Timestamp of last push, used to prevent local collisions if you push twice in one ms.\n let lastPushTime = 0;\n\n // We generate 72-bits of randomness which get turned into 12 characters and appended to the\n // timestamp to prevent collisions with other clients. We store the last characters we\n // generated because in the event of a collision, we'll use those same characters except\n // \"incremented\" by one.\n const lastRandChars = [];\n\n return function () {\n let now = new Date().getTime();\n const duplicateTime = now === lastPushTime;\n lastPushTime = now;\n\n const timeStampChars = new Array(8);\n for (let i = 7; i >= 0; i--) {\n timeStampChars[i] = PUSH_CHARS.charAt(now % pushCharLength);\n // NOTE: Can't use << here because javascript will convert to int and lose the upper bits.\n now = Math.floor(now / pushCharLength);\n }\n if (now !== 0)\n throw new Error(\"We should have converted the entire timestamp.\");\n\n let id = timeStampChars.join(\"\");\n let i;\n\n if (!duplicateTime) {\n for (i = 0; i < 12; i++) {\n lastRandChars[i] = Math.floor(Math.random() * pushCharLength);\n }\n } else {\n // If the timestamp hasn't changed since last push, use the same random number, except incremented by 1.\n for (i = 11; i >= 0 && lastRandChars[i] === pushCharLength - 1; i--) {\n lastRandChars[i] = 0;\n }\n lastRandChars[i]++;\n }\n for (i = 0; i < 12; i++) {\n id += PUSH_CHARS.charAt(lastRandChars[i]);\n }\n if (id.length != 20) throw new Error(\"Length should be 20.\");\n\n return id;\n };\n})();\n","export const getUniqueDuplicateName = (\n name: string,\n collectionToCheckIn: string[],\n suffix: string = \"Copy\",\n concatChar: string = \"_\",\n) => {\n // Ensure a valid name is provided to prevent unexpected behavior\n if (!name) {\n throw new Error(\"Invalid name provided to getUniqueDuplicateName\");\n }\n\n let newName = `${name}${concatChar}${suffix}`.trim();\n for (let i = 1; collectionToCheckIn.includes(newName); i++) {\n newName = `${name}${concatChar}${suffix}${concatChar}${i}`;\n }\n return newName.trim();\n};\n","import { Sheet } from \"$models/ui-models/workbookModel\";\nimport { downloadFile } from \"../file/downloadFile\";\n\nexport const hydrateWorksheet = async (sheet: Sheet): Promise<Sheet | null> => {\n try {\n if (!sheet) return sheet;\n\n const isHydrated = sheet.definitionModel && sheet.customModel;\n\n if (isHydrated) {\n return sheet;\n }\n\n const definitionModelId = sheet.externalDataId;\n const customModelId = sheet.modelId;\n\n let definitionModel = {} as Record<string, unknown>;\n let customModel = {} as Record<string, unknown>;\n const sheetId = sheet.id as string;\n if (definitionModelId && customModelId) {\n definitionModel = (await downloadFile(\n definitionModelId,\n \"application/json\",\n )) as Record<string, unknown>;\n customModel = (await downloadFile(\n customModelId,\n \"application/json\",\n )) as Record<string, unknown>;\n }\n if (!definitionModel || !definitionModel[sheetId]) {\n return sheet;\n }\n sheet.definitionModel = definitionModel[sheetId];\n sheet.customModel = customModel[sheetId];\n return sheet;\n } catch (error) {\n console.error(\"Error hydrating portal page:\", error);\n throw error;\n }\n};\n","import _ from \"lodash\";\nimport { getWorksheets } from \"../worksheet\";\nimport { getMetricDefinition } from \"../../utils\";\nimport {\n defaultCurrencyModel,\n defaultDashboardDateRangeModel,\n getSelectedMetricsParentIds,\n} from \"../../utils/metric/getMetricDefinition\";\nimport { hydrateWorksheet } from \"../../utils/metric/hydrateWorksheet\";\nimport { getUpdatedDefinitionCustomModel } from \"../../utils/metric/analysisMethods\";\nimport { Definition, Inputs, TimeBin } from \"$models/ui-models/definitionModel\";\nimport {\n GridColumnState,\n MetricMetadataType,\n PivotCustomModel,\n} from \"$models/ui-models/workbookModel\";\nimport { runPublishedDefinition } from \"../definition\";\n\nexport const getData = async (\n metricSheetId: string,\n options?: {\n groupKeys?: string[];\n isKPI?: boolean;\n plotAsTrend?: boolean;\n stringValue?: boolean;\n },\n) => {\n const worksheets = await getWorksheets([metricSheetId]);\n if (_.isEmpty(worksheets)) return {};\n\n const selectedWorksheet = worksheets[0];\n const hydratedSheet = await hydrateWorksheet(selectedWorksheet);\n if (!hydratedSheet) return {};\n\n const selectedMetricsParentIds = getSelectedMetricsParentIds([\n { sheet: selectedWorksheet },\n ]);\n const parentWorksheets = await getWorksheets(selectedMetricsParentIds);\n const parentSheet = _.find(\n parentWorksheets,\n (ps) =>\n ps.id ===\n (hydratedSheet?.customFields.parentTableId as unknown as string),\n );\n let definitionModel;\n let customModel;\n\n if (parentSheet) {\n const hydratedParentSheet = await hydrateWorksheet(parentSheet);\n if (hydratedParentSheet?.definitionModel) {\n const {\n definitionModel: parentDefinitionModel,\n customModel: parentCustomModel,\n } = getUpdatedDefinitionCustomModel({\n metricDefinitionModel: hydratedSheet.definitionModel as Definition,\n parentDefinitionModel:\n hydratedParentSheet?.definitionModel as Definition,\n parentCustomModel: hydratedParentSheet?.customModel as PivotCustomModel,\n metricCustomModel: hydratedSheet.customModel as PivotCustomModel,\n });\n definitionModel = parentDefinitionModel;\n customModel = parentCustomModel;\n }\n } else {\n definitionModel = hydratedSheet.definitionModel as Definition;\n customModel = hydratedSheet.customModel as PivotCustomModel;\n }\n\n const cModel = customModel;\n const dModel = definitionModel as Definition;\n const gridColumnState: GridColumnState =\n cModel?.gridColumnState as GridColumnState;\n\n const { variable, parentTableVariable, inputs } = cModel as {\n variable: string;\n parentTableVariable: string;\n inputs: Inputs;\n };\n\n const aliases = dModel?.aliases?.[parentTableVariable];\n\n let timeBin = \"\";\n if (options?.isKPI) {\n timeBin = (\n options?.plotAsTrend\n ? !_.isEmpty(cModel?.timeBin)\n ? cModel?.timeBin\n : \"per_month\"\n : \"\"\n ) as TimeBin;\n } else {\n timeBin = cModel?.timeBin ?? \"\";\n }\n\n const valueCols = _.map(gridColumnState?.valueCols, (vc) => ({\n ...vc,\n hide: false,\n }));\n\n const columnSettings = _.map(cModel?.parentTableColumnSettings, (cs) => ({\n ...cs,\n hide: false,\n }));\n const metadata: MetricMetadataType = {\n variable,\n parentTableVariable,\n inputs,\n datasetId: cModel?.datasetId ?? \"\",\n datasetName: cModel?.datasetName ?? \"\",\n columnSettings: columnSettings ?? [],\n filterColumnsBy: cModel?.filterColumnsBy ?? {},\n filterModel: hydratedSheet?.customModel?.gridColumnState?.filterModel ?? {},\n valueCols: valueCols ?? [],\n rowGroupCols: gridColumnState?.rowGroupCols ?? [],\n pivotCols: gridColumnState?.pivotCols ?? [],\n dateColumn: cModel?.dateColumn,\n timeBin: timeBin as TimeBin,\n dateRange: cModel?.inputs?.date_range,\n aliases,\n lastModifiedDate: hydratedSheet?.lastModifiedDate,\n hierarchy: cModel?.hierarchy,\n description: \"\",\n isKPI: options?.isKPI ?? false,\n currency: cModel?.currency,\n sortOptions: cModel?.sortOptions,\n limitOptions: cModel?.limitOptions,\n stringValue: options?.stringValue ?? false,\n };\n\n const { inputs: definitionInputs, describe } = getMetricDefinition({\n sheetId: hydratedSheet.id as string,\n metadata,\n groupKeys: options?.groupKeys ?? [],\n lastModifiedDate: hydratedSheet.lastModifiedDate as string,\n promotedFiltersStoreValue: {},\n promotedFilters: [],\n dateRangeModel:\n hydratedSheet?.customModel?.dateRangeModel ??\n defaultDashboardDateRangeModel,\n currencyModel:\n hydratedSheet?.customModel?.currencyModel ?? defaultCurrencyModel,\n commonFilters: [],\n });\n\n let resultData = [] as object[];\n if (\n !_.isEmpty(valueCols) ||\n !_.isEmpty(metadata.rowGroupCols) ||\n !_.isEmpty(metadata.pivotCols)\n ) {\n if (!_.isEmpty(definitionInputs)) {\n let promises = [] as Promise<any>[];\n definitionInputs.forEach((input) => {\n promises.push(\n runPublishedDefinition({\n inputs: { ...input },\n sheet: {\n id: hydratedSheet.id as string,\n lastModifiedDate: hydratedSheet.lastModifiedDate as string,\n },\n variable,\n describe: parentTableVariable,\n }),\n );\n });\n const data = await Promise.all(promises);\n resultData = _.map(data, (d) => d.data.data);\n } else {\n const result = (\n await runPublishedDefinition({\n inputs: { ...inputs },\n sheet: {\n id: hydratedSheet.id as string,\n lastModifiedDate: hydratedSheet.lastModifiedDate as string,\n },\n variable,\n describe: parentTableVariable,\n })\n ).data;\n resultData = result.data;\n }\n }\n resultData = _.flatten(resultData);\n\n return { data: resultData };\n};\n","import { apiClient } from \"../client\";\nimport { ChatThread } from \"$models/gen/Api\";\n\nexport interface CreateThreadRequest {\n data: ChatThread;\n}\n\nexport interface CreateThreadResponse {\n success: boolean;\n data: ChatThread;\n message?: string;\n}\n\n/**\n * Creates a new comment thread\n * @param request - The thread creation request containing ChatThread data\n * @returns Promise<CreateThreadResponse> The created thread details\n * @throws Error if the request fails\n */\nexport async function createThread(\n request: CreateThreadRequest,\n): Promise<CreateThreadResponse> {\n try {\n const response = await apiClient.post(\"/chat/create-thread\", request);\n\n if (!response.data) {\n throw { message: \"Failed to create thread\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatThread,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating thread\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport { ChatComment } from \"$models/gen/Api\";\n\nexport interface GetCommentsByThreadIdResponse {\n success: boolean;\n data: ChatComment[];\n message?: string;\n}\n\n/**\n * Gets all comments for a specific thread\n * @param threadId - The ID of the thread to get comments for\n * @returns Promise<GetCommentsByThreadIdResponse> The comments for the thread\n * @throws Error if the request fails\n */\nexport async function getCommentsByThreadId(\n threadId: string,\n): Promise<GetCommentsByThreadIdResponse> {\n try {\n if (!threadId) {\n throw { message: \"Thread ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/chat/get-comments-by-thread-id?threadId=${threadId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch comments\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatComment[],\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching comments\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport { ChatComment } from \"$models/gen/Api\";\n\nexport interface PostCommentRequest {\n data: ChatComment;\n}\n\nexport interface PostCommentResponse {\n success: boolean;\n data: ChatComment;\n message?: string;\n}\n\n/**\n * Adds a new comment to an existing thread\n * @param request - The comment creation request containing ChatComment data\n * @returns Promise<PostCommentResponse> The created comment details\n * @throws Error if the request fails\n */\nexport async function postComment(\n request: PostCommentRequest,\n): Promise<PostCommentResponse> {\n try {\n const response = await apiClient.post(\"/chat/post-comment\", request);\n\n if (!response.data) {\n throw { message: \"Failed to post comment\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatComment,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while posting comment\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport { ChatComment } from \"$models/gen/Api\";\n\nexport interface UpdateCommentRequest {\n data: ChatComment;\n commentId: string;\n}\n\nexport interface UpdateCommentResponse {\n success: boolean;\n data: ChatComment;\n message?: string;\n}\n\n/**\n * Updates an existing comment\n * @param request - The comment update request containing ChatComment data and commentId\n * @returns Promise<UpdateCommentResponse> The updated comment details\n * @throws Error if the request fails\n */\nexport async function updateComment(\n request: UpdateCommentRequest,\n): Promise<UpdateCommentResponse> {\n try {\n if (!request.commentId) {\n throw { message: \"Comment ID is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/chat/update-comment\", request);\n\n if (!response.data) {\n throw { message: \"Failed to update comment\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data as ChatComment,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while updating comment\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface DeleteCommentResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Deletes a comment\n * @param commentId - The ID of the comment to delete\n * @returns Promise<DeleteCommentResponse> The deletion result\n * @throws Error if the request fails\n */\nexport async function deleteComment(\n commentId: string,\n): Promise<DeleteCommentResponse> {\n try {\n if (!commentId) {\n throw { message: \"Comment ID is required\", status: 400 };\n }\n\n const response = await apiClient.delete(\n `/chat/delete-comment?commentId=${commentId}`,\n );\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while deleting comment\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface SubscribeUserRequest {\n params: {\n userId: string;\n threadId: string;\n };\n}\n\nexport interface SubscribeUserResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Subscribes a user to a thread\n * @param request - The subscription request containing userId and threadId\n * @returns Promise<SubscribeUserResponse> The subscription result\n * @throws Error if the request fails\n */\nexport async function subscribeUser(\n request: SubscribeUserRequest,\n): Promise<SubscribeUserResponse> {\n try {\n if (!request.params.userId || !request.params.threadId) {\n throw { message: \"User ID and Thread ID are required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/chat/subscribe-user\", request);\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while subscribing user\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface UnsubscribeUserRequest {\n params: {\n userId: string;\n threadId: string;\n };\n}\n\nexport interface UnsubscribeUserResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Unsubscribes a user from a thread\n * @param request - The unsubscription request containing userId and threadId\n * @returns Promise<UnsubscribeUserResponse> The unsubscription result\n * @throws Error if the request fails\n */\nexport async function unsubscribeUser(\n request: UnsubscribeUserRequest,\n): Promise<UnsubscribeUserResponse> {\n try {\n if (!request.params.userId || !request.params.threadId) {\n throw { message: \"User ID and Thread ID are required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/chat/unsubscribe-user\", request);\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while unsubscribing user\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface CheckSubscriptionStatusResponse {\n success: boolean;\n data: {\n isSubscribed: boolean;\n subscriptionDetails?: any;\n };\n message?: string;\n}\n\n/**\n * Checks if a user is subscribed to a thread\n * @param userId - The ID of the user\n * @param threadId - The ID of the thread\n * @returns Promise<CheckSubscriptionStatusResponse> The subscription status\n * @throws Error if the request fails\n */\nexport async function checkSubscriptionStatus(\n userId: string,\n threadId: string,\n): Promise<CheckSubscriptionStatusResponse> {\n try {\n if (!userId || !threadId) {\n throw { message: \"User ID and Thread ID are required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/chat/check-user-subscription-status?userId=${userId}&threadId=${threadId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to check subscription status\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while checking subscription status\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import {\n\ttype Definition,\n\ttype Import,\n\ttype Load,\n\ttype Variable,\n\ttype Export,\n\ttype Permission,\n\ttype Table,\n\ttype Inputs,\n\ttype AvailableTransform\n} from '$models/ui-models/definitionModel';\nimport { type Section } from '$models/ui-models/reportModel';\n\nexport class DefinitionBuilder {\n\tprivate definition: Definition;\n\n\tprivate constructor(def?: Definition) {\n\t\tthis.definition = {\n\t\t\tinputs: {},\n\t\t\taliases: {},\n\t\t\timports: [],\n\t\t\tloads: [],\n\t\t\tvariables: [],\n\t\t\tpermissions: [],\n\t\t\texports: [],\n\t\t\ttables: [],\n\t\t\tsections: []\n\t\t};\n\n\t\tif (def) {\n\t\t\tthis.definition = {\n\t\t\t\t...this.definition,\n\t\t\t\t...def\n\t\t\t};\n\t\t}\n\t}\n\n\tstatic builder(def?: Definition): DefinitionBuilder {\n\t\treturn new DefinitionBuilder(def);\n\t}\n\n\t// Input methods\n\twithInputs(inputs: Inputs): DefinitionBuilder {\n\t\tthis.definition.inputs = { ...this.definition.inputs, ...inputs };\n\t\treturn this;\n\t}\n\n\t// Alias methods\n\twithAlias(tableName: string, columnAliases: Record<string, string>): DefinitionBuilder {\n\t\tif (!this.definition.aliases) {\n\t\t\tthis.definition.aliases = {};\n\t\t}\n\t\tthis.definition.aliases[tableName] = columnAliases;\n\t\treturn this;\n\t}\n\n\t// Import methods\n\taddImport(imprt: Import): DefinitionBuilder {\n\t\tthis.definition.imports?.push(imprt);\n\t\treturn this;\n\t}\n\n\taddDatasetImport(\n\t\tdatasetId: string,\n\t\toptions?: Partial<Omit<Import, 'loc' | 'to' | 'import_type'>>\n\t): DefinitionBuilder {\n\t\tconst imprt: Import = {\n\t\t\tloc: datasetId,\n\t\t\tto: datasetId,\n\t\t\timport_type: 'dataset',\n\t\t\t...options\n\t\t};\n\t\treturn this.addImport(imprt);\n\t}\n\n\t// Load methods\n\taddLoad(load: Load): DefinitionBuilder {\n\t\tthis.definition.loads?.push(load);\n\t\treturn this;\n\t}\n\n\taddFileLoad(\n\t\tfrom: string,\n\t\tto: string,\n\t\tfsOptions: Record<string, unknown> = {}\n\t): DefinitionBuilder {\n\t\tconst load: Load = {\n\t\t\tloc: from,\n\t\t\tto,\n\t\t\tfs_options: fsOptions\n\t\t};\n\t\treturn this.addLoad(load);\n\t}\n\n\t// Variable methods\n\taddVariable(name: string, transforms: AvailableTransform[]): DefinitionBuilder {\n\t\tconst variable: Variable = {\n\t\t\tname,\n\t\t\ttransforms\n\t\t};\n\t\tthis.definition.variables?.push(variable);\n\t\treturn this;\n\t}\n\n\t// Permission methods\n\taddPermission(permission: Permission): DefinitionBuilder {\n\t\tthis.definition.permissions?.push(permission);\n\t\treturn this;\n\t}\n\n\t// Export methods\n\taddExport(exprt: Export): DefinitionBuilder {\n\t\tthis.definition.exports?.push(exprt);\n\t\treturn this;\n\t}\n\n\t// Table methods\n\taddTable(table: Table): DefinitionBuilder {\n\t\tthis.definition.tables?.push(table);\n\t\treturn this;\n\t}\n\n\t// Section methods\n\taddSection(section: Section): DefinitionBuilder {\n\t\tthis.definition.sections?.push(section);\n\t\treturn this;\n\t}\n\n\t// Build method with basic validation\n\tbuild(): Definition {\n\t\tthis.validateDefinition();\n\t\treturn this.definition;\n\t}\n\n\tprivate validateDefinition(): void {\n\t\t// Ensure all referenced tables in aliases exist in imports or loads\n\t\tconst definedTables = new Set([\n\t\t\t...(this.definition.imports?.map((i) => i.to) || []),\n\t\t\t...(this.definition.loads?.map((l) => l.to) || [])\n\t\t]);\n\n\t\tconst aliasedTables = Object.keys(this.definition.aliases || {});\n\t\tfor (const table of aliasedTables) {\n\t\t\tif (!definedTables.has(table)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Table \"${table}\" referenced in aliases but not defined in imports or loads`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Ensure all variables have valid names and transforms\n\t\tthis.definition.variables?.forEach((variable) => {\n\t\t\tif (!variable.name) {\n\t\t\t\tthrow new Error('Variable must have a name');\n\t\t\t}\n\t\t\tif (!Array.isArray(variable.transforms) || variable.transforms.length === 0) {\n\t\t\t\tthrow new Error(`Variable \"${variable.name}\" must have at least one transform`);\n\t\t\t}\n\t\t});\n\t}\n}\n","import { DefinitionBuilder } from \"$models/builders/definitionBuilder\";\nimport { Inputs } from \"$models/ui-models/definitionModel\";\nimport { runDefinition } from \"../definition\";\n\nexport const getData = async (\n datasetId: string,\n options?: { limit?: number },\n) => {\n try {\n if (!datasetId) {\n throw new Error(\"Dataset ID is required\");\n }\n\n // Build the definition model with the dataset import\n const definitionModel = DefinitionBuilder.builder()\n .addDatasetImport(datasetId)\n .build();\n\n const response = await runDefinition({\n definition: definitionModel,\n inputs: definitionModel.inputs as Inputs,\n variable: datasetId,\n limit: options?.limit || 1000,\n });\n\n if (!response) {\n throw new Error(\"No data returned from API\");\n }\n console.log(\"Data returned from API\", response);\n return { data: response };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching data for the dataset\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { runSampleDefinition } from \"../definition\";\n\nexport const getSampleData = async ({\n datasetId,\n dataFilter,\n duplicateColGroups,\n datasetType,\n}: {\n datasetId: string;\n dataFilter: \"valid_data\" | \"invalid_data\" | \"all_data\";\n duplicateColGroups?: string[];\n datasetType?: string;\n}) => {\n try {\n if (!datasetId) {\n throw new Error(\"Dataset ID is required\");\n }\n\n const response = await runSampleDefinition({\n datasetId,\n dataFilter,\n duplicateColGroups,\n datasetType,\n });\n\n if (!response?.data) {\n throw new Error(\"No data returned from API\");\n }\n\n return { data: response.data };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching sample data\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getAllDatasets = async () => {\n try {\n const response = await apiClient.post(\"/datasets/get-datasets\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch datasets\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching datasets\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getPublishedWorkbookById = async ({\n type,\n id,\n}: {\n type: string;\n id: string;\n}) => {\n try {\n const response = await apiClient.post(\n \"/workbook/get-published-workbook-by-id\",\n {\n type,\n id,\n },\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch workbook details\", status: 500 };\n }\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workbook details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","export enum WorkbookTypeEnum {\n WORKBOOK = \"WORKBOOK\",\n TRANSFORMATION = \"TRANSFORMATION\",\n STATEMENT = \"STATEMENT\",\n DASHBOARD = \"DASHBOARD\",\n PORTAL = \"PORTAL\",\n PROCESS = \"PROCESS\",\n COLLECTION = \"COLLECTION\",\n COST_ALLOCATION_GROUP = \"ALLOCATION_GROUP\",\n ALLOCATION_BLUEPRINT = \"ALLOCATION_BLUEPRINT\",\n FIN_CLOSE = \"FIN_CLOSE\",\n PAGE_TEMPLATE = \"PAGE_TEMPLATE\",\n}\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getTableById = async (tableId: string) => {\n try {\n const response = await apiClient.get(`/input-table/get-table/${tableId}`);\n\n if (!response.data) {\n throw { message: \"Failed to fetch table details\", status: 500 };\n }\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching table details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import _ from \"lodash\";\nimport { LimitOptions, SortOptions } from \"$models/ui-models/workbookModel\";\nimport {\n generateDefinitionModel,\n getGroupByDefinition,\n getMetricSeries,\n sortConfigFromValue,\n} from \"../../utils/inputTable\";\nimport { getPublishedWorkbookById } from \"../workbook/getPublishedWorkbookById\";\nimport { WorkbookTypeEnum } from \"../../types/workbook\";\nimport { getTableById } from \"./getTableById\";\nimport { hydrateWorksheet } from \"../../utils/metric/hydrateWorksheet\";\nimport { apiClient } from \"../client\";\n\nexport const getData = async ({\n inputTableId: inputTableWorkbookId,\n inputTableViewId,\n pageParams = {},\n limitParams,\n sortParams,\n offsetParam,\n}: {\n inputTableId: string;\n inputTableViewId: string;\n pageParams?: any;\n limitParams?: LimitOptions;\n sortParams?: SortOptions;\n offsetParam?: number;\n}) => {\n try {\n if (!inputTableWorkbookId || !inputTableViewId) {\n return [];\n }\n const inputTableWorkbook = await getPublishedWorkbookById({\n id: inputTableWorkbookId,\n type: WorkbookTypeEnum.COLLECTION,\n });\n const inputTableId = _.get(\n inputTableWorkbook,\n \"customFields.metadata.inputTableId\",\n );\n\n const inputTable = await getTableById(inputTableId);\n if (!inputTable) {\n throw new Error(\"Input table not found\");\n }\n\n const inputTableView = inputTableWorkbook?.sheets?.find(\n (sheet) => sheet.id === inputTableViewId,\n );\n\n if (!inputTableView) {\n throw new Error(\"Input table view not found\");\n }\n\n const hydratedView = await hydrateWorksheet(inputTableView);\n\n if (!hydratedView) {\n throw new Error(\"Failed to hydrate input table view\");\n }\n\n const filters = _.get(hydratedView, \"customModel.filters\");\n const sort = _.get(hydratedView, \"customModel.sort\");\n const limit = _.get(hydratedView, \"customModel.limit\", {}) as LimitOptions;\n const metadata = _.get(hydratedView, \"customModel.metadata\");\n let { targetName, definition } = {\n targetName: \"\",\n definition: {},\n };\n if (hydratedView.type === \"PIVOT\") {\n const gridColumnState = {\n valueCols: _.get(metadata, \"valueCols\", []),\n rowGroupCols: _.get(metadata, \"rowGroupCols\", []),\n filterModel: _.get(metadata, \"filterModel\", {}),\n pivotCols: _.get(metadata, \"pivotCols\", []),\n };\n const metricSeries = getMetricSeries({\n pivotCols: _.get(metadata, \"pivotCols\", []),\n rowGroupCols: _.get(metadata, \"rowGroupCols\", []),\n valueCols: _.get(metadata, \"valueCols\", []),\n });\n\n const columnSettings = _.get(\n hydratedView,\n \"customModel.metadata.columnSettings\",\n );\n const groupByDefinition = getGroupByDefinition({\n tableId: inputTable.id,\n tableName: inputTable.name,\n groupKeys: [],\n rowGroupCols: gridColumnState.rowGroupCols,\n columnSettings,\n filterRules: filters,\n sortValue: sort,\n metricSeries,\n });\n targetName = groupByDefinition.targetName;\n definition = groupByDefinition.definition;\n } else {\n const definitionModel = generateDefinitionModel({\n tableId: inputTable.id as string,\n tableName: inputTable.name,\n filters: filters,\n sort: sortParams?.sortByOrder\n ? sortConfigFromValue(sortParams)\n : sortConfigFromValue(sort),\n });\n targetName = definitionModel.targetName;\n definition = definitionModel.definition;\n }\n\n let stringifiedDefinition = JSON.stringify(definition);\n try {\n const matches = stringifiedDefinition?.match(/{{\\s*([\\w.]+)\\s*}}/g);\n if (matches) {\n matches.forEach((match) => {\n const key = match.replace(/{{\\s*|\\s*}}/g, \"\");\n const value = _.get(pageParams, key, \"\");\n if (value) {\n stringifiedDefinition =\n stringifiedDefinition?.replace(match, value) || \"\";\n }\n });\n }\n } catch (error) {\n console.warn(\"Error evaluating input\", error);\n }\n\n const inputTableResponse = await apiClient.post(\n \"/input-table/get-table-data\",\n {\n targetName,\n definition: JSON.parse(stringifiedDefinition),\n },\n {\n params: {\n limit: limitParams?.limit || limit.limit || 1000,\n offset: offsetParam || 0,\n },\n },\n );\n const data = _.get(inputTableResponse, \"data.result\");\n\n return { data };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching table details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { InputTable, Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getInputTables = async () => {\n try {\n const response = await apiClient.get(\"/input-table/get-input-tables\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch tables\", status: 500 };\n }\n return response.data as InputTable[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching tables\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\nexport interface GetRowsOptions {\n limit?: number;\n offset?: number;\n order?: string;\n order_by?: string;\n [key: string]: any; // Allow any filter field\n}\n\nexport interface GetRowsResponse {\n data: any[];\n count: number;\n total_count: number;\n}\n\n/**\n * Get rows from an input table with optional filtering and pagination\n * Supports Supabase-style filtering via query parameters\n *\n * @param tableId - The ID of the input table\n * @param options - Query options including filters, pagination, and sorting\n * @returns Promise<GetRowsResponse> The rows data with count information\n * @throws Error if the request fails\n *\n * @example\n * // Get all rows\n * await getRows('table-123');\n *\n * @example\n * // Filter by equality\n * await getRows('table-123', { status: 'active' });\n *\n * @example\n * // Filter with operators\n * await getRows('table-123', { price: 'gte.100', status: 'in.(active,pending)' });\n *\n * @example\n * // Pagination\n * await getRows('table-123', { limit: 10, offset: 0 });\n */\nexport const getRows = async (\n tableId: string,\n options?: GetRowsOptions,\n): Promise<GetRowsResponse> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n const params: Record<string, any> = {};\n\n if (options) {\n Object.keys(options).forEach((key) => {\n if (options[key] !== undefined && options[key] !== null) {\n params[key] = options[key];\n }\n });\n }\n\n const response = await apiClient.get(`/input-table/${tableId}/rows`, {\n params,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch rows\", status: 500 };\n }\n\n return response.data as GetRowsResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching rows\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\n/**\n * Insert a new row into an input table\n *\n * @param tableId - The ID of the input table\n * @param rowData - The row data object (column names as keys)\n * @returns Promise<any> The inserted row data\n * @throws Error if the request fails\n *\n * @example\n * await insertRow('table-123', {\n * name: 'Item 1',\n * status: 'active',\n * price: 100\n * });\n */\nexport const insertRow = async (\n tableId: string,\n rowData: Record<string, any>,\n): Promise<any> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n if (!rowData || typeof rowData !== \"object\" || Array.isArray(rowData)) {\n throw { message: \"Row data must be an object\", status: 400 };\n }\n\n const response = await apiClient.post(\n `/input-table/${tableId}/rows`,\n rowData,\n );\n\n if (!response.data) {\n throw { message: \"Failed to insert row\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while inserting row\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\nexport interface UpdateRowOptions {\n copa_id?: string;\n _copa_id?: string;\n [key: string]: any; // Allow any field to update\n}\n\n/**\n * Update a row in an input table\n * Row ID can be provided via copa_id/_copa_id in the updateData or as a separate parameter\n *\n * @param tableId - The ID of the input table\n * @param updateData - The fields to update (may include copa_id or _copa_id)\n * @param rowId - Optional: Row ID to update (alternative to including in updateData)\n * @returns Promise<any> The updated row data\n * @throws Error if the request fails\n *\n * @example\n * // Using rowId parameter\n * await updateRow('table-123', { status: 'completed' }, 'row-123');\n *\n * @example\n * // Using copa_id in updateData\n * await updateRow('table-123', { _copa_id: 'row-123', status: 'completed' });\n */\nexport const updateRow = async (\n tableId: string,\n updateData: UpdateRowOptions,\n rowId?: string,\n): Promise<any> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n if (\n !updateData ||\n typeof updateData !== \"object\" ||\n Array.isArray(updateData)\n ) {\n throw { message: \"Update data must be an object\", status: 400 };\n }\n\n // Build request body and query params\n const body = { ...updateData };\n const params: Record<string, string> = {};\n\n // If rowId is provided as parameter, use it in query params\n if (rowId) {\n params._copa_id = rowId;\n // Remove ID fields from body if they exist\n delete body.copa_id;\n delete body._copa_id;\n }\n\n // Ensure at least one field to update\n const fieldsToUpdate = Object.keys(body).filter(\n (key) => key !== \"copa_id\" && key !== \"_copa_id\",\n );\n if (fieldsToUpdate.length === 0 && !rowId) {\n throw {\n message: \"At least one field to update must be provided\",\n status: 400,\n };\n }\n\n const response = await apiClient.patch(\n `/input-table/${tableId}/rows`,\n body,\n { params },\n );\n\n if (!response.data) {\n throw { message: \"Failed to update row\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while updating row\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { apiClient } from \"../client\";\n\n/**\n * Delete one or more rows from an input table\n * Row ID can be provided as a string (single ID) or array (multiple IDs)\n *\n * @param tableId - The ID of the input table\n * @param rowId - Row ID(s) to delete (string for single, array for multiple)\n * @param idField - Optional: Field name to use ('copa_id' or '_copa_id'), defaults to '_copa_id'\n * @returns Promise<any> The delete response\n * @throws Error if the request fails\n *\n * @example\n * // Delete single row\n * await deleteRow('table-123', 'row-123');\n *\n * @example\n * // Delete multiple rows\n * await deleteRow('table-123', ['row-123', 'row-456']);\n *\n * @example\n * // Using copa_id field\n * await deleteRow('table-123', 'row-123', 'copa_id');\n */\nexport const deleteRow = async (\n tableId: string,\n rowId: string | string[],\n idField: \"copa_id\" | \"_copa_id\" = \"_copa_id\",\n): Promise<any> => {\n try {\n if (!tableId) {\n throw { message: \"Table ID is required\", status: 400 };\n }\n\n if (!rowId) {\n throw { message: \"Row ID is required\", status: 400 };\n }\n\n // Build query params or body based on whether it's single or multiple IDs\n const isMultiple = Array.isArray(rowId);\n const params: Record<string, string> = {};\n let body: Record<string, string | string[]> | undefined;\n\n if (isMultiple && rowId.length === 0) {\n throw { message: \"At least one row ID must be provided\", status: 400 };\n }\n\n // Use query params for single ID, body for multiple IDs (or single if preferred)\n if (isMultiple) {\n body = { [idField]: rowId };\n } else {\n params[idField] = rowId;\n }\n\n const config: any = {\n url: `/input-table/${tableId}/rows`,\n method: \"delete\",\n };\n\n if (Object.keys(params).length > 0) {\n config.params = params;\n }\n\n if (body) {\n config.data = body;\n }\n\n const response = await apiClient.request(config);\n\n if (!response.data) {\n throw { message: \"Failed to delete row(s)\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while deleting row(s)\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Worksheet } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport const getWorkbooksByType = async (type: Worksheet[\"type\"]) => {\n try {\n const response = await apiClient.post(\"/workbook/get-workbooks-by-type\", {\n type,\n });\n\n if (!response.data) {\n throw { message: \"Failed to fetch workbooks\", status: 500 };\n }\n return response.data as Worksheet[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workbooks by type\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface GetWorkbookDetailsRequest {\n workbookId: string;\n}\n\n/**\n * Gets workbook details by workbook ID\n * @param params - The workbook request parameters\n * @param params.workbookId - Required: The ID of the workbook\n * @returns Promise<Workbook> The workbook details\n * @throws Error if the request fails\n */\nexport async function getWorkbookDetails({\n workbookId,\n}: GetWorkbookDetailsRequest): Promise<Workbook> {\n try {\n if (!workbookId) {\n throw { message: \"Workbook ID is required\", status: 400 };\n }\n console.log(\"workbookId\", workbookId);\n\n const response = await apiClient.get(\n `/workbook/get-workbook-details?workbookId=${encodeURIComponent(workbookId)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch workbook details\", status: 500 };\n }\n\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching workbook details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { Workbook, WorksheetInputs } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface SaveWorkbookRequest {\n workbook: Workbook;\n sheetInputs?: WorksheetInputs[];\n}\n\n/**\n * Saves or updates a workbook\n * @param params - The workbook save parameters\n * @param params.workbook - Required: The workbook object to save\n * @param params.sheetInputs - Optional: Array of worksheet inputs\n * @returns Promise<Workbook> The saved workbook\n * @throws Error if the request fails\n */\nexport async function saveWorkbook({\n workbook,\n sheetInputs = [],\n}: SaveWorkbookRequest): Promise<Workbook> {\n try {\n if (!workbook || !workbook.id) {\n throw { message: \"Workbook with ID is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/workbook/save-workbook\", {\n workbook,\n sheetInputs,\n });\n\n if (!response.data) {\n throw { message: \"Failed to save workbook\", status: 500 };\n }\n\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while saving workbook\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { Workbook } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface PublishWorkbookRequest {\n workbookId: string;\n comment?: string;\n}\n\n/**\n * Publishes a workbook\n * @param params - The workbook publish parameters\n * @param params.workbookId - Required: The ID of the workbook to publish\n * @param params.comment - Optional: Comment for approval workflow\n * @returns Promise<Workbook> The published workbook\n * @throws Error if the request fails\n */\nexport async function publishWorkbook({\n workbookId,\n comment,\n}: PublishWorkbookRequest): Promise<Workbook> {\n try {\n if (!workbookId) {\n throw { message: \"Workbook ID is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/workbook/publish-workbook\", {\n workbookId,\n comment,\n });\n\n if (!response.data) {\n throw { message: \"Failed to publish workbook\", status: 500 };\n }\n\n return response.data as Workbook;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while publishing workbook\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets statement view workflows for a specific sheet.\n *\n * @param sheetId - The ID of the statement sheet\n * @returns Array of statement view workflows for the sheet\n */\nexport const getViewsBySheetId = async (\n sheetId: string,\n): Promise<StatementViewWorkflow[]> => {\n if (!sheetId) {\n throw { message: \"Sheet ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(\n `/statement/get-views-by-sheet-id/${sheetId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch statement views\", status: 500 };\n }\n\n return response.data as StatementViewWorkflow[];\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching statement views\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { StatementViewWorkflowResult } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets runs for a specific view.\n *\n * @param viewId - The ID of the statement view\n * @returns Array of runs/results for the view\n */\nexport const getRunsByViewId = async (\n viewId: string,\n): Promise<StatementViewWorkflowResult[]> => {\n if (!viewId) {\n throw { message: \"View ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(\n `/statement/get-runs-by-view-id/${viewId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch view runs\", status: 500 };\n }\n\n return response.data as StatementViewWorkflowResult[];\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching view runs\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import _ from \"lodash\";\nimport { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\nimport { getPublishedWorkbookById } from \"../workbook/getPublishedWorkbookById\";\nimport { getViewsBySheetId } from \"./getViewsBySheetId\";\nimport { getRunsByViewId } from \"./getRunsByViewId\";\nimport { downloadFile } from \"@/utils/file/downloadFile\";\n\nexport type StatementDataResult = {\n data: Array<any>;\n error: {\n lineErrors: Array<any>;\n comparisonErrors: {};\n };\n};\n\n/**\n * Gets the latest run data for a statement.\n * If viewId is not provided, uses the default view of the statement.\n *\n * @param statementId - The ID of the statement workbook\n * @param viewId - Optional view ID. If not provided, uses the default view\n * @returns Latest run data for the statement view\n */\nexport const getData = async ({\n statementId,\n viewId,\n runId,\n}: {\n statementId: string;\n viewId?: string;\n runId?: string;\n}): Promise<StatementDataResult> => {\n try {\n if (!statementId) {\n throw { message: \"Statement ID is required\", status: 400 };\n }\n\n // First, fetch the statement workbook to get the statement sheet ID\n const statement = await getPublishedWorkbookById({\n type: \"STATEMENT\",\n id: statementId,\n });\n if (!statement || !statement.sheets) {\n throw { message: \"Statement not found or has no sheets\", status: 404 };\n }\n const statementSheet = statement.sheets.find(\n (sheet) => sheet.type === \"STATEMENT_SHEET\",\n );\n if (!statementSheet || !statementSheet.id) {\n throw {\n message: \"Statement sheet not found in the workbook\",\n status: 404,\n };\n }\n\n const statementViews = await getViewsBySheetId(statementSheet.id);\n\n if (_.isEmpty(statementViews)) {\n throw { message: \"No views found for this statement\", status: 404 };\n }\n\n let targetView: StatementViewWorkflow | undefined;\n\n if (viewId) {\n targetView = statementViews.find((v) => v.id === viewId);\n if (!targetView) {\n throw { message: `View with ID ${viewId} not found`, status: 404 };\n }\n } else {\n const defaultView = _.find(statementViews, (v) =>\n Boolean(v.customFields?.isDefault),\n );\n if (defaultView) {\n targetView = defaultView;\n } else {\n targetView = statementViews[0];\n }\n }\n\n if (!targetView) {\n throw { message: \"No valid view found for this statement\", status: 404 };\n }\n\n const results = await getRunsByViewId(targetView.id);\n\n if (_.isEmpty(results)) {\n throw { message: \"No runs found for this view\", status: 404 };\n }\n\n const latestResult = _.orderBy(\n results,\n [(r) => r.lastModifiedDate || r.createdDate],\n [\"desc\"],\n )[0];\n\n let runToFetchResult = latestResult;\n if (runId) {\n runToFetchResult = _.find(results, (r) => r.id === runId);\n if (!runToFetchResult) {\n throw { message: `Run with ID ${runId} not found.`, status: 404 };\n }\n }\n\n if (runToFetchResult.status === \"FAILED\") {\n throw { message: \"Latest run has failed\", status: 500 };\n }\n if (\n runToFetchResult.status === \"SCHEDULED\" ||\n runToFetchResult.status === \"RUNNING\"\n ) {\n throw { message: \"Run in progress\", status: 202 };\n }\n\n if (!runToFetchResult.artifactLocation) {\n throw { message: \"Latest result does not have a data path\", status: 500 };\n }\n\n const dataResponse = await downloadFile(\n runToFetchResult.artifactLocation,\n \"application/json\",\n );\n\n return dataResponse as StatementDataResult;\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching statement data\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets statement view workflow by id.\n *\n * @param viewId - The ID of the statement view\n * @returns Statement view workflow for the sheet\n */\nexport const getViewById = async (\n viewId: string,\n): Promise<StatementViewWorkflow> => {\n if (!viewId) {\n throw { message: \"View ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(`/statement/get-view-by-id/${viewId}`);\n\n if (!response.data) {\n throw { message: \"Failed to fetch statement view\", status: 500 };\n }\n\n return response.data as StatementViewWorkflow;\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching statement view\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import _ from \"lodash\";\nimport { StatementViewWorkflow } from \"$models/gen/Api\";\nimport { generatePushID } from \"@/utils/common/generatePushId\";\nimport { getUniqueDuplicateName } from \"@/utils/common/generateRandomName\";\nimport {\n convertFiltersToRunInputs,\n separateColumnFilters,\n} from \"@/utils/statement/filterUtils\";\nimport { convertStatementFiltersToFullTypes } from \"@/utils/statement/filterConverters\";\nimport {\n StatementCommonFiltersType,\n StatementPromotedFiltersType,\n} from \"../../types/statement\";\nimport { apiClient } from \"../client\";\nimport { getPublishedWorkbookById } from \"../workbook/getPublishedWorkbookById\";\nimport { getViewsBySheetId } from \"./getViewsBySheetId\";\nimport { getRunsByViewId } from \"./getRunsByViewId\";\nimport { hydrateStatement } from \"@/utils/statement/hydrateStatement\";\nimport { WorkbookModel } from \"$models/ui-models/workbookModel\";\n\n/**\n * Creates a new run for a statement.\n * If viewId is not provided, uses the default view of the statement.\n *\n * @param statementId - The ID of the statement workbook\n * @param viewId - Optional view ID. If not provided, uses the default view\n * @param runId - Optional run ID. If not provided, generates one.\n * @param options - Optional options\n * @param options.name - Custom name for the run. If not provided, generates a unique name.\n * @param options.columnFilters - Array of promoted or common filters to apply to the run\n * @returns Object containing the runId\n */\n\nexport type CreateNewRunResult = {\n runId: string;\n};\n\nexport const createNewRun = async ({\n statementId,\n viewId,\n runId,\n options,\n}: {\n statementId: string;\n viewId?: string;\n runId?: string;\n options?: {\n name?: string;\n columnFilters?: (\n | StatementPromotedFiltersType\n | StatementCommonFiltersType\n )[];\n };\n}): Promise<CreateNewRunResult> => {\n if (!statementId) {\n throw { message: \"Statement ID is required\", status: 400 };\n }\n\n try {\n // First, fetch the statement workbook to get the statement sheet ID\n const workbook = await getPublishedWorkbookById({\n type: \"STATEMENT\",\n id: statementId,\n });\n const statement = (await hydrateStatement(workbook)) as WorkbookModel;\n if (!statement || !statement.sheets) {\n throw { message: \"Statement not found or has no sheets\", status: 404 };\n }\n const statementSheet = statement.sheets.find(\n (sheet) => sheet.type === \"STATEMENT_SHEET\",\n );\n if (!statementSheet || !statementSheet.id) {\n throw {\n message: \"Statement sheet not found in the statement\",\n status: 404,\n };\n }\n\n const statementViews = await getViewsBySheetId(statementSheet.id);\n\n if (_.isEmpty(statementViews)) {\n throw { message: \"No views found for this statement\", status: 404 };\n }\n\n let targetView: StatementViewWorkflow | undefined;\n\n if (viewId) {\n targetView = statementViews.find((v) => v.id === viewId);\n if (!targetView) {\n throw { message: `View with ID ${viewId} not found`, status: 404 };\n }\n } else {\n const defaultView = _.find(statementViews, (v) =>\n Boolean(v.customFields?.isDefault),\n );\n if (defaultView) {\n targetView = defaultView;\n } else {\n targetView = statementViews[0];\n }\n }\n\n if (!targetView) {\n throw { message: \"No valid view found for this statement\", status: 404 };\n }\n\n const results = await getRunsByViewId(targetView.id);\n\n const sortedResults = _.orderBy(\n results,\n [(r) => r.lastModifiedDate || r.createdDate],\n [\"desc\"],\n );\n\n const runName = options?.name\n ? options.name\n : getUniqueDuplicateName(\"Run\", _.map(sortedResults, \"name\"), \"\", \" \");\n\n let runInputs = undefined;\n let customFields: Record<string, any> = {};\n\n if (options?.columnFilters && options.columnFilters.length > 0) {\n const { promotedFilters, commonFilters } = separateColumnFilters(\n options.columnFilters,\n );\n\n runInputs = convertFiltersToRunInputs(\n promotedFilters,\n commonFilters,\n statementSheet,\n );\n\n const fullFilters = await convertStatementFiltersToFullTypes(\n promotedFilters,\n commonFilters,\n statement,\n );\n\n customFields = {\n promotedFilters: fullFilters.promotedFilters,\n commonFilters: fullFilters.commonFilters,\n };\n }\n\n const finalRunId = runId ?? generatePushID();\n await apiClient.post(`/statement/run/create/${targetView.id}`, {\n runId: finalRunId,\n name: runName,\n runInputs,\n customFields,\n });\n return { runId: finalRunId };\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while creating a new run\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { StatementViewWorkflowResult } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\n/**\n * Gets Workflow run result by id.\n *\n * @param runId - The ID of the statement run\n * @returns Workflow run result for the run\n */\nexport const getRunResultById = async (\n runId: string,\n): Promise<StatementViewWorkflowResult> => {\n if (!runId) {\n throw { message: \"Run ID is required\", status: 400 };\n }\n try {\n const response = await apiClient.get(\n `/statement/run/get-result-by-run-id/${runId}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch run result\", status: 404 };\n }\n\n return response.data as StatementViewWorkflowResult;\n } catch (error: any) {\n const message =\n error.message ||\n error.response?.data?.message ||\n \"An unexpected error occurred while fetching run result\";\n const status = error.status || error.response?.status || 500;\n throw { message, status };\n }\n};\n","import { ProcessTask } from \"$models/gen/Api\";\nimport { apiClient } from \"../client\";\n\nexport interface GetTaskDetailsRequest {\n taskId: string;\n}\n\n/**\n * Gets task details by task ID\n * @param params - The task request parameters\n * @param params.taskId - Required: The ID of the task\n * @returns Promise<ProcessTask> The task details\n * @throws Error if the request fails\n */\nexport async function getTaskDetails({\n taskId,\n}: GetTaskDetailsRequest): Promise<ProcessTask> {\n try {\n if (!taskId) {\n throw { message: \"Task ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/task/get-task-details?taskId=${encodeURIComponent(taskId)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch task details\", status: 500 };\n }\n\n return response.data as ProcessTask;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching task details\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface RunReconRequest {\n workflowId: string;\n runId?: string;\n fullRefresh?: boolean;\n}\n\nexport interface RunReconResponse {\n success: boolean;\n data?: any;\n message?: string;\n}\n\n/**\n * Runs a reconciliation workflow\n * @param params - The recon run parameters\n * @param params.workflowId - Required: The ID of the reconciliation workflow\n * @param params.runId - Optional: Custom run ID\n * @param params.fullRefresh - Optional: Whether to do a full refresh\n * @returns Promise<RunReconResponse> The run response\n * @throws Error if the request fails\n */\nexport async function runRecon({\n workflowId,\n runId,\n fullRefresh = false,\n}: RunReconRequest): Promise<RunReconResponse> {\n try {\n if (!workflowId) {\n throw { message: \"Workflow ID is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/recon/run-recon\", {\n workflowId,\n runId,\n fullRefresh,\n });\n\n if (!response.data) {\n throw { message: \"Failed to run recon workflow\", status: 500 };\n }\n\n return {\n success: true,\n data: response.data,\n };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while running recon workflow\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface ReconWorkflow {\n [key: string]: any;\n}\n\n/**\n * Gets all recon workflows\n * @returns Promise<ReconWorkflow[]> The list of recon workflows\n * @throws Error if the request fails\n */\nexport async function getAllReconWorkflows(): Promise<ReconWorkflow[]> {\n try {\n const response = await apiClient.get(\"/recon/get-all\");\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch recon workflows\", status: 500 };\n }\n\n return response.data.data as ReconWorkflow[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching recon workflows\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFormSchemaRequest {\n formInstanceId: string;\n formRevision: string | number;\n}\n\n/**\n * Gets form schema by form instance ID and revision\n * @param params - The form schema request parameters\n * @param params.formInstanceId - Required: The ID of the form instance\n * @param params.formRevision - Required: The revision of the form\n * @returns Promise<any> The form schema\n * @throws Error if the request fails\n */\nexport async function getFormSchema({\n formInstanceId,\n formRevision,\n}: GetFormSchemaRequest): Promise<any> {\n try {\n if (!formInstanceId || !formRevision) {\n throw {\n message: \"Form instance ID and revision are required\",\n status: 400,\n };\n }\n\n const response = await apiClient.get(\n `/form/get-form-schema?formInstanceId=${encodeURIComponent(formInstanceId)}&formRevision=${encodeURIComponent(formRevision)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch form schema\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching form schema\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFormDataRequest {\n formId: string;\n}\n\n/**\n * Gets form data by form ID\n * @param params - The form data request parameters\n * @param params.formId - Required: The ID of the form\n * @returns Promise<any> The form data\n * @throws Error if the request fails\n */\nexport async function getFormData({\n formId,\n}: GetFormDataRequest): Promise<any> {\n try {\n if (!formId) {\n throw { message: \"Form ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/form/get-form-data?formId=${encodeURIComponent(formId)}`,\n );\n\n if (!response.data) {\n throw { message: \"Failed to fetch form data\", status: 500 };\n }\n\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching form data\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetFormByIdRequest {\n formId: string;\n}\n\nexport interface Form {\n [key: string]: any;\n}\n\n/**\n * Gets form by ID\n * @param params - The form request parameters\n * @param params.formId - Required: The ID of the form\n * @returns Promise<Form> The form data\n * @throws Error if the request fails\n */\nexport async function getFormById({\n formId,\n}: GetFormByIdRequest): Promise<Form> {\n try {\n if (!formId) {\n throw { message: \"Form ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/form/get-form-by-id?formId=${encodeURIComponent(formId)}`,\n );\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch form\", status: 500 };\n }\n\n return response.data.data as Form;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching form\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { Form } from \"./getFormById\";\n\nexport interface CreateOrUpdateFormRequest {\n data: Form;\n processSheetId: string;\n formInstanceId: string;\n isDummy: boolean;\n status: \"DRAFTED\" | \"PUBLISHED\";\n}\n\n/**\n * Creates or updates a form\n * @param params - The form creation/update parameters\n * @param params.data - Required: The form data\n * @returns Promise<Form> The created or updated form\n * @throws Error if the request fails\n */\nexport async function createOrUpdateForm({\n data,\n processSheetId,\n formInstanceId,\n isDummy,\n status,\n}: CreateOrUpdateFormRequest): Promise<Form> {\n try {\n if (!data) {\n throw { message: \"Form data is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/form/create-or-update-form\", {\n data,\n processSheetId,\n formInstanceId,\n isDummy,\n status,\n });\n\n if (!response.data) {\n throw { message: \"Failed to create or update form\", status: 500 };\n }\n\n return response.data.data as Form;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating or updating form\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetAuditLogsRequest {\n entityType?: string;\n entitySubType?: string;\n entityId?: string;\n source?: \"UI\" | \"BACKEND\";\n userId?: string;\n limit: number;\n startDate?: string;\n endDate?: string;\n pageToken?: string;\n}\n\nexport interface AuditLogResponse {\n logs: any[];\n count: number;\n nextPageToken?: string;\n}\n\n/**\n * Gets audit logs based on filter criteria\n * @param params - The audit logs request parameters\n * @param params.entityType - Optional: Entity type to filter by\n * @param params.entitySubType - Optional: Entity sub type to filter by\n * @param params.entityId - Optional: Entity ID to filter by\n * @param params.source - Optional: Source filter (UI or BACKEND)\n * @param params.userId - Optional: User ID to filter by\n * @param params.limit - Required: Maximum number of logs to return\n * @param params.startDate - Optional: Start date filter (YYYY-MM-DD)\n * @param params.endDate - Optional: End date filter (YYYY-MM-DD)\n * @param params.pageToken - Optional: Token for pagination\n * @returns Promise<AuditLogResponse> The audit logs response\n * @throws Error if the request fails\n */\nexport async function getAuditLogs(\n params: GetAuditLogsRequest,\n): Promise<AuditLogResponse> {\n try {\n if (!params.limit) {\n throw { message: \"Limit is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/audit/get-audit-logs\", params);\n\n if (!response.data) {\n throw { message: \"Failed to fetch audit logs\", status: 500 };\n }\n\n return response.data.data as AuditLogResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching audit logs\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface AuditRecord {\n source: \"UI\" | \"BACKEND\";\n userId: string;\n entityId: string;\n entityType: string;\n entitySubType?: string;\n action: \"CREATE\" | \"UPDATE\" | \"DELETE\";\n oldValue?: string;\n newValue?: string;\n additionalDetails?: any;\n eventType: \"WORKFLOW\" | \"API\" | \"PROCESS\" | \"DELEGATED_TASK\";\n eventId: string;\n eventTimestamp: string;\n}\n\nexport interface CreateAuditLogRequest {\n auditRecords: AuditRecord[];\n}\n\n/**\n * Creates audit log records\n * @param params - The create audit log request parameters\n * @param params.auditRecords - Required: Array of audit records to create\n * @returns Promise<void> Success response\n * @throws Error if the request fails\n */\nexport async function createAuditLog(\n params: CreateAuditLogRequest,\n): Promise<{ success: boolean }> {\n try {\n if (\n !params.auditRecords ||\n !Array.isArray(params.auditRecords) ||\n params.auditRecords.length === 0\n ) {\n throw { message: \"Audit records array is required\", status: 400 };\n }\n\n const response = await apiClient.post(\n \"/audit/create-audit-log\",\n params.auditRecords,\n );\n\n return { success: response.data.success || true };\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating audit log\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TemplatedPipelineWorkflow {\n [key: string]: any;\n}\n\nexport interface GetAllTemplatedPipelinesResponse {\n data: TemplatedPipelineWorkflow[];\n}\n\n/**\n * Gets all templated pipeline workflows\n * @returns Promise<GetAllTemplatedPipelinesResponse> The list of templated pipeline workflows\n * @throws Error if the request fails\n */\nexport async function getAllTemplatedPipelines(): Promise<\n TemplatedPipelineWorkflow[]\n> {\n try {\n const response = await apiClient.get(\"/templated-pipeline/get-all\");\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch templated pipelines\", status: 500 };\n }\n\n return response.data.data as TemplatedPipelineWorkflow[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching templated pipelines\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface CompleteTaskRequest {\n [key: string]: any;\n}\n\nexport interface ProcessTask {\n [key: string]: any;\n}\n\nexport interface MarkTaskDoneRequest {\n taskId: string;\n data: CompleteTaskRequest;\n}\n\nexport interface MarkTaskDoneResponse {\n data: ProcessTask;\n}\n\n/**\n * Marks a task as done\n * @param params - The task completion parameters\n * @param params.taskId - Required: The ID of the task\n * @param params.data - Required: The task completion data\n * @returns Promise<ProcessTask> The updated task\n * @throws Error if the request fails\n */\nexport async function markTaskDone({\n taskId,\n data,\n}: MarkTaskDoneRequest): Promise<ProcessTask> {\n try {\n if (!taskId) {\n throw { message: \"Task ID is required\", status: 400 };\n }\n\n if (!data) {\n throw { message: \"Task completion data is required\", status: 400 };\n }\n\n const response = await apiClient.post(\"/process/mark-task-done\", {\n taskId,\n data,\n });\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to mark task as done\", status: 500 };\n }\n\n return response.data.data as ProcessTask;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while marking task as done\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { ProcessTask } from \"./markTaskDone\";\n\nexport interface ReassignTaskRequest {\n taskId: string;\n newAssignee: string;\n assigneeType: \"USER\" | \"TEAM\";\n}\n\nexport interface ReassignTaskResponse {\n data: ProcessTask;\n}\n\n/**\n * Reassigns a task to a new assignee\n * @param params - The task reassignment parameters\n * @param params.taskId - Required: The ID of the task\n * @param params.newAssignee - Required: The new assignee ID\n * @param params.assigneeType - Required: The type of assignee (USER or TEAM)\n * @returns Promise<ProcessTask> The updated task\n * @throws Error if the request fails\n */\nexport async function reassignTask({\n taskId,\n newAssignee,\n assigneeType,\n}: ReassignTaskRequest): Promise<ProcessTask> {\n try {\n if (!taskId) {\n throw { message: \"Task ID is required\", status: 400 };\n }\n\n if (!newAssignee) {\n throw { message: \"New assignee is required\", status: 400 };\n }\n\n if (!assigneeType || ![\"USER\", \"TEAM\"].includes(assigneeType)) {\n throw { message: \"Assignee type must be USER or TEAM\", status: 400 };\n }\n\n const response = await apiClient.post(\"/process/reassign-task\", {\n taskId,\n newAssignee,\n assigneeType,\n });\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to reassign task\", status: 500 };\n }\n\n return response.data.data as ProcessTask;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while reassigning task\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface GetAllInboxItemsRequest {\n page?: number;\n perPage?: number;\n}\n\nexport interface InboxItem {\n [key: string]: any;\n}\n\n/**\n * Gets all inbox items\n * @param params - The inbox items request parameters\n * @param params.page - Optional: Page number (default: 0)\n * @param params.perPage - Optional: Items per page (default: 50)\n * @returns Promise<InboxItem[]> Array of inbox items\n * @throws Error if the request fails\n */\nexport async function getAllInboxItems({\n page,\n perPage,\n}: GetAllInboxItemsRequest = {}): Promise<InboxItem[]> {\n try {\n const queryParams = new URLSearchParams();\n if (page !== undefined) {\n queryParams.append(\"page\", page.toString());\n }\n if (perPage !== undefined) {\n queryParams.append(\"perPage\", perPage.toString());\n }\n\n const queryString = queryParams.toString();\n const url = `/inbox-items/get-all-inbox-items${queryString ? `?${queryString}` : \"\"}`;\n\n const response = await apiClient.get(url);\n\n if (!response.data || !response.data.data) {\n throw { message: \"Failed to fetch inbox items\", status: 500 };\n }\n\n return response.data.data as InboxItem[];\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching inbox items\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface MarkItemAsReadRequest {\n inboxItemIds: string[];\n}\n\n/**\n * Marks inbox items as read\n * @param params - The mark as read request parameters\n * @param params.inboxItemIds - Required: Array of inbox item IDs to mark as read\n * @returns Promise<void>\n * @throws Error if the request fails\n */\nexport async function markItemAsRead({\n inboxItemIds,\n}: MarkItemAsReadRequest): Promise<void> {\n try {\n if (\n !inboxItemIds ||\n !Array.isArray(inboxItemIds) ||\n inboxItemIds.length === 0\n ) {\n throw { message: \"inboxItemIds array is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/inbox-items/mark-item-as-read\", {\n inboxItemIds,\n });\n\n if (response.status >= 400) {\n throw {\n message: \"Failed to mark items as read\",\n status: response.status,\n };\n }\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while marking items as read\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface MarkItemAsUnreadRequest {\n inboxItemIds: string[];\n}\n\n/**\n * Marks inbox items as unread\n * @param params - The mark as unread request parameters\n * @param params.inboxItemIds - Required: Array of inbox item IDs to mark as unread\n * @returns Promise<void>\n * @throws Error if the request fails\n */\nexport async function markItemAsUnread({\n inboxItemIds,\n}: MarkItemAsUnreadRequest): Promise<void> {\n try {\n if (\n !inboxItemIds ||\n !Array.isArray(inboxItemIds) ||\n inboxItemIds.length === 0\n ) {\n throw { message: \"inboxItemIds array is required\", status: 400 };\n }\n\n const response = await apiClient.put(\"/inbox-items/mark-item-as-unread\", {\n inboxItemIds,\n });\n\n if (response.status >= 400) {\n throw {\n message: \"Failed to mark items as unread\",\n status: response.status,\n };\n }\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while marking items as unread\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport type GetPermissionsParams = {\n objectId: string;\n objectType: string;\n user: string;\n userType: \"User\" | \"Team\";\n relations: string[];\n};\n\nexport type PermissionsResponse = Record<string, boolean>;\n\n/**\n * Fetches permissions for a user on a given object (e.g. workbook/page).\n * Used by external apps to gate UI or logic by Owner/Editor/Viewer/ReadOnly.\n * All parameters are required; no defaults.\n *\n * @param params.objectId - Workbook/page ID\n * @param params.objectType - e.g. 'Portal', 'Workbook', 'ExternalAppPage'\n * @param params.user - User ID\n * @param params.userType - 'User' | 'Team'\n * @param params.relations - e.g. ['Owner', 'Editor', 'Viewer', 'ReadOnly']\n * @returns Record of role to boolean (e.g. { Owner: false, Editor: true, Viewer: true })\n */\nexport async function getPermissions(\n params: GetPermissionsParams\n): Promise<PermissionsResponse> {\n try {\n const { objectId, objectType, user, userType, relations } = params;\n\n const response = await apiClient.post<PermissionsResponse>(\"/permissions/check\", {\n objectId,\n objectType,\n user,\n userType,\n relations,\n });\n\n if (!response.data || typeof response.data !== \"object\") {\n throw { message: \"Failed to fetch permissions\", status: 500 };\n }\n return response.data as PermissionsResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching permissions\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface ClientIpResponse {\n ip: string;\n}\n\n/**\n * Fetches the client's IP address from the server\n * @returns Promise<ClientIpResponse> The client's IP address\n * @throws Error if the request fails or user is not authenticated\n */\nexport async function getClientIp(): Promise<ClientIpResponse> {\n try {\n const response = await apiClient.get(\"/client-ip\");\n\n if (!response.data) {\n throw { message: \"Failed to fetch client IP\", status: 500 };\n }\n return response.data as ClientIpResponse;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching client IP\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface EmailConversation {\n id?: string;\n toEmail: string[];\n senderId: string;\n subject: string;\n bodyText?: string;\n bodyHtml?: string;\n status:\n | \"AWAITING_RESPONSE\"\n | \"RESPONSE_RECEIVED\"\n | \"IN_PROGRESS\"\n | \"RESOLVED\"\n | \"ESCALATED\"\n | \"CLOSED\";\n threadId?: string;\n lastMessageAt?: string;\n accountId: string;\n cc?: string[];\n bcc?: string[];\n messagePreview?: string;\n tag?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n workspaceId?: string;\n}\n\nexport interface GetAllConversationsParams {\n page?: number;\n pageSize?: number;\n orderByCreatedDate?: boolean;\n tag?: string;\n}\n\nexport interface PageChunkEmailConversation {\n content: EmailConversation[];\n pageNumber: number;\n pageSize: number;\n}\n\n/**\n * Gets all email conversations with pagination and optional tag filter\n * @param params - Optional query parameters\n * @param params.page - Page number (default: 1)\n * @param params.pageSize - Page size (default: 10)\n * @param params.orderByCreatedDate - Order by created date (default: false)\n * @param params.tag - Optional tag to filter by\n * @returns Promise<PageChunkEmailConversation> Paginated conversations\n * @throws Error if the request fails\n */\nexport async function getAllConversations(\n params?: GetAllConversationsParams,\n): Promise<PageChunkEmailConversation> {\n try {\n const response = await apiClient.get(\"/email/conversations\", {\n params: {\n page: params?.page ?? 1,\n pageSize: params?.pageSize ?? 10,\n orderByCreatedDate: params?.orderByCreatedDate ?? false,\n ...(params?.tag && { tag: params.tag }),\n },\n });\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching conversations\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { EmailConversation } from \"./getAllConversations\";\n\nexport interface GetConversationRequest {\n conversationId: string;\n}\n\n/**\n * Gets a single email conversation by ID\n * @param params - The request parameters\n * @param params.conversationId - Required: The conversation ID\n * @returns Promise<EmailConversation> The conversation details\n * @throws Error if the request fails\n */\nexport async function getConversation(\n params: GetConversationRequest,\n): Promise<EmailConversation> {\n try {\n if (!params.conversationId) {\n throw { message: \"Conversation ID is required\", status: 400 };\n }\n\n const response = await apiClient.get(\n `/email/conversations/${params.conversationId}`,\n );\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while fetching conversation\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { EmailConversation } from \"./getAllConversations\";\nimport type { EmailAttachment } from \"./types\";\n\nexport interface CreateConversationRequest {\n toEmail: string[];\n subject: string;\n bodyText?: string;\n bodyHtml?: string;\n accountId: string;\n senderId: string;\n cc?: string[];\n bcc?: string[];\n messagePreview?: string;\n tag?: string;\n attachments?: EmailAttachment[];\n}\n\n/**\n * Creates a new email conversation\n * @param params - The conversation data\n * @param params.toEmail - Required: Array of recipient email addresses\n * @param params.subject - Required: Email subject\n * @param params.bodyText - Optional: Plain text body\n * @param params.bodyHtml - Optional: HTML body\n * @param params.accountId - Required: Account ID\n * @param params.senderId - Required: Sender email address\n * @param params.cc - Optional: Array of CC email addresses\n * @param params.bcc - Optional: Array of BCC email addresses\n * @param params.messagePreview - Optional: Preview text for the email\n * @param params.tag - Optional: Tag for categorizing the email\n * @param params.attachments - Optional: Array of attachments\n * @returns Promise<EmailConversation> The created conversation\n * @throws Error if the request fails\n */\nexport async function createConversation(\n params: CreateConversationRequest,\n): Promise<EmailConversation> {\n try {\n const trimmed = {\n ...params,\n toEmail: params.toEmail?.map((e) => e.trim()).filter(Boolean),\n subject: params.subject?.trim(),\n bodyText: params.bodyText?.trim(),\n accountId: params.accountId?.trim(),\n senderId: params.senderId?.trim(),\n cc: params.cc?.map((e) => e.trim()).filter(Boolean),\n bcc: params.bcc?.map((e) => e.trim()).filter(Boolean),\n messagePreview: params.messagePreview?.trim(),\n tag: params.tag?.trim(),\n };\n\n if (\n !trimmed.toEmail?.length ||\n !trimmed.subject ||\n !trimmed.accountId ||\n !trimmed.senderId\n ) {\n throw {\n message:\n \"toEmail (non-empty array), subject, accountId, and senderId are required\",\n status: 400,\n };\n }\n\n const response = await apiClient.post(\"/email/conversations\", trimmed);\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while creating conversation\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { EmailAttachment } from \"./types\";\n\nexport interface ReplyToConversationRequest {\n conversationId: string;\n accountId: string;\n senderId: string;\n bodyText?: string;\n bodyHtml?: string;\n toEmail?: string[];\n cc?: string[];\n bcc?: string[];\n attachments?: EmailAttachment[];\n}\n\n/**\n * Replies to an existing email conversation\n * @param params - The reply parameters\n * @param params.conversationId - Required: The conversation ID to reply to\n * @param params.accountId - Required: Account ID\n * @param params.senderId - Required: Sender email address\n * @param params.bodyText - Optional: Plain text body of the reply\n * @param params.bodyHtml - Optional: HTML body of the reply\n * @param params.toEmail - Optional: Array of recipient email addresses\n * @param params.cc - Optional: Array of CC email addresses\n * @param params.bcc - Optional: Array of BCC email addresses\n * @param params.attachments - Optional: Array of attachments\n * @returns Promise<any> The reply response\n * @throws Error if the request fails\n */\nexport async function replyToConversation(\n params: ReplyToConversationRequest,\n): Promise<any> {\n try {\n const trimmedId = params.conversationId?.trim();\n const trimmedAccountId = params.accountId?.trim();\n const trimmedSenderId = params.senderId?.trim();\n const trimmedBodyText = params.bodyText?.trim();\n const trimmedBodyHtml = params.bodyHtml?.trim();\n\n if (\n !trimmedId ||\n !trimmedAccountId ||\n !trimmedSenderId\n ) {\n throw {\n message:\n \"conversationId, accountId, and senderId are required\",\n status: 400,\n };\n }\n\n if (!trimmedBodyText && !trimmedBodyHtml && !params.attachments?.length) {\n throw {\n message:\n \"At least one of bodyText, bodyHtml, or attachments is required\",\n status: 400,\n };\n }\n\n const { conversationId, ...body } = {\n ...params,\n conversationId: trimmedId,\n accountId: trimmedAccountId,\n senderId: trimmedSenderId,\n bodyText: trimmedBodyText,\n bodyHtml: trimmedBodyHtml,\n toEmail: params.toEmail?.map((e) => e.trim()).filter(Boolean),\n cc: params.cc?.map((e) => e.trim()).filter(Boolean),\n bcc: params.bcc?.map((e) => e.trim()).filter(Boolean),\n };\n const response = await apiClient.post(\n `/email/conversations/${conversationId}/reply`,\n body,\n );\n return response.data?.data ?? response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"An unexpected error occurred while replying to conversation\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface FilterOnSenderId {\n senderId: string;\n direction?: \"INBOUND\" | \"OUTBOUND\";\n page?: number;\n pageSize?: number;\n orderByCreatedDate?: boolean;\n}\n\nexport interface EmailMessage {\n conversationId: string;\n direction: \"INBOUND\" | \"OUTBOUND\";\n fromAddress: string;\n toAddresses: string[];\n ccAddresses?: string[];\n bccAddresses?: string[];\n subject?: string;\n emailengineId?: string;\n emailMessageId?: string;\n threadId?: string;\n inReplyTo?: string;\n senderId: string;\n emlStorageKey?: string;\n sentAt?: string;\n receivedAt?: string;\n createdBy?: string;\n createdDate?: string;\n lastModifiedBy?: string;\n lastModifiedDate?: string;\n id?: string;\n workspaceId?: string;\n entityVersion?: number;\n}\n\nexport interface PageChunkEmailMessage {\n content: EmailMessage[];\n pageNumber: number;\n pageSize: number;\n totalPages: number;\n totalElements: number;\n isLast: boolean;\n}\n\n/**\n * Filters email messages by sender ID\n * @param params - The filter parameters\n * @param params.senderId - Required: The sender email address\n * @param params.direction - 'INBOUND' or 'OUTBOUND' (default: OUTBOUND)\n * @param params.page - Page number (default: 1)\n * @param params.pageSize - Page size (default: 10)\n * @param params.orderByCreatedDate - Order by created date (default: false)\n * @returns Promise<PageChunkEmailMessage> Paginated list of matching messages\n * @throws Error if the request fails\n */\nexport async function getMessageBySenderId(\n params: FilterOnSenderId,\n): Promise<PageChunkEmailMessage> {\n if (!params.senderId?.trim()) {\n throw { message: \"senderId is required\", status: 400 };\n }\n\n try {\n const response = await apiClient.get(\n \"/email/messages/filter/senderId\",\n {\n params: {\n senderId: params.senderId.trim(),\n direction: params.direction ?? \"OUTBOUND\",\n page: params.page ?? 1,\n pageSize: params.pageSize ?? 10,\n orderByCreatedDate: params.orderByCreatedDate ?? false,\n },\n },\n );\n return response.data?.data ?? response.data;\n } catch (error: unknown) {\n const axiosError = error as { response?: { data?: { message?: string }; status?: number }; message?: string };\n const message =\n axiosError.response?.data?.message ||\n axiosError.message ||\n \"An unexpected error occurred while filtering messages\";\n const status = axiosError.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnAuthUrlResponse {\n url: string;\n}\n\nexport async function getAuthUrl(): Promise<TcnAuthUrlResponse> {\n try {\n const response = await apiClient.get(\"/tcn/auth-url\");\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get auth URL\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnTokenData {\n access_token: string;\n refresh_token: string;\n}\n\nexport async function exchangeCode(code: string): Promise<TcnTokenData> {\n try {\n const response = await apiClient.post(\"/tcn/exchange-code\", { code });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to exchange code\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\nimport type { TcnTokenData } from \"./exchangeCode\";\n\nexport async function refreshToken(refreshTokenValue: string): Promise<TcnTokenData> {\n try {\n const response = await apiClient.post(\"/tcn/token\", { refresh_token: refreshTokenValue });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to refresh token\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnAgentData {\n agentSid: string;\n clientSid: string;\n huntGroupSid: string;\n}\n\nexport async function getCurrentAgent(token: string): Promise<TcnAgentData> {\n try {\n const response = await apiClient.post(\"/tcn/get-current-agent\", { token });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get current agent\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnSkillsData {\n skills: Record<string, unknown>;\n}\n\nexport async function getAgentSkills(\n token: string,\n huntGroupSid: string,\n): Promise<TcnSkillsData> {\n try {\n const response = await apiClient.post(\"/tcn/get-agent-skills\", {\n token,\n huntGroupSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get agent skills\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnSessionData {\n voiceSessionSid: number;\n voiceRegistration: {\n username: string;\n password: string;\n dialUrl: string;\n };\n}\n\nexport async function createSession(\n token: string,\n huntGroupSid: string,\n skills: Record<string, unknown>,\n): Promise<TcnSessionData> {\n try {\n const response = await apiClient.post(\"/tcn/create-session\", {\n token,\n huntGroupSid,\n skills,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to create session\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnKeepAliveData {\n status: string;\n statusDesc: string;\n}\n\nexport async function keepAlive(\n token: string,\n sessionSid: string,\n): Promise<TcnKeepAliveData> {\n try {\n const response = await apiClient.post(\"/tcn/keep-alive\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to keep alive\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnStatusData {\n currentSessionId: string;\n}\n\nexport async function agentGetStatus(token: string): Promise<TcnStatusData> {\n try {\n const response = await apiClient.post(\"/tcn/agent-get-status\", { token });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get agent status\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnDialSettings {\n manualDial: {\n defaultCallerId?: string;\n callRecording?: boolean;\n defaultCountrySid?: number;\n scrubCellPhones?: boolean;\n };\n}\n\nexport async function getHuntGroupAgentSettings(\n token: string,\n huntGroupSid: string,\n): Promise<TcnDialSettings> {\n try {\n const response = await apiClient.post(\"/tcn/get-hunt-group-agent-settings\", {\n token,\n huntGroupSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to get hunt group settings\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function dialManualPrepare(\n token: string,\n sessionSid: string,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/dial-manual-prepare\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to prepare manual dial\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnProcessDialData {\n scrubbedCall: {\n callSid: string;\n taskGroupSid: string;\n callerId: string;\n doRecord: string;\n callerIdCountryCode: string;\n countryCode: string;\n callerIdCountrySid: number;\n countrySid: number;\n };\n}\n\nexport async function processManualDial(\n token: string,\n call: Record<string, unknown>,\n): Promise<TcnProcessDialData> {\n try {\n const response = await apiClient.post(\"/tcn/process-manual-dial\", {\n token,\n call,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to process manual dial\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function manualDialStart(\n token: string,\n agentSessionSid: string,\n huntGroupSid: string,\n simpleCallData: Record<string, unknown>,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/manual-dial-start\", {\n token,\n agentSessionSid,\n huntGroupSid,\n simpleCallData,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to start manual dial\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function agentDisconnect(\n token: string,\n sessionSid: string,\n reason = 'endcall',\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/agent-disconnect\", {\n token,\n sessionSid,\n reason,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to disconnect agent\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function agentPause(\n token: string,\n sessionSid: string,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/agent-pause\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to pause agent\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport async function agentSetReady(\n token: string,\n sessionSid: string,\n): Promise<any> {\n try {\n const response = await apiClient.post(\"/tcn/agent-set-ready\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to set agent ready\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnConnectedParty {\n callType: string;\n callId: string;\n}\n\nexport async function agentGetConnectedParty(\n token: string,\n sessionSid: string,\n): Promise<TcnConnectedParty> {\n try {\n const response = await apiClient.post(\"/tcn/agent-get-connected-party\", {\n token,\n sessionSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message ||\n error.message ||\n \"Failed to get connected party\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { apiClient } from \"../client\";\n\nexport interface TcnCallData {\n callerIdName?: string;\n journeyRetrievedData?: {\n FName?: string;\n PhoneNumber?: string;\n };\n}\n\nexport async function getCallData(\n token: string,\n callSid: number,\n): Promise<TcnCallData> {\n try {\n const response = await apiClient.post(\"/tcn/get-call-data\", {\n token,\n callSid,\n });\n return response.data;\n } catch (error: any) {\n const message =\n error.response?.data?.message || error.message || \"Failed to get call data\";\n const status = error.response?.status || 500;\n throw { message, status };\n }\n}\n","import { type IWebsocketProvider } from '../config';\n\n// ─── Column Types ─────────────────────────────────────────────────────────────\n\nexport enum InputTableColumnType {\n\tUUID = 'uuid',\n\tTEXT = 'text',\n\tINTEGER = 'integer',\n\tBIGINT = 'bigint',\n\tNUMERIC = 'numeric',\n\tBOOLEAN = 'boolean',\n\tTIMESTAMPTZ = 'timestamptz',\n\tDATE = 'date',\n\tTIME = 'time',\n\tJSONB = 'jsonb'\n}\n\nexport type InputTableColumn = {\n\tname: string;\n\ttype: InputTableColumnType;\n\tnullable?: boolean;\n\tprimary_key?: boolean;\n\tauto_increment?: boolean;\n\tdefault?: string | number | boolean | null;\n\tsearchable?: boolean;\n};\n\nexport type InputTableDefinition = {\n\tname: string;\n\tcolumns: InputTableColumn[];\n};\n\n// ─── Public API Types ─────────────────────────────────────────────────────────\n\n/** A plain row object returned by the SDK. */\nexport type Row = Record<string, unknown>;\n\n/** Where clause operators */\nexport type WhereOp = '==' | '!=' | '<' | '<=' | '>' | '>=' | 'in' | 'not-in';\n\nexport interface QueryBuilder<TRow extends Row = Row> {\n\twhere(field: keyof TRow & string, op: WhereOp, value: unknown): QueryBuilder<TRow>;\n\torderBy(field: keyof TRow & string, direction?: 'asc' | 'desc'): QueryBuilder<TRow>;\n\tlimit(count: number): QueryBuilder<TRow>;\n\tskip(count: number): QueryBuilder<TRow>;\n\tsubscribe(callback: (rows: TRow[]) => void): () => void;\n\tget(): Promise<TRow[]>;\n}\n\nexport interface DocRef<TRow extends Row = Row> {\n\tget(): Promise<TRow | null>;\n\tupdate(data: Partial<TRow>): Promise<void>;\n\tdelete(): Promise<void>;\n\tonSnapshot(callback: (doc: TRow | null) => void): () => void;\n}\n\nexport interface CollectionRef<TRow extends Row = Row> {\n\twhere(field: keyof TRow & string, op: WhereOp, value: unknown): QueryBuilder<TRow>;\n\torderBy(field: keyof TRow & string, direction?: 'asc' | 'desc'): QueryBuilder<TRow>;\n\tlimit(count: number): QueryBuilder<TRow>;\n\tskip(count: number): QueryBuilder<TRow>;\n\tdoc(id: string): DocRef<TRow>;\n\tadd(data: Partial<TRow>): Promise<string>;\n\tsubscribe(callback: (rows: TRow[]) => void): () => void;\n\tget(): Promise<TRow[]>;\n\tcount(callback: (count: number) => void): () => void;\n}\n\nexport interface InputTableDB {\n\tcollection<TRow extends Row = Row>(name: string): CollectionRef<TRow>;\n\tsetWebsocketProvider(provider: IWebsocketProvider): void;\n\t/** Force-clear the schema cache. Call after schema changes. */\n\tclearSchemaCache(): void;\n\tdestroy(): Promise<void>;\n}\n\n// ─── BFF Response Types ───────────────────────────────────────────────────────\n\nexport type TableListItem = {\n\tname: string;\n\tid: string;\n\tappliedSchema: InputTableDefinition | null;\n};\n","import { type RxCollection } from 'rxdb';\nimport { type Row, type WhereOp, type QueryBuilder } from './types';\n\ntype WhereClause = { field: string; op: WhereOp; value: unknown };\ntype OrderClause = { field: string; direction: 'asc' | 'desc' };\n\nconst OP_MAP: Record<WhereOp, string> = {\n\t'==': '$eq',\n\t'!=': '$ne',\n\t'<': '$lt',\n\t'<=': '$lte',\n\t'>': '$gt',\n\t'>=': '$gte',\n\tin: '$in',\n\t'not-in': '$nin'\n};\n\nexport class QueryBuilderImpl<TRow extends Row = Row> implements QueryBuilder<TRow> {\n\tprivate wheres: WhereClause[] = [];\n\tprivate orders: OrderClause[] = [];\n\tprivate limitCount: number | undefined;\n\tprivate skipCount: number | undefined;\n\n\tconstructor(\n\t\tprivate collection: RxCollection,\n\t\tinitialWhere?: WhereClause,\n\t\tinitialOrder?: OrderClause,\n\t\tinitialLimit?: number,\n\t\tinitialSkip?: number\n\t) {\n\t\tif (initialWhere) this.wheres.push(initialWhere);\n\t\tif (initialOrder) this.orders.push(initialOrder);\n\t\tif (initialLimit !== undefined) this.limitCount = initialLimit;\n\t\tif (initialSkip !== undefined) this.skipCount = initialSkip;\n\t}\n\n\twhere(field: keyof TRow & string, op: WhereOp, value: unknown): QueryBuilder<TRow> {\n\t\tthis.wheres.push({ field, op, value });\n\t\treturn this;\n\t}\n\n\torderBy(field: keyof TRow & string, direction: 'asc' | 'desc' = 'asc'): QueryBuilder<TRow> {\n\t\tthis.orders.push({ field, direction });\n\t\treturn this;\n\t}\n\n\tlimit(count: number): QueryBuilder<TRow> {\n\t\tthis.limitCount = count;\n\t\treturn this;\n\t}\n\n\tskip(count: number): QueryBuilder<TRow> {\n\t\tthis.skipCount = count;\n\t\treturn this;\n\t}\n\n\tsubscribe(callback: (rows: TRow[]) => void): () => void {\n\t\tconst query = this.buildQuery();\n\t\tconst rxSub = query.$.subscribe((docs: any[]) => {\n\t\t\tcallback(docs.map((d: any) => d.toJSON()) as TRow[]);\n\t\t});\n\t\treturn () => rxSub.unsubscribe();\n\t}\n\n\tasync get(): Promise<TRow[]> {\n\t\tconst query = this.buildQuery();\n\t\tconst docs = await query.exec();\n\t\treturn docs.map((d: any) => d.toJSON()) as TRow[];\n\t}\n\n\tprivate buildQuery() {\n\t\tconst selector: Record<string, any> = {};\n\n\t\tfor (const { field, op, value } of this.wheres) {\n\t\t\tconst rxOp = OP_MAP[op];\n\t\t\tif (!selector[field]) selector[field] = {};\n\t\t\tselector[field][rxOp] = value;\n\t\t}\n\n\t\tconst queryParams: any = { selector };\n\n\t\tif (this.orders.length > 0) {\n\t\t\tqueryParams.sort = this.orders.map(({ field, direction }) => ({ [field]: direction }));\n\t\t}\n\n\t\tif (this.limitCount !== undefined) {\n\t\t\tqueryParams.limit = this.limitCount;\n\t\t}\n\n\t\tif (this.skipCount !== undefined) {\n\t\t\tqueryParams.skip = this.skipCount;\n\t\t}\n\n\t\treturn this.collection.find(queryParams);\n\t}\n}\n","export const CHECKPOINT_FIELD = 'updated_at';\n\n/** Maximum open RxDB collections (open-source limit is 16, leave headroom) */\nexport const MAX_COLLECTIONS = 14;\n\n/** Replication retry interval (ms) */\nexport const REPLICATION_RETRY_TIME = 5000;\n\n/** Replication pull batch size */\nexport const PULL_BATCH_SIZE = 100;\n\n/** Replication push batch size */\nexport const PUSH_BATCH_SIZE = 10;\n","/**\n * Shared utilities for the input-table-db SDK.\n */\n\nconst IDENTIFIER_PATTERN = /^[a-zA-Z0-9_-]+$/;\nconst ISO_TIMESTAMP_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n\nexport class InputTableError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic status: number\n\t) {\n\t\tsuper(message);\n\t\tthis.name = 'InputTableError';\n\t}\n}\n\n/**\n * Validate that a string is a safe identifier (alphanumeric, underscores, hyphens).\n * Prevents path traversal and injection via solutionId, tableName, docId.\n */\nexport function validateIdentifier(value: string, label: string): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed || !IDENTIFIER_PATTERN.test(trimmed)) {\n\t\tthrow new InputTableError(`Invalid ${label}: \"${value}\"`, 400);\n\t}\n\treturn trimmed;\n}\n\n/**\n * Validate a checkpoint timestamp value matches ISO format.\n */\nexport function validateCheckpointTimestamp(value: string): string {\n\tif (!ISO_TIMESTAMP_PATTERN.test(value)) {\n\t\tthrow new InputTableError(`Invalid checkpoint timestamp: \"${value}\"`, 400);\n\t}\n\treturn value;\n}\n\n/**\n * Validate a checkpoint ID value is a safe identifier.\n */\nexport function validateCheckpointId(value: string): string {\n\treturn validateIdentifier(value, 'checkpoint id');\n}\n\n/**\n * Strip null values from a row and coerce PK to string.\n * Used by both replication and realtime binding.\n */\nexport function stripNullsAndCoercePk(\n\trow: Record<string, unknown>,\n\tprimaryKeyField: string\n): Record<string, unknown> {\n\tconst doc: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(row)) {\n\t\tif (value === null) continue;\n\t\tdoc[key] = value;\n\t}\n\tdoc[primaryKeyField] = String(row[primaryKeyField]);\n\treturn doc;\n}\n\n/**\n * Deferred subscription helper — used by all Lazy* wrappers to avoid boilerplate.\n * Resolves the async subscription source, connects the callback, and returns\n * an unsubscribe function that cleans up even if the resolve hasn't completed yet.\n */\nexport function deferSubscription<T>(\n\tresolve: () => Promise<(callback: (value: T) => void) => () => void>,\n\tcallback: (value: T) => void,\n\tfallback: T\n): () => void {\n\tlet innerUnsub: (() => void) | null = null;\n\tlet cancelled = false;\n\n\tresolve()\n\t\t.then((subscribeFn) => {\n\t\t\tif (!cancelled) {\n\t\t\t\tinnerUnsub = subscribeFn(callback);\n\t\t\t}\n\t\t})\n\t\t.catch((err) => {\n\t\t\tconsole.error('[copaInputTableDb]', err);\n\t\t\tif (!cancelled) callback(fallback);\n\t\t});\n\n\treturn () => {\n\t\tcancelled = true;\n\t\tinnerUnsub?.();\n\t};\n}\n","import { type RxCollection } from 'rxdb';\nimport { apiClient } from '../api/client';\nimport { type IWebsocketProvider } from '../config';\nimport { type Row, type DocRef } from './types';\nimport { CHECKPOINT_FIELD } from './rxdb/constants';\nimport { InputTableError } from './utils';\n\nexport class DocRefImpl<TRow extends Row = Row> implements DocRef<TRow> {\n\tconstructor(\n\t\tprivate collection: RxCollection,\n\t\tprivate id: string,\n\t\tprivate solutionId: string,\n\t\tprivate tableName: string,\n\t\tprivate primaryKeyField: string,\n\t\tprivate websocketProvider: () => IWebsocketProvider | undefined\n\t) {}\n\n\tasync get(): Promise<TRow | null> {\n\t\tconst doc = await this.collection.findOne(this.id).exec();\n\t\treturn doc ? (doc.toJSON() as TRow) : null;\n\t}\n\n\tasync update(data: Partial<TRow>): Promise<void> {\n\t\tconst doc = await this.collection.findOne(this.id).exec();\n\t\tif (!doc) {\n\t\t\tthrow new InputTableError(`Document \"${this.id}\" not found`, 404);\n\t\t}\n\t\tconst patch = { ...data } as Record<string, unknown>;\n\t\tdelete patch[this.primaryKeyField];\n\t\tdelete patch[CHECKPOINT_FIELD];\n\t\tawait doc.patch(patch);\n\t}\n\n\tasync delete(): Promise<void> {\n\t\tawait apiClient.request({\n\t\t\turl: `input-table-v2/${this.solutionId}/rows/${this.tableName}`,\n\t\t\tmethod: 'DELETE',\n\t\t\tparams: { [this.primaryKeyField]: `eq.${this.id}` }\n\t\t});\n\n\t\t// Always remove locally after API success for instant UI feedback.\n\t\t// RT reSync would eventually handle it, but with a delay.\n\t\tconst doc = await this.collection.findOne(this.id).exec();\n\t\tif (doc) await doc.remove();\n\t}\n\n\tonSnapshot(callback: (doc: TRow | null) => void): () => void {\n\t\tconst rxSub = this.collection.findOne(this.id).$.subscribe((doc: any) => {\n\t\t\tcallback(doc ? (doc.toJSON() as TRow) : null);\n\t\t});\n\t\treturn () => rxSub.unsubscribe();\n\t}\n}\n","import { type RxCollection } from 'rxdb';\nimport { type RxReplicationState } from 'rxdb/plugins/replication';\nimport { type IWebsocketProvider } from '../config';\nimport { type Row, type WhereOp, type CollectionRef, type QueryBuilder, type InputTableColumn, InputTableColumnType } from './types';\nimport { QueryBuilderImpl } from './queryBuilder';\nimport { DocRefImpl } from './docRef';\nimport { generatePushID } from '../utils/common/generatePushId';\nimport { CHECKPOINT_FIELD } from './rxdb/constants';\nimport { apiClient } from '../api/client';\n\nexport class CollectionRefImpl<TRow extends Row = Row> implements CollectionRef<TRow> {\n\tconstructor(\n\t\tprivate collection: RxCollection,\n\t\tprivate solutionId: string,\n\t\tprivate tableName: string,\n\t\tprivate primaryKeyField: string,\n\t\tprivate pkColumn: InputTableColumn | undefined,\n\t\tprivate replicationState: RxReplicationState<any, any>,\n\t\tprivate getWebsocketProvider: () => IWebsocketProvider | undefined\n\t) {}\n\n\twhere(field: keyof TRow & string, op: WhereOp, value: unknown): QueryBuilder<TRow> {\n\t\treturn new QueryBuilderImpl<TRow>(this.collection, { field, op, value });\n\t}\n\n\torderBy(field: keyof TRow & string, direction: 'asc' | 'desc' = 'asc'): QueryBuilder<TRow> {\n\t\treturn new QueryBuilderImpl<TRow>(this.collection, undefined, { field, direction });\n\t}\n\n\tlimit(count: number): QueryBuilder<TRow> {\n\t\treturn new QueryBuilderImpl<TRow>(this.collection, undefined, undefined, count);\n\t}\n\n\tskip(count: number): QueryBuilder<TRow> {\n\t\treturn new QueryBuilderImpl<TRow>(this.collection, undefined, undefined, undefined, count);\n\t}\n\n\tdoc(id: string) {\n\t\treturn new DocRefImpl<TRow>(\n\t\t\tthis.collection,\n\t\t\tid,\n\t\t\tthis.solutionId,\n\t\t\tthis.tableName,\n\t\t\tthis.primaryKeyField,\n\t\t\tthis.getWebsocketProvider\n\t\t);\n\t}\n\n\tasync add(data: Partial<TRow>): Promise<string> {\n\t\tconst pk = this.primaryKeyField;\n\t\tconst insertData = { ...data } as Record<string, unknown>;\n\n\t\t// Auto-increment non-UUID PKs (e.g., INTEGER) — server assigns the PK.\n\t\t// Can't generate a valid client-side value, so insert via API directly\n\t\t// and reSync to pull the server-assigned row back into RxDB.\n\t\tconst needsServerPk =\n\t\t\tthis.pkColumn?.auto_increment &&\n\t\t\tthis.pkColumn.type !== InputTableColumnType.UUID &&\n\t\t\t!insertData[pk];\n\n\t\tif (needsServerPk) {\n\t\t\tdelete insertData[pk];\n\t\t\tdelete insertData[CHECKPOINT_FIELD];\n\t\t\tconst response = await apiClient.post(\n\t\t\t\t`/input-table-v2/${this.solutionId}/rows/${this.tableName}`,\n\t\t\t\tinsertData,\n\t\t\t\t{ headers: { Prefer: 'return=representation' } }\n\t\t\t);\n\t\t\tthis.replicationState.reSync();\n\t\t\tconst serverRow = Array.isArray(response.data) ? response.data[0] : response.data;\n\t\t\treturn String(serverRow?.[pk] ?? '');\n\t\t}\n\n\t\t// UUID auto-increment — generate client-side\n\t\tif (\n\t\t\tthis.pkColumn?.type === InputTableColumnType.UUID &&\n\t\t\tthis.pkColumn.auto_increment &&\n\t\t\t!insertData[pk]\n\t\t) {\n\t\t\tinsertData[pk] = crypto.randomUUID();\n\t\t}\n\n\t\t// Other cases — generate push ID if no PK provided\n\t\tif (!insertData[pk]) {\n\t\t\tinsertData[pk] = generatePushID();\n\t\t}\n\t\tinsertData[pk] = String(insertData[pk]).trim();\n\n\t\t// Remove checkpoint field — server manages it\n\t\tdelete insertData[CHECKPOINT_FIELD];\n\n\t\tawait this.collection.insert(insertData as any);\n\t\treturn String(insertData[pk]);\n\t}\n\n\tsubscribe(callback: (rows: TRow[]) => void): () => void {\n\t\tconst rxSub = this.collection.find().$.subscribe((docs: any[]) => {\n\t\t\tcallback(docs.map((d: any) => d.toJSON()) as TRow[]);\n\t\t});\n\t\treturn () => rxSub.unsubscribe();\n\t}\n\n\tasync get(): Promise<TRow[]> {\n\t\tconst docs = await this.collection.find().exec();\n\t\treturn docs.map((d: any) => d.toJSON()) as TRow[];\n\t}\n\n\tcount(callback: (count: number) => void): () => void {\n\t\tconst rxSub = this.collection.count().$.subscribe((count: number) => {\n\t\t\tcallback(count);\n\t\t});\n\t\treturn () => rxSub.unsubscribe();\n\t}\n}\n","import { createRxDatabase, type RxDatabase } from 'rxdb';\nimport { getRxStorageDexie } from 'rxdb/plugins/storage-dexie';\n\nlet dbPromise: Promise<RxDatabase> | null = null;\n\nexport function getInputTableDatabase(): Promise<RxDatabase> {\n\tif (typeof window === 'undefined') {\n\t\treturn Promise.reject(\n\t\t\tnew Error(\n\t\t\t\t'[copaInputTableDb] RxDB requires a browser environment (IndexedDB). Cannot run on server.'\n\t\t\t)\n\t\t);\n\t}\n\n\tif (!dbPromise) {\n\t\tdbPromise = createDatabase();\n\t}\n\treturn dbPromise;\n}\n\nasync function createDatabase(): Promise<RxDatabase> {\n\tconst db = await createRxDatabase({\n\t\tname: 'bluecopa_input_tables_v2',\n\t\tstorage: getRxStorageDexie(),\n\t\tmultiInstance: true,\n\t\teventReduce: true\n\t});\n\n\treturn db;\n}\n\nexport async function closeInputTableDatabase(): Promise<void> {\n\tif (dbPromise) {\n\t\tconst db = await dbPromise;\n\t\tawait db.close();\n\t\tdbPromise = null;\n\t}\n}\n","import { type RxJsonSchema } from 'rxdb';\nimport { type InputTableDefinition, InputTableColumnType } from '../types';\nimport { CHECKPOINT_FIELD } from './constants';\n\n/**\n * Map Postgres column types to JSON Schema types.\n * BIGINT -> string (JS Number can't safely represent > 2^53).\n * JSONB -> string (stored as serialized JSON to avoid schema shape issues).\n */\nconst PG_TO_JSON_SCHEMA: Record<InputTableColumnType, { type: string }> = {\n\t[InputTableColumnType.UUID]: { type: 'string' },\n\t[InputTableColumnType.TEXT]: { type: 'string' },\n\t[InputTableColumnType.INTEGER]: { type: 'integer' },\n\t[InputTableColumnType.BIGINT]: { type: 'string' },\n\t[InputTableColumnType.NUMERIC]: { type: 'number' },\n\t[InputTableColumnType.BOOLEAN]: { type: 'boolean' },\n\t[InputTableColumnType.TIMESTAMPTZ]: { type: 'string' },\n\t[InputTableColumnType.DATE]: { type: 'string' },\n\t[InputTableColumnType.TIME]: { type: 'string' },\n\t[InputTableColumnType.JSONB]: { type: 'string' }\n};\n\n/**\n * Build an RxDB JSON Schema from an InputTableDefinition.\n * Adds the checkpoint system column automatically.\n */\nexport function buildRxdbSchema(tableDef: InputTableDefinition): RxJsonSchema<any> {\n\tconst pkColumn = tableDef.columns.find((c) => c.primary_key);\n\tconst primaryKey = pkColumn?.name ?? 'id';\n\n\tconst properties: Record<string, any> = {};\n\tconst required: string[] = [primaryKey];\n\n\tfor (const col of tableDef.columns) {\n\t\tconst jsonType = PG_TO_JSON_SCHEMA[col.type] ?? { type: 'string' };\n\t\tproperties[col.name] = { ...jsonType };\n\n\t\t// RxDB requires primaryKey to be string with maxLength\n\t\tif (col.primary_key) {\n\t\t\tproperties[col.name] = { type: 'string', maxLength: 200 };\n\t\t}\n\n\t\t// Nullable columns: omit from required array.\n\t\tif (!col.nullable && !col.primary_key) {\n\t\t\trequired.push(col.name);\n\t\t}\n\t}\n\n\t// System column for checkpoint-based replication\n\tproperties[CHECKPOINT_FIELD] = { type: 'string', maxLength: 50 };\n\n\treturn {\n\t\ttitle: `input_table_${tableDef.name}`,\n\t\tversion: 0,\n\t\tprimaryKey,\n\t\ttype: 'object',\n\t\tproperties,\n\t\trequired,\n\t\tindexes: [CHECKPOINT_FIELD]\n\t};\n}\n\n/**\n * Convert a table name to a valid RxDB collection name.\n * RxDB requires: ^[a-z][a-z0-9]*$ (no underscores, no uppercase)\n */\nexport function toCollectionName(solutionId: string, tableName: string): string {\n\tconst sanitized = tableName.replace(/[^a-z0-9]/g, '');\n\t// Use last 12 chars of solutionId for better uniqueness (UUIDs differ at the end)\n\tconst solPrefix = solutionId.replace(/[^a-z0-9]/g, '').slice(-12);\n\treturn `s${solPrefix}t${sanitized}`;\n}\n","import { replicateRxCollection, type RxReplicationState } from 'rxdb/plugins/replication';\nimport { type RxCollection } from 'rxdb';\nimport { Subject } from 'rxjs';\nimport { apiClient } from '../../api/client';\nimport { stripNullsAndCoercePk, validateCheckpointTimestamp, validateCheckpointId } from '../utils';\nimport {\n\tCHECKPOINT_FIELD,\n\tPULL_BATCH_SIZE,\n\tPUSH_BATCH_SIZE,\n\tREPLICATION_RETRY_TIME\n} from './constants';\n\ntype Checkpoint = { id: string; updatedAt: string } | null;\n\nexport type ReplicationHandle = {\n\tstate: RxReplicationState<any, Checkpoint>;\n\tpullStream$: Subject<any>;\n\tcancel: () => Promise<void>;\n};\n\n/**\n * Set up bidirectional replication between an RxDB collection and PostgREST via BFF.\n */\nexport function createReplication(\n\tcollection: RxCollection,\n\tsolutionId: string,\n\ttableName: string,\n\tprimaryKeyField: string\n): ReplicationHandle {\n\tconst pullStream$ = new Subject<any>();\n\n\tconst state = replicateRxCollection({\n\t\tcollection,\n\t\treplicationIdentifier: `input-table-v2-${solutionId}-${tableName}`,\n\t\tlive: true,\n\t\tretryTime: REPLICATION_RETRY_TIME,\n\t\tautoStart: true,\n\t\twaitForLeadership: false,\n\n\t\tpull: {\n\t\t\tasync handler(checkpoint: Checkpoint, batchSize: number) {\n\t\t\t\tconst params: Record<string, string> = {\n\t\t\t\t\torder: `${CHECKPOINT_FIELD}.asc,${primaryKeyField}.asc`,\n\t\t\t\t\tlimit: String(batchSize),\n\t\t\t\t\tselect: '*'\n\t\t\t\t};\n\n\t\t\t\t// Only apply cursor filter when resuming from a checkpoint\n\t\t\t\tif (checkpoint?.id && checkpoint?.updatedAt) {\n\t\t\t\t\tconst updatedAt = validateCheckpointTimestamp(checkpoint.updatedAt);\n\t\t\t\t\tconst id = validateCheckpointId(checkpoint.id);\n\t\t\t\t\tparams.or = `(${CHECKPOINT_FIELD}.gt.${updatedAt},and(${CHECKPOINT_FIELD}.eq.${updatedAt},${primaryKeyField}.gt.${id}))`;\n\t\t\t\t}\n\n\t\t\t\tconst response = await apiClient.get(`/input-table-v2/${solutionId}/rows/${tableName}`, {\n\t\t\t\t\tparams,\n\t\t\t\t\theaders: { Prefer: 'count=exact' }\n\t\t\t\t});\n\n\t\t\t\tconst rows: Record<string, unknown>[] = response.data ?? [];\n\n\t\t\t\tconst documents = rows.map((row) => stripNullsAndCoercePk(row, primaryKeyField));\n\n\t\t\t\tconst lastDoc = documents[documents.length - 1];\n\t\t\t\tconst newCheckpoint: Checkpoint =\n\t\t\t\t\tdocuments.length === 0\n\t\t\t\t\t\t? checkpoint\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tid: String(lastDoc[primaryKeyField]),\n\t\t\t\t\t\t\t\tupdatedAt: String(lastDoc[CHECKPOINT_FIELD])\n\t\t\t\t\t\t\t};\n\n\t\t\t\treturn { documents, checkpoint: newCheckpoint };\n\t\t\t},\n\t\t\tbatchSize: PULL_BATCH_SIZE,\n\t\t\tstream$: pullStream$.asObservable()\n\t\t},\n\n\t\tpush: {\n\t\t\tasync handler(changeRows) {\n\t\t\t\tconst conflicts: any[] = [];\n\n\t\t\t\tfor (const row of changeRows) {\n\t\t\t\t\tconst doc = row.newDocumentState;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet serverResponse: any;\n\t\t\t\t\t\tif (row.assumedMasterState == null) {\n\t\t\t\t\t\t\t// New insert\n\t\t\t\t\t\t\tconst insertData = { ...doc };\n\t\t\t\t\t\t\tdelete insertData[CHECKPOINT_FIELD];\n\t\t\t\t\t\t\tdelete insertData._deleted;\n\t\t\t\t\t\t\tserverResponse = await apiClient.post(`/input-table-v2/${solutionId}/rows/${tableName}`, insertData, {\n\t\t\t\t\t\t\t\theaders: { Prefer: 'return=representation' }\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Update\n\t\t\t\t\t\t\tconst updateData = { ...doc };\n\t\t\t\t\t\t\tdelete updateData[primaryKeyField];\n\t\t\t\t\t\t\tdelete updateData[CHECKPOINT_FIELD];\n\t\t\t\t\t\t\tdelete updateData._deleted;\n\t\t\t\t\t\t\tserverResponse = await apiClient.patch(`/input-table-v2/${solutionId}/rows/${tableName}`, updateData, {\n\t\t\t\t\t\t\t\tparams: { [primaryKeyField]: `eq.${doc[primaryKeyField]}` },\n\t\t\t\t\t\t\t\theaders: { Prefer: 'return=representation' }\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Write server response back to local RxDB so defaults,\n\t\t\t\t\t\t// timestamps, and server-computed values are immediately available\n\t\t\t\t\t\tconst serverRow = Array.isArray(serverResponse?.data)\n\t\t\t\t\t\t\t? serverResponse.data[0]\n\t\t\t\t\t\t\t: serverResponse?.data;\n\t\t\t\t\t\tif (serverRow) {\n\t\t\t\t\t\t\tconst cleaned = stripNullsAndCoercePk(serverRow, primaryKeyField);\n\t\t\t\t\t\t\tconst localDoc = await collection.findOne(String(cleaned[primaryKeyField])).exec();\n\t\t\t\t\t\t\tif (localDoc) {\n\t\t\t\t\t\t\t\tconst patch = { ...cleaned };\n\t\t\t\t\t\t\t\tdelete patch[primaryKeyField];\n\t\t\t\t\t\t\t\tdelete patch._deleted;\n\t\t\t\t\t\t\t\tawait localDoc.patch(patch);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\tconst status = err?.response?.status;\n\t\t\t\t\t\tconst pgCode = err?.response?.data?.code ?? err?.response?.data?.data?.code;\n\t\t\t\t\t\tconsole.error(`[replication:push] Error (status=${status}, pgCode=${pgCode}):`, doc[primaryKeyField], err?.response?.data);\n\t\t\t\t\t\tconst isInsert = row.assumedMasterState == null;\n\n\t\t\t\t\t\tif (status === 409 || pgCode === '23505') {\n\t\t\t\t\t\t\t// Conflict or unique violation — try to fetch existing server row\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst response = await apiClient.get(\n\t\t\t\t\t\t\t\t\t`/input-table-v2/${solutionId}/rows/${tableName}`,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tparams: { [primaryKeyField]: `eq.${doc[primaryKeyField]}` }\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst serverRows: Record<string, unknown>[] = response.data ?? [];\n\t\t\t\t\t\t\t\tif (serverRows.length > 0) {\n\t\t\t\t\t\t\t\t\tconflicts.push(stripNullsAndCoercePk(serverRows[0], primaryKeyField));\n\t\t\t\t\t\t\t\t} else if (isInsert) {\n\t\t\t\t\t\t\t\t\t// 23505 on a different unique column for a new doc — remove it\n\t\t\t\t\t\t\t\t\tconsole.error(`[replication:push] Unique violation on non-PK column, removing doc:`, doc[primaryKeyField]);\n\t\t\t\t\t\t\t\t\tconst localDoc = await collection.findOne(String(doc[primaryKeyField])).exec();\n\t\t\t\t\t\t\t\t\tif (localDoc) await localDoc.remove();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// For updates with 23505 on non-PK column and no server row by PK,\n\t\t\t\t\t\t\t\t// skip — will retry on next cycle\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t// Can't fetch server state — will retry on next cycle\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (pgCode === '23503' || status === 400 || status === 404) {\n\t\t\t\t\t\t\tif (isInsert) {\n\t\t\t\t\t\t\t\t// Invalid new doc — remove from local RxDB\n\t\t\t\t\t\t\t\tconsole.error(`[replication:push] Removing invalid doc (${pgCode ?? status}):`, doc[primaryKeyField]);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst localDoc = await collection.findOne(String(doc[primaryKeyField])).exec();\n\t\t\t\t\t\t\t\t\tif (localDoc) await localDoc.remove();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// Best effort cleanup\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Bad update — revert to server state\n\t\t\t\t\t\t\t\tconsole.error(`[replication:push] Reverting doc to server state (${pgCode ?? status}):`, doc[primaryKeyField]);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst response = await apiClient.get(\n\t\t\t\t\t\t\t\t\t\t`/input-table-v2/${solutionId}/rows/${tableName}`,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tparams: { [primaryKeyField]: `eq.${doc[primaryKeyField]}` }\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tconst serverRows: Record<string, unknown>[] = response.data ?? [];\n\t\t\t\t\t\t\t\t\tif (serverRows.length > 0) {\n\t\t\t\t\t\t\t\t\t\tconflicts.push(stripNullsAndCoercePk(serverRows[0], primaryKeyField));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// Can't fetch server state — will retry on next cycle\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Server error, network failure, PGRST106, 503, 504 — re-throw so RxDB retries\n\t\t\t\t\t\t\tthrow err;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn conflicts;\n\t\t\t},\n\t\t\tbatchSize: PUSH_BATCH_SIZE\n\t\t}\n\t});\n\n\treturn {\n\t\tstate,\n\t\tpullStream$,\n\t\tcancel: async () => {\n\t\t\tpullStream$.complete();\n\t\t\tawait state.cancel();\n\t\t}\n\t};\n}\n","import { type RxReplicationState } from 'rxdb/plugins/replication';\nimport { type IWebsocketProvider } from '../config';\n\nexport type RealtimeBindingHandle = {\n\tcleanup: () => void;\n};\n\n/**\n * Bind IWebsocketProvider change notifications to RxDB replication.\n *\n * Backend publishes events on channel: public-input-table-v2-{workspaceId}-{solutionId}-{tableName}\n * Events: INSERT, UPDATE, DELETE (one event per operation type)\n * Payload: { event_name: string, event_type: \"INSERT\"|\"UPDATE\"|\"DELETE\", schema: string }\n *\n * Since the payload contains no row data, we trigger reSync() on any change\n * to re-pull from the server.\n */\nexport function createRealtimeBinding(\n\tprovider: IWebsocketProvider,\n\treplicationState: RxReplicationState<any, any>,\n\tworkspaceId: string,\n\tsolutionId: string,\n\ttableName: string\n): RealtimeBindingHandle {\n\tconst channel = `public-input-table-v2-${workspaceId}-${solutionId}-${tableName}`;\n\n\tfunction handleChangeNotification() {\n\t\treplicationState.reSync();\n\t}\n\n\tprovider.bind(channel, 'INSERT', handleChangeNotification);\n\tprovider.bind(channel, 'UPDATE', handleChangeNotification);\n\tprovider.bind(channel, 'DELETE', handleChangeNotification);\n\n\treturn {\n\t\tcleanup: () => {\n\t\t\tprovider.unbind(channel, 'INSERT');\n\t\t\tprovider.unbind(channel, 'UPDATE');\n\t\t\tprovider.unbind(channel, 'DELETE');\n\t\t}\n\t};\n}\n","import { type RxCollection } from 'rxdb';\nimport { type IWebsocketProvider } from '../../config';\nimport { type InputTableDefinition } from '../types';\nimport { getInputTableDatabase } from './database';\nimport { buildRxdbSchema, toCollectionName } from './schemaBuilder';\nimport { createReplication, type ReplicationHandle } from './replication';\nimport { createRealtimeBinding, type RealtimeBindingHandle } from '../realtimeBinding';\nimport { CHECKPOINT_FIELD, MAX_COLLECTIONS } from './constants';\n\nexport type ManagedCollection = {\n\tcollection: RxCollection;\n\treplication: ReplicationHandle;\n\trealtimeBinding: RealtimeBindingHandle | null;\n\ttableName: string;\n\tsolutionId: string;\n\tworkspaceId: string;\n\tprimaryKeyField: string;\n\tlastAccessed: number;\n\t/** Number of active subscriptions — prevents LRU eviction while > 0 */\n\trefCount: number;\n};\n\nconst activeCollections = new Map<string, ManagedCollection>();\nconst pendingCollections = new Map<string, Promise<ManagedCollection>>();\n\n/**\n * Build a cache key that includes workspaceId to prevent cross-tenant collisions.\n */\nfunction collectionKey(workspaceId: string, solutionId: string, tableName: string): string {\n\treturn `${workspaceId}:${toCollectionName(solutionId, tableName)}`;\n}\n\n/**\n * Increment refCount for a managed collection (call when subscribing).\n */\nexport function addRef(managed: ManagedCollection): void {\n\tmanaged.refCount++;\n}\n\n/**\n * Decrement refCount for a managed collection (call when unsubscribing).\n */\nexport function releaseRef(managed: ManagedCollection): void {\n\tif (managed.refCount > 0) managed.refCount--;\n}\n\n/**\n * Get or create an RxDB collection for a table.\n * Deduplicates concurrent creation requests. Handles LRU eviction with refcount protection.\n */\nexport async function getOrCreateCollection(\n\tsolutionId: string,\n\ttableDef: InputTableDefinition,\n\tworkspaceId: string,\n\twebsocketProvider?: IWebsocketProvider\n): Promise<ManagedCollection> {\n\tconst key = collectionKey(workspaceId, solutionId, tableDef.name);\n\n\t// Return existing if available\n\tconst existing = activeCollections.get(key);\n\tif (existing) {\n\t\texisting.lastAccessed = Date.now();\n\t\treturn existing;\n\t}\n\n\t// Deduplicate concurrent creation\n\tif (pendingCollections.has(key)) {\n\t\treturn pendingCollections.get(key)!;\n\t}\n\n\tconst pending = createCollectionInternal(\n\t\tkey,\n\t\tsolutionId,\n\t\ttableDef,\n\t\tworkspaceId,\n\t\twebsocketProvider\n\t);\n\tpendingCollections.set(key, pending);\n\ttry {\n\t\treturn await pending;\n\t} finally {\n\t\tpendingCollections.delete(key);\n\t}\n}\n\nasync function createCollectionInternal(\n\tkey: string,\n\tsolutionId: string,\n\ttableDef: InputTableDefinition,\n\tworkspaceId: string,\n\twebsocketProvider?: IWebsocketProvider\n): Promise<ManagedCollection> {\n\t// Evict LRU if at limit (skip collections with active subscribers)\n\tif (activeCollections.size >= MAX_COLLECTIONS) {\n\t\tawait evictLeastRecentlyUsed();\n\t}\n\n\tconst db = await getInputTableDatabase();\n\tconst schema = buildRxdbSchema(tableDef);\n\tconst collName = toCollectionName(solutionId, tableDef.name);\n\tconst pkField = tableDef.columns.find((c) => c.primary_key)?.name ?? 'id';\n\n\t// Create collection — handles schema changes from migrations by\n\t// destroying the stale collection and recreating with the new schema.\n\tlet collection: RxCollection;\n\n\tconst collectionConfig = {\n\t\tschema,\n\t\tconflictHandler: {\n\t\t\tisEqual: (a: any, b: any) => a[CHECKPOINT_FIELD] === b[CHECKPOINT_FIELD],\n\t\t\tresolve: (i: any) => i.realMasterState // server wins\n\t\t}\n\t};\n\n\tconst existingCollection: RxCollection | undefined = (db as any)[collName];\n\tif (existingCollection) {\n\t\tcollection = existingCollection;\n\t} else {\n\t\ttry {\n\t\t\tconst collections = await db.addCollections({ [collName]: collectionConfig });\n\t\t\tcollection = collections[collName];\n\t\t} catch (err: any) {\n\t\t\tif (err?.code === 'DB6') {\n\t\t\t\t// Schema changed since last session (columns added/removed after migration).\n\t\t\t\t// Remove stale internal schema doc and retry with the new schema.\n\t\t\t\tconst previousSchema = err?.parameters?.previousSchema;\n\t\t\t\tif (previousSchema) {\n\t\t\t\t\tawait db.removeCollectionDoc(collName, previousSchema);\n\t\t\t\t}\n\t\t\t\tconst collections = await db.addCollections({ [collName]: collectionConfig });\n\t\t\t\tcollection = collections[collName];\n\t\t\t} else {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set up replication\n\tconst replication = createReplication(collection, solutionId, tableDef.name, pkField);\n\n\t// Set up realtime binding if provider is available\n\tlet realtimeBinding: RealtimeBindingHandle | null = null;\n\tif (websocketProvider) {\n\t\trealtimeBinding = createRealtimeBinding(\n\t\t\twebsocketProvider,\n\t\t\treplication.state,\n\t\t\tworkspaceId,\n\t\t\tsolutionId,\n\t\t\ttableDef.name\n\t\t);\n\t}\n\n\tconst managed: ManagedCollection = {\n\t\tcollection,\n\t\treplication,\n\t\trealtimeBinding,\n\t\ttableName: tableDef.name,\n\t\tsolutionId,\n\t\tworkspaceId,\n\t\tprimaryKeyField: pkField,\n\t\tlastAccessed: Date.now(),\n\t\trefCount: 0\n\t};\n\n\tactiveCollections.set(key, managed);\n\treturn managed;\n}\n\n/**\n * Close a specific collection and stop its replication.\n */\nexport async function closeCollection(\n\tsolutionId: string,\n\ttableName: string,\n\tworkspaceId: string\n): Promise<void> {\n\tconst key = collectionKey(workspaceId, solutionId, tableName);\n\tconst managed = activeCollections.get(key);\n\tif (!managed) return;\n\n\tmanaged.realtimeBinding?.cleanup();\n\tawait managed.replication.cancel();\n\tawait managed.collection.close();\n\tactiveCollections.delete(key);\n}\n\n/**\n * Close all collections (or all for a specific solutionId).\n */\nexport async function closeAllCollections(solutionId?: string): Promise<void> {\n\tconst toClose = solutionId\n\t\t? [...activeCollections.entries()].filter(([, m]) => m.solutionId === solutionId)\n\t\t: [...activeCollections.entries()];\n\n\tfor (const [key, managed] of toClose) {\n\t\tmanaged.realtimeBinding?.cleanup();\n\t\tawait managed.replication.cancel();\n\t\tawait managed.collection.close();\n\t\tactiveCollections.delete(key);\n\t}\n}\n\nasync function evictLeastRecentlyUsed(): Promise<void> {\n\tlet oldest: [string, ManagedCollection] | null = null;\n\tfor (const entry of activeCollections.entries()) {\n\t\t// Skip collections with active subscribers\n\t\tif (entry[1].refCount > 0) continue;\n\t\tif (!oldest || entry[1].lastAccessed < oldest[1].lastAccessed) {\n\t\t\toldest = entry;\n\t\t}\n\t}\n\tif (oldest) {\n\t\toldest[1].realtimeBinding?.cleanup();\n\t\tawait oldest[1].replication.cancel();\n\t\tawait oldest[1].collection.close();\n\t\tactiveCollections.delete(oldest[0]);\n\t} else {\n\t\tconsole.warn(\n\t\t\t`[copaInputTableDb] All ${MAX_COLLECTIONS} collections have active subscribers. Cannot evict.`\n\t\t);\n\t}\n}\n","import { apiClient } from '../api/client';\nimport { getConfig } from '../config';\nimport { type IWebsocketProvider } from '../config';\nimport {\n\ttype Row,\n\ttype WhereOp,\n\ttype CollectionRef,\n\ttype InputTableDB,\n\ttype QueryBuilder,\n\ttype DocRef,\n\ttype TableListItem\n} from './types';\nimport { CollectionRefImpl } from './collectionRef';\nimport { getOrCreateCollection, closeAllCollections } from './rxdb/collectionManager';\nimport { closeInputTableDatabase } from './rxdb/database';\nimport { InputTableError, validateIdentifier, deferSubscription } from './utils';\n\nconst SOLUTION_COOKIE_NAME = 'x-bluecopa-solution-id';\n\nfunction getSolutionId(): string {\n\tconst config = getConfig();\n\tif (config.solutionId) {\n\t\treturn validateIdentifier(config.solutionId, 'solutionId');\n\t}\n\n\t// Fallback to cookie (browser only)\n\ttry {\n\t\tconst cookie = document.cookie\n\t\t\t.split(';')\n\t\t\t.map((c) => c.trim())\n\t\t\t.find((c) => c.startsWith(`${SOLUTION_COOKIE_NAME}=`));\n\t\tif (cookie) {\n\t\t\tconst value = decodeURIComponent(cookie.split('=').slice(1).join('='));\n\t\t\treturn validateIdentifier(value, 'solutionId (cookie)');\n\t\t}\n\t} catch {\n\t\t// Not in browser (SSR) — no cookie fallback\n\t}\n\n\tthrow new InputTableError(\n\t\t'[copaInputTableDb] No solutionId configured. Set via copaSetConfig({ solutionId }) or cookie.',\n\t\t400\n\t);\n}\n\nclass InputTableDBImpl implements InputTableDB {\n\tprivate wsProvider: IWebsocketProvider | undefined;\n\tprivate schemaCache = new Map<string, { tables: TableListItem[]; fetchedAt: number }>();\n\tprivate schemaPending = new Map<string, Promise<TableListItem[]>>();\n\tprivate wsWarned = false;\n\tprivate generation = 0;\n\n\t/** Schema cache TTL in ms (5 minutes) */\n\tprivate static readonly SCHEMA_CACHE_TTL = 5 * 60 * 1000;\n\n\tsetWebsocketProvider(provider: IWebsocketProvider): void {\n\t\tthis.wsProvider = provider;\n\t}\n\n\tprivate getProvider(): IWebsocketProvider | undefined {\n\t\treturn this.wsProvider ?? getConfig().websocketProvider;\n\t}\n\n\tcollection<TRow extends Row = Row>(name: string): CollectionRef<TRow> {\n\t\tconst provider = this.getProvider();\n\n\t\tif (!provider && !this.wsWarned) {\n\t\t\tthis.wsWarned = true;\n\t\t\tconsole.warn(\n\t\t\t\t'[copaInputTableDb] No WebSocket provider configured. Realtime sync is disabled. ' +\n\t\t\t\t\t'Set via copaSetConfig({ websocketProvider }) or copaInputTableDb.setWebsocketProvider(ws).'\n\t\t\t);\n\t\t}\n\n\t\t// Return a lazy CollectionRef — async init happens on first subscribe/get/add\n\t\treturn new LazyCollectionRef<TRow>(() => this.resolveCollection<TRow>(name));\n\t}\n\n\t/** Force-clear the schema cache. Call after schema changes. */\n\tclearSchemaCache(): void {\n\t\tthis.schemaCache.clear();\n\t\tthis.schemaPending.clear();\n\t}\n\n\tprivate async resolveCollection<TRow extends Row = Row>(\n\t\ttableName: string\n\t): Promise<CollectionRefImpl<TRow>> {\n\t\tconst gen = this.generation;\n\t\tconst solutionId = getSolutionId();\n\t\tconst validatedTableName = validateIdentifier(tableName, 'tableName');\n\t\tconst workspaceId = getConfig().workspaceId;\n\n\t\tconst tables = await this.fetchTableList(solutionId);\n\t\tif (gen !== this.generation) throw new InputTableError('InputTableDB was destroyed', 410);\n\n\t\tconst tableItem = tables.find((t) => t.name === validatedTableName);\n\t\tif (!tableItem?.appliedSchema) {\n\t\t\tthrow new InputTableError(`Collection \"${validatedTableName}\" not found`, 404);\n\t\t}\n\n\t\tconst managed = await getOrCreateCollection(\n\t\t\tsolutionId,\n\t\t\ttableItem.appliedSchema,\n\t\t\tworkspaceId,\n\t\t\tthis.getProvider()\n\t\t);\n\t\tif (gen !== this.generation) throw new InputTableError('InputTableDB was destroyed', 410);\n\n\t\tconst pkColumn = tableItem.appliedSchema.columns.find((c) => c.primary_key);\n\n\t\treturn new CollectionRefImpl<TRow>(\n\t\t\tmanaged.collection,\n\t\t\tsolutionId,\n\t\t\tvalidatedTableName,\n\t\t\tmanaged.primaryKeyField,\n\t\t\tpkColumn,\n\t\t\tmanaged.replication.state,\n\t\t\t() => this.getProvider()\n\t\t);\n\t}\n\n\tprivate fetchTableList(solutionId: string): Promise<TableListItem[]> {\n\t\tconst cached = this.schemaCache.get(solutionId);\n\t\tif (cached && Date.now() - cached.fetchedAt < InputTableDBImpl.SCHEMA_CACHE_TTL) {\n\t\t\treturn Promise.resolve(cached.tables);\n\t\t}\n\n\t\tif (this.schemaPending.has(solutionId)) {\n\t\t\treturn this.schemaPending.get(solutionId)!;\n\t\t}\n\n\t\tconst pending = apiClient\n\t\t\t.get(`/input-table-v2/${solutionId}/tables`)\n\t\t\t.then((res) => {\n\t\t\t\tconst tables: TableListItem[] = res.data ?? [];\n\t\t\t\tthis.schemaCache.set(solutionId, { tables, fetchedAt: Date.now() });\n\t\t\t\tthis.schemaPending.delete(solutionId);\n\t\t\t\treturn tables;\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthis.schemaPending.delete(solutionId);\n\t\t\t\tthrow err;\n\t\t\t});\n\n\t\tthis.schemaPending.set(solutionId, pending);\n\t\treturn pending;\n\t}\n\n\tasync destroy(): Promise<void> {\n\t\tthis.generation++;\n\t\tawait closeAllCollections();\n\t\tawait closeInputTableDatabase();\n\t\tthis.schemaCache.clear();\n\t\tthis.schemaPending.clear();\n\t\tthis.wsWarned = false;\n\t}\n}\n\n/**\n * LazyCollectionRef — synchronous wrapper that defers async init to first operation.\n * Matches Firebase's pattern: .collection() is instant, async work happens at query time.\n */\nclass LazyCollectionRef<TRow extends Row = Row> implements CollectionRef<TRow> {\n\tprivate resolvedRef: Promise<CollectionRefImpl<TRow>> | null = null;\n\n\tconstructor(private resolve: () => Promise<CollectionRefImpl<TRow>>) {}\n\n\tprivate getRef(): Promise<CollectionRefImpl<TRow>> {\n\t\tif (!this.resolvedRef) {\n\t\t\tthis.resolvedRef = this.resolve();\n\t\t}\n\t\treturn this.resolvedRef;\n\t}\n\n\twhere(field: keyof TRow & string, op: WhereOp, value: unknown) {\n\t\treturn new LazyQueryBuilder<TRow>(() =>\n\t\t\tthis.getRef().then((ref) => ref.where(field, op, value))\n\t\t);\n\t}\n\n\torderBy(field: keyof TRow & string, direction: 'asc' | 'desc' = 'asc') {\n\t\treturn new LazyQueryBuilder<TRow>(() =>\n\t\t\tthis.getRef().then((ref) => ref.orderBy(field, direction))\n\t\t);\n\t}\n\n\tlimit(count: number) {\n\t\treturn new LazyQueryBuilder<TRow>(() => this.getRef().then((ref) => ref.limit(count)));\n\t}\n\n\tskip(count: number) {\n\t\treturn new LazyQueryBuilder<TRow>(() => this.getRef().then((ref) => ref.skip(count)));\n\t}\n\n\tdoc(id: string) {\n\t\treturn new LazyDocRef<TRow>(id, () => this.getRef().then((ref) => ref.doc(id)));\n\t}\n\n\tasync add(data: Partial<TRow>): Promise<string> {\n\t\tconst ref = await this.getRef();\n\t\treturn ref.add(data);\n\t}\n\n\tsubscribe(callback: (rows: TRow[]) => void): () => void {\n\t\treturn deferSubscription(\n\t\t\t() => this.getRef().then((ref) => (cb: (rows: TRow[]) => void) => ref.subscribe(cb)),\n\t\t\tcallback,\n\t\t\t[] as TRow[]\n\t\t);\n\t}\n\n\tasync get(): Promise<TRow[]> {\n\t\ttry {\n\t\t\tconst ref = await this.getRef();\n\t\t\treturn ref.get();\n\t\t} catch (err) {\n\t\t\tconsole.error('[copaInputTableDb]', err);\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tcount(callback: (count: number) => void): () => void {\n\t\treturn deferSubscription(\n\t\t\t() => this.getRef().then((ref) => (cb: (n: number) => void) => ref.count(cb)),\n\t\t\tcallback,\n\t\t\t0\n\t\t);\n\t}\n}\n\n/**\n * LazyQueryBuilder — defers subscribe/get until the parent collection is resolved.\n */\nclass LazyQueryBuilder<TRow extends Row = Row> implements QueryBuilder<TRow> {\n\tprivate pendingOps: Array<(qb: QueryBuilder<TRow>) => QueryBuilder<TRow>> = [];\n\n\tconstructor(private resolveBase: () => Promise<QueryBuilder<TRow>>) {}\n\n\tprivate chain(op: (qb: QueryBuilder<TRow>) => QueryBuilder<TRow>): this {\n\t\tthis.pendingOps.push(op);\n\t\treturn this;\n\t}\n\n\twhere(field: keyof TRow & string, op: WhereOp, value: unknown): this {\n\t\treturn this.chain((qb) => qb.where(field, op, value));\n\t}\n\n\torderBy(field: keyof TRow & string, direction: 'asc' | 'desc' = 'asc'): this {\n\t\treturn this.chain((qb) => qb.orderBy(field, direction));\n\t}\n\n\tlimit(count: number): this {\n\t\treturn this.chain((qb) => qb.limit(count));\n\t}\n\n\tskip(count: number): this {\n\t\treturn this.chain((qb) => qb.skip(count));\n\t}\n\n\tprivate async resolveWithOps(): Promise<QueryBuilder<TRow>> {\n\t\tlet qb = await this.resolveBase();\n\t\tfor (const op of this.pendingOps) {\n\t\t\tqb = op(qb);\n\t\t}\n\t\treturn qb;\n\t}\n\n\tsubscribe(callback: (rows: TRow[]) => void): () => void {\n\t\treturn deferSubscription(\n\t\t\t() => this.resolveWithOps().then((qb) => (cb: (rows: TRow[]) => void) => qb.subscribe(cb)),\n\t\t\tcallback,\n\t\t\t[] as TRow[]\n\t\t);\n\t}\n\n\tasync get(): Promise<TRow[]> {\n\t\ttry {\n\t\t\tconst qb = await this.resolveWithOps();\n\t\t\treturn qb.get();\n\t\t} catch (err) {\n\t\t\tconsole.error('[copaInputTableDb]', err);\n\t\t\treturn [];\n\t\t}\n\t}\n}\n\n/**\n * LazyDocRef — defers all doc operations until the parent collection is resolved.\n */\nclass LazyDocRef<TRow extends Row = Row> implements DocRef<TRow> {\n\tconstructor(\n\t\tprivate id: string,\n\t\tprivate resolve: () => Promise<DocRef<TRow>>\n\t) {}\n\n\tasync get(): Promise<TRow | null> {\n\t\tconst ref = await this.resolve();\n\t\treturn ref.get();\n\t}\n\n\tasync update(data: Partial<TRow>): Promise<void> {\n\t\tconst ref = await this.resolve();\n\t\treturn ref.update(data);\n\t}\n\n\tasync delete(): Promise<void> {\n\t\tconst ref = await this.resolve();\n\t\treturn ref.delete();\n\t}\n\n\tonSnapshot(callback: (doc: TRow | null) => void): () => void {\n\t\treturn deferSubscription(\n\t\t\t() => this.resolve().then((ref) => (cb: (doc: TRow | null) => void) => ref.onSnapshot(cb)),\n\t\t\tcallback,\n\t\t\tnull as TRow | null\n\t\t);\n\t}\n}\n\nexport const copaInputTableDb: InputTableDB = new InputTableDBImpl();\n","const bluecopaTailwindConfig = {\n darkMode: \"class\",\n important: true,\n theme: {\n fontFamily: {\n para: [\"Bogle\"],\n display: [\"Bogle\"],\n table: [\"Bogle\"],\n },\n fontWeight: {\n normal: \"300\",\n semibold: \"500\",\n bold: \"700\",\n black: \"800\",\n },\n keyframes: {\n \"fadeIn-top-to-bottom\": {\n \"0%\": { transform: \"translateY(-3%)\", opacity: 0 },\n \"100%\": { transform: \"translateY(0)\", opacity: 1 },\n },\n },\n animation: {\n \"fadeIn-t-b\": \"fadeIn-top-to-bottom 0.8s ease-out forwards\",\n \"fadeOut-b-t\": \"fadeIn-top-to-bottom 0.8s ease-out backwards\",\n },\n extend: {\n boxShadow: {\n md: \"2px 2px 10px 0px rgba(0,0,0,0.3)\",\n lg: \"4px 4px 10px 0px rgba(0,0,0,0.3)\",\n xl: \"6px 6px 10px 0px rgba(0,0,0,0.3)\",\n DEFAULT: \"2px 2px 10px 0px rgba(0,0,0,0.3)\",\n },\n colors: {\n primary: {\n 50: \"#ebf4ff\",\n 100: \"#dbe9ff\",\n 200: \"#bed7ff\",\n 300: \"#97bbff\",\n 400: \"#6e92ff\",\n 500: \"#0071dc\",\n 600: \"#3548ff\",\n 700: \"#202ee2\",\n 800: \"#1d2bb6\",\n 900: \"#202d8f\",\n 950: \"#131953\",\n DEFAULT: \"#0071dc\",\n },\n secondary: {\n 50: \"#F9FAFB\",\n 100: \"#F3F4F6\",\n 200: \"#E5E7EB\",\n 300: \"#D1D5DB\",\n 400: \"#9CA3AF\",\n 500: \"#041e42\",\n 600: \"#4B5563\",\n 700: \"#374151\",\n 800: \"#1F2937\",\n 900: \"#111827\",\n DEFAULT: \"#041e42\",\n },\n danger: {\n 50: \"#FEF2F2\",\n 100: \"#FEE2E2\",\n 200: \"#FECACA\",\n 300: \"#FCA5A5\",\n 400: \"#F87171\",\n 500: \"#EF4444\",\n 600: \"#DC2626\",\n 700: \"#B91C1C\",\n 800: \"#991B1B\",\n 900: \"#7F1D1D\",\n DEFAULT: \"#DE1C24\",\n },\n success: {\n 50: \"#EEFFDD\",\n 100: \"#ddedce\",\n 200: \"#bcdb9d\",\n 300: \"#9ac96c\",\n 400: \"#79b73b\",\n 500: \"#89E32F\",\n 600: \"#468408\",\n 700: \"#346306\",\n 800: \"#234204\",\n 900: \"#112102\",\n DEFAULT: \"#53a10f\",\n },\n warning: {\n DEFAULT: \"#fff200\",\n 100: \"#fef3c7\",\n },\n menuBtnBg: \"#ffffff\",\n menuBtnText: \"#041e42\",\n navbarBg: \"#041e42\",\n navbarBlue: \"#041e42\",\n navbarText: \"#fff\",\n headerBg: \"#fff\",\n headerText: \"#041e42\",\n homeHeaderBg: \"#f5f5f4\",\n homeHeaderText: \"#041e42\",\n\n coralRed: \"#ef4444\",\n dartMouthGreen: \"#059669\",\n chestnut: \"#c2410c\",\n softPink: \"#fecaca\",\n darkPurple: \"#6b21a8\",\n darkPastelGreen: \"#4d7c0f\",\n sandyBrown: \"#fb923c\",\n cinnabar: \"#ef4444\",\n tyrianPurple: \"#701a75\",\n ruddyBlue: \"#0891b2\",\n viridian: \"#0f766e\",\n cobaltBlue: \"#1d4ed8\",\n dukeBlue: \"#1e3a8a\",\n jasmine: \"#fde68a\",\n },\n spacing: {\n none: \"0rem\",\n sm: \"0.3025rem\",\n md: \"0.605rem\",\n lg: \"0.9075rem\",\n xl: \"1.21rem\",\n \"2xl\": \"2.42rem\",\n \"3xl\": \"4.84rem\",\n },\n borderRadius: {\n sm: \"1.3rem\",\n md: \"1.3rem\",\n lg: \"1.3rem\",\n DEFAULT: \"1.3rem\",\n },\n fontSize: {\n \"preset-0\": [\"3.013rem\", \"4.513rem\"],\n \"preset-1\": [\"2.505rem\", \"3.763rem\"],\n \"preset-2\": [\"2.093rem\", \"3.146rem\"],\n \"preset-3\": [\"1.742rem\", \"2.626rem\"],\n \"preset-4\": [\"1.452rem\", \"2.190rem\"],\n \"preset-5\": [\"1.21rem\", \"1.815rem\"],\n \"preset-6\": [\"1.004rem\", \"1.513rem\"],\n \"preset-7\": [\"0.835rem\", \"1.258rem\"],\n \"preset-8\": [\"0.702rem\", \"1.053rem\"],\n },\n zIndex: {\n 1: \"1\",\n 2: \"2\",\n 3: \"3\",\n 4: \"4\",\n 5: \"5\",\n 6: \"6\",\n 7: \"7\",\n 8: \"8\",\n 9: \"9\",\n 10: \"10\",\n 1001: \"1001\",\n 1002: \"1002\",\n },\n },\n },\n};\n\nexport default bluecopaTailwindConfig;\n"],"names":["WorkflowStatus","ShowAsEnum","CustomCalculationShowAsEnum","col","_b","_a","_d","_c","_e","valueCol","ProjectFractionEnum","index","defaultFilterRule","blockId","getDefaultExportFromCjs","ReflectApply","ReflectOwnKeys","NumberIsNaN","once","events","listeners","errorCodes","connectingCodes","disconnectedCodes","subscribingCodes","unsubscribedCodes","State","SubscriptionState","self","_","exports","d","b","Coder","URLSafeCoder","module","__webpack_require__","__webpack_exports__","pusher","prefix","defaults","protocol","AuthRequestType","keys","values","log","document","hooks","state","__awaiter","Network","transports","defineTransport","crypto","random","TimelineLevel","level","getConfig","Pusher","options","i","getData","WorkbookTypeEnum","status","InputTableColumnType"],"mappings":"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","x_google_ignoreList":[24,26]}