@amaster.ai/bpm-client 1.1.0-beta.39 → 1.1.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +241 -1
- package/dist/index.d.ts +241 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var httpClient=require('@amaster.ai/http-client');function m(){if(typeof window>"u")return null;try{let
|
|
2
|
-
exports.createBpmClient=
|
|
1
|
+
'use strict';var httpClient=require('@amaster.ai/http-client');function m(){if(typeof window>"u")return null;try{let t=window.location.href,e=/\/app\/([\da-f-]+)(?:\/|$)/.exec(t);if(e&&e[1])return e[1];let s=window.location.hostname,r=/^www\.([\da-f-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(s);if(r&&r[1])return r[1];let n=/^([\da-f-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(s);return n&&n[1]?n[1]:null}catch{return null}}function g(){if(typeof window>"u")return "production";try{let t=window.location.hostname,e=/^www\.[\da-f-]+-([^.]+)\.[\w-]+\.(?:local|ai|cn)$/.exec(t);if(e&&e[1])return e[1];let s=/^[\da-f-]+-([^.]+)\.[\w-]+\.(?:local|ai|cn)$/.exec(t);return s&&s[1]?s[1]:"production"}catch{return "production"}}function o(){let t=m();if(!t)return null;let e=g();return `${t}_${e}`}function I(){if(typeof window>"u")return "amaster.ai";let t=window.location.hostname,e=t.split(".");if(e.length<=2)return t;let s=e.slice(-2).join(".");return s==="helige.cn"?"www.helige.cn":s}function b(t){return t!=null&&typeof t=="object"&&"variables"in t&&typeof t.variables=="object"&&t.variables!==null}function P(t){if(!t||typeof t!="string")return false;if(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[+-]\d{4})?)?$/.test(t))return true;let s=Date.parse(t);return !isNaN(s)}function l(t){let e;if(t instanceof Date)e=t;else if(typeof t=="number")e=new Date(t);else if(typeof t=="string"){if(e=new Date(t),isNaN(e.getTime()))return t}else e=new Date(t);return e.toISOString().replace("Z","+0000")}function f(t){if(t!=null){if(typeof t=="string")return "String";if(typeof t=="boolean")return "Boolean";if(typeof t=="number")return Number.isInteger(t)?"Long":"Double";if(t instanceof Date)return "Date";if(typeof t=="object")return "Json"}}function u(t){if(t&&typeof t=="object"&&"value"in t&&("type"in t||Object.keys(t).length<=2)){let s=t;return s.value instanceof Date?{value:l(s.value),type:"Date"}:s.type==="Date"&&(typeof s.value=="string"||typeof s.value=="number")?{value:l(s.value),type:"Date"}:s.type==="String"&&typeof s.value=="string"&&P(s.value)?{value:l(s.value),type:"String"}:s}if(t instanceof Date)return {value:l(t),type:"Date"};let e=t;return {value:e,type:f(e)}}function c(t){if(!t)return {variables:{}};if(b(t)){let s={};for(let[r,n]of Object.entries(t.variables))s[r]=u(n);return {variables:s}}let e={};for(let[s,r]of Object.entries(t))e[s]=u(r);return {variables:e}}function i(t){if(!t)return "";let e=new URLSearchParams;for(let[r,n]of Object.entries(t))n!=null&&e.append(r,String(n));let s=e.toString();return s?`?${s}`:""}function a(t){return t.status===204?{...t,data:null}:t}function C(t=httpClient.createHttpClient()){return {getApprovalUrl(e,s){let r=e?.split(":")[0]||"",n=I(),d=m()||"",p=g();return `${typeof window<"u"?window.location.protocol:"https:"}//${n}/bpmn-center?processKey=${r}&instanceId=${s}&appId=${d}&env=${p}`},startProcess(e,s){return e?t.request({url:`/api/bpm/start/${e}`,method:"post",headers:{"Content-Type":"application/json"},data:c(s)}):Promise.resolve({data:null,error:{message:"Process key is required",status:400},status:400})},getProcessInstances(e){return t.request({url:`/api/bpm/process-instance${i(e)}`,method:"get"})},getProcessInstance(e){return e?t.request({url:`/api/bpm/process-instance/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},async deleteProcessInstance(e,s){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=s?.skipCustomListeners?"?skipCustomListeners=true":"",n=await t.request({url:`/api/bpm/process-instance/${e}${r}`,method:"delete"});return a(n)},getActiveActivities(e){return e?t.request({url:`/api/bpm/process-instance/${e}/activity-instances`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},getTasks(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/task${i(r)}`,method:"get"})},getTaskCount(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/task/count${i(r)}`,method:"get"})},getTask(e){return e?t.request({url:`/api/bpm/task/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskFormSchema(e,s){if(!e)return Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400});let r=i(s?.redirect?{redirect:s.redirect}:void 0);return t.request({url:`/api/bpm/task/${e}/form-schema${r}`,method:"get"})},getTaskFormVariables(e){return e?t.request({url:`/api/bpm/task/${e}/form-variables`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},async completeTask(e,s){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await t.request({url:`/api/bpm/task/${e}/complete`,method:"post",headers:{"Content-Type":"application/json"},data:c(s)});return a(r)},getHistoryTasks(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/history/task${i(r)}`,method:"get"})},getHistoryTaskCount(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/history/task/count${i(r)}`,method:"get"})},getHistoryProcessInstances(e){return t.request({url:`/api/bpm/history/process-instance${i(e)}`,method:"get"})},getHistoryProcessInstanceCount(e){return t.request({url:`/api/bpm/history/process-instance/count${i(e)}`,method:"get"})},getHistoryProcessInstance(e){return e?t.request({url:`/api/bpm/history/process-instance/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},getProcessVariables(e){if(!e.processInstanceId)return Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400});let s=i(e);return t.request({url:`/api/bpm/history/variable-instance${s}`,method:"get"})},getProcessDefinitions(e){return t.request({url:`/api/bpm/process-definition${i(e)}`,method:"get"})},getProcessXml(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/xml`:`/api/bpm/xml/${e}`;return t.request({url:r,method:"get"})},getActivityInstanceTree(e){return e?t.request({url:`/api/bpm/process-instance/${e}/activity-instances`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},getRuntimeVariables(e){return e?t.request({url:`/api/bpm/process-instance/${e}/variables`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},async delegateTask(e,s){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await t.request({url:`/api/bpm/task/${e}/delegate`,method:"post",headers:{"Content-Type":"application/json"},data:{userId:s}});return a(r)},getTaskForm(e){return e?t.request({url:`/api/bpm/task/${e}/form`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskRenderedForm(e){return e?t.request({url:`/api/bpm/task/${e}/rendered-form`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskDeployedForm(e){return e?t.request({url:`/api/bpm/task/${e}/deployed-form`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getStartFormInfo(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/start-form`:`/api/bpm/start-form/${e}`;return t.request({url:r,method:"get"})},getStartFormVariables(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/form-variables`:`/api/bpm/process-definition/key/${e}/form-variables`;return t.request({url:r,method:"get"})},getDeployedStartForm(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/deployed-start-form`:`/api/bpm/deployed-start-form/${e}`;return t.request({url:r,method:"get"})},getHistoryActivityInstances(e){return t.request({url:`/api/bpm/history/activity-instance${i(e)}`,method:"get"})},getHistoryVariableInstances(e){return t.request({url:`/api/bpm/history/variable-instance${i(e)}`,method:"get"})},getUserOperationLogs(e){return t.request({url:`/api/bpm/history/user-operation${i(e)}`,method:"get"})},async deleteHistoryProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let s=await t.request({url:`/api/bpm/history/process-instance/${e}`,method:"delete"});return a(s)},async suspendProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let s=await t.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:true}});return a(s)},async activateProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let s=await t.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:false}});return a(s)},async modifyProcessInstance(e,s){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=await t.request({url:`/api/bpm/process-instance/${e}/modification`,method:"post",headers:{"Content-Type":"application/json"},data:s});return a(r)},getRoles(){return t.request({url:"/api/runtime/rbac/roles",method:"get"})},async getUserRoles(e){if(!e)return {data:null,error:{message:"User ID is required",status:400},status:400};let s=await t.request({url:`/api/runtime/rbac/users/${e}/roles`,method:"get"});return s.error?{data:[],error:s.error,status:s.status}:{data:s.data?.data||[],error:null,status:s.status}}}}
|
|
2
|
+
exports.createBpmClient=C;//# sourceMappingURL=index.cjs.map
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bpm-client.ts"],"names":["extractAppIdFromUrl","url","pathMatch","hostname","wwwMatch","domainMatch","extractEnvFromUrl","wwwEnvMatch","envMatch","getTenantId","appId","env","getBaseDomain","parts","baseDomain","isVariableSubmission","x","isDateLikeString","value","timestamp","formatDateForCamunda","date","dateObj","inferType","processVariableValue","v","variable","camundaValue","toVariableSubmission","inputs","variables","k","encodeQuery","params","sp","q","noContentToNull","r","createBpmClient","http","createHttpClient","processDefinitionId","processInstanceId","processKey","result","tenantId","queryParams","taskId","opts"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\n\n/**\n * Extract app_id from current page URL or domain\n * Method 1: From URL path - /app/{app_id}/...\n * Method 2: From domain (subdomain) - {app_id}-{env}.amaster.ai or {app_id}-{env}.helige.cn or www.{app_id}.helige.cn\n */\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n try {\n // Method 1: Try to extract from URL path first\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-f-]+)(?:\\/|$)/.exec(url);\n if (pathMatch && pathMatch[1]) {\n return pathMatch[1];\n }\n\n // Method 2: Try to extract from domain (subdomain)\n // Matches patterns like: {app_id}-{env}.{domain}.{tld} or www.{app_id}.{domain}.{tld}\n // Examples: abc123-dev.amaster.ai, b7f1156a-dev.helige.cn, www.b7f1156a.helige.cn\n const hostname = window.location.hostname;\n\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch && wwwMatch[1]) {\n return wwwMatch[1];\n }\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch && domainMatch[1]) {\n return domainMatch[1];\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract environment from domain\n * Examples:\n * - aa7158e8-dev.amaster.ai -> dev\n * - aa7158e8.amaster.ai -> production\n * - aa7158e8-prod.amaster.ai -> prod\n * - b7f1156a-dev.helige.cn -> dev\n * - www.b7f1156a.helige.cn -> production\n * - www.b7f1156a-dev.helige.cn -> dev\n */\nfunction extractEnvFromUrl(): string {\n if (typeof window === \"undefined\") {\n return \"production\";\n }\n\n try {\n const hostname = window.location.hostname;\n // Match pattern: www.{app_id}-{env}.domain.tld\n const wwwEnvMatch = /^www\\.[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwEnvMatch && wwwEnvMatch[1]) {\n return wwwEnvMatch[1];\n }\n // Match pattern: {app_id}-{env}.domain.tld\n const envMatch = /^[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (envMatch && envMatch[1]) {\n return envMatch[1];\n }\n return \"production\";\n } catch {\n return \"production\";\n }\n}\n\n/**\n * Get tenantId in format: {appId}_{env}\n */\nfunction getTenantId(): string | null {\n const appId = extractAppIdFromUrl();\n if (!appId) {\n return null;\n }\n const env = extractEnvFromUrl();\n return `${appId}_${env}`;\n}\n\n/**\n * Get approval URL base domain\n * Examples:\n * - xxxx.amaster.ai -> amaster.ai\n * - xxx.appok.ai -> appok.ai\n * - xxx.helige.cn -> www.helige.cn\n * - localhost -> localhost\n */\nfunction getBaseDomain(): string {\n if (typeof window === \"undefined\") {\n return \"amaster.ai\";\n }\n const hostname = window.location.hostname;\n const parts = hostname.split(\".\");\n if (parts.length <= 2) {\n return hostname;\n }\n const baseDomain = parts.slice(-2).join(\".\");\n // helige.cn needs www prefix\n if (baseDomain === \"helige.cn\") {\n return \"www.helige.cn\";\n }\n return baseDomain;\n}\n\nexport type CamundaVariableType =\n | \"String\"\n | \"Boolean\"\n | \"Integer\"\n | \"Long\"\n | \"Double\"\n | \"Date\"\n | \"Json\";\n\nexport type CamundaVariableValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | Record<string, unknown>\n | unknown[];\n\nexport type CamundaVariable = {\n value: CamundaVariableValue;\n type?: CamundaVariableType;\n};\n\nexport type VariableSubmission = {\n variables: Record<string, CamundaVariable>;\n};\n\nexport type ProcessInstance = {\n id: string;\n definitionId?: string;\n businessKey?: string;\n ended?: boolean;\n suspended?: boolean;\n};\n\nexport type ProcessInstanceQueryParams = {\n processDefinitionKey?: string;\n active?: boolean;\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type HistoryProcessInstance = {\n id: string;\n businessKey: string;\n processDefinitionId: string;\n processDefinitionKey: string;\n processDefinitionName: string;\n processDefinitionVersion: number;\n startTime: string;\n endTime: string | null;\n durationInMillis: number | null;\n startUserId: string;\n startActivityId: string;\n deleteReason: string | null;\n state: string;\n superProcessInstanceId?: string;\n superCaseInstanceId?: string;\n};\n\nexport type HistoryProcessInstanceQueryParams = {\n startedBy?: string;\n finished?: boolean;\n processDefinitionKey?: string;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type ProcessVariable = {\n id: string;\n name: string;\n type: string;\n value: CamundaVariableValue;\n processInstanceId: string;\n createTime?: string;\n activityInstanceId?: string;\n taskId?: string;\n executionId?: string;\n errorMessage?: string;\n};\n\nexport type ActivityInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n executionId: string;\n startTime: string;\n endTime?: string;\n};\n\nexport type Task = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n created?: string | null;\n due?: string | null;\n followUp?: string | null;\n lastUpdated?: string | null;\n delegationState?: string | null;\n priority?: number;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n caseExecutionId?: string | null;\n caseInstanceId?: string | null;\n caseDefinitionId?: string | null;\n suspended?: boolean;\n formKey?: string | null;\n camundaFormRef?: string | null;\n tenantId?: string | null;\n taskState?: string | null;\n};\n\nexport type TaskCount = { count: number };\n\nexport type TaskFormField = {\n id: string;\n label?: string;\n type?: string;\n defaultValue?: CamundaVariableValue;\n properties?: Record<string, unknown>;\n validationConstraints?: Array<{\n name: string;\n config?: unknown;\n }>;\n [key: string]: unknown;\n};\n\nexport type TaskFormSchema = {\n key?: string;\n contextPath?: string;\n fields?: TaskFormField[];\n [key: string]: unknown;\n};\n\nexport type TaskFormVariable = {\n type: string;\n value: CamundaVariableValue;\n valueInfo?: Record<string, unknown>;\n};\n\nexport type TaskFormVariables = Record<string, TaskFormVariable>;\n\nexport type HistoryTask = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n startTime: string;\n endTime?: string | null;\n duration?: number | null;\n due?: string | null;\n followUp?: string | null;\n priority?: number;\n taskState?: string | null;\n deleteReason?: string | null;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n processDefinitionKey?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n activityInstanceId?: string | null;\n caseDefinitionKey?: string | null;\n caseDefinitionId?: string | null;\n caseInstanceId?: string | null;\n caseExecutionId?: string | null;\n tenantId?: string | null;\n removalTime?: string | null;\n rootProcessInstanceId?: string | null;\n};\n\nexport type TaskQueryParams = {\n processInstanceId?: string;\n assignee?: string;\n candidateUser?: string;\n candidateGroup?: string;\n name?: string;\n nameLike?: string;\n taskDefinitionKey?: string;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type HistoryTaskQueryParams = {\n taskAssignee?: string;\n processInstanceId?: string;\n finished?: boolean;\n unfinished?: boolean;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type BpmClient = {\n /**\n * Get approval URL for Workflow Center\n * @param processDefinitionId - Format: \"{processKey}:{version}:{deploymentId}\"\n * @param processInstanceId - Process instance ID\n * @returns Approval URL: https://{baseDomain}/bpmn-center/{processKey}/{processInstanceId}?appId={appId}&env={env}\n */\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string;\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>>;\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>>;\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>>;\n deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>>;\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>>;\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>>;\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>>;\n getTask(taskId: string): Promise<ClientResult<Task>>;\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>>;\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>>;\n completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>>;\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>>;\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>>;\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>>;\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>>;\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>>;\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>>;\n};\n\nfunction isVariableSubmission(x: unknown): x is VariableSubmission {\n return (\n x !== null &&\n x !== undefined &&\n typeof x === \"object\" &&\n \"variables\" in x &&\n typeof (x as VariableSubmission).variables === \"object\" &&\n (x as VariableSubmission).variables !== null\n );\n}\n\n/**\n * Check if a string value looks like a date\n */\nfunction isDateLikeString(value: string): boolean {\n if (!value || typeof value !== \"string\") return false;\n\n // ISO 8601 formats: 2026-01-28T15:23:39.513Z, 2026-01-28T23:23, 2026-01-28\n const isoPattern = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[+-]\\d{4})?)?$/;\n if (isoPattern.test(value)) return true;\n\n // Try parsing as date\n const timestamp = Date.parse(value);\n return !isNaN(timestamp);\n}\n\n/**\n * Format Date value for Camunda\n * Camunda expects format: yyyy-MM-dd'T'HH:mm:ss.SSS+0000\n * JavaScript toISOString returns: 2025-02-03T00:00:00.000Z\n * Need to replace 'Z' with '+0000' for Java Date parsing\n */\nfunction formatDateForCamunda(date: Date | string | number): string {\n let dateObj: Date;\n\n if (date instanceof Date) {\n dateObj = date;\n } else if (typeof date === \"number\") {\n dateObj = new Date(date);\n } else if (typeof date === \"string\") {\n dateObj = new Date(date);\n if (isNaN(dateObj.getTime())) {\n return date; // Return original if invalid\n }\n } else {\n dateObj = new Date(date as number);\n }\n\n // Format as: yyyy-MM-dd'T'HH:mm:ss.SSS+0000 for Camunda Java Date parsing\n return dateObj.toISOString().replace(\"Z\", \"+0000\");\n}\n\nfunction inferType(value: CamundaVariableValue): CamundaVariableType | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return \"String\";\n }\n if (typeof value === \"boolean\") {\n return \"Boolean\";\n }\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? \"Long\" : \"Double\";\n }\n if (value instanceof Date) {\n return \"Date\";\n }\n if (typeof value === \"object\") {\n return \"Json\";\n }\n return undefined;\n}\n\nfunction processVariableValue(v: unknown): CamundaVariable {\n if (v && typeof v === \"object\" && \"value\" in v && (\"type\" in v || Object.keys(v).length <= 2)) {\n const variable = v as CamundaVariable;\n\n if (variable.value instanceof Date) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n if (\n variable.type === \"Date\" &&\n (typeof variable.value === \"string\" || typeof variable.value === \"number\")\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n // Check if String type value looks like a date\n if (\n variable.type === \"String\" &&\n typeof variable.value === \"string\" &&\n isDateLikeString(variable.value)\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"String\",\n };\n }\n\n return variable;\n }\n\n if (v instanceof Date) {\n return {\n value: formatDateForCamunda(v),\n type: \"Date\",\n };\n }\n\n const camundaValue = v as CamundaVariableValue;\n return { value: camundaValue, type: inferType(camundaValue) };\n}\n\nfunction toVariableSubmission(\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n): VariableSubmission {\n if (!inputs) {\n return { variables: {} };\n }\n\n if (isVariableSubmission(inputs)) {\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs.variables)) {\n variables[k] = processVariableValue(v);\n }\n return { variables };\n }\n\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs)) {\n variables[k] = processVariableValue(v);\n }\n\n return { variables };\n}\n\nfunction encodeQuery(params?: Record<string, string | number | boolean | undefined>): string {\n if (!params) {\n return \"\";\n }\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) {\n continue;\n }\n sp.append(k, String(v));\n }\n const q = sp.toString();\n return q ? `?${q}` : \"\";\n}\n\nfunction noContentToNull<T>(r: ClientResult<T>): ClientResult<T | null> {\n if (r.status === 204) {\n return { ...r, data: null };\n }\n return r;\n}\n\nexport function createBpmClient(http: HttpClient = createHttpClient()): BpmClient {\n return {\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string {\n // Extract processKey from processDefinitionId (format: \"processKey:version:deploymentId\")\n const processKey = processDefinitionId?.split(\":\")[0] || \"\";\n const baseDomain = getBaseDomain();\n const appId = extractAppIdFromUrl() || \"\";\n const env = extractEnvFromUrl();\n const protocol = typeof window !== \"undefined\" ? window.location.protocol : \"https:\";\n return `${protocol}//${baseDomain}/bpmn-center?processKey=${processKey}&instanceId=${processInstanceId}&appId=${appId}&env=${env}`;\n },\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>> {\n if (!processKey) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process key is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/start/${processKey}`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n },\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>> {\n return http.request<ProcessInstance[]>({\n url: `/api/bpm/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n async deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\n }\n const q = params?.skipCustomListeners ? \"?skipCustomListeners=true\" : \"\";\n const result = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}${q}`,\n method: \"delete\",\n });\n return noContentToNull(result) as ClientResult<null>;\n },\n\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ActivityInstance[]>({\n url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,\n method: \"get\",\n });\n },\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<Task[]>({\n url: `/api/bpm/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTask(taskId: string): Promise<ClientResult<Task>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<Task>({\n url: `/api/bpm/task/${taskId}`,\n method: \"get\",\n });\n },\n\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(opts?.redirect ? { redirect: opts.redirect } : undefined);\n return http.request<TaskFormSchema>({\n url: `/api/bpm/task/${taskId}/form-schema${q}`,\n method: \"get\",\n });\n },\n\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<TaskFormVariables>({\n url: `/api/bpm/task/${taskId}/form-variables`,\n method: \"get\",\n });\n },\n\n async completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>> {\n if (!taskId) {\n return {\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n };\n }\n const r = await http.request<null>({\n url: `/api/bpm/task/${taskId}/complete`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<HistoryTask[]>({\n url: `/api/bpm/history/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/history/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>> {\n return http.request<HistoryProcessInstance[]>({\n url: `/api/bpm/history/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>> {\n return http.request<{ count: number }>({\n url: `/api/bpm/history/process-instance/count${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<HistoryProcessInstance>({\n url: `/api/bpm/history/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>> {\n if (!params.processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(params);\n return http.request<ProcessVariable[]>({\n url: `/api/bpm/history/variable-instance${q}`,\n method: \"get\",\n });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/bpm-client.ts"],"names":["extractAppIdFromUrl","url","pathMatch","hostname","wwwMatch","domainMatch","extractEnvFromUrl","wwwEnvMatch","envMatch","getTenantId","appId","env","getBaseDomain","parts","baseDomain","isVariableSubmission","x","isDateLikeString","value","timestamp","formatDateForCamunda","date","dateObj","inferType","processVariableValue","v","variable","camundaValue","toVariableSubmission","inputs","variables","k","encodeQuery","params","sp","q","noContentToNull","r","createBpmClient","http","createHttpClient","processDefinitionId","processInstanceId","processKey","result","tenantId","queryParams","taskId","opts","userId","modification"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\n\n/**\n * Extract app_id from current page URL or domain\n * Method 1: From URL path - /app/{app_id}/...\n * Method 2: From domain (subdomain) - {app_id}-{env}.amaster.ai or {app_id}-{env}.helige.cn or www.{app_id}.helige.cn\n */\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n try {\n // Method 1: Try to extract from URL path first\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-f-]+)(?:\\/|$)/.exec(url);\n if (pathMatch && pathMatch[1]) {\n return pathMatch[1];\n }\n\n // Method 2: Try to extract from domain (subdomain)\n // Matches patterns like: {app_id}-{env}.{domain}.{tld} or www.{app_id}.{domain}.{tld}\n // Examples: abc123-dev.amaster.ai, b7f1156a-dev.helige.cn, www.b7f1156a.helige.cn\n const hostname = window.location.hostname;\n\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch && wwwMatch[1]) {\n return wwwMatch[1];\n }\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch && domainMatch[1]) {\n return domainMatch[1];\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract environment from domain\n * Examples:\n * - aa7158e8-dev.amaster.ai -> dev\n * - aa7158e8.amaster.ai -> production\n * - aa7158e8-prod.amaster.ai -> prod\n * - b7f1156a-dev.helige.cn -> dev\n * - www.b7f1156a.helige.cn -> production\n * - www.b7f1156a-dev.helige.cn -> dev\n */\nfunction extractEnvFromUrl(): string {\n if (typeof window === \"undefined\") {\n return \"production\";\n }\n\n try {\n const hostname = window.location.hostname;\n // Match pattern: www.{app_id}-{env}.domain.tld\n const wwwEnvMatch = /^www\\.[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwEnvMatch && wwwEnvMatch[1]) {\n return wwwEnvMatch[1];\n }\n // Match pattern: {app_id}-{env}.domain.tld\n const envMatch = /^[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (envMatch && envMatch[1]) {\n return envMatch[1];\n }\n return \"production\";\n } catch {\n return \"production\";\n }\n}\n\n/**\n * Get tenantId in format: {appId}_{env}\n */\nfunction getTenantId(): string | null {\n const appId = extractAppIdFromUrl();\n if (!appId) {\n return null;\n }\n const env = extractEnvFromUrl();\n return `${appId}_${env}`;\n}\n\n/**\n * Get approval URL base domain\n * Examples:\n * - xxxx.amaster.ai -> amaster.ai\n * - xxx.appok.ai -> appok.ai\n * - xxx.helige.cn -> www.helige.cn\n * - localhost -> localhost\n */\nfunction getBaseDomain(): string {\n if (typeof window === \"undefined\") {\n return \"amaster.ai\";\n }\n const hostname = window.location.hostname;\n const parts = hostname.split(\".\");\n if (parts.length <= 2) {\n return hostname;\n }\n const baseDomain = parts.slice(-2).join(\".\");\n // helige.cn needs www prefix\n if (baseDomain === \"helige.cn\") {\n return \"www.helige.cn\";\n }\n return baseDomain;\n}\n\nexport type CamundaVariableType =\n | \"String\"\n | \"Boolean\"\n | \"Integer\"\n | \"Long\"\n | \"Double\"\n | \"Date\"\n | \"Json\";\n\nexport type CamundaVariableValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | Record<string, unknown>\n | unknown[];\n\nexport type CamundaVariable = {\n value: CamundaVariableValue;\n type?: CamundaVariableType;\n};\n\nexport type VariableSubmission = {\n variables: Record<string, CamundaVariable>;\n};\n\nexport type ProcessInstance = {\n id: string;\n definitionId?: string;\n businessKey?: string;\n ended?: boolean;\n suspended?: boolean;\n};\n\nexport type ProcessInstanceQueryParams = {\n processDefinitionKey?: string;\n active?: boolean;\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type HistoryProcessInstance = {\n id: string;\n businessKey: string;\n processDefinitionId: string;\n processDefinitionKey: string;\n processDefinitionName: string;\n processDefinitionVersion: number;\n startTime: string;\n endTime: string | null;\n durationInMillis: number | null;\n startUserId: string;\n startActivityId: string;\n deleteReason: string | null;\n state: string;\n superProcessInstanceId?: string;\n superCaseInstanceId?: string;\n};\n\nexport type HistoryProcessInstanceQueryParams = {\n startedBy?: string;\n finished?: boolean;\n processDefinitionKey?: string;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type ProcessVariable = {\n id: string;\n name: string;\n type: string;\n value: CamundaVariableValue;\n processInstanceId: string;\n createTime?: string;\n activityInstanceId?: string;\n taskId?: string;\n executionId?: string;\n errorMessage?: string;\n};\n\nexport type ActivityInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n executionId: string;\n startTime: string;\n endTime?: string;\n};\n\nexport type Task = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n created?: string | null;\n due?: string | null;\n followUp?: string | null;\n lastUpdated?: string | null;\n delegationState?: string | null;\n priority?: number;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n caseExecutionId?: string | null;\n caseInstanceId?: string | null;\n caseDefinitionId?: string | null;\n suspended?: boolean;\n formKey?: string | null;\n camundaFormRef?: string | null;\n tenantId?: string | null;\n taskState?: string | null;\n};\n\nexport type TaskCount = { count: number };\n\nexport type TaskFormField = {\n id: string;\n label?: string;\n type?: string;\n defaultValue?: CamundaVariableValue;\n properties?: Record<string, unknown>;\n validationConstraints?: Array<{\n name: string;\n config?: unknown;\n }>;\n [key: string]: unknown;\n};\n\nexport type TaskFormSchema = {\n key?: string;\n contextPath?: string;\n fields?: TaskFormField[];\n [key: string]: unknown;\n};\n\nexport type TaskFormVariable = {\n type: string;\n value: CamundaVariableValue;\n valueInfo?: Record<string, unknown>;\n};\n\nexport type TaskFormVariables = Record<string, TaskFormVariable>;\n\nexport type HistoryTask = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n startTime: string;\n endTime?: string | null;\n duration?: number | null;\n due?: string | null;\n followUp?: string | null;\n priority?: number;\n taskState?: string | null;\n deleteReason?: string | null;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n processDefinitionKey?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n activityInstanceId?: string | null;\n caseDefinitionKey?: string | null;\n caseDefinitionId?: string | null;\n caseInstanceId?: string | null;\n caseExecutionId?: string | null;\n tenantId?: string | null;\n removalTime?: string | null;\n rootProcessInstanceId?: string | null;\n};\n\nexport type TaskQueryParams = {\n processInstanceId?: string;\n assignee?: string;\n candidateUser?: string;\n candidateGroup?: string;\n name?: string;\n nameLike?: string;\n taskDefinitionKey?: string;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type HistoryTaskQueryParams = {\n taskAssignee?: string;\n processInstanceId?: string;\n finished?: boolean;\n unfinished?: boolean;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\n// ============================================\n// 额外类型(流程定义、表单、审计、修改等)\n// ============================================\n\nexport type ProcessDefinitionFull = {\n id: string;\n key: string;\n name: string;\n version: number;\n deploymentId: string;\n resourceName: string;\n category?: string;\n description?: string;\n diagram?: string;\n suspended: boolean;\n tenantId?: string;\n versionTag?: string;\n historyTimeToLive?: number;\n startableInTasklist: boolean;\n};\n\nexport type ProcessDefinitionQueryParams = {\n key?: string;\n name?: string;\n latestVersion?: boolean;\n active?: boolean;\n suspended?: boolean;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type ProcessXmlResponse = {\n bpmn20Xml: string;\n processDefinitionId: string;\n};\n\nexport type ActivityInstanceTree = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n processDefinitionId: string;\n childActivityInstances: ActivityInstanceTree[];\n childTransitionInstances: TransitionInstance[];\n executionIds: string[];\n incidentIds: string[];\n};\n\nexport type TransitionInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n processDefinitionId: string;\n executionId: string;\n incidentIds: string[];\n};\n\nexport type HistoryActivityInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processDefinitionId: string;\n processDefinitionKey: string;\n processInstanceId: string;\n executionId: string;\n taskId?: string;\n assignee?: string;\n calledProcessInstanceId?: string;\n calledCaseInstanceId?: string;\n startTime: string;\n endTime?: string;\n durationInMillis?: number;\n canceled: boolean;\n completeScope: boolean;\n tenantId?: string;\n removalTime?: string;\n rootProcessInstanceId: string;\n};\n\nexport type HistoryActivityQueryParams = {\n processInstanceId?: string;\n activityId?: string;\n activityType?: string;\n finished?: boolean;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type HistoryVariableInstance = {\n id: string;\n name: string;\n type: string;\n value: CamundaVariableValue;\n valueInfo?: Record<string, unknown>;\n processDefinitionKey: string;\n processDefinitionId: string;\n processInstanceId: string;\n executionId: string;\n activityInstanceId?: string;\n taskId?: string;\n tenantId?: string;\n errorMessage?: string;\n state: string;\n createTime: string;\n removalTime?: string;\n rootProcessInstanceId: string;\n};\n\nexport type HistoryVariableQueryParams = {\n processInstanceId?: string;\n variableName?: string;\n deserializeValues?: boolean;\n tenantIdIn?: string;\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type TaskFormData = {\n key?: string;\n contextPath?: string;\n camundaFormRef?: {\n key: string;\n binding: string;\n version?: number;\n };\n};\n\nexport type StartFormInfo = {\n key?: string;\n contextPath?: string;\n camundaFormRef?: {\n key: string;\n binding: string;\n version?: number;\n };\n};\n\nexport type CamundaFormDefinition = {\n components?: CamundaFormComponent[];\n type?: string;\n id?: string;\n schemaVersion?: number;\n};\n\nexport type CamundaFormComponent = {\n key: string;\n label?: string;\n type: string;\n validate?: {\n required?: boolean;\n readonly?: boolean;\n };\n defaultValue?: CamundaVariableValue;\n values?: Array<{ label: string; value: string }>;\n properties?: Record<string, unknown>;\n};\n\nexport type UserOperationLog = {\n id: string;\n processDefinitionId?: string;\n processDefinitionKey?: string;\n processInstanceId?: string;\n executionId?: string;\n taskId?: string;\n userId: string;\n timestamp: string;\n operationId: string;\n operationType: string;\n entityType: string;\n property?: string;\n orgValue?: string;\n newValue?: string;\n tenantId?: string;\n};\n\nexport type UserOperationLogQueryParams = {\n processInstanceId?: string;\n taskId?: string;\n userId?: string;\n operationType?: string;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n firstResult?: number;\n maxResults?: number;\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type ProcessInstanceModification = {\n instructions: Array<{\n type:\n | \"cancel\"\n | \"startBeforeActivity\"\n | \"startAfterActivity\"\n | \"startTransition\";\n activityId?: string;\n transitionId?: string;\n activityInstanceId?: string;\n transitionInstanceId?: string;\n ancestorActivityInstanceId?: string;\n variables?: Record<string, { value: CamundaVariableValue; type?: string }>;\n }>;\n skipCustomListeners?: boolean;\n skipIoMappings?: boolean;\n};\n\nexport type Role = {\n code: string;\n name: string;\n description?: string;\n};\n\nexport type BpmClient = {\n /**\n * Get approval URL for Workflow Center\n * @param processDefinitionId - Format: \"{processKey}:{version}:{deploymentId}\"\n * @param processInstanceId - Process instance ID\n * @returns Approval URL: https://{baseDomain}/bpmn-center/{processKey}/{processInstanceId}?appId={appId}&env={env}\n */\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string;\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>>;\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>>;\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>>;\n deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>>;\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>>;\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>>;\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>>;\n getTask(taskId: string): Promise<ClientResult<Task>>;\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>>;\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>>;\n completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>>;\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>>;\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>>;\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>>;\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>>;\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>>;\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>>;\n\n // ============================================\n // 流程定义 & XML\n // ============================================\n\n /** 获取流程定义列表 */\n getProcessDefinitions(\n params?: ProcessDefinitionQueryParams\n ): Promise<ClientResult<ProcessDefinitionFull[]>>;\n\n /** 获取流程 XML(带 tenantId 支持) */\n getProcessXml(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<ProcessXmlResponse>>;\n\n // ============================================\n // 活动实例树(运行时)\n // ============================================\n\n /** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */\n getActivityInstanceTree(\n processInstanceId: string\n ): Promise<ClientResult<ActivityInstanceTree>>;\n\n // ============================================\n // 流程变量(运行时)\n // ============================================\n\n /** 获取运行时流程变量 */\n getRuntimeVariables(\n processInstanceId: string\n ): Promise<ClientResult<Record<string, { value: CamundaVariableValue; type: string }>>>;\n\n // ============================================\n // 任务操作\n // ============================================\n\n /** 转办任务 */\n delegateTask(taskId: string, userId: string): Promise<ClientResult<null>>;\n\n // ============================================\n // 任务表单\n // ============================================\n\n /** 获取任务表单元数据 */\n getTaskForm(taskId: string): Promise<ClientResult<TaskFormData>>;\n\n /** 获取任务渲染后的表单 HTML */\n getTaskRenderedForm(taskId: string): Promise<ClientResult<string>>;\n\n /** 获取任务部署的表单定义 */\n getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>>;\n\n // ============================================\n // 启动表单\n // ============================================\n\n /** 获取流程启动表单信息 */\n getStartFormInfo(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<StartFormInfo>>;\n\n /** 获取流程启动表单变量 */\n getStartFormVariables(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<TaskFormVariables>>;\n\n /** 获取流程部署的启动表单 */\n getDeployedStartForm(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<CamundaFormDefinition>>;\n\n // ============================================\n // 历史查询\n // ============================================\n\n /** 查询历史活动实例(流程执行轨迹) */\n getHistoryActivityInstances(\n params?: HistoryActivityQueryParams\n ): Promise<ClientResult<HistoryActivityInstance[]>>;\n\n /** 查询历史变量实例 */\n getHistoryVariableInstances(\n params?: HistoryVariableQueryParams\n ): Promise<ClientResult<HistoryVariableInstance[]>>;\n\n /** 获取操作日志 */\n getUserOperationLogs(\n params?: UserOperationLogQueryParams\n ): Promise<ClientResult<UserOperationLog[]>>;\n\n /** 删除历史流程实例 */\n deleteHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<null>>;\n\n // ============================================\n // 流程干预\n // ============================================\n\n /** 挂起流程实例 */\n suspendProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;\n\n /** 激活流程实例 */\n activateProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;\n\n /** 修改流程实例(用于跳转等操作) */\n modifyProcessInstance(\n processInstanceId: string,\n modification: ProcessInstanceModification\n ): Promise<ClientResult<null>>;\n\n // ============================================\n // 角色\n // ============================================\n\n /** 获取当前租户的角色列表 */\n getRoles(): Promise<ClientResult<Role[]>>;\n\n /** 获取指定用户的角色列表 */\n getUserRoles(userId: string): Promise<ClientResult<Role[]>>;\n};\n\nfunction isVariableSubmission(x: unknown): x is VariableSubmission {\n return (\n x !== null &&\n x !== undefined &&\n typeof x === \"object\" &&\n \"variables\" in x &&\n typeof (x as VariableSubmission).variables === \"object\" &&\n (x as VariableSubmission).variables !== null\n );\n}\n\n/**\n * Check if a string value looks like a date\n */\nfunction isDateLikeString(value: string): boolean {\n if (!value || typeof value !== \"string\") return false;\n\n // ISO 8601 formats: 2026-01-28T15:23:39.513Z, 2026-01-28T23:23, 2026-01-28\n const isoPattern = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[+-]\\d{4})?)?$/;\n if (isoPattern.test(value)) return true;\n\n // Try parsing as date\n const timestamp = Date.parse(value);\n return !isNaN(timestamp);\n}\n\n/**\n * Format Date value for Camunda\n * Camunda expects format: yyyy-MM-dd'T'HH:mm:ss.SSS+0000\n * JavaScript toISOString returns: 2025-02-03T00:00:00.000Z\n * Need to replace 'Z' with '+0000' for Java Date parsing\n */\nfunction formatDateForCamunda(date: Date | string | number): string {\n let dateObj: Date;\n\n if (date instanceof Date) {\n dateObj = date;\n } else if (typeof date === \"number\") {\n dateObj = new Date(date);\n } else if (typeof date === \"string\") {\n dateObj = new Date(date);\n if (isNaN(dateObj.getTime())) {\n return date; // Return original if invalid\n }\n } else {\n dateObj = new Date(date as number);\n }\n\n // Format as: yyyy-MM-dd'T'HH:mm:ss.SSS+0000 for Camunda Java Date parsing\n return dateObj.toISOString().replace(\"Z\", \"+0000\");\n}\n\nfunction inferType(value: CamundaVariableValue): CamundaVariableType | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return \"String\";\n }\n if (typeof value === \"boolean\") {\n return \"Boolean\";\n }\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? \"Long\" : \"Double\";\n }\n if (value instanceof Date) {\n return \"Date\";\n }\n if (typeof value === \"object\") {\n return \"Json\";\n }\n return undefined;\n}\n\nfunction processVariableValue(v: unknown): CamundaVariable {\n if (v && typeof v === \"object\" && \"value\" in v && (\"type\" in v || Object.keys(v).length <= 2)) {\n const variable = v as CamundaVariable;\n\n if (variable.value instanceof Date) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n if (\n variable.type === \"Date\" &&\n (typeof variable.value === \"string\" || typeof variable.value === \"number\")\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n // Check if String type value looks like a date\n if (\n variable.type === \"String\" &&\n typeof variable.value === \"string\" &&\n isDateLikeString(variable.value)\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"String\",\n };\n }\n\n return variable;\n }\n\n if (v instanceof Date) {\n return {\n value: formatDateForCamunda(v),\n type: \"Date\",\n };\n }\n\n const camundaValue = v as CamundaVariableValue;\n return { value: camundaValue, type: inferType(camundaValue) };\n}\n\nfunction toVariableSubmission(\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n): VariableSubmission {\n if (!inputs) {\n return { variables: {} };\n }\n\n if (isVariableSubmission(inputs)) {\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs.variables)) {\n variables[k] = processVariableValue(v);\n }\n return { variables };\n }\n\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs)) {\n variables[k] = processVariableValue(v);\n }\n\n return { variables };\n}\n\nfunction encodeQuery(params?: Record<string, string | number | boolean | undefined>): string {\n if (!params) {\n return \"\";\n }\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) {\n continue;\n }\n sp.append(k, String(v));\n }\n const q = sp.toString();\n return q ? `?${q}` : \"\";\n}\n\nfunction noContentToNull<T>(r: ClientResult<T>): ClientResult<T | null> {\n if (r.status === 204) {\n return { ...r, data: null };\n }\n return r;\n}\n\nexport function createBpmClient(http: HttpClient = createHttpClient()): BpmClient {\n return {\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string {\n // Extract processKey from processDefinitionId (format: \"processKey:version:deploymentId\")\n const processKey = processDefinitionId?.split(\":\")[0] || \"\";\n const baseDomain = getBaseDomain();\n const appId = extractAppIdFromUrl() || \"\";\n const env = extractEnvFromUrl();\n const protocol = typeof window !== \"undefined\" ? window.location.protocol : \"https:\";\n return `${protocol}//${baseDomain}/bpmn-center?processKey=${processKey}&instanceId=${processInstanceId}&appId=${appId}&env=${env}`;\n },\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>> {\n if (!processKey) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process key is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/start/${processKey}`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n },\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>> {\n return http.request<ProcessInstance[]>({\n url: `/api/bpm/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n async deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\n }\n const q = params?.skipCustomListeners ? \"?skipCustomListeners=true\" : \"\";\n const result = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}${q}`,\n method: \"delete\",\n });\n return noContentToNull(result) as ClientResult<null>;\n },\n\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ActivityInstance[]>({\n url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,\n method: \"get\",\n });\n },\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<Task[]>({\n url: `/api/bpm/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTask(taskId: string): Promise<ClientResult<Task>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<Task>({\n url: `/api/bpm/task/${taskId}`,\n method: \"get\",\n });\n },\n\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(opts?.redirect ? { redirect: opts.redirect } : undefined);\n return http.request<TaskFormSchema>({\n url: `/api/bpm/task/${taskId}/form-schema${q}`,\n method: \"get\",\n });\n },\n\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<TaskFormVariables>({\n url: `/api/bpm/task/${taskId}/form-variables`,\n method: \"get\",\n });\n },\n\n async completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>> {\n if (!taskId) {\n return {\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n };\n }\n const r = await http.request<null>({\n url: `/api/bpm/task/${taskId}/complete`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<HistoryTask[]>({\n url: `/api/bpm/history/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/history/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>> {\n return http.request<HistoryProcessInstance[]>({\n url: `/api/bpm/history/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>> {\n return http.request<{ count: number }>({\n url: `/api/bpm/history/process-instance/count${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<HistoryProcessInstance>({\n url: `/api/bpm/history/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>> {\n if (!params.processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(params);\n return http.request<ProcessVariable[]>({\n url: `/api/bpm/history/variable-instance${q}`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 流程定义 & XML\n // ============================================\n\n getProcessDefinitions(\n params?: ProcessDefinitionQueryParams\n ): Promise<ClientResult<ProcessDefinitionFull[]>> {\n return http.request<ProcessDefinitionFull[]>({\n url: `/api/bpm/process-definition${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getProcessXml(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<ProcessXmlResponse>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/xml`\n : `/api/bpm/xml/${processKey}`;\n return http.request<ProcessXmlResponse>({\n url,\n method: \"get\",\n });\n },\n\n // ============================================\n // 活动实例树(运行时)\n // ============================================\n\n getActivityInstanceTree(\n processInstanceId: string\n ): Promise<ClientResult<ActivityInstanceTree>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ActivityInstanceTree>({\n url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 流程变量(运行时)\n // ============================================\n\n getRuntimeVariables(\n processInstanceId: string\n ): Promise<ClientResult<Record<string, { value: CamundaVariableValue; type: string }>>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<Record<string, { value: CamundaVariableValue; type: string }>>({\n url: `/api/bpm/process-instance/${processInstanceId}/variables`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 任务操作\n // ============================================\n\n async delegateTask(taskId: string, userId: string): Promise<ClientResult<null>> {\n if (!taskId) {\n return { data: null, error: { message: \"Task ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/task/${taskId}/delegate`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: { userId },\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n // ============================================\n // 任务表单\n // ============================================\n\n getTaskForm(taskId: string): Promise<ClientResult<TaskFormData>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<TaskFormData>({\n url: `/api/bpm/task/${taskId}/form`,\n method: \"get\",\n });\n },\n\n getTaskRenderedForm(taskId: string): Promise<ClientResult<string>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<string>({\n url: `/api/bpm/task/${taskId}/rendered-form`,\n method: \"get\",\n });\n },\n\n getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<CamundaFormDefinition>({\n url: `/api/bpm/task/${taskId}/deployed-form`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 启动表单\n // ============================================\n\n getStartFormInfo(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<StartFormInfo>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/start-form`\n : `/api/bpm/start-form/${processKey}`;\n return http.request<StartFormInfo>({\n url,\n method: \"get\",\n });\n },\n\n getStartFormVariables(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<TaskFormVariables>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/form-variables`\n : `/api/bpm/process-definition/key/${processKey}/form-variables`;\n return http.request<TaskFormVariables>({\n url,\n method: \"get\",\n });\n },\n\n getDeployedStartForm(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<CamundaFormDefinition>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/deployed-start-form`\n : `/api/bpm/deployed-start-form/${processKey}`;\n return http.request<CamundaFormDefinition>({\n url,\n method: \"get\",\n });\n },\n\n // ============================================\n // 历史查询\n // ============================================\n\n getHistoryActivityInstances(\n params?: HistoryActivityQueryParams\n ): Promise<ClientResult<HistoryActivityInstance[]>> {\n return http.request<HistoryActivityInstance[]>({\n url: `/api/bpm/history/activity-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryVariableInstances(\n params?: HistoryVariableQueryParams\n ): Promise<ClientResult<HistoryVariableInstance[]>> {\n return http.request<HistoryVariableInstance[]>({\n url: `/api/bpm/history/variable-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getUserOperationLogs(\n params?: UserOperationLogQueryParams\n ): Promise<ClientResult<UserOperationLog[]>> {\n return http.request<UserOperationLog[]>({\n url: `/api/bpm/history/user-operation${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n async deleteHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/history/process-instance/${processInstanceId}`,\n method: \"delete\",\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n // ============================================\n // 流程干预\n // ============================================\n\n async suspendProcessInstance(processInstanceId: string): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}/suspended`,\n method: \"put\",\n headers: { \"Content-Type\": \"application/json\" },\n data: { suspended: true },\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n async activateProcessInstance(processInstanceId: string): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}/suspended`,\n method: \"put\",\n headers: { \"Content-Type\": \"application/json\" },\n data: { suspended: false },\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n async modifyProcessInstance(\n processInstanceId: string,\n modification: ProcessInstanceModification\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}/modification`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: modification,\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n // ============================================\n // 角色\n // ============================================\n\n getRoles(): Promise<ClientResult<Role[]>> {\n return http.request<Role[]>({\n url: \"/api/runtime/rbac/roles\",\n method: \"get\",\n });\n },\n\n async getUserRoles(userId: string): Promise<ClientResult<Role[]>> {\n if (!userId) {\n return { data: null, error: { message: \"User ID is required\", status: 400 }, status: 400 };\n }\n // Runtime RBAC returns { data: Role[], statusCode: number, message: string }\n const r = await http.request<{ data: Role[]; statusCode: number; message: string }>({\n url: `/api/runtime/rbac/users/${userId}/roles`,\n method: \"get\",\n });\n if (r.error) {\n return { data: [], error: r.error, status: r.status };\n }\n return { data: r.data?.data || [], error: null, status: r.status };\n },\n };\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -177,6 +177,203 @@ type HistoryTaskQueryParams = {
|
|
|
177
177
|
sortOrder?: "asc" | "desc";
|
|
178
178
|
[key: string]: string | number | boolean | undefined;
|
|
179
179
|
};
|
|
180
|
+
type ProcessDefinitionFull = {
|
|
181
|
+
id: string;
|
|
182
|
+
key: string;
|
|
183
|
+
name: string;
|
|
184
|
+
version: number;
|
|
185
|
+
deploymentId: string;
|
|
186
|
+
resourceName: string;
|
|
187
|
+
category?: string;
|
|
188
|
+
description?: string;
|
|
189
|
+
diagram?: string;
|
|
190
|
+
suspended: boolean;
|
|
191
|
+
tenantId?: string;
|
|
192
|
+
versionTag?: string;
|
|
193
|
+
historyTimeToLive?: number;
|
|
194
|
+
startableInTasklist: boolean;
|
|
195
|
+
};
|
|
196
|
+
type ProcessDefinitionQueryParams = {
|
|
197
|
+
key?: string;
|
|
198
|
+
name?: string;
|
|
199
|
+
latestVersion?: boolean;
|
|
200
|
+
active?: boolean;
|
|
201
|
+
suspended?: boolean;
|
|
202
|
+
sortBy?: string;
|
|
203
|
+
sortOrder?: "asc" | "desc";
|
|
204
|
+
[key: string]: string | number | boolean | undefined;
|
|
205
|
+
};
|
|
206
|
+
type ProcessXmlResponse = {
|
|
207
|
+
bpmn20Xml: string;
|
|
208
|
+
processDefinitionId: string;
|
|
209
|
+
};
|
|
210
|
+
type ActivityInstanceTree = {
|
|
211
|
+
id: string;
|
|
212
|
+
activityId: string;
|
|
213
|
+
activityName: string;
|
|
214
|
+
activityType: string;
|
|
215
|
+
processInstanceId: string;
|
|
216
|
+
processDefinitionId: string;
|
|
217
|
+
childActivityInstances: ActivityInstanceTree[];
|
|
218
|
+
childTransitionInstances: TransitionInstance[];
|
|
219
|
+
executionIds: string[];
|
|
220
|
+
incidentIds: string[];
|
|
221
|
+
};
|
|
222
|
+
type TransitionInstance = {
|
|
223
|
+
id: string;
|
|
224
|
+
activityId: string;
|
|
225
|
+
activityName: string;
|
|
226
|
+
activityType: string;
|
|
227
|
+
processInstanceId: string;
|
|
228
|
+
processDefinitionId: string;
|
|
229
|
+
executionId: string;
|
|
230
|
+
incidentIds: string[];
|
|
231
|
+
};
|
|
232
|
+
type HistoryActivityInstance = {
|
|
233
|
+
id: string;
|
|
234
|
+
activityId: string;
|
|
235
|
+
activityName: string;
|
|
236
|
+
activityType: string;
|
|
237
|
+
processDefinitionId: string;
|
|
238
|
+
processDefinitionKey: string;
|
|
239
|
+
processInstanceId: string;
|
|
240
|
+
executionId: string;
|
|
241
|
+
taskId?: string;
|
|
242
|
+
assignee?: string;
|
|
243
|
+
calledProcessInstanceId?: string;
|
|
244
|
+
calledCaseInstanceId?: string;
|
|
245
|
+
startTime: string;
|
|
246
|
+
endTime?: string;
|
|
247
|
+
durationInMillis?: number;
|
|
248
|
+
canceled: boolean;
|
|
249
|
+
completeScope: boolean;
|
|
250
|
+
tenantId?: string;
|
|
251
|
+
removalTime?: string;
|
|
252
|
+
rootProcessInstanceId: string;
|
|
253
|
+
};
|
|
254
|
+
type HistoryActivityQueryParams = {
|
|
255
|
+
processInstanceId?: string;
|
|
256
|
+
activityId?: string;
|
|
257
|
+
activityType?: string;
|
|
258
|
+
finished?: boolean;
|
|
259
|
+
sortBy?: string;
|
|
260
|
+
sortOrder?: "asc" | "desc";
|
|
261
|
+
[key: string]: string | number | boolean | undefined;
|
|
262
|
+
};
|
|
263
|
+
type HistoryVariableInstance = {
|
|
264
|
+
id: string;
|
|
265
|
+
name: string;
|
|
266
|
+
type: string;
|
|
267
|
+
value: CamundaVariableValue;
|
|
268
|
+
valueInfo?: Record<string, unknown>;
|
|
269
|
+
processDefinitionKey: string;
|
|
270
|
+
processDefinitionId: string;
|
|
271
|
+
processInstanceId: string;
|
|
272
|
+
executionId: string;
|
|
273
|
+
activityInstanceId?: string;
|
|
274
|
+
taskId?: string;
|
|
275
|
+
tenantId?: string;
|
|
276
|
+
errorMessage?: string;
|
|
277
|
+
state: string;
|
|
278
|
+
createTime: string;
|
|
279
|
+
removalTime?: string;
|
|
280
|
+
rootProcessInstanceId: string;
|
|
281
|
+
};
|
|
282
|
+
type HistoryVariableQueryParams = {
|
|
283
|
+
processInstanceId?: string;
|
|
284
|
+
variableName?: string;
|
|
285
|
+
deserializeValues?: boolean;
|
|
286
|
+
tenantIdIn?: string;
|
|
287
|
+
[key: string]: string | number | boolean | undefined;
|
|
288
|
+
};
|
|
289
|
+
type TaskFormData = {
|
|
290
|
+
key?: string;
|
|
291
|
+
contextPath?: string;
|
|
292
|
+
camundaFormRef?: {
|
|
293
|
+
key: string;
|
|
294
|
+
binding: string;
|
|
295
|
+
version?: number;
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
type StartFormInfo = {
|
|
299
|
+
key?: string;
|
|
300
|
+
contextPath?: string;
|
|
301
|
+
camundaFormRef?: {
|
|
302
|
+
key: string;
|
|
303
|
+
binding: string;
|
|
304
|
+
version?: number;
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
type CamundaFormDefinition = {
|
|
308
|
+
components?: CamundaFormComponent[];
|
|
309
|
+
type?: string;
|
|
310
|
+
id?: string;
|
|
311
|
+
schemaVersion?: number;
|
|
312
|
+
};
|
|
313
|
+
type CamundaFormComponent = {
|
|
314
|
+
key: string;
|
|
315
|
+
label?: string;
|
|
316
|
+
type: string;
|
|
317
|
+
validate?: {
|
|
318
|
+
required?: boolean;
|
|
319
|
+
readonly?: boolean;
|
|
320
|
+
};
|
|
321
|
+
defaultValue?: CamundaVariableValue;
|
|
322
|
+
values?: Array<{
|
|
323
|
+
label: string;
|
|
324
|
+
value: string;
|
|
325
|
+
}>;
|
|
326
|
+
properties?: Record<string, unknown>;
|
|
327
|
+
};
|
|
328
|
+
type UserOperationLog = {
|
|
329
|
+
id: string;
|
|
330
|
+
processDefinitionId?: string;
|
|
331
|
+
processDefinitionKey?: string;
|
|
332
|
+
processInstanceId?: string;
|
|
333
|
+
executionId?: string;
|
|
334
|
+
taskId?: string;
|
|
335
|
+
userId: string;
|
|
336
|
+
timestamp: string;
|
|
337
|
+
operationId: string;
|
|
338
|
+
operationType: string;
|
|
339
|
+
entityType: string;
|
|
340
|
+
property?: string;
|
|
341
|
+
orgValue?: string;
|
|
342
|
+
newValue?: string;
|
|
343
|
+
tenantId?: string;
|
|
344
|
+
};
|
|
345
|
+
type UserOperationLogQueryParams = {
|
|
346
|
+
processInstanceId?: string;
|
|
347
|
+
taskId?: string;
|
|
348
|
+
userId?: string;
|
|
349
|
+
operationType?: string;
|
|
350
|
+
sortBy?: string;
|
|
351
|
+
sortOrder?: "asc" | "desc";
|
|
352
|
+
firstResult?: number;
|
|
353
|
+
maxResults?: number;
|
|
354
|
+
[key: string]: string | number | boolean | undefined;
|
|
355
|
+
};
|
|
356
|
+
type ProcessInstanceModification = {
|
|
357
|
+
instructions: Array<{
|
|
358
|
+
type: "cancel" | "startBeforeActivity" | "startAfterActivity" | "startTransition";
|
|
359
|
+
activityId?: string;
|
|
360
|
+
transitionId?: string;
|
|
361
|
+
activityInstanceId?: string;
|
|
362
|
+
transitionInstanceId?: string;
|
|
363
|
+
ancestorActivityInstanceId?: string;
|
|
364
|
+
variables?: Record<string, {
|
|
365
|
+
value: CamundaVariableValue;
|
|
366
|
+
type?: string;
|
|
367
|
+
}>;
|
|
368
|
+
}>;
|
|
369
|
+
skipCustomListeners?: boolean;
|
|
370
|
+
skipIoMappings?: boolean;
|
|
371
|
+
};
|
|
372
|
+
type Role = {
|
|
373
|
+
code: string;
|
|
374
|
+
name: string;
|
|
375
|
+
description?: string;
|
|
376
|
+
};
|
|
180
377
|
type BpmClient = {
|
|
181
378
|
/**
|
|
182
379
|
* Get approval URL for Workflow Center
|
|
@@ -211,7 +408,50 @@ type BpmClient = {
|
|
|
211
408
|
processInstanceId: string;
|
|
212
409
|
variableName?: string;
|
|
213
410
|
}): Promise<ClientResult<ProcessVariable[]>>;
|
|
411
|
+
/** 获取流程定义列表 */
|
|
412
|
+
getProcessDefinitions(params?: ProcessDefinitionQueryParams): Promise<ClientResult<ProcessDefinitionFull[]>>;
|
|
413
|
+
/** 获取流程 XML(带 tenantId 支持) */
|
|
414
|
+
getProcessXml(processKey: string, tenantId?: string): Promise<ClientResult<ProcessXmlResponse>>;
|
|
415
|
+
/** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */
|
|
416
|
+
getActivityInstanceTree(processInstanceId: string): Promise<ClientResult<ActivityInstanceTree>>;
|
|
417
|
+
/** 获取运行时流程变量 */
|
|
418
|
+
getRuntimeVariables(processInstanceId: string): Promise<ClientResult<Record<string, {
|
|
419
|
+
value: CamundaVariableValue;
|
|
420
|
+
type: string;
|
|
421
|
+
}>>>;
|
|
422
|
+
/** 转办任务 */
|
|
423
|
+
delegateTask(taskId: string, userId: string): Promise<ClientResult<null>>;
|
|
424
|
+
/** 获取任务表单元数据 */
|
|
425
|
+
getTaskForm(taskId: string): Promise<ClientResult<TaskFormData>>;
|
|
426
|
+
/** 获取任务渲染后的表单 HTML */
|
|
427
|
+
getTaskRenderedForm(taskId: string): Promise<ClientResult<string>>;
|
|
428
|
+
/** 获取任务部署的表单定义 */
|
|
429
|
+
getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>>;
|
|
430
|
+
/** 获取流程启动表单信息 */
|
|
431
|
+
getStartFormInfo(processKey: string, tenantId?: string): Promise<ClientResult<StartFormInfo>>;
|
|
432
|
+
/** 获取流程启动表单变量 */
|
|
433
|
+
getStartFormVariables(processKey: string, tenantId?: string): Promise<ClientResult<TaskFormVariables>>;
|
|
434
|
+
/** 获取流程部署的启动表单 */
|
|
435
|
+
getDeployedStartForm(processKey: string, tenantId?: string): Promise<ClientResult<CamundaFormDefinition>>;
|
|
436
|
+
/** 查询历史活动实例(流程执行轨迹) */
|
|
437
|
+
getHistoryActivityInstances(params?: HistoryActivityQueryParams): Promise<ClientResult<HistoryActivityInstance[]>>;
|
|
438
|
+
/** 查询历史变量实例 */
|
|
439
|
+
getHistoryVariableInstances(params?: HistoryVariableQueryParams): Promise<ClientResult<HistoryVariableInstance[]>>;
|
|
440
|
+
/** 获取操作日志 */
|
|
441
|
+
getUserOperationLogs(params?: UserOperationLogQueryParams): Promise<ClientResult<UserOperationLog[]>>;
|
|
442
|
+
/** 删除历史流程实例 */
|
|
443
|
+
deleteHistoryProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;
|
|
444
|
+
/** 挂起流程实例 */
|
|
445
|
+
suspendProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;
|
|
446
|
+
/** 激活流程实例 */
|
|
447
|
+
activateProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;
|
|
448
|
+
/** 修改流程实例(用于跳转等操作) */
|
|
449
|
+
modifyProcessInstance(processInstanceId: string, modification: ProcessInstanceModification): Promise<ClientResult<null>>;
|
|
450
|
+
/** 获取当前租户的角色列表 */
|
|
451
|
+
getRoles(): Promise<ClientResult<Role[]>>;
|
|
452
|
+
/** 获取指定用户的角色列表 */
|
|
453
|
+
getUserRoles(userId: string): Promise<ClientResult<Role[]>>;
|
|
214
454
|
};
|
|
215
455
|
declare function createBpmClient(http?: HttpClient): BpmClient;
|
|
216
456
|
|
|
217
|
-
export { type ActivityInstance, type BpmClient, type CamundaVariable, type CamundaVariableType, type CamundaVariableValue, type HistoryProcessInstance, type HistoryProcessInstanceQueryParams, type HistoryTask, type HistoryTaskQueryParams, type ProcessInstance, type ProcessInstanceQueryParams, type ProcessVariable, type Task, type TaskCount, type TaskFormField, type TaskFormSchema, type TaskFormVariable, type TaskFormVariables, type TaskQueryParams, type VariableSubmission, createBpmClient };
|
|
457
|
+
export { type ActivityInstance, type ActivityInstanceTree, type BpmClient, type CamundaFormComponent, type CamundaFormDefinition, type CamundaVariable, type CamundaVariableType, type CamundaVariableValue, type HistoryActivityInstance, type HistoryActivityQueryParams, type HistoryProcessInstance, type HistoryProcessInstanceQueryParams, type HistoryTask, type HistoryTaskQueryParams, type HistoryVariableInstance, type HistoryVariableQueryParams, type ProcessDefinitionFull, type ProcessDefinitionQueryParams, type ProcessInstance, type ProcessInstanceModification, type ProcessInstanceQueryParams, type ProcessVariable, type ProcessXmlResponse, type Role, type StartFormInfo, type Task, type TaskCount, type TaskFormData, type TaskFormField, type TaskFormSchema, type TaskFormVariable, type TaskFormVariables, type TaskQueryParams, type TransitionInstance, type UserOperationLog, type UserOperationLogQueryParams, type VariableSubmission, createBpmClient };
|
package/dist/index.d.ts
CHANGED
|
@@ -177,6 +177,203 @@ type HistoryTaskQueryParams = {
|
|
|
177
177
|
sortOrder?: "asc" | "desc";
|
|
178
178
|
[key: string]: string | number | boolean | undefined;
|
|
179
179
|
};
|
|
180
|
+
type ProcessDefinitionFull = {
|
|
181
|
+
id: string;
|
|
182
|
+
key: string;
|
|
183
|
+
name: string;
|
|
184
|
+
version: number;
|
|
185
|
+
deploymentId: string;
|
|
186
|
+
resourceName: string;
|
|
187
|
+
category?: string;
|
|
188
|
+
description?: string;
|
|
189
|
+
diagram?: string;
|
|
190
|
+
suspended: boolean;
|
|
191
|
+
tenantId?: string;
|
|
192
|
+
versionTag?: string;
|
|
193
|
+
historyTimeToLive?: number;
|
|
194
|
+
startableInTasklist: boolean;
|
|
195
|
+
};
|
|
196
|
+
type ProcessDefinitionQueryParams = {
|
|
197
|
+
key?: string;
|
|
198
|
+
name?: string;
|
|
199
|
+
latestVersion?: boolean;
|
|
200
|
+
active?: boolean;
|
|
201
|
+
suspended?: boolean;
|
|
202
|
+
sortBy?: string;
|
|
203
|
+
sortOrder?: "asc" | "desc";
|
|
204
|
+
[key: string]: string | number | boolean | undefined;
|
|
205
|
+
};
|
|
206
|
+
type ProcessXmlResponse = {
|
|
207
|
+
bpmn20Xml: string;
|
|
208
|
+
processDefinitionId: string;
|
|
209
|
+
};
|
|
210
|
+
type ActivityInstanceTree = {
|
|
211
|
+
id: string;
|
|
212
|
+
activityId: string;
|
|
213
|
+
activityName: string;
|
|
214
|
+
activityType: string;
|
|
215
|
+
processInstanceId: string;
|
|
216
|
+
processDefinitionId: string;
|
|
217
|
+
childActivityInstances: ActivityInstanceTree[];
|
|
218
|
+
childTransitionInstances: TransitionInstance[];
|
|
219
|
+
executionIds: string[];
|
|
220
|
+
incidentIds: string[];
|
|
221
|
+
};
|
|
222
|
+
type TransitionInstance = {
|
|
223
|
+
id: string;
|
|
224
|
+
activityId: string;
|
|
225
|
+
activityName: string;
|
|
226
|
+
activityType: string;
|
|
227
|
+
processInstanceId: string;
|
|
228
|
+
processDefinitionId: string;
|
|
229
|
+
executionId: string;
|
|
230
|
+
incidentIds: string[];
|
|
231
|
+
};
|
|
232
|
+
type HistoryActivityInstance = {
|
|
233
|
+
id: string;
|
|
234
|
+
activityId: string;
|
|
235
|
+
activityName: string;
|
|
236
|
+
activityType: string;
|
|
237
|
+
processDefinitionId: string;
|
|
238
|
+
processDefinitionKey: string;
|
|
239
|
+
processInstanceId: string;
|
|
240
|
+
executionId: string;
|
|
241
|
+
taskId?: string;
|
|
242
|
+
assignee?: string;
|
|
243
|
+
calledProcessInstanceId?: string;
|
|
244
|
+
calledCaseInstanceId?: string;
|
|
245
|
+
startTime: string;
|
|
246
|
+
endTime?: string;
|
|
247
|
+
durationInMillis?: number;
|
|
248
|
+
canceled: boolean;
|
|
249
|
+
completeScope: boolean;
|
|
250
|
+
tenantId?: string;
|
|
251
|
+
removalTime?: string;
|
|
252
|
+
rootProcessInstanceId: string;
|
|
253
|
+
};
|
|
254
|
+
type HistoryActivityQueryParams = {
|
|
255
|
+
processInstanceId?: string;
|
|
256
|
+
activityId?: string;
|
|
257
|
+
activityType?: string;
|
|
258
|
+
finished?: boolean;
|
|
259
|
+
sortBy?: string;
|
|
260
|
+
sortOrder?: "asc" | "desc";
|
|
261
|
+
[key: string]: string | number | boolean | undefined;
|
|
262
|
+
};
|
|
263
|
+
type HistoryVariableInstance = {
|
|
264
|
+
id: string;
|
|
265
|
+
name: string;
|
|
266
|
+
type: string;
|
|
267
|
+
value: CamundaVariableValue;
|
|
268
|
+
valueInfo?: Record<string, unknown>;
|
|
269
|
+
processDefinitionKey: string;
|
|
270
|
+
processDefinitionId: string;
|
|
271
|
+
processInstanceId: string;
|
|
272
|
+
executionId: string;
|
|
273
|
+
activityInstanceId?: string;
|
|
274
|
+
taskId?: string;
|
|
275
|
+
tenantId?: string;
|
|
276
|
+
errorMessage?: string;
|
|
277
|
+
state: string;
|
|
278
|
+
createTime: string;
|
|
279
|
+
removalTime?: string;
|
|
280
|
+
rootProcessInstanceId: string;
|
|
281
|
+
};
|
|
282
|
+
type HistoryVariableQueryParams = {
|
|
283
|
+
processInstanceId?: string;
|
|
284
|
+
variableName?: string;
|
|
285
|
+
deserializeValues?: boolean;
|
|
286
|
+
tenantIdIn?: string;
|
|
287
|
+
[key: string]: string | number | boolean | undefined;
|
|
288
|
+
};
|
|
289
|
+
type TaskFormData = {
|
|
290
|
+
key?: string;
|
|
291
|
+
contextPath?: string;
|
|
292
|
+
camundaFormRef?: {
|
|
293
|
+
key: string;
|
|
294
|
+
binding: string;
|
|
295
|
+
version?: number;
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
type StartFormInfo = {
|
|
299
|
+
key?: string;
|
|
300
|
+
contextPath?: string;
|
|
301
|
+
camundaFormRef?: {
|
|
302
|
+
key: string;
|
|
303
|
+
binding: string;
|
|
304
|
+
version?: number;
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
type CamundaFormDefinition = {
|
|
308
|
+
components?: CamundaFormComponent[];
|
|
309
|
+
type?: string;
|
|
310
|
+
id?: string;
|
|
311
|
+
schemaVersion?: number;
|
|
312
|
+
};
|
|
313
|
+
type CamundaFormComponent = {
|
|
314
|
+
key: string;
|
|
315
|
+
label?: string;
|
|
316
|
+
type: string;
|
|
317
|
+
validate?: {
|
|
318
|
+
required?: boolean;
|
|
319
|
+
readonly?: boolean;
|
|
320
|
+
};
|
|
321
|
+
defaultValue?: CamundaVariableValue;
|
|
322
|
+
values?: Array<{
|
|
323
|
+
label: string;
|
|
324
|
+
value: string;
|
|
325
|
+
}>;
|
|
326
|
+
properties?: Record<string, unknown>;
|
|
327
|
+
};
|
|
328
|
+
type UserOperationLog = {
|
|
329
|
+
id: string;
|
|
330
|
+
processDefinitionId?: string;
|
|
331
|
+
processDefinitionKey?: string;
|
|
332
|
+
processInstanceId?: string;
|
|
333
|
+
executionId?: string;
|
|
334
|
+
taskId?: string;
|
|
335
|
+
userId: string;
|
|
336
|
+
timestamp: string;
|
|
337
|
+
operationId: string;
|
|
338
|
+
operationType: string;
|
|
339
|
+
entityType: string;
|
|
340
|
+
property?: string;
|
|
341
|
+
orgValue?: string;
|
|
342
|
+
newValue?: string;
|
|
343
|
+
tenantId?: string;
|
|
344
|
+
};
|
|
345
|
+
type UserOperationLogQueryParams = {
|
|
346
|
+
processInstanceId?: string;
|
|
347
|
+
taskId?: string;
|
|
348
|
+
userId?: string;
|
|
349
|
+
operationType?: string;
|
|
350
|
+
sortBy?: string;
|
|
351
|
+
sortOrder?: "asc" | "desc";
|
|
352
|
+
firstResult?: number;
|
|
353
|
+
maxResults?: number;
|
|
354
|
+
[key: string]: string | number | boolean | undefined;
|
|
355
|
+
};
|
|
356
|
+
type ProcessInstanceModification = {
|
|
357
|
+
instructions: Array<{
|
|
358
|
+
type: "cancel" | "startBeforeActivity" | "startAfterActivity" | "startTransition";
|
|
359
|
+
activityId?: string;
|
|
360
|
+
transitionId?: string;
|
|
361
|
+
activityInstanceId?: string;
|
|
362
|
+
transitionInstanceId?: string;
|
|
363
|
+
ancestorActivityInstanceId?: string;
|
|
364
|
+
variables?: Record<string, {
|
|
365
|
+
value: CamundaVariableValue;
|
|
366
|
+
type?: string;
|
|
367
|
+
}>;
|
|
368
|
+
}>;
|
|
369
|
+
skipCustomListeners?: boolean;
|
|
370
|
+
skipIoMappings?: boolean;
|
|
371
|
+
};
|
|
372
|
+
type Role = {
|
|
373
|
+
code: string;
|
|
374
|
+
name: string;
|
|
375
|
+
description?: string;
|
|
376
|
+
};
|
|
180
377
|
type BpmClient = {
|
|
181
378
|
/**
|
|
182
379
|
* Get approval URL for Workflow Center
|
|
@@ -211,7 +408,50 @@ type BpmClient = {
|
|
|
211
408
|
processInstanceId: string;
|
|
212
409
|
variableName?: string;
|
|
213
410
|
}): Promise<ClientResult<ProcessVariable[]>>;
|
|
411
|
+
/** 获取流程定义列表 */
|
|
412
|
+
getProcessDefinitions(params?: ProcessDefinitionQueryParams): Promise<ClientResult<ProcessDefinitionFull[]>>;
|
|
413
|
+
/** 获取流程 XML(带 tenantId 支持) */
|
|
414
|
+
getProcessXml(processKey: string, tenantId?: string): Promise<ClientResult<ProcessXmlResponse>>;
|
|
415
|
+
/** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */
|
|
416
|
+
getActivityInstanceTree(processInstanceId: string): Promise<ClientResult<ActivityInstanceTree>>;
|
|
417
|
+
/** 获取运行时流程变量 */
|
|
418
|
+
getRuntimeVariables(processInstanceId: string): Promise<ClientResult<Record<string, {
|
|
419
|
+
value: CamundaVariableValue;
|
|
420
|
+
type: string;
|
|
421
|
+
}>>>;
|
|
422
|
+
/** 转办任务 */
|
|
423
|
+
delegateTask(taskId: string, userId: string): Promise<ClientResult<null>>;
|
|
424
|
+
/** 获取任务表单元数据 */
|
|
425
|
+
getTaskForm(taskId: string): Promise<ClientResult<TaskFormData>>;
|
|
426
|
+
/** 获取任务渲染后的表单 HTML */
|
|
427
|
+
getTaskRenderedForm(taskId: string): Promise<ClientResult<string>>;
|
|
428
|
+
/** 获取任务部署的表单定义 */
|
|
429
|
+
getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>>;
|
|
430
|
+
/** 获取流程启动表单信息 */
|
|
431
|
+
getStartFormInfo(processKey: string, tenantId?: string): Promise<ClientResult<StartFormInfo>>;
|
|
432
|
+
/** 获取流程启动表单变量 */
|
|
433
|
+
getStartFormVariables(processKey: string, tenantId?: string): Promise<ClientResult<TaskFormVariables>>;
|
|
434
|
+
/** 获取流程部署的启动表单 */
|
|
435
|
+
getDeployedStartForm(processKey: string, tenantId?: string): Promise<ClientResult<CamundaFormDefinition>>;
|
|
436
|
+
/** 查询历史活动实例(流程执行轨迹) */
|
|
437
|
+
getHistoryActivityInstances(params?: HistoryActivityQueryParams): Promise<ClientResult<HistoryActivityInstance[]>>;
|
|
438
|
+
/** 查询历史变量实例 */
|
|
439
|
+
getHistoryVariableInstances(params?: HistoryVariableQueryParams): Promise<ClientResult<HistoryVariableInstance[]>>;
|
|
440
|
+
/** 获取操作日志 */
|
|
441
|
+
getUserOperationLogs(params?: UserOperationLogQueryParams): Promise<ClientResult<UserOperationLog[]>>;
|
|
442
|
+
/** 删除历史流程实例 */
|
|
443
|
+
deleteHistoryProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;
|
|
444
|
+
/** 挂起流程实例 */
|
|
445
|
+
suspendProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;
|
|
446
|
+
/** 激活流程实例 */
|
|
447
|
+
activateProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;
|
|
448
|
+
/** 修改流程实例(用于跳转等操作) */
|
|
449
|
+
modifyProcessInstance(processInstanceId: string, modification: ProcessInstanceModification): Promise<ClientResult<null>>;
|
|
450
|
+
/** 获取当前租户的角色列表 */
|
|
451
|
+
getRoles(): Promise<ClientResult<Role[]>>;
|
|
452
|
+
/** 获取指定用户的角色列表 */
|
|
453
|
+
getUserRoles(userId: string): Promise<ClientResult<Role[]>>;
|
|
214
454
|
};
|
|
215
455
|
declare function createBpmClient(http?: HttpClient): BpmClient;
|
|
216
456
|
|
|
217
|
-
export { type ActivityInstance, type BpmClient, type CamundaVariable, type CamundaVariableType, type CamundaVariableValue, type HistoryProcessInstance, type HistoryProcessInstanceQueryParams, type HistoryTask, type HistoryTaskQueryParams, type ProcessInstance, type ProcessInstanceQueryParams, type ProcessVariable, type Task, type TaskCount, type TaskFormField, type TaskFormSchema, type TaskFormVariable, type TaskFormVariables, type TaskQueryParams, type VariableSubmission, createBpmClient };
|
|
457
|
+
export { type ActivityInstance, type ActivityInstanceTree, type BpmClient, type CamundaFormComponent, type CamundaFormDefinition, type CamundaVariable, type CamundaVariableType, type CamundaVariableValue, type HistoryActivityInstance, type HistoryActivityQueryParams, type HistoryProcessInstance, type HistoryProcessInstanceQueryParams, type HistoryTask, type HistoryTaskQueryParams, type HistoryVariableInstance, type HistoryVariableQueryParams, type ProcessDefinitionFull, type ProcessDefinitionQueryParams, type ProcessInstance, type ProcessInstanceModification, type ProcessInstanceQueryParams, type ProcessVariable, type ProcessXmlResponse, type Role, type StartFormInfo, type Task, type TaskCount, type TaskFormData, type TaskFormField, type TaskFormSchema, type TaskFormVariable, type TaskFormVariables, type TaskQueryParams, type TransitionInstance, type UserOperationLog, type UserOperationLogQueryParams, type VariableSubmission, createBpmClient };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {createHttpClient}from'@amaster.ai/http-client';function m(){if(typeof window>"u")return null;try{let
|
|
2
|
-
export{
|
|
1
|
+
import {createHttpClient}from'@amaster.ai/http-client';function m(){if(typeof window>"u")return null;try{let t=window.location.href,e=/\/app\/([\da-f-]+)(?:\/|$)/.exec(t);if(e&&e[1])return e[1];let s=window.location.hostname,r=/^www\.([\da-f-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(s);if(r&&r[1])return r[1];let n=/^([\da-f-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(s);return n&&n[1]?n[1]:null}catch{return null}}function g(){if(typeof window>"u")return "production";try{let t=window.location.hostname,e=/^www\.[\da-f-]+-([^.]+)\.[\w-]+\.(?:local|ai|cn)$/.exec(t);if(e&&e[1])return e[1];let s=/^[\da-f-]+-([^.]+)\.[\w-]+\.(?:local|ai|cn)$/.exec(t);return s&&s[1]?s[1]:"production"}catch{return "production"}}function o(){let t=m();if(!t)return null;let e=g();return `${t}_${e}`}function I(){if(typeof window>"u")return "amaster.ai";let t=window.location.hostname,e=t.split(".");if(e.length<=2)return t;let s=e.slice(-2).join(".");return s==="helige.cn"?"www.helige.cn":s}function b(t){return t!=null&&typeof t=="object"&&"variables"in t&&typeof t.variables=="object"&&t.variables!==null}function P(t){if(!t||typeof t!="string")return false;if(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[+-]\d{4})?)?$/.test(t))return true;let s=Date.parse(t);return !isNaN(s)}function l(t){let e;if(t instanceof Date)e=t;else if(typeof t=="number")e=new Date(t);else if(typeof t=="string"){if(e=new Date(t),isNaN(e.getTime()))return t}else e=new Date(t);return e.toISOString().replace("Z","+0000")}function f(t){if(t!=null){if(typeof t=="string")return "String";if(typeof t=="boolean")return "Boolean";if(typeof t=="number")return Number.isInteger(t)?"Long":"Double";if(t instanceof Date)return "Date";if(typeof t=="object")return "Json"}}function u(t){if(t&&typeof t=="object"&&"value"in t&&("type"in t||Object.keys(t).length<=2)){let s=t;return s.value instanceof Date?{value:l(s.value),type:"Date"}:s.type==="Date"&&(typeof s.value=="string"||typeof s.value=="number")?{value:l(s.value),type:"Date"}:s.type==="String"&&typeof s.value=="string"&&P(s.value)?{value:l(s.value),type:"String"}:s}if(t instanceof Date)return {value:l(t),type:"Date"};let e=t;return {value:e,type:f(e)}}function c(t){if(!t)return {variables:{}};if(b(t)){let s={};for(let[r,n]of Object.entries(t.variables))s[r]=u(n);return {variables:s}}let e={};for(let[s,r]of Object.entries(t))e[s]=u(r);return {variables:e}}function i(t){if(!t)return "";let e=new URLSearchParams;for(let[r,n]of Object.entries(t))n!=null&&e.append(r,String(n));let s=e.toString();return s?`?${s}`:""}function a(t){return t.status===204?{...t,data:null}:t}function C(t=createHttpClient()){return {getApprovalUrl(e,s){let r=e?.split(":")[0]||"",n=I(),d=m()||"",p=g();return `${typeof window<"u"?window.location.protocol:"https:"}//${n}/bpmn-center?processKey=${r}&instanceId=${s}&appId=${d}&env=${p}`},startProcess(e,s){return e?t.request({url:`/api/bpm/start/${e}`,method:"post",headers:{"Content-Type":"application/json"},data:c(s)}):Promise.resolve({data:null,error:{message:"Process key is required",status:400},status:400})},getProcessInstances(e){return t.request({url:`/api/bpm/process-instance${i(e)}`,method:"get"})},getProcessInstance(e){return e?t.request({url:`/api/bpm/process-instance/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},async deleteProcessInstance(e,s){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=s?.skipCustomListeners?"?skipCustomListeners=true":"",n=await t.request({url:`/api/bpm/process-instance/${e}${r}`,method:"delete"});return a(n)},getActiveActivities(e){return e?t.request({url:`/api/bpm/process-instance/${e}/activity-instances`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},getTasks(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/task${i(r)}`,method:"get"})},getTaskCount(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/task/count${i(r)}`,method:"get"})},getTask(e){return e?t.request({url:`/api/bpm/task/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskFormSchema(e,s){if(!e)return Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400});let r=i(s?.redirect?{redirect:s.redirect}:void 0);return t.request({url:`/api/bpm/task/${e}/form-schema${r}`,method:"get"})},getTaskFormVariables(e){return e?t.request({url:`/api/bpm/task/${e}/form-variables`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},async completeTask(e,s){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await t.request({url:`/api/bpm/task/${e}/complete`,method:"post",headers:{"Content-Type":"application/json"},data:c(s)});return a(r)},getHistoryTasks(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/history/task${i(r)}`,method:"get"})},getHistoryTaskCount(e){let s=o(),r=s?{...e,tenantIdIn:s}:e;return t.request({url:`/api/bpm/history/task/count${i(r)}`,method:"get"})},getHistoryProcessInstances(e){return t.request({url:`/api/bpm/history/process-instance${i(e)}`,method:"get"})},getHistoryProcessInstanceCount(e){return t.request({url:`/api/bpm/history/process-instance/count${i(e)}`,method:"get"})},getHistoryProcessInstance(e){return e?t.request({url:`/api/bpm/history/process-instance/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},getProcessVariables(e){if(!e.processInstanceId)return Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400});let s=i(e);return t.request({url:`/api/bpm/history/variable-instance${s}`,method:"get"})},getProcessDefinitions(e){return t.request({url:`/api/bpm/process-definition${i(e)}`,method:"get"})},getProcessXml(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/xml`:`/api/bpm/xml/${e}`;return t.request({url:r,method:"get"})},getActivityInstanceTree(e){return e?t.request({url:`/api/bpm/process-instance/${e}/activity-instances`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},getRuntimeVariables(e){return e?t.request({url:`/api/bpm/process-instance/${e}/variables`,method:"get"}):Promise.resolve({data:null,error:{message:"Process instance ID is required",status:400},status:400})},async delegateTask(e,s){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await t.request({url:`/api/bpm/task/${e}/delegate`,method:"post",headers:{"Content-Type":"application/json"},data:{userId:s}});return a(r)},getTaskForm(e){return e?t.request({url:`/api/bpm/task/${e}/form`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskRenderedForm(e){return e?t.request({url:`/api/bpm/task/${e}/rendered-form`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskDeployedForm(e){return e?t.request({url:`/api/bpm/task/${e}/deployed-form`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getStartFormInfo(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/start-form`:`/api/bpm/start-form/${e}`;return t.request({url:r,method:"get"})},getStartFormVariables(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/form-variables`:`/api/bpm/process-definition/key/${e}/form-variables`;return t.request({url:r,method:"get"})},getDeployedStartForm(e,s){let r=s?`/api/bpm/process-definition/key/${e}/tenant-id/${s}/deployed-start-form`:`/api/bpm/deployed-start-form/${e}`;return t.request({url:r,method:"get"})},getHistoryActivityInstances(e){return t.request({url:`/api/bpm/history/activity-instance${i(e)}`,method:"get"})},getHistoryVariableInstances(e){return t.request({url:`/api/bpm/history/variable-instance${i(e)}`,method:"get"})},getUserOperationLogs(e){return t.request({url:`/api/bpm/history/user-operation${i(e)}`,method:"get"})},async deleteHistoryProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let s=await t.request({url:`/api/bpm/history/process-instance/${e}`,method:"delete"});return a(s)},async suspendProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let s=await t.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:true}});return a(s)},async activateProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let s=await t.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:false}});return a(s)},async modifyProcessInstance(e,s){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=await t.request({url:`/api/bpm/process-instance/${e}/modification`,method:"post",headers:{"Content-Type":"application/json"},data:s});return a(r)},getRoles(){return t.request({url:"/api/runtime/rbac/roles",method:"get"})},async getUserRoles(e){if(!e)return {data:null,error:{message:"User ID is required",status:400},status:400};let s=await t.request({url:`/api/runtime/rbac/users/${e}/roles`,method:"get"});return s.error?{data:[],error:s.error,status:s.status}:{data:s.data?.data||[],error:null,status:s.status}}}}
|
|
2
|
+
export{C as createBpmClient};//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bpm-client.ts"],"names":["extractAppIdFromUrl","url","pathMatch","hostname","wwwMatch","domainMatch","extractEnvFromUrl","wwwEnvMatch","envMatch","getTenantId","appId","env","getBaseDomain","parts","baseDomain","isVariableSubmission","x","isDateLikeString","value","timestamp","formatDateForCamunda","date","dateObj","inferType","processVariableValue","v","variable","camundaValue","toVariableSubmission","inputs","variables","k","encodeQuery","params","sp","q","noContentToNull","r","createBpmClient","http","createHttpClient","processDefinitionId","processInstanceId","processKey","result","tenantId","queryParams","taskId","opts"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\n\n/**\n * Extract app_id from current page URL or domain\n * Method 1: From URL path - /app/{app_id}/...\n * Method 2: From domain (subdomain) - {app_id}-{env}.amaster.ai or {app_id}-{env}.helige.cn or www.{app_id}.helige.cn\n */\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n try {\n // Method 1: Try to extract from URL path first\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-f-]+)(?:\\/|$)/.exec(url);\n if (pathMatch && pathMatch[1]) {\n return pathMatch[1];\n }\n\n // Method 2: Try to extract from domain (subdomain)\n // Matches patterns like: {app_id}-{env}.{domain}.{tld} or www.{app_id}.{domain}.{tld}\n // Examples: abc123-dev.amaster.ai, b7f1156a-dev.helige.cn, www.b7f1156a.helige.cn\n const hostname = window.location.hostname;\n\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch && wwwMatch[1]) {\n return wwwMatch[1];\n }\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch && domainMatch[1]) {\n return domainMatch[1];\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract environment from domain\n * Examples:\n * - aa7158e8-dev.amaster.ai -> dev\n * - aa7158e8.amaster.ai -> production\n * - aa7158e8-prod.amaster.ai -> prod\n * - b7f1156a-dev.helige.cn -> dev\n * - www.b7f1156a.helige.cn -> production\n * - www.b7f1156a-dev.helige.cn -> dev\n */\nfunction extractEnvFromUrl(): string {\n if (typeof window === \"undefined\") {\n return \"production\";\n }\n\n try {\n const hostname = window.location.hostname;\n // Match pattern: www.{app_id}-{env}.domain.tld\n const wwwEnvMatch = /^www\\.[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwEnvMatch && wwwEnvMatch[1]) {\n return wwwEnvMatch[1];\n }\n // Match pattern: {app_id}-{env}.domain.tld\n const envMatch = /^[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (envMatch && envMatch[1]) {\n return envMatch[1];\n }\n return \"production\";\n } catch {\n return \"production\";\n }\n}\n\n/**\n * Get tenantId in format: {appId}_{env}\n */\nfunction getTenantId(): string | null {\n const appId = extractAppIdFromUrl();\n if (!appId) {\n return null;\n }\n const env = extractEnvFromUrl();\n return `${appId}_${env}`;\n}\n\n/**\n * Get approval URL base domain\n * Examples:\n * - xxxx.amaster.ai -> amaster.ai\n * - xxx.appok.ai -> appok.ai\n * - xxx.helige.cn -> www.helige.cn\n * - localhost -> localhost\n */\nfunction getBaseDomain(): string {\n if (typeof window === \"undefined\") {\n return \"amaster.ai\";\n }\n const hostname = window.location.hostname;\n const parts = hostname.split(\".\");\n if (parts.length <= 2) {\n return hostname;\n }\n const baseDomain = parts.slice(-2).join(\".\");\n // helige.cn needs www prefix\n if (baseDomain === \"helige.cn\") {\n return \"www.helige.cn\";\n }\n return baseDomain;\n}\n\nexport type CamundaVariableType =\n | \"String\"\n | \"Boolean\"\n | \"Integer\"\n | \"Long\"\n | \"Double\"\n | \"Date\"\n | \"Json\";\n\nexport type CamundaVariableValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | Record<string, unknown>\n | unknown[];\n\nexport type CamundaVariable = {\n value: CamundaVariableValue;\n type?: CamundaVariableType;\n};\n\nexport type VariableSubmission = {\n variables: Record<string, CamundaVariable>;\n};\n\nexport type ProcessInstance = {\n id: string;\n definitionId?: string;\n businessKey?: string;\n ended?: boolean;\n suspended?: boolean;\n};\n\nexport type ProcessInstanceQueryParams = {\n processDefinitionKey?: string;\n active?: boolean;\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type HistoryProcessInstance = {\n id: string;\n businessKey: string;\n processDefinitionId: string;\n processDefinitionKey: string;\n processDefinitionName: string;\n processDefinitionVersion: number;\n startTime: string;\n endTime: string | null;\n durationInMillis: number | null;\n startUserId: string;\n startActivityId: string;\n deleteReason: string | null;\n state: string;\n superProcessInstanceId?: string;\n superCaseInstanceId?: string;\n};\n\nexport type HistoryProcessInstanceQueryParams = {\n startedBy?: string;\n finished?: boolean;\n processDefinitionKey?: string;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type ProcessVariable = {\n id: string;\n name: string;\n type: string;\n value: CamundaVariableValue;\n processInstanceId: string;\n createTime?: string;\n activityInstanceId?: string;\n taskId?: string;\n executionId?: string;\n errorMessage?: string;\n};\n\nexport type ActivityInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n executionId: string;\n startTime: string;\n endTime?: string;\n};\n\nexport type Task = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n created?: string | null;\n due?: string | null;\n followUp?: string | null;\n lastUpdated?: string | null;\n delegationState?: string | null;\n priority?: number;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n caseExecutionId?: string | null;\n caseInstanceId?: string | null;\n caseDefinitionId?: string | null;\n suspended?: boolean;\n formKey?: string | null;\n camundaFormRef?: string | null;\n tenantId?: string | null;\n taskState?: string | null;\n};\n\nexport type TaskCount = { count: number };\n\nexport type TaskFormField = {\n id: string;\n label?: string;\n type?: string;\n defaultValue?: CamundaVariableValue;\n properties?: Record<string, unknown>;\n validationConstraints?: Array<{\n name: string;\n config?: unknown;\n }>;\n [key: string]: unknown;\n};\n\nexport type TaskFormSchema = {\n key?: string;\n contextPath?: string;\n fields?: TaskFormField[];\n [key: string]: unknown;\n};\n\nexport type TaskFormVariable = {\n type: string;\n value: CamundaVariableValue;\n valueInfo?: Record<string, unknown>;\n};\n\nexport type TaskFormVariables = Record<string, TaskFormVariable>;\n\nexport type HistoryTask = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n startTime: string;\n endTime?: string | null;\n duration?: number | null;\n due?: string | null;\n followUp?: string | null;\n priority?: number;\n taskState?: string | null;\n deleteReason?: string | null;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n processDefinitionKey?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n activityInstanceId?: string | null;\n caseDefinitionKey?: string | null;\n caseDefinitionId?: string | null;\n caseInstanceId?: string | null;\n caseExecutionId?: string | null;\n tenantId?: string | null;\n removalTime?: string | null;\n rootProcessInstanceId?: string | null;\n};\n\nexport type TaskQueryParams = {\n processInstanceId?: string;\n assignee?: string;\n candidateUser?: string;\n candidateGroup?: string;\n name?: string;\n nameLike?: string;\n taskDefinitionKey?: string;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type HistoryTaskQueryParams = {\n taskAssignee?: string;\n processInstanceId?: string;\n finished?: boolean;\n unfinished?: boolean;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type BpmClient = {\n /**\n * Get approval URL for Workflow Center\n * @param processDefinitionId - Format: \"{processKey}:{version}:{deploymentId}\"\n * @param processInstanceId - Process instance ID\n * @returns Approval URL: https://{baseDomain}/bpmn-center/{processKey}/{processInstanceId}?appId={appId}&env={env}\n */\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string;\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>>;\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>>;\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>>;\n deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>>;\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>>;\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>>;\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>>;\n getTask(taskId: string): Promise<ClientResult<Task>>;\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>>;\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>>;\n completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>>;\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>>;\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>>;\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>>;\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>>;\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>>;\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>>;\n};\n\nfunction isVariableSubmission(x: unknown): x is VariableSubmission {\n return (\n x !== null &&\n x !== undefined &&\n typeof x === \"object\" &&\n \"variables\" in x &&\n typeof (x as VariableSubmission).variables === \"object\" &&\n (x as VariableSubmission).variables !== null\n );\n}\n\n/**\n * Check if a string value looks like a date\n */\nfunction isDateLikeString(value: string): boolean {\n if (!value || typeof value !== \"string\") return false;\n\n // ISO 8601 formats: 2026-01-28T15:23:39.513Z, 2026-01-28T23:23, 2026-01-28\n const isoPattern = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[+-]\\d{4})?)?$/;\n if (isoPattern.test(value)) return true;\n\n // Try parsing as date\n const timestamp = Date.parse(value);\n return !isNaN(timestamp);\n}\n\n/**\n * Format Date value for Camunda\n * Camunda expects format: yyyy-MM-dd'T'HH:mm:ss.SSS+0000\n * JavaScript toISOString returns: 2025-02-03T00:00:00.000Z\n * Need to replace 'Z' with '+0000' for Java Date parsing\n */\nfunction formatDateForCamunda(date: Date | string | number): string {\n let dateObj: Date;\n\n if (date instanceof Date) {\n dateObj = date;\n } else if (typeof date === \"number\") {\n dateObj = new Date(date);\n } else if (typeof date === \"string\") {\n dateObj = new Date(date);\n if (isNaN(dateObj.getTime())) {\n return date; // Return original if invalid\n }\n } else {\n dateObj = new Date(date as number);\n }\n\n // Format as: yyyy-MM-dd'T'HH:mm:ss.SSS+0000 for Camunda Java Date parsing\n return dateObj.toISOString().replace(\"Z\", \"+0000\");\n}\n\nfunction inferType(value: CamundaVariableValue): CamundaVariableType | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return \"String\";\n }\n if (typeof value === \"boolean\") {\n return \"Boolean\";\n }\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? \"Long\" : \"Double\";\n }\n if (value instanceof Date) {\n return \"Date\";\n }\n if (typeof value === \"object\") {\n return \"Json\";\n }\n return undefined;\n}\n\nfunction processVariableValue(v: unknown): CamundaVariable {\n if (v && typeof v === \"object\" && \"value\" in v && (\"type\" in v || Object.keys(v).length <= 2)) {\n const variable = v as CamundaVariable;\n\n if (variable.value instanceof Date) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n if (\n variable.type === \"Date\" &&\n (typeof variable.value === \"string\" || typeof variable.value === \"number\")\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n // Check if String type value looks like a date\n if (\n variable.type === \"String\" &&\n typeof variable.value === \"string\" &&\n isDateLikeString(variable.value)\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"String\",\n };\n }\n\n return variable;\n }\n\n if (v instanceof Date) {\n return {\n value: formatDateForCamunda(v),\n type: \"Date\",\n };\n }\n\n const camundaValue = v as CamundaVariableValue;\n return { value: camundaValue, type: inferType(camundaValue) };\n}\n\nfunction toVariableSubmission(\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n): VariableSubmission {\n if (!inputs) {\n return { variables: {} };\n }\n\n if (isVariableSubmission(inputs)) {\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs.variables)) {\n variables[k] = processVariableValue(v);\n }\n return { variables };\n }\n\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs)) {\n variables[k] = processVariableValue(v);\n }\n\n return { variables };\n}\n\nfunction encodeQuery(params?: Record<string, string | number | boolean | undefined>): string {\n if (!params) {\n return \"\";\n }\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) {\n continue;\n }\n sp.append(k, String(v));\n }\n const q = sp.toString();\n return q ? `?${q}` : \"\";\n}\n\nfunction noContentToNull<T>(r: ClientResult<T>): ClientResult<T | null> {\n if (r.status === 204) {\n return { ...r, data: null };\n }\n return r;\n}\n\nexport function createBpmClient(http: HttpClient = createHttpClient()): BpmClient {\n return {\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string {\n // Extract processKey from processDefinitionId (format: \"processKey:version:deploymentId\")\n const processKey = processDefinitionId?.split(\":\")[0] || \"\";\n const baseDomain = getBaseDomain();\n const appId = extractAppIdFromUrl() || \"\";\n const env = extractEnvFromUrl();\n const protocol = typeof window !== \"undefined\" ? window.location.protocol : \"https:\";\n return `${protocol}//${baseDomain}/bpmn-center?processKey=${processKey}&instanceId=${processInstanceId}&appId=${appId}&env=${env}`;\n },\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>> {\n if (!processKey) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process key is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/start/${processKey}`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n },\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>> {\n return http.request<ProcessInstance[]>({\n url: `/api/bpm/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n async deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\n }\n const q = params?.skipCustomListeners ? \"?skipCustomListeners=true\" : \"\";\n const result = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}${q}`,\n method: \"delete\",\n });\n return noContentToNull(result) as ClientResult<null>;\n },\n\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ActivityInstance[]>({\n url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,\n method: \"get\",\n });\n },\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<Task[]>({\n url: `/api/bpm/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTask(taskId: string): Promise<ClientResult<Task>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<Task>({\n url: `/api/bpm/task/${taskId}`,\n method: \"get\",\n });\n },\n\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(opts?.redirect ? { redirect: opts.redirect } : undefined);\n return http.request<TaskFormSchema>({\n url: `/api/bpm/task/${taskId}/form-schema${q}`,\n method: \"get\",\n });\n },\n\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<TaskFormVariables>({\n url: `/api/bpm/task/${taskId}/form-variables`,\n method: \"get\",\n });\n },\n\n async completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>> {\n if (!taskId) {\n return {\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n };\n }\n const r = await http.request<null>({\n url: `/api/bpm/task/${taskId}/complete`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<HistoryTask[]>({\n url: `/api/bpm/history/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/history/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>> {\n return http.request<HistoryProcessInstance[]>({\n url: `/api/bpm/history/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>> {\n return http.request<{ count: number }>({\n url: `/api/bpm/history/process-instance/count${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<HistoryProcessInstance>({\n url: `/api/bpm/history/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>> {\n if (!params.processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(params);\n return http.request<ProcessVariable[]>({\n url: `/api/bpm/history/variable-instance${q}`,\n method: \"get\",\n });\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/bpm-client.ts"],"names":["extractAppIdFromUrl","url","pathMatch","hostname","wwwMatch","domainMatch","extractEnvFromUrl","wwwEnvMatch","envMatch","getTenantId","appId","env","getBaseDomain","parts","baseDomain","isVariableSubmission","x","isDateLikeString","value","timestamp","formatDateForCamunda","date","dateObj","inferType","processVariableValue","v","variable","camundaValue","toVariableSubmission","inputs","variables","k","encodeQuery","params","sp","q","noContentToNull","r","createBpmClient","http","createHttpClient","processDefinitionId","processInstanceId","processKey","result","tenantId","queryParams","taskId","opts","userId","modification"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\n\n/**\n * Extract app_id from current page URL or domain\n * Method 1: From URL path - /app/{app_id}/...\n * Method 2: From domain (subdomain) - {app_id}-{env}.amaster.ai or {app_id}-{env}.helige.cn or www.{app_id}.helige.cn\n */\nfunction extractAppIdFromUrl(): string | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n try {\n // Method 1: Try to extract from URL path first\n const url = window.location.href;\n const pathMatch = /\\/app\\/([\\da-f-]+)(?:\\/|$)/.exec(url);\n if (pathMatch && pathMatch[1]) {\n return pathMatch[1];\n }\n\n // Method 2: Try to extract from domain (subdomain)\n // Matches patterns like: {app_id}-{env}.{domain}.{tld} or www.{app_id}.{domain}.{tld}\n // Examples: abc123-dev.amaster.ai, b7f1156a-dev.helige.cn, www.b7f1156a.helige.cn\n const hostname = window.location.hostname;\n\n // Pattern 1: www.{app_id}.domain.tld or www.{app_id}-{env}.domain.tld\n const wwwMatch = /^www\\.([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwMatch && wwwMatch[1]) {\n return wwwMatch[1];\n }\n\n // Pattern 2: {app_id}-{env}.domain.tld or {app_id}.domain.tld\n const domainMatch = /^([\\da-f-]+)(?:-[^.]+)?\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (domainMatch && domainMatch[1]) {\n return domainMatch[1];\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Extract environment from domain\n * Examples:\n * - aa7158e8-dev.amaster.ai -> dev\n * - aa7158e8.amaster.ai -> production\n * - aa7158e8-prod.amaster.ai -> prod\n * - b7f1156a-dev.helige.cn -> dev\n * - www.b7f1156a.helige.cn -> production\n * - www.b7f1156a-dev.helige.cn -> dev\n */\nfunction extractEnvFromUrl(): string {\n if (typeof window === \"undefined\") {\n return \"production\";\n }\n\n try {\n const hostname = window.location.hostname;\n // Match pattern: www.{app_id}-{env}.domain.tld\n const wwwEnvMatch = /^www\\.[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (wwwEnvMatch && wwwEnvMatch[1]) {\n return wwwEnvMatch[1];\n }\n // Match pattern: {app_id}-{env}.domain.tld\n const envMatch = /^[\\da-f-]+-([^.]+)\\.[\\w-]+\\.(?:local|ai|cn)$/.exec(hostname);\n if (envMatch && envMatch[1]) {\n return envMatch[1];\n }\n return \"production\";\n } catch {\n return \"production\";\n }\n}\n\n/**\n * Get tenantId in format: {appId}_{env}\n */\nfunction getTenantId(): string | null {\n const appId = extractAppIdFromUrl();\n if (!appId) {\n return null;\n }\n const env = extractEnvFromUrl();\n return `${appId}_${env}`;\n}\n\n/**\n * Get approval URL base domain\n * Examples:\n * - xxxx.amaster.ai -> amaster.ai\n * - xxx.appok.ai -> appok.ai\n * - xxx.helige.cn -> www.helige.cn\n * - localhost -> localhost\n */\nfunction getBaseDomain(): string {\n if (typeof window === \"undefined\") {\n return \"amaster.ai\";\n }\n const hostname = window.location.hostname;\n const parts = hostname.split(\".\");\n if (parts.length <= 2) {\n return hostname;\n }\n const baseDomain = parts.slice(-2).join(\".\");\n // helige.cn needs www prefix\n if (baseDomain === \"helige.cn\") {\n return \"www.helige.cn\";\n }\n return baseDomain;\n}\n\nexport type CamundaVariableType =\n | \"String\"\n | \"Boolean\"\n | \"Integer\"\n | \"Long\"\n | \"Double\"\n | \"Date\"\n | \"Json\";\n\nexport type CamundaVariableValue =\n | string\n | number\n | boolean\n | Date\n | null\n | undefined\n | Record<string, unknown>\n | unknown[];\n\nexport type CamundaVariable = {\n value: CamundaVariableValue;\n type?: CamundaVariableType;\n};\n\nexport type VariableSubmission = {\n variables: Record<string, CamundaVariable>;\n};\n\nexport type ProcessInstance = {\n id: string;\n definitionId?: string;\n businessKey?: string;\n ended?: boolean;\n suspended?: boolean;\n};\n\nexport type ProcessInstanceQueryParams = {\n processDefinitionKey?: string;\n active?: boolean;\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type HistoryProcessInstance = {\n id: string;\n businessKey: string;\n processDefinitionId: string;\n processDefinitionKey: string;\n processDefinitionName: string;\n processDefinitionVersion: number;\n startTime: string;\n endTime: string | null;\n durationInMillis: number | null;\n startUserId: string;\n startActivityId: string;\n deleteReason: string | null;\n state: string;\n superProcessInstanceId?: string;\n superCaseInstanceId?: string;\n};\n\nexport type HistoryProcessInstanceQueryParams = {\n startedBy?: string;\n finished?: boolean;\n processDefinitionKey?: string;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n firstResult?: number;\n maxResults?: number;\n};\n\nexport type ProcessVariable = {\n id: string;\n name: string;\n type: string;\n value: CamundaVariableValue;\n processInstanceId: string;\n createTime?: string;\n activityInstanceId?: string;\n taskId?: string;\n executionId?: string;\n errorMessage?: string;\n};\n\nexport type ActivityInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n executionId: string;\n startTime: string;\n endTime?: string;\n};\n\nexport type Task = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n created?: string | null;\n due?: string | null;\n followUp?: string | null;\n lastUpdated?: string | null;\n delegationState?: string | null;\n priority?: number;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n caseExecutionId?: string | null;\n caseInstanceId?: string | null;\n caseDefinitionId?: string | null;\n suspended?: boolean;\n formKey?: string | null;\n camundaFormRef?: string | null;\n tenantId?: string | null;\n taskState?: string | null;\n};\n\nexport type TaskCount = { count: number };\n\nexport type TaskFormField = {\n id: string;\n label?: string;\n type?: string;\n defaultValue?: CamundaVariableValue;\n properties?: Record<string, unknown>;\n validationConstraints?: Array<{\n name: string;\n config?: unknown;\n }>;\n [key: string]: unknown;\n};\n\nexport type TaskFormSchema = {\n key?: string;\n contextPath?: string;\n fields?: TaskFormField[];\n [key: string]: unknown;\n};\n\nexport type TaskFormVariable = {\n type: string;\n value: CamundaVariableValue;\n valueInfo?: Record<string, unknown>;\n};\n\nexport type TaskFormVariables = Record<string, TaskFormVariable>;\n\nexport type HistoryTask = {\n id: string;\n name: string;\n description?: string | null;\n assignee?: string | null;\n owner?: string | null;\n startTime: string;\n endTime?: string | null;\n duration?: number | null;\n due?: string | null;\n followUp?: string | null;\n priority?: number;\n taskState?: string | null;\n deleteReason?: string | null;\n processInstanceId?: string | null;\n processDefinitionId?: string | null;\n processDefinitionKey?: string | null;\n executionId?: string | null;\n taskDefinitionKey?: string | null;\n parentTaskId?: string | null;\n activityInstanceId?: string | null;\n caseDefinitionKey?: string | null;\n caseDefinitionId?: string | null;\n caseInstanceId?: string | null;\n caseExecutionId?: string | null;\n tenantId?: string | null;\n removalTime?: string | null;\n rootProcessInstanceId?: string | null;\n};\n\nexport type TaskQueryParams = {\n processInstanceId?: string;\n assignee?: string;\n candidateUser?: string;\n candidateGroup?: string;\n name?: string;\n nameLike?: string;\n taskDefinitionKey?: string;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type HistoryTaskQueryParams = {\n taskAssignee?: string;\n processInstanceId?: string;\n finished?: boolean;\n unfinished?: boolean;\n firstResult?: number;\n maxResults?: number;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\n// ============================================\n// 额外类型(流程定义、表单、审计、修改等)\n// ============================================\n\nexport type ProcessDefinitionFull = {\n id: string;\n key: string;\n name: string;\n version: number;\n deploymentId: string;\n resourceName: string;\n category?: string;\n description?: string;\n diagram?: string;\n suspended: boolean;\n tenantId?: string;\n versionTag?: string;\n historyTimeToLive?: number;\n startableInTasklist: boolean;\n};\n\nexport type ProcessDefinitionQueryParams = {\n key?: string;\n name?: string;\n latestVersion?: boolean;\n active?: boolean;\n suspended?: boolean;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type ProcessXmlResponse = {\n bpmn20Xml: string;\n processDefinitionId: string;\n};\n\nexport type ActivityInstanceTree = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n processDefinitionId: string;\n childActivityInstances: ActivityInstanceTree[];\n childTransitionInstances: TransitionInstance[];\n executionIds: string[];\n incidentIds: string[];\n};\n\nexport type TransitionInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processInstanceId: string;\n processDefinitionId: string;\n executionId: string;\n incidentIds: string[];\n};\n\nexport type HistoryActivityInstance = {\n id: string;\n activityId: string;\n activityName: string;\n activityType: string;\n processDefinitionId: string;\n processDefinitionKey: string;\n processInstanceId: string;\n executionId: string;\n taskId?: string;\n assignee?: string;\n calledProcessInstanceId?: string;\n calledCaseInstanceId?: string;\n startTime: string;\n endTime?: string;\n durationInMillis?: number;\n canceled: boolean;\n completeScope: boolean;\n tenantId?: string;\n removalTime?: string;\n rootProcessInstanceId: string;\n};\n\nexport type HistoryActivityQueryParams = {\n processInstanceId?: string;\n activityId?: string;\n activityType?: string;\n finished?: boolean;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type HistoryVariableInstance = {\n id: string;\n name: string;\n type: string;\n value: CamundaVariableValue;\n valueInfo?: Record<string, unknown>;\n processDefinitionKey: string;\n processDefinitionId: string;\n processInstanceId: string;\n executionId: string;\n activityInstanceId?: string;\n taskId?: string;\n tenantId?: string;\n errorMessage?: string;\n state: string;\n createTime: string;\n removalTime?: string;\n rootProcessInstanceId: string;\n};\n\nexport type HistoryVariableQueryParams = {\n processInstanceId?: string;\n variableName?: string;\n deserializeValues?: boolean;\n tenantIdIn?: string;\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type TaskFormData = {\n key?: string;\n contextPath?: string;\n camundaFormRef?: {\n key: string;\n binding: string;\n version?: number;\n };\n};\n\nexport type StartFormInfo = {\n key?: string;\n contextPath?: string;\n camundaFormRef?: {\n key: string;\n binding: string;\n version?: number;\n };\n};\n\nexport type CamundaFormDefinition = {\n components?: CamundaFormComponent[];\n type?: string;\n id?: string;\n schemaVersion?: number;\n};\n\nexport type CamundaFormComponent = {\n key: string;\n label?: string;\n type: string;\n validate?: {\n required?: boolean;\n readonly?: boolean;\n };\n defaultValue?: CamundaVariableValue;\n values?: Array<{ label: string; value: string }>;\n properties?: Record<string, unknown>;\n};\n\nexport type UserOperationLog = {\n id: string;\n processDefinitionId?: string;\n processDefinitionKey?: string;\n processInstanceId?: string;\n executionId?: string;\n taskId?: string;\n userId: string;\n timestamp: string;\n operationId: string;\n operationType: string;\n entityType: string;\n property?: string;\n orgValue?: string;\n newValue?: string;\n tenantId?: string;\n};\n\nexport type UserOperationLogQueryParams = {\n processInstanceId?: string;\n taskId?: string;\n userId?: string;\n operationType?: string;\n sortBy?: string;\n sortOrder?: \"asc\" | \"desc\";\n firstResult?: number;\n maxResults?: number;\n [key: string]: string | number | boolean | undefined;\n};\n\nexport type ProcessInstanceModification = {\n instructions: Array<{\n type:\n | \"cancel\"\n | \"startBeforeActivity\"\n | \"startAfterActivity\"\n | \"startTransition\";\n activityId?: string;\n transitionId?: string;\n activityInstanceId?: string;\n transitionInstanceId?: string;\n ancestorActivityInstanceId?: string;\n variables?: Record<string, { value: CamundaVariableValue; type?: string }>;\n }>;\n skipCustomListeners?: boolean;\n skipIoMappings?: boolean;\n};\n\nexport type Role = {\n code: string;\n name: string;\n description?: string;\n};\n\nexport type BpmClient = {\n /**\n * Get approval URL for Workflow Center\n * @param processDefinitionId - Format: \"{processKey}:{version}:{deploymentId}\"\n * @param processInstanceId - Process instance ID\n * @returns Approval URL: https://{baseDomain}/bpmn-center/{processKey}/{processInstanceId}?appId={appId}&env={env}\n */\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string;\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>>;\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>>;\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>>;\n deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>>;\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>>;\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>>;\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>>;\n getTask(taskId: string): Promise<ClientResult<Task>>;\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>>;\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>>;\n completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>>;\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>>;\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>>;\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>>;\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>>;\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>>;\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>>;\n\n // ============================================\n // 流程定义 & XML\n // ============================================\n\n /** 获取流程定义列表 */\n getProcessDefinitions(\n params?: ProcessDefinitionQueryParams\n ): Promise<ClientResult<ProcessDefinitionFull[]>>;\n\n /** 获取流程 XML(带 tenantId 支持) */\n getProcessXml(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<ProcessXmlResponse>>;\n\n // ============================================\n // 活动实例树(运行时)\n // ============================================\n\n /** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */\n getActivityInstanceTree(\n processInstanceId: string\n ): Promise<ClientResult<ActivityInstanceTree>>;\n\n // ============================================\n // 流程变量(运行时)\n // ============================================\n\n /** 获取运行时流程变量 */\n getRuntimeVariables(\n processInstanceId: string\n ): Promise<ClientResult<Record<string, { value: CamundaVariableValue; type: string }>>>;\n\n // ============================================\n // 任务操作\n // ============================================\n\n /** 转办任务 */\n delegateTask(taskId: string, userId: string): Promise<ClientResult<null>>;\n\n // ============================================\n // 任务表单\n // ============================================\n\n /** 获取任务表单元数据 */\n getTaskForm(taskId: string): Promise<ClientResult<TaskFormData>>;\n\n /** 获取任务渲染后的表单 HTML */\n getTaskRenderedForm(taskId: string): Promise<ClientResult<string>>;\n\n /** 获取任务部署的表单定义 */\n getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>>;\n\n // ============================================\n // 启动表单\n // ============================================\n\n /** 获取流程启动表单信息 */\n getStartFormInfo(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<StartFormInfo>>;\n\n /** 获取流程启动表单变量 */\n getStartFormVariables(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<TaskFormVariables>>;\n\n /** 获取流程部署的启动表单 */\n getDeployedStartForm(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<CamundaFormDefinition>>;\n\n // ============================================\n // 历史查询\n // ============================================\n\n /** 查询历史活动实例(流程执行轨迹) */\n getHistoryActivityInstances(\n params?: HistoryActivityQueryParams\n ): Promise<ClientResult<HistoryActivityInstance[]>>;\n\n /** 查询历史变量实例 */\n getHistoryVariableInstances(\n params?: HistoryVariableQueryParams\n ): Promise<ClientResult<HistoryVariableInstance[]>>;\n\n /** 获取操作日志 */\n getUserOperationLogs(\n params?: UserOperationLogQueryParams\n ): Promise<ClientResult<UserOperationLog[]>>;\n\n /** 删除历史流程实例 */\n deleteHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<null>>;\n\n // ============================================\n // 流程干预\n // ============================================\n\n /** 挂起流程实例 */\n suspendProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;\n\n /** 激活流程实例 */\n activateProcessInstance(processInstanceId: string): Promise<ClientResult<null>>;\n\n /** 修改流程实例(用于跳转等操作) */\n modifyProcessInstance(\n processInstanceId: string,\n modification: ProcessInstanceModification\n ): Promise<ClientResult<null>>;\n\n // ============================================\n // 角色\n // ============================================\n\n /** 获取当前租户的角色列表 */\n getRoles(): Promise<ClientResult<Role[]>>;\n\n /** 获取指定用户的角色列表 */\n getUserRoles(userId: string): Promise<ClientResult<Role[]>>;\n};\n\nfunction isVariableSubmission(x: unknown): x is VariableSubmission {\n return (\n x !== null &&\n x !== undefined &&\n typeof x === \"object\" &&\n \"variables\" in x &&\n typeof (x as VariableSubmission).variables === \"object\" &&\n (x as VariableSubmission).variables !== null\n );\n}\n\n/**\n * Check if a string value looks like a date\n */\nfunction isDateLikeString(value: string): boolean {\n if (!value || typeof value !== \"string\") return false;\n\n // ISO 8601 formats: 2026-01-28T15:23:39.513Z, 2026-01-28T23:23, 2026-01-28\n const isoPattern = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[+-]\\d{4})?)?$/;\n if (isoPattern.test(value)) return true;\n\n // Try parsing as date\n const timestamp = Date.parse(value);\n return !isNaN(timestamp);\n}\n\n/**\n * Format Date value for Camunda\n * Camunda expects format: yyyy-MM-dd'T'HH:mm:ss.SSS+0000\n * JavaScript toISOString returns: 2025-02-03T00:00:00.000Z\n * Need to replace 'Z' with '+0000' for Java Date parsing\n */\nfunction formatDateForCamunda(date: Date | string | number): string {\n let dateObj: Date;\n\n if (date instanceof Date) {\n dateObj = date;\n } else if (typeof date === \"number\") {\n dateObj = new Date(date);\n } else if (typeof date === \"string\") {\n dateObj = new Date(date);\n if (isNaN(dateObj.getTime())) {\n return date; // Return original if invalid\n }\n } else {\n dateObj = new Date(date as number);\n }\n\n // Format as: yyyy-MM-dd'T'HH:mm:ss.SSS+0000 for Camunda Java Date parsing\n return dateObj.toISOString().replace(\"Z\", \"+0000\");\n}\n\nfunction inferType(value: CamundaVariableValue): CamundaVariableType | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return \"String\";\n }\n if (typeof value === \"boolean\") {\n return \"Boolean\";\n }\n if (typeof value === \"number\") {\n return Number.isInteger(value) ? \"Long\" : \"Double\";\n }\n if (value instanceof Date) {\n return \"Date\";\n }\n if (typeof value === \"object\") {\n return \"Json\";\n }\n return undefined;\n}\n\nfunction processVariableValue(v: unknown): CamundaVariable {\n if (v && typeof v === \"object\" && \"value\" in v && (\"type\" in v || Object.keys(v).length <= 2)) {\n const variable = v as CamundaVariable;\n\n if (variable.value instanceof Date) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n if (\n variable.type === \"Date\" &&\n (typeof variable.value === \"string\" || typeof variable.value === \"number\")\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"Date\",\n };\n }\n\n // Check if String type value looks like a date\n if (\n variable.type === \"String\" &&\n typeof variable.value === \"string\" &&\n isDateLikeString(variable.value)\n ) {\n return {\n value: formatDateForCamunda(variable.value),\n type: \"String\",\n };\n }\n\n return variable;\n }\n\n if (v instanceof Date) {\n return {\n value: formatDateForCamunda(v),\n type: \"Date\",\n };\n }\n\n const camundaValue = v as CamundaVariableValue;\n return { value: camundaValue, type: inferType(camundaValue) };\n}\n\nfunction toVariableSubmission(\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n): VariableSubmission {\n if (!inputs) {\n return { variables: {} };\n }\n\n if (isVariableSubmission(inputs)) {\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs.variables)) {\n variables[k] = processVariableValue(v);\n }\n return { variables };\n }\n\n const variables: Record<string, CamundaVariable> = {};\n for (const [k, v] of Object.entries(inputs)) {\n variables[k] = processVariableValue(v);\n }\n\n return { variables };\n}\n\nfunction encodeQuery(params?: Record<string, string | number | boolean | undefined>): string {\n if (!params) {\n return \"\";\n }\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) {\n continue;\n }\n sp.append(k, String(v));\n }\n const q = sp.toString();\n return q ? `?${q}` : \"\";\n}\n\nfunction noContentToNull<T>(r: ClientResult<T>): ClientResult<T | null> {\n if (r.status === 204) {\n return { ...r, data: null };\n }\n return r;\n}\n\nexport function createBpmClient(http: HttpClient = createHttpClient()): BpmClient {\n return {\n getApprovalUrl(processDefinitionId: string, processInstanceId: string): string {\n // Extract processKey from processDefinitionId (format: \"processKey:version:deploymentId\")\n const processKey = processDefinitionId?.split(\":\")[0] || \"\";\n const baseDomain = getBaseDomain();\n const appId = extractAppIdFromUrl() || \"\";\n const env = extractEnvFromUrl();\n const protocol = typeof window !== \"undefined\" ? window.location.protocol : \"https:\";\n return `${protocol}//${baseDomain}/bpmn-center?processKey=${processKey}&instanceId=${processInstanceId}&appId=${appId}&env=${env}`;\n },\n\n startProcess(\n processKey: string,\n inputs?: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<ProcessInstance>> {\n if (!processKey) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process key is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/start/${processKey}`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n },\n\n getProcessInstances(\n params?: ProcessInstanceQueryParams\n ): Promise<ClientResult<ProcessInstance[]>> {\n return http.request<ProcessInstance[]>({\n url: `/api/bpm/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ProcessInstance>({\n url: `/api/bpm/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n async deleteProcessInstance(\n processInstanceId: string,\n params?: { skipCustomListeners?: boolean }\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\n }\n const q = params?.skipCustomListeners ? \"?skipCustomListeners=true\" : \"\";\n const result = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}${q}`,\n method: \"delete\",\n });\n return noContentToNull(result) as ClientResult<null>;\n },\n\n getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ActivityInstance[]>({\n url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,\n method: \"get\",\n });\n },\n\n getTasks(params?: TaskQueryParams): Promise<ClientResult<Task[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<Task[]>({\n url: `/api/bpm/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getTask(taskId: string): Promise<ClientResult<Task>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<Task>({\n url: `/api/bpm/task/${taskId}`,\n method: \"get\",\n });\n },\n\n getTaskFormSchema(\n taskId: string,\n opts?: { redirect?: string }\n ): Promise<ClientResult<TaskFormSchema>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(opts?.redirect ? { redirect: opts.redirect } : undefined);\n return http.request<TaskFormSchema>({\n url: `/api/bpm/task/${taskId}/form-schema${q}`,\n method: \"get\",\n });\n },\n\n getTaskFormVariables(taskId: string): Promise<ClientResult<TaskFormVariables>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<TaskFormVariables>({\n url: `/api/bpm/task/${taskId}/form-variables`,\n method: \"get\",\n });\n },\n\n async completeTask(\n taskId: string,\n inputs: Record<string, CamundaVariableValue> | VariableSubmission\n ): Promise<ClientResult<null>> {\n if (!taskId) {\n return {\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n };\n }\n const r = await http.request<null>({\n url: `/api/bpm/task/${taskId}/complete`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: toVariableSubmission(inputs),\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n getHistoryTasks(params?: HistoryTaskQueryParams): Promise<ClientResult<HistoryTask[]>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<HistoryTask[]>({\n url: `/api/bpm/history/task${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>> {\n const tenantId = getTenantId();\n const queryParams = tenantId ? { ...params, tenantIdIn: tenantId } : params;\n return http.request<TaskCount>({\n url: `/api/bpm/history/task/count${encodeQuery(queryParams)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstances(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<HistoryProcessInstance[]>> {\n return http.request<HistoryProcessInstance[]>({\n url: `/api/bpm/history/process-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstanceCount(\n params?: HistoryProcessInstanceQueryParams\n ): Promise<ClientResult<{ count: number }>> {\n return http.request<{ count: number }>({\n url: `/api/bpm/history/process-instance/count${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<HistoryProcessInstance>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<HistoryProcessInstance>({\n url: `/api/bpm/history/process-instance/${processInstanceId}`,\n method: \"get\",\n });\n },\n\n getProcessVariables(params: {\n processInstanceId: string;\n variableName?: string;\n }): Promise<ClientResult<ProcessVariable[]>> {\n if (!params.processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n const q = encodeQuery(params);\n return http.request<ProcessVariable[]>({\n url: `/api/bpm/history/variable-instance${q}`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 流程定义 & XML\n // ============================================\n\n getProcessDefinitions(\n params?: ProcessDefinitionQueryParams\n ): Promise<ClientResult<ProcessDefinitionFull[]>> {\n return http.request<ProcessDefinitionFull[]>({\n url: `/api/bpm/process-definition${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getProcessXml(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<ProcessXmlResponse>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/xml`\n : `/api/bpm/xml/${processKey}`;\n return http.request<ProcessXmlResponse>({\n url,\n method: \"get\",\n });\n },\n\n // ============================================\n // 活动实例树(运行时)\n // ============================================\n\n getActivityInstanceTree(\n processInstanceId: string\n ): Promise<ClientResult<ActivityInstanceTree>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<ActivityInstanceTree>({\n url: `/api/bpm/process-instance/${processInstanceId}/activity-instances`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 流程变量(运行时)\n // ============================================\n\n getRuntimeVariables(\n processInstanceId: string\n ): Promise<ClientResult<Record<string, { value: CamundaVariableValue; type: string }>>> {\n if (!processInstanceId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<Record<string, { value: CamundaVariableValue; type: string }>>({\n url: `/api/bpm/process-instance/${processInstanceId}/variables`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 任务操作\n // ============================================\n\n async delegateTask(taskId: string, userId: string): Promise<ClientResult<null>> {\n if (!taskId) {\n return { data: null, error: { message: \"Task ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/task/${taskId}/delegate`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: { userId },\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n // ============================================\n // 任务表单\n // ============================================\n\n getTaskForm(taskId: string): Promise<ClientResult<TaskFormData>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<TaskFormData>({\n url: `/api/bpm/task/${taskId}/form`,\n method: \"get\",\n });\n },\n\n getTaskRenderedForm(taskId: string): Promise<ClientResult<string>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<string>({\n url: `/api/bpm/task/${taskId}/rendered-form`,\n method: \"get\",\n });\n },\n\n getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>> {\n if (!taskId) {\n return Promise.resolve({\n data: null,\n error: { message: \"Task ID is required\", status: 400 },\n status: 400,\n });\n }\n return http.request<CamundaFormDefinition>({\n url: `/api/bpm/task/${taskId}/deployed-form`,\n method: \"get\",\n });\n },\n\n // ============================================\n // 启动表单\n // ============================================\n\n getStartFormInfo(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<StartFormInfo>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/start-form`\n : `/api/bpm/start-form/${processKey}`;\n return http.request<StartFormInfo>({\n url,\n method: \"get\",\n });\n },\n\n getStartFormVariables(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<TaskFormVariables>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/form-variables`\n : `/api/bpm/process-definition/key/${processKey}/form-variables`;\n return http.request<TaskFormVariables>({\n url,\n method: \"get\",\n });\n },\n\n getDeployedStartForm(\n processKey: string,\n tenantId?: string\n ): Promise<ClientResult<CamundaFormDefinition>> {\n const url = tenantId\n ? `/api/bpm/process-definition/key/${processKey}/tenant-id/${tenantId}/deployed-start-form`\n : `/api/bpm/deployed-start-form/${processKey}`;\n return http.request<CamundaFormDefinition>({\n url,\n method: \"get\",\n });\n },\n\n // ============================================\n // 历史查询\n // ============================================\n\n getHistoryActivityInstances(\n params?: HistoryActivityQueryParams\n ): Promise<ClientResult<HistoryActivityInstance[]>> {\n return http.request<HistoryActivityInstance[]>({\n url: `/api/bpm/history/activity-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryVariableInstances(\n params?: HistoryVariableQueryParams\n ): Promise<ClientResult<HistoryVariableInstance[]>> {\n return http.request<HistoryVariableInstance[]>({\n url: `/api/bpm/history/variable-instance${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getUserOperationLogs(\n params?: UserOperationLogQueryParams\n ): Promise<ClientResult<UserOperationLog[]>> {\n return http.request<UserOperationLog[]>({\n url: `/api/bpm/history/user-operation${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n async deleteHistoryProcessInstance(\n processInstanceId: string\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/history/process-instance/${processInstanceId}`,\n method: \"delete\",\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n // ============================================\n // 流程干预\n // ============================================\n\n async suspendProcessInstance(processInstanceId: string): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}/suspended`,\n method: \"put\",\n headers: { \"Content-Type\": \"application/json\" },\n data: { suspended: true },\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n async activateProcessInstance(processInstanceId: string): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}/suspended`,\n method: \"put\",\n headers: { \"Content-Type\": \"application/json\" },\n data: { suspended: false },\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n async modifyProcessInstance(\n processInstanceId: string,\n modification: ProcessInstanceModification\n ): Promise<ClientResult<null>> {\n if (!processInstanceId) {\n return { data: null, error: { message: \"Process instance ID is required\", status: 400 }, status: 400 };\n }\n const r = await http.request<null>({\n url: `/api/bpm/process-instance/${processInstanceId}/modification`,\n method: \"post\",\n headers: { \"Content-Type\": \"application/json\" },\n data: modification,\n });\n return noContentToNull(r) as ClientResult<null>;\n },\n\n // ============================================\n // 角色\n // ============================================\n\n getRoles(): Promise<ClientResult<Role[]>> {\n return http.request<Role[]>({\n url: \"/api/runtime/rbac/roles\",\n method: \"get\",\n });\n },\n\n async getUserRoles(userId: string): Promise<ClientResult<Role[]>> {\n if (!userId) {\n return { data: null, error: { message: \"User ID is required\", status: 400 }, status: 400 };\n }\n // Runtime RBAC returns { data: Role[], statusCode: number, message: string }\n const r = await http.request<{ data: Role[]; statusCode: number; message: string }>({\n url: `/api/runtime/rbac/users/${userId}/roles`,\n method: \"get\",\n });\n if (r.error) {\n return { data: [], error: r.error, status: r.status };\n }\n return { data: r.data?.data || [], error: null, status: r.status };\n },\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/bpm-client",
|
|
3
|
-
"version": "1.1.0-beta.
|
|
3
|
+
"version": "1.1.0-beta.40",
|
|
4
4
|
"description": "Camunda 7 BPM process engine client",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"registry": "https://registry.npmjs.org/"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@amaster.ai/http-client": "1.1.0-beta.
|
|
34
|
+
"@amaster.ai/http-client": "1.1.0-beta.40"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"axios": "^1.11.0"
|