@amaster.ai/bpm-client 1.1.0-beta.47 → 1.1.0-beta.48

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 CHANGED
@@ -1,3 +1,2 @@
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-z-]+)(?:\/|$)/.exec(t);if(e&&e[1])return e[1];let s=window.location.hostname,r=/^www\.([\da-z-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(s);if(r&&r[1])return r[1];let n=/^([\da-z-]+)(?:-[^.]+)?\.[\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-z-]+-([^.]+)\.[\w-]+\.(?:local|ai|cn)$/.exec(t);if(e&&e[1])return e[1];let s=/^[\da-z-]+-([^.]+)\.[\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
1
+ 'use strict';var httpClient=require('@amaster.ai/http-client');function m(s){return s!=null&&typeof s=="object"&&"variables"in s&&typeof s.variables=="object"&&s.variables!==null}function g(s){if(!s||typeof s!="string")return false;if(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[+-]\d{4})?)?$/.test(s))return true;let t=Date.parse(s);return !isNaN(t)}function o(s){let e;if(s instanceof Date)e=s;else if(typeof s=="number")e=new Date(s);else if(typeof s=="string"){if(e=new Date(s),isNaN(e.getTime()))return s}else e=new Date(s);return e.toISOString().replace("Z","+0000")}function d(s){if(s!=null){if(typeof s=="string")return "String";if(typeof s=="boolean")return "Boolean";if(typeof s=="number")return Number.isInteger(s)?"Long":"Double";if(s instanceof Date)return "Date";if(typeof s=="object")return "Json"}}function l(s){if(s&&typeof s=="object"&&"value"in s&&("type"in s||Object.keys(s).length<=2)){let t=s;return t.value instanceof Date?{value:o(t.value),type:"Date"}:t.type==="Date"&&(typeof t.value=="string"||typeof t.value=="number")?{value:o(t.value),type:"Date"}:t.type==="String"&&typeof t.value=="string"&&g(t.value)?{value:o(t.value),type:"String"}:t}if(s instanceof Date)return {value:o(s),type:"Date"};let e=s;return {value:e,type:d(e)}}function u(s){if(!s)return {variables:{}};if(m(s)){let t={};for(let[r,i]of Object.entries(s.variables))t[r]=l(i);return {variables:t}}let e={};for(let[t,r]of Object.entries(s))e[t]=l(r);return {variables:e}}function n(s){if(!s)return "";let e=new URLSearchParams;for(let[r,i]of Object.entries(s))i!=null&&e.append(r,String(i));let t=e.toString();return t?`?${t}`:""}function a(s){return s.status===204?{...s,data:null}:s}function p(s=httpClient.createHttpClient()){return {startProcess(e,t){return e?s.request({url:`/api/bpm/start/${e}`,method:"post",headers:{"Content-Type":"application/json"},data:u(t)}):Promise.resolve({data:null,error:{message:"Process key is required",status:400},status:400})},getProcessInstances(e){return s.request({url:`/api/bpm/process-instance${n(e)}`,method:"get"})},getProcessInstance(e){return e?s.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,t){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=t?.skipCustomListeners?"?skipCustomListeners=true":"",i=await s.request({url:`/api/bpm/process-instance/${e}${r}`,method:"delete"});return a(i)},getActiveActivities(e){return e?s.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){return s.request({url:`/api/bpm/task${n(e)}`,method:"get"})},getTaskCount(e){return s.request({url:`/api/bpm/task/count${n(e)}`,method:"get"})},getTask(e){return e?s.request({url:`/api/bpm/task/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskFormSchema(e,t){if(!e)return Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400});let r=n(t?.redirect?{redirect:t.redirect}:void 0);return s.request({url:`/api/bpm/task/${e}/form-schema${r}`,method:"get"})},getTaskFormVariables(e){return e?s.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,t){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await s.request({url:`/api/bpm/task/${e}/complete`,method:"post",headers:{"Content-Type":"application/json"},data:u(t)});return a(r)},getHistoryTasks(e){return s.request({url:`/api/bpm/history/task${n(e)}`,method:"get"})},getHistoryTaskCount(e){return s.request({url:`/api/bpm/history/task/count${n(e)}`,method:"get"})},getHistoryProcessInstances(e){return s.request({url:`/api/bpm/history/process-instance${n(e)}`,method:"get"})},getHistoryProcessInstanceCount(e){return s.request({url:`/api/bpm/history/process-instance/count${n(e)}`,method:"get"})},getHistoryProcessInstance(e){return e?s.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 t=n(e);return s.request({url:`/api/bpm/history/variable-instance${t}`,method:"get"})},getProcessDefinitions(e){return s.request({url:`/api/bpm/process-definition${n(e)}`,method:"get"})},getProcessXml(e){return s.request({url:`/api/bpm/xml/${e}`,method:"get"})},getActivityInstanceTree(e){return e?s.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?s.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,t){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await s.request({url:`/api/bpm/task/${e}/delegate`,method:"post",headers:{"Content-Type":"application/json"},data:{userId:t}});return a(r)},getTaskForm(e){return e?s.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?s.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?s.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){return s.request({url:`/api/bpm/start-form/${e}`,method:"get"})},getStartFormVariables(e){return s.request({url:`/api/bpm/process-definition/key/${e}/form-variables`,method:"get"})},getDeployedStartForm(e){return s.request({url:`/api/bpm/deployed-start-form/${e}`,method:"get"})},getHistoryActivityInstances(e){return s.request({url:`/api/bpm/history/activity-instance${n(e)}`,method:"get"})},getHistoryVariableInstances(e){return s.request({url:`/api/bpm/history/variable-instance${n(e)}`,method:"get"})},getUserOperationLogs(e){return s.request({url:`/api/bpm/history/user-operation${n(e)}`,method:"get"})},async deleteHistoryProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let t=await s.request({url:`/api/bpm/history/process-instance/${e}`,method:"delete"});return a(t)},async suspendProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let t=await s.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:true}});return a(t)},async activateProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let t=await s.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:false}});return a(t)},async modifyProcessInstance(e,t){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=await s.request({url:`/api/bpm/process-instance/${e}/modification`,method:"post",headers:{"Content-Type":"application/json"},data:t});return a(r)},getRoles(){return s.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 t=await s.request({url:`/api/runtime/rbac/users/${e}/roles`,method:"get"});return t.error?{data:[],error:t.error,status:t.status}:{data:t.data?.data||[],error:null,status:t.status}}}}exports.createBpmClient=p;//# sourceMappingURL=index.cjs.map
3
2
  //# sourceMappingURL=index.cjs.map
@@ -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","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-z-]+)(?:\\/|$)/.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-z-]+)(?:-[^.]+)?\\.[\\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-z-]+)(?:-[^.]+)?\\.[\\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-z-]+-([^.]+)\\.[\\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-z-]+-([^.]+)\\.[\\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"]}
1
+ {"version":3,"sources":["../src/bpm-client.ts"],"names":["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","processKey","processInstanceId","result","taskId","opts","userId","modification"],"mappings":"+DAkkBA,SAASA,CAAAA,CAAqBC,CAAAA,CAAqC,CACjE,OACEA,CAAAA,EAAM,MAEN,OAAOA,CAAAA,EAAM,UACb,WAAA,GAAeA,CAAAA,EACf,OAAQA,CAAAA,CAAyB,SAAA,EAAc,UAC9CA,CAAAA,CAAyB,SAAA,GAAc,IAE5C,CAKA,SAASC,EAAiBC,CAAAA,CAAwB,CAChD,GAAI,CAACA,CAAAA,EAAS,OAAOA,CAAAA,EAAU,QAAA,CAAU,OAAO,MAAA,CAIhD,GADmB,sEACJ,IAAA,CAAKA,CAAK,EAAG,OAAO,KAAA,CAGnC,IAAMC,CAAAA,CAAY,IAAA,CAAK,MAAMD,CAAK,CAAA,CAClC,OAAO,CAAC,KAAA,CAAMC,CAAS,CACzB,CAQA,SAASC,CAAAA,CAAqBC,CAAAA,CAAsC,CAClE,IAAIC,CAAAA,CAEJ,GAAID,CAAAA,YAAgB,IAAA,CAClBC,EAAUD,CAAAA,CAAAA,KAAAA,GACD,OAAOA,GAAS,QAAA,CACzBC,CAAAA,CAAU,IAAI,IAAA,CAAKD,CAAI,UACd,OAAOA,CAAAA,EAAS,UAEzB,GADAC,CAAAA,CAAU,IAAI,IAAA,CAAKD,CAAI,EACnB,KAAA,CAAMC,CAAAA,CAAQ,SAAS,CAAA,CACzB,OAAOD,CAAAA,CAAAA,KAGTC,CAAAA,CAAU,IAAI,IAAA,CAAKD,CAAc,EAInC,OAAOC,CAAAA,CAAQ,aAAY,CAAE,OAAA,CAAQ,IAAK,OAAO,CACnD,CAEA,SAASC,CAAAA,CAAUL,EAA8D,CAC/E,GAAIA,GAAU,IAAA,CAGd,CAAA,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnB,OAAO,QAAA,CAET,GAAI,OAAOA,CAAAA,EAAU,SAAA,CACnB,OAAO,SAAA,CAET,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnB,OAAO,MAAA,CAAO,SAAA,CAAUA,CAAK,CAAA,CAAI,MAAA,CAAS,SAE5C,GAAIA,CAAAA,YAAiB,KACnB,OAAO,MAAA,CAET,GAAI,OAAOA,CAAAA,EAAU,SACnB,OAAO,MAAA,CAGX,CAEA,SAASM,CAAAA,CAAqBC,EAA6B,CACzD,GAAIA,GAAK,OAAOA,CAAAA,EAAM,UAAY,OAAA,GAAWA,CAAAA,GAAM,SAAUA,CAAAA,EAAK,MAAA,CAAO,KAAKA,CAAC,CAAA,CAAE,QAAU,CAAA,CAAA,CAAI,CAC7F,IAAMC,CAAAA,CAAWD,CAAAA,CAEjB,OAAIC,CAAAA,CAAS,KAAA,YAAiB,KACrB,CACL,KAAA,CAAON,EAAqBM,CAAAA,CAAS,KAAK,EAC1C,IAAA,CAAM,MACR,EAIAA,CAAAA,CAAS,IAAA,GAAS,SACjB,OAAOA,CAAAA,CAAS,OAAU,QAAA,EAAY,OAAOA,CAAAA,CAAS,KAAA,EAAU,UAE1D,CACL,KAAA,CAAON,EAAqBM,CAAAA,CAAS,KAAK,EAC1C,IAAA,CAAM,MACR,EAKAA,CAAAA,CAAS,IAAA,GAAS,UAClB,OAAOA,CAAAA,CAAS,OAAU,QAAA,EAC1BT,CAAAA,CAAiBS,EAAS,KAAK,CAAA,CAExB,CACL,KAAA,CAAON,CAAAA,CAAqBM,EAAS,KAAK,CAAA,CAC1C,KAAM,QACR,CAAA,CAGKA,CACT,CAEA,GAAID,aAAa,IAAA,CACf,OAAO,CACL,KAAA,CAAOL,CAAAA,CAAqBK,CAAC,CAAA,CAC7B,IAAA,CAAM,MACR,CAAA,CAGF,IAAME,EAAeF,CAAAA,CACrB,OAAO,CAAE,KAAA,CAAOE,CAAAA,CAAc,KAAMJ,CAAAA,CAAUI,CAAY,CAAE,CAC9D,CAEA,SAASC,CAAAA,CACPC,CAAAA,CACoB,CACpB,GAAI,CAACA,EACH,OAAO,CAAE,UAAW,EAAG,EAGzB,GAAId,CAAAA,CAAqBc,CAAM,CAAA,CAAG,CAChC,IAAMC,CAAAA,CAA6C,GACnD,IAAA,GAAW,CAACC,EAAGN,CAAC,CAAA,GAAK,OAAO,OAAA,CAAQI,CAAAA,CAAO,SAAS,CAAA,CAClDC,CAAAA,CAAUC,CAAC,CAAA,CAAIP,CAAAA,CAAqBC,CAAC,CAAA,CAEvC,OAAO,CAAE,SAAA,CAAAK,CAAU,CACrB,CAEA,IAAMA,EAA6C,EAAC,CACpD,OAAW,CAACC,CAAAA,CAAGN,CAAC,CAAA,GAAK,MAAA,CAAO,QAAQI,CAAM,CAAA,CACxCC,EAAUC,CAAC,CAAA,CAAIP,EAAqBC,CAAC,CAAA,CAGvC,OAAO,CAAE,SAAA,CAAAK,CAAU,CACrB,CAEA,SAASE,CAAAA,CAAYC,CAAAA,CAAwE,CAC3F,GAAI,CAACA,EACH,OAAO,EAAA,CAET,IAAMC,CAAAA,CAAK,IAAI,gBACf,IAAA,GAAW,CAACH,EAAGN,CAAC,CAAA,GAAK,OAAO,OAAA,CAAQQ,CAAM,EACjBR,CAAAA,EAAM,IAAA,EAG7BS,EAAG,MAAA,CAAOH,CAAAA,CAAG,OAAON,CAAC,CAAC,EAExB,IAAMU,CAAAA,CAAID,EAAG,QAAA,EAAS,CACtB,OAAOC,CAAAA,CAAI,CAAA,CAAA,EAAIA,CAAC,CAAA,CAAA,CAAK,EACvB,CAEA,SAASC,CAAAA,CAAmBC,EAA4C,CACtE,OAAIA,EAAE,MAAA,GAAW,GAAA,CACR,CAAE,GAAGA,CAAAA,CAAG,KAAM,IAAK,CAAA,CAErBA,CACT,CAEO,SAASC,EAAgBC,CAAAA,CAAmBC,2BAAAA,EAAiB,CAAc,CAChF,OAAO,CACL,YAAA,CACEC,EACAZ,CAAAA,CACwC,CACxC,OAAKY,CAAAA,CAOEF,CAAAA,CAAK,QAAyB,CACnC,GAAA,CAAK,kBAAkBE,CAAU,CAAA,CAAA,CACjC,OAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,EAC9C,IAAA,CAAMb,CAAAA,CAAqBC,CAAM,CACnC,CAAC,EAXQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,0BAA2B,MAAA,CAAQ,GAAI,EACzD,MAAA,CAAQ,GACV,CAAC,CAQL,CAAA,CAEA,oBACEI,CAAAA,CAC0C,CAC1C,OAAOM,CAAAA,CAAK,OAAA,CAA2B,CACrC,GAAA,CAAK,CAAA,yBAAA,EAA4BP,EAAYC,CAAM,CAAC,GACpD,MAAA,CAAQ,KACV,CAAC,CACH,CAAA,CAEA,mBAAmBS,CAAAA,CAAmE,CACpF,OAAKA,CAAAA,CAOEH,CAAAA,CAAK,QAAyB,CACnC,GAAA,CAAK,6BAA6BG,CAAiB,CAAA,CAAA,CACnD,OAAQ,KACV,CAAC,EATQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,CAAC,CAML,CAAA,CAEA,MAAM,qBAAA,CACJA,CAAAA,CACAT,EAC6B,CAC7B,GAAI,CAACS,CAAAA,CACH,OAAO,CACL,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,EAEF,IAAMP,CAAAA,CAAIF,GAAQ,mBAAA,CAAsB,2BAAA,CAA8B,GAChEU,CAAAA,CAAS,MAAMJ,EAAK,OAAA,CAAc,CACtC,IAAK,CAAA,0BAAA,EAA6BG,CAAiB,GAAGP,CAAC,CAAA,CAAA,CACvD,OAAQ,QACV,CAAC,EACD,OAAOC,CAAAA,CAAgBO,CAAM,CAC/B,CAAA,CAEA,oBAAoBD,CAAAA,CAAsE,CACxF,OAAKA,CAAAA,CAOEH,CAAAA,CAAK,QAA4B,CACtC,GAAA,CAAK,6BAA6BG,CAAiB,CAAA,mBAAA,CAAA,CACnD,OAAQ,KACV,CAAC,EATQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,CAAC,CAML,CAAA,CAEA,SAAST,CAAAA,CAAyD,CAChE,OAAOM,CAAAA,CAAK,OAAA,CAAgB,CAC1B,GAAA,CAAK,CAAA,aAAA,EAAgBP,EAAYC,CAAM,CAAC,CAAA,CAAA,CACxC,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,YAAA,CAAaA,CAAAA,CAA4D,CACvE,OAAOM,CAAAA,CAAK,QAAmB,CAC7B,GAAA,CAAK,sBAAsBP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CAC9C,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,OAAA,CAAQW,CAAAA,CAA6C,CACnD,OAAKA,CAAAA,CAOEL,EAAK,OAAA,CAAc,CACxB,IAAK,CAAA,cAAA,EAAiBK,CAAM,GAC5B,MAAA,CAAQ,KACV,CAAC,CAAA,CATQ,OAAA,CAAQ,QAAQ,CACrB,IAAA,CAAM,KACN,KAAA,CAAO,CAAE,QAAS,qBAAA,CAAuB,MAAA,CAAQ,GAAI,CAAA,CACrD,MAAA,CAAQ,GACV,CAAC,CAML,EAEA,iBAAA,CACEA,CAAAA,CACAC,EACuC,CACvC,GAAI,CAACD,CAAAA,CACH,OAAO,QAAQ,OAAA,CAAQ,CACrB,KAAM,IAAA,CACN,KAAA,CAAO,CAAE,OAAA,CAAS,qBAAA,CAAuB,OAAQ,GAAI,CAAA,CACrD,OAAQ,GACV,CAAC,EAEH,IAAMT,CAAAA,CAAIH,EAAYa,CAAAA,EAAM,QAAA,CAAW,CAAE,QAAA,CAAUA,CAAAA,CAAK,QAAS,CAAA,CAAI,MAAS,EAC9E,OAAON,CAAAA,CAAK,QAAwB,CAClC,GAAA,CAAK,iBAAiBK,CAAM,CAAA,YAAA,EAAeT,CAAC,CAAA,CAAA,CAC5C,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,oBAAA,CAAqBS,CAAAA,CAA0D,CAC7E,OAAKA,CAAAA,CAOEL,EAAK,OAAA,CAA2B,CACrC,IAAK,CAAA,cAAA,EAAiBK,CAAM,kBAC5B,MAAA,CAAQ,KACV,CAAC,CAAA,CATQ,OAAA,CAAQ,QAAQ,CACrB,IAAA,CAAM,KACN,KAAA,CAAO,CAAE,QAAS,qBAAA,CAAuB,MAAA,CAAQ,GAAI,CAAA,CACrD,MAAA,CAAQ,GACV,CAAC,CAML,EAEA,MAAM,YAAA,CACJA,EACAf,CAAAA,CAC6B,CAC7B,GAAI,CAACe,CAAAA,CACH,OAAO,CACL,IAAA,CAAM,KACN,KAAA,CAAO,CAAE,QAAS,qBAAA,CAAuB,MAAA,CAAQ,GAAI,CAAA,CACrD,MAAA,CAAQ,GACV,CAAA,CAEF,IAAM,EAAI,MAAML,CAAAA,CAAK,QAAc,CACjC,GAAA,CAAK,iBAAiBK,CAAM,CAAA,SAAA,CAAA,CAC5B,OAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,EAC9C,IAAA,CAAMhB,CAAAA,CAAqBC,CAAM,CACnC,CAAC,EACD,OAAOO,CAAAA,CAAgB,CAAC,CAC1B,CAAA,CAEA,eAAA,CAAgBH,CAAAA,CAAuE,CACrF,OAAOM,CAAAA,CAAK,QAAuB,CACjC,GAAA,CAAK,wBAAwBP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CAChD,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,mBAAA,CAAoBA,CAAAA,CAAmE,CACrF,OAAOM,CAAAA,CAAK,QAAmB,CAC7B,GAAA,CAAK,8BAA8BP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CACtD,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,0BAAA,CACEA,CAAAA,CACiD,CACjD,OAAOM,CAAAA,CAAK,QAAkC,CAC5C,GAAA,CAAK,oCAAoCP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CAC5D,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,8BAAA,CACEA,CAAAA,CAC0C,CAC1C,OAAOM,CAAAA,CAAK,QAA2B,CACrC,GAAA,CAAK,0CAA0CP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CAClE,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,yBAAA,CACES,CAAAA,CAC+C,CAC/C,OAAKA,CAAAA,CAOEH,EAAK,OAAA,CAAgC,CAC1C,IAAK,CAAA,kCAAA,EAAqCG,CAAiB,GAC3D,MAAA,CAAQ,KACV,CAAC,CAAA,CATQ,OAAA,CAAQ,QAAQ,CACrB,IAAA,CAAM,KACN,KAAA,CAAO,CAAE,QAAS,iCAAA,CAAmC,MAAA,CAAQ,GAAI,CAAA,CACjE,MAAA,CAAQ,GACV,CAAC,CAML,EAEA,mBAAA,CAAoBT,CAAAA,CAGyB,CAC3C,GAAI,CAACA,EAAO,iBAAA,CACV,OAAO,QAAQ,OAAA,CAAQ,CACrB,KAAM,IAAA,CACN,KAAA,CAAO,CAAE,OAAA,CAAS,iCAAA,CAAmC,OAAQ,GAAI,CAAA,CACjE,OAAQ,GACV,CAAC,EAEH,IAAME,CAAAA,CAAIH,EAAYC,CAAM,CAAA,CAC5B,OAAOM,CAAAA,CAAK,OAAA,CAA2B,CACrC,GAAA,CAAK,CAAA,kCAAA,EAAqCJ,CAAC,CAAA,CAAA,CAC3C,MAAA,CAAQ,KACV,CAAC,CACH,EAMA,qBAAA,CACEF,CAAAA,CACgD,CAChD,OAAOM,CAAAA,CAAK,QAAiC,CAC3C,GAAA,CAAK,8BAA8BP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CACtD,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,aAAA,CAAcQ,CAAAA,CAA+D,CAC3E,OAAOF,CAAAA,CAAK,QAA4B,CACtC,GAAA,CAAK,gBAAgBE,CAAU,CAAA,CAAA,CAC/B,OAAQ,KACV,CAAC,CACH,CAAA,CAMA,uBAAA,CACEC,EAC6C,CAC7C,OAAKA,EAOEH,CAAAA,CAAK,OAAA,CAA8B,CACxC,GAAA,CAAK,CAAA,0BAAA,EAA6BG,CAAiB,CAAA,mBAAA,CAAA,CACnD,OAAQ,KACV,CAAC,EATQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,CAAC,CAML,CAAA,CAMA,oBACEA,CAAAA,CACsF,CACtF,OAAKA,CAAAA,CAOEH,CAAAA,CAAK,QAAuE,CACjF,GAAA,CAAK,6BAA6BG,CAAiB,CAAA,UAAA,CAAA,CACnD,OAAQ,KACV,CAAC,EATQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,CAAC,CAML,CAAA,CAMA,MAAM,YAAA,CAAaE,CAAAA,CAAgBE,EAA6C,CAC9E,GAAI,CAACF,CAAAA,CACH,OAAO,CAAE,IAAA,CAAM,IAAA,CAAM,MAAO,CAAE,OAAA,CAAS,sBAAuB,MAAA,CAAQ,GAAI,EAAG,MAAA,CAAQ,GAAI,EAE3F,IAAM,CAAA,CAAI,MAAML,CAAAA,CAAK,OAAA,CAAc,CACjC,GAAA,CAAK,CAAA,cAAA,EAAiBK,CAAM,CAAA,SAAA,CAAA,CAC5B,MAAA,CAAQ,OACR,OAAA,CAAS,CAAE,eAAgB,kBAAmB,CAAA,CAC9C,KAAM,CAAE,MAAA,CAAAE,CAAO,CACjB,CAAC,EACD,OAAOV,CAAAA,CAAgB,CAAC,CAC1B,CAAA,CAMA,YAAYQ,CAAAA,CAAqD,CAC/D,OAAKA,CAAAA,CAOEL,CAAAA,CAAK,QAAsB,CAChC,GAAA,CAAK,iBAAiBK,CAAM,CAAA,KAAA,CAAA,CAC5B,OAAQ,KACV,CAAC,EATQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,sBAAuB,MAAA,CAAQ,GAAI,EACrD,MAAA,CAAQ,GACV,CAAC,CAML,CAAA,CAEA,oBAAoBA,CAAAA,CAA+C,CACjE,OAAKA,CAAAA,CAOEL,CAAAA,CAAK,QAAgB,CAC1B,GAAA,CAAK,iBAAiBK,CAAM,CAAA,cAAA,CAAA,CAC5B,OAAQ,KACV,CAAC,EATQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,sBAAuB,MAAA,CAAQ,GAAI,EACrD,MAAA,CAAQ,GACV,CAAC,CAML,CAAA,CAEA,oBAAoBA,CAAAA,CAA8D,CAChF,OAAKA,CAAAA,CAOEL,CAAAA,CAAK,QAA+B,CACzC,GAAA,CAAK,iBAAiBK,CAAM,CAAA,cAAA,CAAA,CAC5B,OAAQ,KACV,CAAC,EATQ,OAAA,CAAQ,OAAA,CAAQ,CACrB,IAAA,CAAM,KACN,KAAA,CAAO,CAAE,QAAS,qBAAA,CAAuB,MAAA,CAAQ,GAAI,CAAA,CACrD,MAAA,CAAQ,GACV,CAAC,CAML,EAMA,gBAAA,CAAiBH,CAAAA,CAA0D,CACzE,OAAOF,CAAAA,CAAK,QAAuB,CACjC,GAAA,CAAK,uBAAuBE,CAAU,CAAA,CAAA,CACtC,OAAQ,KACV,CAAC,CACH,CAAA,CAEA,qBAAA,CAAsBA,EAA8D,CAClF,OAAOF,EAAK,OAAA,CAA2B,CACrC,IAAK,CAAA,gCAAA,EAAmCE,CAAU,kBAClD,MAAA,CAAQ,KACV,CAAC,CACH,CAAA,CAEA,qBAAqBA,CAAAA,CAAkE,CACrF,OAAOF,CAAAA,CAAK,OAAA,CAA+B,CACzC,GAAA,CAAK,CAAA,6BAAA,EAAgCE,CAAU,CAAA,CAAA,CAC/C,MAAA,CAAQ,KACV,CAAC,CACH,EAMA,2BAAA,CACER,CAAAA,CACkD,CAClD,OAAOM,CAAAA,CAAK,QAAmC,CAC7C,GAAA,CAAK,qCAAqCP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CAC7D,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,2BAAA,CACEA,CAAAA,CACkD,CAClD,OAAOM,CAAAA,CAAK,QAAmC,CAC7C,GAAA,CAAK,qCAAqCP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CAC7D,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,oBAAA,CACEA,CAAAA,CAC2C,CAC3C,OAAOM,CAAAA,CAAK,QAA4B,CACtC,GAAA,CAAK,kCAAkCP,CAAAA,CAAYC,CAAM,CAAC,CAAA,CAAA,CAC1D,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,MAAM,4BAAA,CAA6BS,EAAwD,CACzF,GAAI,CAACA,CAAAA,CACH,OAAO,CACL,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,EAEF,IAAML,CAAAA,CAAI,MAAME,CAAAA,CAAK,OAAA,CAAc,CACjC,GAAA,CAAK,CAAA,kCAAA,EAAqCG,CAAiB,CAAA,CAAA,CAC3D,MAAA,CAAQ,QACV,CAAC,CAAA,CACD,OAAON,CAAAA,CAAgBC,CAAC,CAC1B,CAAA,CAMA,MAAM,uBAAuBK,CAAAA,CAAwD,CACnF,GAAI,CAACA,CAAAA,CACH,OAAO,CACL,IAAA,CAAM,KACN,KAAA,CAAO,CAAE,QAAS,iCAAA,CAAmC,MAAA,CAAQ,GAAI,CAAA,CACjE,MAAA,CAAQ,GACV,CAAA,CAEF,IAAML,EAAI,MAAME,CAAAA,CAAK,QAAc,CACjC,GAAA,CAAK,6BAA6BG,CAAiB,CAAA,UAAA,CAAA,CACnD,OAAQ,KAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAmB,EAC9C,IAAA,CAAM,CAAE,UAAW,IAAK,CAC1B,CAAC,CAAA,CACD,OAAON,EAAgBC,CAAC,CAC1B,EAEA,MAAM,uBAAA,CAAwBK,EAAwD,CACpF,GAAI,CAACA,CAAAA,CACH,OAAO,CACL,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,EAEF,IAAML,CAAAA,CAAI,MAAME,CAAAA,CAAK,OAAA,CAAc,CACjC,GAAA,CAAK,CAAA,0BAAA,EAA6BG,CAAiB,CAAA,UAAA,CAAA,CACnD,MAAA,CAAQ,MACR,OAAA,CAAS,CAAE,eAAgB,kBAAmB,CAAA,CAC9C,KAAM,CAAE,SAAA,CAAW,KAAM,CAC3B,CAAC,EACD,OAAON,CAAAA,CAAgBC,CAAC,CAC1B,CAAA,CAEA,MAAM,qBAAA,CACJK,CAAAA,CACAK,EAC6B,CAC7B,GAAI,CAACL,CAAAA,CACH,OAAO,CACL,IAAA,CAAM,IAAA,CACN,MAAO,CAAE,OAAA,CAAS,kCAAmC,MAAA,CAAQ,GAAI,EACjE,MAAA,CAAQ,GACV,EAEF,IAAM,CAAA,CAAI,MAAMH,CAAAA,CAAK,OAAA,CAAc,CACjC,GAAA,CAAK,CAAA,0BAAA,EAA6BG,CAAiB,CAAA,aAAA,CAAA,CACnD,MAAA,CAAQ,OACR,OAAA,CAAS,CAAE,eAAgB,kBAAmB,CAAA,CAC9C,KAAMK,CACR,CAAC,EACD,OAAOX,CAAAA,CAAgB,CAAC,CAC1B,CAAA,CAMA,UAA0C,CACxC,OAAOG,EAAK,OAAA,CAAgB,CAC1B,IAAK,yBAAA,CACL,MAAA,CAAQ,KACV,CAAC,CACH,EAEA,MAAM,YAAA,CAAaO,EAA+C,CAChE,GAAI,CAACA,CAAAA,CACH,OAAO,CAAE,IAAA,CAAM,IAAA,CAAM,MAAO,CAAE,OAAA,CAAS,sBAAuB,MAAA,CAAQ,GAAI,EAAG,MAAA,CAAQ,GAAI,EAG3F,IAAMT,CAAAA,CAAI,MAAME,CAAAA,CAAK,OAAA,CAA+D,CAClF,GAAA,CAAK,CAAA,wBAAA,EAA2BO,CAAM,CAAA,MAAA,CAAA,CACtC,MAAA,CAAQ,KACV,CAAC,CAAA,CACD,OAAIT,CAAAA,CAAE,KAAA,CACG,CAAE,IAAA,CAAM,GAAI,KAAA,CAAOA,CAAAA,CAAE,MAAO,MAAA,CAAQA,CAAAA,CAAE,MAAO,CAAA,CAE/C,CAAE,KAAMA,CAAAA,CAAE,IAAA,EAAM,MAAQ,EAAC,CAAG,MAAO,IAAA,CAAM,MAAA,CAAQA,EAAE,MAAO,CACnE,CACF,CACF","file":"index.cjs","sourcesContent":["import { type ClientResult, createHttpClient, type HttpClient } from \"@amaster.ai/http-client\";\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 [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: \"cancel\" | \"startBeforeActivity\" | \"startAfterActivity\" | \"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 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 */\n getProcessXml(processKey: string): Promise<ClientResult<ProcessXmlResponse>>;\n\n // ============================================\n // 活动实例树(运行时)\n // ============================================\n\n /** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */\n getActivityInstanceTree(processInstanceId: string): 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(processKey: string): Promise<ClientResult<StartFormInfo>>;\n\n /** 获取流程启动表单变量 */\n getStartFormVariables(processKey: string): Promise<ClientResult<TaskFormVariables>>;\n\n /** 获取流程部署的启动表单 */\n getDeployedStartForm(processKey: string): 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(processInstanceId: string): 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 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 return http.request<Task[]>({\n url: `/api/bpm/task${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>> {\n return http.request<TaskCount>({\n url: `/api/bpm/task/count${encodeQuery(params)}`,\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 return http.request<HistoryTask[]>({\n url: `/api/bpm/history/task${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>> {\n return http.request<TaskCount>({\n url: `/api/bpm/history/task/count${encodeQuery(params)}`,\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(processKey: string): Promise<ClientResult<ProcessXmlResponse>> {\n return http.request<ProcessXmlResponse>({\n url: `/api/bpm/xml/${processKey}`,\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(processKey: string): Promise<ClientResult<StartFormInfo>> {\n return http.request<StartFormInfo>({\n url: `/api/bpm/start-form/${processKey}`,\n method: \"get\",\n });\n },\n\n getStartFormVariables(processKey: string): Promise<ClientResult<TaskFormVariables>> {\n return http.request<TaskFormVariables>({\n url: `/api/bpm/process-definition/key/${processKey}/form-variables`,\n method: \"get\",\n });\n },\n\n getDeployedStartForm(processKey: string): Promise<ClientResult<CamundaFormDefinition>> {\n return http.request<CamundaFormDefinition>({\n url: `/api/bpm/deployed-start-form/${processKey}`,\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(processInstanceId: string): 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 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 {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\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 {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\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 {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\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
@@ -283,7 +283,6 @@ type HistoryVariableQueryParams = {
283
283
  processInstanceId?: string;
284
284
  variableName?: string;
285
285
  deserializeValues?: boolean;
286
- tenantIdIn?: string;
287
286
  [key: string]: string | number | boolean | undefined;
288
287
  };
289
288
  type TaskFormData = {
@@ -375,13 +374,6 @@ type Role = {
375
374
  description?: string;
376
375
  };
377
376
  type BpmClient = {
378
- /**
379
- * Get approval URL for Workflow Center
380
- * @param processDefinitionId - Format: "{processKey}:{version}:{deploymentId}"
381
- * @param processInstanceId - Process instance ID
382
- * @returns Approval URL: https://{baseDomain}/bpmn-center/{processKey}/{processInstanceId}?appId={appId}&env={env}
383
- */
384
- getApprovalUrl(processDefinitionId: string, processInstanceId: string): string;
385
377
  startProcess(processKey: string, inputs?: Record<string, CamundaVariableValue> | VariableSubmission): Promise<ClientResult<ProcessInstance>>;
386
378
  getProcessInstances(params?: ProcessInstanceQueryParams): Promise<ClientResult<ProcessInstance[]>>;
387
379
  getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>>;
@@ -410,8 +402,8 @@ type BpmClient = {
410
402
  }): Promise<ClientResult<ProcessVariable[]>>;
411
403
  /** 获取流程定义列表 */
412
404
  getProcessDefinitions(params?: ProcessDefinitionQueryParams): Promise<ClientResult<ProcessDefinitionFull[]>>;
413
- /** 获取流程 XML(带 tenantId 支持) */
414
- getProcessXml(processKey: string, tenantId?: string): Promise<ClientResult<ProcessXmlResponse>>;
405
+ /** 获取流程 XML */
406
+ getProcessXml(processKey: string): Promise<ClientResult<ProcessXmlResponse>>;
415
407
  /** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */
416
408
  getActivityInstanceTree(processInstanceId: string): Promise<ClientResult<ActivityInstanceTree>>;
417
409
  /** 获取运行时流程变量 */
@@ -428,11 +420,11 @@ type BpmClient = {
428
420
  /** 获取任务部署的表单定义 */
429
421
  getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>>;
430
422
  /** 获取流程启动表单信息 */
431
- getStartFormInfo(processKey: string, tenantId?: string): Promise<ClientResult<StartFormInfo>>;
423
+ getStartFormInfo(processKey: string): Promise<ClientResult<StartFormInfo>>;
432
424
  /** 获取流程启动表单变量 */
433
- getStartFormVariables(processKey: string, tenantId?: string): Promise<ClientResult<TaskFormVariables>>;
425
+ getStartFormVariables(processKey: string): Promise<ClientResult<TaskFormVariables>>;
434
426
  /** 获取流程部署的启动表单 */
435
- getDeployedStartForm(processKey: string, tenantId?: string): Promise<ClientResult<CamundaFormDefinition>>;
427
+ getDeployedStartForm(processKey: string): Promise<ClientResult<CamundaFormDefinition>>;
436
428
  /** 查询历史活动实例(流程执行轨迹) */
437
429
  getHistoryActivityInstances(params?: HistoryActivityQueryParams): Promise<ClientResult<HistoryActivityInstance[]>>;
438
430
  /** 查询历史变量实例 */
package/dist/index.d.ts CHANGED
@@ -283,7 +283,6 @@ type HistoryVariableQueryParams = {
283
283
  processInstanceId?: string;
284
284
  variableName?: string;
285
285
  deserializeValues?: boolean;
286
- tenantIdIn?: string;
287
286
  [key: string]: string | number | boolean | undefined;
288
287
  };
289
288
  type TaskFormData = {
@@ -375,13 +374,6 @@ type Role = {
375
374
  description?: string;
376
375
  };
377
376
  type BpmClient = {
378
- /**
379
- * Get approval URL for Workflow Center
380
- * @param processDefinitionId - Format: "{processKey}:{version}:{deploymentId}"
381
- * @param processInstanceId - Process instance ID
382
- * @returns Approval URL: https://{baseDomain}/bpmn-center/{processKey}/{processInstanceId}?appId={appId}&env={env}
383
- */
384
- getApprovalUrl(processDefinitionId: string, processInstanceId: string): string;
385
377
  startProcess(processKey: string, inputs?: Record<string, CamundaVariableValue> | VariableSubmission): Promise<ClientResult<ProcessInstance>>;
386
378
  getProcessInstances(params?: ProcessInstanceQueryParams): Promise<ClientResult<ProcessInstance[]>>;
387
379
  getProcessInstance(processInstanceId: string): Promise<ClientResult<ProcessInstance>>;
@@ -410,8 +402,8 @@ type BpmClient = {
410
402
  }): Promise<ClientResult<ProcessVariable[]>>;
411
403
  /** 获取流程定义列表 */
412
404
  getProcessDefinitions(params?: ProcessDefinitionQueryParams): Promise<ClientResult<ProcessDefinitionFull[]>>;
413
- /** 获取流程 XML(带 tenantId 支持) */
414
- getProcessXml(processKey: string, tenantId?: string): Promise<ClientResult<ProcessXmlResponse>>;
405
+ /** 获取流程 XML */
406
+ getProcessXml(processKey: string): Promise<ClientResult<ProcessXmlResponse>>;
415
407
  /** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */
416
408
  getActivityInstanceTree(processInstanceId: string): Promise<ClientResult<ActivityInstanceTree>>;
417
409
  /** 获取运行时流程变量 */
@@ -428,11 +420,11 @@ type BpmClient = {
428
420
  /** 获取任务部署的表单定义 */
429
421
  getTaskDeployedForm(taskId: string): Promise<ClientResult<CamundaFormDefinition>>;
430
422
  /** 获取流程启动表单信息 */
431
- getStartFormInfo(processKey: string, tenantId?: string): Promise<ClientResult<StartFormInfo>>;
423
+ getStartFormInfo(processKey: string): Promise<ClientResult<StartFormInfo>>;
432
424
  /** 获取流程启动表单变量 */
433
- getStartFormVariables(processKey: string, tenantId?: string): Promise<ClientResult<TaskFormVariables>>;
425
+ getStartFormVariables(processKey: string): Promise<ClientResult<TaskFormVariables>>;
434
426
  /** 获取流程部署的启动表单 */
435
- getDeployedStartForm(processKey: string, tenantId?: string): Promise<ClientResult<CamundaFormDefinition>>;
427
+ getDeployedStartForm(processKey: string): Promise<ClientResult<CamundaFormDefinition>>;
436
428
  /** 查询历史活动实例(流程执行轨迹) */
437
429
  getHistoryActivityInstances(params?: HistoryActivityQueryParams): Promise<ClientResult<HistoryActivityInstance[]>>;
438
430
  /** 查询历史变量实例 */
package/dist/index.js CHANGED
@@ -1,3 +1,2 @@
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-z-]+)(?:\/|$)/.exec(t);if(e&&e[1])return e[1];let s=window.location.hostname,r=/^www\.([\da-z-]+)(?:-[^.]+)?\.[\w-]+\.(?:local|ai|cn)$/.exec(s);if(r&&r[1])return r[1];let n=/^([\da-z-]+)(?:-[^.]+)?\.[\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-z-]+-([^.]+)\.[\w-]+\.(?:local|ai|cn)$/.exec(t);if(e&&e[1])return e[1];let s=/^[\da-z-]+-([^.]+)\.[\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
1
+ import {createHttpClient}from'@amaster.ai/http-client';function m(s){return s!=null&&typeof s=="object"&&"variables"in s&&typeof s.variables=="object"&&s.variables!==null}function g(s){if(!s||typeof s!="string")return false;if(/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[+-]\d{4})?)?$/.test(s))return true;let t=Date.parse(s);return !isNaN(t)}function o(s){let e;if(s instanceof Date)e=s;else if(typeof s=="number")e=new Date(s);else if(typeof s=="string"){if(e=new Date(s),isNaN(e.getTime()))return s}else e=new Date(s);return e.toISOString().replace("Z","+0000")}function d(s){if(s!=null){if(typeof s=="string")return "String";if(typeof s=="boolean")return "Boolean";if(typeof s=="number")return Number.isInteger(s)?"Long":"Double";if(s instanceof Date)return "Date";if(typeof s=="object")return "Json"}}function l(s){if(s&&typeof s=="object"&&"value"in s&&("type"in s||Object.keys(s).length<=2)){let t=s;return t.value instanceof Date?{value:o(t.value),type:"Date"}:t.type==="Date"&&(typeof t.value=="string"||typeof t.value=="number")?{value:o(t.value),type:"Date"}:t.type==="String"&&typeof t.value=="string"&&g(t.value)?{value:o(t.value),type:"String"}:t}if(s instanceof Date)return {value:o(s),type:"Date"};let e=s;return {value:e,type:d(e)}}function u(s){if(!s)return {variables:{}};if(m(s)){let t={};for(let[r,i]of Object.entries(s.variables))t[r]=l(i);return {variables:t}}let e={};for(let[t,r]of Object.entries(s))e[t]=l(r);return {variables:e}}function n(s){if(!s)return "";let e=new URLSearchParams;for(let[r,i]of Object.entries(s))i!=null&&e.append(r,String(i));let t=e.toString();return t?`?${t}`:""}function a(s){return s.status===204?{...s,data:null}:s}function p(s=createHttpClient()){return {startProcess(e,t){return e?s.request({url:`/api/bpm/start/${e}`,method:"post",headers:{"Content-Type":"application/json"},data:u(t)}):Promise.resolve({data:null,error:{message:"Process key is required",status:400},status:400})},getProcessInstances(e){return s.request({url:`/api/bpm/process-instance${n(e)}`,method:"get"})},getProcessInstance(e){return e?s.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,t){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=t?.skipCustomListeners?"?skipCustomListeners=true":"",i=await s.request({url:`/api/bpm/process-instance/${e}${r}`,method:"delete"});return a(i)},getActiveActivities(e){return e?s.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){return s.request({url:`/api/bpm/task${n(e)}`,method:"get"})},getTaskCount(e){return s.request({url:`/api/bpm/task/count${n(e)}`,method:"get"})},getTask(e){return e?s.request({url:`/api/bpm/task/${e}`,method:"get"}):Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400})},getTaskFormSchema(e,t){if(!e)return Promise.resolve({data:null,error:{message:"Task ID is required",status:400},status:400});let r=n(t?.redirect?{redirect:t.redirect}:void 0);return s.request({url:`/api/bpm/task/${e}/form-schema${r}`,method:"get"})},getTaskFormVariables(e){return e?s.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,t){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await s.request({url:`/api/bpm/task/${e}/complete`,method:"post",headers:{"Content-Type":"application/json"},data:u(t)});return a(r)},getHistoryTasks(e){return s.request({url:`/api/bpm/history/task${n(e)}`,method:"get"})},getHistoryTaskCount(e){return s.request({url:`/api/bpm/history/task/count${n(e)}`,method:"get"})},getHistoryProcessInstances(e){return s.request({url:`/api/bpm/history/process-instance${n(e)}`,method:"get"})},getHistoryProcessInstanceCount(e){return s.request({url:`/api/bpm/history/process-instance/count${n(e)}`,method:"get"})},getHistoryProcessInstance(e){return e?s.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 t=n(e);return s.request({url:`/api/bpm/history/variable-instance${t}`,method:"get"})},getProcessDefinitions(e){return s.request({url:`/api/bpm/process-definition${n(e)}`,method:"get"})},getProcessXml(e){return s.request({url:`/api/bpm/xml/${e}`,method:"get"})},getActivityInstanceTree(e){return e?s.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?s.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,t){if(!e)return {data:null,error:{message:"Task ID is required",status:400},status:400};let r=await s.request({url:`/api/bpm/task/${e}/delegate`,method:"post",headers:{"Content-Type":"application/json"},data:{userId:t}});return a(r)},getTaskForm(e){return e?s.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?s.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?s.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){return s.request({url:`/api/bpm/start-form/${e}`,method:"get"})},getStartFormVariables(e){return s.request({url:`/api/bpm/process-definition/key/${e}/form-variables`,method:"get"})},getDeployedStartForm(e){return s.request({url:`/api/bpm/deployed-start-form/${e}`,method:"get"})},getHistoryActivityInstances(e){return s.request({url:`/api/bpm/history/activity-instance${n(e)}`,method:"get"})},getHistoryVariableInstances(e){return s.request({url:`/api/bpm/history/variable-instance${n(e)}`,method:"get"})},getUserOperationLogs(e){return s.request({url:`/api/bpm/history/user-operation${n(e)}`,method:"get"})},async deleteHistoryProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let t=await s.request({url:`/api/bpm/history/process-instance/${e}`,method:"delete"});return a(t)},async suspendProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let t=await s.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:true}});return a(t)},async activateProcessInstance(e){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let t=await s.request({url:`/api/bpm/process-instance/${e}/suspended`,method:"put",headers:{"Content-Type":"application/json"},data:{suspended:false}});return a(t)},async modifyProcessInstance(e,t){if(!e)return {data:null,error:{message:"Process instance ID is required",status:400},status:400};let r=await s.request({url:`/api/bpm/process-instance/${e}/modification`,method:"post",headers:{"Content-Type":"application/json"},data:t});return a(r)},getRoles(){return s.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 t=await s.request({url:`/api/runtime/rbac/users/${e}/roles`,method:"get"});return t.error?{data:[],error:t.error,status:t.status}:{data:t.data?.data||[],error:null,status:t.status}}}}export{p as createBpmClient};//# sourceMappingURL=index.js.map
3
2
  //# 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","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-z-]+)(?:\\/|$)/.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-z-]+)(?:-[^.]+)?\\.[\\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-z-]+)(?:-[^.]+)?\\.[\\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-z-]+-([^.]+)\\.[\\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-z-]+-([^.]+)\\.[\\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"]}
1
+ {"version":3,"sources":["../src/bpm-client.ts"],"names":["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","processKey","processInstanceId","result","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\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 [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: \"cancel\" | \"startBeforeActivity\" | \"startAfterActivity\" | \"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 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 */\n getProcessXml(processKey: string): Promise<ClientResult<ProcessXmlResponse>>;\n\n // ============================================\n // 活动实例树(运行时)\n // ============================================\n\n /** 获取活动实例树(完整树形结构,包含子活动和过渡实例) */\n getActivityInstanceTree(processInstanceId: string): 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(processKey: string): Promise<ClientResult<StartFormInfo>>;\n\n /** 获取流程启动表单变量 */\n getStartFormVariables(processKey: string): Promise<ClientResult<TaskFormVariables>>;\n\n /** 获取流程部署的启动表单 */\n getDeployedStartForm(processKey: string): 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(processInstanceId: string): 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 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 return http.request<Task[]>({\n url: `/api/bpm/task${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getTaskCount(params?: TaskQueryParams): Promise<ClientResult<TaskCount>> {\n return http.request<TaskCount>({\n url: `/api/bpm/task/count${encodeQuery(params)}`,\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 return http.request<HistoryTask[]>({\n url: `/api/bpm/history/task${encodeQuery(params)}`,\n method: \"get\",\n });\n },\n\n getHistoryTaskCount(params?: HistoryTaskQueryParams): Promise<ClientResult<TaskCount>> {\n return http.request<TaskCount>({\n url: `/api/bpm/history/task/count${encodeQuery(params)}`,\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(processKey: string): Promise<ClientResult<ProcessXmlResponse>> {\n return http.request<ProcessXmlResponse>({\n url: `/api/bpm/xml/${processKey}`,\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(processKey: string): Promise<ClientResult<StartFormInfo>> {\n return http.request<StartFormInfo>({\n url: `/api/bpm/start-form/${processKey}`,\n method: \"get\",\n });\n },\n\n getStartFormVariables(processKey: string): Promise<ClientResult<TaskFormVariables>> {\n return http.request<TaskFormVariables>({\n url: `/api/bpm/process-definition/key/${processKey}/form-variables`,\n method: \"get\",\n });\n },\n\n getDeployedStartForm(processKey: string): Promise<ClientResult<CamundaFormDefinition>> {\n return http.request<CamundaFormDefinition>({\n url: `/api/bpm/deployed-start-form/${processKey}`,\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(processInstanceId: string): 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 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 {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\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 {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\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 {\n data: null,\n error: { message: \"Process instance ID is required\", status: 400 },\n status: 400,\n };\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.47",
3
+ "version": "1.1.0-beta.48",
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.47"
34
+ "@amaster.ai/http-client": "1.1.0-beta.48"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "axios": "^1.11.0"